---
id: ATS-ACC-CLS-005
scope: CAP-ACC-CLS-005
product_area: accounting
module: close
revision: 1
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-ACC-CLS-005-01
    title: Check period order and the end-date boundary
    level: unit
    proves:
      - BR-CAP-ACC-CLS-005-01
      - BR-CAP-ACC-CLS-005-02
    preconditions: Earlier periods remain open and dates span the month’s end.
    steps: Evaluate prior-period and ended-period checks.
    expected: >-
      Earlier outstanding periods block in date order, and the month passes its
      date check only after the final day.
    negative: true
    data_needs: Calendar and local-date fixtures.
    bound_to:
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/period-rules.spec.js#is
        blocked by an earlier period of the same year that is open, naming it
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/period-rules.spec.js#is
        blocked by a period of an earlier year, and counts every one oldest
        first
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/period-rules.spec.js#ignores
        later periods, open or not
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/period-rules.spec.js#is
        blocked on the period’s last day
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/period-rules.spec.js#passes
        the day after the period ends
      - TST-ACC-CLS-043
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/unit/readiness/period-rules.spec.js#readiness:
      the calendar rules
    category: boundary
  - id: ATS-ACC-CLS-005-02
    title: Classify unfinished batches with their next action
    level: unit
    proves:
      - BR-CAP-ACC-CLS-005-03
      - BR-CAP-ACC-CLS-005-04
      - BR-CAP-ACC-CLS-005-05
      - BR-CAP-ACC-CLS-005-06
    preconditions: The period contains all batch states and close-owned system batches.
    steps: Build the batch readiness result.
    expected: >-
      Unposted ordinary batches block with suitable actions, while posted and
      close-owned batches are excluded.
    negative: true
    data_needs: Ordinary and system batches across status variants.
    bound_to:
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/batches-posted.spec.js#is
        blocked with the count in its headline: 23 batches
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/batches-posted.spec.js#names
        the action each unposted status requires
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/batches-posted.spec.js#never
        counts a posted or downloaded batch as unposted
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/batches-posted.spec.js#never
        counts the close’s own open system batches, deferred revenue and COGS,
        as unposted
      - >-
        services-accounting:modules/fiscal-close/tests/unit/carried/fiscal-years/logic/validate-period-closing-batches.spec.js#2.0:
        is blocked by the archived batch of 1.0's baseline, which 1.0 let
        through
      - >-
        services-accounting:modules/fiscal-close/tests/integration/services/persistence/unposted-batches.queries.integration.spec.js#never
        answers the close’s own system batches, open after a reopen, which the
        fixture wrote (premise)
      - TST-ACC-CLS-041
      - TST-ACC-CLS-038
      - TST-ACC-CLS-036
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/unit/readiness/batches-posted.spec.js#readiness:
      batches_posted
    category: rule
  - id: ATS-ACC-CLS-005-03
    title: Locate unfinished posting for every transaction kind
    level: api
    proves:
      - BR-CAP-ACC-CLS-005-07
      - BR-CAP-ACC-CLS-005-08
    preconditions: >-
      Eligible documents have absent, open or failed batches alongside excluded
      drafts.
    steps: Read outstanding transactions and build their check.
    expected: >-
      Each returned kind has its reason and navigation, with draft and pro forma
      invoices excluded.
    negative: true
    data_needs: Eight transaction kinds with posting-state variants.
    bound_to:
      - >-
        services-accounting:modules/fiscal-close/tests/integration/services/persistence/unaccounted-transactions.queries.integration.spec.js#answers
        every kind, mapped whole, by date with each reason
      - >-
        services-accounting:modules/fiscal-close/tests/integration/services/persistence/unaccounted-transactions.queries.integration.spec.js#holds
        the draft, the pro forma, the posted and the downloaded documents of
        faa’s September (premise for their absence below)
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/transactions-accounted.spec.js#routes
        each kind to its own record
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/transactions-accounted.spec.js#counts
        each reason in its figures
      - TST-ACC-CLS-035
      - TST-ACC-CLS-046
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/persistence/unaccounted-transactions.queries.integration.spec.js#answers
      every kind, mapped whole, by date with each reason
    category: validation
  - id: ATS-ACC-CLS-005-04
    title: Expose ledger blockers in the console
    level: browser
    proves:
      - BR-CAP-ACC-CLS-005-03
      - BR-CAP-ACC-CLS-005-04
      - BR-CAP-ACC-CLS-005-07
    preconditions: 'The month contains an open batch, archived batch and unposted invoice.'
    steps: Open the checklist and inspect the supporting drawers.
    expected: The screen shows the outstanding records and their available next actions.
    negative: true
    data_needs: The blocked-ledger browser fixture.
    bound_to:
      - >-
        react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0616.spec.ts#ACT-ACC-0616
      - TST-ACC-CLS-004
    provenance: test
    source: >-
      react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0616.spec.ts#ACT-ACC-0616
    category: validation
  - id: ATS-ACC-CLS-005-05
    title: Expose unfinished ledger work before protection applies
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-CLS-005-03
      - BR-CAP-ACC-CLS-005-07
    preconditions: An ended open month has an ordinary unposted batch.
    steps: >-
      Read ledger blockers; complete its posting and reread readiness, then take
      the month for closing and try another ordinary posting.
    expected: >-
      Resolving the original work removes its blocker; subsequent ordinary work
      meets the protected-period guard.
    negative: false
    data_needs: An ended open month has an ordinary unposted batch.
    bound_to: []
    provenance: proposed
    source:
      - >-
        rhythm-v2-docs:specs/accounting/close/design/workflows/WF-ACC-CLS-006-keep-ordinary-postings-out-of-a-protected-month.md#What
        It Does
      - >-
        services-accounting:modules/fiscal-close/tests/integration/services/readiness/evaluate-readiness.integration.spec.js#blocks
        on each failing check with its headline: 23 batches must be posted
      - >-
        services-accounting:modules/fiscal-close/tests/integration/services/persistence/unaccounted-transactions.queries.integration.spec.js#answers
        every kind, mapped whole, by date with each reason
    exercises:
      - CAP-ACC-CLS-005
      - CAP-ACC-CLS-003
      - CAP-ACC-CLS-004
      - CAP-ACC-CLS-006
      - CAP-ACC-CLS-007
      - CAP-ACC-CLS-010
    workflows:
      - WF-ACC-CLS-005
