Engagements and notes
The government ledger's record of industry interactions
An engagement records a real interaction between one organization and one command. Examples include a conference discussion, a technical demonstration, a site visit, or a follow-up. It is the ledger's durable answer to “who met whom, when, and why?”
Engagement
| Column | Prisma type | Required? | Default | Meaning |
|---|---|---|---|---|
id | String | Yes | cuid() | Engagement identifier. |
title | String | Yes | None | Short interaction title. |
type | EngagementType | Yes | None | Interaction category. |
status | EngagementStatus | Yes | PLANNED | Workflow state. |
date | DateTime | Yes | None | Calendar date/time represented as a timestamp. |
location | String? | No | NULL | Place or virtual location. |
summary | String? | No | NULL | Interaction summary. |
organizationId | String | Yes | None | Industry participant. |
commandId | String | Yes | None | Government command responsible. |
createdById | String | Yes | None | Government creator. |
createdAt | DateTime | Yes | now() | Record creation time. |
updatedAt | DateTime | Yes | @updatedAt | Last edit time. |
The required organization, command, and creator foreign keys make an engagement attributable. notes is a one-to-many relation to EngagementNote.
EngagementType
| Value | Meaning |
|---|---|
CONFERENCE | Conference interaction. |
TRADE_SHOW | Trade show or exhibition. |
SYMPOSIUM | Symposium or research gathering. |
INDUSTRY_FORUM | Industry forum. |
TECH_EXERCISE | Technology exercise. |
SITE_VISIT | Visit to an organization or government site. |
MEETING | Ordinary meeting. |
DEMO | Demonstration. |
OTHER | Another interaction type. |
EngagementStatus
| Value | Meaning |
|---|---|
PLANNED | Scheduled but not complete. |
COMPLETED | Interaction occurred. |
FOLLOW_UP | Additional action is needed. |
CLOSED | Ledger work is complete. |
EngagementNote
| Column | Prisma type | Required? | Default | Meaning |
|---|---|---|---|---|
id | String | Yes | cuid() | Note identifier. |
engagementId | String | Yes | None | Parent engagement. |
authorId | String | Yes | None | Government author. |
body | String | Yes | None | Note text. |
createdAt | DateTime | Yes | now() | Creation time. |
Notes are append-style context tied to an engagement and author. They are different from OrgDialogueNote, which is organization-level context not tied to one event.
Duplicate warning
The dashboard looks for possible duplicate coordination when the same organization has engagements with two or more commands within the past 90 days or upcoming. This is a warning for humans, not a uniqueness constraint; the schema intentionally permits legitimate multi-command engagement.
Why creator and author are separate
Engagement.createdById records who created the ledger event. Each EngagementNote.authorId records who added a particular follow-up. A later editor does not become the original creator, and several government users can contribute notes without changing the engagement's creation attribution.
The required commandId is the government-side anchor for reporting and scope. The required organizationId is the industry-side anchor. Both are necessary even if a conversation happened at a neutral event, because the ledger needs explicit accountability.
There is no unique constraint on title/date/organization. The duplicate warning is intentionally advisory because two legitimate meetings can have similar names.