Semantius Logo

HVAC Service Management (small-org starter)

1. Overview

Small-shop persona bundle for HVAC service businesses (5-30 technicians). Single-install deployable covering customer accounts and contacts (CRM), service dispatch and field execution (FSM-DISPATCH-OPS), installed equipment register and PM cadence (FSM-INSTALLED-BASE), recurring maintenance agreements (FSM-SERVICE-CONTRACTS), quote-to-invoice (CPQ + SUB-MGMT), and parts inventory (HAM). Larger organizations deploy the full modules and skip the starter.

2. Entity summary

Namedata_objectDescription
Contactscrm_contactsPeople at customer or prospect organizations, carrying title, contact details, decision-maker flag, preferred channel, and opt-in state.
Customer Invoicescustomer_invoicesSeller-issued invoices billed to customers, with line items, tax, payment terms, due date, and status from draft to paid or written off.
Customer Sitescustomer_sitesPhysical service locations belonging to a customer, where one customer can have many sites across properties or chains.
CustomerscustomersCanonical records of customers, whether business accounts or end consumers, carrying identity, segmentation, lifecycle stage, and account hierarchy.
Dispatch Recordsdispatch_recordsAssignments of a work order to a specific technician at a specific time, capturing dispatch decisions, route output, and dispatcher overrides.
Field Visitsfield_visitsScheduled or completed on-site visits by a field technician, capturing arrival, work performed, parts used, customer signature, and outcome.
Installed Equipmentinstalled_equipmentCustomer-owned equipment that the service organization installs and maintains, with identity, placement, and lifecycle state, covered by work orders and contracts.
Sales Quotessales_quotesVersioned, numbered quote documents with dates, validity, currency, terms, pricing, and status from draft to accepted or lost.
Service Contractsservice_contractsService contracts that carry service-level commitments such as response times, parts coverage, and call-out fees.
Service PM Schedulesservice_pm_schedulesRecurring preventive-maintenance plans for installed equipment, defining cadence, due date, grace window, and overdue escalation.
Service Work Ordersservice_work_ordersCustomer-facing service jobs fulfilled by field visits, distinct from preventive-maintenance work orders.
Spare Part Inventory Itemsspare_parts_inventoryStockroom counts and procurement of replacement hardware components not yet deployed as assets.
UsersusersPlatform users referenced as assignees, authors, approvers, and creators across records.
flowchart TD
  classDef embedded_master fill:#fff4cc,stroke:#c79100,color:#5b4500;
  classDef consumer fill:#e8def8,stroke:#7b1fa2,color:#3a155d;
  customers["Customers"]
  crm_contacts["Contacts"]
  customer_sites["Customer Sites"]
  installed_equipment["Installed Equipment"]
  service_pm_schedules["Service PM Schedules"]
  service_work_orders["Service Work Orders"]
  field_visits["Field Visits"]
  dispatch_records["Dispatch Records"]
  service_contracts["Service Contracts"]
  sales_quotes["Sales Quotes"]
  customer_invoices["Customer Invoices"]
  spare_parts_inventory["Spare Part Inventory Items"]
  users["Users"]
  users -->|"manages stock"| spare_parts_inventory
  service_work_orders -->|"fulfilled_by"| field_visits
  field_visits -->|"dispatched_by"| dispatch_records
  installed_equipment -->|"serviced_by"| service_work_orders
  customer_sites -->|"hosts"| service_work_orders
  service_contracts -->|"covers"| installed_equipment
  installed_equipment -->|"has_pm"| service_pm_schedules
  customer_sites -->|"hosts_equipment"| installed_equipment
  customers -->|"owns_sites"| customer_sites
  customers -->|"is_party_to"| service_contracts
  users -->|"performs_as_technician"| field_visits
  users -->|"assigned_as_technician"| dispatch_records
  users -->|"dispatches"| dispatch_records
  users -->|"creates_work_order"| service_work_orders
  users -->|"manages_as_account_mgr"| service_contracts
  users -->|"installs"| installed_equipment
  users -->|"completes_pm"| service_pm_schedules
  users -->|"owns"| customers
  users -->|"owns"| customers
  customers -->|"has_contacts"| crm_contacts
  users -->|"owns"| crm_contacts
  class customers embedded_master;
  class crm_contacts embedded_master;
  class customer_sites embedded_master;
  class installed_equipment embedded_master;
  class service_pm_schedules embedded_master;
  class service_work_orders embedded_master;
  class field_visits embedded_master;
  class dispatch_records embedded_master;
  class service_contracts embedded_master;
  class sales_quotes embedded_master;
  class customer_invoices embedded_master;
  class spare_parts_inventory embedded_master;
  class users consumer;

