# Informe de cierre — Fase 3

## Resultado

La auditoría de compatibilidad queda terminada y es reproducible. El dump completo no se ejecutó. Después de la comparación, se creó de forma controlada una sola tabla local expresamente autorizada: `facturacion_timbrado_operaciones`.

La base local contiene ahora las 206 tablas del dump productivo. Todavía faltan varias estructuras nuevas de Portal/Cobranza referenciadas por `main` que tampoco aparecen en el dump recibido.

## Fuentes comparadas

| Fuente | Resultado |
|---|---|
| Dump productivo | MySQL 8.0.46, 206 tablas, sin datos |
| Base local | MySQL 8.0.33, 224 tablas base, sin vistas |
| Código | `seatsa-lab/main` en el commit congelado por la Fase 1 |
| SHA-256 del dump | `3D6F22485865E945268DE8A1694542473343E8FB2012508DF031E1AB51D2EC52` |

## Dump contra base local

| Hallazgo | Cantidad |
|---|---:|
| Tablas comunes | 206 |
| Tablas del dump ausentes localmente | 0 |
| Tablas adicionales locales | 18 |
| Columnas adicionales locales en tablas comunes | 8 |
| Columnas con definición diferente | 2 |
| Índices adicionales locales | 9 |
| Relaciones foráneas adicionales locales | 2 |
| Columnas, índices o relaciones del dump faltantes en tablas comunes | 0 |

Esto significa que las 206 tablas del dump están presentes localmente y no han perdido columnas, índices ni relaciones. Las diferencias restantes son principalmente aditivas.

## Alineación local de Facturación

`facturacion_timbrado_operaciones` estaba presente en el dump productivo y faltaba localmente. Con autorización expresa se creó únicamente en `APP_ENV=local`, host `127.0.0.1`, base `seatsacomsayuc_lab_schema`.

La tabla reproduce las nueve columnas, clave primaria, restricción única de `clave_operacion` y dos índices auxiliares del dump. Una tabla temporal creada con esa estructura comprobó:

- reserva de una operación con estado `PROCESANDO`;
- transición a `TIMBRADO` con serie, folio y UUID;
- eliminación de una operación todavía en procesamiento;
- rechazo de claves de operación duplicadas.

La tabla persistente quedó con cero registros de prueba. El SQL controlado está fuera de `database/migrations`, por lo que no se ejecutará accidentalmente mediante Artisan.

## Esquema requerido por `main` que no aparece en el dump

El análisis estático detectó 15 nombres de tabla referenciados por `main` que no existen ni en el dump ni localmente. Catorce tienen evidencia funcional y afectan principalmente:

- documentos personales y empresariales del Portal;
- solicitudes, partidas y documentos del Portal;
- chat y banners del Portal;
- aplicaciones de comprobantes de Cobranza;
- archivos de cotización enviados al Portal.

Cuatro de estas estructuras tienen migrations históricas dentro de `main`: `portal_usuario_documentos`, `portal_usuario_documento_requisitos`, `cobranza_pago_comprobante_aplicaciones` y `cotizacion_archivos_portal`. También existe una migration para la estructura relacionada `portal_usuario_documento_recordatorios`. Las migrations permanecen como referencia no ejecutable en `database/migrations_legacy`; no se aplicaron.

Para las demás estructuras hay modelos, controladores y un diagnóstico SQL, pero no una definición completa y autoritativa en el dump recibido. No se inventará su esquema. Su recuperación se trabajará con el código exacto de `main` en las fases de Portal y componentes compartidos.

La tabla `permisos` sólo fue detectada por un modelo sin consumidores directos encontrados. Se conserva como deuda heredada no confirmada y no justifica crear una tabla por suposición.

Las diez tablas sin DDL completo en `main` ni en el dump se dejan deliberadamente sin crear. La decisión y la lista exacta están en `MISSING-MAIN-SCHEMA-NOTE.md`; esto impide que su ausencia se pierda durante la entrega o que se invente una estructura incompatible.

## SQL de `main` conservado

Los cuatro scripts rastreados bajo `database/sql` en la fuente fueron copiados a `database/sql_reference/main` como documentación no ejecutable. Los cuatro identificadores de objeto Git coinciden con el commit fuente, por lo que su contenido está preservado exactamente.

Ninguno se ejecutó. El manifiesto `generated/sql-reference-manifest.csv` registra origen, destino, hash Git y política de ejecución.

## Diferencias locales que sí necesita `main`

La base local contiene `tipos_muestra` y los campos `inspeccion_muestras.id_tipo_muestra` e `inspeccion_muestras.tiene_muestra`. El flujo de inspección de `main` los utiliza, aunque no aparecen en el dump productivo recibido. Para nuestras pruebas locales esto es correcto y deben conservarse.

La ausencia de estas estructuras en el dump se deja como requisito de entrega para el responsable posterior de producción; no forma parte de nuestras modificaciones productivas.

## Indicadores Gráficos

La base local tiene 13 tablas `indicadores_*` que no existen en el dump. El controlador de Indicadores Gráficos presente en `main` no las usa: consulta las tablas históricas de muestras, programación, almacén, cobranza, conceptos y líneas de trabajo.

Por tanto:

- las 13 tablas locales no se borrarán ni modificarán;
- no se usarán como fuente para incorporar trabajo de otra rama;
- el módulo de Indicadores que se migrará sigue siendo exclusivamente el de `main`.

Las otras cuatro tablas locales no presentes en el dump —`cliente_factura_ejecutivo_historial`, `linea_trabajo_unidad_negocio`, `nomenclaturas_servicio` y `nomenclaturas_servicio_variantes`— tampoco tienen referencias directas detectadas en el código actual de `main`. Permanecen intactas y no amplían el alcance.

## Diferencias compatibles

`normas_incisos.numero` y `servicio_cliente_conceptos.descuento` tienen `DEFAULT 'NULL'` —texto— en el dump y `DEFAULT NULL` —valor SQL— localmente. Tipo, nulabilidad y collation coinciden. No se cambiarán; se validarán los consumidores en Línea de Pruebas e Indicadores/Facturación.

Los nueve índices y dos relaciones adicionales locales son aditivos. No se encontró ningún índice o relación del dump que falte en una tabla compartida.

## Decisión de esta fase

1. La única modificación local fue crear `facturacion_timbrado_operaciones` con autorización expresa.
2. No se ejecutó ninguna migration histórica ni el dump completo.
3. Las tablas adicionales de Indicadores se ignoran para el alcance de código, pero se conservan físicamente.
4. Las carencias de Portal/Cobranza se tratarán como requisitos de sus módulos, no como permiso para inventar tablas.
5. Facturación ya dispone localmente de `facturacion_timbrado_operaciones`; sus flujos completos se validarán en la Fase 7 sin usar servicios fiscales reales salvo autorización específica.

## Siguiente fase

La Fase 4 puede continuar con autenticación, permisos, servicios compartidos, correo y scheduler. No requiere ejecutar migrations. Los bloqueos de esquema quedan vinculados a los módulos afectados para impedir una aceptación falsa en fases posteriores.
