---
id: ATS-ACC-CLS-004
scope: CAP-ACC-CLS-004
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-004-01
    title: Compute verdicts without treating absence as success
    level: unit
    proves:
      - BR-CAP-ACC-CLS-004-02
      - BR-CAP-ACC-CLS-004-03
      - INV-DOM-ACC-CLS-002-01
    preconditions: Check lists cover requirements and all outcomes.
    steps: Calculate verdicts and counts.
    expected: >-
      Required blockers, pending results and errors prevent readiness; advisory
      concerns produce warnings; passing lists are ready.
    negative: false
    data_needs: A requirement-by-outcome fixture matrix.
    bound_to:
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#is
        not ready for a required check blocked
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#is
        not ready for a required check pending: missing evidence never passes
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#is
        not ready for a required check in error
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#is
        ready with warnings for an advisory check blocked, which never blocks
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#is
        ready when every check passed or is not applicable
      - TST-ACC-CLS-044
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#readiness:
      the verdict
    category: rule
  - id: ATS-ACC-CLS-004-02
    title: Isolate a failed evaluator
    level: api
    proves:
      - BR-CAP-ACC-CLS-004-04
    preconditions: One evaluator’s read fails.
    steps: Run evaluation through its savepoint.
    expected: >-
      Its check reports error with the applicable requirement and other reads
      remain usable.
    negative: true
    data_needs: An evaluator failure fixture.
    bound_to:
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/other-checks.spec.js#is
        an error, never passed, keeping the requirement the tenant’s policy
        gives it
      - >-
        services-accounting:modules/fiscal-close/tests/integration/services/persistence/readiness-transactions.integration.spec.js#rolls
        an evaluator’s failure back to its savepoint and keeps the transaction
        usable
      - TST-ACC-CLS-042
      - TST-ACC-CLS-033
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/unit/readiness/other-checks.spec.js#is
      an error, never passed, keeping the requirement the tenant’s policy gives
      it
    category: rule
  - id: ATS-ACC-CLS-004-03
    title: Append the year review checks
    level: api
    proves:
      - BR-CAP-ACC-CLS-004-05
      - BR-CAP-ACC-CLS-004-08
      - INV-DOM-ACC-CLS-002-02
    preconditions: A clean period and final-period year case are available.
    steps: Evaluate monthly and fiscal-year scopes.
    expected: >-
      Monthly checks remain ordered and year scope adds three checks and
      relevant effects.
    negative: false
    data_needs: Period and year-end fixtures.
    bound_to:
      - >-
        services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#adds
        the year checks for the fiscal_year scope
      - >-
        services-accounting:modules/fiscal-close/tests/integration/services/readiness/evaluate-readiness.integration.spec.js#adds
        the year checks to December 2026
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#lists
        a month’s close in order
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#adds
        the year’s close, the next year’s generation and no closing entries for
        the last period
      - TST-ACC-CLS-016
      - TST-ACC-CLS-037
      - TST-ACC-CLS-044
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/readiness/evaluate-readiness.integration.spec.js#the
      fiscal year scope
    category: failure
  - id: ATS-ACC-CLS-004-04
    title: Refuse writes during independent evaluation
    level: api
    proves:
      - BR-CAP-ACC-CLS-004-06
      - INV-DOM-ACC-CLS-002-05
    preconditions: Evaluation starts without a caller transaction.
    steps: Attempt a write through the evaluation transaction.
    expected: The transaction is read-only and refuses the write.
    negative: true
    data_needs: A write attempt in the readiness transaction fixture.
    bound_to:
      - >-
        services-accounting:modules/fiscal-close/tests/integration/services/persistence/readiness-transactions.integration.spec.js#opens
        a read-only transaction when the caller has none
      - >-
        services-accounting:modules/fiscal-close/tests/integration/services/persistence/readiness-transactions.integration.spec.js#refuses
        a write in it
      - TST-ACC-CLS-033
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/persistence/readiness-transactions.integration.spec.js#refuses
      a write in it
    category: rule
  - id: ATS-ACC-CLS-004-05
    title: Bound supporting records and preserve totals
    level: unit
    proves:
      - BR-CAP-ACC-CLS-004-07
      - INV-DOM-ACC-CLS-002-03
    preconditions: A check has more than fifty supporting records.
    steps: Build the check response.
    expected: The item list is bounded and the total remains available.
    negative: false
    data_needs: Oversized batch and transaction lists.
    bound_to:
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/batches-posted.spec.js#keeps
        the first 50 items and the total beside them
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/transactions-accounted.spec.js#shows
        only the total when more than the 50 items exist
      - TST-ACC-CLS-041
      - TST-ACC-CLS-046
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/unit/readiness/batches-posted.spec.js#keeps
      the first 50 items and the total beside them
    category: invariant
  - id: ATS-ACC-CLS-004-06
    title: Include the viewer’s action authority
    level: api
    proves:
      - BR-CAP-ACC-CLS-004-09
      - INV-DOM-ACC-CLS-002-06
    preconditions: A clean period is viewed by a closer and a reader.
    steps: Evaluate each caller’s readiness.
    expected: The closer is ready while only the reader’s authority check blocks.
    negative: true
    data_needs: Two permission profiles on one clean period.
    bound_to:
      - >-
        services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#answers
        200, ready, to a closer: the slice carries the close key the route
        evaluates
      - >-
        services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#answers
        a reader not ready, blocked by close_authorization alone
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/other-checks.spec.js#is
        blocked when the caller does not
      - TST-ACC-CLS-016
      - TST-ACC-CLS-042
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#answers
      a reader not ready, blocked by close_authorization alone
    category: boundary
  - id: ATS-ACC-CLS-004-07
    title: Validate readiness boundaries and workspace scope
    level: api
    proves:
      - BR-CAP-ACC-CLS-004-10
    preconditions: Two workspaces each contain a period.
    steps: >-
      Request invalid periods and scopes, a foreign year and the second
      workspace’s own period.
    expected: >-
      Invalid requests fail and each workspace receives only its own
      information.
    negative: true
    data_needs: Two workspace calendars and malformed requests.
    bound_to:
      - >-
        services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#refuses
        a period number out of range with 400
      - >-
        services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#refuses
        an unknown scope with 400
      - >-
        services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#answers
        404 for a year of another tenant
      - >-
        services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#answers
        B its own September, never A’s (B’s open batch blocks it)
      - TST-ACC-CLS-016
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#the
      readiness
    category: permission
  - id: ATS-ACC-CLS-004-08
    title: Reevaluate changed ledger and payment evidence before closing
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-CLS-004-02
      - BR-CAP-ACC-CLS-004-08
      - BR-CAP-ACC-CLS-004-11
    preconditions: >-
      An ended month has ledger work, a payment finding and a due schedule with
      incomplete accounts.
    steps: >-
      Review each supporting section; resolve those causes, reread readiness,
      then change ledger evidence before the job revalidates.
    expected: >-
      The overall review responds to each section, and execution uses its own
      evaluation rather than the earlier screen result.
    negative: false
    data_needs: >-
      An ended month has ledger work, a payment finding and a due schedule with
      incomplete accounts.
    bound_to: []
    provenance: proposed
    source:
      - >-
        rhythm-v2-docs:specs/accounting/close/design/workflows/WF-ACC-CLS-005-evaluate-a-month-s-close-readiness.md#What
        It Does
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#is
        not ready for a required check pending: missing evidence never passes
      - >-
        services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#lists
        a month’s close in order
      - >-
        services-accounting:docs/fiscal-close/README.md#3. Readiness checks
        (month-end)
    exercises:
      - CAP-ACC-CLS-004
      - CAP-ACC-CLS-005
      - CAP-ACC-CLS-006
      - CAP-ACC-CLS-007
      - CAP-ACC-CLS-008
      - CAP-ACC-CLS-010
    workflows:
      - WF-ACC-CLS-005
  - id: ATS-ACC-CLS-004-09
    title: Refuse readiness without read authority
    category: permission
    level: api
    proves:
      - BR-CAP-ACC-CLS-004-10
    preconditions: A caller has application access but lacks fiscal-period read authority.
    steps: Request period readiness.
    expected: Access is denied before readiness is returned.
    negative: true
    data_needs: A caller has application access but lacks fiscal-period read authority.
    bound_to:
      - >-
        services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#refuses
        a principal without accounting.fiscal-periods.read with 403
      - TST-ACC-CLS-016
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#refuses
      a principal without accounting.fiscal-periods.read with 403
  - id: ATS-ACC-CLS-004-10
    title: Keep the readiness transaction usable after evaluator failure
    category: failure
    level: api
    proves:
      - INV-DOM-ACC-CLS-002-02
    preconditions: A standalone readiness transaction has begun.
    steps: >-
      Run a failing database expression inside an evaluator savepoint, catch the
      failure and run another read in the outer transaction.
    expected: >-
      The evaluator fails, its savepoint rolls back and the next outer read
      succeeds.
    negative: true
    data_needs: A standalone readiness transaction has begun.
    bound_to:
      - TST-ACC-CLS-033
      - >-
        services-accounting:modules/fiscal-close/tests/integration/services/persistence/readiness-transactions.integration.spec.js#rolls
        an evaluator’s failure back to its savepoint and keeps the transaction
        usable
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/persistence/readiness-transactions.integration.spec.js#rolls
      an evaluator’s failure back to its savepoint and keeps the transaction
      usable
