---
id: FAS-COM-FUL-04
title: 'Stock Records and Reconciliation: Feature Acceptance Suite'
feature: FEAT-COM-FUL-04
product_area: commerce
module: fulfillment
revision: 1
status: proposed
product_intent: proposed
source_sha:
  services-commerce: c8b66a98e2490617aec38ba5c8165dd9bd0a8f9b
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
capabilities:
  - CAP-COM-FUL-016
  - CAP-COM-FUL-017
  - CAP-COM-FUL-018
  - CAP-COM-FUL-019
scenarios:
  - title: 'Stock configuration, receipt and buyer availability agree'
    kind: behaviour
    exercises:
      - CAP-COM-FUL-016
      - CAP-COM-FUL-017
      - CAP-COM-FUL-018
    relies_on:
      - ATS-COM-FUL-016-04
      - ATS-COM-FUL-017-01
      - ATS-COM-FUL-017-04
      - ATS-COM-FUL-018-06
    preconditions: Active warehouses have sellable stock locations and waiting shirt backorders.
    steps: 'Receive three shirts, inspect the oldest commitments and read remaining availability.'
    expected: >-
      The receipt supplies two waiting units and leaves one available, with locations and ledger
      balances explaining the result.
    negative: false
    data_needs: >-
      An isolated workspace with the records and identities specified by the case; each independent
      branch uses fresh records.
    provenance: test
    source:
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-016-keep-warehouses-and-stock-locations.md#ATS-COM-FUL-016-04
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-017-record-stock-that-comes-in-moves-and-goes-out.md#ATS-COM-FUL-017-01
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-017-record-stock-that-comes-in-moves-and-goes-out.md#ATS-COM-FUL-017-04
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-018-reserve-and-commit-stock-for-buyers-and-say-what-is.md#ATS-COM-FUL-018-06
      - >-
        services-commerce:modules/inventory/tests/integration/services/stock/staff-movements.integration.spec.js
    id: FAS-COM-FUL-04-01
    bound_to:
      - TST-COM-FUL-066
  - title: A completed count changes availability through an accountable movement
    kind: interaction
    exercises:
      - CAP-COM-FUL-019
      - CAP-COM-FUL-017
      - CAP-COM-FUL-018
    relies_on:
      - ATS-COM-FUL-019-01
      - ATS-COM-FUL-017-02
      - ATS-COM-FUL-018-06
    preconditions: A sellable SKU holds ten units and a warehouse count observes eight.
    steps: >-
      Record and complete the count, read its correction movement and availability, then repeat
      completion.
    expected: The ledger explains the corrected quantity and duplicate completion adds no correction.
    negative: true
    data_needs: >-
      An isolated workspace with the records and identities specified by the case; each independent
      branch uses fresh records.
    provenance: proposed
    source:
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-019-count-shelves-and-investigate-stock-findings.md#ATS-COM-FUL-019-01
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-017-record-stock-that-comes-in-moves-and-goes-out.md#ATS-COM-FUL-017-02
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-018-reserve-and-commit-stock-for-buyers-and-say-what-is.md#ATS-COM-FUL-018-06
    id: FAS-COM-FUL-04-02
    bound_to: []
  - title: Expired claims and recurring findings retain separate lifecycles
    kind: lifecycle
    exercises:
      - CAP-COM-FUL-018
      - CAP-COM-FUL-019
    relies_on:
      - ATS-COM-FUL-018-04
      - ATS-COM-FUL-019-02
      - ATS-COM-FUL-019-03
    preconditions: An expired checkout hold and a standing balance mismatch exist.
    steps: >-
      Run nightly expiry, acknowledge and resolve the mismatch, then repeat detection while the
      discrepancy persists.
    expected: >-
      The expiry releases its unit and later discrepancy recurrence receives a new finding after
      closure.
    negative: false
    data_needs: >-
      An isolated workspace with the records and identities specified by the case; each independent
      branch uses fresh records.
    provenance: proposed
    source:
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-018-reserve-and-commit-stock-for-buyers-and-say-what-is.md#ATS-COM-FUL-018-04
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-019-count-shelves-and-investigate-stock-findings.md#ATS-COM-FUL-019-02
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-019-count-shelves-and-investigate-stock-findings.md#ATS-COM-FUL-019-03
    id: FAS-COM-FUL-04-03
    bound_to: []
  - title: Inventory readers inspect records and cannot alter stock
    kind: permission
    exercises:
      - CAP-COM-FUL-016
      - CAP-COM-FUL-017
      - CAP-COM-FUL-019
    relies_on:
      - ATS-COM-FUL-016-05
      - ATS-COM-FUL-017-06
      - ATS-COM-FUL-019-06
    preconditions: 'A reader, administrator, application-denied principal and second workspace are available.'
    steps: >-
      Read configuration and stock, attempt movement, transfer, count and finding writes, and try
      foreign record identities.
    expected: Reads remain scoped and every rejected mutation leaves the ledger unchanged.
    negative: true
    data_needs: >-
      An isolated workspace with the records and identities specified by the case; each independent
      branch uses fresh records.
    provenance: test
    source:
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-016-keep-warehouses-and-stock-locations.md#ATS-COM-FUL-016-05
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-017-record-stock-that-comes-in-moves-and-goes-out.md#ATS-COM-FUL-017-06
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-019-count-shelves-and-investigate-stock-findings.md#ATS-COM-FUL-019-06
      - 'services-commerce:modules/inventory/tests/e2e/inventory.e2e.spec.js'
    id: FAS-COM-FUL-04-04
    bound_to:
      - TST-COM-FUL-057
  - title: Concurrent buyers cannot obtain the final unit twice
    kind: regression
    exercises:
      - CAP-COM-FUL-018
      - CAP-COM-FUL-017
    relies_on:
      - ATS-COM-FUL-018-03
      - ATS-COM-FUL-018-04
      - ATS-COM-FUL-017-02
    preconditions: Ten buyers compete for one tracked unit; another checkout already holds two units.
    steps: >-
      Race the ten placements, inspect the winner and refusals, then convert and void the separate
      live hold.
    expected: >-
      One buyer obtains the final unit and the losing orders leave no commitments; void returns the
      separate held stock.
    negative: true
    data_needs: >-
      An isolated workspace with the records and identities specified by the case; each independent
      branch uses fresh records.
    provenance: test
    source:
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-018-reserve-and-commit-stock-for-buyers-and-say-what-is.md#ATS-COM-FUL-018-03
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-018-reserve-and-commit-stock-for-buyers-and-say-what-is.md#ATS-COM-FUL-018-04
      - >-
        rhythm-v2-docs:specs/commerce/fulfillment/design/tests/ATS-COM-FUL-017-record-stock-that-comes-in-moves-and-goes-out.md#ATS-COM-FUL-017-02
      - 'services-commerce:modules/inventory/tests/e2e/merchandise-placement.e2e.spec.js'
    id: FAS-COM-FUL-04-05
    bound_to:
      - TST-COM-FUL-058
