Numbering sequences

The per-company generator behind every readable document number — jobs, change notices, payments, and more.

Every document Carbon creates gets a : a job is J000001, a change notice is CN-000001, a payment is PAY-2026-07-000001. Those numbers come from , one small counter per document type per company. Sequences live under Settings → Sequences; every company is seeded with a full set, and you can retune any of them (prefix, counter, padding) without touching code.

When something needs a number, Carbon assembles it from three parts and advances the counter in the same operation, so two documents never collide:

{prefix}{next + step, zero-padded to size}{suffix}
NOTE

The number is stored on the document, not recomputed

Once created, a document's number never changes. Retuning a sequence only affects documents created after the change; it never renumbers what exists.

Fields

The form previews the next number as you type.
FieldType
Text prepended to the number. Optional; supports date tokens, so PAY-%{yyyy}-%{mm}- renders as PAY-2026-07-.
The last value handed out; the next document gets Current + Step. Set it to restart or fast-forward numbering. Must be ≥ 0.
Zero-padding width: size 6 gives 000001. Accepted range 120; most sequences ship at 6.
How much the counter climbs each time. Almost always 1; must be ≥ 1.
Text appended after the number. Optional; same date tokens as the prefix.

Date tokens

Prefix and suffix can embed the current date — how payments and journal entries get their year/month partitioning. Tokens are interpolated when the number is generated, not when you save: %{yyyy} (2026), %{yy} (26), %{mm} (01–12), %{dd} (01–31), plus %{hh} and %{ss} for hour and second.

HEADS UP

Hour and second tokens don't work for every document type

Customers, suppliers, and quotes are numbered by a database trigger that only understands the four date tokens; putting %{hh} or %{ss} in those sequences leaves the literal token in the number. Stick to date tokens unless you know the document type is generated by an edge function.

Seed defaults

A new company is seeded with a sequence for every numbered document type:

Document typetablePrefixExample
JobjobJJ000001
QuotequoteQQ000001
Sales ordersalesOrderSOSO000001
Sales RFQsalesRfqRFQRFQ000001
Sales invoicesalesInvoiceARAR000001
Purchase orderpurchaseOrderPOPO000001
Purchase invoicepurchaseInvoiceAPAP000001
Purchasing RFQpurchasingRfqPRFQPRFQ000001
Supplier quotesupplierQuoteSQSQ000001
ReceiptreceiptRERE000001
ShipmentshipmentSHPSHP000001
Warehouse transferwarehouseTransferWTWT000001
Stock transferstockTransferSTST000001
Picking listpickingListPLPL000001
Inventory countinventoryCountICIC000001
Change noticechangeOrderCN-CN-000001
Issue (NCR)nonConformanceNCRNCR000001
Inbound inspectioninboundInspectionIIII000001
GaugegaugeGG00001
Maintenance dispatchmaintenanceDispatchMAINMAIN000001
CustomercustomerCUSCUS000001
SuppliersupplierSUPSUP000001
Fixed assetfixedAssetFAFA000001
Depreciation rundepreciationRunDRDR000001
Journal entryjournalEntryJE-%{yyyy}-%{mm}-JE-2026-07-000001
PaymentpaymentPAY-%{yyyy}-%{mm}-PAY-2026-07-000001
Credit memocreditMemoCR-%{yyyy}-%{mm}-CR-2026-07-000001
Debit memodebitMemoDR-%{yyyy}-%{mm}-DR-2026-07-000001

A prefix on an older company may differ: a few sequences added after launch were backfilled with different defaults (jobs as WO, change notices re-prefixed from ECO- without renumbering existing records). Either way, change it under Settings → Sequences.

Accounting posts are the heaviest user of this machinery: every GL post pulls a fresh journalEntry number as it books, which is why that sequence carries a month token by default. Sequences are company-scoped, so two companies in the same group number independently even when they share a chart of accounts. Where the numbers land day to day: jobs, change notices, and payments.