Documentation

Technical documentation for the PestControlOS CRM and Android app.

Architecture, security, Firestore model, and feature details for developers and technical reviewers.

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 invoiceStatus or materialsCost only when request.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.