BCC schema — tabs & objects

Billing Control Center after Quote-rooted dual-mode. Financial spine is Quote → Invoice → Payment → Commission. Work Order Ledger stays operational (unchanged bucket logic).

Deployed propump-production Invoice__c.Quote__c Commission__c.Invoice__c WO Ledger untouched
How to read this Each BCC shell tab lists the Salesforce objects it uses. Accent-outlined nodes in the graph are the financial path. Ledger nodes are ops only.

Object graph

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.

OpportunityId Quote__c Opportunity__c MD lookup MD MD Invoice__c junction junction ParentRecordId Work_Order__c Opportunity Quote Invoice__c Invoice_Line__c Invoice_Payment__c Commission__c Opp↔WO WorkOrder ServiceAppointment WO_Ledger__c

Tabs → objects

ORDERS

Work Order Ledger

Operations & reconciliation — visit evidence, not Quote invoicing

Root: Work_Order_Ledger__c → WorkOrder
Writes: Assign ServiceAppointment.Opportunity__c (modal)

ObjectRoleAccess
Work_Order_Ledger__cList grain / headerRead
WorkOrderOps parent; stamp is field-ops onlyRead
ServiceAppointmentVisit buckets; Opportunity__c attributionRead / assign
Opportunity_WorkOrder__cWO ↔ Opportunity junctionRead
OpportunityLinked jobs, amounts, owner filterRead
Work_Order_Ledger_Entry__cTimeline in detail / modalRead
INVOICING

Invoicing

Quote-rooted commercial entry — expandable invoices under each parent

Root: Quote (or legacy Opportunity + Quote_Number__c)
Writes: Create Draft Invoice__c · Mark Issued

ObjectRoleAccess
QuoteCommercial parent (GrandTotal / TotalPrice)Read
OpportunityAlways on invoice; legacy parent when no QuoteRead
Invoice__cChildren via Quote__c (+ Opportunity__c)Create / issue
Invoice_Line__cLines + SA/WO evidence on create/issueCreate
AccountDisplay / invoice accountRead
RECEIVABLES

Receivables

Cash collection on issued invoices — multi-payment per invoice

Root: Invoice__c (no Draft)
Writes: Invoice_Payment__c · set amount · Opp billing status

ObjectRoleAccess
Invoice__cAR grain (Sent / Partial / Paid)Update amount
Invoice_Payment__cDate, Amount, Method, ReferenceCreate
Invoice_Line__cAttribution narrativesRead
OpportunityOwner filter; Billing_Status__c on receiptUpdate status
COMMISSIONS

Commissions

Sales comp — Accrued → Payable → Paid (per invoice when linked)

Root: Commission__c
Writes: Manual rate · pay selected

ObjectRoleAccess
Commission__cOpp MD + optional Invoice__c lookupUpdate / pay
Invoice__cPayable only when balance = 0Read (gate)
OpportunityJob context; legacy paidInFull pathRead
UserSales_Person__cRead

Invoicing metrics (parent row)

Quote Amount
GrandTotal → TotalPrice
Legacy: Opportunity.Amount
Total Invoiced
Sent + Partial + Paid
Draft excluded
Draft
Reserved capacity
Hidden from Receivables
Remaining to Invoice
Quote − all non-Void
Includes Draft reservation

Lifecycle & outside the shell

Invoice

  • Create → Draft
  • Mark Issued → Sent
  • Payment → Partially Paid / Paid

Commission

  • Issue → Accrued (Invoice-linked)
  • Partial pay → stays Accrued
  • Invoice balance = 0 → Payable → Paid

Outside shell tabs

  • Work Order page: billingControlWorkOrderBillingContext (read-only Quote + Invoice)
  • WO Ledger page: related work / quick-view (same ORDERS Apex)