# Phase 12.1 — Digital Menu Catalog

| Field | Value |
| --- | --- |
| Status | Complete |
| Module | hospitality |
| Commercial Product | Torbat Food |
| Version | 0.12.1.0 |
| Database | `hospitality_db` |
| API Port | 8009 |
| ADR | ADR-001, ADR-003, ADR-006, ADR-017 |
| Prior phase | [12.0 Foundation](hospitality-phase-12-0.md) |

## Goal

Extend the Hospitality Platform digital menu with catalog depth — allergens, modifier groups/options, availability windows, Storage media refs, and multi-language shells — without introducing POS, kitchen, QR ordering, or reservation engines.

## Scope (In)

- Catalog aggregates: Allergen, ModifierGroup, ModifierOption, MenuItemModifier, MenuItemAllergen, AvailabilityWindow, MenuMediaRef, MenuLocalization
- Additive MenuItem fields: preparation_minutes, calories, spicy_level, dietary flags, tags, primary_media_ref
- Catalog APIs under `/api/v1` + validators + permissions `hospitality.allergens|modifier_*|availability_windows|menu_media|menu_localizations.*`
- Publish-only catalog events `hospitality.*`
- Alembic `0002_phase_121_digital_menu_catalog`
- Capability flag `digital_menu_catalog: true`; version `0.12.1.0`

## Out of Scope

- POS Lite / POS Pro
- Kitchen display / tickets
- QR Menu rendering / QR Ordering
- Reservation / Table Service engines
- Payment posting / Delivery dispatch
- Binary media storage (refs to Storage only)

## Owned Modules (aggregates)

Independent aggregates in `app/models/catalog.py` (UUID refs only). Foundation menu shells from 12.0 remain owners of Menu / Category / Item core rows.

## Published Events

| Event | Aggregate |
| --- | --- |
| `hospitality.allergen.created` | allergen |
| `hospitality.modifier_group.created` | modifier_group |
| `hospitality.modifier_option.created` | modifier_option |
| `hospitality.menu_item_modifier.linked` | menu_item_modifier |
| `hospitality.menu_item_allergen.linked` | menu_item_allergen |
| `hospitality.availability_window.created` | availability_window |
| `hospitality.menu_media_ref.created` | menu_media_ref |
| `hospitality.menu_localization.upserted` | menu_localization |

## API Contracts (catalog)

| Resource | Prefix |
| --- | --- |
| Allergens | `/api/v1/allergens` |
| Modifier groups / options | `/api/v1/modifier-groups`, `/modifier-options` |
| Item ↔ modifier / allergen links | `/api/v1/menu-item-modifiers/link`, `/menu-item-allergens/link` |
| Availability windows | `/api/v1/availability-windows` |
| Menu media refs | `/api/v1/menu-media-refs` |
| Menu localizations | `/api/v1/menu-localizations/upsert` |

## Permissions

Catalog trees: `hospitality.allergens.*`, `hospitality.modifier_groups.*`, `hospitality.modifier_options.*`, `hospitality.availability_windows.*`, `hospitality.menu_media.*`, `hospitality.menu_localizations.*`.

## Quality Gates

All gates passed (architecture, dependency, migration, tenant isolation, API, permissions, security, performance, documentation). See [phase-handover/phase-12-1.md](phase-handover/phase-12-1.md).

## Related Documents

- [Hospitality Roadmap](hospitality-roadmap.md)
- [Phase Handover 12.1](phase-handover/phase-12-1.md)
- [Phase 12.0](hospitality-phase-12-0.md)
- [ADR-017](architecture/adr/ADR-017.md)
- [Module Registry — hospitality](module-registry.md#hospitality)
- [AI Development Framework](ai-framework/README.md)
- [Progress](progress.md) · [Next Steps](next-steps.md)
