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 |
| engagementType | enum(direct_to_end_user, subcontracted_by_upstream, prime_with_subcontractors, upstream_and_downstream, service_only, warranty_only, internal, other) | No | — | Engagement type |
| communicationPolicy | enum(unrestricted, through_upstream_only, direct_after_closeout, emergency_direct_only, internal_review_required) | No | — | Communication policy |
| deliveryBrandingMode | enum(our_brand, upstream_white_label, co_branded, internal_only) | No | — | Delivery branding mode |
| postCloseoutServicePolicy | enum(transfers_to_end_user, remains_with_customer_of_record, remains_with_upstream, remains_with_property_manager, manual_review, no_service_relationship) | No | — | Post closeout service policy |
| workspaceId | string | Yes | — | ID of the associated workspace |
| visibilityMode | unknown | 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 |
| engagementType | enum(direct_to_end_user, subcontracted_by_upstream, prime_with_subcontractors, upstream_and_downstream, service_only, warranty_only, internal, other) | No | "direct_to_end_user" | Engagement type |
| communicationPolicy | enum(unrestricted, through_upstream_only, direct_after_closeout, emergency_direct_only, internal_review_required) | No | "unrestricted" | Communication policy |
| deliveryBrandingMode | enum(our_brand, upstream_white_label, co_branded, internal_only) | No | "our_brand" | Delivery branding mode |
| postCloseoutServicePolicy | enum(transfers_to_end_user, remains_with_customer_of_record, remains_with_upstream, remains_with_property_manager, manual_review, no_service_relationship) | No | "transfers_to_end_user" | Post closeout service policy |
| endUserOrganizationId | unknown | No | — | ID of the associated end user organization |
| upstreamOrganizationId | unknown | No | — | ID of the associated upstream organization |
| workspaceId | string | No | — | ID of the associated workspace |
| visibilityMode | unknown | No | — | 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 | — | Status |
| priority | enum(low, medium, high, urgent) | No | — | 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 | — | Customer approval status |
| changeOrderCount | integer | No | — | Change order count |
| changeOrderValue | number | No | — | Change order value |
| engagementType | enum(direct_to_end_user, subcontracted_by_upstream, prime_with_subcontractors, upstream_and_downstream, service_only, warranty_only, internal, other) | No | — | Engagement type |
| communicationPolicy | enum(unrestricted, through_upstream_only, direct_after_closeout, emergency_direct_only, internal_review_required) | No | — | Communication policy |
| deliveryBrandingMode | enum(our_brand, upstream_white_label, co_branded, internal_only) | No | — | Delivery branding mode |
| postCloseoutServicePolicy | enum(transfers_to_end_user, remains_with_customer_of_record, remains_with_upstream, remains_with_property_manager, manual_review, no_service_relationship) | No | — | Post closeout service policy |
| endUserOrganizationId | unknown | No | — | ID of the associated end user organization |
| upstreamOrganizationId | unknown | No | — | ID of the associated upstream organization |