# Informe de cierre — Fase 7

## Resultado

La Fase 7 integra Portal de Clientes, Control de Documentos, Facturación, Cobranza y Requisiciones desde `seatsa-lab/main`, commit congelado `087bbde77a1f8e3144c9c0e963d2fddbcb9d1420`. No se utilizó ninguna otra rama.

## Componentes incorporados

- Se incorporaron los controladores administrativos nuevos del Portal para chat, solicitudes de servicios, validación de usuarios, documentos firmados, banners y redirección administrativa.
- Se sincronizaron los modelos de expedientes personales y empresariales, solicitudes, partidas, banners, documentos legales, comprobantes y aplicaciones de Cobranza.
- Se integraron los flujos vigentes de Control de Documentos: firmas, visor, dudas, difusión, bitácora, activación de versiones y sincronización de notificaciones globales.
- Cobranza conserva la relación de comprobantes cargados desde Portal, sus aplicaciones múltiples, URLs firmadas y notificaciones por liberación de informes.
- Facturación SW incorpora la reserva de operación, liberación ante error y confirmación de timbrado para evitar duplicados.
- Requisiciones conserva todas las funciones de `main` y la adaptación Laravel 13 ya incorporada para destinatarios automáticos.
- Se incorporaron las vistas actuales de los cinco bloques y se añadieron anclas de notificación a las ocho pantallas administrativas nuevas que usan el layout global.
- Los 22 controladores comparados contienen todos los métodos presentes en el `main` congelado.

## Compatibilidad y correcciones

- Se registraron las rutas nuevas del Portal y de Control de Documentos.
- Se limitaron cuatro recursos heredados a las acciones que realmente existen: Cobranza, Portal de Clientes, Control de Registros y Requisiciones. No se retiró ninguna operación implementada.
- El estatus SAT `207` ahora se interpreta como `Sustitucion no aceptada`, sin marcar el CFDI como cancelado.
- Las 17 pruebas heredadas de este bloque se adaptaron a las firmas y aserciones de PHPUnit 12 sin cambiar lo que validan.

## Base de datos y SQL

- Las 14 migrations recientes del Portal/Cobranza se conservaron en `database/migrations_legacy`; junto con la referencia previa de cotizaciones suman 15 archivos recientes relacionados. `database/migrations` permanece vacío.
- Tres scripts SQL de `main` se copiaron a `docs/migration/phase-07/sql-reference` como documentación controlada.
- `database/seeds/ModulosSeeder.php` se conserva como referencia heredada y no fue ejecutado.
- La base MySQL local se inspeccionó en modo lectura. Faltan 15 tablas esperadas por el alcance administrativo y siete columnas que sí cuentan con migration en `main`; el detalle y la diferencia entre esquema formal y diagnóstico están en `LOCAL-DATABASE-GAPS.md`.
- No se modificó MySQL local.

## Verificación

- Pruebas específicas de integración y regresión: 98 casos y 808 aserciones aprobadas.
- Suite completa: 310 pruebas, 310 aprobadas y 1,835 aserciones.
- Sintaxis: 457 archivos PHP revisados, sin errores.
- Vistas Blade: compilación completa aprobada.
- Rutas: Laravel carga 1,132 rutas; las rutas de los 22 controladores incluidos en el contrato de Fase 7 apuntan a clases y métodos existentes.
- Fuente: `seatsa-lab/main` permanece limpia y sin modificaciones.

## Límite de aceptación

La implementación de código de la Fase 7 queda cerrada. La prueba funcional integral con la base local queda condicionada por las estructuras faltantes documentadas. No se aplicaron porque el acuerdo vigente exige mantener los SQL como referencia y evitar cambios de esquema sin autorización expresa.

Existe además una ruta activa heredada, `international_customer_report_store_report`, consumida por el formulario de carga del Portal internacional pero sin método en ningún punto del historial de `main`. Se conserva señalada para la Fase 8: no se redirigió a otro generador porque hacerlo por inferencia podría alterar el flujo de informes.
