Billing Control Center after Quote-rooted dual-mode. Financial spine is Quote → Invoice → Payment → Commission. Work Order Ledger stays operational (unchanged bucket logic).
Quote is commercial SoT for new invoices. Opportunity remains on every Invoice and Commission for compatibility. Legacy rows keep Quote__c / Commission.Invoice__c null.
Operations & reconciliation — visit evidence, not Quote invoicing
| Object | Role | Access |
|---|---|---|
Work_Order_Ledger__c | List grain / header | Read |
WorkOrder | Ops parent; stamp is field-ops only | Read |
ServiceAppointment | Visit buckets; Opportunity__c attribution | Read / assign |
Opportunity_WorkOrder__c | WO ↔ Opportunity junction | Read |
Opportunity | Linked jobs, amounts, owner filter | Read |
Work_Order_Ledger_Entry__c | Timeline in detail / modal | Read |
Quote-rooted commercial entry — expandable invoices under each parent
| Object | Role | Access |
|---|---|---|
Quote | Commercial parent (GrandTotal / TotalPrice) | Read |
Opportunity | Always on invoice; legacy parent when no Quote | Read |
Invoice__c | Children via Quote__c (+ Opportunity__c) | Create / issue |
Invoice_Line__c | Lines + SA/WO evidence on create/issue | Create |
Account | Display / invoice account | Read |
Cash collection on issued invoices — multi-payment per invoice
| Object | Role | Access |
|---|---|---|
Invoice__c | AR grain (Sent / Partial / Paid) | Update amount |
Invoice_Payment__c | Date, Amount, Method, Reference | Create |
Invoice_Line__c | Attribution narratives | Read |
Opportunity | Owner filter; Billing_Status__c on receipt | Update status |
Sales comp — Accrued → Payable → Paid (per invoice when linked)
| Object | Role | Access |
|---|---|---|
Commission__c | Opp MD + optional Invoice__c lookup | Update / pay |
Invoice__c | Payable only when balance = 0 | Read (gate) |
Opportunity | Job context; legacy paidInFull path | Read |
User | Sales_Person__c | Read |