3. Entities catalog

#data_objectcanonical codesingularpluralrolemastered inmastered labelnecessitypersonal_contententity_typewrite tiernotes
1crm_contactscrm_contactsContactContactsembedded_mastercrm-acct-mgtAccount and Contact Managementrequiredyesoperational_record:manage-
2customer_invoicescustomer_invoicesCustomer InvoiceCustomer Invoicesembedded_mastersub-mgmt-billingRecurring Billing and Dunningrequired-operational_workflow:manage-
3customer_sitescustomer_sitesCustomer SiteCustomer Sitesembedded_masterfsm-installed-baseInstalled Equipment and Preventive Maintenancerequired-operational_workflow:manage-
4customerscustomersCustomerCustomersembedded_mastercrm-acct-mgtAccount and Contact Managementrequiredyesoperational_workflow:manage-
5dispatch_recordsdispatch_recordsDispatch RecordDispatch Recordsembedded_masterfsm-dispatch-opsField Service Dispatch Operationsrequired-operational_workflow:manage-
6field_visitsfield_visitsField VisitField Visitsembedded_masterfsm-mobile-techMobile Technicianrequiredyesoperational_workflow:manage-
7installed_equipmentinstalled_equipmentInstalled Equipment UnitInstalled Equipmentembedded_masterfsm-installed-baseInstalled Equipment and Preventive Maintenancerequired-operational_workflow:manage-
8sales_quotessales_quotesSales QuoteSales Quotesembedded_mastercpq-quote-builderQuote Construction and Discountingrequired-operational_workflow:manage-
9service_contractsservice_contractsService ContractService Contractsembedded_masterfsm-service-contractsService Contracts and SLAsrequired-operational_workflow:manage-
10service_pm_schedulesservice_pm_schedulesService PM ScheduleService PM Schedulesembedded_masterfsm-installed-baseInstalled Equipment and Preventive Maintenancerequired-operational_workflow:manage-
11service_work_ordersservice_work_ordersService Work OrderService Work Ordersembedded_masterfsm-dispatch-opsField Service Dispatch Operationsrequired-operational_workflow:manage-
12spare_parts_inventoryspare_parts_inventorySpare Part Inventory ItemSpare Part Inventory Itemsembedded_masterham-warranty-partsWarranty, Disposal, and Spare Partsrequired-operational_record:manage-
13usersusersUserUsersconsumer(platform built-in)(platform built-in)required-operational_record:manage-

4. Aliases and industry synonyms

(none: no industry-scoped aliases for this scope)

5. Relationships

5.1 Intra-scope edges

fromverbtocardinalitykindnecessityowner_sidedelete_modefk_formatnotes
service_work_ordersfulfilled_byfield_visitsone_to_manycompositionrequiredsourcecascadeparent-
field_visitsdispatched_bydispatch_recordsone_to_onereferencerequiredsourcerestrictreference-
installed_equipmentserviced_byservice_work_ordersone_to_manyreferenceoptionaltargetclearreference-
customer_siteshostsservice_work_ordersone_to_manyreferencerequiredtargetrestrictreference-
service_contractscoversinstalled_equipmentone_to_manyassociationoptionalsourceclearreference-
installed_equipmenthas_pmservice_pm_schedulesone_to_manyreferencerequiredtargetrestrictreference-
customer_siteshosts_equipmentinstalled_equipmentone_to_manyreferencerequiredtargetrestrictreference-
customersowns_sitescustomer_sitesone_to_manyreferencerequiredtargetrestrictreference-
customersis_party_toservice_contractsone_to_manyreferencerequiredtargetrestrictreference-
customershas_contactscrm_contactsone_to_manyreferenceoptionalsourceclearreference-

5.2 Built-in edges (users and other platform built-ins)