evidence:
  - >-
    services-accounting examination inputs: the bound unit, integration and
    end-to-end files.
  - >-
    Testing back-fill: pinned executable files are inspected; no backend or
    browser result is claimed.
coverage:
  rule: covered
  transition: not-applicable
  validation: 'gap: FND-ACC-CLS-060'
  permission: covered
  edge: 'gap: FND-ACC-CLS-060'
  failure: covered
  boundary: covered
  concurrency: 'gap: FND-ACC-CLS-060'
  invariant: covered
  interaction: covered
coverage_notes:
  rule:
    scenarios:
      - ATS-ACC-CLS-004-01
      - ATS-ACC-CLS-004-02
      - ATS-ACC-CLS-004-04
    provenance: inferred
    source:
      - ATS-ACC-CLS-004-01
      - ATS-ACC-CLS-004-02
      - ATS-ACC-CLS-004-04
    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-004
      - WF-ACC-CLS-005
  validation:
    reason: >-
      The standalone shared transaction has read-only proof, but concurrent
      changing inputs and evaluator-to-evaluator continuation need complete
      acceptance proof.
    provenance: unknown
    source: FND-ACC-CLS-060
  permission:
    scenarios:
      - ATS-ACC-CLS-004-07
      - ATS-ACC-CLS-004-09
    provenance: inferred
    source:
      - ATS-ACC-CLS-004-07
      - ATS-ACC-CLS-004-09
    note: Specified coverage does not establish that all variants execute or pass.
  edge:
    reason: >-
      The standalone shared transaction has read-only proof, but concurrent
      changing inputs and evaluator-to-evaluator continuation need complete
      acceptance proof.
    provenance: unknown
    source: FND-ACC-CLS-060
  failure:
    scenarios:
      - ATS-ACC-CLS-004-03
      - ATS-ACC-CLS-004-10
    provenance: inferred
    source:
      - ATS-ACC-CLS-004-03
      - ATS-ACC-CLS-004-10
    note: Specified coverage does not establish that all variants execute or pass.
  boundary:
    scenarios:
      - ATS-ACC-CLS-004-06
    provenance: inferred
    source:
      - ATS-ACC-CLS-004-06
    note: Specified coverage does not establish that all variants execute or pass.
  concurrency:
    reason: >-
      The standalone shared transaction has read-only proof, but concurrent
      changing inputs and evaluator-to-evaluator continuation need complete
      acceptance proof.
    provenance: unknown
    source: FND-ACC-CLS-060
  invariant:
    scenarios:
      - ATS-ACC-CLS-004-05
    provenance: inferred
    source:
      - ATS-ACC-CLS-004-05
    note: Specified coverage does not establish that all variants execute or pass.
  interaction:
    scenarios:
      - ATS-ACC-CLS-004-08
    provenance: inferred
    source:
      - ATS-ACC-CLS-004-08
    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:
        - ATS-ACC-CLS-004-01
      provenance: test
      source:
        - >-
          services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#readiness:
          the verdict
    - id: INV-DOM-ACC-CLS-002-02
      scenarios:
        - ATS-ACC-CLS-004-03
        - ATS-ACC-CLS-004-10
      provenance: test
      source:
        - >-
          services-accounting:modules/fiscal-close/tests/integration/services/readiness/evaluate-readiness.integration.spec.js#the
          fiscal year scope
        - >-
          services-accounting:modules/fiscal-close/tests/integration/services/persistence/readiness-transactions.integration.spec.js#rolls
          an evaluator’s failure back to its savepoint and keeps the transaction
          usable
    - id: INV-DOM-ACC-CLS-002-03
      scenarios:
        - ATS-ACC-CLS-004-05
      provenance: test
      source:
        - >-
          services-accounting:modules/fiscal-close/tests/unit/readiness/batches-posted.spec.js#keeps
          the first 50 items and the total beside them
    - id: INV-DOM-ACC-CLS-002-04
      scenarios: []
      gap: FND-ACC-CLS-060
      provenance: unknown
      source: FND-ACC-CLS-060
    - id: INV-DOM-ACC-CLS-002-05
      scenarios:
        - ATS-ACC-CLS-004-04
      provenance: test
      source:
        - >-
          services-accounting:modules/fiscal-close/tests/integration/services/persistence/readiness-transactions.integration.spec.js#refuses
          a write in it
    - id: INV-DOM-ACC-CLS-002-06
      scenarios:
        - ATS-ACC-CLS-004-06
      provenance: test
      source:
        - >-
          services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#answers
          a reader not ready, blocked by close_authorization alone
    - id: INV-DOM-ACC-CLS-002-07
      scenarios: []
      gap: FND-ACC-CLS-060
      provenance: unknown
      source: FND-ACC-CLS-060
    - id: INV-DOM-ACC-CLS-002-08
      scenarios: []
      gap: FND-ACC-CLS-060
      provenance: unknown
      source: FND-ACC-CLS-060
    - id: INV-DOM-ACC-CLS-002-09
      scenarios: []
      gap: FND-ACC-CLS-060
      provenance: unknown
      source: FND-ACC-CLS-060
    - id: INV-DOM-ACC-CLS-002-10
      scenarios: []
      gap: FND-ACC-CLS-060
      provenance: unknown
      source: FND-ACC-CLS-060
  permissions:
    - key: accounting.fiscal-periods.read
      where_checked: api
      gap: FND-ACC-CLS-060
      provenance: unknown
      source: FND-ACC-CLS-060
      note: >-
        Existing permission scenarios cover the named cases; complete grant and
        surface variants need qualification.
    - key: accounting.fiscal-periods.close
      where_checked: service
      gap: FND-ACC-CLS-060
      provenance: unknown
      source: FND-ACC-CLS-060
      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-005
      scenario: ATS-ACC-CLS-004-08
      provenance: proposed
      source:
        - >-
          rhythm-v2-docs:specs/accounting/close/design/workflows/WF-ACC-CLS-005-evaluate-a-month-s-close-readiness.md#What
          It Does
        - >-
          services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#is
          not ready for a required check pending: missing evidence never passes
        - >-
          services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#lists
          a month’s close in order
        - >-
          services-accounting:docs/fiscal-close/README.md#3. Readiness checks
          (month-end)
    - with: CAP-ACC-CLS-006
      scenario: ATS-ACC-CLS-004-08
      provenance: proposed
      source:
        - >-
          rhythm-v2-docs:specs/accounting/close/design/workflows/WF-ACC-CLS-005-evaluate-a-month-s-close-readiness.md#What
          It Does
        - >-
          services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#is
          not ready for a required check pending: missing evidence never passes
        - >-
          services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#lists
          a month’s close in order
        - >-
          services-accounting:docs/fiscal-close/README.md#3. Readiness checks
          (month-end)
    - with: CAP-ACC-CLS-007
      scenario: ATS-ACC-CLS-004-08
      provenance: proposed
      source:
        - >-
          rhythm-v2-docs:specs/accounting/close/design/workflows/WF-ACC-CLS-005-evaluate-a-month-s-close-readiness.md#What
          It Does
        - >-
          services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#is
          not ready for a required check pending: missing evidence never passes
        - >-
          services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#lists
          a month’s close in order
        - >-
          services-accounting:docs/fiscal-close/README.md#3. Readiness checks
          (month-end)
    - with: CAP-ACC-CLS-008
      scenario: ATS-ACC-CLS-004-08
      provenance: proposed
      source:
        - >-
          rhythm-v2-docs:specs/accounting/close/design/workflows/WF-ACC-CLS-005-evaluate-a-month-s-close-readiness.md#What
          It Does
        - >-
          services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#is
          not ready for a required check pending: missing evidence never passes
        - >-
          services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#lists
          a month’s close in order
        - >-
          services-accounting:docs/fiscal-close/README.md#3. Readiness checks
          (month-end)
    - with: CAP-ACC-CLS-010
      scenario: ATS-ACC-CLS-004-08
      provenance: proposed
      source:
        - >-
          rhythm-v2-docs:specs/accounting/close/design/workflows/WF-ACC-CLS-005-evaluate-a-month-s-close-readiness.md#What
          It Does
        - >-
          services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#is
          not ready for a required check pending: missing evidence never passes
        - >-
          services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#lists
          a month’s close in order
        - >-
          services-accounting:docs/fiscal-close/README.md#3. Readiness checks
          (month-end)
