Control operativo de cocina multi-servicio. Reescritura DDD del dominio validado en v2.
Estado 2026-05-01: procurement PR/PO/GR/OCR en v3, inventory FIFO operativo con multi-almacén Sprint-11, production orders/sub-recetas, reporting Sprint-09, compliance APPCC Sprint-10 y notifications realtime + dedup + push web Sprint-13a preparadas.
| Módulo | Estado | Sprint | Notas |
|---|---|---|---|
| identity | producción | sprint-01 | auth, roles, permissions, active hotel, sanitización errores |
| commercial | producción | sprint-02 | events, clients, BEO PDF, paginación cursor |
| tenant-admin | producción | sprint-02b | onboarding, hoteles, team, invites + Resend |
| recipes | producción | sprint-03/08 | fichas, ingredientes, pasos, sub-recetas stockables, escandallo live |
| menus | producción | sprint-03b | composición comercial, sections, recipes nested |
| import | producción | sprint-03c | bulk import Excel: recetas + ingredientes (mapping productos NULL pendiente) |
| catalog | producción | sprint-04 | productos, unidades, conversiones, suppliers, offers, mapping ingredients |
| procurement | producción | sprint-05 | PR/PO/GR/OCR ✓; lotes vía hook inventory |
| inventory | producción | sprint-06 | lotes FIFO, movimientos, consumo, merma y ajustes |
| warehouse | producción | sprint-11 | almacenes por hotel, default warehouse, stock por almacén y transferencias |
| production | producción | sprint-07/08 | órdenes monoreceta, escalado, viabilidad, cascada sub-recetas y consumo FIFO atómico |
| reporting | producción | sprint-09 | dashboards read-only, food cost, mermas, top productos, precio y stock health |
| compliance | producción | sprint-10 | APPCC: recepción, temperaturas, limpieza, trazabilidad y export CSV |
| automation | pendiente | sprint-10 | workflows, alertas |
| notifications | producción | sprint-13a | fan-out desde v3_domain_events, badge realtime, dedup temperatura 1h, push web opt-in, preferencias V2 |
| integrations | pendiente | sprint-13 | TPV, ERP, delivery |
| hr | pendiente | sprint-13 | turnos, fichaje |
| agents | pendiente | sprint-14 | asistentes IA |
Hardening cerrado en sprint-hardening: errores auth normalizados, rate limit Upstash,
paginación cursor en queries de lista, headers HTTP (CSP, HSTS), origin allowlist
para invitaciones, server contracts en commercial/recipes/menus, ESLint boundaries,
tests cross-tenant. Ver .ai/sprints/sprint-hardening.md.
Hardening-2 (2026-04-28): search_path + revoke from anon en 70 funciones v3,
permisos compliance alineados con permissions-matrix.md, RLS initplan perf en
v3_profiles/v3_tenants. Migraciones 00083/00084/00085 (PR #90).
# 1. Prerrequisitos
# - Node 20 (ver .nvmrc). Con nvm: `nvm use`
# - Cuenta Supabase con acceso al proyecto dbtrgnyfmzqsrcoadcrs (ver ADR-0003)
# 2. Instalar dependencias
npm install
# 3. Configurar entorno
cp .env.example .env.local
# Rellenar NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY / SUPABASE_SERVICE_ROLE_KEY
# 4. Verificar
npm run typecheck
npm run lint
npm run test
npm run build
# 5. Dev server
npm run dev
# → http://localhost:3000 debe mostrar "ChefOS v3 scaffolding OK"| Script | Descripción |
|---|---|
npm run dev |
Next dev con Turbopack en :3000 |
npm run build |
Build production |
npm run start |
Serve build production |
npm run lint |
ESLint (eslint-config-next) |
npm run lint:fix |
ESLint con --fix |
npm run typecheck |
tsc --noEmit |
npm run test |
Vitest (unit + integration) |
npm run test:watch |
Vitest modo watch |
npm run test:coverage |
Vitest con cobertura (umbral 90% en features) |
npm run test:e2e |
Playwright E2E (dev server vía webServer) |
npm run format |
Prettier write |
npm run format:check |
Prettier check |
Edge Function local:
supabase functions serve v3-procurement-ocr-extract --env-file .env.localSecrets necesarios en Supabase Functions para extracción real:
ANTHROPIC_API_KEYUPSTASH_REDIS_REST_URLUPSTASH_REDIS_REST_TOKEN
Si faltan las variables Upstash, la función registra warning y omite rate limit; si falta ANTHROPIC_API_KEY, el job queda failed.
Flujo operativo sprint-06:
- Cerrar una recepción de mercancía crea lotes FIFO automáticamente.
/inventorymuestra snapshot por producto./inventory/products/[id]muestra lotes activos y movimientos.- Acciones manuales: consumo, merma y ajuste.
- Sprint-11 añade filtro por almacén y
/inventory/transferpara transferir cantidad entre almacenes.
Smoke live:
INVENTORY_E2E_LIVE=1 npm run test:e2e -- e2e/tests/inventory-fifo-flow.spec.ts --project=chromiumFlujo operativo sprint-11:
/warehouseslista almacenes del hotel, default y archivados./warehouses/newcrea almacenes operativos./warehouses/[id]muestra stock por almacén y acciones de default/archive./inventorypermite filtrar snapshot por almacén./inventory/transferhace transfer parcial o total de lotes, con movimientostransfer_outytransfer_in.- Recepción de mercancía, producción y equipos APPCC aceptan almacén opcional.
Flujo operativo sprint-07/08:
/productionlista órdenes con filtros por estado y fecha./production/newcrea una orden desde receta activa, raciones objetivo y preview de ingredientes escalados./production/[id]muestra costes estimado/real, líneas snapshot, cascada de sub-recetas y movements asociados.- Iniciar producción comprueba stock y consume inventario FIFO de forma atómica via
v3_start_production. - Si una línea usa una sub-receta stockable y falta stock,
v3_start_productionproduce la preparación on-demand antes de consumir la orden padre. - Las preparaciones generan lote
is_preparation=truey movementkind='produce'. - Si falta stock,
v3_start_productionfalla conP0002y detalle de déficits antes de tocar inventario. - Cancelar desde
in_progressno restaura stock automáticamente; requiere ajuste manual auditable.
Smoke live:
PRODUCTION_E2E_LIVE=1 npm run test:e2e -- e2e/tests/production-fifo-flow.spec.ts --project=chromium
PRODUCTION_E2E_LIVE=1 npm run test:e2e -- e2e/tests/production-subrecipe-cascade.spec.ts --project=chromiumFlujo consultivo sprint-09:
/reportsconcentra los cinco informes read-only./reports/food-costmuestra coste real por receta y variación frente a estimado./reports/wastemuestra mermas por producto, coste y ratio contra consumo./reports/top-productsrankea productos por consumo, merma o volatilidad de precio./reports/price-changeslista cambios de precio de compra desdev3_price_change_log./reports/stock-healthresume valor de stock, lotes próximos a caducar y stock muerto.- Los CSV de informes tabulares se descargan desde Route Handlers nativos, con BOM UTF-8 y límite de 10.000 filas.
- La UI cachea consultas 5 minutos y permite refresco manual.
Smoke live:
PRODUCTION_E2E_LIVE=1 npm run test:e2e -- e2e/tests/reports-flow.spec.ts --project=chromiumFlujo operativo sprint-10:
/complianceconcentra overview de recepción, temperaturas y limpieza./compliance/qualityregistra controles de recepción sobrev3_goods_receipts./compliance/temperatureregistra temperaturas por equipo y muestra sparkline 7d./compliance/cleaningcompleta checklist diario de áreas./compliance/traceabilitytraza lotes FIFO desdev3_trace_lot./compliance/equipmentgestiona equipos APPCC activos/inactivos./compliance/areasgestiona áreas de limpieza y frecuencia./api/compliance/export/{quality|temperature|cleaning|full-monthly}exporta CSV APPCC con guardhead_chef/admin/direction.
PDF queda fuera de esta fase hasta aprobar dependencia y validar bundle minified <= 80 KB; no se añadió pdf-lib.
Smoke live:
COMPLIANCE_E2E_LIVE=1 npm run test:e2e -- e2e/tests/compliance-flow.spec.ts --project=chromiumEstructura oficial (ver .ai/specs/architecture.md):
src/
├── app/ # routing, layouts, composición
├── components/
│ ├── ui/ # UI reutilizable (Radix + CVA)
│ └── shell/ # sidebar, topbar, layouts de app
├── features/ # módulos de negocio (identity, commercial, recipes, ...)
├── lib/
│ ├── supabase/ # clients browser + server + middleware
│ ├── errors/ # catálogo canónico
│ ├── rbac/ # helpers permisos cliente
│ └── utils.ts # cn() + utilidades puras
├── types/ # tipos transversales
└── proxy.ts # Next middleware (renombrado a proxy) → supabase/middleware
supabase/
├── migrations/ # DDL + RLS + RPCs
├── functions/ # Edge Functions
├── policies/ # docs RLS (fuente legible)
├── rpcs/ # docs RPCs
└── seeds/ # seeds deterministas
tests/ # colocados junto al source (src/**/*.test.{ts,tsx})
e2e/ # Playwright
.ai/ # sistema operativo interno del proyecto
- Next.js 16 (App Router + Turbopack) · React 19 · TypeScript 5 strict
- Supabase (Postgres 17, Auth, RLS, RPCs, Storage, Edge Functions)
- Tailwind CSS 4 · Radix UI (set base ADR-0005)
- TanStack Query 5 · React Hook Form · Zod 4
- Vitest (unit/integration) · Playwright (E2E)
No se reabre stack salvo ADR nueva.
.ai/README.md— contrato base del proyecto..ai/WORKFLOW.md— secuencia oficial de trabajo..ai/specs/*— 19 specs normativas..ai/sprints/*— sprints ejecutables..ai/checklists/*— checklists PR, módulo, migración, release.CLAUDE.md— instrucciones para agentes asistidos.CHANGELOG.md— historial de versiones.
- Mismo proyecto Supabase durante construcción (ADR-0003:
dbtrgnyfmzqsrcoadcrs). - v2 sigue vendible mientras v3 se construye.
- Fork cuando v3 diverja del schema.
Proprietary — © 2026 Israel.