---
id: ATS-ACC-REC-010
scope: CAP-ACC-REC-010
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-010-01
    title: 'Manual kinds, signs and documentation'
    level: api
    proves:
      - BR-CAP-ACC-REC-010-01
    preconditions: A draft allows manual adjustment work.
    steps: 'Try a manual capture, positive fee and undocumented reserve.'
    expected: 'Validation reports invalid kinds, signs and documentation without committing the entry.'
    negative: true
    data_needs: No additional fixture beyond the case setup.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#refuses
        a manual item without a note or evidence, of a kind not entered by hand, and of the wrong sign, all at
        once
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#refuses
        a capture entered by hand with 400
      - TST-ACC-REC-059
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#refuses
      a manual item without a note or evidence, of a kind not entered by hand, and of the wrong sign, all at
      once
    category: validation
  - id: ATS-ACC-REC-010-02
    title: Commit-time documentation
    level: api
    proves:
      - BR-CAP-ACC-REC-010-02
    preconditions: A manual fee can have notes or evidence.
    steps: 'Commit with either form, commit with neither and remove the sole file.'
    expected: A note or evidence permits commit; removing the last evidence requires a note.
    negative: true
    data_needs: No additional fixture beyond the case setup.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/db/reconciliation-evidence-files.table.integration.spec.js#commits
        a manual fee written with an evidence file in the same transaction
      - >-
        services-accounting:modules/reconciliation/tests/integration/db/reconciliation-evidence-files.table.integration.spec.js#commits
        a manual fee that carries a note and no evidence file
      - >-
        services-accounting:modules/reconciliation/tests/integration/db/reconciliation-evidence-files.table.integration.spec.js#refuses
        at commit a manual fee with neither a note nor an evidence file (RHF34)
      - >-
        services-accounting:modules/reconciliation/tests/integration/db/reconciliation-evidence-files.table.integration.spec.js#refuses
        at commit the removal of the only evidence file of a manual fee without a note (RHF34)
      - >-
        services-accounting:modules/reconciliation/tests/integration/db/reconciliation-evidence-files.table.integration.spec.js#lets
        a manual fee’s evidence file go once the fee carries a note
      - TST-ACC-REC-039
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/db/reconciliation-evidence-files.table.integration.spec.js#commits
      a manual fee written with an evidence file in the same transaction
    category: validation
  - id: ATS-ACC-REC-010-03
    title: Adjustment account belongs to the unit
    level: api
    proves:
      - BR-CAP-ACC-REC-010-03
    preconditions: Two units supply separate ledger accounts.
    steps: 'Enter an adjustment with no account, a foreign-unit account and the correct account.'
    expected: Missing and incompatible accounts fail; the local account is accepted.
    negative: true
    data_needs: Configure both business units used by the case.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#refuses
        an adjustment without a GL account, or with another unit’s, with 400
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#enters
        an adjustment booked to a GL account of the unit
      - >-
        services-accounting:modules/reconciliation/tests/integration/db/settlement-items.table.integration.spec.js#refuses
        an adjustment without its GL account
      - TST-ACC-REC-059
      - TST-ACC-REC-047
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#refuses
      an adjustment without a GL account, or with another unit’s, with 400
    category: validation
  - id: ATS-ACC-REC-010-04
    title: 'Manual addition, automatic claim and replay'
    level: api
    proves:
      - BR-CAP-ACC-REC-010-04
      - BR-CAP-ACC-REC-010-06
    preconditions: An open draft is available.
    steps: 'Add a keyed fee, repeat it and reuse its key with changed money.'
    expected: 'One item and claim update totals and version, replay returns it and a changed request fails.'
    negative: false
    data_needs: No additional fixture beyond the case setup.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#writes
        the fee as a manual item of the batch, claimed by it
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#counts
        the manual item and its claim in the batch, one version on
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#records
        batch.manual-item-added with the item and its idempotency key
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#answers
        a repeat of the same key and body with the first answer, entering nothing more
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#refuses
        the same key with another body with 409 idempotency-key-reused
      - TST-ACC-REC-059
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#writes
      the fee as a manual item of the batch, claimed by it
    category: transition
  - id: ATS-ACC-REC-010-05
    title: Manual occurrence follows earliest deposit
    level: api
    proves:
      - BR-CAP-ACC-REC-010-05
    preconditions: Linked payouts are dated on the tenth and twelfth of October.
    steps: Add a documented fee after those days.
    expected: Its occurrence is midnight on the tenth in the workspace’s zone.
    negative: false
    data_needs: Provide workspace zone for this case.
    bound_to: []
    provenance: proposed
    source: >-
      services-accounting:modules/reconciliation/services/persistence/reconciliation-allocations.ts:addManualItem
    category: rule
  - id: ATS-ACC-REC-010-06
    title: Withdrawal keeps the lifetime count
    level: api
    proves:
      - BR-CAP-ACC-REC-010-07
    preconditions: A draft contains a manually entered fee.
    steps: Remove it and attempt removal again.
    expected: >-
      The item is withdrawn and current totals decrease while the lifetime entry count remains; repeat finds
      no active item.
    negative: false
    data_needs: No additional fixture beyond the case setup.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#takes
        it out of the batch’s items and totals, one version on, keeping the count of items entered
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#resolves
        the item withdrawn, naming the batch
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#refuses
        to remove it again with 404
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-matching.e2e.spec.js#leaves the
        removed fee withdrawn
      - TST-ACC-REC-059
      - TST-ACC-REC-027
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#takes
      it out of the batch’s items and totals, one version on, keeping the count of items entered
    category: transition
  - id: ATS-ACC-REC-010-07
    title: Lifetime manual-entry cap
    level: api
    proves:
      - BR-CAP-ACC-REC-010-08
    preconditions: Two hundred manual entries have been recorded in a reconciliation.
    steps: Attempt one additional entry.
    expected: The capacity check rejects it.
    negative: true
    data_needs: No additional fixture beyond the case setup.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/db/reconciliation-batches.table.integration.spec.js#refuses
        a 201st manual item
      - TST-ACC-REC-036
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/db/reconciliation-batches.table.integration.spec.js#refuses
      a 201st manual item
    category: boundary
  - id: ATS-ACC-REC-010-08
    title: Fee-only and zero deposits
    level: api
    proves:
      - BR-CAP-ACC-REC-010-09
    preconditions: Negative and zero net payouts are available.
    steps: Explain both using the matching manual entries.
    expected: 'Both reconcile to zero difference, including the zero payout whose capture is consumed by its fee.'
    negative: false
    data_needs: No additional fixture beyond the case setup.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#balances
        the negative payout with the two manual items
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-scenario.e2e.spec.js#step 14:
        reconciles and finalizes a zero payout whose fee took the whole capture
      - TST-ACC-REC-059
      - TST-ACC-REC-028
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/persistence/reconciliation-allocations.integration.spec.js#balances
      the negative payout with the two manual items
    category: edge
  - id: ATS-ACC-REC-010-09
    title: Manual addition requires update
    level: api
    proves:
      - BR-CAP-ACC-REC-010-11
    preconditions: A reader lacks reconciliation update.
    steps: Add a fee as that reader.
    expected: The service returns forbidden.
    negative: true
    data_needs: Use a caller whose role grants inspection only.
    bound_to:
      - >-
        react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0608.spec.ts#ACT-ACC-0608
      - TST-ACC-REC-016
    provenance: test
    source: >-
      react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0608.spec.ts#ACT-ACC-0608
    category: permission
  - id: ATS-ACC-REC-010-10
    title: Manual accounting journey
    level: api
    proves:
      - AS-JNY-ACC-REC-001-01
    preconditions: 'The unit has fee, reserve and adjustment accounts.'
    steps: 'Enter a fee, reserve hold and fifty-cent correction, then finalize as an independent approver.'
    expected: Each required recognition uses the appropriate counter-account once.
    negative: false
    data_needs: Provide Default accounts for this case.
    bound_to:
      - >-
        react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0596.spec.ts#ACT-ACC-0596
      - TST-ACC-REC-006
    provenance: test
    source: >-
      react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0596.spec.ts#ACT-ACC-0596
    category: interaction
  - id: ATS-ACC-REC-010-11
    title: Manual removal changes allocation totals
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-REC-010-07
      - BR-CAP-ACC-REC-009-03
    interacts_with:
      - CAP-ACC-REC-009
    relies_on:
      - ATS-ACC-REC-010-06
      - ATS-ACC-REC-009-03
    preconditions: Use one isolated workspace with the financial records and caller roles required by the relied-on cases.
    steps:
      - do: 'Claim captures, add a fee and remove that fee at the current draft version.'
        expect: 'The fee is withdrawn, matched claims remain and the difference changes by the removed amount.'
        provenance: proposed
        source:
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-010-enter-the-fees-reserves-and-corrections-the-processor-took.md
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-009-claim-what-a-deposit-paid-out-without-two-people-claiming.md
    expected: 'The fee is withdrawn, matched claims remain and the difference changes by the removed amount.'
    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-010-enter-the-fees-reserves-and-corrections-the-processor-took.md
      - >-
        specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-009-claim-what-a-deposit-paid-out-without-two-people-claiming.md
  - id: ATS-ACC-REC-010-12
    title: A fee changes the approval outcome
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-REC-010-04
      - BR-CAP-ACC-REC-010-06
      - BR-CAP-ACC-REC-011-06
      - BR-CAP-ACC-REC-011-08
    interacts_with:
      - CAP-ACC-REC-011
    relies_on:
      - ATS-ACC-REC-010-04
      - ATS-ACC-REC-011-05
    preconditions: Use one isolated workspace with the financial records and caller roles required by the relied-on cases.
    steps:
      - do: 'Prepare captures exceeding the deposit by a fee, add that fee and approve independently.'
        expect: The deduction balances preparation and approval retains its recognition beside the transfer.
        provenance: proposed
        source:
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-010-enter-the-fees-reserves-and-corrections-the-processor-took.md
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-011-approve-a-balanced-reconciliation-and-move-the-deposit-to.md
    expected: The deduction balances preparation and approval retains its recognition beside the transfer.
    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-010-enter-the-fees-reserves-and-corrections-the-processor-took.md
      - >-
        specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-011-approve-a-balanced-reconciliation-and-move-the-deposit-to.md
  - id: ATS-ACC-REC-010-13
    title: Manual recognition reaches the ledger
    category: interaction
    level: api
    proves:
      - AS-JNY-ACC-REC-001-01
      - BR-CAP-ACC-REC-014-07
      - BR-CAP-ACC-REC-014-08
    interacts_with:
      - CAP-ACC-REC-014
    relies_on:
      - ATS-ACC-REC-010-10
      - ATS-ACC-REC-014-05
    preconditions: Use one isolated workspace with the financial records and caller roles required by the relied-on cases.
    steps:
      - do: 'Finalize a deposit with a fee and reserve, then post and unpost its operational batch.'
        expect: >-
          Corresponding entries appear with posting and disappear with unposting while requests remain
          retained.
        provenance: proposed
        source:
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-010-enter-the-fees-reserves-and-corrections-the-processor-took.md
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-014-hand-reconciliations-accounting-to-the-ledger-through-the.md
    expected: Corresponding entries appear with posting and disappear with unposting while requests remain retained.
    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-010-enter-the-fees-reserves-and-corrections-the-processor-took.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
  transition: covered
  validation: covered
  permission: covered
  edge: covered
  boundary: covered
  interaction: covered
  failure: 'gap: FND-ACC-REC-055'
  concurrency: 'gap: FND-ACC-REC-055'
  invariant: 'gap: FND-ACC-REC-055'
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.
---

# Document processor deductions and corrections: Capability Test Specification

## Coverage

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

## Interactions With Related Capabilities

Manual accounting journey. Manual removal changes allocation totals. A fee changes the approval outcome. Manual recognition reaches the ledger. Proposed interaction cases require executable proof.