---
# Assess a month’s readiness to close: 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-004-02` | `ATS-ACC-CLS-004-01`, `ATS-ACC-CLS-004-08` |
| `BR-CAP-ACC-CLS-004-03` | `ATS-ACC-CLS-004-01` |
| `BR-CAP-ACC-CLS-004-04` | `ATS-ACC-CLS-004-02` |
| `BR-CAP-ACC-CLS-004-05` | `ATS-ACC-CLS-004-03` |
| `BR-CAP-ACC-CLS-004-06` | `ATS-ACC-CLS-004-04` |
| `BR-CAP-ACC-CLS-004-07` | `ATS-ACC-CLS-004-05` |
| `BR-CAP-ACC-CLS-004-08` | `ATS-ACC-CLS-004-03`, `ATS-ACC-CLS-004-08` |
| `BR-CAP-ACC-CLS-004-09` | `ATS-ACC-CLS-004-06` |
| `BR-CAP-ACC-CLS-004-10` | `ATS-ACC-CLS-004-07`, `ATS-ACC-CLS-004-09` |

## Interactions With Related Capabilities

The combined review joins calendar, ledger, payment and recognition assessments. Its interaction case changes underlying work after an earlier review and asks for a fresh assessment before execution. A standalone review does not establish a stable financial snapshot across concurrent changes.