fromverbtocardinalitynecessityowner_sidedelete_modefk_formatnotes
usersmanages stockspare_parts_inventoryone_to_manyoptionalsourceclearreference-
usersperforms_as_technicianfield_visitsone_to_manyrequiredtargetrestrictreference-
usersassigned_as_techniciandispatch_recordsone_to_manyrequiredtargetrestrictreference-
usersdispatchesdispatch_recordsone_to_manyrequiredtargetrestrictreference-
userscreates_work_orderservice_work_ordersone_to_manyrequiredtargetrestrictreference-
usersmanages_as_account_mgrservice_contractsone_to_manyoptionaltargetclearreference-
usersinstallsinstalled_equipmentone_to_manyoptionaltargetclearreference-
userscompletes_pmservice_pm_schedulesone_to_manyoptionaltargetclearreference-
usersownscustomersone_to_manyoptionalsourceclearreference-
usersownscustomersone_to_manyrequiredsourcerestrictreference-
usersownscrm_contactsone_to_manyoptionalsourceclearreference-

5.3 Cross-scope edges

5.3a Outbound from this scope’s masters and contributors

Edges this scope drives: the in-scope endpoint has role of master or contributor.

(none: no outbound cross-scope edges from this scope’s masters or contributors)

5.3b Context edges on embedded shells and consumed entities

Edges the canonical owner drives, shown for context: the in-scope endpoint has role of embedded_master, consumer, or derived.

fromverbtocardinalitynecessitydelete_modefk_formatnotes
hardware_assetsserved_byspare_parts_inventorymany_to_manyoptionalnonen/a-
spare_parts_inventoryrequisitionspurchase_requisitionsone_to_manyoptionalnonen/a-
customersraisescustomer_casesone_to_manyrequirednone (required-if-present)n/a-
customersholdscustomer_entitlementsone_to_manyoptionalnonen/a-
customerssubscribes_tocustomer_subscriptionsone_to_manyoptionalnonen/a-
customersflags_churn_risk_oncrm_opportunitiesone_to_manyoptionalnonen/a-
customer_subscriptionsadjusts dunning forcustomersone_to_manyoptionalnonen/a-
customer_invoicesopenscustomer_casesone_to_manyoptionalnonen/a-
service_work_ordersopenscustomer_casesone_to_manyoptionalnonen/a-
dispatch_recordsopenscustomer_casesone_to_manyoptionalnonen/a-
field_visitsopenscustomer_casesone_to_manyoptionalnonen/a-
hardware_modelsstocksspare_parts_inventoryone_to_manyoptionalnonen/a-
msp_contractsdrives engagementcustomersone_to_manyoptionalnonen/a-
customer_golden_recordsresolves tocustomersone_to_manyoptionalnonen/a-
customersfeedback_routed_fromcustomer_feedback_itemsone_to_manyoptionalnonen/a-
customersimpacted_byproduct_featuresmany_to_manyoptionalnonen/a-
customersimpacted_byproduct_releasesmany_to_manyoptionalnonen/a-
customerstracked_byproduct_metricsmany_to_manyoptionalnonen/a-
customersmonitored_inbeta_programsmany_to_manyoptionalnonen/a-
customersplaceswholesale_ordersone_to_manyrequirednone (required-if-present)n/a-
customersplacesbutcher_ordersone_to_manyrequirednone (required-if-present)n/a-
delivery_routesservescustomersmany_to_manyrequirednone (required-if-present)n/a-
sales_quotesdraftslegal_contractsone_to_manyoptionalnonen/a-
customershas_opportunitiescrm_opportunitiesone_to_manyrequirednone (required-if-present)n/a-
customersconverted_from_leadcrm_leadsone_to_manyoptionalnonen/a-
crm_contactsconverted_from_leadcrm_leadsone_to_manyoptionalnonen/a-
crm_opportunitiesinvolves_contactscrm_contactsmany_to_manyoptionalnonen/a-
customershas_activitiessales_activitiesone_to_manyoptionalnonen/a-
crm_contactshas_activitiessales_activitiesone_to_manyoptionalnonen/a-
cad_drawingsshared_withcustomersmany_to_manyoptionalnonen/a-
customerssubscribes viacsa_membershipsone_to_manyrequirednone (required-if-present)n/a-
customersbuys atfarmers_market_salesone_to_manyoptionalnonen/a-
contact_recordsenrichescrm_contactsone_to_manyoptionalnonen/a-
ad_conversion_eventsconvertscustomersone_to_manyoptionalnonen/a-
activity_bookingsis booked bycustomersmany_to_manyrequirednone (required-if-present)n/a-

