# Inventory requirements workbook Use this editable brief to evaluate an existing product, a proposed integration or a bounded custom component against the same inventory workflow. Replace bracketed fields with your own decisions. The filled example is fictional; proposed acceptance scenarios are requirements to demonstrate, not results from an implemented inventory system. Prepared for: [business / team] Owner and reviewers: [operations / sales / delivery / technical roles] Version and review date: [version / date] ## 1. Scope and first workflow - Current problem and evidence: [missed picks / duplicate receipts / manual reconciliation, with examples] - First workflow, beginning and end: [event that starts it / evidence that completes it] - Users, sites and expected transaction volume: [roles / locations / measured peak] - Current systems and proposed changes: [product / integration / custom boundary] - Included items and stock types: [items / lots / serial numbers / condition] - Exclusions: [manufacturing / multi-site transfers / future supply promises / other deferred work] - Success measure, baseline and review date: [measure / value / owner / date] ## 2. Quantity dictionary Define quantities before comparing dashboards. Record whether each figure includes inspection stock, transit, expected receipts and unfulfilled orders. A company-wide total does not establish availability at the dispatch location. | Term / field | Meaning and included states | Dimensions and base unit | Authoritative record / allowed writer | | --- | --- | --- | --- | | On-hand | [physically present; specify included conditions] | [SKU / location / unit / time] | [system / operation] | | Reserved | [commitment and when it is created or released] | [order / SKU / location / unit] | [system / operation] | | Blocked | [quarantine or other unusable stock; overlap rules] | [SKU / location / status / unit] | [system / approval] | | Available now | [explicit formula and exclusions] | [SKU / location / unit / time] | [calculation / source] | | Expected supply | [unreceived quantities, dates and uncertainty] | [purchase order / destination / unit] | [system / operation] | Record packaging conversions, allowed fractional quantities and rounding here: [rules]. Decide whether a barcode identifies an item, a packaging unit, a lot or a serial number. Store the entered unit and conversion used so later changes do not silently reinterpret earlier movements. ## 3. Fictional stock trace **Scope:** SKU `BOLT-M8`, Warehouse A, one stock location, base unit `each`. All movement quantities below are positive whole units. This example starts with 20 units reserved for unrelated orders and 5 blocked units. **Model:** on-hand includes every physical unit in the location, including quarantine. Reserved and blocked are disjoint subsets of on-hand: no unit is counted in both. Only usable units may be reserved. Available now is `on-hand − reserved − blocked`. Incoming orders, future receipts and backorders are excluded. This is a deliberately defined physical-stock model, not a universal available-to-promise formula or a copy of a particular ERP field definition. | Step | Event | On-hand | Reserved | Blocked | Available now | | --- | --- | ---: | ---: | ---: | ---: | | 0 | Opening balance | 100 | 20 | 5 | 75 | | 1 | Receive 30 into usable stock | 130 | 20 | 5 | 105 | | 2 | Reserve 12 for SO-104 | 130 | 32 | 5 | 93 | | 3 | Dispatch 8 against that reservation | 122 | 24 | 5 | 93 | | 4 | Cancel and release the remaining 4 for SO-104 | 122 | 20 | 5 | 97 | | 5 | Receive a customer return of 3 into quarantine | 125 | 20 | 8 | 97 | | 6 | Inspection releases 2 quarantined units | 125 | 20 | 6 | 99 | | 7 | Count identifies 1 missing usable unit; approved adjustment | 124 | 20 | 6 | 98 | Reconcile the final state independently: ```text On-hand = 100 + 30 − 8 + 3 − 1 = 124 Reserved = 20 + 12 − 8 − 4 = 20 Blocked = 5 + 3 − 2 = 6 Available now = 124 − 20 − 6 = 98 SO-104 reservation: 12 − 8 dispatched − 4 released = 0 ``` Dispatch consumes physical stock and its reservation together, so availability does not change at step 3. The quarantined return increases physical and blocked stock together, so availability does not change at step 5. The release in step 4 changes allocation without changing physical stock. The original 20 reservations remain; 1 of the 3 returned units remains blocked alongside the original 5. The count adjustment concerns usable, unreserved stock. This trace checks arithmetic and stated transitions. It does not establish atomic reservations, safe retries, access enforcement, performance or behavior in any selected product. Keep refund and credit decisions separate from receiving or inspecting a return. ## 4. Event and record ownership Each movement needs an event ID, source system and reference, SKU, location, entered unit and quantity, effective time, recorded time, actor and reason. Retain links between order, reservation, shipment and return. Corrections should leave an audit trail rather than silently replacing a balance. | Event | Authorized role / writer | Preconditions | Quantity change | Correction and evidence | | --- | --- | --- | --- | --- | | Receipt | [role / system] | [identified item and actual received quantity] | [on-hand / status] | [event / source receipt / reversal rule] | | Reservation | [role / system] | [eligible stock and order] | [reserved / available] | [allocation / release rule] | | Dispatch | [role / system] | [matching item, location and remaining allocation] | [on-hand and reserved] | [shipment / correction rule] | | Return and inspection | [roles / system] | [return reference and observed condition] | [physical / blocked / release] | [receipt and inspection evidence] | | Count adjustment | [counter / approver / system] | [count cutoff and investigated difference] | [identified stock bucket] | [count record / reason / approval] | If transfers are in scope, define source dispatch, in-transit custody and destination receipt separately. State where each unit is counted at every stage; a destination must not gain usable stock merely because a transfer was requested. Transfers are outside the filled trace above. ## 5. Acceptance scenarios to demonstrate For every scenario, record environment, inputs, observed result, evidence, reviewer and pass/fail. Agree these rules before running a vendor demonstration or commissioning an integration. | ID | Given / action | Expected result | Evidence and result | | --- | --- | --- | --- | | INV-01 | Opening balance from step 0; receive 30 usable units once | 130 on-hand, 20 reserved, 5 blocked, 105 available | [record] | | INV-02 | Retry that receipt with the same source/event ID and identical payload | No additional movement or balance increase; prior result identifiable | [record] | | INV-03 | Reuse that source/event ID with a different quantity or item | Reject or flag the conflicting request; no silent additional receipt | [record] | | INV-04 | Reserve 12, dispatch 8, cancel the remaining 4 for SO-104 | Match steps 2–4; unrelated reservations unchanged; no remaining SO-104 allocation | [record] | | INV-05 | Try dispatching beyond the remaining reservation, or for the wrong SKU/location | Reject without partial stock changes; record the reason | [record] | | INV-06 | At a fresh fixture with 10 available, submit competing reservation requests for 7 and 6 | Under this all-or-nothing, no-backorder policy, at most one succeeds; committed allocation never exceeds 10 | [atomic/concurrency evidence] | | INV-07 | Return 3 to quarantine, then authorize release of 2 | Match steps 5–6; all 3 initially unavailable; only 2 become available after inspection | [record] | | INV-08 | An unauthorized user attempts an adjustment or quarantine release | Denied at the server/API boundary; no movement or quantity change | [record] | | INV-09 | A write succeeds but its acknowledgment is lost; sender retries | No duplicate effect; sender can determine the recorded outcome from its reference | [failure/recovery evidence] | | INV-10 | A count finds 1 missing usable unit after step 6 | Approved, attributed adjustment matches step 7; reservation and blocked totals unchanged | [record] | INV-06 needs a real concurrent test or equivalent transactional evidence in the selected implementation. Replaying a sequential spreadsheet or script does not demonstrate it. If backorders are allowed, define a separate backorder state and acceptance rule; do not silently let physical availability become negative. ## 6. Reconciliation, migration and operation - Opening snapshot and movement cutoff: [date/time / time zone / source / owner] - Compare by SKU, location, unit, status and reservation/order reference: [method and evidence] - Reconcile physical counts, movement ledger, open reservations and imported balances: [differences and resolution] - During counting or cutover, freeze writes or account for intervening movements: [chosen procedure] - Allowed writer before, during and after cutover: [system and transition checkpoint] - Duplicate, delayed and out-of-order integration events: [handling and visible exception queue] - Failed synchronization owner and escalation time: [role / agreed target] - Audit access, correction permissions and record retention: [agreed requirements] - Backup and restoration rehearsal: [evidence / recovery limits / owner] - Peak workload and response-time target: [measured input / target / test result] - Recovery after new stock movements: [reconciliation and compensating actions] - Go/no-go owner, unresolved differences and accepted exclusions: [decision] Equal total quantities can conceal the wrong SKU, location or order allocation. Check identifiers and relationships as well as totals. Restoring a database alone does not reverse a physical shipment; the recovery plan must account for warehouse actions and downstream records. Guides: - https://nomadicsoft.io/blog/inventory-management-system-requirements - https://nomadicsoft.io/blog/erp-modules - https://nomadicsoft.io/blog/cloud-erp Product-specific references for comparison: - https://learn.microsoft.com/en-us/dynamics365/supply-chain/inventory/inventory-on-hand-list - https://learn.microsoft.com/en-us/dynamics365/supply-chain/inventory/reserve-inventory-quantities - https://learn.microsoft.com/en-us/dynamics365/supply-chain/inventory/inventory-statuses