Job OS Reactive electrical contracts — quote to invoice
One system, five stages

Quote request → PO issued → works + proof → invoice

Every job carries one reference number end to end. Click any card to open it and move it forward. Persisted to Supabase — refresh and it's still here.

Connecting to Supabase…

Renewal book

Forward-looking certificate expiries, generated from certification time + a verified interval.

Interval basis, checked live 2026-09-19: Domestic rented — 5 years, confirmed statutory (Electrical Safety Standards in the Private Rented Sector (England) Regulations 2020 — gov.uk). Domestic owner-occupied — 10 years, industry guidance (IET). Commercial — 5 years typical / 3 years higher-risk, industry guidance (IET Guidance Note 3, referenced by insurers/leases/HSE, not itself statute). Industrial — 3 years, industry guidance (risk-based; shorter for harsher environments). Minor Works Certificates carry no standard expiry — not scheduled here. Where an interval is "industry guidance," it's labelled that way in this book, not stated as law — confirm for this specific installation.
DueRefClientSiteCertificateBasisIssuedExpiryEst. valueStatus

Local leads

Scored from real held EPC + business data — never fabricated.

Enter a UK postcode and run the search.

Margin per job

Quoted vs materials vs labour (at the configured hourly rate) vs invoiced.

By client

ClientJobsQuotedMaterialsLabourInvoicedMargin

By job type

Job typeJobsQuotedMaterialsLabourInvoicedMargin

By job

RefClientTypeQuotedMaterialsHoursLabourInvoicedMargin

PO & payment reconciliation

PO value vs invoiced vs paid, with shortfalls and ageing flagged.

RefClientPOPO valueInvoicedPaidDays since invoiceFlag

Client-facing certificate portals

Token-scoped, read-only. Never a raw table select — every read goes through a security-definer RPC that validates the token server-side.

Not covered yet (stated plainly): no accounting-package sync (Xero/QuickBooks), no e-signature, no email/SMS delivery of quotes or invoices (deliberately — this build never sends anything to anyone), no multi-user login, no engineer scheduling/calendar, no real payment collection (payments are logged manually, not processed), no full offline write queue (a dropped save shows an error and keeps your input in the form/localStorage draft — it does not silently retry once signal returns). Overdue-invoice chasing beyond stage 5: a separate tool of that name exists in the ATTOH Apps estate but is itself "in build" behind a waitlist, not a live working tool — so it is not wired in, and this app's own ref/PO fields are just kept compatible with its scheme for later.