---
id: ATS-ACC-REC-007
scope: CAP-ACC-REC-007
product_area: accounting
module: reconciliation
revision: 3
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-ACC-REC-007-01
    title: Exact same-sign splitting
    level: api
    proves:
      - BR-CAP-ACC-REC-007-01
    preconditions: An unclaimed two-hundred-fifty-dollar capture exists.
    steps: 'Try one part, an incorrect total and wrong sign, then split into two hundred and fifty dollars.'
    expected: Invalid splits fail and the exact same-sign split succeeds.
    negative: true
    data_needs: Provide outstanding fixture for this case.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#refuses
        parts that do not total the item (400, `split_parts_total`)
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#refuses
        a part of the other sign (400, `split_part_sign`)
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#refuses
        a single part (400, `split_parts_count`)
      - >-
        services-accounting:modules/reconciliation/tests/integration/db/settlement-items.table.integration.spec.js#refuses
        a split whose parts do not total the item
      - >-
        services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#answers 200 with the item
        resolved as split by the caller
      - TST-ACC-REC-071
      - TST-ACC-REC-047
      - TST-ACC-REC-024
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#refuses
      parts that do not total the item (400, `split_parts_total`)
    category: validation
  - id: ATS-ACC-REC-007-02
    title: Held and resolved items cannot be resolved again
    level: api
    proves:
      - BR-CAP-ACC-REC-007-02
    preconditions: One item is claimed and another already resolved.
    steps: Try splitting or resolving each.
    expected: 'Both are rejected, with the holding reconciliation identified for the claimed item.'
    negative: true
    data_needs: Provide draft holding the item for this case.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#refuses
        an item a reconciliation claims, naming it (409, `item_claimed`)
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#refuses
        a resolved item (409, `item_resolved`)
      - >-
        services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#refuses an item claimed
        by a reconciliation with 409 item_claimed
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#refuses
        an item a reconciliation claims (409, `item_claimed`)
      - TST-ACC-REC-071
      - TST-ACC-REC-024
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#refuses
      an item a reconciliation claims, naming it (409, `item_claimed`)
    category: validation
  - id: ATS-ACC-REC-007-03
    title: Split preserves evidence and clears the parent problem
    level: api
    proves:
      - BR-CAP-ACC-REC-007-03
      - BR-CAP-ACC-REC-007-04
    preconditions: An overdue item has evidence and an open exception.
    steps: Divide the item.
    expected: Parts retain its facts and evidence; the original becomes split and its open overdue problem closes.
    negative: false
    data_needs: No additional fixture beyond the case setup.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#resolves
        the parent `split`, by the caller, at the next version
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#writes
        parts that inherit every fact of the parent, with their own amounts, parent and source keys
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#gives
        each part the parent’s evidence files
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#clears
        the parent’s open overdue-settlement exception
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#records
        `item.split` with the parts and the versions
      - TST-ACC-REC-071
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#resolves
      the parent `split`, by the caller, at the next version
    category: interaction
  - id: ATS-ACC-REC-007-04
    title: Signed write-off postings
    level: api
    proves:
      - BR-CAP-ACC-REC-007-05
      - BR-CAP-ACC-REC-007-06
    preconditions: A unit has write-off configuration and an open batch.
    steps: 'Write off positive and negative items, then submit an unknown resolution.'
    expected: Balanced write-off requests use opposite sides for the signs; unknown resolution fails.
    negative: false
    data_needs: Provide Write-off default account for this case.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#writes
        off an item with its entry: Dr the write-off account, Cr the merchant clearing account, in the unit’s
        batch on its date
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#mirrors
        the entry of a negative item: Dr the clearing account, Cr the write-off account
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#dates
        the request on the November batch’s date, the resolution date its document date
      - >-
        services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#refuses a resolution
        outside the vocabulary with 400
      - TST-ACC-REC-071
      - TST-ACC-REC-024
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#writes
      off an item with its entry: Dr the write-off account, Cr the merchant clearing account, in the unit’s
      batch on its date
    category: rule
  - id: ATS-ACC-REC-007-05
    title: Write-off refuses missing accounting setup
    level: api
    proves:
      - BR-CAP-ACC-REC-007-07
    preconditions: One unit lacks its write-off account and another has only a closed-period batch.
    steps: Resolve an item as written off in each unit.
    expected: Neither resolution commits and the items remain outstanding.
    negative: true
    data_needs: Configure both business units used by the case.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#refuses
        a write-off where the unit has no write-off account (409, `write_off_account_missing`)
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#leaves
        the item unresolved when its write-off is refused (the transaction rolled back)
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#refuses
        a write-off where the unit has no batch for its request (400, `no_open_batch`)
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#leaves
        the item unresolved, and asks for nothing, when refused for want of a batch
      - TST-ACC-REC-071
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#refuses
      a write-off where the unit has no write-off account (409, `write_off_account_missing`)
    category: failure
  - id: ATS-ACC-REC-007-06
    title: Other resolution needs no ledger entry
    level: api
    proves:
      - BR-CAP-ACC-REC-007-08
    preconditions: An unclaimed item awaits an explanation.
    steps: Resolve it otherwise with a written reason.
    expected: The item is resolved without a ledger request.
    negative: false
    data_needs: No additional fixture beyond the case setup.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#resolves
        an item otherwise, asking the ledger for nothing
      - >-
        services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#answers 200 with the item
        resolved otherwise by the caller
      - TST-ACC-REC-071
      - TST-ACC-REC-024
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#resolves
      an item otherwise, asking the ledger for nothing
    category: rule
  - id: ATS-ACC-REC-007-07
    title: Resolution permissions and request keys
    level: api
    proves:
      - BR-CAP-ACC-REC-007-09
      - BR-CAP-ACC-REC-007-10
    preconditions: An unauthorized caller and an existing keyed split are available.
    steps: 'Try the unauthorized split, unchanged and changed retries and keyless split or resolution.'
    expected: Missing authority or keys and changed bodies fail; unchanged replay returns the stored result.
    negative: true
    data_needs: Assign callers through the relevant role policies.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#refuses a principal
        without accounting.settlement-items.resolve with 403
      - >-
        services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#answers the same request
        under the same key with the first answer
      - >-
        services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#refuses the same key with
        another request with 409 idempotency_key_reused
      - >-
        services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#refuses a split without
        an Idempotency-Key with 400 idempotency_key_required
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/settlement-items.integration.spec.js#keys
        a request per operation: the same key on a split is a request of its own
      - TST-ACC-REC-024
      - TST-ACC-REC-071
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/e2e/outstanding.e2e.spec.js#refuses a principal without
      accounting.settlement-items.resolve with 403
    category: permission
  - id: ATS-ACC-REC-007-08
    title: Part-paid capture resolution journey
    level: api
    proves:
      - BR-CAP-ACC-REC-007-01
      - BR-CAP-ACC-REC-007-06
      - BR-CAP-ACC-REC-007-07
      - AS-JNY-ACC-REC-004-03
    preconditions: A claimed capture is partly paid by the processor.
    steps: >-
      Release, split, reconcile and finalize the paid part, then write off the remainder with and without its
      configured account.
    expected: >-
      The paid part settles; write-off succeeds only with complete accounting setup and clears the remaining
      problem.
    negative: false
    data_needs: Provide Two REC units for this case.
    bound_to:
      - >-
        react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0603.spec.ts#ACT-ACC-0603
      - TST-ACC-REC-012
    provenance: test
    source: >-
      react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0603.spec.ts#ACT-ACC-0603
    category: interaction
  - id: ATS-ACC-REC-007-09
    title: Splitting and write-off change outstanding positions
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-REC-007-01
      - BR-CAP-ACC-REC-007-06
      - BR-CAP-ACC-REC-007-07
      - AS-JNY-ACC-REC-004-03
      - BR-CAP-ACC-REC-006-01
    interacts_with:
      - CAP-ACC-REC-006
    relies_on:
      - ATS-ACC-REC-007-08
      - ATS-ACC-REC-006-01
    preconditions: Use one isolated workspace with the financial records and caller roles required by the relied-on cases.
    steps:
      - do: 'Inspect a free overdue item, split it and write off the unpaid part before rereading positions.'
        expect: >-
          The parent is resolved and its parts retain the original total; the written-off part stops being
          outstanding.
        provenance: proposed
        source:
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-007-split-or-write-off-money-that-will-never-arrive-as-recorded.md
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-006-see-what-money-is-in-transit-late-or-missing.md
    expected: >-
      The parent is resolved and its parts retain the original total; the written-off part stops being
      outstanding.
    negative: false
    data_needs: >-
      Local merchant and bank accounts, an open operational batch and distinct preparation and approval
      callers.
    bound_to: []
    provenance: proposed
    source:
      - >-
        specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-007-split-or-write-off-money-that-will-never-arrive-as-recorded.md
      - >-
        specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-006-see-what-money-is-in-transit-late-or-missing.md
  - id: ATS-ACC-REC-007-10
    title: Item resolution concludes overdue work
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-REC-007-03
      - BR-CAP-ACC-REC-007-04
      - BR-CAP-ACC-REC-015-07
    interacts_with:
      - CAP-ACC-REC-015
    relies_on:
      - ATS-ACC-REC-007-03
      - ATS-ACC-REC-015-06
    preconditions: Use one isolated workspace with the financial records and caller roles required by the relied-on cases.
    steps:
      - do: 'Raise overdue work for a free item, resolve it with an explanation and reload its concern.'
        expect: The concern closes with the explanation while the financial record remains reviewable.
        provenance: proposed
        source:
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-007-split-or-write-off-money-that-will-never-arrive-as-recorded.md
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-015-raise-work-and-resolve-reconciliation-problems.md
    expected: The concern closes with the explanation while the financial record remains reviewable.
    negative: false
    data_needs: >-
      Local merchant and bank accounts, an open operational batch and distinct preparation and approval
      callers.
    bound_to: []
    provenance: proposed
    source:
      - >-
        specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-007-split-or-write-off-money-that-will-never-arrive-as-recorded.md
      - >-
        specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-015-raise-work-and-resolve-reconciliation-problems.md
  - id: ATS-ACC-REC-007-11
    title: Write-off supplies a batch request
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-REC-007-05
      - BR-CAP-ACC-REC-007-06
      - BR-CAP-ACC-REC-014-01
      - BR-CAP-ACC-REC-014-02
      - BR-CAP-ACC-REC-014-03
    interacts_with:
      - CAP-ACC-REC-014
    relies_on:
      - ATS-ACC-REC-007-04
      - ATS-ACC-REC-014-01
    preconditions: Use one isolated workspace with the financial records and caller roles required by the relied-on cases.
    steps:
      - do: Write off a positive overdue item and inspect its operational requests before posting.
        expect: The item is resolved and its distinct request remains pending in the selected batch.
        provenance: proposed
        source:
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-007-split-or-write-off-money-that-will-never-arrive-as-recorded.md
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-014-hand-reconciliations-accounting-to-the-ledger-through-the.md
    expected: The item is resolved and its distinct request remains pending in the selected batch.
    negative: false
    data_needs: >-
      Local merchant and bank accounts, an open operational batch and distinct preparation and approval
      callers.
    bound_to: []
    provenance: proposed
    source:
      - >-
        specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-007-split-or-write-off-money-that-will-never-arrive-as-recorded.md
      - >-
        specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-014-hand-reconciliations-accounting-to-the-ledger-through-the.md
  - id: ATS-ACC-REC-007-12
    title: Failed accounting leaves write-off unresolved
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-REC-007-07
      - BR-CAP-ACC-REC-014-01
      - BR-CAP-ACC-REC-014-02
      - BR-CAP-ACC-REC-014-03
    interacts_with:
      - CAP-ACC-REC-014
    relies_on:
      - ATS-ACC-REC-007-05
      - ATS-ACC-REC-014-01
    preconditions: Use one isolated workspace with the financial records and caller roles required by the relied-on cases.
    steps:
      - do: 'Try write-off without an accepting batch, repair the batch context and retry.'
        expect: The first attempt changes no resolution or request; retry retains both together.
        provenance: proposed
        source:
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-007-split-or-write-off-money-that-will-never-arrive-as-recorded.md
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-014-hand-reconciliations-accounting-to-the-ledger-through-the.md
    expected: The first attempt changes no resolution or request; retry retains both together.
    negative: true
    data_needs: >-
      Local merchant and bank accounts, an open operational batch and distinct preparation and approval
      callers.
    bound_to: []
    provenance: proposed
    source:
      - >-
        specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-007-split-or-write-off-money-that-will-never-arrive-as-recorded.md
      - >-
        specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-014-hand-reconciliations-accounting-to-the-ledger-through-the.md
