BC Job Number (2026-07-30)
JES/Groundworks are retiring customer numbers; their new indexing is
customer name, address, or BC Job Number. Platform change (entirely-api
5c175c3, entirely-portal 51f7baf, migration 029):
projects.bc_job_number+ppdr_staging.bc_job_number(text NULL);projects_enrichedextended;ppdr_staging.customer_numberNOT NULL dropped.- Both references are now OPTIONAL at intake (portal wizard, intake-ui at unlikely.icu, triage new-project form). The old “Customer number is required for JES branches” guards are gone (routes/intake.py, services/intake_requests.py).
- Display rule everywhere (certs, invoices, portal, unlikely.report): customer_number wins with its existing label; when absent, bc_job_number renders with label “BC Job Number” / “BC Job #“.
- Plumbing:
config.FIELD_BC_JOB_NUMBER = "s_bc_job_number"pseudo-slug →SUPABASE_FIELD_MAP→ flows generically through create_record / update_record / _record_from_row. - Invoice INV Reference composite is
(customer_number or bc_job_number)-project_id; remittance parsing already extracts the project-id pattern regardless of prefix. - unlikely.report URLs fall back to the BC number as path segment; resolver matches either column; index pages label the ref “BC Job” when it matched bc_job_number.
- Search: quick-search, projects list, /projects/suggest, triage check, and the portal client-side filters all match bc_job_number.
Known gap: ppdr_matcher still keys on customer_number only — Stephaney’s
workbook has no BC column yet. Extend matcher + workbook ingestion when JES
starts sending BC numbers on the tracker.
Related: cert-public-hosting, confidence-routing