6. Cross-domain context

6.1 Master consumers (other modules / domains that embed this scope’s masters)

(none: no other module embeds this scope’s masters; the canonical owners do.)

6.2 Outbound handoffs (events this scope publishes)

source moduletarget domaintarget moduletrigger_eventtransitionpayloadintegrationfrictiondescription
HAM-WARRANTY-PARTSS2P(domain-level)spare_parts_inventory.low_threshold(threshold)spare_parts_inventoryapi_callmediumLow spare-parts levels trigger S2P replenishment requisitions.
FSM-DISPATCH-OPSCSM(domain-level)dispatch.failedscheduledfailed (state_change)dispatch_recordsapi_callhighFailed dispatch must reach CSM for customer rescheduling comm. Failure modes: failure detection lag; rescheduling SLA breached before CSM is informed.
FSM-DISPATCH-OPSCSM(domain-level)service_work_order.completed(state_change)service_work_ordersevent_streamlowField service completion triggers customer satisfaction survey.
FSM-MOBILE-TECHCSM(domain-level)work_order.completedin_progresscompleted (lifecycle)field_visitsapi_callmediumCompleted field visits trigger CSM customer-satisfaction outreach and billing kickoff. Failure modes: technician sign-off lag; partial completion edge cases.
SUB-MGMT-BILLINGCSM(domain-level)customer_invoice.past_due(state_change)customer_invoicesevent_streammediumPast-due invoice triggers CSM outreach to prevent involuntary churn.
FSM-INSTALLED-BASEEAM(domain-level)installed_equipment.decommissionedactivedecommissioned (lifecycle)installed_equipmentapi_callmediumCustomer-side equipment decommissioned; EAM-side asset retirement workflow updates the partner-mastered asset record.
FSM-DISPATCH-OPSFIN(domain-level)service_work_order.completed(state_change)service_work_ordersevent_streamlowBillable hours and materials post to revenue GL.
CPQ-QUOTE-BUILDERFIN(domain-level)sales_quote.approved(state_change)sales_quotesapi_callmediumApproved quote with revenue-recognition implications feeds ERP-FIN forecast and rev-rec rules engine.
SUB-MGMT-BILLINGFIN(domain-level)customer_invoice.issued(state_change)customer_invoicesbatch_syncmediumIssued customer invoices feed AR sub-ledger in ERP-FIN. Friction during rev-rec implementations (ASC 606).
CPQ-QUOTE-BUILDERCRMCRM-PIPELINE-MGTsales_quote.accepted_by_buyer(signal)sales_quotesapi_calllowQuote acceptance advances the linked opportunity to closed-won pending signature.
CRM-ACCT-MGTMAMA-CAMPAIGN-AUTHORINGcrm_contact.syncedsynced (signal)crm_contactsbatch_syncmediumContact updates in CRM (new contact, status change, opt-in change, account ownership) sync to MA so audience lists and campaigns stay current. Batch-sync is the typical pattern - real-time would be ideal but most stacks accept hourly or daily latency here.
SUB-MGMT-BILLINGB2C-COMMB2C-COMM-ORDER-CAPTUREcustomer_invoice.issued(state_change)customer_invoicesapi_calllowIssued invoice surfaces in the customer portal.
CRM-ACCT-MGTCPQCPQ-PRODUCT-CATALOGaccount.tier_changed(state_change)customersevent_streammediumAccount tier change cascades to CPQ for price-list assignment.
CPQ-QUOTE-BUILDERSUB-MGMT(domain-level)sales_quote.accepted_by_buyer(signal)sales_quotesapi_callmediumAccepted quote with subscription terms triggers SUB-MGMT to provision the subscription record.
CRM-ACCT-MGTSALES-PERF(domain-level)account.tier_changed(state_change)customersapi_callmediumAccount tier changes trigger territory or quota realignment. Failure modes: mid-quarter changes invalidate existing assignments; commission impact is retroactive.
FSM-DISPATCH-OPSFLEET-MGMT(domain-level)service_work_order.assigned(state_change)service_work_ordersevent_streamlowService dispatch optimizes technician vehicle routing.
CRM-ACCT-MGTFARMER-DIRECT-SALESFDS-CSA-MGMTaccount_health.declined(threshold)customersapi_callmedium-
CRM-ACCT-MGTFARMER-DIRECT-SALESFDS-CSA-MGMTcustomer.churn_confirmedat_riskchurned (lifecycle)customersevent_streamhigh-
CRM-ACCT-MGTFARMER-DIRECT-SALESFDS-CSA-MGMTcustomer.signed_upsigned_up (lifecycle)customersevent_streamlow-
CRM-ACCT-MGTFARMER-DIRECT-SALESFDS-CSA-MGMThealth_score.declined(threshold)customersapi_callmedium-
CRM-ACCT-MGTFARMER-DIRECT-SALESFDS-WHOLESALEaccount.tier_changed(state_change)customersapi_callmedium-

