Skip to content

CAP-MBR-MEM-003Correct or close a term without losing earlier knowledge

Markdown

CAP-MBR-MEM-003

Correct or close a term without losing earlier knowledge

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationPartially observed

KindCapabilityProduct areaMembershipModuleMemberships, Applications and Membership BillingRevision1

Read atservices-membership 5994c270react-console baf6dae3

The Formal Contract

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

Outcomes
Corrections retain the association’s earlier understanding for historical reporting.Closures record when a period ends and why staff close it.Dependent affiliations and granted periods are adjusted when the source period contracts.
Surfaces
consoleapi
Constraints
Reasons contain 1–500 characters, and optional notes contain no more than 2,000.
Intent sources
services-membership:README.md#2026-10-18 — Final acceptanceservices-membership:docs/migrations/membership-core/README.md#The operations and their keys

Controls

45 controls apply, from the corpus control catalogue.

TC-AVL-002 TC-AVL-003 TC-AVL-004 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-AZ-005 TC-AZ-006 TC-CHG-001 TC-CHG-002 TC-CHG-003 TC-CHG-004 TC-CRY-001 TC-CRY-002 TC-CRY-003 TC-DAT-001 TC-DAT-002 TC-DAT-003 TC-DAT-007 TC-IAM-001 TC-IAM-002 TC-IAM-004 TC-IAM-005 TC-IAM-006 TC-LOG-001 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-LOG-005 TC-MON-001 TC-MON-002 TC-MON-004 TC-PI-001 TC-PI-002 TC-PI-003 TC-PI-004 TC-PI-005 TC-PRV-001 TC-PRV-002 TC-SEC-001 TC-SEC-004 TC-TEN-001 TC-TEN-002 TC-TEN-003

Permissions

KeyChecked atScope
membership.terms.correctapitenant
membership.terms.terminateapitenant

Business Rules

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

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Correction and termination require a principal membership’s committed term and its current version; a stale request returns the version now held.
no proof recorded yet
validationserviceobserved
services-membership:modules/memberships/services/operations/staff-operations.ts:lockTerm, correctTerm, terminateTerm
02must prove
Confirmed
A reasoned correction updates dates, type or package while retained versions record the previous values and actor for earlier-known reporting.
no proof recorded yet
lifecycleservice, databasetest
services-membership:modules/memberships/tests/integration/services/staff-operations.integration.spec.ts#keeps the old truth of a correction in the versions, recorded with the actor
03must prove
Confirmed
The product should reject corrections that create overlapping coverage in another program of the owner’s exclusivity group.
no proof recorded yet
invariantserviceunknown
04must prove
Confirmed
A correction trims or removes affiliations outside the amended term and rechecks the remaining set against changed type or package rules, without rechecking minimum counts.
no proof recorded yet
invariantservice, databaseobserved
05must prove
Confirmed
The product should extend affiliations backwards when a corrected start moves earlier so required chapter coverage reaches that earlier start.
no proof recorded yet
invariantserviceunknown
06must prove
Confirmed
Termination uses an applicable status reason and defaults its effective date to today; it shortens coverage to the preceding day only when that is earlier than the existing end, otherwise retaining dates and recording the later drop date.
no proof recorded yet
lifecycleserviceobserved
07must prove
Confirmed
Closing a term on or before its start cancels it, leaving those dates available for another effective term.
no proof recorded yet
lifecycleservicetest
services-membership:modules/events/tests/integration/business-events.integration.spec.ts#states membership.term.cancelled, not terminated, for a term that had not started
08must prove
Confirmed
Termination limits affiliation coverage through the shortened term; an open-ended affiliation may retain its empty end because the term supplies the limit.
no proof recorded yet
invariantserviceobserved
09must prove
Confirmed
Granted mirrors follow source termination or cancellation, shorten when the source end contracts, and do not expand when the source end extends.
origin: the decision of 2026-10-17 on package grants (services-membership:modules/memberships/services/grants/apply-grants.ts header)
no proof recorded yet
calculationservicetest

Scenarios

IdGivenWhenThenProvenance
01Lee’s term was entered with an October start that should have been in September.Staff correct the start to 1 September and explain the change.A current-known read returns September; a read using knowledge from before the change still returns October.test
services-membership:modules/memberships/tests/integration/db/membership-functions.integration.spec.ts#keeps answering what was known before the correction with a known_at before it
02A member has an effective term.Staff close it from a chosen date using a termination reason.The term ends on the preceding day and its membership status is recomputed.test
services-membership:modules/memberships/tests/integration/services/staff-operations.integration.spec.ts#terminates a term from the effective date, with the reason, and the status follows

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.