Neriyam
Open App

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.

CodeLabelMeaning
DDraftBeing created or edited. Can be deleted.
PPending ApprovalSubmitted for review. Locked from editing.
AApprovedReviewed and approved. Can now be acted on downstream.
RRejectedSent back by the approver. Can be edited and resubmitted, or deleted.
SNSent(PO only) Officially communicated to the supplier.
CNCancelledVoided. 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.

CodeLabel
NONot Ordered
POPartially Ordered
FOFully Ordered
CLClosed

Purchase orders — Receipt Status#

Tracks how much of the ordered quantity has actually been received via GRNs.

CodeLabel
NRNot Received
PRPartially Received
FRFully Received
SCShort Closed

Sales orders — Delivery Status#

Tracks how much of the ordered quantity has been delivered via sales delivery notes.

CodeLabel
NDNot Delivered
PDPartially Delivered
FDFully Delivered
SCShort 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#

FromActionToWho
D / RSubmit for ApprovalPCreator (with manage permission)
PApproveAApprover (with approve permission)
PRejectRApprover (with approve permission)
PRecallDCreator (with manage permission)
AMark as SentSNUser with send permission (PO only)
A / SNCancelCNUser 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 NOPOFO as you create POs against its lines.
  • A PO's Receipt Status goes from NRPRFR as you post GRNs against it.
  • An SO's Delivery Status goes from NDPDFD as 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#

LifecycleFulfillmentWhat it means
D, NDDraft SO being builtNormal — no deliveries possible yet
P, NDSO awaiting approvalNo action downstream yet
A, NDSO approved but nothing shippedReady to deliver
A, PDSO approved, some lines partially shippedCommon mid-fulfillment state
A, FDSO fully deliveredDone — can archive
A, SCApproved SO, remaining qty short-closedCustomer cancelled balance; book-closed
CN, PDSO cancelled after partial deliveryRare but possible — deliveries that already happened stay; rest cancelled

Last updated