6.3 Inbound handoffs (events this scope reacts to)

target modulesource domainsource moduletrigger_eventtransitionpayloadintegrationfrictiondescription
CRM-ACCT-MGTCSM(domain-level)case.critical_health_drop(threshold)customersapi_callhighCluster of critical cases or sustained low CSAT triggers an account-health-drop signal back to CRM, surfacing as a churn-risk flag on the account. High friction because the threshold definition is org-specific and the CRM-side account-health field rarely has good UX for the alert.
CRM-ACCT-MGTCSM(domain-level)health_score.declined(threshold)customersevent_streammediumDeclining health score surfaces churn risk to CRM for sales-rep awareness during renewal.
CRM-ACCT-MGTCSM(domain-level)subscription.expansion_requested(signal)customersmanual_handoffmediumCSM-identified expansion creates a CRM opportunity. Often a manual handoff with poor close-the-loop visibility.
CRM-ACCT-MGTCRMCRM-LEAD-MGTcrm_lead.converted(lifecycle)customerslifecycle_progressionlow-
CRM-ACCT-MGTCRMCRM-LEAD-MGTcrm_lead.converted(lifecycle)crm_contactslifecycle_progressionlow-
CRM-ACCT-MGTCRMCRM-PIPELINE-MGTcrm_opportunity.closed_won(state_change)customerslifecycle_progressionlow-
CRM-ACCT-MGTB2C-COMMB2C-COMM-ORDER-CAPTUREcustomer.signed_upsigned_up (lifecycle)customersevent_streamlowStorefront signup creates the canonical customer record in CRM. Low friction in B2C-native integrated stacks; medium in stitched-together stacks.
CRM-ACCT-MGTCDPCDP-UNIFIED-PROFILEprofile.lifecycle_changed(signal)customersevent_streammediumCDP-detected lifecycle stage change (new → engaged → loyal → at-risk → churned) updates the customer record in CRM. Friction comes from CDP’s lifecycle model not matching CRM’s account-status taxonomy.
CRM-ACCT-MGTMDM(domain-level)customer_golden_record.createdactive (lifecycle)customersapi_callmediumResolved golden ID + merged attributes; CRM links operational record.
CRM-ACCT-MGTSUB-MGMTSUB-MGMT-SUBSCRIPTIONSsubscription.activatedactivated (lifecycle)customersevent_streamlowSubscription activation marks the account as an active customer in CRM, updates ARR rollups, and unlocks customer-success workflows. Low friction when same-vendor stack; medium when CRM and billing are separate.
CRM-ACCT-MGTSMM(domain-level)social_engagement.recordedrecorded (signal)customersbatch_syncmediumSocial engagement enriches CRM contact records. Friction in identity-resolution across handles.
CRM-ACCT-MGTFARMER-DIRECT-SALESFDS-CSA-MGMTcsa_membership.activateddraftactive (lifecycle)customersapi_calllowCSA membership activation creates or enriches the underlying CRM-mastered customer record with membership status, share preferences, and pickup location.
SUB-MGMT-BILLINGSUB-MGMTSUB-MGMT-SUBSCRIPTIONSsubscription.activatedactivated (lifecycle)customer_invoiceslifecycle_progressionlowActivating a subscription triggers the first invoice so billing begins as soon as the customer is live.
SUB-MGMT-BILLINGSUB-MGMTSUB-MGMT-SUBSCRIPTIONSsubscription.renewal_required(threshold)customer_invoiceslifecycle_progressionlowA renewal coming due triggers the recurring invoice run so the next billing period is invoiced on time.

