# Informe de cierre — Fase 1

## Resultado

La Fase 1 queda cerrada con un baseline reproducible. No se modificó el repositorio fuente, no se conectó a ninguna base de datos y no se ejecutaron migrations, seeders ni scripts SQL.

## Baseline congelado

| Elemento | Referencia |
|---|---|
| Fuente autorizada | `seatsa-lab/main` |
| Commit fuente | `087bbde77a1f8e3144c9c0e963d2fddbcb9d1420` |
| Fecha del commit fuente | `2026-09-01T16:28:43-06:00` |
| Destino | `seatsa-lab-laravel13` |
| Rama destino | `feat/estabilizacion-seatsa` |
| Commit base del destino | `da7d82991fe2a6b0bea843b6aae42dbd4de7026d` |
| Base para pruebas | Base local existente |
| Producción | Fuera del alcance |
| Otras ramas | Fuera del alcance |

Si `main` recibe cambios después de este punto, se deberá regenerar el inventario y añadir explícitamente el nuevo delta al alcance antes de declarar terminada la migración.

## Inventario de archivos

`main` contiene 4,662 archivos rastreados:

| Categoría | Total | Idénticos en Laravel 13 | Presentes pero diferentes | Ausentes en Laravel 13 |
|---|---:|---:|---:|---:|
| Controladores | 107 | 60 | 36 | 11 |
| Vistas Blade | 730 | 529 | 173 | 28 |
| Clases de aplicación y modelos | 226 | 169 | 35 | 22 |
| Servicios | 32 | 13 | 8 | 11 |
| Mailables | 16 | 1 | 14 | 1 |
| Middleware | 8 | 5 | 3 | 0 |
| Comandos | 6 | 3 | 1 | 2 |
| Pruebas | 49 | 1 | 12 | 36 |
| Assets públicos | 2,424 | 2,410 | 2 | 12 |
| Historial de migrations | 427 | 0 | 0 | 427 |
| Historial de seeders | 40 | 0 | 0 | 40 |
| SQL | 4 | 0 | 0 | 4 |
| `storage/app` | 502 | 0 | 0 | 502 |

En total hay 3,244 archivos byte a byte equivalentes, 312 presentes pero diferentes y 1,106 ausentes. La ausencia de migrations, seeders y `storage/app` en su ubicación original puede ser intencional en Laravel 13; la matriz no ordena copiarlos automáticamente.

## Módulos

El seeder histórico declara 37 módulos: 35 con bandera activa y 2 con bandera inactiva. Esto es una referencia de código y se contrastará con el contenido real de la base local durante las pruebas.

Indicadores Gráficos está incluido únicamente con la funcionalidad presente en `main`.

## Rutas

La aplicación fuente registra 1,189 rutas:

| Comprobación estática | Cantidad |
|---|---:|
| Acción declarada en ambos repositorios | 1,023 |
| Acción cuyo controlador falta en Laravel 13 | 61 |
| Acción cuyo método falta en un controlador existente de Laravel 13 | 23 |
| Acción sin método declarado ya desde `main` | 70 |
| Controladores de paquetes externos | 6 |
| Rutas de framework o closures | 6 |

Las 61 acciones con controlador ausente se concentran en siete controladores de Portal de Clientes y mantenimiento de notificaciones de Requisiciones. Las 23 acciones ausentes en controladores existentes afectan principalmente Control de Documentos, Cotizaciones, Notificaciones y Requisiciones.

Las 70 acciones que tampoco tienen método declarado directamente en el controlador de `main` son deuda heredada. El CSV conserva cada URI y acción. Esta categoría incluye rutas resource cuya operación no fue implementada y rutas relevantes como `create_img` y `apiInforme`; no se eliminarán ni se implementarán por suposición.

Existen cinco nombres de ruta duplicados en `main`: `create-zip`, `normas.edit`, `normas.show`, `usuarios.edit` y `usuarios.store`. Esto se resolverá antes de considerar seguro el cache de rutas.

## SQL y esquema de producción

`main` contiene cuatro scripts SQL, inventariados con SHA-256. Su política es documentación controlada: no se ejecutan automáticamente.

El dump recibido tiene estas propiedades:

| Propiedad | Valor |
|---|---|
| Base | `seatsacomsayuc_lab_schema` |
| Servidor | MySQL 8.0.46 |
| Tablas definidas | 206 |
| Instrucciones de inserción | 0 |
| SHA-256 | `3D6F22485865E945268DE8A1694542473343E8FB2012508DF031E1AB51D2EC52` |

Es una referencia de estructura, no un respaldo de datos. La comparación con la base local corresponde a la Fase 3.

## Almacenamiento

El snapshot rastreado bajo `storage/app` contiene 502 archivos y 27,014,576 bytes:

- 497 archivos bajo `storage/app/public`;
- 3 documentos Word en la raíz de `storage/app`;
- 2 archivos de diagnóstico.

Estos archivos se utilizarán sólo cuando sean necesarios para pruebas locales y no representan el respaldo productivo.

## Dependencias y ejecución local

Se inventariaron 34 dependencias declaradas: 21 de Composer para ejecución, 6 de Composer para desarrollo y 7 de NPM para desarrollo.

El PHP predeterminado del sistema es 7.4.33 (`C:\xampp\php\php.exe`), pero el entorno preparado para Laravel 13 está disponible en `C:\tools\php\8.4\php.exe` y ejecuta PHP 8.4.24. Se comprobó Composer 2.10.2 y se habilitó `intl`; también están disponibles Imagick, ZIP, PDO MySQL y las demás extensiones requeridas. El activador `tools/local/Use-SeatsaEnvironment.ps1` evita depender del orden global de `PATH`.

## Scheduler

`main` declara tres ejecuciones programadas:

- `documentos:generar-recordatorios`, días hábiles a las 08:00;
- `bancos:procesar-pagos-programados`, cada minuto;
- `requisiciones:generar-recordatorios-pago`, diariamente a las 02:00.

Sólo se comprobarán localmente; su activación productiva queda fuera del alcance.

## Asignación de riesgos a las siguientes fases

| Riesgo o diferencia | Fase |
|---|---:|
| PHP y arranque de Laravel 13 | 2 |
| Diferencias entre dump y base local | 3 |
| Autenticación, permisos, servicios, mailables y scheduler | 4 |
| Módulos operativos y vistas faltantes | 5 |
| Línea de Pruebas, `create_img`, `apiInforme` y documentos | 6 |
| Portal, Control Documental, Facturación, Requisiciones e Indicadores de `main` | 7 |
| Regresión completa módulo por módulo | 8 |

## Criterio de trazabilidad

La matriz `main-file-matrix.csv` es el registro maestro inicial. Durante las fases siguientes se llenarán `Phase`, `FunctionalStatus` y `Evidence`. Ningún archivo idéntico se considerará validado únicamente por coincidir byte a byte; deberá quedar cubierto por una prueba funcional, una prueba automatizada o una revisión documentada.
