---
id: ATS-ACC-REC-018
scope: CAP-ACC-REC-018
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-018-01
    title: Period selection and read permission
    level: api
    proves:
      - BR-CAP-ACC-REC-018-01
      - BR-CAP-ACC-REC-018-14
    preconditions: A unit has configured fiscal periods.
    steps: 'Read by explicit period or date, submit incomplete or absent periods and omit read permission.'
    expected: >-
      Valid selection returns that period, incomplete queries fail, absent periods are not found and missing
      grants are forbidden.
    negative: true
    data_needs: Provide Fiscal periods for this case.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#answers 200 with the
        blockers, warnings, clearing lines and period of tenant A’s October
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#answers the period
        containing asOf when no period is named
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses a fiscal year
        without a period number with 400
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#answers 404 for a
        unit with no such period
      - >-
        services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#refuses a principal
        without accounting.reconciliation-batches.read with 403
      - TST-ACC-REC-023
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/e2e/batch-lifecycle.e2e.spec.js#answers 200 with the
      blockers, warnings, clearing lines and period of tenant A’s October
    category: permission
  - id: ATS-ACC-REC-018-02
    title: Payout and older-draft blockers
    level: api
    proves:
      - BR-CAP-ACC-REC-018-02
      - BR-CAP-ACC-REC-018-03
    preconditions: Payouts span holding states and an older unbalanced open draft.
    steps: Assess the selected period.
    expected: >-
      Each in-period live unfinalized payout blocks once with related records, and the older draft blocks
      separately.
    negative: true
    data_needs: Provide readiness world for this case.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        C1 for each live payout of the period not in a finalized batch, carrying its unbalanced-payout
        exception
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        one C1 for the payout whose open batch does not balance, carrying the batch and its difference
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        C2 only for the unbalanced open batch dated before the period, the batch with its difference
      - TST-ACC-REC-055
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
      C1 for each live payout of the period not in a finalized batch, carrying its unbalanced-payout exception
    category: rule
  - id: ATS-ACC-REC-018-03
    title: Overdue acceptance changes the blocker
    level: api
    proves:
      - BR-CAP-ACC-REC-018-04
    preconditions: 'Overdue items have no, open or accepted exceptions.'
    steps: Assess their period.
    expected: >-
      Unaccepted money blocks with its related exception, while accepted overdue money produces no overdue
      blocker.
    negative: true
    data_needs: No additional fixture beyond the case setup.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        C3 for the item overdue at the period’s end with no exception
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        one C3 for the overdue item with its open exception, carrying the exception id
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        no C3 for the overdue item whose exception is accepted
      - TST-ACC-REC-055
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
      C3 for the item overdue at the period’s end with no exception
    category: interaction
  - id: ATS-ACC-REC-018-04
    title: 'Pending approvals, accounting and integrity'
    level: api
    proves:
      - BR-CAP-ACC-REC-018-05
      - BR-CAP-ACC-REC-018-06
    preconditions: One example exists for each blocker category.
    steps: Assess the period and compare the ordered blocker list.
    expected: >-
      Open problems, pending reversals, unposted or late-unreviewed requests and totals drift each appear once
      in check order.
    negative: true
    data_needs: No additional fixture beyond the case setup.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        C4 for the open blocker exception anchored in the period that no other finding carries
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        a possible-duplicate exception of blocker severity once, as C4 and not as W5
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        C5 for the reversal awaiting its second approval
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        C6 for the finalize batch posting has not posted, and not for the request it posted
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        C7 for the September effect posted in October, not reviewed
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        C8 for the open batch whose totals disagree with its rows
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        the blockers in the checks’ order and nothing else
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#still
        reports it once the batch posting that held it was reversed
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        it no more once an unreversed batch posting holds its reconciliation entry
      - TST-ACC-REC-055
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
      C4 for the open blocker exception anchored in the period that no other finding carries
    category: rule
  - id: ATS-ACC-REC-018-05
    title: Clearing balance explains outstanding money
    level: api
    proves:
      - BR-CAP-ACC-REC-018-07
      - BR-CAP-ACC-REC-018-10
    preconditions: Posted clearing entries and unresolved items are available.
    steps: Read the state-day clearing line and assessment.
    expected: 'Posted balance is limited by day, unresolved items count once and any difference blocks.'
    negative: true
    data_needs: Provide Subledger entries for this case.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        C9 for the clearing account whose posted balance differs from its outstanding items
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#counts
        the entries dated up to the state date: debits less credits of the merchant account’s clearing account
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#counts
        none dated after the state date
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#answers
        the clearing line, overdue items (the accepted one too) apart from those in transit and in open
        reconciliation
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-scenario.e2e.spec.js#step 10:
        counts the gift in transit on 2026-10-13 and overdue on 2026-10-16 on the clearing line, with C9
        blocking on the ledger holding none of it
      - TST-ACC-REC-055
      - TST-ACC-REC-028
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
      C9 for the clearing account whose posted balance differs from its outstanding items
    category: invariant
  - id: ATS-ACC-REC-018-06
    title: Warnings alone do not prevent close
    level: api
    proves:
      - BR-CAP-ACC-REC-018-08
    preconditions: Findings represent all warning categories.
    steps: Classify the findings.
    expected: 'Every warning remains nonblocking, including money still in transit.'
    negative: false
    data_needs: No additional fixture beyond the case setup.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/unit/rules/readiness.spec.js#classifies funds in
        transit as a warning, never a blocker
      - >-
        services-accounting:modules/reconciliation/tests/unit/rules/readiness.spec.js#classifies a possible
        duplicate payout as a warning
      - >-
        services-accounting:modules/reconciliation/tests/unit/rules/readiness.spec.js#is false with only
        warnings
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        W1 to W5, each whole and in order
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#answers
        the item in transit as its only warning
      - TST-ACC-REC-092
      - TST-ACC-REC-055
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/unit/rules/readiness.spec.js#classifies funds in
      transit as a warning, never a blocker
    category: edge
  - id: ATS-ACC-REC-018-07
    title: One finding per problem in stable order
    level: api
    proves:
      - BR-CAP-ACC-REC-018-09
    preconditions: Findings span several checks and related records.
    steps: Classify and sort them.
    expected: Check and record ordering is stable and carried exceptions do not duplicate a principal finding.
    negative: false
    data_needs: No additional fixture beyond the case setup.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/unit/rules/readiness.spec.js#reports blockers in the
        checks’ order, then by entity id
      - >-
        services-accounting:modules/reconciliation/tests/unit/rules/readiness.spec.js#lists every check with
        its code and severity, in report order
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#reports
        no finding of its own for an exception another finding carries
      - >-
        services-accounting:modules/reconciliation/tests/e2e/reconciliation-scenario.e2e.spec.js#step 10:
        reports the gift and its overdue exception as that one finding, no exception-unresolved beside it
      - TST-ACC-REC-092
      - TST-ACC-REC-055
      - TST-ACC-REC-028
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/unit/rules/readiness.spec.js#reports blockers in the
      checks’ order, then by entity id
    category: invariant
  - id: ATS-ACC-REC-018-08
    title: Payment occurrence and acceptance anchor
    level: api
    proves:
      - BR-CAP-ACC-REC-018-11
      - BR-CAP-ACC-REC-018-12
    preconditions: Items occur in the period and accepted exceptions have differing anchors and acceptance days.
    steps: Assess both months and inspect buckets and accepted lists.
    expected: >-
      Item occurrence assigns six currency buckets; period anchors assign accepted exceptions, sorted by
      acceptance time and truncated after five hundred.
    negative: false
    data_needs: Configure both business units used by the case.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period-close-fields.integration.spec.js#answers
        the six buckets in order, each with its count and signed amount, matched to processor unavailable
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period-close-fields.integration.spec.js#counts
        each item of the period in one bucket at most: the buckets and the two excluded make the thirteen in
        scope
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period-close-fields.integration.spec.js#counts
        the item of 23:00 Eastern on October 31 and neither the item of September 30 nor that of November 1
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period-close-fields.integration.spec.js#answers
        the warning and the blocker accepted in the period, by when they were accepted, whole
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period-close-fields.integration.spec.js#answers
        the first 500 accepted exceptions by when they were accepted, and says there were more
      - >-
        services-accounting:modules/reconciliation/tests/unit/rules/payment-states.spec.js#marks only matched
        to processor unavailable, with its reason
      - TST-ACC-REC-054
      - TST-ACC-REC-089
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period-close-fields.integration.spec.js#answers
      the six buckets in order, each with its count and signed amount, matched to processor unavailable
    category: boundary
  - id: ATS-ACC-REC-018-09
    title: Assessment requires an open transaction
    level: api
    proves:
      - BR-CAP-ACC-REC-018-13
    preconditions: No caller transaction is active.
    steps: Assess readiness and check period writability.
    expected: Both calls fail before taking usable transactional locks.
    negative: true
    data_needs: No additional fixture beyond the case setup.
    bound_to:
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#refuses
        an assessment outside a transaction
      - >-
        services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#refuses
        a writability check outside a transaction
      - TST-ACC-REC-055
    provenance: test
    source: >-
      services-accounting:modules/reconciliation/tests/integration/services/close-readiness/assess-period.integration.spec.js#refuses
      an assessment outside a transaction
    category: failure
  - id: ATS-ACC-REC-018-10
    title: Console previews without closing
    level: browser
    proves:
      - BR-CAP-ACC-REC-018-15
      - AS-JNY-ACC-REC-005-01
    preconditions: A selected unit has blockers.
    steps: Open Close Readiness and select the period.
    expected: Linked blockers and warnings are displayed without close or prototype actions.
    negative: false
    data_needs: Use the live Accounting service boundary.
    bound_to:
      - >-
        react-console:e2e/mock/accounting-reconciliation.mock.spec.ts#Close Readiness reads what
        reconciliation would block
      - >-
        react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0607.spec.ts#ACT-ACC-0607
      - TST-ACC-REC-022
      - TST-ACC-REC-015
    provenance: test
    source: >-
      react-console:e2e/mock/accounting-reconciliation.mock.spec.ts#Close Readiness reads what reconciliation
      would block
    category: interaction
  - id: ATS-ACC-REC-018-11
    title: Independent acceptance changes readiness
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-REC-018-04
      - BR-CAP-ACC-REC-016-02
      - BR-CAP-ACC-REC-016-05
    interacts_with:
      - CAP-ACC-REC-016
    relies_on:
      - ATS-ACC-REC-018-03
      - ATS-ACC-REC-016-02
    preconditions: Use one isolated workspace with the financial records and caller roles required by the relied-on cases.
    steps:
      - do: 'Request acceptance of an overdue blocker, assess, approve independently and assess again.'
        expect: The request leaves the blocker; completed acceptance removes that overdue blocker.
        provenance: proposed
        source:
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-018-tell-month-end-close-what-stops-a-period-from-closing.md
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-016-accept-a-problem-under-policy-with-a-second-persons-approval.md
    expected: The request leaves the blocker; completed acceptance removes that overdue blocker.
    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-018-tell-month-end-close-what-stops-a-period-from-closing.md
      - >-
        specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-016-accept-a-problem-under-policy-with-a-second-persons-approval.md
  - id: ATS-ACC-REC-018-12
    title: Overview and assessment use their own dates
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-REC-018-02
      - BR-CAP-ACC-REC-018-03
      - BR-CAP-ACC-REC-019-01
      - BR-CAP-ACC-REC-019-03
    interacts_with:
      - CAP-ACC-REC-019
    relies_on:
      - ATS-ACC-REC-018-02
      - ATS-ACC-REC-019-01
    preconditions: Use one isolated workspace with the financial records and caller roles required by the relied-on cases.
    steps:
      - do: Read current overview and assess a prior period while a deposit is finalized today.
        expect: Current progress shows completion while assessment follows its selected period and state day.
        provenance: proposed
        source:
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-018-tell-month-end-close-what-stops-a-period-from-closing.md
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-019-see-the-state-of-reconciliation-at-a-glance.md
    expected: Current progress shows completion while assessment follows its selected period and state day.
    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-018-tell-month-end-close-what-stops-a-period-from-closing.md
      - >-
        specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-019-see-the-state-of-reconciliation-at-a-glance.md
  - id: ATS-ACC-REC-018-13
    title: Period locking coordinates approval
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-REC-018-13
      - BR-CAP-ACC-REC-011-11
    interacts_with:
      - CAP-ACC-REC-011
    relies_on:
      - ATS-ACC-REC-018-09
      - ATS-ACC-REC-011-08
    preconditions: Use one isolated workspace with the financial records and caller roles required by the relied-on cases.
    steps:
      - do: 'Hold a period close lock during approval, complete close and retry with an open selected batch.'
        expect: Approval waits for the lock and later accounting preserves the original document day.
        provenance: proposed
        source:
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-018-tell-month-end-close-what-stops-a-period-from-closing.md
          - >-
            specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-011-approve-a-balanced-reconciliation-and-move-the-deposit-to.md
    expected: Approval waits for the lock and later accounting preserves the original document day.
    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-018-tell-month-end-close-what-stops-a-period-from-closing.md
      - >-
        specs/accounting/reconciliation/planning/capabilities/CAP-ACC-REC-011-approve-a-balanced-reconciliation-and-move-the-deposit-to.md
