2 min readSep 7, 2026by jakub
Document Numbering
Give every invoice, shipment, credit memo and order a number your accountant will accept — one that follows the pattern your jurisdiction expects, never repeats, and can be explained line by line when someone asks where a gap came from.
Latest version: 1.0.0 — changelog

Why it matters
- Numbering that matches local rules. Build the number from date, store, website, document type and counter tokens instead of accepting Magento's single incrementing sequence.
- Numbers that cannot collide. Every allocation passes through a claim ledger, so two documents issued at the same moment cannot take the same number.
- A gap you can account for. The register records every allocation, reservation, conversion and failure, so a missing number has a recorded reason rather than a shrug.
- Corrections that stay defensible. An assigned number can be changed by an authorized admin, with a mandatory reason, and the old number is retired permanently rather than silently reused.
- Series you can retire safely. Once a series has issued its first document, its fiscal fields freeze — the rules stop moving under documents that already exist.
Features
| Feature | Benefit |
|---|---|
| Numbering Series | Define one numbering scheme per document type and scope, instead of one global sequence for the whole store. |
| Format tokens | Compose the number from date, store, website, document type and counter parts, so it reads the way your accountant expects. |
| Series matchers | Apply a series only to the store, website, customer group, country or currency it belongs to. |
| Strict and fast allocation | Choose gapless numbering inside the document's own transaction, or faster throughput when contention matters more. |
| Per-scope counters | Run a separate counter per store, per website or per token combination rather than one counter for everything. |
| Reset policies | Restart the counter daily, monthly or yearly — or never — without hand-editing anything. |
| Numbering Register | Read an append-only record of every number issued, reserved, converted or refused. |
| Change an assigned number | Correct a number after the fact, under ACL, with a reason recorded and the old number retired. |
| REST API | Manage series from your own tooling or a deployment pipeline. |
| CLI commands | Audit the register, move a counter by hand, expire dead reservations, and renumber existing documents. |
What sets it apart
- API-first. Every series operation is available over REST, so numbering configuration can live in your deployment pipeline rather than in a screenshot of an admin form.
- No third-party service. Counters, claims and the register live in your own database. Nothing about your sales documents leaves the store.

Supported versions
PHP 8.1, 8.2, 8.3, 8.4 and 8.5. Magento Open Source and Mage-OS on magento/framework ^103.0, with magento/module-sales ^103.0 or ^104.0.