---
id: DOM-ACC-CLS-002
title: Close Readiness
realises: CON-ACC-CLS-002
product_area: accounting
module: close
revision: 1
status: draft
design_intent: confirmed
origin: >-
  services-accounting:docs/milestones/plans/ACCT-M4-plan.md#4a rows 73 and 74
  (class A; plan approved 2026-10-21, D12); docs/fiscal-close/README.md#8 R5
  (decided by Andrew 2026-10-16)
implementation_evidence: observed
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
owned_by: SVC-ACC-CLS-fiscal-close
readable_by: []
custom_fields: none
identity: >-
  Readiness is a fresh calculation for a business unit’s month and requested
  scope, with no separately assigned record identity. Execution stores its
  binding calculation on the run and copies it into the successful close
  snapshot.
attributes:
  - name: period context
    kind: reference
    required: true
    computed: true
    notes: >-
      The response includes the business unit, the year’s standing and the
      month’s label, state and current designation.
  - name: scope
    kind: enum
    required: true
    computed: false
    notes: >-
      The requested scope is period or fiscal year. The service accepts year
      scope even before the final month.
  - name: checks
    kind: collection
    required: true
    computed: true
    notes: >-
      Nine month checks cover calendar sequence, elapsed time, batches,
      transactions, payments, bank verification, recognition, cost of goods sold
      and authority. Year scope adds three checks. Each check includes
      requirement, outcome, explanation, optional figures and actions, plus at
      most fifty supporting items and their total.
  - name: overall verdict and counts
    kind: computed
    required: true
    computed: true
    notes: >-
      The engine returns ready, ready with warnings or not ready, with counts
      for successful, blocking, warning and pending checks.
  - name: reconciliation section
    kind: collection
    required: true
    computed: true
    notes: >-
      Reconciliation supplies the assessment; the response presents its payment
      totals, findings, approved exceptions and clearing amounts without
      recalculating them, or marks the section unavailable.
  - name: close effects
    kind: collection
    required: true
    computed: true
    notes: >-
      The preview describes closure, due recognition and its currency amounts,
      the skipped cost of goods sold step and an aging request. The final month
      also describes year completion and calendar generation.
  - name: evaluated at and by
    kind: date
    required: true
    computed: true
    notes: >-
      The calculation carries its execution time and the caller for whom it was
      made.
  - name: bank-verification policy
    kind: enum
    required: true
    computed: false
    notes: >-
      The workspace setting changes unverified payouts from advisory warnings to
      required blockers; absence of a saved setting uses false.
relationships:
  - to: DOM-ACC-CLS-001
    cardinality: many evaluations of one period
    ownership: The calculation consumes the period and the business unit’s calendar.
    cross_service: false
  - to: DOM-ACC-CLS-003
    cardinality: one binding evaluation per close run
    ownership: >-
      Revalidation writes the run’s binding calculation; the run retains that
      copy.
    cross_service: false
  - to: DOM-ACC-CLS-004
    cardinality: one captured evaluation per successful close
    ownership: The successful close stores its own immutable copy of the calculation.
    cross_service: false
