Skip to content

CAP-ACC-CLS-009Recognize close-owned revenue and reverse it on reopen

Markdown

CAP-ACC-CLS-009

Recognize close-owned revenue and reverse it on reopen

Markdown
  • DocumentDraft
  • Product intentProposed
  • 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
Due revenue reaches the ledger through a close-owned posting.Reopening restores recognition state while retaining reversal evidence.
Surfaces
job
Constraints
Batch management owns the schedules and system batches invoked by closing.
Intent sources
services-accounting:docs/milestones/plans/ACCT-M4-plan.md#4a row 74 (class A: the six steps of the close)services-accounting:docs/milestones/walkthroughs/ACCT-M3-handoff.md#Decisions it carries

Controls

24 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-DAT-004 TC-LOG-002 TC-LOG-003 TC-LOG-005 TC-AVL-001 TC-AVL-004 TC-MON-001 TC-MON-002 TC-MON-004 TC-PI-002 TC-PI-003 TC-PI-004 TC-PI-005

Business Rules

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

IdRuleKindEnforced atProvenance
01must prove
Proposed
The close recognizes due unrecognized entries and posts a deferred revenue batch named for the unit and period, dated at period end and debiting deferred revenue.
✓ The unit’s July recognition uses its named period-end deferred revenue batch.
origin: services-accounting:docs/milestones/plans/ACCT-M4-plan.md#4a row 74 (class A; plan approved 2026-10-21)
calculationservicetest
02must prove
Proposed
Entries beyond period end remain unrecognized.
calculationservicetest
03must prove
Proposed
The close-owned event key prevents duplicate posting of the recognition batch.
invariantservice, databasetest
04must prove
Proposed
A recognition step with no due entries is skipped with an explanation and creates no batch.
origin: fiscal-close design L5 (Rhythm 1.0 omitted an empty batch)
policyservicetest
05must prove
Proposed
Reopening unrecognizes the close’s entries and reverses its batch with swapped debits and credits, skipping reversal when the close recognized nothing.
calculationservicetest
06must prove
Proposed
A subsequent close recognizes those entries again and reposts the period’s batch using the new run’s key.
calculationservicetest
services-accounting:modules/fiscal-close/tests/integration/services/jobs/revenue-recognition.integration.spec.js#posts the same batch again, as its second posting, under the new run’s key
07must prove
Proposed
Manual posting, reopening, archiving and deletion of the close-owned system batch are refused.
policyservicedocumented
08must prove
Proposed
A refused recognition step fails while retaining the period in closing state for recovery.
policyserviceobserved

Scenarios

IdGivenWhenThenProvenance
01An invoice’s revenue schedule spans July through September.July closes, reopens and closes again.July’s share is recognized, reversed and recognized again; later shares remain deferred.test
02The selected month has no due recognition entries.The close reaches recognition.The step records a skipped outcome and explains the absence of due work.test

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.