---
id: CAP-ACC-CLS-001
title: Understand a business unit’s close calendar
feature: FEAT-ACC-CLS-01
product_area: accounting
module: close
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
  - >-
    CAP-ACC-REC-015 (react-console acceptance inventory, the close calendar
    half)
  - RUL-ACC-REC-062
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - >-
    services-accounting:docs/milestones/ACCT-M4-contracts-and-events-for-commerce.md#Rulings
    recorded during the milestone
  - >-
    services-accounting:docs/milestones/plans/ACCT-M4-plan.md#D8. Closing a
    fiscal period: the closer's name, the A/R snapshot and how long it may take
purpose: >-
  Finance staff use the calendar to locate the next month to close and review
  the closing history of each business unit.
outcomes:
  - >-
    Staff identify the current month and distinguish completed closes from work
    in progress.
  - 'Reviewers see the closer, close time and number of completed reopens.'
concepts:
  - CON-ACC-CLS-001
actors:
  - ACT-ACC-015
  - ACT-ACC-006
  - ACT-ACC-007
surfaces:
  - console
  - api
preconditions:
  - Books has generated a fiscal calendar for the selected unit.
postconditions: []
permissions:
  - key: accounting.fiscal-periods.read
    where_checked: api
    scope: tenant
  - key: accounting.fiscal-periods.read
    where_checked: console
    scope: tenant
rules:
  - id: BR-CAP-ACC-CLS-001-01
    proved_by: [ATS-ACC-CLS-001-08, TST-ACC-CLS-027]
    statement: >-
      The calendar presents a selected business unit’s fiscal years from oldest
      to newest, with months in date order and their open, closing, closed or
      reopening state.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/persistence/fiscal-periods.queries.integration.spec.js#answers
      the unit’s years oldest first, each mapped whole
    origin: none
  - id: BR-CAP-ACC-CLS-001-02
    proved_by: [ATS-ACC-CLS-001-01, ATS-ACC-CLS-001-06, TST-ACC-CLS-016, TST-ACC-CLS-024]
    statement: >-
      The first month by date that is not closed is current; a fully closed
      calendar has no current month.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/periods/period-calendar.integration.spec.js#marks
      the first period not closed current, the next year’s January
    origin: >-
      fiscal-close design L1 (Rhythm 1.0 behaviour kept; recommendation, no
      recorded ruling)
    examples:
      positive: >-
        With August closed and September open, the selection advances to
        September.
      negative: >-
        An earlier unfinished month prevents selection of a later one as
        current.
  - id: BR-CAP-ACC-CLS-001-03
    proved_by: [ATS-ACC-CLS-001-02, TST-ACC-CLS-018]
    statement: A period retains a closer and close time only in the closed state.
    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
      an open period that names a closer and a time
    origin: none
  - id: BR-CAP-ACC-CLS-001-04
    proved_by: [ATS-ACC-CLS-001-02, TST-ACC-CLS-018]
    statement: The reopen count begins at zero and cannot be negative.
    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
      a negative reopen count
    origin: >-
      services-accounting:docs/milestones/plans/ACCT-M4-plan.md#4a row 75 (class
      A; plan approved 2026-10-21)
  - id: BR-CAP-ACC-CLS-001-05
    proved_by: [ATS-ACC-CLS-001-03, ATS-ACC-CLS-001-06, TST-ACC-CLS-024, TST-ACC-CLS-026]
    statement: >-
      A year remains open until all its periods are closed, and its displayed
      close details come from its last period.
    kind: calculation
    enforced_at:
      - database
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/persistence/fiscal-periods.integration.spec.js#becomes
      closed exactly when its twelfth period closes
    origin: fiscal-close design L6 (Rhythm 1.0 CLOSE-8 kept)
  - id: BR-CAP-ACC-CLS-001-06
    proved_by: [ATS-ACC-CLS-001-04, TST-ACC-CLS-016]
    statement: >-
      A calendar request must identify a business unit available in the
      workspace; an absent unit returns not found.
    kind: validation
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#answers
      404 for a unit the tenant does not have
    origin: none
  - id: BR-CAP-ACC-CLS-001-07
    proved_by: [ATS-ACC-CLS-001-04, ATS-ACC-CLS-001-05, TST-ACC-CLS-016]
    statement: >-
      The fiscal-periods read permission controls access to the calendar and the
      console close workspace.
    kind: permission
    enforced_at:
      - api
      - console
    must_prove: true
    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
    origin: >-
      services-accounting:docs/milestones/ACCT-M4-contracts-and-events-for-commerce.md#Rulings
      recorded during the milestone
  - id: BR-CAP-ACC-CLS-001-08
    proved_by: []
    statement: >-
      The product should resolve the closer’s name in service responses as well
      as in the console, without storing a separate name.
    kind: policy
    enforced_at: []
    must_prove: true
    provenance: documented
    source: >-
      services-accounting:docs/milestones/plans/ACCT-M4-plan.md#D8. Closing a
      fiscal period: the closer's name, the A/R snapshot and how long it may
      take
    origin: >-
      services-accounting:docs/milestones/plans/ACCT-M4-plan.md#D8. Closing a
      fiscal period: the closer's name, the A/R snapshot and how long it may
      take
    examples:
      positive: >-
        The console resolves the closer reference into a displayed person’s
        name.
      negative: The service still returns an unresolved person reference.
  - id: BR-CAP-ACC-CLS-001-09
    proved_by: [ATS-ACC-CLS-001-07]
    statement: >-
      A calendar with more than one hundred fiscal years returns a refusal
      instead of a partial result.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-accounting:modules/fiscal-close/services/persistence/fiscal-periods.ts:listCloseCalendar
    origin: none
