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