evidence:
  - >-
    Bindings identify existing tests at the pinned revisions; proposed cases remain unbound and describe the
    proof still needed.
coverage:
  rule: covered
  transition: not-applicable
  permission: covered
  edge: covered
  failure: covered
  boundary: covered
  invariant: covered
  interaction: covered
  validation: 'gap: FND-ACC-REC-063'
  concurrency: 'gap: FND-ACC-REC-063'
coverage_notes:
  transition: This capability reads and derives records without a lifecycle mutation command.
  design_completeness: >-
    Covered categories count specified cases, including proposed cases. Exhaustive state-transition,
    permission-key and domain-invariant traceability remains a separate proof gap.
---

# Assess reconciliation work before period close: Capability Test Specification

## Coverage

| Rule | Proved by |
|---|---|
| `BR-CAP-ACC-REC-018-01` | `ATS-ACC-REC-018-01` |
| `BR-CAP-ACC-REC-018-02` | `ATS-ACC-REC-018-02` |
| `BR-CAP-ACC-REC-018-03` | `ATS-ACC-REC-018-02` |
| `BR-CAP-ACC-REC-018-04` | `ATS-ACC-REC-018-03` |
| `BR-CAP-ACC-REC-018-05` | `ATS-ACC-REC-018-04` |
| `BR-CAP-ACC-REC-018-06` | `ATS-ACC-REC-018-04` |
| `BR-CAP-ACC-REC-018-07` | `ATS-ACC-REC-018-05` |
| `BR-CAP-ACC-REC-018-08` | `ATS-ACC-REC-018-06` |
| `BR-CAP-ACC-REC-018-09` | `ATS-ACC-REC-018-07` |
| `BR-CAP-ACC-REC-018-10` | `ATS-ACC-REC-018-05` |
| `BR-CAP-ACC-REC-018-11` | `ATS-ACC-REC-018-08` |
| `BR-CAP-ACC-REC-018-12` | `ATS-ACC-REC-018-08` |
| `BR-CAP-ACC-REC-018-13` | `ATS-ACC-REC-018-09` |
| `BR-CAP-ACC-REC-018-14` | `ATS-ACC-REC-018-01` |

## Interactions With Related Capabilities

Overdue acceptance changes the blocker. Console previews without closing. Independent acceptance changes readiness. Overview and assessment use their own dates. Period locking coordinates approval. Proposed interaction cases require executable proof.