scenarios:
  - id: SC-CAP-ACC-CLS-001-01
    given: August is closed and September remains open for one unit.
    when: The controller views that unit’s close calendar.
    then: The calendar marks September current and retains August’s close details.
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/e2e/fiscal-close-readiness.e2e.spec.js#marks
      September 2026 current
  - id: SC-CAP-ACC-CLS-001-02
    given: Eleven periods are closed and the final period is closing.
    when: A reviewer reads the year before and after finalization.
    then: The year changes from open to closed when its last period closes.
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/persistence/fiscal-periods.integration.spec.js#stays
      open while its twelfth period is closing
edge_cases: []
constraints:
  - >-
    The calendar limit applies to the complete unit calendar, with refusal above
    one hundred fiscal years.
depends_on: []
related:
  - CAP-ACC-CLS-002
  - CAP-ACC-CLS-010
  - CAP-ACC-CLS-013
journeys:
  - JNY-ACC-CLS-001
  - JNY-ACC-CLS-004
open_questions: []
evidence:
  - >-
    services-accounting examination inputs:
    modules/fiscal-close/aws/api/fiscal-close.routes.ts
    (listFiscalClosePeriods), fiscal-close.schemas.ts (periodsQuerySchema),
    services/periods/period-calendar.ts, services/readiness/close-calendar.ts,
    services/persistence/fiscal-periods.ts (listCloseCalendar,
    MAX_CALENDAR_FISCAL_YEARS); modules/books/db/fiscal-periods.table.ts (the
    close columns and checks, read to name the dependency); tests
    e2e/fiscal-close-readiness.e2e.spec.js,
    integration/services/periods/period-calendar.integration.spec.js,
    persistence/fiscal-periods*.integration.spec.js,
    db/fiscal-close.table.integration.spec.js.
  - >-
    react-console examination inputs:
    app/(console)/console/[tenantId]/accounting/close/layout.tsx
    (RequirePermission), history/page.tsx;
    components/accounting/close/period-selector.tsx, close-history.tsx;
    lib/console/domains.ts (the Month-End Close menu entry).
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-TEN-004, TC-DAT-001, 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-01-01, FAS-ACC-CLS-01-02, FAS-ACC-CLS-01-03, FAS-ACC-CLS-01-04, FAS-ACC-CLS-01-05]
suites: [TST-ACC-CLS-016, TST-ACC-CLS-018, TST-ACC-CLS-024, TST-ACC-CLS-026, TST-ACC-CLS-027]
---

# Understand a business unit’s close calendar

## Purpose

Finance staff use the calendar to locate the next month to close and review the closing history of each business unit.

## How It Works

The controller selects a business unit before reviewing its months. The calendar identifies the current month and distinguishes a finished close from a close or reopen still under way. A reviewer can inspect the close details and reopen count without starting an action. The month selector and Close History use the same calendar. Earlier months determine where work starts, including across a fiscal-year boundary. An unknown business unit produces a not-found response. Calendars longer than one hundred years are refused in full. The console resolves names for people, while the service currently returns their identifiers. The product should also supply the closer’s name through the service, as the approved plan requires.

## Relationships

- Close authorization uses the calendar to assess sequence.
- Readiness and close execution select periods from this calendar.
- Year-end completion and run history explain the displayed close state.
