---
url: /reference/DOMAIN_MAP.md
---
# Mapa de schemas: baseline y objetivo

> Documento migrado desde `franmc01/ninaku-core-api`. Las decisiones de negocio, dominio y base de datos siguen vigentes; las referencias a ASP.NET Core / .NET son históricas: el backend actual es NestJS y su arquitectura se define en [ARCHITECTURE.md](ARCHITECTURE.md) y [NESTJS\_STACK\_GUIDE.md](NESTJS_STACK_GUIDE.md).

Este documento actualiza la lectura del mapa histórico (histórico, no migrado) para el repositorio actual; la referencia a ASP.NET Core 10 es histórica y el backend actual es NestJS. La propiedad de hechos se conserva. La fundación multi-business ya está implementada; la clasificación de verticales y las separaciones físicas siguientes siguen siendo objetivo. Ningún schema fue renombrado ni dividido en esta entrega.

## Capas y dirección de dependencia

Las flechas indican **consumidor → proveedor**. La topología siguiente es objetivo conceptual, no el grafo FK actual.

```mermaid
flowchart TD
    R[Restaurante] --> B[Módulos compartidos]
    T[Retail] --> B
    H[Hotelería futura] --> B
    B --> C[Core de plataforma]
    B --> X[Servicios transversales]
    X --> C
    I[Integraciones opcionales] --> R
    I --> B
    I --> X
```

El core cubre tenant, identidad y capacidades. Los módulos compartidos son capacidades de negocio que se componen por caso de uso. Los servicios transversales no deben incorporar todas las fuentes de negocio como dependencias obligatorias. Una integración tiene relaciones tipadas a sus participantes; no permite mutaciones arbitrarias entre módulos.

## Matriz completa de los 41 SQL

Las dependencias exactas detectadas y las líneas están en [INVENTORY.md](../../database/review/INVENTORY.md) e [inventory.json](../../database/review/inventory.json). Cada fila explica por qué existe el archivo y qué se hará con él.