evidence:
  - repository: services-commerce
    paths:
      - modules/inventory/tests/integration/services/stock/staff-movements.integration.spec.js
      - modules/inventory/tests/e2e/inventory.e2e.spec.js
      - modules/inventory/tests/e2e/merchandise-placement.e2e.spec.js
  - repository: rhythm-v2-docs
    paths:
      - >-
        specs/commerce/fulfillment/design/tests/ATS-COM-FUL-016-keep-warehouses-and-stock-locations.md
      - >-
        specs/commerce/fulfillment/design/tests/ATS-COM-FUL-017-record-stock-that-comes-in-moves-and-goes-out.md
      - >-
        specs/commerce/fulfillment/design/tests/ATS-COM-FUL-018-reserve-and-commit-stock-for-buyers-and-say-what-is.md
      - >-
        specs/commerce/fulfillment/design/tests/ATS-COM-FUL-019-count-shelves-and-investigate-stock-findings.md
---

# Stock Records and Reconciliation: Feature Acceptance Suite

## What the Feature Must Do as a Whole

Staff explain what can be sold from its places, movements and buyer promises. The feature cases compare ledger quantities with availability, count corrections, expired holds and findings while preserving the final-unit concurrency guard.

## Interactions Between Capabilities

Receipts fill buyer promises before remaining units become available. Count completion changes the ledger behind availability, and nightly expiry releases held units while leaving other discrepancies for investigation.

## Regression Record

| Revision | Change | Scenarios | Why |
|---|---|---|---|
| 1 | initial | All five cases | Establish cumulative feature acceptance from the landed capability and design corpus. |
