Deuda técnica
Lista viva tomada del estado maestro del proyecto. No bloquea el MVP salvo donde se indica, pero debe resolverse antes de escalar.
Deuda técnica conocida
| Tema | Detalle |
|---|---|
| Módulo inventario | 4 columnas fantasma en inventory_movements; el descuento es best-effort (no bloquea cobros). |
| Tickets | Superficie desmontada; tabla tickets fantasma, IVA invertido en el orders.ts /:id/ticket viejo. |
operatorId type-lie | El middleware lo tipa number; en runtime es el uuid de operators.id. cash.ts lo coacciona a string localmente. |
| 3 implementaciones de 2FA | Sólo speakeasy se usa realmente; las otras dos son código muerto. |
restaurants triplicada | Históricamente PG UUID + Supabase UUID + migraciones SERIAL. El schema canónico es el UUID de Supabase. |
hours.ts cierre de emergencia | Guarda una referencia a delivery_orders (tabla no vigente). |
delivery-board.ts sin requireRole | Sólo aplica requireRestaurant (falta el guard de rol). |
restaurants.status/name fantasma | Referenciadas en fogon-bi.ts y fogon-dashboard.ts (columnas reales: is_active/contract_status, restaurant_name). |
Pendiente de seguridad (pre-piloto)
setup-passwordsin token de invitación → riesgo de account-takeover pre-onboarding. Debe implementarse un token firmado que Fogón envía al owner antes de escala / producción real.- Pentest + verificación de RLS en Supabase antes de exponer usuarios reales.
Features diferidas
- F1 CFDI de ventas — no hay demanda real (0 restaurantes operando); requiere integración PAC.
- G-wallet / Aprovecho — app comensal completa (descubrir fondas, menús, reseñas, reservar, pickup, delivery). Visión futura, fuera del MVP.
- Delivery Nivel 2 — integración Rappi/Uber (webhooks HMAC, comisiones,
external_id). - Device-pairing Nivel 2 — multi-dispositivo.
- Tablecloth / Ads Fase 2 — inventario de manteleta (
tablecloth_*fantasma). - CRM Fogón · Floor-map IA.
- App mesero (Expo) — bloqueada por ~272 errores de TypeScript.
Bloqueante de MVP (frontend)
- Frontend POS desactualizado — llama endpoints con el modelo viejo (status en español, tabla
payments, etc.). A0-A2 reconcilió el backend; el frontend aún no consume los endpoints nuevos. Es lo que JuanMa ataca usando el Swagger UI y el backlog como referencia (status español→inglés,payments→payment_details, KDS, mesas).
Fuente: estado maestro
MiMente/01-Proyectos/iFondita/estado-maestro-ifondita.md.