| SQL | Propiedad y caso de uso | Clasificación objetivo | Decisión de refinamiento |
|---|---|---|---|
| `0000_extensions` | Capacidades PostgreSQL para exclusiones y rangos | Instalación | Conservar como bootstrap técnico; comprobar extensión/versiones soportadas |
| `0010_reference` | Monedas, países, idiomas y unidades/conversiones | Base compartida | Conservar; concentrar propiedad de uso de unidades hoy extendida en 0170 sin romper historial |
| `0020_organization` | Tenant, Business Unit, entidad legal, marca, site, outlet y canales | Core | Business Unit y asignaciones efectivas Outlet→BU/Legal Entity implementadas; no confundir BU con Vertical |
| `0030_party` | Persona/empresa y contactos tenant-owned | Compartido básico | Conservar; cliente/proveedor/empleado son roles externos, sin identidad global B2B automática |
| `0040_identity` | Principales, membresías, permisos y scopes | Core | Scopes Organization/BU/Legal Entity/Brand/Site/Outlet; resolvers BU y Legal Entity probados contra Outlet |
| `0050_security_rls` | Helpers identity y políticas de organization/party/identity | Instalación de seguridad | No es schema independiente; resolver localización por propietario y fase de activación |
| `0060_platform` | Verticales, capacidades, mercados, planes, versiones y suscripciones | Core de producto | Vertical global y activación por BU implementadas; reserva de provisión idempotente pertenece al control-plane |
| `0070_assets` | Identidad de archivos y copias de almacenamiento | Transversal | Conservar; no obligar a conocer significado de todos sus consumidores |
| `0080_catalog` | Producto/variante, modificadores, bundles, menús y datos alimentarios | Compartido, con extensiones | Separar contenido alimentario opcional; menús/publicación requieren evaluación específica, no traslado automático |
| `0090_pricing` | Listas, vigencias, precios y descuentos | Compartido comercial | Conservar; revalidar reglas deterministas, snapshots y limitaciones offline |
| `0100_commerce` | Storefront, publicaciones, carrito e intención de checkout | Compartido opcional | Aislar su vínculo con Sales para que POS no requiera carrito/storefront ficticios |
| `0110_sales` | Venta, líneas, cancelación/sucesión, cálculos y devoluciones | Compartido comercial | Congela BU y Legal Entity efectivas; replay offline exige evidencia Sync tardía; extraer dependencia opcional de commerce después |
| `0120_settlement` | Distribución de una venta en cuentas y asignaciones | Compartido comercial | Conservar cuenta simple por defecto; split avanzado progresivo; no usar como folio hotelero universal |
| `0130_payments` | Intención, intento, resultado, cobro, reverso y reembolso | Compartido financiero | Payment Intent congela Legal Entity; hijos preservan el Intent para no perder ownership; efectivo y tarjeta mantienen contratos distintos |
| `0140_operations` | Mesas/reservas/sesiones y horarios/bloqueos de outlet | Mixto | Proponer restaurant\_service para atención; availability para horarios/cierres e indisponibilidad comercial explícita |
| `0150_kitchen` | Estaciones, cursos, batches y trabajo de preparación | Vertical alimentaria/restaurante | Conservar schema kitchen; puede habilitarse en un hotel con restaurante; no hacerlo infraestructura universal |
| `0160_fulfillment` | Entrega, recogida, despacho y ejecución del servicio | Compartido con integración | Extraer enlace a operations.service\_sessions; mantener entrega independiente de salón |
| `0170_inventory` | Custodia, lotes, reservas, movimientos, conteos y valoración | Compartido operativo | Conservar ledger; concentrar reference.quantity\_unit\_uses en su propietario; verificar saldos, admisión y costo |
| `0180_production` | Recetas/formulaciones, consumo y transformación real | Compartido productivo opcional | Conservar transformación; extraer vínculo kitchen.work\_items para producir lotes sin KDS |
| `0190_procurement` | Proveedor, oferta, compra, recepción y devolución | Compartido operativo | Conservar; recepción parcial y unidades proveedor; B2B futura no comparte automáticamente sus tablas |
| `0200_crm` | Relación comercial, preferencias y consentimientos | Compartido opcional | Conservar; revisar extensiones alimentarias y minimizar copias de datos personales |
| `0210_loyalty` | Puntos, programas, reservas y recompensas | Compartido opcional | Conservar ledger; beneficio offline exige límites explícitos, no saldo global supuesto |
| `0220_receivables` | Deuda cliente, aplicaciones, límites y estados de cuenta | Compartido financiero | Conservar; crédito offline requiere capacidad asignada o aprobación online |
| `0230_payables` | Obligación proveedor y propuestas de pago | Compartido financiero | Conservar; distinguir recepción, documento proveedor y obligación |
| `0240_cash` | Custodia de efectivo, caja, conteos y diferencias | Compartido operativo | Posting exige mismo Outlet y Legal Entity entre Payment, Shift y Custody; conservar hechos offline y cierre |
| `0250_treasury` | Banco/wallet, liquidación de procesadores, FX y conciliación | Compartido financiero | Posting exige misma Legal Entity entre Payment y Financial Account; no confundir Treasury con Payments |
| `0260_tax` | Clasificación, reglas y resultados impositivos | Compartido regulatorio | Conservar; recuperar tablas de 0400 y conciliar llamadas a Fiscal; puentes de sujetos opcionales |
| `0270_fiscal` | Presencia legal, numeración y contexto regulatorio | Compartido regulatorio | Recuperar calificaciones/presentación de 0400; capacidad offline no equivale a aceptación de autoridad |
| `0280_invoicing` | Documento emitido, snapshots y correcciones | Compartido documental | Conservar; resolver origen explícito, emisión, pago y representación como hechos separados |
| `0290_accounting` | Libros, solicitudes de contabilización y asientos | Compartido financiero avanzado | Conservar motor; separar adaptadores de fuentes, especialmente nómina definida en 0300 |
| `0300_workforce` | Empleo, asistencia y nómina | Compartido avanzado | Recuperar calendarios de 0400 y extraer cambios del motor accounting; no exigir nómina para imprimir |
| `0310_documents` | Plantillas y representaciones inmutables | Transversal con fuentes opcionales | Extraer puentes de fuentes hoy obligatorias, incluidas workforce y accounting |
| `0320_printing` | Impresoras, rutas, comandos, trabajos e intentos | Transversal con integración | Separar referencias kitchen; persistencia local y estado de resultado incierto |
| `0330_notifications` | Intención y entrega de avisos | Transversal con fuentes opcionales | Extraer vínculo de reservas de restaurante y otras fuentes que fuercen instalación |
| `0340_communications` | Conversación, participantes e historial | Compartido transversal | Extraer vínculo de reservas; providers y mapeos siguen en integrations |
| `0350_integrations` | Conexiones, proveedores, traducción y entregas externas | Transversal con adaptadores | Separar plataforma de conexión de puentes por proveedor/dominio, sin entidad polimórfica canónica |
| `0360_events` | Contratos, outbox, entregas y checkpoints | Transversal | Buen candidato a base temprana; validar dependencias runtime e instalación por transacción |
| `0370_sync` | Dispositivos, comandos, resultados, conflictos y cambios | Transversal con extensiones | Separar enlaces fiscal/printing opcionales; preservar sobre JSON versionado y snapshots coherentes |
| `0380_audit` | Evidencia administrativa y de seguridad | Transversal con extensiones | Evitar que sync completo sea requisito del mínimo de auditoría; no duplicar ledgers |
| `0390_analytics` | Proyecciones y reportes reconstruibles | Motor transversal + proyecciones por módulo | Extraer proyecciones de cocina; no imponer toda la suite para reportar una tienda |
| `0400_cross_domain_contracts` | Completa tablas y reglas de ocho schemas | Instalación heredada | Distribuir ocho tablas y reglas por propietario; reservar solo orden/finalización técnica realmente necesaria |

