Skip to main content
Version: v1.0.0

Modules

A module is an operational capability — a kind of record that does something, moves stock, and progresses through a lifecycle. Where master data is the set of stable nouns, modules are the verbs: placing a purchase order, producing finished goods, shipping a sale.

The defining idea of the Pharus architecture is that each module is independent. Each one has its own lifecycle and its own well-defined effect on inventory. You can adopt a module on its own, and you can combine modules in different ways depending on how your business runs — that's what the Pipelines section is about.

Orders

The order modules each represent a commitment that plays out over time.

ModuleIn one line
Purchase OrdersBuy materials or finished goods from a vendor
Work OrdersSend materials out for contract assembly and get products back
Production OrdersSubcontract full manufacturing of a product
Sales OrdersCommit to ship products to a customer
Sales ReceiptsRecord a direct-to-consumer sale in fractional cases
Sales ReturnsBring product back from a completed sale and restock it

Inventory

The inventory modules are the running record of stock.

ModuleIn one line
Materials InventoryThe ledger of raw-material stock
Finished Goods InventoryThe ledger of product stock
Inventory TransfersMove stock between locations

Inventory ledger events

Every order module ultimately writes to one or both inventory ledgers. Rather than flipping a single stock number, each movement is appended as a ledger entry, and the current position is derived by summing those entries. The vocabulary is shared across modules and is identical on both ledgers: seven events cover everything either one can do.

This is the single canonical list of every event the two ledgers can hold. Each forward event has a matching REVERSE_ form that backs it out (how a cancelled order or a corrected mistake is undone), and the two order-closing figures carry a SETTLE_ form that trues an order's open position to zero when it closes. ADJUST and DISPOSE are the manual events and have no reverse; to undo one, post its opposite.

EventReverses withSettles withMeaning
ORDERREVERSE_ORDERSETTLE_ORDERPlaced on an order, expected in but not yet received
RECEIVEREVERSE_RECEIVE(none)Arrived into a location: bought, produced, or transferred in
DEMANDREVERSE_DEMAND(none)Wanted by a sales order, or by a job that consumes it
ALLOCATEREVERSE_ALLOCATESETTLE_ALLOCATESet aside for a specific order or job
CONSUMEREVERSE_CONSUME(none)Left a location: shipped, used up by a job, or transferred out
ADJUST(none)(none)Manual count correction, up or down
DISPOSE(none)(none)Manual reduction (loss, scrap, write-off)

The vocabulary describes what happened to stock, never who did it; that is what the entry's source is for. A RECEIVE might be a vendor delivery, a production run coming back, or a transfer arriving, and the entry's source and reference say which. That is also why a transfer needs no event of its own: it is an ordinary CONSUME at the location it leaves and an ordinary RECEIVE at the one it reaches, tied together by the transfer's code.

The SETTLE_ rows are system-written when an order closes at Received and removed if it reopens: SETTLE_ORDER trues on-order to zero (ORDER - RECEIVE - SETTLE_ORDER) and SETTLE_ALLOCATE trues a job's allocated stock to zero (ALLOCATE - CONSUME - SETTLE_ALLOCATE). Each carries the signed gap, so the one entry closes the figure whether the order came up short or over. The inventory pages explain how these events sum into on-hand, on-order, demand, and allocated positions.

Everything here is reachable through the REST API and the MCP server.