Appearance
Reason Codes (Outbound)
Status: DRAFT (2026-02-06)
This page defines the shared reason_code taxonomy for outbound events, audits, and state transitions. It is intended to be stable, machine-readable, and cross-service. Use it alongside a freeform human reason field.
Definitions
- reason_code: short, stable machine code for analytics, routing, and audit workflows.
- reason: human-readable context (optional; not stable or enumerable).
Format (canonical)
- Canonical shape:
CATEGORY.CODE - Recommended case: UPPERCASE
- Allowed characters:
A–Z,a–z,0–9,_,.,- - Hard enforcement: unknown codes are rejected (
invalid-input). Use the allowlist below.
Machine-readable schema
- JSON Schema:
/schemas/reason-code.schema.json
Categories (starter set)
These categories are intentionally broad. Codes should be added under the smallest appropriate category.
- LIFECYCLE — status changes, suspends, reactivations, dooms.
- POLICY — policy updates, overrides, exceptions, approvals.
- PRICING — price overrides, price list changes, pricing approvals.
- PROMOTION — promo starts/ends, bundle/BOGO rules, promo overrides.
- INVENTORY — adjustments, counts, transfers, restock/repair.
- RECEIVING — inbound rejections: damaged, defective, wrong item, quality, packaging.
- FULFILLMENT — short picks, substitutions, shipments, cancellations.
- CUSTOMER — merges, consent changes, customer holds.
- LOYALTY — earn/redeem adjustments, expiry actions.
- FRAUD — fraud holds, reviews, chargebacks, disputes.
- ACCOUNTING — reconciliations, export retries, ledger adjustments.
- COMPLIANCE — legal holds, audit holds, regulatory exceptions.
- TAX — policy overrides, exemptions, audit corrections.
- SYSTEM — automated system actions (scheduled sweeps, auto-offline).
Examples
FULFILLMENT.SHORT_PICKFRAUD.SUSPICIOUS_ACTIVITYINVENTORY.ADJUSTSYSTEM.AUTO_OFFLINELIFECYCLE.ONBOARD_VERIFY
Allowlist (v0)
Codes are hard-enforced; use only these values.
- LIFECYCLE
LIFECYCLE.ONBOARD_VERIFY
- FULFILLMENT
FULFILLMENT.SHORT_PICKFULFILLMENT.OUT_OF_STOCKFULFILLMENT.CUSTOMER_REQUESTFULFILLMENT.CUSTOMER_RETURNFULFILLMENT.PARTIALFULFILLMENT.NO_STOCKFULFILLMENT.SHORT
- FRAUD
FRAUD.ACCOUNT_TAKEOVERFRAUD.CHARGEBACKFRAUD.CONFIRMEDFRAUD.MANUAL_REVIEWFRAUD.MISMATCHFRAUD.NEW_ACCOUNTFRAUD.RISK_SIGNALFRAUD.STOLEN_CARDFRAUD.SUSPICIOUS_ACTIVITYFRAUD.VELOCITY
- RECEIVING
RECEIVING.DAMAGEDRECEIVING.DEFECTIVERECEIVING.EXPIREDRECEIVING.PACKAGINGRECEIVING.QUALITY_ISSUERECEIVING.SHORT_SHIPMENTRECEIVING.WRONG_ITEMRECEIVING.OTHER
- INVENTORY
INVENTORY.ADJUSTINVENTORY.ADJUST_FIFOINVENTORY.ADJUST_FEFOINVENTORY.DAMAGEINVENTORY.PUTAWAYINVENTORY.RECALLINVENTORY.SHRINKINVENTORY.TRANSFER_SHIPPEDINVENTORY.TRANSFER_RECEIVED
- SYSTEM
SYSTEM.AUTO_OFFLINESYSTEM.CONTRACT_TESTSYSTEM.MANUAL_OFFLINESYSTEM.MANUAL_ROLLBACKSYSTEM.REPLENISHMENT_AUTOSYSTEM.USECASESYSTEM.USECASE_SEEDSYSTEM.UNSPECIFIED
Governance Rules
- Additive only: add new codes; do not repurpose existing codes.
- Stable categories: keep category list small; prefer adding codes to existing categories.
- Deprecations: mark codes as deprecated in the internal taxonomy; do not remove from history.
- Hard enforcement: services reject invalid format and unknown codes.
Rollout Guidance
- Start with high-impact services (SCM, CRM, PPM, Accounting, ICS).
- Use codes in outbound events first; enforcement is active.
- Keep internal canonical list in
internal-docs/reason-code-taxonomy.md.