A purchase order number generator has one job it must never get wrong

Updated

Generating purchase order numbers looks trivial and has exactly one hard requirement: never issue the same number twice. Everything else, the format, whether it carries a prefix, how long it is, is preference. The uniqueness requirement is where manual and improvised schemes fail, and the failure is permanent because there is no retrospective fix.

Uniqueness from a single source

Numbers issued by one authority, sequentially, with no gaps that somebody might be tempted to fill. Spreadsheets fail this when two people work simultaneously or when a file is restored from an older copy, and both happen. A reused number makes two transactions permanently indistinguishable in every downstream record.

Meaningless beats meaningful

Encoding a department, a site or a year feels helpful and becomes a liability when the organisation changes shape or a project spans a year boundary. Put the meaning in fields on the order, where it can be changed and reported on, and keep the identifier as a plain handle. Dull identifiers age better than clever ones.

Readable and hard to mistype

Order numbers get read over the phone and rekeyed into supplier systems. Avoid characters that look alike, keep the length modest, and consider a check digit at high volume. Every mistyped reference becomes an invoice that will not match, which is a manual investigation caused by a formatting decision.

Questions people ask about purchase order number generator

Should we use a prefix?

A prefix per legal entity is usually fine, since entities are stable. Prefixes per department cause trouble the first time the organisation is restructured.

Can we start from a particular number?

Yes, and starting a new sequence well clear of any legacy numbers avoids accidental collisions with historical records.

What if a number is issued and the order is cancelled?

Leave the gap. Reissuing the number is exactly the failure to avoid.

Sources

Related answers

Start Threewayly ProKeep the match, not the spreadsheet