evidence:
  - >-
    services-accounting examination inputs: the bound unit and integration
    files.
  - 'react-console examination inputs: the blocked-month browser journey.'
  - >-
    Testing back-fill: pinned executable files are inspected; no backend or
    browser result is claimed.
coverage:
  rule: covered
  transition: not-applicable
  validation: covered
  permission: 'gap: FND-ACC-CLS-061'
  edge: 'gap: FND-ACC-CLS-061'
  failure: 'gap: FND-ACC-CLS-061'
  boundary: covered
  concurrency: 'gap: FND-ACC-CLS-061'
  invariant: 'gap: FND-ACC-CLS-061'
  interaction: covered
coverage_notes:
  rule:
    scenarios:
      - ATS-ACC-CLS-005-02
    provenance: inferred
    source:
      - ATS-ACC-CLS-005-02
    note: Specified coverage does not establish that all variants execute or pass.
  transition:
    reason: >-
      This capability evaluates or reads state; it defines no independent
      persisted lifecycle transition.
    provenance: inferred
    source:
      - CAP-ACC-CLS-005
      - WF-ACC-CLS-005
  validation:
    scenarios:
      - ATS-ACC-CLS-005-03
      - ATS-ACC-CLS-005-04
    provenance: inferred
    source:
      - ATS-ACC-CLS-005-03
      - ATS-ACC-CLS-005-04
    note: Specified coverage does not establish that all variants execute or pass.
  permission:
    reason: >-
      Boundary dates across workspace time zones, simultaneous posting changes
      and protected-period unposting need broader proof.
    provenance: unknown
    source: FND-ACC-CLS-061
  edge:
    reason: >-
      Boundary dates across workspace time zones, simultaneous posting changes
      and protected-period unposting need broader proof.
    provenance: unknown
    source: FND-ACC-CLS-061
  failure:
    reason: >-
      Boundary dates across workspace time zones, simultaneous posting changes
      and protected-period unposting need broader proof.
    provenance: unknown
    source: FND-ACC-CLS-061
  boundary:
    scenarios:
      - ATS-ACC-CLS-005-01
    provenance: inferred
    source:
      - ATS-ACC-CLS-005-01
    note: Specified coverage does not establish that all variants execute or pass.
  concurrency:
    reason: >-
      Boundary dates across workspace time zones, simultaneous posting changes
      and protected-period unposting need broader proof.
    provenance: unknown
    source: FND-ACC-CLS-061
  invariant:
    reason: >-
      Boundary dates across workspace time zones, simultaneous posting changes
      and protected-period unposting need broader proof.
    provenance: unknown
    source: FND-ACC-CLS-061
  interaction:
    scenarios:
      - ATS-ACC-CLS-005-05
    provenance: inferred
    source:
      - ATS-ACC-CLS-005-05
    note: Specified coverage does not establish that all variants execute or pass.