invariants:
  - id: INV-DOM-ACC-CLS-002-01
    statement: >-
      Any required check that is blocked, pending or in error makes the overall
      result not ready.
    enforced_at:
      - service
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/unit/readiness/readiness-verdict.spec.js#is
      not ready for a required check pending: missing evidence never passes
  - id: INV-DOM-ACC-CLS-002-02
    statement: >-
      An evaluator failure becomes an error check with the applicable
      requirement, after its savepoint is rolled back, while other evaluators
      continue.
    enforced_at:
      - service
      - database
    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
  - id: INV-DOM-ACC-CLS-002-03
    statement: A standalone readiness transaction is read-only and rejects writes.
    enforced_at:
      - database
    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-04
    statement: >-
      The close’s revalidation stores its readiness while holding the period
      lock in the same transaction.
    enforced_at:
      - service
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-job.integration.spec.js#keeps
      the readiness the close evaluated on the run
  - id: INV-DOM-ACC-CLS-002-05
    statement: >-
      Period scope runs nine ordered checks; fiscal-year scope adds three checks
      after them.
    enforced_at:
      - service
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#adds
      the year checks for the fiscal_year scope
  - id: INV-DOM-ACC-CLS-002-06
    statement: >-
      Each check includes its total supporting-item count and returns at most
      fifty items.
    enforced_at:
      - service
    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-07
    statement: >-
      Payment-check items retain Reconciliation’s findings rather than deriving
      replacements.
    enforced_at:
      - service
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/unit/readiness/reconciliation-checks.spec.js#is
      blocked by a blocker, its findings the items unchanged, blockers first
  - id: INV-DOM-ACC-CLS-002-08
    statement: >-
      Unverified payouts warn by default and block when the workspace requires
      bank verification.
    enforced_at:
      - service
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/unit/readiness/reconciliation-checks.spec.js#blocks,
      required, for an unverified payout when the tenant requires verification
  - id: INV-DOM-ACC-CLS-002-09
    statement: >-
      Readiness queries, including recognition previews, are restricted to the
      selected workspace.
    enforced_at:
      - database
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/persistence/recognition-previews.queries.integration.spec.js#never
      answers another tenant’s schedules
  - id: INV-DOM-ACC-CLS-002-10
    statement: >-
      The screen’s readiness read does not authorize execution; the job
      evaluates readiness again.
    enforced_at:
      - service
    provenance: documented
    source: >-
      services-accounting:docs/milestones/plans/ACCT-M4-plan.md#4a row 74 (class
      A; plan approved 2026-10-21)
physical:
  - settings
  - period_close_runs
  - period_close_snapshots
evidence:
  - >-
    services-accounting at f47cb263:
    modules/fiscal-close/services/readiness/*.ts;
    services/persistence/readiness-transactions.ts, close-policies.ts,
    recognition-previews.ts, unaccounted-transactions.ts, unposted-batches.ts,
    merchant-account-names.ts;
    modules/reconciliation/services/close-readiness/assess-period.ts (named as
    the consumed assessment); docs/fiscal-close/README.md §3 to §5.
  - >-
    react-console at baf6dae3:
    components/accounting/close/readiness-summary.tsx, readiness-checklist.tsx,
    check-detail-drawer.tsx, reconciliation-panel.tsx;
    lib/accounting/close/checks.ts.
custom_field_declaration:
  provenance: unknown
  source: FND-ACC-CLS-053
---

# Close Readiness

## What It Models

Readiness brings a month’s outstanding accounting work into one review. Finance staff receive checks, a verdict, payment context and a preview of closing effects. Execution uses the same evaluator before committing the close’s financial work.

## Identity and Attributes

A standalone read creates no readiness record. Its subject and scope identify what was evaluated, while time and caller describe the circumstances. A registry selects the ordered checks. Requirement and outcome determine the verdict, and bounded supporting lists lead staff to the work behind each check.

## Relationships

The evaluation consumes the calendar, batches, money documents, recognition schedules, payment assessment and close policy. A run keeps the calculation made during revalidation. Finalization copies that calculation and its reconciliation section into the close snapshot.

## Invariants

The invariant rows define verdict calculation, failure isolation, bounded evidence and the distinction between preview and execution. Required missing evidence blocks; unsuccessful advisory checks contribute warnings. Caller authority also contributes to the current verdict.

## How It Is Stored and Shared

Accounting reads the inputs in process within one transaction. Standalone evaluation makes that transaction read-only; job evaluation joins the writable close transaction. Neither path explicitly freezes every input at one database snapshot. Stored evaluations live with their run or snapshot. The verification setting lives on Books’ settings row.

## Open Design Questions

Product must decide whether viewer authority should influence the month’s verdict and where administrators change bank verification. Additional readiness checks remain proposals until their purpose and evidence are established.