evidence:
  - >-
    Bindings identify existing tests at the pinned revisions; proposed cases remain unbound and describe the
    proof still needed.
coverage:
  rule: covered
  validation: covered
  permission: covered
  failure: covered
  interaction: covered
  transition: 'gap: FND-ACC-REC-052'
  edge: 'gap: FND-ACC-REC-052'
  boundary: 'gap: FND-ACC-REC-052'
  concurrency: 'gap: FND-ACC-REC-052'
  invariant: 'gap: FND-ACC-REC-052'
coverage_notes:
  design_completeness: >-
    Covered categories count specified cases, including proposed cases. Exhaustive state-transition,
    permission-key and domain-invariant traceability remains a separate proof gap.
---

# Explain partial or unrecoverable settlement money: Capability Test Specification

## Coverage

| Rule | Proved by |
|---|---|
| `BR-CAP-ACC-REC-007-01` | `ATS-ACC-REC-007-01`, `ATS-ACC-REC-007-08` |
| `BR-CAP-ACC-REC-007-02` | `ATS-ACC-REC-007-02` |
| `BR-CAP-ACC-REC-007-03` | `ATS-ACC-REC-007-03` |
| `BR-CAP-ACC-REC-007-04` | `ATS-ACC-REC-007-03` |
| `BR-CAP-ACC-REC-007-05` | `ATS-ACC-REC-007-04` |
| `BR-CAP-ACC-REC-007-06` | `ATS-ACC-REC-007-04`, `ATS-ACC-REC-007-08` |
| `BR-CAP-ACC-REC-007-07` | `ATS-ACC-REC-007-05`, `ATS-ACC-REC-007-08` |
| `BR-CAP-ACC-REC-007-08` | `ATS-ACC-REC-007-06` |
| `BR-CAP-ACC-REC-007-09` | `ATS-ACC-REC-007-07` |
| `BR-CAP-ACC-REC-007-10` | `ATS-ACC-REC-007-07` |

## Interactions With Related Capabilities

Split preserves evidence and clears the parent problem. Part-paid capture resolution journey. Splitting and write-off change outstanding positions. Item resolution concludes overdue work. Write-off supplies a batch request. Failed accounting leaves write-off unresolved. Proposed interaction cases require executable proof.
