---
id: WF-MBR-MEM-005
title: Suspend or restore a membership and its children
trigger: >-
  Staff submit suspension or restoration with the membership version and
  required explanation or reason.
product_area: membership
module: memberships
revision: 1
status: draft
design_intent: proposed
implementation_evidence: observed
inference: []
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
implements:
  - CAP-MBR-MEM-004
  - CAP-MBR-MEM-020
moves:
  - STATE-MBR-MEM-001
  - STATE-MBR-MEM-013
crosses:
  - SVC-MBR-MEM-memberships
  - SVC-MBR-MEM-events
idempotency: >-
  The read version must still match. Already-suspended and already-restored
  states reject the corresponding repeated staff action.
concurrency: >-
  The transaction locks the parent and affected children; term writers wait on
  those holding locks.
hops:
  - 'n': 1
    actor_or_service: Membership staff through the API
    action: >-
      Lock and version-check the principal holding, then validate the requested
      state change and reason.
    anchor: >-
      services-membership:modules/memberships/services/operations/staff-operations.ts:lockAt
    seam: sync
    on_failure: Reject the stale version or disallowed lifecycle operation.
    left_inconsistent: No partial local change remains.
    observer: Caller-visible API result
    provenance: test
    source: >-
      services-membership:tests/acceptance/memberships/MBR-ACC-0174.acceptance.ts#MBR-ACC-0174
  - 'n': 2
    actor_or_service: Memberships service
    action: >-
      Write suspension or restoration and its dated lifecycle and business
      events.
    anchor: >-
      services-membership:modules/memberships/services/operations/staff-operations.ts:suspendMembership
    seam: sync
    on_failure: An error aborts the transaction and reverses its writes.
    left_inconsistent: No partial local change remains.
    observer: Caller-visible API result
    provenance: test
    source: >-
      services-membership:modules/events/tests/integration/business-events.integration.spec.ts#states
      membership.membership.suspended with the reason
  - 'n': 3
    actor_or_service: Memberships service
    action: >-
      Update derived children’s suspension and events and recompute their
      caches.
    anchor: >-
      services-membership:modules/memberships/services/operations/staff-operations.ts:suspendChildren
    seam: sync
    on_failure: An error aborts the transaction and reverses its writes.
    left_inconsistent: No partial local change remains.
    observer: Caller-visible API result
    provenance: observed
    source: >-
      services-membership:modules/memberships/services/operations/staff-operations.ts:suspendChildren
branches:
  - >-
    Clearing suspension can reveal grace, lapse or another non-active standing
    from the existing periods.
waits: []
evidence:
  - >-
    services-membership at 5994c270:
    modules/memberships/services/operations/staff-operations.ts;
    services/events/membership-business-events.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]
---

# Suspend or restore a membership and its children

## What It Does

Staff withhold rights without deleting or changing dated periods. Clearing suspension restores computed standing, and organizational children follow the parent.

## The Flow

```mermaid
flowchart TD
  H1["Lock and version-check the principal holding, then validate the requested state change and reason"]
  H2["Write suspension or restoration and its dated lifecycle and business events"]
  H1 --> H2
  H3["Update derived children’s suspension and events and recompute their caches"]
  H2 --> H3
```

## When Something Fails

Parent and child changes roll back together on failure. Payment enforcement uses the same suspension fields, but Commerce restoration preserves a staff reason.
