---
id: JNY-MBR-STR-005
title: 'Interpret expiry, lapse and a later rejoin'
feature: FEAT-MBR-STR-05
product_area: membership
module: structure
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
  - MBR-ACC-0119
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
actor: ACT-MBR-004
goal: 'Follow an ended term through grace and lapse, then distinguish a fresh rejoin from earlier continuity.'
capabilities:
  - CAP-MBR-STR-016
  - CAP-MBR-STR-017
  - CAP-MBR-STR-015
  - CAP-MBR-STR-009
screens: []
steps:
  - 'n': 1
    surface: listMemberships
    action: Evaluate Sam’s standing just after the September term end.
    capability: CAP-MBR-STR-016
    expected: The configured allowance returns grace.
    provenance: test
    source: >-
      services-membership:tests/e2e/s04-lapse-and-rejoin.e2e.spec.ts#scenario 4: lapse, drop and rejoin
      through a staff term › answers grace the day after the term ended and lapsed once the 60 days are over
  - 'n': 2
    surface: runStatusSweep
    action: Evaluate sweep detections after grace finishes.
    capability: CAP-MBR-STR-016
    expected: The engine identifies a lapse effective after the last grace day.
    provenance: inferred
    source: >-
      services-membership:modules/terms/tests/unit/sweep.spec.ts#the sweep’s detections › detects the lapse
      the day after grace ends, effective that day, with the expiry
    note: >-
      The test supplies detection inputs directly, so route invocation and event persistence remain separate
      proof concerns.
  - 'n': 3
    surface: terminateTerm
    action: Terminate the ended term using the nonrenewal explanation.
    capability: CAP-MBR-STR-017
    expected: The action records its reason without changing the already-ended period dates.
    provenance: test
    source: >-
      services-membership:tests/e2e/s04-lapse-and-rejoin.e2e.spec.ts#scenario 4: lapse, drop and rejoin
      through a staff term › drops the expired term with its reason and leaves its dates as they were
  - 'n': 4
    surface: createTerm
    action: Establish a new term after the reinstatement allowance has passed.
    capability: CAP-MBR-STR-015
    expected: The offering calculation starts a fresh anniversary period.
    provenance: test
    source: >-
      services-membership:tests/e2e/s04-lapse-and-rejoin.e2e.spec.ts#scenario 4: lapse, drop and rejoin
      through a staff term › starts the rejoin as a fresh anniversary period from its own date
  - 'n': 5
    surface: getMembership
    action: Inspect the holding’s continuity and join information.
    capability: CAP-MBR-STR-016
    expected: The long gap yields a second episode while the original joining date remains.
    provenance: test
    source: >-
      services-membership:tests/e2e/s04-lapse-and-rejoin.e2e.spec.ts#scenario 4: lapse, drop and rejoin
      through a staff term › answers two continuity episodes
alternates:
  - from_step: 4
    condition: Sam purchases inside the reinstatement allowance.
    path: The new period begins immediately after the previous end.
    outcome: The adjacent periods can belong to one continuity episode.
    provenance: inferred
    source: >-
      services-membership:modules/terms/tests/unit/term-rules.spec.ts#term rules: the rules of 1.0 beyond its
      spec cases › continues a terminated term on the last day of its window
    note: >-
      The period test returns adjacent continuation dates; the continuity rule joins adjacent periods under
      any nonnegative allowance.
failures:
  - from_step: 3
    condition: Staff select a suspension-only explanation for termination.
    path: The action rejects the reason mismatch.
    outcome: The existing term remains intact.
    provenance: observed
    source: >-
      services-membership:modules/configuration/services/persistence/membership-status-reasons.ts:requireStatusReason
rules_in_play:
  - BR-CAP-MBR-STR-016-01
  - BR-CAP-MBR-STR-016-03
  - BR-CAP-MBR-STR-016-05
  - BR-CAP-MBR-STR-016-06
  - BR-CAP-MBR-STR-016-07
  - BR-CAP-MBR-STR-016-08
  - BR-CAP-MBR-STR-017-02
  - BR-CAP-MBR-STR-015-04
  - BR-CAP-MBR-STR-009-05
assertions:
  - id: AS-JNY-MBR-STR-005-01
    statement: The example transitions from grace to lapse across its configured boundary.
    provenance: test
    source: >-
      services-membership:tests/e2e/s04-lapse-and-rejoin.e2e.spec.ts#scenario 4: lapse, drop and rejoin
      through a staff term › answers grace the day after the term ended and lapsed once the 60 days are over
  - id: AS-JNY-MBR-STR-005-02
    statement: The late rejoin creates a fresh period based on its own purchase date.
    provenance: test
    source: >-
      services-membership:tests/e2e/s04-lapse-and-rejoin.e2e.spec.ts#scenario 4: lapse, drop and rejoin
      through a staff term › starts the rejoin as a fresh anniversary period from its own date
  - id: AS-JNY-MBR-STR-005-03
    statement: The long gap begins another episode without replacing the original join date.
    provenance: test
    source: >-
      services-membership:tests/e2e/s04-lapse-and-rejoin.e2e.spec.ts#scenario 4: lapse, drop and rejoin
      through a staff term › keeps the original join date and restarts continuity at the rejoin (a gap of 437
      days is more than 60)
e2e_policy: none
e2e_reason: >-
  This workflow concerns backend period interpretation and membership administration. Existing unit and API
  evidence provides the relevant proof; no module administration screen participates.
---

# Interpret expiry, lapse and a later rejoin

## Story

Sam’s effective period ends and the system interprets the next date as grace. After the allowance finishes, boundary processing identifies lapse. Staff explain the ended membership through a termination reason. Sam returns much later, so the new period is a fresh start rather than continuation. The holding retains its original join date while its continuity records distinguish the return.
