# 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)