6.4 Master providers (modules / domains that own masters this scope embeds)

data_objectrole herenecessitycanonical owner(s)slice notes
crm_contactsembedded_masterrequiredCRM-ACCT-MGT (CRM)-
customer_invoicesembedded_masterrequiredSUB-MGMT-BILLING (SUB-MGMT)-
customer_sitesembedded_masterrequiredFSM-INSTALLED-BASE (FSM)-
customersembedded_masterrequiredCRM-ACCT-MGT (CRM)-
dispatch_recordsembedded_masterrequiredFSM-DISPATCH-OPS (FSM)-
field_visitsembedded_masterrequiredFSM-MOBILE-TECH (FSM)-
installed_equipmentembedded_masterrequiredFSM-INSTALLED-BASE (FSM)-
sales_quotesembedded_masterrequiredCPQ-QUOTE-BUILDER (CPQ)-
service_contractsembedded_masterrequiredFSM-SERVICE-CONTRACTS (FSM)-
service_pm_schedulesembedded_masterrequiredFSM-INSTALLED-BASE (FSM)-
service_work_ordersembedded_masterrequiredFSM-DISPATCH-OPS (FSM)-
spare_parts_inventoryembedded_masterrequiredHAM-WARRANTY-PARTS (HAM)-
usersconsumerrequired(platform built-in)-

7. Lifecycle states

crm_contacts (Contact)

This scope holds crm_contacts as embedded_master; the canonical state machine is owned by CRM-ACCT-MGT.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1active---Contact is current and reachable.
2inactive----Contact is no longer engaged but record retained.
3unsubscribed---Contact has opted out of all channels.

customer_invoices (Customer Invoice)

This scope holds customer_invoices as embedded_master; the canonical state machine is owned by SUB-MGMT-BILLING.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft---Invoice assembled but not yet issued to the customer.
2issued--hvac-svc-mgmt:issue_invoiceInvoice finalized and delivered to the customer (AR open).
3paid---Invoice settled in full.
4overdue----Due date elapsed without payment; dunning may trigger.
5written_off---Invoice deemed uncollectible and removed from AR.
6voided---Invoice canceled before settlement (correction/reissue).

customer_sites (Customer Site)

This scope holds customer_sites as embedded_master; the canonical state machine is owned by FSM-INSTALLED-BASE.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1prospect---Site captured during sales/quote phase; no service has been performed yet.
2active----Site is in service; one or more installed_equipment units or active work orders exist.
3inactive----Site temporarily not serviced (seasonal closure, customer pause). Equipment remains on file.
4terminated-hvac-svc-mgmt:terminate_siteSite removed from service (sold, demolished, customer churn). Triggers contract and PM termination.

customers (Customer)

This scope holds customers as embedded_master; the canonical state machine is owned by CRM-ACCT-MGT.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1prospect---Pre-customer account being courted by sales.
2active----Customer is engaged and in good standing.
3inactive----Customer is dormant but not churned.
4past_due----Customer carries an overdue invoice or failed payment.
5canceled----Customer ended all subscriptions; no active billing.
6churned---Customer has terminated the relationship.

dispatch_records (Dispatch Record)

This scope holds dispatch_records as embedded_master; the canonical state machine is owned by FSM-DISPATCH-OPS.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1pending---Dispatch assignment created, awaiting technician acceptance.
2dispatched----Technician has been notified and accepted the assignment.
3en_route----Technician is traveling to the customer site.
4on_site----Technician has arrived at the customer site.
5returned---Technician has departed the site; dispatch closed.

field_visits (Field Visit)

This scope holds field_visits as embedded_master; the canonical state machine is owned by FSM-MOBILE-TECH.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1scheduled---Visit is booked on the technician’s calendar.
2in_progress----Technician has started the visit on-site.
3completed---Visit finished; work performed and signed off.
4no_show---Visit could not be performed because customer or technician was absent.

installed_equipment (Installed Equipment Unit)

