Domain Model
Project
Fields
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string.uuid | Yes | — | Id |
| createdAt | string.date-time | Yes | — | Created at |
| updatedAt | string.date-time | Yes | — | Updated at |
| opportunityId | unknown | Yes | — | ID of the associated opportunity |
| acceptedQuoteId | unknown | Yes | — | ID of the associated accepted quote |
| customerId | string | Yes | — | ID of the associated customer |
| siteId | unknown | Yes | — | ID of the associated site |
| primaryContactId | unknown | Yes | — | ID of the associated primary contact |
| name | string | Yes | — | Name |
| description | unknown | Yes | — | Description |
| status | enum(planning, active, on_hold, completed, canceled) | Yes | — | Status |
| priority | unknown | Yes | — | Priority |
| projectType | unknown | Yes | — | Project type |
| startDate | unknown | Yes | — | Start date |
| targetEndDate | unknown | Yes | — | Target end date |
| actualEndDate | unknown | Yes | — | Actual end date |
| projectManagerUserId | unknown | Yes | — | ID of the associated project manager user |
| percentComplete | unknown | Yes | — | Percent complete |
| hasChangeOrders | boolean | Yes | — | Has change orders |
| materialBudget | unknown | Yes | — | Material budget |
| laborBudget | unknown | Yes | — | Labor budget |
| recurringBudget | unknown | Yes | — | Recurring budget |
| totalBudget | unknown | Yes | — | Total budget |
| discountTotal | unknown | Yes | — | Discount total |
| taxTotal | unknown | Yes | — | Tax total |
| scopeOfWork | unknown | Yes | — | Scope of work |
| assumptions | unknown | Yes | — | Assumptions |
| exclusions | unknown | Yes | — | Exclusions |
| warrantyTerms | unknown | Yes | — | Warranty terms |
| permitRequired | unknown | Yes | — | Permit required |
| permitNotes | unknown | Yes | — | Permit notes |
| insuranceRequirements | unknown | Yes | — | Insurance requirements |
| projectTimelineEstimate | unknown | Yes | — | Project timeline estimate |
| siteAccessInstructions | unknown | Yes | — | Site access instructions |
| aiSummary | unknown | Yes | — | Ai summary |
| actualMaterialCost | unknown | No | — | Actual material cost |
| actualLaborCost | unknown | No | — | Actual labor cost |
| actualTotalCost | unknown | No | — | Actual total cost |
| budgetVariance | unknown | No | — | Budget variance |
| budgetConsumedPercent | unknown | No | — | Budget consumed percent |
| riskLevel | unknown | No | — | Risk level |
| changeOrderCount | unknown | No | — | Change order count |
| changeOrderValue | unknown | No | — | Change order value |
| customerApprovalStatus | unknown | No | — | Customer approval status |
| billingMilestonesCompleted | unknown | No | — | Billing milestones completed |
| billingMilestonesTotal | unknown | No | — | Billing milestones total |
| lastActivityAt | unknown | No | — | Last activity at |
| workspaceId | string | Yes | — | ID of the associated workspace |
| visibilityMode | enum(global, workspace_local, shared) | Yes | — | Visibility mode |
Create Schema
Fields accepted when creating a new record:
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| opportunityId | string | No | — | ID of the associated opportunity |
| acceptedQuoteId | string | No | — | ID of the associated accepted quote |
| customerId | string | Yes | — | ID of the associated customer |
| siteId | string | No | — | ID of the associated site |
| primaryContactId | string | No | — | ID of the associated primary contact |
| name | string | Yes | — | Name |
| description | string | No | — | Description |
| status | enum(planning, active, on_hold, completed, canceled) | Yes | "planning" | Status |
| priority | enum(low, medium, high, urgent) | Yes | "medium" | Priority |
| projectType | enum(new_construction, retrofit, service_agreement, expansion, other) | No | — | Project type |
| startDate | string.date-time | No | — | Start date |
| targetEndDate | string.date-time | No | — | Target end date |
| actualEndDate | string.date-time | No | — | Actual end date |
| projectManagerUserId | unknown | No | — | ID of the associated project manager user |
| percentComplete | unknown | No | — | Percent complete |
| materialBudget | unknown | No | — | Material budget |
| laborBudget | unknown | No | — | Labor budget |
| recurringBudget | unknown | No | — | Recurring budget |
| totalBudget | unknown | No | — | Total budget |
| discountTotal | unknown | No | — | Discount total |
| taxTotal | unknown | No | — | Tax total |
| scopeOfWork | string | No | — | Scope of work |
| assumptions | string | No | — | Assumptions |
| exclusions | string | No | — | Exclusions |
| warrantyTerms | string | No | — | Warranty terms |
| permitRequired | boolean | No | — | Permit required |
| permitNotes | string | No | — | Permit notes |
| insuranceRequirements | string | No | — | Insurance requirements |
| projectTimelineEstimate | string | No | — | Project timeline estimate |
| siteAccessInstructions | string | No | — | Site access instructions |
| aiSummary | string | No | — | Ai summary |
| riskLevel | enum(low, medium, high, critical) | No | — | Risk level |
| customerApprovalStatus | enum(not_required, pending, approved, rejected) | No | "not_required" | Customer approval status |
| changeOrderCount | integer | No | — | Change order count |
| changeOrderValue | number | No | — | Change order value |
| workspaceId | string | No | — | ID of the associated workspace |
| visibilityMode | enum(global, workspace_local, shared) | Yes | "workspace_local" | Visibility mode |
Update Schema
All fields are optional when updating:
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| opportunityId | string | No | — | ID of the associated opportunity |
| acceptedQuoteId | string | No | — | ID of the associated accepted quote |
| customerId | string | No | — | ID of the associated customer |
| siteId | string | No | — | ID of the associated site |
| primaryContactId | string | No | — | ID of the associated primary contact |
| name | string | No | — | Name |
| description | string | No | — | Description |
| status | enum(planning, active, on_hold, completed, canceled) | No | "planning" | Status |
| priority | enum(low, medium, high, urgent) | No | "medium" | Priority |
| projectType | enum(new_construction, retrofit, service_agreement, expansion, other) | No | — | Project type |
| startDate | string.date-time | No | — | Start date |
| targetEndDate | string.date-time | No | — | Target end date |
| actualEndDate | string.date-time | No | — | Actual end date |
| projectManagerUserId | unknown | No | — | ID of the associated project manager user |
| percentComplete | unknown | No | — | Percent complete |
| materialBudget | unknown | No | — | Material budget |
| laborBudget | unknown | No | — | Labor budget |
| recurringBudget | unknown | No | — | Recurring budget |
| totalBudget | unknown | No | — | Total budget |
| discountTotal | unknown | No | — | Discount total |
| taxTotal | unknown | No | — | Tax total |
| scopeOfWork | string | No | — | Scope of work |
| assumptions | string | No | — | Assumptions |
| exclusions | string | No | — | Exclusions |
| warrantyTerms | string | No | — | Warranty terms |
| permitRequired | boolean | No | — | Permit required |
| permitNotes | string | No | — | Permit notes |
| insuranceRequirements | string | No | — | Insurance requirements |
| projectTimelineEstimate | string | No | — | Project timeline estimate |
| siteAccessInstructions | string | No | — | Site access instructions |
| aiSummary | string | No | — | Ai summary |
| riskLevel | enum(low, medium, high, critical) | No | — | Risk level |
| customerApprovalStatus | enum(not_required, pending, approved, rejected) | No | "not_required" | Customer approval status |
| changeOrderCount | integer | No | — | Change order count |
| changeOrderValue | number | No | — | Change order value |