Skip to content

Purchase Orders

A Purchase Order (PO) is a request from a Customer to a Vendor to purchase goods. When accepted by the vendor, it becomes a contract for supply of goods subject to the terms and conditions in the order.

Organization: A legal entity that can enter into contracts with other organizations — companies, departments, government agencies, etc.

Contact: A person who can act on behalf of an organization.

Vendor: An organization that commercially offers goods for sale.

Customer: An organization that commercially acquires goods.

Supplier: An organization that fulfills goods in response to a commercial transaction. In the context of a Purchase Order (for the current scope), Vendor and Supplier are assumed to be the same organization.

Consumer: An organization that receives goods resulting from a commercial transaction. In the current scope, Customer and Consumer are assumed to be the same organization.

Carrier: The organization responsible for the physical transfer of goods from a supplier to a consumer. Specifically, the party presenting the Bill of Lading at delivery. For the current scope, carriers are often left unspecified.

Purchase Order Line (PoLine): Specifies a quantity of a given item to be purchased within the context of a PO, including unit price, total price, and any item-specific information not already in the PO header.

A Purchase Order is a journaled entity scoped to a tenant. All fields become read-only once the order leaves the NEW state, except for privateNotes.

FieldTypeDefaultUser EditableDescription
statusPoStatusNEWNoCurrent lifecycle state
orderNumberStringAuto-generated (PO#####)NoHuman-readable order identifier
orderDateDateCreation dateYesDate the order is submitted
allowPartialBooleantrueYesWhether partial deliveries are accepted
deliverByDateTimeCreation dateYesExpected complete delivery date
deliveryAddressAddressBlank (future: from tenant/facility)YesDelivery destination
procurementContactCurrent userYesCustomer-side contact for the order
supplierNameStringFrom lines if availableYesSupplier responsible for fulfillment
supplierAddressAddressFrom lines if availableYesSupplier’s address
orderMethodOrderMethodUNKNOWN or from linesYesHow the order is submitted to the supplier
salesContactFrom supplier info if availableYesVendor-side contact for the order
goodsValueMoneyCalculatedNoSum of all PoLine values
taxesAndFeesMap of String to MoneyEmptyYesAdditional charges (delivery fees, taxes, etc.)
totalAmountMoneyCalculatedNogoodsValue + all taxesAndFees entries
termsAndConditionsStringBlankYesFree-form T&C text
notesStringBlankYesGeneral notes (included in vendor communication)
privateNotesStringBlankYesInternal notes (not shared with vendor)

Each PoLine specifies one item quantity within a purchase order. PoLine status is a computed (transient) state not stored explicitly, to avoid updating all lines when item data changes.

FieldTypeDescription
statusPoLineStatusCurrent computed state of the line
itemReference to ItemThe item being ordered
supplierSkuStringVendor’s SKU for the item (from item supply info)
quantityQuantityAmount ordered
unitCostMoneyCost per unit
costMoneyTotal cost (unitCost × quantity.amount)
receivedQuantityAmount received against this line
notesStringInstructions or communication to the vendor
privateNotesStringInternal notes not shared with the vendor

All fields except notes and received become read-only once the order is submitted.

StateDescription
NEWOrder created; being edited and defined
APPROVEDOrder finalized within the customer organization; ready to send to vendor
SUBMITTEDOrder sent to the vendor
IN_PROCESSVendor has started processing; goods are expected
PARTIALLY_RECEIVEDSome goods have been delivered but not all
RECEIVEDAll goods have been delivered
CLOSEDOrder marked complete by the customer; accounting effects triggered
CANCELLEDOrder cancelled before fulfillment or after (vendor accepted cancellation)
REJECTEDCustomer has rejected some or all delivered goods
DISPUTEDDisagreement between vendor and customer about fulfillment
SignalDescriptionEffects
approveMark the order as APPROVEDFields and lines become read-only
submitSend the order to the vendorSystem actions depend on orderMethod; transitions to SUBMITTED
shipVendor has started fulfillmentTransitions to IN_PROCESS
receiveGoods received against the orderRecords received quantities; transitions to PARTIALLY_RECEIVED or RECEIVED
complete_receiveAll expected goods receivedTransitions to RECEIVED
cancelCancel the orderTransitions to CANCELLED
rejectCustomer rejects delivered goodsTransitions to REJECTED
disputeRegister a fulfillment disagreementTransitions to DISPUTED
closeMark the order completeTransitions to CLOSED; triggers accounting effects

Some signals are composites of elementary signals:

  • submit from NEW is equivalent to [approve, submit]
  • complete from any state is the shortest valid sequence to reach CLOSED
StateDescription
BLANKLine created with no item assigned
CURRENTItem assigned and up to date
STALEItem has been modified since it was added to the line
INVALIDItem has been deleted
RECEIVINGOrder submitted; receiving in progress
COMPLETEDLine fully received

Purchase order lines carry a demand relationship to kanban cards. When an order is created from the order queue (a set of cards in REQUESTED state), the PoLines are associated with the cards that triggered them. When the order is received, the associated cards advance through the fulfillment portion of the kanban lifecycle.

See Kanban Cards for the card state model.

Excluded from this document: REST API endpoint specifications, request/response schemas, filtering/pagination parameters, and the complete list of current implementation constraints belong in the Current System section. The tracking information (GitHub issues, milestones) is also excluded as it is implementation-level project tracking.