Appearance
Inventory Control (ICS)
Status: Implemented (core + transfer analytics; baseline replenishment suggestions + average-cost tracking).
Purpose
ICS owns the real-time inventory truth, bin-level warehouse operations, and the immutable stock card history for each variant at each logical facility.
Goals
- Provide accurate, near-instant stock availability for operational decisions.
- SKU-only stock lookups return a list across authorized logical facilities (responses include logical_guid).
- Support WMS-grade receiving, putaway, picking, packing, shipping, and transfers.
- Preserve immutable stock card history with full auditability and context.
- Support ownership vs possession and virtual/external locations.
- Provide fast current and historical views (at least 24 months) plus projections.
- Projections are based on inbound pipelines and transfers and may be slower than operational queries.
Non-goals
- ICS does not define sellability (owned by PMC).
- ICS does not define product truth (owned by PVM).
- ICS does not define final pricing (owned by PPM).
Scope and gating
- All inventory is org-scoped.
- Operational actions are logical-facility scoped.
- Channel context is required when stock is reserved, allocated, or committed for a channel.
- Org-wide inventory views are analytics rollups, not operational truth.
Request context checklist
- Org: required for all inventory operations.
- Logical facility: required for operational actions.
- Channel: required when reserving, allocating, or committing stock to a channel.
- Actor + role: required for approvals and adjustments.
- Cost-centre: optional attribution for billing and audit.
Core business entities and relationships
- Stock position: variant + logical facility + bin/zone location.
- Location hierarchy: facility -> zone -> bin, plus staging, receiving, shipping, and quarantine.
- Stock card event: immutable record of a stock, cost, or state change with reason, actor, comments, and source references.
- Stock card entries reference source records (PO lines, invoice lines, receipt lines, transfers, counts, adjustments, returns).
- Ownership vs possession: own+possess, own-not-possess, possess-not-own, in-transit.
- Virtual/external locations: 3PL, partner, vendor, or in-transit nodes with controlled transitions.
Ownership vs possession examples (concrete)
Consignment sale
- Facility F1 holds 10 units on consignment: possess-not-own (owner = Vendor V, possessor = Org O at F1).
- A sale ships 2 units: ICS reduces possessed quantity; owned quantity for Org O is unchanged.
- ICS emits a consignment consumption event referencing the sale; settlement later records financial transfer from Org O to Vendor V.
- A return reverses the consumption event and restores possessed quantity; ownership still remains with Vendor V.
Inter-facility transfer
- Facility F1 has 20 units own+possess (owner = Org O, possessor = Org O at F1).
- A transfer request ships 5 units to Facility F2:
- At shipment: F1 possession decreases by 5; stock enters in-transit (owner = Org O, possessor = in-transit node).
- At receipt: F2 possession increases by 5 and becomes own+possess at F2.
- Stock card events at each step carry reason codes and source references to the transfer request/shipment/receipt.
Lifecycle and status model (described in words)
- Inventory enters via receiving into a receiving or quarantine location.
- Quarantine stock transitions to available only after QC or approval.
- Explicit stock reclassification uses
stock/transitionto move quantities between available, quarantine, and damaged buckets with reason codes. - Available stock can be reserved, allocated, and committed for fulfillment.
- In-transit stock exists only during transfers or returns and must reconcile to a destination location.
- Damaged or shrink states require reason codes, approvals (when configured), and audit trails.
- Consignment-held stock tracks possession separately from ownership and follows its own settlement rules.
End-to-end workflows
Inventory promise contract (SCM ↔ ICS)
- Lifecycle: reserve → allocate → commit → release.
- Reserve TTL defaults (policy baseline, channel/facility overrides allowed):
- POS 5 minutes, ecommerce 15 minutes, wholesale 60 minutes.
- Allocate TTL default: 120 minutes (or end of pick wave, whichever is sooner).
- Commit TTL default: ship-from-store 24 hours; pickup orders align to the pickup window.
- Allocation/commit holds may include
expires_attimestamps from SCM; ICS records and emits the expiry for reconciliation. - Release reason codes (baseline): payment_failed, approval_failed, customer_cancelled, inventory_expired, pickup_no_show, substitution_declined, fraud_hold.
- Short-ship reasons (baseline): insufficient_available, damaged, qc_hold, recall_hold, lost_in_pick, carrier_constraint.
- Partial-commit policy: default allow partial for B2C channels; wholesale defaults to hard-fail unless backorder policy allows split.
Happy paths
- Receive -> QC (optional) -> directed putaway -> available -> pick/pack/ship.
- Replenish from overstock to pick-face based on min/max rules.
- Transfer between facilities with in-transit visibility and confirmation at destination.
- Cycle count adjustments recorded on the stock card and reconciled with tolerance rules.
Exceptions and edge cases
- Partial receipts, over/under shipments, wrong item, or damaged goods.
- Misrouted or lost-in-transit transfers with reconciliation adjustments.
- Short picks, substitutions, or shipment discrepancies with reason codes.
- Cross-facility returns received at a different logical facility.
- Return dispositions recorded (restock, quarantine, refurb, scrap) with reason codes.
- Manual adjustments with actor, comment, and source reference captured.
- Physical and cycle count adjustments recorded as distinct stock card events.
Configuration and defaults
- The platform is enterprise-grade by default; applications may hide complexity via defaults.
- Negative stock protection is configurable per logical facility + variant; when disabled, reservations/commits may overcommit and backorder policies can respond accordingly.
- Overcommit emits
stock-overcommittedevents for backorder queueing and recovery workflows. - Configurable pick methods: discrete, batch, wave, and zone picking.
- Replenishment: pick-face vs overstock, min/max, forward-pick replenishment.
- Replenishment rules capture pick-face bin, overstock bin, min/max thresholds, and status per logical facility.
- Replenishment execution is recorded as a bin-to-bin movement with a stock card entry.
- Cycle counting: ABC classification, count frequency rules, tolerance thresholds, and recount workflows.
- Traceability: optional lot/serial tracking, expiry control, FIFO/FEFO implemented (multi-lot FEFO splitting via
selectLotPositions). - Loss controls: reason codes, approvals, and audit trails.
- Receiving: partials, over/under, QC/quarantine, and damage workflows.
Transfer and allocation planning (best-practice expectations)
- Separate recommendations from execution: candidate transfers and allocations are suggestions with analytics; actual transfer requests require explicit approval.
- Transfer requests follow draft -> pending approval -> submitted when approval is required; thresholds are % and $ values set per org with optional facility overrides. Approvals capture approver, timestamp, and reason, with optional no-self-approval rules for high-risk transfers.
- Current implementation (MVP): suggestions are rule-based using min/max replenishment rules plus current availability; advanced factors below are policy expectations to layer in.
- Suggestions include rationale, expected impact, constraints triggered, and recommended quantities/timing.
- Configurable factors (org-level with optional facility overrides):
- Sales velocity by channel and facility.
- Forecasted demand and planned promotions or price changes.
- Transfer lead times, carrier windows, and transfer cost per unit.
- Hard gates for min/max on-hand, min/max send quantities, and safety stock.
- Presentation minimums and assortment compliance requirements.
- Open orders, reservations, and backorders.
- Inbound supply and in-transit inventory.
- Shelf life, expiry, lot/serial constraints, FEFO rules, and local markdown timing.
- Margin, markdown risk, and profitability thresholds.
- Space utilization limits (staging constraints, backroom capacity).
- Pick/pack friction (labor complexity, special handling, bulky items).
- Storage capacity, labor capacity, and handling constraints.
- Channel priority and service-level targets.
- Customer experience risk (late delivery penalties, marketplace SLAs).
- Substitution tolerance by category.
- Cross-channel cannibalization impacts on availability.
- Ownership/consignment constraints and transfer eligibility.
- Regional compliance (regulated goods by location) and temperature/handling constraints.
Transfer execution and shipment handling
- A transfer request may be fulfilled as one or more shipments.
- Each shipment has its own status and exception handling (partial ship, loss, damage, misroute).
- Receiving supports partial receipts and reconciliation against expected quantities.
- Transfers move to
receivinguntil all shipments are received; final status isreceivedorreceived_with_exceptionsbased on recorded short/damage exceptions.
Reorder management and analytics
- Transfer analytics -> reorder insights: persistent transfer-out indicates reorder points too low at a facility or too high at the source; lead-time variance informs safety stock; transfer cost vs vendor cost signals when rebalance is cheaper than new procurement; short-ship/failure reasons show where buffers or alternate sources are needed; transfer patterns reveal regional demand shifts and cross-channel cannibalization.
- ICS provides transfer report summaries (status counts, open-transfer counts, lead-time averages, shipment/exception totals) with optional source/destination and source→destination pair breakdowns for operational review and reorder planning.
- Transfer reports can optionally bucket counts by time (requested/shipped/received per day/week/month) and include lead-time buckets for faster variance analysis.
- Recommendations: segment by velocity/variability (ABC/XYZ) with continuous vs periodic review; use reorder point + order-up-to with MOQs, case packs, capacity, shelf-life, and regulatory constraints; make safety stock dynamic using service-level targets, lead-time variability, promo calendars, and planned price changes; support multi-echelon logic (transfer-first vs vendor buy); use exception-first workflows with reasons/approvals; preserve temporal truth with "as-of" inventory, price, and cost context for audit and post-mortem.
Cost and valuation requirements
- Current implementation (MVP): optional
unit_coston receipts, adjustments, and transfers; weighted-average cost per logical facility;cost_deltarecorded on stock card entries.unit_cost.currencymust match the existing average cost currency. FX conversion, landed-cost allocation, and multi-model valuation are not implemented yet. - Aspirational (not yet implemented): track average cost at the logical facility level, including full landed cost inputs (freight, tariffs/duties, brokerage, handling, insurance).
- Aspirational: support multiple average-cost models in parallel: a default per org plus optional analytics models (true vs windowed vs projected).
- Aspirational: windowed analytics can ignore older data without altering the true average cost.
- Aspirational: support FX impacts; preserve original and converted amounts for audit and reconciliation.
- Aspirational: support projected restocking impacts without mutating actual average cost.
- Aspirational: allow optional dwell-time cost adjustments based on time held at a facility.
- Aspirational: capture transfer-related cost adjustments between logical facilities.
- Aspirational: receiving facilities calculate average cost using a defined transfer cost basis (source cost plus transfer-related adjustments), with org policy and optional facility overrides.
Omnichannel requirements
- Support BOPIS, curbside, ship-from-store, ship-to-home, and delivery operations.
- Support split fulfillment across facilities with clear traceability.
Performance requirements
- Stock availability checks, reservations, and movement updates must be near-instant.
- Receiving, putaway, and scan-based workflows must support high throughput.
- Transfers and returns processing must be near-instant.
- Pick, pack, and ship workflows must be near-instant.
- Historical inventory views must be fast for at least 24 months; projections can be slower.
- Grouped inventory views (by category, department, or dynamic facets) must be fast.
- Approval checks must not slow operational inventory actions.
Operational resilience checklist
- Operations are idempotent and retry-safe; duplicate submissions do not double-apply.
- Event emission is non-blocking; operational actions do not wait on analytics pipelines.
- Out-of-order events are tolerated; reconciliation uses timestamps and source references.
- Exceptions generate actionable inbox items and can be retried or reversed with audit trails.
- Long-running workflows are resumable with explicit state checkpoints.
Training and change management
- Policy and workflow changes include training notes and operational checklists.
- Critical changes use staged rollout with rollback guidance to reduce operational risk.
- Support runbooks cover common exceptions, disputes, and stock reconciliation steps.
BI and KPI expectations
- Inventory accuracy, shrink rate, and count variance by facility and category.
- Stockout, backorder, and fill rates by channel and facility.
- Transfer lead time, on-time rate, and short-ship rate.
- Receiving and putaway cycle times with exception rates.
- Pick/pack/ship cycle time and accuracy.
- Aging inventory, expiry risk, and FEFO compliance.
KPI readiness checklist
- Stock card events captured for all movements, counts, and adjustments with reason codes.
- Location hierarchy (facility, zone, bin) and ownership/possession states are populated.
- Receiving, putaway, pick, pack, ship, and transfer timestamps are captured.
- Exceptions (damage, loss, QC, quarantine) are recorded with dispositions.
- Cost changes and landed-cost adjustments are recorded as stock card events.
Rebalancing and recalibration
- Transfer and allocation suggestions rebalance stock across facilities based on velocity, safety stock, and capacity.
- Baseline suggestion logic uses replenishment rules (min/max) plus current availability; recommendations target the destination max and are capped by source availability, with constraints explaining limiting factors.
- A scheduled replenishment sweep can auto-record pick-face replenishment movements for active rules (idempotent per time window), skipping rules without overstock bins or sufficient stock.
- Intra-facility re-slotting recalibrates pick-face vs overstock based on pick frequency.
- Org-level recalibration sets safety stock, min/max, and target weeks of supply.
- Rebalancing respects policy guardrails (min/max, shelf-life, capacity, ownership).
Downstream accounting and integration capture
- Every inventory event captures org, facility, channel (when applicable), ownership vs possession, SKU, qty, unit cost, timestamps, reason codes, and source references.
- Stock card events are immutable for firmed transactions and traceable to originating records.
- Cost basis includes landed costs (freight, tariffs, handling) and transfer-related costs when configured.
- Cost changes are recorded as first-class stock card events with actor, reason, and references.
- Events include optional cost-centre attribution for billing and audit.
Comments and inbox
- Every inventory record supports comments, threads, and attachments with revision history.
- Exceptions generate inbox notifications for the relevant team.
Governance and roles
- Facility-scoped operational roles (ics_* roles) with explicit facility grants for members.
- Transfer approvals require designated approver roles (ics_transfer_approve) when thresholds are exceeded.
- Optional no-self-approval rules can be enabled for high-risk transfers.
- Cost visibility is restricted to
cost_view(facility) orfinance_audit(org-wide). - Owners have implicit facility access.
- Role grants can be permanent, time-bounded, or scheduled.
Relationships and data flow
- PVM supplies variant identity and product attributes.
- PCM receiving updates create stock movements in ICS.
- SCM fulfillment consumes and updates stock availability in ICS.
- PPM pricing does not alter ICS stock truth but may be referenced for valuation.
- Accounting readiness consumes ICS events for valuation and audit.
Example scenarios and acceptance criteria
Scenario 1: Partial receipt with damage and QC
- A partial shipment arrives; one carton is damaged.
- QC quarantines the damaged items and releases the rest to available stock.
- Stock card records both the receipt and the quarantine decision with reason codes.
- Acceptance: available stock matches released qty; quarantined stock is isolated; audit trail is complete.
Scenario 2: Transfer with in-transit loss
- A transfer is initiated between facilities and marked in-transit.
- Destination confirms a short receipt; loss is recorded with reason.
- Stock card includes transfer, in-transit, receipt, and adjustment events.
- Acceptance: in-transit is cleared; destination stock is accurate; loss is auditable.
Scenario 3: Cycle count discrepancy
- A cycle count finds variance beyond tolerance.
- Recount is required; final adjustment is recorded with actor and comment.
- Acceptance: stock card shows both count events and final adjustment; variance is traceable.
Scenario 4: Transfer recommendation vs execution
- The system recommends transferring stock based on velocity, safety stock, and capacity limits.
- The recommendation includes rationale, constraints triggered, and suggested quantities.
- An operator approves a transfer request with adjusted quantities.
- Acceptance: recommendations do not change stock; the approved transfer creates the state change and links back to the recommendation.
Scenario 5: Multi-shipment transfer with partial receipt
- A transfer request is fulfilled by two shipments.
- One shipment is delayed and the other arrives short.
- Receiving reconciles partial receipts and records exceptions.
- Acceptance: shipment statuses are tracked independently; exception counts are visible per shipment; in-transit is cleared on receipt; stock card records all events with reasons.
Scenario 6: Allocation suggestion with cross-channel impact
- A facility is low on stock for a high-priority channel.
- A suggestion is generated that accounts for space limits and cross-channel cannibalization risk.
- Acceptance: the suggestion explains the trade-offs and respects channel priorities and capacity constraints.
Scenario 7: Consignment sale and settlement
- A facility receives consigned inventory (possess-not-own) from a vendor.
- Items are sold; ICS decrements possessed stock and records a consignment consumption event.
- Acceptance: owned stock is unchanged; possession is reduced; settlement references link to the sale and vendor.
Scenario 8: Recall quarantine and release
- A lot/serial is flagged as recall/stop-sale for the facility’s region.
- ICS quarantines the affected stock across bins and excludes it from availability.
- Acceptance: availability excludes quarantined stock; stock card records quarantine and release with policy references.