Lifecycle and Fulfillment Status
Every PR, PO, and SO has two independent statuses — one tracks approval, the other tracks delivery.
Lifecycle and Fulfillment Status#
Neriyam's core transactional documents — purchase requisitions, purchase orders, and sales orders — carry two independent status fields, not one.
- Lifecycle status tracks the document's approval journey. It is moved by people: users submit, managers approve, someone cancels. This is the paperwork state.
- Fulfillment status tracks how much of the document has actually been executed downstream. It is moved by the system based on linked documents. This is the physical state.
The two are independent. A purchase order can be Approved + Partially Received — it was approved by management AND 60% of the goods have arrived. These are separate facts and deserve separate fields.
Why two statuses#
A single "status" field cannot express both truths cleanly. Take these real scenarios:
- A PO was approved last week. The supplier has delivered half. Is the PO "approved" or "in progress"?
- A sales order was approved. The customer accepted the first two lines and cancelled the rest — we short-closed it. Is it "approved" or "closed"?
- A PR was drafted, submitted, approved, and a PO has been raised for it. What about the PR now?
With two statuses, each question has a clear answer:
- Lifecycle = Approved, Fulfillment = Partially Received
- Lifecycle = Approved, Fulfillment = Short Closed
- Lifecycle = Approved, Fulfillment = Fully Ordered
Lifecycle status values#
All transactional documents share the same six lifecycle values. Not every document uses every value — for example, only purchase orders use the "Sent" state.
| Code | Label | Meaning |
|---|---|---|
D | Draft | Being created or edited. Can be deleted. |
P | Pending Approval | Submitted for review. Locked from editing. |
A | Approved | Reviewed and approved. Can now be acted on downstream. |
R | Rejected | Sent back by the approver. Can be edited and resubmitted, or deleted. |
SN | Sent | (PO only) Officially communicated to the supplier. |
CN | Cancelled | Voided. No further action possible. |
Fulfillment status values#
Fulfillment labels depend on the document type — they describe what that document is fulfilling.
Purchase requisitions — Order Status#
Tracks how much of the requested quantity has been converted into purchase orders.
| Code | Label |
|---|---|
NO | Not Ordered |
PO | Partially Ordered |
FO | Fully Ordered |
CL | Closed |
Purchase orders — Receipt Status#
Tracks how much of the ordered quantity has actually been received via GRNs.
| Code | Label |
|---|---|
NR | Not Received |
PR | Partially Received |
FR | Fully Received |
SC | Short Closed |
Sales orders — Delivery Status#
Tracks how much of the ordered quantity has been delivered via sales delivery notes.
| Code | Label |
|---|---|
ND | Not Delivered |
PD | Partially Delivered |
FD | Fully Delivered |
SC | Short Closed |
Where you see the two statuses#
On list pages#
List pages for PR, PO, and SO show both statuses as separate colour-coded badges, side by side.
As filters#
Each status has its own filter dropdown on the list page. Filter by lifecycle (e.g., show me all approved POs) and by fulfillment (e.g., show me everything still not received) independently.
On detail pages#
Detail pages display both badges at the top. Line-level fulfillment (e.g., how much of this SO line has shipped) appears next to each line.
How each status moves#
Lifecycle — moved by people#
| From | Action | To | Who |
|---|---|---|---|
| D / R | Submit for Approval | P | Creator (with manage permission) |
| P | Approve | A | Approver (with approve permission) |
| P | Reject | R | Approver (with approve permission) |
| P | Recall | D | Creator (with manage permission) |
| A | Mark as Sent | SN | User with send permission (PO only) |
| A / SN | Cancel | CN | User with manage permission |
The same flow as a state diagram:
stateDiagram-v2 [*] --> Draft Draft --> Pending: Submit Rejected --> Pending: Submit Pending --> Draft: Recall Pending --> Approved: Approve Pending --> Rejected: Reject Approved --> Sent: Mark as Sent (PO only) Approved --> Cancelled: Cancel Sent --> Cancelled: Cancel
Fulfillment — moved by the system#
The fulfillment status updates automatically whenever a linked downstream document is submitted or cancelled.
- A PR's Order Status goes from
NO→PO→FOas you create POs against its lines. - A PO's Receipt Status goes from
NR→PR→FRas you post GRNs against it. - An SO's Delivery Status goes from
ND→PD→FDas you post sales deliveries against it. - "Short Closed" (
SC) and "Closed" (CL) are set when someone explicitly closes the remaining balance rather than fulfilling it.
You do not change fulfillment status by hand. It is always a consequence of other actions.
Typical combinations#
| Lifecycle | Fulfillment | What it means |
|---|---|---|
| D, ND | Draft SO being built | Normal — no deliveries possible yet |
| P, ND | SO awaiting approval | No action downstream yet |
| A, ND | SO approved but nothing shipped | Ready to deliver |
| A, PD | SO approved, some lines partially shipped | Common mid-fulfillment state |
| A, FD | SO fully delivered | Done — can archive |
| A, SC | Approved SO, remaining qty short-closed | Customer cancelled balance; book-closed |
| CN, PD | SO cancelled after partial delivery | Rare but possible — deliveries that already happened stay; rest cancelled |
Related#
- Approval workflow — detailed walk-through of Draft → Pending → Approved
- Sales orders — sees both statuses in action
Last updated