# Phase 9.1 — Sports Center Membership Catalog | Field | Value | | --- | --- | | Status | Complete | | Module | sports_center (Membership Catalog) | | Version | 0.9.1.0 | | Database | `sports_center_db` | | API Port | 8006 | | ADR | ADR-001, ADR-003, ADR-006, ADR-014 | | Previous | [Phase 9.0](sports-center-phase-9-0.md) · [Handover 9.0](phase-handover/phase-9-0.md) | ## Goal Deliver the **Membership Catalog** for the independent Sports Center Platform: commercial and policy definitions that membership assignments (Phase 9.2) will consume. This phase does **not** implement member enrollment workflows, cards/QR issuance, coach engines, attendance, or booking. ## Scope Completed | Area | Deliverable | | --- | --- | | Membership Types | Extended with catalog links (package/plan/pricing/age/category/policies), transferability, sort order | | Packages | `membership_packages` aggregate + APIs | | Plans | `membership_plans` aggregate + APIs | | Pricing Models | `pricing_models` (fixed/recurring/tiered/usage/custom) — amounts are catalog config, not Accounting journals | | Age Groups | `age_groups` with min/max validation | | Sport Categories | `sport_categories` catalog grouping | | Membership Rules | Declarative `membership_rules` (eligibility/access/usage/transfer/custom) | | Renewal Policies | `renewal_policies` | | Freezing Rules | `freezing_rules` | | Expiration Policies | `expiration_policies` | | Validation | Age range, money amount, pricing/billing/rule enums, catalog ref integrity | | Events | `sports_center.{sport_category,age_group,pricing_model,membership_package,membership_plan,membership_rule,renewal_policy,freezing_rule,expiration_policy,membership_type}.*` | | APIs | Catalog routes under `/api/v1/*` + `/capabilities` | | Docs | This file + handover + registries/manifests | ## Out of Scope - Member / family / medical / card / waiver management (Phase 9.2) - Coach & staff engines (Phase 9.3) - Scheduling & booking (Phase 9.4) - Attendance engine (Phase 9.5) - Accounting postings / payment capture (Phase 9.8) - AI analytics (Phase 9.9) ## Architecture Decisions 1. Catalog entities are independent aggregates with UUID refs only (no ORM relationship graphs). 2. Pricing amounts live in Sports Center as **configuration**; journals remain Accounting-only (ADR-010). 3. MembershipType remains the primary commercial product SKU; packages/plans/policies attach via optional refs. 4. Backward compatible: new MembershipType columns are nullable / defaulted; existing 9.0 APIs remain valid. ## Public APIs (new / extended) | Resource | Prefix | | --- | --- | | Sport categories | `/api/v1/sport-categories` | | Age groups | `/api/v1/age-groups` | | Pricing models | `/api/v1/pricing-models` | | Membership packages | `/api/v1/membership-packages` | | Membership plans | `/api/v1/membership-plans` | | Membership rules | `/api/v1/membership-rules` | | Renewal policies | `/api/v1/renewal-policies` | | Freezing rules | `/api/v1/freezing-rules` | | Expiration policies | `/api/v1/expiration-policies` | | Membership types | `/api/v1/membership-types` (extended fields) | | Capabilities | `/capabilities` | ## Permissions New trees: `sports_center.sport_categories.*`, `age_groups.*`, `pricing_models.*`, `membership_packages.*`, `membership_plans.*`, `membership_rules.*`, `renewal_policies.*`, `freezing_rules.*`, `expiration_policies.*`. ## Migration | Revision | Description | | --- | --- | | `0002_phase_91_membership_catalog` | Catalog tables + MembershipType additive columns | ## Tests Architecture, catalog API happy path, tenant isolation, age validation, capabilities, docs presence, permissions/events. ## Related Documents - [Handover 9.1](phase-handover/phase-9-1.md) - [Sports Center Roadmap](sports-center-roadmap.md) - [ADR-014](architecture/adr/ADR-014.md) - [Module Registry](module-registry.md#sports_center) - [AI Framework](ai-framework/README.md) - [Phase Manifest](ai-framework/phase-manifest.yaml)