design_coverage:
  objects:
    - DOM-ACC-CLS-002
  invariants:
    - id: INV-DOM-ACC-CLS-002-01
      scenarios: []
      gap: FND-ACC-CLS-061
      provenance: unknown
      source: FND-ACC-CLS-061
    - id: INV-DOM-ACC-CLS-002-02
      scenarios: []
      gap: FND-ACC-CLS-061
      provenance: unknown
      source: FND-ACC-CLS-061
    - id: INV-DOM-ACC-CLS-002-03
      scenarios: []
      gap: FND-ACC-CLS-061
      provenance: unknown
      source: FND-ACC-CLS-061
    - id: INV-DOM-ACC-CLS-002-04
      scenarios: []
      gap: FND-ACC-CLS-061
      provenance: unknown
      source: FND-ACC-CLS-061
    - id: INV-DOM-ACC-CLS-002-05
      scenarios: []
      gap: FND-ACC-CLS-061
      provenance: unknown
      source: FND-ACC-CLS-061
    - id: INV-DOM-ACC-CLS-002-06
      scenarios: []
      gap: FND-ACC-CLS-061
      provenance: unknown
      source: FND-ACC-CLS-061
    - id: INV-DOM-ACC-CLS-002-07
      scenarios: []
      gap: FND-ACC-CLS-061
      provenance: unknown
      source: FND-ACC-CLS-061
    - id: INV-DOM-ACC-CLS-002-08
      scenarios: []
      gap: FND-ACC-CLS-061
      provenance: unknown
      source: FND-ACC-CLS-061
    - id: INV-DOM-ACC-CLS-002-09
      scenarios: []
      gap: FND-ACC-CLS-061
      provenance: unknown
      source: FND-ACC-CLS-061
    - id: INV-DOM-ACC-CLS-002-10
      scenarios: []
      gap: FND-ACC-CLS-061
      provenance: unknown
      source: FND-ACC-CLS-061
  permissions:
    - key: accounting.fiscal-periods.read
      where_checked: api
      gap: FND-ACC-CLS-061
      provenance: unknown
      source: FND-ACC-CLS-061
      note: >-
        Existing permission scenarios cover the named cases; complete grant and
        surface variants need qualification.
  workflows:
    - WF-ACC-CLS-005
  state_models: []
  transitions: []
  interactions:
    - with: CAP-ACC-CLS-003
      scenario: ATS-ACC-CLS-005-05
      provenance: proposed
      source:
        - >-
          rhythm-v2-docs:specs/accounting/close/design/workflows/WF-ACC-CLS-006-keep-ordinary-postings-out-of-a-protected-month.md#What
          It Does
        - >-
          services-accounting:modules/fiscal-close/tests/integration/services/readiness/evaluate-readiness.integration.spec.js#blocks
          on each failing check with its headline: 23 batches must be posted
        - >-
          services-accounting:modules/fiscal-close/tests/integration/services/persistence/unaccounted-transactions.queries.integration.spec.js#answers
          every kind, mapped whole, by date with each reason
    - with: CAP-ACC-CLS-004
      scenario: ATS-ACC-CLS-005-05
      provenance: proposed
      source:
        - >-
          rhythm-v2-docs:specs/accounting/close/design/workflows/WF-ACC-CLS-006-keep-ordinary-postings-out-of-a-protected-month.md#What
          It Does
        - >-
          services-accounting:modules/fiscal-close/tests/integration/services/readiness/evaluate-readiness.integration.spec.js#blocks
          on each failing check with its headline: 23 batches must be posted
        - >-
          services-accounting:modules/fiscal-close/tests/integration/services/persistence/unaccounted-transactions.queries.integration.spec.js#answers
          every kind, mapped whole, by date with each reason
    - with: CAP-ACC-CLS-006
      scenario: ATS-ACC-CLS-005-05
      provenance: proposed
      source:
        - >-
          rhythm-v2-docs:specs/accounting/close/design/workflows/WF-ACC-CLS-006-keep-ordinary-postings-out-of-a-protected-month.md#What
          It Does
        - >-
          services-accounting:modules/fiscal-close/tests/integration/services/readiness/evaluate-readiness.integration.spec.js#blocks
          on each failing check with its headline: 23 batches must be posted
        - >-
          services-accounting:modules/fiscal-close/tests/integration/services/persistence/unaccounted-transactions.queries.integration.spec.js#answers
          every kind, mapped whole, by date with each reason
    - with: CAP-ACC-CLS-007
      scenario: ATS-ACC-CLS-005-05
      provenance: proposed
      source:
        - >-
          rhythm-v2-docs:specs/accounting/close/design/workflows/WF-ACC-CLS-006-keep-ordinary-postings-out-of-a-protected-month.md#What
          It Does
        - >-
          services-accounting:modules/fiscal-close/tests/integration/services/readiness/evaluate-readiness.integration.spec.js#blocks
          on each failing check with its headline: 23 batches must be posted
        - >-
          services-accounting:modules/fiscal-close/tests/integration/services/persistence/unaccounted-transactions.queries.integration.spec.js#answers
          every kind, mapped whole, by date with each reason
    - with: CAP-ACC-CLS-010
      scenario: ATS-ACC-CLS-005-05
      provenance: proposed
      source:
        - >-
          rhythm-v2-docs:specs/accounting/close/design/workflows/WF-ACC-CLS-006-keep-ordinary-postings-out-of-a-protected-month.md#What
          It Does
        - >-
          services-accounting:modules/fiscal-close/tests/integration/services/readiness/evaluate-readiness.integration.spec.js#blocks
          on each failing check with its headline: 23 batches must be posted
        - >-
          services-accounting:modules/fiscal-close/tests/integration/services/persistence/unaccounted-transactions.queries.integration.spec.js#answers
          every kind, mapped whole, by date with each reason