This scope holds installed_equipment as embedded_master; the canonical state machine is owned by FSM-INSTALLED-BASE.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1pending_install---Unit purchased and tracked; physical installation not yet performed.
2active--hvac-svc-mgmt:activate_equipmentUnit installed and operational. Eligible for PM schedules and reactive work orders.
3service_due----PM cycle is due or reactive issue is open. Cleared when the work order completes.
4out_of_service--hvac-svc-mgmt:mark_out_of_serviceUnit is non-operational pending repair. PM schedules paused; reactive work orders still allowed.
5decommissioned-hvac-svc-mgmt:decommission_equipmentUnit permanently removed from service. Triggers contract coverage termination and PM schedule cancellation.
6replaced-hvac-svc-mgmt:replace_equipmentUnit physically replaced by a new installed_equipment record. The replacement carries forward warranty and contract coverage.

sales_quotes (Sales Quote)

This scope holds sales_quotes as embedded_master; the canonical state machine is owned by CPQ-QUOTE-BUILDER.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft---Quote being assembled and priced by the sales rep.
2submitted_for_approval---Quote locked and routed to the deal-desk approver.
3approved---Approver authorizes the quote for presentation to the customer.
4presented----Quote delivered to the customer for decision.
5accepted---Customer accepted the quote; flows to contract draft.
6declined---Customer declined the quote.
7expired---Quote validity window elapsed without a decision.

service_contracts (Service Contract)

This scope holds service_contracts as embedded_master; the canonical state machine is owned by FSM-SERVICE-CONTRACTS.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1draft---Contract is being drafted and not yet binding.
2active--hvac-svc-mgmt:activate_service_contractContract is in force and SLAs apply.
3expired---Contract term has ended without renewal.
4renewed---Contract has been renewed; superseded by a new term.

service_pm_schedules (Service PM Schedule)

This scope holds service_pm_schedules as embedded_master; the canonical state machine is owned by FSM-INSTALLED-BASE.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1scheduled---Future PM cycle scheduled. No action required yet.
2due----Cycle has reached its due date. Triggers proactive work-order generation.
3in_grace----Cycle past due date but inside the grace window; auto-escalates to overdue on grace expiry.
4overdue--hvac-svc-mgmt:escalate_overdueCycle past grace; alert sent to account manager. Triggers a high-priority service work order if one is not already open.
5completed-hvac-svc-mgmt:complete_pmCycle satisfied by a closed work order. Triggers the next cycle to be scheduled.
6skipped-hvac-svc-mgmt:skip_pmCycle deliberately skipped (customer refused service, equipment decommissioned mid-cycle, contract lapsed).

service_work_orders (Service Work Order)

This scope holds service_work_orders as embedded_master; the canonical state machine is owned by FSM-DISPATCH-OPS.

orderstate_nameinitial?terminal?requires_permission?derived gatedescription
1created---Work order logged, awaiting scheduling.
2scheduled----Work order placed on the dispatch schedule.
3dispatched----Technician has been assigned and notified.
4in_progress----Technician is actively performing the work.
5completed--hvac-svc-mgmt:complete_service_work_orderAll work performed and signed off by the customer.
6invoiced----Work order has been billed to the customer.
7closed---Work order finalized; no further action required.
8canceled-hvac-svc-mgmt:cancel_service_work_orderWork order canceled before completion.

8. Permissions and business rules (derived)

8.1 Permissions

