# Phase 9.2 — Sports Center Member Management

| Field | Value |
| --- | --- |
| Status | Complete |
| Module | sports-center |
| Version | 0.9.2.0 |
| Database | `sports_center_db` |
| API Port | 8006 |
| ADR | ADR-001, ADR-003, ADR-006, ADR-014 |

## Goal

Deliver **Member Management** on the independent Sports Center Platform: sports members, family links, medical shells, emergency contacts, membership assignment (consuming the Phase 9.1 catalog), cards/QR/digital passes, waivers, and document attachments — without coach/attendance/booking engines.

## Scope Completed

- Separate `Member` aggregate (distinct from Platform Member and Loyalty Member)
- Family members, emergency contacts, medical information (privacy-aware; Storage file refs only)
- Membership assignment via `member_id` + status transitions (activate/suspend/cancel/freeze/unfreeze)
- Membership cards (physical/digital/QR), digital membership passes, waivers (sign), member documents
- Validators, permissions, publish-only events, Alembic `0003_phase_92_member_management`
- `/capabilities` advertises `member_management: true` (version `0.9.2.0`)

## Out of Scope

- Coach & staff engines (9.3)
- Scheduling & booking (9.4)
- Attendance & access control engines (9.5)
- Accounting postings / payment capture
- Binary file storage (refs only)
- Recreating Membership Catalog tables (9.1)

## Owned Aggregates

| Aggregate | Table |
| --- | --- |
| Member | `members` |
| FamilyMember | `family_members` |
| EmergencyContact | `emergency_contacts` |
| MedicalInformation | `medical_information` |
| MembershipCard | `membership_cards` |
| DigitalMembership | `digital_memberships` |
| Waiver | `waivers` |
| MemberDocument | `member_documents` |

Additive on `memberships`: `member_id`, `freeze_starts_on`, `freeze_ends_on`; status enum adds `frozen`.

## APIs

| Resource | Prefix |
| --- | --- |
| Members | `/api/v1/members` |
| Family members | `/api/v1/family-members` |
| Emergency contacts | `/api/v1/emergency-contacts` |
| Medical | `/api/v1/medical-information` |
| Cards | `/api/v1/membership-cards` |
| Digital | `/api/v1/digital-memberships` |
| Waivers | `/api/v1/waivers` (+ `/{id}/sign`) |
| Documents | `/api/v1/member-documents` |
| Membership status | `/api/v1/memberships/{id}/activate|suspend|cancel|freeze|unfreeze|assign-member` |

## Events

`sports_center.member.updated`, `membership.assigned`, `membership.status_changed`, `membership.frozen`, `membership.unfrozen`, `family_member.created`, `emergency_contact.created`, `medical_information.upserted`, `membership_card.issued|revoked`, `digital_membership.issued`, `waiver.created|signed`, `member_document.attached`.

## Permissions

`sports_center.members.*`, `family_members.*`, `emergency_contacts.*`, `medical.*`, `membership_cards.*`, `digital_memberships.*`, `waivers.*`, `member_documents.*`, plus `memberships.assign` / `memberships.status`.

## Migration

| Revision | Description |
| --- | --- |
| `0003_phase_92_member_management` | Member tables + additive membership columns |

## Tests

`test_members.py` (happy path, assign/isolation, invalid freeze transition, capabilities) + architecture/migration/docs updates.

## Related Documents

- [Handover 9.2](phase-handover/phase-9-2.md)
- [Phase 9.1](sports-center-phase-9-1.md)
- [ADR-014](architecture/adr/ADR-014.md)
- [Module Registry](module-registry.md#sports_center)
