# Informe de cierre — Fase 8

## Resultado

La migración queda **aceptada en el alcance local que puede ejecutarse con seguridad** y **condicionada** únicamente en los recorridos que dependen de estructuras ausentes en la base local o de integraciones externas reales. No se ejecutaron migrations, seeders o SQL; no se modificó producción.

La fuente funcional sigue siendo exclusivamente `seatsa-lab/main`, commit congelado `087bbde77a1f8e3144c9c0e963d2fddbcb9d1420`. La consulta excepcional autorizada a `next` se limitó al método `international_customer_report_store_report`.

## Adenda de revalidación — 3 de septiembre de 2026

La Fase 6 se reabrió al detectar una incompatibilidad de Laravel 13 en la descarga de Resultados de Línea de Pruebas. La revisión transversal adaptó 49 llamadas `orderByRaw`, 12 llamadas de encabezado/pie de PHPWord y 6 rutas de recursos gráficos, sin cambiar el resultado funcional de `main`. También se retiraron dos dependencias accidentales de traducción en los generadores internacionales.

La evidencia vigente sustituye las cifras de la ejecución original de esta Fase 8:

- **318 pruebas aprobadas de 318, con 2,637 aserciones**;
- **1,109 rutas** cargadas y serializables;
- plantillas Blade compiladas correctamente;
- generación real de Word V2 (7 páginas), Word V1 (41 páginas) y ambos generadores internacionales;
- consultas reales de capítulos e incisos verificadas;
- cachés de vistas y rutas retiradas después de validar.

El detalle técnico, los identificadores de prueba y el alcance funcional están registrados en `docs/migration/phase-06/PHASE-06-REPORT.md`.

## Decisión sobre el informe internacional

`next` tampoco contiene el método `international_customer_report_store_report`; conserva la misma ruta rota y el mismo formulario heredado. El formulario está en una vista sin inclusiones ni consumidores, mientras que el flujo activo utiliza la ruta válida `international_customer_report_store` y su método existente en `international_customer_portal_controller`.

Por ello:

- se conservó sin cambios la ruta y el método funcionales;
- se retiró únicamente la ruta que apuntaba al método inexistente;
- se dejó la vista huérfana como referencia, sin redirigirla ni inventar comportamiento;
- no se trajo ningún otro cambio de `next`.

## Rutas y aplicación

Se retiraron o limitaron rutas automáticas y manuales que apuntaban a métodos inexistentes y que no tenían consumidores. Las operaciones específicas implementadas permanecen registradas.

- Rutas cargadas: **1,109**.
- Acciones de controlador inexistentes: **0**.
- Nombres de ruta duplicados: **0**. Se eliminaron los duplicados sin consumidor y la ruta ZIP incompleta que no proporcionaba el identificador obligatorio.
- Pantalla de acceso: carga real correcta, recursos completos y consola del navegador sin errores.
- Un acceso directo a una pantalla protegida redirige correctamente al login.

## Evidencia automatizada de la ejecución original

- Suite completa: **314 pruebas, 314 aprobadas, 1,844 aserciones**.
- Contrato nuevo de Fase 8: verifica todas las rutas, el tratamiento del informe internacional y que las migrations sigan inertes.
- Sintaxis: **462 archivos PHP**, **0 errores**.
- Vistas Blade: compilación completa correcta.
- Frontend: build Vite correcto, 68 módulos transformados.
- Caché de rutas: serialización validada y caché retirada al finalizar la prueba.
- Composer: archivo válido con advertencias conocidas por versiones fijadas; todos los requisitos de PHP 8.4.24 e Imagick 3.8.1 satisfechos.
- Scheduler: tres tareas registradas con sus frecuencias previstas.

Las advertencias del build corresponden al uso heredado de `@import`, `lighten` y `darken` de Sass/Bootstrap, más referencias de fuentes que Vite conserva para resolución en ejecución. No impidieron generar los assets.

## Aceptación documental

### Word

Los tres informes Word conservan exactamente los mismos blobs de Git que `main`. En Fase 6 se abrieron y renderizaron sus 153 páginas: encabezados, tablas, imágenes, marca de agua, QR, pies, observaciones y firmas quedaron íntegros.

### PDF y QR

Se conserva el PDF real generado e inspeccionado con datos locales en Fase 6 y la prueba de generación QR PNG de 512 px mediante Imagick. La plantilla de Validación sólo difiere de `main` en espacio en blanco y no en contenido o estilos.

Se acepta la particularidad visual heredada del pie derecho recortado y del espacio vacío del segundo folio porque el criterio aprobado es preservar el resultado de `main`, no rediseñar informes en esta migración.

### Excel

Las dos copias de la plantilla `bitacora_egresos_cuentas_por_pagar.xlsx` son idénticas entre sí y a `main`. La plantilla se importó y renderizó mediante la herramienta de hojas de cálculo: contiene la hoja `CUENTAS POR PAGAR`, una tabla de 28 columnas, el encabezado y la imagen esperados, y no registra fórmulas dañadas. El render queda en `evidence/excel-template.png`.

### XML y anexos

La regresión cubre lectura segura de CFDI 4.0, UUID, anexos XML/PDF y rechazo de contenido inválido sin ejecutar timbrado o cancelación real.

## Base de datos y migrations

- Migrations de referencia: **426** en `database/migrations_legacy`.
- Migrations ejecutables: **0**; `database/migrations` no existe intencionalmente.
- SQL: conservado como documentación controlada.
- MySQL local: no fue modificado durante esta fase.

La ausencia ya inventariada de 15 tablas y siete columnas impide afirmar una prueba manual integral con datos reales de Portal y Cobranza. No se reconstruyeron las diez tablas sin DDL conocido. Ésta es una limitación del ambiente de prueba, no una omisión de código de `main`.

## Alcance final

La aplicación Laravel 13 queda cerrada técnicamente para el alcance acordado: código completo de `main`, compatibilidad PHP 8.4, rutas válidas, compilación, regresión y documentos verificables localmente.

Quedan fuera de nuestras actividades el respaldo/migración de producción, los archivos productivos de `storage/app`, el despliegue y las pruebas reales que enviarían correo, timbrarían CFDI o consumirían servicios externos. Para una aceptación manual completa por rol se necesita una copia local autorizada con el esquema faltante y usuarios de prueba.
