Continuous invoice numbers

Every invoice gets the next number in one unbroken per-business sequence, prefixed with the year but never reset.

What it is

Numbers are minted as {prefix}-{year}-{seq} — INV-2026-0001, INV-2026-0002 — from a per-org counter held in invoice_settings. The sequence does not restart in January; the year is a label, not a partition. The prefix is configurable per business.

Also called: invoice number sequence · INV-2026-0001 · numbering

See it
Continuous invoice numbers
Prepared for
Marlin Hoover
1140 Ridge Line Rd · Fair Play
Shell package$36,239
Concrete & site$10,521
Doors & windows$7,014
Trim & finish$4,676
Total
$58,450
Signature
The invoice number chip in the viewer toolbar (mono font, INV-2026-0051) next to the status pill — src/components/invoices/InvoiceViewer.tsx. Sample data — no customer information appears here.
How it works
  1. 1reserveNextNumber() reads the org's invoice_settings row, formats {prefix}-{year}-{padded seq}, then increments next_seq.
  2. 2The number is stamped on the invoice at creation and never changes afterwards.
  3. 3Voided invoices keep their number — nothing is renumbered or reissued.
Why we built it

Invoice numbers that reset every January leave two invoices a year apart sharing a number, and an auditor cannot tell them apart. Numbers now run in one unbroken sequence per business, with the year as a label rather than a counter, and a voided invoice keeps its number instead of freeing it for reuse. A gap in a sequence is normal and expected; the same number appearing twice is the thing an audit flags.

The problem
  • Duplicate invoice numbers created by year-reset sequences.
  • Reused numbers after a cancellation making the books unauditable.
Sound familiar?
What you get
An accountant can reconcile the sequence end-to-end.
A gap is always explainable — it was voided or deleted, with a stored reason.

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →