app.projects
TableRow level security on
One engagement with jurisdiction, phase and gates (Section 4.5.1, Section 7.4 Scope). Project data is readable by project members and assigned people, not the whole org (invariant 2).
Primary key: id
| Column | Type | Nullable | Description |
|---|---|---|---|
| id | uuid | No | Primary key, UUID v7. |
| org_id | uuid | No | Owning org. A row never moves to another org.References app.organizations.id |
| workspace_id | uuid | Yes | Workspace that scopes the project, when the org uses workspaces.References app.workspaces.id |
| venue_id | uuid | Yes | Primary venue; its jurisdiction supplies responding agencies (engagement contract project_authority).References app.venues.id |
| client_counterparty_id | uuid | Yes | Client the project is produced for.References app.counterparties.id |
| project_key | text | No | Two to five capital letters, unique per org (for example NWL). Record display keys are {project_key}-{sequence}. |
| name | text | No | Project name. |
| jurisdiction_id | text | Yes | Jurisdiction resolved for the project at gate 1 (Section 3.5). NULL until resolved; an unresolved jurisdiction answers no permit or code question.References xpms.jurisdiction.jurisdiction_id |
| region_code | text | Yes | Cost region the project prices in (Bible tab 12).References xpms.dim_region.region_code |
| tier_code | text | Yes | Tier of experience (Bible tab 07).References xpms.dim_tier.tier_code |
| current_phase_code | text | No | Current gated phase. Changes only through app.pass_gate (invariant 9).References xpms.dim_phase.phase_code |
| project_state | app.project_state | No | Project lifecycle state. Changes only through app.transition_project. |
| production_state | app.production_state | No | Production lifecycle state. Changes only through app.transition_production; Closed refuses new spend (invariant 10). |
| time_zone | text | No | IANA time zone the project's typed local times are entered in. |
| starts_on | date | Yes | First production day. |
| ends_on | date | Yes | Last production day. |
| archived_at | timestamp with time zone | Yes | When the project was archived. Archived projects stay searchable behind a filter (Section 4.10). |
| deleted_at | timestamp with time zone | Yes | Soft delete time. A row with deleted_at set is ignored by every access helper. |
| created_at | timestamp with time zone | No | When the row was inserted. Set by the database. |
| created_by | uuid | Yes | Person who inserted the row, or null for a platform process. Set by the database.References app.people.id |
| updated_at | timestamp with time zone | No | When the row last changed. Set by the database. |
| updated_by | uuid | Yes | Person who last changed the row, or null for a platform process. Set by the database.References app.people.id |
| currency | character(3) | No | Base currency of the project (ISO 4217). Defaults to the currency of the jurisdiction's country, then the org's base currency setting, when the caller gives none.References private.currencies.currency_code |
| description | text | Yes | What the project is, in sentence case. |
| anchor_on | date | Yes | Anchor date (usually the show day) that template day offsets count from. |
| budget_envelope_minor | bigint | Yes | Budget envelope approved for the project, in minor units of currency; NULL when none is set. |