---
# Resolve ledger work that prevents closing: Capability Test Specification

## Coverage

The table maps each required rule to its specified cases or an explicit finding. Category coverage describes the specification; executable bindings and recorded run results establish different kinds of evidence. Proposed cases remain unqualified.

| Rule | Scenarios or Finding |
|---|---|
| `BR-CAP-ACC-CLS-005-01` | `ATS-ACC-CLS-005-01` |
| `BR-CAP-ACC-CLS-005-02` | `ATS-ACC-CLS-005-01` |
| `BR-CAP-ACC-CLS-005-03` | `ATS-ACC-CLS-005-02`, `ATS-ACC-CLS-005-04`, `ATS-ACC-CLS-005-05` |
| `BR-CAP-ACC-CLS-005-04` | `ATS-ACC-CLS-005-02`, `ATS-ACC-CLS-005-04` |
| `BR-CAP-ACC-CLS-005-05` | `ATS-ACC-CLS-005-02` |
| `BR-CAP-ACC-CLS-005-06` | `ATS-ACC-CLS-005-02` |
| `BR-CAP-ACC-CLS-005-07` | `ATS-ACC-CLS-005-03`, `ATS-ACC-CLS-005-04`, `ATS-ACC-CLS-005-05` |
| `BR-CAP-ACC-CLS-005-08` | `ATS-ACC-CLS-005-03` |

## Interactions With Related Capabilities

Ledger completion feeds readiness, which in turn precedes period protection. The proposed interaction follows outstanding work through resolution and then checks the protected month. Query and evaluator tests alone do not establish the posting workflow.
