Skip to content

CAP-MBR-STR-009Establish programs and their membership context

Markdown

CAP-MBR-STR-009

Establish programs and their membership context

Markdown
  • DocumentDraft
  • Product intentProposed
  • ImplementationPartially observed

KindCapabilityProduct areaMembershipModuleOrganizational Structure, Membership Configuration and TermsRevision1

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
Each program expresses its membership identity and classification context.Consumers receive the program’s calendar and selling settings.
Surfaces
apijob
Intent sources
services-membership:README.md (D-02, approved 2026-10-17: how a program relates to organizational units)services-membership:docs/migrations/packages-as-products/README.md#Ordering profiles (Commerce's decision approved by Andrew on 2026-10-18)

Controls

34 controls apply, from the corpus control catalogue.

TC-AVL-002 TC-AVL-003 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-004 TC-DAT-007 TC-IAM-001 TC-IAM-002 TC-IAM-004 TC-IAM-005 TC-LOG-001 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-PI-001 TC-PI-003 TC-PI-005 TC-SEC-001 TC-SEC-004 TC-TEN-001 TC-TEN-002 TC-TEN-003

Permissions

KeyChecked atScope
membership.programs.readapitenant
membership.programs.manageapitenant
membership.application.accessapitenant

Business Rules

12 rules, 6 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
A program binds to units through no binding, affiliation or identity; only identity binding requires an identifying unit kind.
validationservice, databasetest
services-membership:tests/e2e/database-refusals.e2e.spec.ts#mistakes only the database catches, through the API › DEF-MBR-0086: a configuration write a check, a foreign key or an integer column refuses › refuses an identity-bound program without its identity unit type 400 naming identity_unit_type_id
02must prove
Proposed
An identifying kind and owning unit must exist in the same workspace as the program.
validationservice, databaseobserved
03
Proposed
Programs classify eligible owners as contacts, organizations or either.
policyapi, databaseobserved
04
Proposed
Numbering settings select the workspace sequence, a program sequence or the owner’s CRM number.
policyapi, databaseobserved
05must prove
Proposed
Grace and continuity allowances accept nonnegative whole numbers within storage limits and are read live for existing memberships.
calculationapi, service, databasetest
services-membership:tests/e2e/database-refusals.e2e.spec.ts#mistakes only the database catches, through the API › DEF-MBR-0086: a configuration write a check, a foreign key or an integer column refuses › refuses a grace period of 2^31 days 400 naming grace_days, beyond what the column stores
06must prove
Proposed
Overlapping holdings in programs of the same exclusivity group are refused during membership creation or sale.
policyservicetest
services-membership:tests/acceptance/configuration/MBR-ACC-0093.acceptance.ts#MBR-ACC-0093: Putting two programs into one exclusivity group refuses new overlapping memberships from then on while members who already hold both keep them, and removing the group opens them again
07
Proposed
Program settings describe ordering, same-order member-price qualification and cancellation treatment for Commerce without calculating monetary amounts in Membership.
policyservicetest
services-membership:tests/acceptance/configuration/MBR-ACC-0121.acceptance.ts#MBR-ACC-0121: The settings Commerce reads flow into the purchase plan and never into an amount: the program's same-order switch, ordering profile, cancellation policy and fee product, and the package's reinstatement audience, enrolment proration and auto-renew default each appear where the participant promises them, and a change is reflected on the next prepare
08
Proposed
Grace-benefit and competing-membership preference switches are stored without an implemented consumer.
policyserviceobserved
09
Proposed
A binding change away from affiliation is accepted while unit-kind settings and open affiliations remain.
policyserviceobserved
10
Proposed
Inactive programs reject new enrolments through the memberships module while retaining existing holdings.
lifecycleservicedocumented
11must prove
Proposed
Program lists use identifier order despite retaining a display-order setting.
calculationserviceobserved
12must prove
Proposed
An explicit program ordering profile supplies the sales context; omission delegates to application and workspace defaults without duplicating checkout settings.
origin: services-membership:docs/migrations/packages-as-products/README.md#Ordering profiles (Commerce's decision approved by Andrew on 2026-10-18)
policydocumented
services-membership:docs/migrations/packages-as-products/README.md#Ordering profiles (added the same day, from Commerce's decision Andrew approved at about 15:45 UTC)

Scenarios

IdGivenWhenThenProvenance
01The association offers national membership and chapter-specific holdings.Staff configure a chapter program with chapter identity binding.Its memberships are distinguished by their chapter identity alongside national holdings.test
services-membership:tests/acceptance/configuration/MBR-ACC-0120.acceptance.ts#MBR-ACC-0120: Scenario 11 through the route: an identity-bound Chapter Membership program names its chapter unit type and its owning unit, refuses the wrong structure references in plain words and the missing identity type raw, and Kim holds a National and an Atlanta membership side by side

Edge Cases

IdGivenWhenThenProvenance
02Staff increase the program’s grace allowance after a term has ended.The member’s standing is evaluated again.The live allowance can return the holding to grace.test
services-membership:tests/acceptance/configuration/MBR-ACC-0092.acceptance.ts#MBR-ACC-0092: Changing a grace period moves every existing member at once: a type override wins over the program, zero is not blank, and even an as-of answer for a past date follows today's setting

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.