---
id: MOD-MBR-MEM
title: 'Memberships, Applications and Membership Billing'
product_area: membership
module: memberships
revision: 1
status: draft
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
repositories:
  - name: services-membership
    paths:
      - modules/memberships
      - modules/applications
      - modules/billing
      - modules/commerce-participant
      - modules/snapshots
      - modules/events
      - modules/history
      - >-
        modules/data-jobs (read for the boundary: the structure's bulk loads, MOD-MBR-STR's records on
        MOD-PFM-DJE's engine)
      - aws/membership.service.ts (this module's permission groups)
      - aws/membership.attention.ts
      - aws/membership.responsibilities.ts
      - aws/membership.change-events.ts
      - aws/membership.metadata.ts
      - aws/membership.data-operations.ts
      - aws/api/membership.routes.ts
      - aws/api/configuration-routes.ts
      - lib/attention.ts
      - README.md (the guided build acceptance of 2026-10-18)
      - docs/attention.md
      - docs/migrations/membership-core/README.md
      - docs/migrations/participant/README.md
      - docs/migrations/scope/README.md
      - docs/migrations/history/README.md
      - docs/migrations/events/README.md
      - docs/migrations/attention/README.md
      - docs/migrations/unit-merge/README.md
      - docs/migrations/idempotency-ledger/README.md
      - docs/migrations/acceptance-repairs/README.md
      - docs/migrations/packages-as-products/README.md
      - docs/migrations/query-registration/README.md
      - 'modules/terms/services/status.ts, sweep.ts (read for dependency: the term engine is MOD-MBR-STR''s)'
      - tests/e2e
      - tests/acceptance
      - db/migrations (the constraints and functions the capabilities cite)
  - name: react-console
    paths:
      - 'app/(console)/console/[tenantId]/membership'
      - 'components/console/members, lib/members-store.ts, lib/members-data.ts (the prototype the page renders)'
      - acceptance/membership/inventory
      - acceptance/membership/journeys
      - acceptance/membership/reports
owns:
  - 'Memberships, their versions, lifecycle events, custom field values, numbers and status caches'
  - 'Membership terms and their versions, including pending terms reserved for purchases'
  - Term affiliations to organizational units and their versions
  - Package grants' granted memberships and organizations' flow-down and assigned child memberships
  - 'The status sweep, its schedules and its ledger'
  - 'Application processes, applications, their chosen units and assigned contacts, and the decision handler'
  - >-
    The Commerce participant: purchase preparation, reservations, fulfilment, cancellation and enforcement
    records
  - 'Billing templates, billing runs, their actions and jobs, and recurring billing runs'
  - 'Scope settings, roster exports and their jobs; the officer-scoped reads and actions'
  - Expiring-membership attention items and the responsibilities Membership registers
  - 'Change history (record revisions) of memberships and terms, the as-of reconstruction'
  - 'Monthly membership snapshots, their dimension settings, run jobs and published datasets'
  - 'The memberships, terms, lifecycle events and term affiliations query datasets'
  - 'Membership''s business events, their published record and their delivery'
  - Membership's idempotency ledger
does_not_own:
  - record: >-
      Organizational units, unit types, the tree, unit links, financial settings, dues products; programs,
      membership types, packages, status reasons, change policies; the term engine and its term rules
    owner: MOD-MBR-STR
  - record: 'Contacts, organizations, CRM affiliations and roles that owners and flow-down are read from'
    owner: MOD-CRM-ENT
  - record: Record merges of contacts and organizations
    owner: MOD-CRM-DQ
  - record: 'Carts, orders, order lines, payments, amendments and refunds'
    owner: MOD-COM-ORD
  - record: 'Packages and dues products as Accounting products, their prices'
    owner: MOD-ACC-PRD
  - record: 'Submissions, forms, review stages and decisions'
    owner: MOD-SUB-SUB
  - record: 'Committees, seats and appointments, and the officer grants derived from them'
    owner: MOD-CMT-CMT
  - record: 'Roles, policies, grant evaluation, the application gate and the Portal Member role'
    owner: MOD-PFM-SEC
  - record: 'Attention storage, routing and rendering; responsibility holders'
    owner: MOD-PFM-ELG
  - record: 'Communication requests, templates and sending'
    owner: MOD-PFM-NOT
  - record: 'The query layer, the snapshot ledger and run scheduling'
    owner: MOD-PFM-QRY
  - record: The data job engine that runs imports
    owner: MOD-PFM-DJE
  - record: Durable jobs infrastructure and job monitoring
    owner: MOD-PFM-OPS
  - record: 'Workspace provisioning, reset and purge'
    owner: MOD-PFM-TNL
  - record: The integration event catalogue
    owner: MOD-PFM-INT
hosted_screens:
  - route: '/console/{tenantId}/membership/members'
    purpose: 'Members list (a prototype over synthetic members; not connected to the service, FND-MBR-MEM-003)'
supersedes:
  - >-
    react-console acceptance inventory areas MEM (CAP-MBR-MEM-001 to 021 except 020), AFF, COM, BIL, SEC and
    HIS, and DAT-003, DAT-005, DAT-006, DAT-011 to 014, CFG-010, CFG-015, CFG-016 (inventory ids, recorded
    with an inventory: prefix)
  - >-
    react-console acceptance journeys MBR-ACC-0160 to 0198, 0260 to 0289, 0330 to 0367, 0400 to 0426, 0450 to
    0476, 0530 to 0558 (as journey and scenario seeds)
evidence:
  - >-
    services-membership at 5994c270e8a37a30f848e99ba5b5ee6b87c08893: the route lists, permission catalogue,
    tables, migrations and services of the module's source directories; the phase records under
    docs/migrations; the guided build acceptance in README.md; the module, end-to-end and acceptance
    specifications cited by the rules. Tests were read, not executed, by this job.
  - >-
    react-console at baf6dae382d6f41dce976c7f848667ccc37e076f: the Membership acceptance inventory, journeys,
    defect register and execution results, and the one membership console page.
coverage_catalog: >
  ### Coverage against the code at the pinned commit


  | Measure | Covered | Ratio |

  |---|---|---|

  | HTTP operations served by this module's route lists (memberships 23, history 6, applications 7 including
  the five generated application-process routes, billing 16 including the generated template and plan, execute
  and cancel routes, snapshots 2; the six module health routes excluded) | 54 of 54 | 54/54 |

  | Service-invoked operations (Commerce participant envelope operations and SQL owner functions, the decision
  delivery, the CRM change handler) | 14 of 14 (eight envelope operations, four SQL owner functions, the
  decision delivery, the CRM change batch) | 14/14 |

  | Table files of the module's source directories, each named in a capability's evidence | 42 of 42 | 42/42 |

  | Permission keys this module requires (members, memberships, terms, affiliations, member contact, rosters,
  self, operations, billing, history and eight query keys), each reachable from a capability | 24 of 24 |
  24/24 |

  | Neighbouring keys these routes also require (configuration read and manage, structure manage), owned by
  MOD-MBR-STR's catalogue group | 3 of 3 named | 3/3 |

  | End-to-end specification files of tests/e2e in scope (structure-api and terms-api are MOD-MBR-STR's; the
  dev folder holds deployed smoke checks) | 18 of 20 explicitly indexed; the idempotency-ledger and
  packages-as-products files lack direct capability evidence entries | 18/20 |

  | Module unit and integration specification files (memberships 21, applications 2, billing 4, Commerce
  participant 9, snapshots 5, events 6, history 3, data jobs 2), indexed for the cited evidence | 52 indexed |
  not exhaustively bound |

  | Schedules, state machines, queues and service functions | 11 of 11 | 11/11 |

  | Console pages under membership (one prototype page, FND-MBR-MEM-003) | 1 of 1 | 1/1 |

  | Acceptance inventory capabilities of areas MEM, AFF, COM, BIL, SEC and HIS named in a supersedes (MEM-020,
  the term engine's isolation, is MOD-MBR-STR's) | 79 of 80 | 79/80 |

  | Acceptance inventory capabilities of areas DAT and CFG absorbed here (the rest are MOD-MBR-STR's,
  MOD-PFM-DJE's or MOD-PFM-TNL's) | 10 | named in supersedes |

  | Acceptance journeys of the six areas (175) absorbed by a journey or bound by an acceptance scenario | 73 |
  73/175 |


  ### Operations by capability


  | Operation | Capability |

  |---|---|

  | `createMembership` | CAP-MBR-MEM-001 |

  | `createTerm` | CAP-MBR-MEM-002 |

  | `correctTerm` | CAP-MBR-MEM-003 |

  | `terminateTerm` | CAP-MBR-MEM-003 |

  | `suspendMembership` | CAP-MBR-MEM-004 |

  | `restoreMembership` | CAP-MBR-MEM-004 |

  | `listMemberships` | CAP-MBR-MEM-005 |

  | `getMembership` | CAP-MBR-MEM-005 |

  | `runStatusSweep` | CAP-MBR-MEM-005 |

  | `addAffiliation` | CAP-MBR-MEM-007 |

  | `endAffiliation` | CAP-MBR-MEM-007 |

  | `setPrimaryAffiliation` | CAP-MBR-MEM-007 |

  | `transferAffiliation` | CAP-MBR-MEM-008 |

  | `listApplicationProcesses` | CAP-MBR-MEM-011 |

  | `createApplicationProcess` | CAP-MBR-MEM-011 |

  | `getApplicationProcess` | CAP-MBR-MEM-011 |

  | `updateApplicationProcess` | CAP-MBR-MEM-011 |

  | `deleteApplicationProcess` | CAP-MBR-MEM-011 |

  | `listApplications` | CAP-MBR-MEM-011 |

  | `getApplication` | CAP-MBR-MEM-011 |

  | `listBillingTemplates` | CAP-MBR-MEM-013 |

  | `createBillingTemplate` | CAP-MBR-MEM-013 |

  | `getBillingTemplate` | CAP-MBR-MEM-013 |

  | `updateBillingTemplate` | CAP-MBR-MEM-013 |

  | `deleteBillingTemplate` | CAP-MBR-MEM-013 |

  | `listBillingRuns` | CAP-MBR-MEM-013 |

  | `createBillingRun` | CAP-MBR-MEM-013 |

  | `getBillingRun` | CAP-MBR-MEM-013 |

  | `listBillingRunActions` | CAP-MBR-MEM-013 |

  | `planBillingRun` | CAP-MBR-MEM-013 |

  | `executeBillingRun` | CAP-MBR-MEM-013 |

  | `cancelBillingRun` | CAP-MBR-MEM-013 |

  | `listRecurringBillingRuns` | CAP-MBR-MEM-013 |

  | `createRecurringBillingRun` | CAP-MBR-MEM-013 |

  | `getRecurringBillingRun` | CAP-MBR-MEM-013 |

  | `updateRecurringBillingRun` | CAP-MBR-MEM-013 |

  | `getScopeSettings` | CAP-MBR-MEM-015 |

  | `replaceScopeSettings` | CAP-MBR-MEM-015 |

  | `updateMemberContact` | CAP-MBR-MEM-016 |

  | `getMembershipFinancialSummary` | CAP-MBR-MEM-016 |

  | `renewMembership` | CAP-MBR-MEM-016 |

  | `enrollMember` | CAP-MBR-MEM-016 |

  | `exportRoster` | CAP-MBR-MEM-017 |

  | `getRosterExport` | CAP-MBR-MEM-017 |

  | `getMyMemberships` | CAP-MBR-MEM-017 |

  | `getMembershipAsOf` | CAP-MBR-MEM-018 |

  | `listMembershipHistory` | CAP-MBR-MEM-018 |

  | `getMembershipRevision` | CAP-MBR-MEM-018 |

  | `listMembershipHistoryActors` | CAP-MBR-MEM-018 |

  | `listTermHistory` | CAP-MBR-MEM-018 |

  | `getTermRevision` | CAP-MBR-MEM-018 |

  | `listTermHistoryActors` | CAP-MBR-MEM-018 |

  | `getSnapshotDimensionSettings` | CAP-MBR-MEM-019 |

  | `replaceSnapshotDimensionSettings` | CAP-MBR-MEM-019 |

  | CRM change events (contacts, organizations) (service-invoked) | CAP-MBR-MEM-006 |

  | the merge affiliation step of mergeOrganizationalUnit (MOD-MBR-STR) (service-invoked) | CAP-MBR-MEM-008 |

  | prepare_purchase (advise, prepare) (service-invoked) | CAP-MBR-MEM-009 |

  | commerce_commit_claims (service-invoked) | CAP-MBR-MEM-009 |

  | fulfill (service-invoked) | CAP-MBR-MEM-009 |

  | prepare_change and modify (refused until amendments are built) (service-invoked) | CAP-MBR-MEM-009 |

  | commerce_claim_change (the amendment fence) (service-invoked) | CAP-MBR-MEM-009 |

  | prepare_cancellation (service-invoked) | CAP-MBR-MEM-010 |

  | cancel (service-invoked) | CAP-MBR-MEM-010 |

  | commerce_release_claims (service-invoked) | CAP-MBR-MEM-010 |

  | commerce_claim_cancellation (service-invoked) | CAP-MBR-MEM-010 |

  | enforce (service-invoked) | CAP-MBR-MEM-010 |

  | restore (service-invoked) | CAP-MBR-MEM-010 |

  | submission.decided v1 (service-invoked) | CAP-MBR-MEM-012 |


  ### Tables by capability


  | Table file | Capabilities |

  |---|---|

  | `memberships.table.ts` | CAP-MBR-MEM-001, CAP-MBR-MEM-005 |

  | `memberships-versions.table.ts` | CAP-MBR-MEM-003, CAP-MBR-MEM-018 |

  | `membership-terms.table.ts` | CAP-MBR-MEM-001, CAP-MBR-MEM-002, CAP-MBR-MEM-003 |

  | `membership-terms-versions.table.ts` | CAP-MBR-MEM-003, CAP-MBR-MEM-018 |

  | `membership-lifecycle-events.table.ts` | CAP-MBR-MEM-005, CAP-MBR-MEM-020 |

  | `membership-custom-field-values.table.ts` | CAP-MBR-MEM-001 |

  | `membership-custom-field-values-versions.table.ts` | CAP-MBR-MEM-018, CAP-MBR-MEM-019 |

  | `membership-term-organizational-units.table.ts` | CAP-MBR-MEM-007, CAP-MBR-MEM-008 |

  | `membership-term-organizational-units-versions.table.ts` | CAP-MBR-MEM-007, CAP-MBR-MEM-018 |

  | `idempotency-keys.table.ts` | CAP-MBR-MEM-001 |

  | `schedules.table.ts` | CAP-MBR-MEM-005, CAP-MBR-MEM-013 |

  | `schedule-runs.table.ts` | CAP-MBR-MEM-005, CAP-MBR-MEM-013 |

  | `status-sweeps.table.ts` | CAP-MBR-MEM-005 |

  | `scope-settings.table.ts` | CAP-MBR-MEM-015 |

  | `roster-export-jobs.table.ts` | CAP-MBR-MEM-017 |

  | `roster-export-job-steps.table.ts` | CAP-MBR-MEM-017 |

  | `roster-export-job-events.table.ts` | CAP-MBR-MEM-017 |

  | `roster-export-rows.table.ts` | CAP-MBR-MEM-017 |

  | `application-processes.table.ts` | CAP-MBR-MEM-011 |

  | `application-process-packages.table.ts` | CAP-MBR-MEM-011 |

  | `applications.table.ts` | CAP-MBR-MEM-011, CAP-MBR-MEM-012 |

  | `application-affiliations.table.ts` | CAP-MBR-MEM-011 |

  | `application-assigned-contacts.table.ts` | CAP-MBR-MEM-006, CAP-MBR-MEM-011 |

  | `billing-templates.table.ts` | CAP-MBR-MEM-013 |

  | `billing-runs.table.ts` | CAP-MBR-MEM-013 |

  | `billing-run-actions.table.ts` | CAP-MBR-MEM-013 |

  | `recurring-billing-runs.table.ts` | CAP-MBR-MEM-013 |

  | `billing-run-jobs.table.ts` | CAP-MBR-MEM-013 |

  | `billing-run-job-steps.table.ts` | CAP-MBR-MEM-013 |

  | `billing-run-job-events.table.ts` | CAP-MBR-MEM-013 |

  | `commerce-claims.table.ts` | CAP-MBR-MEM-009, CAP-MBR-MEM-010 |

  | `commerce-enforcements.table.ts` | CAP-MBR-MEM-010 |

  | `membership-snapshot-members.table.ts` | CAP-MBR-MEM-019 |

  | `membership-snapshot-affiliations.table.ts` | CAP-MBR-MEM-019 |

  | `membership-snapshot-dimensions.table.ts` | CAP-MBR-MEM-019 |

  | `membership-snapshot-counts.table.ts` | CAP-MBR-MEM-019 |

  | `snapshot-dimension-settings.table.ts` | CAP-MBR-MEM-019 |

  | `snapshot-run-jobs.table.ts` | CAP-MBR-MEM-019 |

  | `snapshot-run-job-steps.table.ts` | CAP-MBR-MEM-019 |

  | `snapshot-run-job-events.table.ts` | CAP-MBR-MEM-019 |

  | `published-events.table.ts` | CAP-MBR-MEM-020 |

  | `record-revisions.table.ts` | CAP-MBR-MEM-018 |


  ### Permission keys by capability


  | Permission key | Capabilities |

  |---|---|

  | `membership.memberships.create` | CAP-MBR-MEM-001, CAP-MBR-MEM-006 |

  | `membership.terms.create` | CAP-MBR-MEM-002, CAP-MBR-MEM-006 |

  | `membership.terms.correct` | CAP-MBR-MEM-003 |

  | `membership.terms.terminate` | CAP-MBR-MEM-003 |

  | `membership.memberships.suspend` | CAP-MBR-MEM-004 |

  | `membership.members.read` | CAP-MBR-MEM-005, CAP-MBR-MEM-007, CAP-MBR-MEM-011, CAP-MBR-MEM-015,
  CAP-MBR-MEM-016, CAP-MBR-MEM-018 |

  | `membership.operations.run` | CAP-MBR-MEM-005 |

  | `membership.affiliations.manage` | CAP-MBR-MEM-007, CAP-MBR-MEM-008, CAP-MBR-MEM-015 |

  | `membership.structure.manage` | CAP-MBR-MEM-008 |

  | `membership.configuration.read` | CAP-MBR-MEM-011, CAP-MBR-MEM-015, CAP-MBR-MEM-019 |

  | `membership.configuration.manage` | CAP-MBR-MEM-011, CAP-MBR-MEM-015, CAP-MBR-MEM-019 |

  | `membership.billing.read` | CAP-MBR-MEM-013 |

  | `membership.billing.manage` | CAP-MBR-MEM-013 |

  | `membership.member-contact.update` | CAP-MBR-MEM-016 |

  | `membership.terms.renew` | CAP-MBR-MEM-016 |

  | `membership.memberships.enroll` | CAP-MBR-MEM-016 |

  | `membership.rosters.export` | CAP-MBR-MEM-017 |

  | `membership.self.read` | CAP-MBR-MEM-017 |

  | `membership.memberships.history` | CAP-MBR-MEM-018 |

  | `membership.memberships.query` | CAP-MBR-MEM-019 |

  | `membership.membership-terms.query` | CAP-MBR-MEM-019 |

  | `membership.lifecycle-events.query` | CAP-MBR-MEM-019 |

  | `membership.term-affiliations.query` | CAP-MBR-MEM-019 |

  | `membership.membership-snapshot-members.query` | CAP-MBR-MEM-019 |

  | `membership.membership-snapshot-affiliations.query` | CAP-MBR-MEM-019 |

  | `membership.membership-snapshot-dimensions.query` | CAP-MBR-MEM-019 |

  | `membership.membership-snapshot-counts.query` | CAP-MBR-MEM-019 |


  ### End-to-end specifications by capability


  | Spec file | Capabilities |

  |---|---|

  | `application-processes-api.e2e.spec.ts` | CAP-MBR-MEM-011 |

  | `billing-api.e2e.spec.ts` | CAP-MBR-MEM-013 |

  | `business-events.e2e.spec.ts` | CAP-MBR-MEM-020 |

  | `commerce-cancellation.e2e.spec.ts` | CAP-MBR-MEM-010 |

  | `commerce-purchase.e2e.spec.ts` | CAP-MBR-MEM-009 |

  | `database-refusals.e2e.spec.ts` | CAP-MBR-MEM-011, CAP-MBR-MEM-015 |

  | `history-api.e2e.spec.ts` | CAP-MBR-MEM-018 |

  | `idempotency-ledger.e2e.spec.ts` | CAP-MBR-MEM-001 |

  | `packages-as-products.e2e.spec.ts` | CAP-MBR-MEM-009 (and MOD-MBR-STR) |

  | `s01-early-renewal-type-change.e2e.spec.ts` | CAP-MBR-MEM-002 |

  | `s04-lapse-and-rejoin.e2e.spec.ts` | CAP-MBR-MEM-001, CAP-MBR-MEM-002, CAP-MBR-MEM-003, CAP-MBR-MEM-005 |

  | `s05-multiple-chapters.e2e.spec.ts` | CAP-MBR-MEM-007 |

  | `s06-midterm-transfer.e2e.spec.ts` | CAP-MBR-MEM-008 |

  | `s07-regional-officer.e2e.spec.ts` | CAP-MBR-MEM-015, CAP-MBR-MEM-016, CAP-MBR-MEM-017 |

  | `s08-cross-chapter-restrictions.e2e.spec.ts` | CAP-MBR-MEM-015, CAP-MBR-MEM-016 |

  | `s09-restructuring.e2e.spec.ts` | CAP-MBR-MEM-008, CAP-MBR-MEM-019 |

  | `s10-historical-dimension.e2e.spec.ts` | CAP-MBR-MEM-019 |

  | `s11-independent-chapter-dues.e2e.spec.ts` | CAP-MBR-MEM-009 |

  | `s12-expiring-appointment.e2e.spec.ts` | CAP-MBR-MEM-015 |

  | `s13-unit-merge.e2e.spec.ts` | CAP-MBR-MEM-008 |


  ### Schedules, state machines, queues and functions


  | Item | Capability |

  |---|---|

  | The nightly status sweep (one schedule per workspace at midnight in its zone; dispatcher every minute,
  consumer) | CAP-MBR-MEM-005 |

  | Recurring billing run schedules (work kind membership.billing.run, same dispatcher and consumer) |
  CAP-MBR-MEM-013 |

  | The billing run execution state machine and task function | CAP-MBR-MEM-013 |

  | The roster export state machine and task function | CAP-MBR-MEM-017 |

  | The monthly snapshot planner (15 minutes), dispatcher (every minute), run worker and state machine, with
  their alarms | CAP-MBR-MEM-019 |

  | The expiring-memberships attention sweep (daily 06:00 UTC) | CAP-MBR-MEM-014 |

  | The change-events dispatcher (every minute), consumer, work queue and dead-letter queue | CAP-MBR-MEM-020
  |

  | The CRM change handler function | CAP-MBR-MEM-006 |

  | The Commerce participant function (live alias) | CAP-MBR-MEM-009 |

  | The Submissions decision function | CAP-MBR-MEM-012 |

  | The idempotency purge (daily, inside the schedule dispatcher) | CAP-MBR-MEM-001 |
---

# Memberships, Applications and Membership Billing

## Purpose

This module lets an association keep each member's membership true from the first enrolment to the last drop. That includes the dated terms, the chapters the member belongs to, and the people and programs a membership brings with it. It lets members join and renew through the shared checkout and lets reviewed applications become memberships. It runs renewal billing, confines officers to their own units' members, and answers what membership was on any past date and month.

## Boundary

Membership owns the memberships, terms, affiliations, applications, billing runs, officer scope, history, snapshots and business events listed in this charter. The association's structure, configuration and term rules belong to `MOD-MBR-STR`, which this module reads. People and organizations are CRM's (`MOD-CRM-ENT`), and their merges belong to `MOD-CRM-DQ`. Orders and payments are Commerce's (`MOD-COM-ORD`), products and prices Accounting's (`MOD-ACC-PRD`), and reviews and decisions the Submissions engine's (`MOD-SUB-SUB`). Committees (`MOD-CMT-CMT`) derives officers' grants and listens for terminations. Platform supplies security, attention, communications, queries and snapshots, the data job engine, durable jobs, workspace lifecycle and the integration catalogue. No console screen administers this module's records yet. Membership performs no inference, so it has no inference operations.

## Features

| Feature | Owned Concepts | Capabilities | Journeys |
|---|---|---|---|
| `FEAT-MBR-MEM-01`, Membership Holdings and Periods | 2 | 6 | 1 |
| `FEAT-MBR-MEM-02`, Member Connections to Chapters and Sections | 1 | 2 | 1 |
| `FEAT-MBR-MEM-03`, Membership Purchases and Payment Consequences | 0 | 2 | 1 |
| `FEAT-MBR-MEM-04`, Membership Requests and Decisions | 1 | 2 | 1 |
| `FEAT-MBR-MEM-05`, Renewal Operations and Expiry Attention | 1 | 2 | 1 |
| `FEAT-MBR-MEM-06`, Scoped Membership Work and Personal Views | 0 | 3 | 1 |
| `FEAT-MBR-MEM-07`, Membership Accountability and Reporting | 1 | 3 | 0 |

## Capabilities

| Id | Feature | Title | Product intent | Evidence |
|---|---|---|---|---|
| `CAP-MBR-MEM-001` | `FEAT-MBR-MEM-01` | Record a membership and its first term without a purchase | confirmed | partially-observed |
| `CAP-MBR-MEM-002` | `FEAT-MBR-MEM-01` | Extend an existing membership through a staff term | confirmed | partially-observed |
| `CAP-MBR-MEM-003` | `FEAT-MBR-MEM-01` | Correct or close a term without losing earlier knowledge | confirmed | partially-observed |
| `CAP-MBR-MEM-004` | `FEAT-MBR-MEM-01` | Withhold membership through suspension and restore its standing | confirmed | observed |
| `CAP-MBR-MEM-005` | `FEAT-MBR-MEM-01` | Determine membership standing and refresh list status | confirmed | partially-observed |
| `CAP-MBR-MEM-006` | `FEAT-MBR-MEM-01` | Derive package grants and organizational child memberships | confirmed | partially-observed |
| `CAP-MBR-MEM-007` | `FEAT-MBR-MEM-02` | Maintain dated chapter and section affiliations | confirmed | partially-observed |
| `CAP-MBR-MEM-008` | `FEAT-MBR-MEM-02` | Preserve member connections through transfers and unit merges | confirmed | partially-observed |
| `CAP-MBR-MEM-009` | `FEAT-MBR-MEM-03` | Sell membership through the Commerce checkout | confirmed | partially-observed |
| `CAP-MBR-MEM-010` | `FEAT-MBR-MEM-03` | Undo a purchase or respond to a payment problem | confirmed | partially-observed |
| `CAP-MBR-MEM-011` | `FEAT-MBR-MEM-04` | Define what applications are for and read the applications | confirmed | partially-observed |
| `CAP-MBR-MEM-012` | `FEAT-MBR-MEM-04` | Act on an application's decision | confirmed | partially-observed |
| `CAP-MBR-MEM-013` | `FEAT-MBR-MEM-05` | Bill renewals in runs, on demand or on a schedule | confirmed | partially-observed |
| `CAP-MBR-MEM-014` | `FEAT-MBR-MEM-05` | Alert staff to memberships about to expire | proposed | observed |
| `CAP-MBR-MEM-015` | `FEAT-MBR-MEM-06` | Give officers their own units' members and nothing else | confirmed | partially-observed |
| `CAP-MBR-MEM-016` | `FEAT-MBR-MEM-06` | Let officers act for their members | confirmed | partially-observed |
| `CAP-MBR-MEM-017` | `FEAT-MBR-MEM-06` | Export a roster and let members see their own memberships | confirmed | partially-observed |
| `CAP-MBR-MEM-018` | `FEAT-MBR-MEM-07` | See how a membership changed and what it was on any date | confirmed | partially-observed |
| `CAP-MBR-MEM-019` | `FEAT-MBR-MEM-07` | Report on membership now and month by month | confirmed | partially-observed |
| `CAP-MBR-MEM-020` | `FEAT-MBR-MEM-07` | Tell other applications when membership changes | proposed | partially-observed |

## Journeys

| Id | Feature | Title | Product intent | E2E policy |
|---|---|---|---|---|
| `JNY-MBR-MEM-001` | `FEAT-MBR-MEM-01` | Staff carry a member through an early renewal, a lapse and a rejoin | confirmed | optional |
| `JNY-MBR-MEM-002` | `FEAT-MBR-MEM-03` | A new member joins through checkout with a chapter | confirmed | none |
| `JNY-MBR-MEM-003` | `FEAT-MBR-MEM-04` | An approved application becomes a dues order and a membership | confirmed | none |
| `JNY-MBR-MEM-004` | `FEAT-MBR-MEM-05` | An administrator runs the renewal season | confirmed | optional |
| `JNY-MBR-MEM-005` | `FEAT-MBR-MEM-06` | A regional officer looks after the members of their region | confirmed | optional |
| `JNY-MBR-MEM-006` | `FEAT-MBR-MEM-02` | A chapter is merged and its members follow it | confirmed | optional |
