---
id: CAP-MBR-MEM-004
title: Withhold membership through suspension and restore its standing
feature: FEAT-MBR-MEM-01
product_area: membership
module: memberships
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes:
  - 'inventory:CAP-MBR-MEM-006'
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - 'services-membership:README.md#2026-10-18 — Final acceptance'
purpose: >-
  Staff pause a membership’s rights for a recorded reason and later return it to the standing determined by
  its terms.
outcomes:
  - Suspension overrides term-based standing and propagates to dependent memberships.
  - Restoration derives standing from the terms that remain.
concepts:
  - CON-MBR-MEM-001
actors:
  - ACT-MBR-007
surfaces:
  - console
  - api
permissions:
  - key: membership.memberships.suspend
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-MBR-MEM-004-01
    proved_by: [ATS-MBR-MEM-004-01, ATS-MBR-MEM-004-08, TST-MBR-MEM-191, TST-MBR-MEM-193]
    statement: >-
      Suspension requires an applicable suspension reason and the current read version; repeated suspension
      and restoration of an unsuspended record are rejected.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-membership:tests/acceptance/memberships/MBR-ACC-0174.acceptance.ts#MBR-ACC-0174: A membership
      is suspended over its terms and restored to whatever the terms give, once each way, with no detections
      while suspended and the history showing the suspension
    origin: none
  - id: BR-CAP-MBR-MEM-004-02
    proved_by: [ATS-MBR-MEM-004-02, ATS-MBR-MEM-004-06, ATS-MBR-MEM-004-07, ATS-MBR-MEM-010-11, ATS-MBR-MEM-020-09, TST-MBR-MEM-028, TST-MBR-MEM-193]
    statement: >-
      While its suspension flag is set, a membership resolves as suspended for every requested date and
      produces no expiry or lapse detections during the sweep.
    kind: policy
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-membership:tests/acceptance/memberships/MBR-ACC-0174.acceptance.ts#MBR-ACC-0174: A membership
      is suspended over its terms and restored to whatever the terms give, once each way, with no detections
      while suspended and the history showing the suspension
    origin: none
  - id: BR-CAP-MBR-MEM-004-03
    proved_by: [ATS-MBR-MEM-004-02, ATS-MBR-MEM-004-06, ATS-MBR-MEM-004-07, ATS-MBR-MEM-010-11, ATS-MBR-MEM-020-09, TST-MBR-MEM-028, TST-MBR-MEM-193]
    statement: Restoration requires an explanation and derives standing again from the membership’s terms.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-membership:modules/memberships/tests/integration/services/staff-operations.integration.spec.ts#suspends
      over every term and restores to the status the terms give
    origin: none
  - id: BR-CAP-MBR-MEM-004-04
    proved_by: [ATS-MBR-MEM-004-03, ATS-MBR-MEM-004-05, ATS-MBR-MEM-006-13]
    statement: >-
      Suspending or restoring an organizational parent updates its linked children and records a lifecycle
      event for each.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: 'services-membership:modules/memberships/services/operations/staff-operations.ts:suspendChildren'
    origin: none
  - id: BR-CAP-MBR-MEM-004-05
    proved_by: [ATS-MBR-MEM-004-04]
    statement: >-
      Direct suspension and restoration are restricted to principal memberships; dependent memberships follow
      their parent.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: 'services-membership:modules/memberships/services/operations/staff-operations.ts:refuseChild'
    origin: none
  - id: BR-CAP-MBR-MEM-004-06
    proved_by: []
    statement: >-
      Suspension and restoration record lifecycle events on the workspace’s business date and publish matching
      business events; the suspension event carries its reason identifier.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: false
    provenance: test
    source: >-
      services-membership:modules/events/tests/integration/business-events.integration.spec.ts#states
      membership.membership.suspended with the reason, then membership.membership.restored
    origin: none
scenarios:
  - id: SC-CAP-MBR-MEM-004-01
    given: A corporate parent has linked employee memberships.
    when: Staff suspend the parent and subsequently restore it.
    then: 'The parent and linked employees follow both changes, with standing recomputed after restoration.'
    provenance: observed
    source: 'services-membership:modules/memberships/services/operations/staff-operations.ts:suspendChildren'
edge_cases: []
constraints: []
depends_on:
  - CAP-MBR-MEM-005
related:
  - CAP-MBR-MEM-010
  - CAP-MBR-MEM-006
journeys: []
open_questions: []
evidence:
  - repository: services-membership
    source_sha: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
    paths:
      - modules/memberships/services/operations/staff-operations.ts
      - modules/terms/services/status.ts
      - modules/memberships/tests/integration/services/staff-operations.integration.spec.ts
      - modules/memberships/tests/integration/services/organization-children.integration.spec.ts
      - tests/acceptance/memberships/MBR-ACC-0174.acceptance.ts
controls: [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]
exercised_by: [FAS-MBR-MEM-01-04, FAS-MBR-MEM-01-05]
suites: [TST-MBR-MEM-028, TST-MBR-MEM-191, TST-MBR-MEM-193]
---

# Withhold membership through suspension and restore its standing

## Purpose

Staff need to pause membership without replacing its dated periods. Suspension provides a recorded intervention and restoration lets the association resume the relationship when the matter is resolved.

## How It Works

Staff inspect a principal membership before submitting its version and a suspension reason. Rhythm applies the suspension and refreshes the saved standing. The membership’s dated periods remain available for inspection. Suspension also reaches dependent memberships linked to the parent. A later restoration includes an explanation for lifting the intervention. Staff then see the standing supported by the remaining terms, which may differ from the standing before suspension. The lifecycle log and published business events make the two interventions distinguishable. Payment enforcement is a separate route into suspension, and its handling of an existing staff intervention is described with payment problems.

## Relationships

- Date-based membership standing supplies the result that suspension overrides.
- Purchase reversal and payment enforcement describe related interventions from Commerce.
