Skip to content

CAP-ACC-CLS-003Protect periods from ordinary postings during close

Markdown

CAP-ACC-CLS-003

Protect periods from ordinary postings during close

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationObserved

KindCapabilityProduct areaAccountingModuleMonth-End ClosingRevision1

Read atservices-accounting f47cb263react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Period totals remain protected throughout closing and reopening.Late reconciliation effects reach an open period with an explicit late marker.
Surfaces
apijob
Constraints
Batch management and Reconciliation implement the shared closing boundary described by this capability.
Intent sources
services-accounting:docs/milestones/plans/ACCT-M4-plan.md#4a row 74 (class A: a posting into a closed period is refused)

Controls

16 controls apply, from the corpus control catalogue.

TC-IAM-001 TC-IAM-005 TC-IAM-006 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-DAT-001 TC-LOG-002 TC-LOG-003 TC-LOG-005 TC-PI-003 TC-PI-005

Business Rules

7 rules, 7 to be proved before approval. A rule's product intent is derived from its origin: 7 confirmed by a product decision, the rest inheriting this capability's confirmed.

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Ordinary posting and unposting of a batch in a closing, closed or reopening month are refused because the period is not open.
origin: services-accounting:docs/milestones/plans/ACCT-M4-plan.md#4a row 74 (class A; plan approved 2026-10-21)
validationservicetest
02must prove
Confirmed
Close-owned recognition and system posting may run in an open or closing month, while their reversal requires a closed or reopening month.
origin: batch posting amendment A2 agreed with the close (2026-10-16)
policyserviceobserved
03must prove
Confirmed
Reconciliation effects assigned to a closed or closing month move to the first day of the next available open month and carry a late-after-close marker.
origin: fiscal-close design L11 and reconciliation architecture §15.4 (INV-16)
policyservicetest
services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-concurrency.integration.spec.js#posts a reconciliation dated in it on the first open period, October 1, flagged late after close
04must prove
Confirmed
A late reconciliation effect is refused if no following open period can receive it.
origin: reconciliation architecture §15.4 (INV-16)
validationserviceobserved
05must prove
Confirmed
Period row locks serialize close work with posting work, making whichever arrives later wait for the existing holder.
origin: fiscal-close design L8 (Rhythm 1.0 CLOSE-10 fixed)
invariantdatabase, servicetest
06must prove
Confirmed
Period state follows the six allowed close and reopen transitions, including release or cancellation paths; direct jumps and unchanged-state moves are refused.
origin: fiscal-close foundation FC2-1 (the only writer of a month's status; Rhythm 1.0 FY-14)
lifecycleservicetest
07must prove
Confirmed
A state update succeeds only if the period still has the state the writer expected.
invariantservice, databasetest
services-accounting:modules/fiscal-close/tests/integration/services/persistence/fiscal-periods.integration.spec.js#refuses the second of two writers that read the period open, once the first has moved it

Scenarios

IdGivenWhenThenProvenance
01A close holds September in closing state.Staff attempt a September-dated batch posting.Posting returns a period-not-open refusal.test
02September is closed and October is open.Staff finalize a September reconciliation.The effect posts on October’s first day and remains late-review work in that month.test
services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-concurrency.integration.spec.js#posts a reconciliation dated in it on the first open period, October 1, flagged late after close

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.