---
id: CAP-ACC-CLS-014
title: Retain the evidence and history of each close
feature: FEAT-ACC-CLS-04
product_area: accounting
module: close
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
  - 'CAP-ACC-REC-019 (react-console acceptance inventory, the close record)'
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources: []
purpose: >-
  Reviewers can recover the evaluation, reconciliation context and later
  reopening history of a completed close.
outcomes:
  - Close-time evidence remains available for later review.
  - Reopening adds history without replacing the original snapshot.
concepts:
  - CON-ACC-CLS-004
actors:
  - ACT-ACC-007
  - ACT-ACC-015
  - ACT-ACC-016
surfaces:
  - console
  - api
preconditions: []
postconditions: []
permissions:
  - key: accounting.fiscal-periods.read
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-ACC-CLS-014-01
    proved_by: [ATS-ACC-CLS-014-01, ATS-ACC-CLS-014-06, TST-ACC-CLS-018, TST-ACC-CLS-021]
    statement: >-
      Each successful close records one immutable snapshot containing its
      evaluated readiness, reconciliation context, close outputs and
      acknowledged warnings.
    kind: invariant
    enforced_at:
      - database
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/db/fiscal-close.table.integration.spec.js#refuses
      the application role any update of a snapshot, which is written once
    origin: fiscal-close design L13 (a snapshot at close added)
  - id: BR-CAP-ACC-CLS-014-02
    proved_by: [ATS-ACC-CLS-014-01, ATS-ACC-CLS-014-08, TST-ACC-CLS-018, TST-ACC-CLS-021, TST-ACC-CLS-031]
    statement: >-
      The snapshot must identify its run’s period, and each stored document must
      be an object smaller than 512 kilobytes.
    kind: validation
    enforced_at:
      - database
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/db/fiscal-close.table.integration.spec.js#refuses
      a snapshot that names a period other than its run’s, by the run’s foreign
      key
    origin: none
  - id: BR-CAP-ACC-CLS-014-03
    proved_by: [ATS-ACC-CLS-014-02, ATS-ACC-CLS-014-06, TST-ACC-CLS-017]
    statement: >-
      The close record combines the run, captured readiness and reconciliation,
      exception participants, audit entries and linked reopen runs.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-runs.e2e.spec.js#answers
      the completed close’s record
    origin: >-
      fiscal-close design L12 (close runs, readiness at close and audit
      persisted)
  - id: BR-CAP-ACC-CLS-014-04
    proved_by: [ATS-ACC-CLS-014-03]
    statement: >-
      A record is available only for a successful close with a snapshot; reopen
      and incomplete-close requests return not found.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-accounting:modules/fiscal-close/services/runs/close-run-view.ts:closeRecordOf
    origin: none
  - id: BR-CAP-ACC-CLS-014-05
    proved_by: [ATS-ACC-CLS-014-04, TST-ACC-CLS-018]
    statement: >-
      The run’s kind, period, requester and request time are fixed, a reopen has
      a reason, and finished status requires a finish time no earlier than the
      request.
    kind: invariant
    enforced_at:
      - database
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/db/fiscal-close.table.integration.spec.js#refuses
      changing a run’s kind, which is written once
    origin: none
  - id: BR-CAP-ACC-CLS-014-06
    proved_by: [ATS-ACC-CLS-014-04, ATS-ACC-CLS-014-06, TST-ACC-CLS-018]
    statement: >-
      Referenced periods cannot be deleted while runs remain, and runs cannot be
      deleted while snapshots refer to them.
    kind: invariant
    enforced_at:
      - database
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/db/fiscal-close.table.integration.spec.js#refuses
      deleting a period a run names
    origin: none
  - id: BR-CAP-ACC-CLS-014-07
    proved_by: [ATS-ACC-CLS-014-05, ATS-ACC-CLS-014-06, TST-ACC-CLS-018, TST-ACC-CLS-032]
    statement: Workspace policies isolate reading and writing of runs and snapshots.
    kind: invariant
    enforced_at:
      - database
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/db/fiscal-close.table.integration.spec.js#hides
      the run and the snapshot from another tenant
    origin: none
  - id: BR-CAP-ACC-CLS-014-08
    proved_by: [ATS-ACC-CLS-014-07]
    statement: >-
      The record returns at most one hundred linked reopen runs in oldest-first
      order without pagination.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: observed
    source: >-
      services-accounting:modules/fiscal-close/services/persistence/period-close-runs.ts:listReopenRunsOfCloseRun
    origin: none
scenarios:
  - id: SC-CAP-ACC-CLS-014-01
    given: A close captured an accepted exception and was subsequently reopened.
    when: An auditor reads the original close record.
    then: >-
      The captured evaluation and exception participants remain available with
      the linked reopen and reason.
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-runs.e2e.spec.js#lists
      the reopen in the close’s record
  - id: SC-CAP-ACC-CLS-014-02
    given: A close already has its snapshot.
    when: A writer attempts to replace or duplicate it.
    then: Database protections refuse both attempts.
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/persistence/period-close-snapshots.integration.spec.js#refuses
      a second snapshot of the run
edge_cases: []
constraints: []
depends_on:
  - CAP-ACC-CLS-008
related:
  - CAP-ACC-CLS-006
  - CAP-ACC-CLS-011
  - CAP-ACC-CLS-016
journeys:
  - JNY-ACC-CLS-001
open_questions: []
evidence:
  - >-
    services-accounting examination inputs:
    modules/fiscal-close/aws/api/fiscal-close.routes.ts (getFiscalCloseRecord),
    services/runs/close-run-view.ts (closeRecordOf),
    services/persistence/period-close-snapshots.ts, period-close-runs.ts,
    db/period-close-snapshots.table.ts, db/period-close-runs.table.ts; tests
    integration/db/fiscal-close.table.integration.spec.js,
    persistence/period-close-snapshots*.integration.spec.js,
    e2e/fiscal-close-runs.e2e.spec.js.
  - >-
    react-console examination inputs:
    components/accounting/close/close-record.tsx, close-run-view.tsx (the
    success panel).
controls: [TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-006, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-DAT-001, TC-DAT-004, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-003, TC-PI-005]
exercised_by: [FAS-ACC-CLS-04-01, FAS-ACC-CLS-04-02, FAS-ACC-CLS-04-03, FAS-ACC-CLS-04-04, FAS-ACC-CLS-04-05]
suites: [TST-ACC-CLS-017, TST-ACC-CLS-018, TST-ACC-CLS-021, TST-ACC-CLS-031, TST-ACC-CLS-032]
---

# Retain the evidence and history of each close

## Purpose

Reviewers can recover the evaluation, reconciliation context and later reopening history of a completed close.

## How It Works

Finalization stores a snapshot alongside the successful period change. It keeps the revalidation result rather than evaluating readiness again for the record. Reconciliation information and close outputs remain part of that captured evidence. Reviewers reach the record from run history or the successful run. The response combines retained information with linked reopening history. Reopening does not update the original snapshot. An incomplete close or reopen has no close record. Database protections prevent updates to the snapshot and deletion of records still referenced by it. Workspace policies separate customer histories. Linked reopen history currently stops at the oldest one hundred runs without a continuation.

## Relationships

- Close execution writes the retained snapshot.
- Reconciliation readiness supplies its payment context.
- Reopening links subsequent correction requests.
- Export and erasure carry or remove these retained records.
