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
ConversionsRepack finished goods across levels or packaging

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.