## Nuevas separaciones propuestas, no nuevas tablas todavía

| Límite | Alcance | Lo que no posee |
|---|---|---|
| `restaurant_service` | Mesas, áreas de atención, reservas, sesiones, ocupación, depósitos y asignación de personal | Habitaciones/estadías, stock o cobros |
| `availability` | Horarios de outlet, excepciones, cierres y bloqueo comercial explícito de variante | Stock, reservas hoteleras o un booleano universal de disponibilidad |
| `catalog_food` | Declaraciones alimentarias ligadas a productos: alérgenos, nutrición y dietas, con evidencia | Producto comercial, receta o verdad del consumo físico |
| Integraciones tipadas opcionales | Ej. restaurant\_printing une cocina con impresión; restaurant\_production une preparación con ejecución | Estado propietario de los módulos conectados |
| Colaboración B2B futura | Acuerdos de intercambio, alcances, correlación y mapeos consentidos | Un pedido compartido editable por ambos tenants o acceso global a Party |

Los nombres de las nuevas integraciones se fijan al implementar un flujo, no se generan decenas de schemas vacíos. `catalog_food` también puede servir a retail alimentario: específico de alimentos no significa exclusivo de restaurantes. Modificadores y bundles pueden ser comerciales reutilizables. El vínculo entre menú y publicación debe evaluarse a partir de consumidores reales.

## Primeras unidades de instalación a demostrar

| Perfil objetivo | Resultado visible | Bloqueos actuales |
|---|---|---|
| Core | Alta de tenant y contexto autorizado | Helpers/RLS repartidos; identity consume platform en funciones; bootstrap no implementado aquí |
| Core + inventario | Entrada, reserva, traslado, conteo y salida directa | Historial de unidades en 0170; falta probar seguridad y todo el flujo con mínimos reales |
| Retail mínimo | Venta directa y efectivo, sin cocina/salón | Sales requiere commerce; Payments requiere settlement; impresión arrastra documents y dominios avanzados |
| Restaurante mínimo | Venta, atención opcional, cocina opcional e impresión | Separar motores compartidos de puentes y probar composición |

**Ningún perfil se entrega instalable en este PR.** El baseline completo se conserva. Extraer un módulo exige revisar tanto FK como funciones, triggers, políticas, bootstrap y consumidores. La ausencia de ciclos en las FK léxicas no demuestra ausencia de dependencias runtime.
