---
id: CAP-MBR-STR-017
title: Maintain reasons for membership status actions
feature: FEAT-MBR-STR-05
product_area: membership
module: structure
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
  - react-console acceptance inventory CAP-MBR-CFG-008
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources: []
purpose: 'Staff configure recognizable explanations for termination, cancellation and suspension.'
outcomes:
  - Status actions can refer to a reason matching their use.
  - Existing records retain their explanation when a reason is retired.
concepts:
  - CON-MBR-STR-005
actors:
  - ACT-MBR-001
  - ACT-MBR-002
surfaces:
  - api
preconditions: []
postconditions: []
permissions:
  - key: membership.configuration.read
    where_checked: api
    scope: tenant
  - key: membership.configuration.manage
    where_checked: api
    scope: tenant
  - key: membership.application.access
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-MBR-STR-017-01
    proved_by: [ATS-MBR-STR-017-01, ATS-MBR-STR-018-14]
    statement: 'Each configured reason selects one use: termination, suspension or cancellation.'
    kind: validation
    enforced_at:
      - api
      - database
    must_prove: true
    provenance: observed
    source: >-
      services-membership:modules/configuration/services/configuration/configuration-records.ts:statusReasonContent
    origin: none
  - id: BR-CAP-MBR-STR-017-02
    proved_by: [ATS-MBR-STR-017-02, ATS-MBR-STR-017-05]
    statement: >-
      A supplied action reason must be active and match the action’s use, otherwise the action is refused with
      an explanation.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: >-
      services-membership:modules/configuration/services/persistence/membership-status-reasons.ts:requireStatusReason
    origin: none
  - id: BR-CAP-MBR-STR-017-03
    proved_by: []
    statement: Retiring a reason leaves records already referencing it unchanged.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: false
    provenance: documented
    source: 'react-console:acceptance/membership/inventory/business-rules.json#RUL-MBR-CFG-022'
    origin: none
  - id: BR-CAP-MBR-STR-017-04
    proved_by: [ATS-MBR-STR-017-03]
    statement: Reason priorities do not affect ordering and duplicate names are allowed.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: observed
    source: 'services-membership:modules/configuration/services/persistence/configuration-store.ts:configurationStore'
    origin: none
  - id: BR-CAP-MBR-STR-017-05
    proved_by: []
    statement: A reason’s use can be changed while terms still refer to it.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: observed
    source: >-
      services-membership:modules/configuration/services/configuration/configuration-records.ts:statusReasonResource
    origin: none
  - id: BR-CAP-MBR-STR-017-06
    proved_by: [ATS-MBR-STR-017-04]
    statement: The reason list supports filtering by its selected use.
    kind: calculation
    enforced_at:
      - api
    must_prove: true
    provenance: observed
    source: 'services-membership:modules/configuration/aws/api/configuration.routes.ts:configurationModuleRoutes'
    origin: none
scenarios:
  - id: SC-CAP-MBR-STR-017-01
    given: 'Staff need separate explanations for termination, cancellation and suspension.'
    when: They save a reason for each action category.
    then: Each reason records its intended action category.
    provenance: documented
    source: 'react-console:acceptance/membership/journeys/configuration/MBR-ACC-0105.json'
edge_cases:
  - id: SC-CAP-MBR-STR-017-02
    given: A cancellation request selects a suspension-only reason.
    when: Staff submit the cancellation.
    then: 'The mismatch is rejected, although the documented message describes termination.'
    provenance: documented
    source: 'react-console:acceptance/membership/journeys/configuration/MBR-ACC-0105.json'
constraints: []
depends_on:
  - CAP-MBR-STR-018
related:
  - CAP-MBR-STR-016
journeys:
  - JNY-MBR-STR-005
open_questions: []
evidence:
  - 'services-membership: Examination of the status reasons table, persistence and request schema.'
  - >-
    services-membership: Examination of acceptance journey MBR-ACC-0105; react-console inventory
    CAP-MBR-CFG-008.
  - 'react-console:acceptance/membership/inventory/business-rules.json'
  - 'services-membership:modules/configuration/aws/api/configuration.routes.ts'
  - 'services-membership:modules/configuration/services/configuration/configuration-records.ts'
  - 'services-membership:modules/configuration/services/persistence/configuration-store.ts'
  - 'services-membership:modules/configuration/services/persistence/membership-status-reasons.ts'
controls: [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]
exercised_by: [FAS-MBR-STR-05-02, FAS-MBR-STR-05-03, FAS-MBR-STR-05-04]
suites: []
---

# Maintain reasons for membership status actions

## Purpose

Staff configure recognizable explanations for termination, cancellation and suspension.

## How It Works

An administrator creates the explanations staff need for membership status actions. Each explanation has a readable identity and a selected use. The reason list can be narrowed to that use. The action consumer checks whether a supplied reason is active and appropriate. Retirement removes it from future eligible choices without rewriting past records. Its priority is retained but does not order the list. Names are not required to be unique, so staff may need to distinguish similarly named choices. Changing the selected use remains possible while references exist. That flexibility can make past explanations harder to interpret. The product should decide whether a referenced reason’s use becomes fixed and improve mismatched-action messages.

## Relationships

- Status interpretation supplies the context for reasons used by membership actions.
- Shared configuration operations maintain reason identity and version.
