Skip to content

CAP-MBR-MEM-012Act on an application's decision

Markdown

CAP-MBR-MEM-012

Act on an application's decision

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
An approved applicant receives exactly one dues order.A rejected or withdrawn applicant holds nothing that was reserved for them.The engine knows when Membership has acted on each decision.
Surfaces
api
Intent sources
services-membership:README.md#2026-10-18 — Final acceptanceservices-membership:docs/migrations/participant/README.md (Andrew, 2026-10-17: build against contracts)

Controls

37 controls apply, from the corpus control catalogue.

TC-AVL-002 TC-AVL-003 TC-AVL-004 TC-AZ-001 TC-AZ-003 TC-AZ-004 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-006 TC-LOG-001 TC-LOG-002 TC-LOG-003 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

Business Rules

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

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Membership takes decisions only about its own two subject kinds (a join, decided against a membership type; a renewal, reinstatement or change, decided against a membership) and refuses any other.
validationservicetest
services-membership:modules/applications/tests/unit/submissions-contracts.spec.ts#refuses a decision about a subject kind that is not Membership’s
02must prove
Confirmed
A join's decision codes mean approved (enrol), rejected (decline), revision required (request changes) and withdrawn; a membership's renew, reinstate and change codes all mean approved.
policyservicetest
03must prove
Confirmed
A decision is recorded once by its identifier: a redelivery is answered as already recorded, a decision that names the one it supersedes replaces it, and one that a later decision replaced is ignored.
invariantservice, databasetest
04must prove
Confirmed
The delivered decision leaves the application decided, awaiting the applicant, withdrawn or closed according to the decision kind.
lifecycleservicetest
services-membership:modules/applications/tests/unit/submissions-contracts.spec.ts#leaves the application decided, awaiting the applicant or withdrawn by the decision’s kind
05must prove
Confirmed
An approval of a purchase process prepares the dues order through Membership's own checkout preparation (the package and each planned chapter's dues line, naming the approved application) and places it once, keyed by the decision, recording the order on the application.
policyservicetest
services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#records an approval, places the dues order through the port (package and chapter dues), and acknowledges it
06must prove
Confirmed
The approved purchase stays pending in Membership until Commerce fulfils the order.
lifecycleservicetest
services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#leaves the approved purchase pending in Membership until Commerce fulfils it
07must prove
Confirmed
A rejection, withdrawal or closing cancels the pending term of the application's membership, with its reservation, and keeps the membership.
lifecycleservicetest
services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#cancels the pending term of a rejected application whose purchase was placed
08must prove
Confirmed
When the dues order's preparation or placement is refused, the decision is left unacknowledged so the engine delivers it again.
no proof recorded yet
policyserviceunknown
09must prove
Confirmed
A decision about a submission Membership holds no application for is answered as unknown and not acknowledged.
validationservicetest
services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#does not acknowledge a decision for a submission it holds no application of
10
Confirmed
Membership registers its subject kinds with the engine for delivery to its decision function, to be acknowledged within a day of delivery.
policyservicetest
services-membership:modules/applications/tests/unit/submissions-contracts.spec.ts#declares the join and the membership kinds, delivered to membership_submission_decisions within a day

Scenarios

IdGivenWhenThenProvenance
01Nia applied to join with the Atlanta chapter and the engine approves her.The decision is delivered, then delivered again.One dues order for the package and Atlanta's dues is placed and acknowledged; the redelivery calls neither Commerce nor the engine again.test
services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#answers a redelivered decision as recorded and calls neither port again
02An applicant's purchase was placed and is awaiting review.The engine rejects the application.The reserved term is cancelled and its reservation released, and the membership remains with no status.test
services-membership:modules/applications/tests/integration/decision-handler.integration.spec.ts#cancels the pending term of a rejected application whose purchase was placed

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.