---
id: CAP-ACC-CLS-010
title: Finish the fiscal year and maintain future calendars
feature: FEAT-ACC-CLS-03
product_area: accounting
module: close
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
  - CAP-ACC-REC-022 (react-console acceptance inventory)
  - RUL-ACC-REC-074
  - RUL-ACC-REC-084
  - RUL-ACC-REC-093
  - RUL-ACC-REC-094
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D10.2'
purpose: >-
  The final month completes the year, and closing requests enough future years
  for continued accounting work.
outcomes:
  - Controllers complete a fiscal year through its final period.
  - >-
    Future-year generation follows closing, subject to the calendar horizon and
    failures.
concepts:
  - CON-ACC-CLS-001
  - CON-ACC-CLS-003
actors:
  - ACT-ACC-015
  - ACT-ACC-016
surfaces:
  - console
  - api
  - job
preconditions: []
postconditions: []
permissions:
  - key: accounting.fiscal-periods.close
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-ACC-CLS-010-01
    proved_by: [ATS-ACC-CLS-010-01, ATS-ACC-CLS-010-06, TST-ACC-CLS-021, TST-ACC-CLS-043]
    statement: >-
      Closing the final period closes its fiscal year without a separate
      year-close operation.
    kind: lifecycle
    enforced_at:
      - database
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-job.integration.spec.js#closes
      the fiscal year with its twelfth period
    origin: fiscal-close design L6 (Rhythm 1.0 CLOSE-8 kept)
  - id: BR-CAP-ACC-CLS-010-02
    proved_by: [ATS-ACC-CLS-010-01, ATS-ACC-CLS-010-06, TST-ACC-CLS-021, TST-ACC-CLS-043]
    statement: >-
      Fiscal-year readiness requires the other periods closed and includes a
      next-year check that passes with a promise of generation when that year is
      missing.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/unit/readiness/period-rules.spec.js#is
      blocked by every other period of the year not closed
    origin: fiscal-close design §5
  - id: BR-CAP-ACC-CLS-010-03
    proved_by: [ATS-ACC-CLS-010-02, TST-ACC-CLS-037, TST-ACC-CLS-045]
    statement: >-
      Year-end reconciliation review warns about findings in other periods and
      never blocks closing.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/unit/readiness/reconciliation-checks.spec.js#warns,
      advisory, listing the findings of every other period
    origin: fiscal-close design §5
  - id: BR-CAP-ACC-CLS-010-04
    proved_by: []
    statement: >-
      The year close creates no closing entries, retained earnings entries or
      opening balances in Rhythm.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: documented
    source: 'services-accounting:docs/fiscal-close/README.md#5. Fiscal-year close'
    origin: 'fiscal-close design R4 (recommendation, no recorded ruling)'
  - id: BR-CAP-ACC-CLS-010-05
    proved_by: [ATS-ACC-CLS-010-03, ATS-ACC-CLS-010-06, TST-ACC-CLS-017, TST-ACC-CLS-021]
    statement: >-
      Roll-forward generates years individually until three open years start
      after the closed period.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-job.integration.spec.js#rolls
      the fiscal years forward to three open years after September 2026
    origin: 'fiscal-close design L7 (Rhythm 1.0 GEN-6, counted after the closed month)'
    examples:
      positive: >-
        The September fixture adds 2028 and 2029 after its existing two-year
        calendar.
  - id: BR-CAP-ACC-CLS-010-06
    proved_by: [ATS-ACC-CLS-010-04]
    statement: >-
      A calendar-validation refusal stops generation without failing the close,
      including the five-year horizon refusal.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-accounting:modules/fiscal-close/services/jobs/fiscal-close-job-tasks.ts:rollForward
    origin: 'services-accounting:docs/milestones/ACCT-M1-books-and-invoices.md#D10.2'
  - id: BR-CAP-ACC-CLS-010-07
    proved_by: [ATS-ACC-CLS-010-05]
    statement: >-
      A roll-forward failure after finalization leaves the run successful and
      the job failed, with a later close able to replenish the calendar.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: documented
    source: >-
      services-accounting:docs/migrations/fiscal-close/README.md#Decisions and
      departures from the brief
    origin: none
scenarios:
  - id: SC-CAP-ACC-CLS-010-01
    given: The first eleven months of the year are closed.
    when: The controller reviews year scope and closes December.
    then: >-
      The year checks accompany the final-month close and generation attempts to
      provide future years.
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-job.integration.spec.js#the
      year’s last period
  - id: SC-CAP-ACC-CLS-010-02
    given: The calendar contains 2026 and 2027 when September closes.
    when: Roll-forward completes.
    then: The step reports newly generated 2028 and 2029.
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-runs.e2e.spec.js#lists
      the fiscal years the roll-forward generated as the step’s outputs
edge_cases: []
constraints:
  - >-
    Books supplies generation and calendar validation, including the five-year
    horizon.
depends_on:
  - CAP-ACC-CLS-008
related:
  - CAP-ACC-CLS-001
  - CAP-ACC-CLS-004
journeys:
  - JNY-ACC-CLS-004
open_questions: []
evidence:
  - >-
    services-accounting examination inputs:
    modules/fiscal-close/services/readiness/all-periods-closed.ts,
    next-fiscal-year-ready.ts, year-end-review.ts, close-effects.ts,
    services/jobs/fiscal-close-job-tasks.ts (rollForward,
    OPEN_YEARS_AFTER_CLOSE); tests
    integration/services/jobs/close-job.integration.spec.js (the year’s last
    period), unit/readiness/period-rules.spec.js, reconciliation-checks.spec.js,
    integration/services/readiness/evaluate-readiness.integration.spec.js (the
    fiscal year scope), e2e/fiscal-close-runs.e2e.spec.js;
    docs/fiscal-close/README.md §5.
  - >-
    react-console examination inputs:
    app/(console)/console/[tenantId]/accounting/close/years/[fiscalYearId]/page.tsx,
    components/accounting/close/fiscal-year-close.tsx;
    acceptance/accounting/journeys/reconciliation-close/ACT-ACC-0622.json,
    configuration/ACT-ACC-0025.json.
controls: [TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-AZ-006, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-DAT-001, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-AVL-001, TC-AVL-004, TC-MON-001, TC-MON-002, TC-MON-004, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005]
exercised_by: [FAS-ACC-CLS-03-01, FAS-ACC-CLS-03-05]
suites: [TST-ACC-CLS-017, TST-ACC-CLS-021, TST-ACC-CLS-037, TST-ACC-CLS-043, TST-ACC-CLS-045]
---

# Finish the fiscal year and maintain future calendars

## Purpose

The final month completes the year, and closing requests enough future years for continued accounting work.

## How It Works

The controller opens the year view to review the final month with its additional checks. Other periods must already be closed. The next-year check explains whether the following year exists or generation is expected. Reconciliation concerns in other months remain advisory review work. Completing the final month changes the year to closed. Reopening a month changes the year back to open. Rhythm does not perform general-ledger year-end closing entries. After any close, generation attempts to maintain three eligible future years. Each year commits separately. A validation refusal stops that work, and another failure does not undo the completed close. The product should make unfinished roll-forward work visible to the closer.

## Relationships

- Month closing completes the year’s final period.
- The calendar presents the resulting year state.
- Readiness supplies the additional year checks.
