Include Loyalty/Communication/Sports Center backends and registry updates alongside production nginx and compose wiring. Co-authored-by: Cursor <cursoragent@cursor.com>
5.4 KiB
Phase Handover — 9.2 Sports Center Member Management
Mandatory starting point for Phase 9.3 — Coach & Staff Management.
Overview
Phase 9.2 delivered Member Management on sports-center-service / sports_center_db (port 8006, version 0.9.2.0). Sports members, family/medical/emergency shells, membership assignment against the 9.1 catalog, cards/QR/digital passes, waivers, and document refs are in place. Coach, attendance, and booking engines were not implemented.
Completed Scope
- Eight member-related aggregates + additive
memberships.member_id/ freeze window columns - Status transition rules for memberships (
pending|active|frozen|suspended|expired|cancelled) - Card/QR generation shells and waiver sign workflow
- Validators, permissions, publish-only events
- Alembic
0003_phase_92_member_management - Tests + docs + registry/manifest updates
Created Modules
| Module | Notes |
|---|---|
| Members | New profile aggregate |
| Family Members | New |
| Emergency Contacts | New |
| Medical Information | New (one per member) |
| Membership Cards | New |
| Digital Memberships | New |
| Waivers | New |
| Member Documents | New (Storage file refs) |
| Memberships | Extended assignment + status actions |
Models
See app/models/members.py and additive fields on Membership in app/models/foundation.py.
Repositories / Services / Validators
app/repositories/members.pyapp/services/members.py(+MembershipServiceassignment/status infoundation.py)app/validators/members.py
Public APIs
Listed in sports-center-phase-9-2.md. Soft delete via POST /{id}/delete where applicable.
Events
See phase doc. Legacy memberships created without member_id still emit sports_center.member.created for backward compatibility; real members emit it from MemberService.create.
Database Changes
Additive only within sports_center_db. No Core/CRM/Loyalty/Communication schema changes. Catalog tables unchanged.
Migration History
| Revision | Description |
|---|---|
0001_initial |
Phase 9.0 foundation |
0002_phase_91_membership_catalog |
Phase 9.1 catalog |
0003_phase_92_member_management |
Phase 9.2 members |
Indexes / Constraints
- Unique
(tenant_id, member_number),(tenant_id, card_number),(tenant_id, pass_code) - Unique medical row per
(tenant_id, member_id) - Indexes on
(tenant_id, member_id)for child tables
Configuration
No new tenant configuration keys. Uses existing sports configuration shells.
Connector Framework
Unchanged (interfaces only). Cards store QR/barcode payloads as strings — device adapters remain Phase 9.5+.
Integration Points
| Platform | Phase 9.2 usage |
|---|---|
| Accounting | Contract only (external_customer_ref) |
| CRM | external_crm_contact_ref on Member/Membership |
| Loyalty | Not enrolled here |
| Communication | Not sending messages |
| Storage | file_ref / document_file_ref / signature_ref only |
| Identity | external_user_ref only |
| AI | Not used |
Known Limitations
- No coach/attendance/booking engines
- Rule expression evaluation from catalog still deferred for complex eligibility
- Route-level permission enforcement still deferred (JWT +
X-Tenant-ID) - Events in-memory (no durable outbox yet)
- No frontend module UI
- Medical data is a privacy-aware shell, not an EHR
Backward Compatibility
- Existing memberships remain valid with nullable
member_id - Legacy membership create without member still works
- Catalog APIs unchanged
Architectural Decisions
No new ADR. Relies on ADR-014, ADR-001, ADR-003, ADR-006.
Future Dependencies
Phase 9.3 Coach & Staff Management depends on this member foundation for assignments.
Requirements for Phase 9.3
- Read this handover +
docs/sports-center-phase-9-2.md+ ADR-014 - Do not recreate member/catalog tables
- Implement coaches/trainers/staff depth only as scoped
- Keep sport-agnostic rules; keep connectors adapter-based
- Do not own Accounting/CRM/Loyalty/Communication/Notification/Storage/Identity/AI
Open Risks
- Member vs Platform Member vs Loyalty Member terminology confusion — keep refs explicit
- Medical confidentiality vs reporting needs in later phases
- Card QR payload format may need versioning when attendance devices come online
Performance Notes
CRUD + tenant indexes only; no hot-path attendance writes.
Security Notes
JWT + tenant isolation; soft deletes; audit trail; medical is_confidential flag; no binary secrets in DB.
Testing Summary
Pytest: architecture (member models/permissions/events), members API flow, assign/isolation, invalid transitions, migration, docs, plus prior suites. All green at completion.
Documentation Summary
docs/sports-center-phase-9-2.mddocs/phase-handover/phase-9-2.md(this file)- Updates: progress, next-steps, roadmap, module-registry, glossary, manifests, SportsCenter phase area
Next Phase Entry Point
Start Phase 9.3 from this document. Confirm scope in docs/next-steps.md before coding. Do not skip ahead.
Completion Sign-Off
- Quality gates passed
- Tests green
- Documentation updated
- Progress / next-steps / registries / manifests updated
- No unfinished claimed deliverables