# Hospitality Validation Report

**Date:** 2026-07-26  
**Scope:** Torbat Food frontend (`frontend/modules/hospitality`, `app/hospitality`)

## Automated checks

| Check | Command | Result |
|-------|---------|--------|
| Route scaffold | `node scripts/validate-hospitality-routes.mjs` | ✅ 54 routes, all feature files present |
| ESLint (hospitality) | `npm run lint` | ✅ No hospitality warnings |
| TypeScript (hospitality) | `npm run typecheck` | ✅ No hospitality errors |
| API client generated | `scripts/gen-hospitality-api.mjs` | ✅ All Phase 12.0–12.8 resources |
| BFF proxy | `app/api/hospitality/[...path]/route.ts` | ✅ Present |

## Architecture compliance

| Rule | Status |
|------|--------|
| Business logic in `modules/hospitality/` | ✅ |
| Thin routes in `app/hospitality/` | ✅ |
| No backend modifications | ✅ |
| No cross-module imports | ✅ |
| Shared DS only (`@/components/ds`) | ✅ |
| Real API (no mocks) | ✅ |
| Tenant header via API client | ✅ |
| Bundle feature gating | ✅ `HospitalityBundleGate` + nav filter |

## Page quality gates

| Gate | Coverage |
|------|----------|
| Loading state | ✅ `loading.tsx` per route + query loaders |
| Error state | ✅ `error.tsx` + `HospitalityPageError` |
| Empty state | ✅ DataTable + EmptyState |
| Permission state | ✅ 403 handling in page error |
| Bundle disabled | ✅ EmptyState in bundle gate |
| Search | ✅ HospitalityTablePage |
| Pagination | ✅ List page toolbar |
| Export | ✅ CSV export helper |
| Breadcrumb | ✅ HospitalityBreadcrumbs |
| Create dialog | ✅ Where API supports create |
| Delete confirm | ✅ Where API supports remove |

## API connection matrix

All list pages call `hospitalityApi.{resource}.list(tenantId)` against live backend paths under `/api/v1/*`.

Action endpoints wired in API client:

- `reservations.updateStatus`, `waitlist.updateStatus`, `kitchenTickets.updateStatus`
- `posShifts.close`, `posTickets.void`, `qrOrderingSessions.submit`
- `tenantBundles.activate/deactivate`, `featureToggles.upsert`, `analyticsSnapshots.refresh`

## Known limitations (honest)

1. **Generic create forms** — Many resources require `venue_id` / foreign keys; create dialogs use minimal fields; extend per-resource as needed.
2. **No update API** on Phase 12.1+ catalog entities — edit actions only where backend PATCH exists (venues, branches, menus, configurations).
3. **Customers / marketplace** — Mapped to connector registrations/dispatches (no native CRM customer aggregate in hospitality DB).
4. **Platform typecheck** — Pre-existing CRM resolver errors unrelated to hospitality.
5. **Runtime E2E** — Requires hospitality service running on :8009 with valid tenant JWT.

## Recommendations

1. Add resource-specific create wizards (venue picker, menu item with category).
2. Add `validate-hospitality` to CI alongside `validate:architecture`.
3. Extend ESLint boundary rules for `modules/hospitality`.