permissiontierdescriptionincluded in :admin?
hvac-svc-mgmt:readbaseline-readRead access to every entity in the module
hvac-svc-mgmt:managebaseline-manageEdit operational records
hvac-svc-mgmt:adminbaseline-adminEdit reference data and inherit every workflow gate below-
hvac-svc-mgmt:issue_invoiceworkflow-gate (lifecycle)Transition customer_invoices into state issued
hvac-svc-mgmt:complete_service_work_orderworkflow-gate (lifecycle)Transition service_work_orders into state completed
hvac-svc-mgmt:cancel_service_work_orderworkflow-gate (lifecycle)Transition service_work_orders into state canceled
hvac-svc-mgmt:activate_service_contractworkflow-gate (lifecycle)Transition service_contracts into state active
hvac-svc-mgmt:activate_equipmentworkflow-gate (lifecycle)Transition installed_equipment into state active
hvac-svc-mgmt:mark_out_of_serviceworkflow-gate (lifecycle)Transition installed_equipment into state out_of_service
hvac-svc-mgmt:decommission_equipmentworkflow-gate (lifecycle)Transition installed_equipment into state decommissioned
hvac-svc-mgmt:replace_equipmentworkflow-gate (lifecycle)Transition installed_equipment into state replaced
hvac-svc-mgmt:escalate_overdueworkflow-gate (lifecycle)Transition service_pm_schedules into state overdue
hvac-svc-mgmt:complete_pmworkflow-gate (lifecycle)Transition service_pm_schedules into state completed
hvac-svc-mgmt:skip_pmworkflow-gate (lifecycle)Transition service_pm_schedules into state skipped
hvac-svc-mgmt:terminate_siteworkflow-gate (lifecycle)Transition customer_sites into state terminated
hvac-svc-mgmt:view_all_customersoverride (personal_content)View all customers rows beyond row-scope
hvac-svc-mgmt:manage_all_customersoverride (personal_content)Manage all customers rows beyond row-scope
hvac-svc-mgmt:view_all_contactsoverride (personal_content)View all crm_contacts rows beyond row-scope
hvac-svc-mgmt:manage_all_contactsoverride (personal_content)Manage all crm_contacts rows beyond row-scope
hvac-svc-mgmt:view_all_field_visitsoverride (personal_content)View all field_visits rows beyond row-scope
hvac-svc-mgmt:manage_all_field_visitsoverride (personal_content)Manage all field_visits rows beyond row-scope

8.2 Business rules

rule_namedata_objectsource flagintent
customer_edit_scopecustomershas_personal_contentRow-scope by default; override via hvac-svc-mgmt:view_all_customers / hvac-svc-mgmt:manage_all_customers
contact_edit_scopecrm_contactshas_personal_contentRow-scope by default; override via hvac-svc-mgmt:view_all_contacts / hvac-svc-mgmt:manage_all_contacts
field_visit_edit_scopefield_visitshas_personal_contentRow-scope by default; override via hvac-svc-mgmt:view_all_field_visits / hvac-svc-mgmt:manage_all_field_visits

9. Roles, RACI, and responsibilities (derived)

Baseline roles, the permission hierarchy, and RACI realization are DERIVED from this scope’s entity-type write tiers + process_raci; none of it is stored in the catalog (the deployer provisions it from this blueprint).

9.1 HVAC-SVC-MGMT

Baseline roles:

rolebaseline grant
hvac-svc-mgmt_viewerhvac-svc-mgmt:read
hvac-svc-mgmt_managerhvac-svc-mgmt:manage

Permission hierarchy:

permissionincludes
hvac-svc-mgmt:adminhvac-svc-mgmt:manage
hvac-svc-mgmt:managehvac-svc-mgmt:read
hvac-svc-mgmt:adminhvac-svc-mgmt:issue_invoice
hvac-svc-mgmt:adminhvac-svc-mgmt:complete_service_work_order
hvac-svc-mgmt:adminhvac-svc-mgmt:cancel_service_work_order
hvac-svc-mgmt:adminhvac-svc-mgmt:activate_service_contract
hvac-svc-mgmt:adminhvac-svc-mgmt:activate_equipment
hvac-svc-mgmt:adminhvac-svc-mgmt:mark_out_of_service
hvac-svc-mgmt:adminhvac-svc-mgmt:decommission_equipment
hvac-svc-mgmt:adminhvac-svc-mgmt:replace_equipment
hvac-svc-mgmt:adminhvac-svc-mgmt:escalate_overdue
hvac-svc-mgmt:adminhvac-svc-mgmt:complete_pm
hvac-svc-mgmt:adminhvac-svc-mgmt:skip_pm
hvac-svc-mgmt:adminhvac-svc-mgmt:terminate_site
hvac-svc-mgmt:adminhvac-svc-mgmt:view_all_customers
hvac-svc-mgmt:adminhvac-svc-mgmt:manage_all_customers
hvac-svc-mgmt:adminhvac-svc-mgmt:view_all_contacts
hvac-svc-mgmt:adminhvac-svc-mgmt:manage_all_contacts
hvac-svc-mgmt:adminhvac-svc-mgmt:view_all_field_visits
hvac-svc-mgmt:adminhvac-svc-mgmt:manage_all_field_visits

RACI realization:

(none: no process_raci assignments wired to this module’s gated processes yet)

9.2 Functional ownership and default grants

(none: no business_function_domains rows for this scope’s domain)