CRM: Leads and commission
Technical specification for leads and commission tracking in the PestControlOS CRM (PWA).
Data model
- Firestore: Collection
Leads. Document fields: lead details, assignment (AssignedTechKey, display name), invoice status (Pending, Sent, Paid, Overdue), commission amount or formula inputs, materials cost, payment status. Commission structure configurable (e.g. percentage of invoice, fixed bonus); auto-calculation in client or Cloud Function. - Filtering: By technician, lead type, invoice status. Admin sees all; technician sees only assigned leads. Query:
where('AssignedTechKey', '==', request.auth.token.contractKey)for tech; no filter for admin.
Permissions
- Mark as paid / Add–Edit materials: Restricted to admins (001, 002, 004). Firestore rules: allow update of
invoiceStatusormaterialsCostonly whenrequest.auth.token.role in ['admin','super_admin']or similar. Technician can read assigned leads but cannot write these fields. - Lead creation and assignment: Admin can create and assign to any technician. Technician may create lead with self-assignment only (if allowed). Assignment triggers in-app notification to assignee (write to
notifications/{user}/items).
Overrides
- Administrative override controls for commission or invoice status; audit trail via notification or document history. No client-side only enforcement; rules must enforce role.
Commission calculation
- Formula may be stored in config or Firestore; applied on read or via Cloud Function. Materials cost deducted from commission where applicable. Export or report for payroll/audit.