# Hospitality Platform service snapshot — regenerated after each Complete phase. # Spec: docs/ai-framework/service-snapshot-policy.md schema_version: 1 snapshot_version: 8 service_name: hospitality commercial_product: Torbat Food current_version: "0.12.8.0" current_phase: hospitality-12.8 last_completed_phase: hospitality-12.8 next_phase: hospitality-12.9 completed_phases: - hospitality-12.0 - hospitality-12.1 - hospitality-12.2 - hospitality-12.3 - hospitality-12.4 - hospitality-12.5 - hospitality-12.6 - hospitality-12.7 - hospitality-12.8 remaining_phases: - hospitality-12.9 - hospitality-12.10 registered_modules: - venues - branches - dining_areas - tables - menus - menu_categories - menu_items - allergens - modifier_groups - modifier_options - availability_windows - menu_media_refs - menu_localizations - qr_codes - qr_menu_sessions - qr_ordering_sessions - carts - cart_lines - reservations - table_assignments - service_requests - waitlist_entries - pos_registers - pos_shifts - pos_tickets - pos_ticket_lines - pos_payments - pos_discounts - pos_tax_lines - pos_floor_plans - pos_stations - kitchen_stations - kitchen_tickets - kitchen_ticket_items - connector_registrations - connector_dispatches - analytics_report_definitions - analytics_snapshots - bundles - feature_toggles - roles - permissions - configurations - settings - audit enabled_capabilities: - foundation - feature_based_architecture - bundle_based_licensing - capability_discovery - feature_toggle - digital_menu_shell - digital_menu_catalog - table_service_shell - qr_menu - qr_ordering - table_service - reservation - pos_lite - pos_pro - kitchen - delivery_integration - accounting_integration - crm_integration - loyalty_integration - communication_integration - website_integration - analytics enabled_bundles: - digital_menu - qr_menu - qr_ordering - pos_lite - pos_pro - kitchen - reservation - table_service - delivery_connector - accounting_connector - crm_connector - loyalty_connector - communication_connector - website_connector - analytics - ai_assistant public_apis: - { method: GET, path: /health, permission: public } - { method: GET, path: /capabilities, permission: public } - { method: POST, path: /api/v1/venues, permission: hospitality.venues.create } - { method: POST, path: /api/v1/menus, permission: hospitality.menus.create } - { method: POST, path: /api/v1/allergens, permission: hospitality.allergens.manage } - { method: POST, path: /api/v1/modifier-groups, permission: hospitality.modifier_groups.manage } - { method: POST, path: /api/v1/availability-windows, permission: hospitality.availability_windows.manage } - { method: POST, path: /api/v1/menu-media-refs, permission: hospitality.menu_media.manage } - { method: POST, path: /api/v1/menu-localizations/upsert, permission: hospitality.menu_localizations.manage } - { method: POST, path: /api/v1/qr-codes, permission: hospitality.qr_codes.manage } - { method: GET, path: "/api/v1/qr-codes/by-token/{token}", permission: hospitality.qr_codes.view } - { method: POST, path: /api/v1/qr-menu-sessions, permission: hospitality.qr_menu_sessions.manage } - { method: POST, path: /api/v1/qr-ordering-sessions, permission: hospitality.qr_ordering_sessions.manage } - { method: POST, path: "/api/v1/qr-ordering-sessions/{id}/submit", permission: hospitality.qr_ordering_sessions.manage } - { method: POST, path: /api/v1/carts, permission: hospitality.carts.manage } - { method: POST, path: /api/v1/cart-lines, permission: hospitality.carts.manage } - { method: POST, path: /api/v1/reservations, permission: hospitality.reservations.manage } - { method: POST, path: "/api/v1/reservations/{id}/status", permission: hospitality.reservations.manage } - { method: POST, path: /api/v1/table-assignments, permission: hospitality.table_assignments.manage } - { method: POST, path: "/api/v1/table-assignments/{id}/release", permission: hospitality.table_assignments.manage } - { method: POST, path: /api/v1/service-requests, permission: hospitality.service_requests.manage } - { method: POST, path: "/api/v1/service-requests/{id}/status", permission: hospitality.service_requests.manage } - { method: POST, path: /api/v1/waitlist, permission: hospitality.waitlist.manage } - { method: POST, path: "/api/v1/waitlist/{id}/status", permission: hospitality.waitlist.manage } - { method: POST, path: /api/v1/pos-registers, permission: hospitality.pos_registers.manage } - { method: POST, path: /api/v1/pos-shifts, permission: hospitality.pos_shifts.manage } - { method: POST, path: "/api/v1/pos-shifts/{id}/close", permission: hospitality.pos_shifts.manage } - { method: POST, path: /api/v1/pos-tickets, permission: hospitality.pos_tickets.manage } - { method: POST, path: "/api/v1/pos-tickets/{id}/void", permission: hospitality.pos_tickets.manage } - { method: POST, path: /api/v1/pos-ticket-lines, permission: hospitality.pos_tickets.manage } - { method: POST, path: /api/v1/pos-payments, permission: hospitality.pos_payments.manage } - { method: POST, path: /api/v1/pos-discounts, permission: hospitality.pos_discounts.manage } - { method: POST, path: /api/v1/pos-tax-lines, permission: hospitality.pos_tax_lines.manage } - { method: POST, path: /api/v1/pos-floor-plans, permission: hospitality.pos_floor_plans.manage } - { method: POST, path: /api/v1/pos-stations, permission: hospitality.pos_stations.manage } - { method: POST, path: /api/v1/kitchen-stations, permission: hospitality.kitchen_stations.manage } - { method: POST, path: /api/v1/kitchen-tickets, permission: hospitality.kitchen_tickets.manage } - { method: POST, path: "/api/v1/kitchen-tickets/{id}/status", permission: hospitality.kitchen_tickets.manage } - { method: POST, path: /api/v1/kitchen-ticket-items, permission: hospitality.kitchen_tickets.manage } - { method: POST, path: "/api/v1/kitchen-ticket-items/{id}/status", permission: hospitality.kitchen_tickets.manage } - { method: POST, path: /api/v1/connector-registrations, permission: hospitality.connector_registrations.manage } - { method: POST, path: /api/v1/connector-dispatches, permission: hospitality.connector_dispatches.manage } - { method: POST, path: /api/v1/analytics-reports, permission: hospitality.analytics_reports.manage } - { method: POST, path: /api/v1/analytics-snapshots/refresh, permission: hospitality.analytics_snapshots.manage } - { method: POST, path: /api/v1/bundle-definitions, permission: hospitality.bundles.manage } - { method: POST, path: /api/v1/tenant-bundles/activate, permission: hospitality.tenant_bundles.manage } - { method: POST, path: /api/v1/feature-toggles/upsert, permission: hospitality.feature_toggles.manage } published_events: - { event_type: hospitality.venue.created, version: "1" } - { event_type: hospitality.menu.created, version: "1" } - { event_type: hospitality.allergen.created, version: "1" } - { event_type: hospitality.modifier_group.created, version: "1" } - { event_type: hospitality.availability_window.created, version: "1" } - { event_type: hospitality.menu_media_ref.created, version: "1" } - { event_type: hospitality.menu_localization.upserted, version: "1" } - { event_type: hospitality.qr_code.created, version: "1" } - { event_type: hospitality.qr_menu_session.created, version: "1" } - { event_type: hospitality.qr_ordering_session.created, version: "1" } - { event_type: hospitality.qr_ordering_session.submitted, version: "1" } - { event_type: hospitality.cart.created, version: "1" } - { event_type: hospitality.cart_line.added, version: "1" } - { event_type: hospitality.reservation.created, version: "1" } - { event_type: hospitality.reservation.status_changed, version: "1" } - { event_type: hospitality.table_assignment.created, version: "1" } - { event_type: hospitality.service_request.created, version: "1" } - { event_type: hospitality.waitlist_entry.created, version: "1" } - { event_type: hospitality.pos_register.created, version: "1" } - { event_type: hospitality.pos_shift.opened, version: "1" } - { event_type: hospitality.pos_shift.closed, version: "1" } - { event_type: hospitality.pos_ticket.created, version: "1" } - { event_type: hospitality.pos_ticket.voided, version: "1" } - { event_type: hospitality.pos_ticket_line.added, version: "1" } - { event_type: hospitality.pos_payment.recorded, version: "1" } - { event_type: hospitality.pos_discount.applied, version: "1" } - { event_type: hospitality.pos_tax_line.added, version: "1" } - { event_type: hospitality.pos_floor_plan.created, version: "1" } - { event_type: hospitality.pos_station.created, version: "1" } - { event_type: hospitality.kitchen_station.created, version: "1" } - { event_type: hospitality.kitchen_ticket.created, version: "1" } - { event_type: hospitality.kitchen_ticket.status_changed, version: "1" } - { event_type: hospitality.kitchen_ticket_item.added, version: "1" } - { event_type: hospitality.connector_registration.created, version: "1" } - { event_type: hospitality.connector_dispatch.created, version: "1" } - { event_type: hospitality.analytics_report_definition.created, version: "1" } - { event_type: hospitality.analytics_snapshot.refreshed, version: "1" } - { event_type: hospitality.tenant_bundle.activated, version: "1" } - { event_type: hospitality.feature_toggle.upserted, version: "1" } permission_prefix: hospitality.* active_adrs: - ADR-001 - ADR-003 - ADR-006 - ADR-017 integration_contracts: - AccountingProvider (mock implementation for local dispatch simulation) - CRMProvider (mock implementation for local dispatch simulation) - LoyaltyProvider (mock implementation for local dispatch simulation) - CommunicationProvider (mock implementation for local dispatch simulation) - DeliveryProvider (mock implementation for local dispatch simulation) - WebsiteBuilderProvider (mock implementation for local dispatch simulation) - StorageProvider (contract only) - AIProvider (contract only) known_limitations: - No accounting journal posting engines - No real payment gateway integration (local records only) - No real KDS vendor integration; no automatic POS/QR-to-kitchen routing engine - No automatic table-to-reservation matching engine - Media is Storage file_ref only - Bundle gating of catalog/QR/table-service/POS/kitchen APIs not enforced at middleware yet - POS Lite one-open-shift-per-register rule enforced at service layer only - Connector dispatch is simulated locally via no-op mocks; no real connector SDKs, retries, or webhook acks yet - Analytics limited to simple local COUNT(*) metrics; no scheduled refresh or cross-service warehouse joins open_todos: [] last_handover_reference: docs/phase-handover/phase-12-8.md last_updated: "2026-07-26"