feat(f6.8): harden offline field flow and act documents
Android CI / RC / Android · lint, tests, debug APK, release compile (push) Successful in 3m41s
DH V2 CI / API · typecheck, tests, build (push) Successful in 31s
DH V2 CI / WEB · typecheck, build (push) Successful in 19s
Production dependency audit / API · production dependencies (push) Successful in 9s
Production dependency audit / WEB · production dependencies (push) Successful in 8s
DH V2 CI / Docker / scripts contract (push) Successful in 1m14s

This commit is contained in:
DH V2
2026-09-15 15:56:50 -03:00
parent 47cd985931
commit 079728aa6d
62 changed files with 2240 additions and 338 deletions
@@ -0,0 +1,80 @@
# Auditoría integral DH V2 · F6.8 · 15/09/2026
## Alcance
Revisión del árbol activo API V3, WEB V2 y Android de campo contra el modelo funcional vigente. La auditoría distingue superficie activa, compatibilidad histórica y código fuente retirado/no enrutable para no confundir legado con funcionalidad productiva.
## 1. Acceso, usuarios, roles y perfil
- El acceso autenticado, permisos y cambio de contraseña siguen aislados por permisos.
- La firma reutilizable del inspector se administra en Mi perfil y se consulta desde Android antes del cierre del Acta.
- Corrección F6.8: Android ya no presume que existe la firma. Si se configura después de haber guardado un cierre pendiente, “Volver a verificar” reintenta automáticamente la sincronización.
- Corrección F6.8: cola y caché offline están separadas por `userId`; un segundo usuario del mismo dispositivo no puede sincronizar ni reutilizar datos locales del anterior.
## 2. Planificación e Inspecciones
- Flujo activo: oficina planifica; la APK inicia y cierra la ejecución física.
- Contexto vigente: Departamento → Área → Yacimiento; Operadora temporal del Área; el Yacimiento fija el alcance físico.
- La planificación activa no usa fecha de fin prevista. Las referencias `plannedEndAt` encontradas pertenecen al subsistema Survey retirado y no están en rutas activas.
- Corrección F6.8: inicio y cierre de Inspección quedan persistidos localmente si se pierde conectividad y se sincronizan en orden al recuperarla. Un rechazo funcional del servidor revierte el estado optimista local.
## 3. Actas
- Una Inspección puede contener múltiples Actas, manteniendo como máximo una en borrador simultáneamente.
- La urgencia se define al bloquear/cerrar el contenido del Acta completa; no pertenece individualmente a cada Hallazgo.
- El Acta bloqueada es inmutable y pasa a firma. La firma del inspector proviene del perfil; la persona acompañante firma por cada Acta.
- Flujo activo de acompañante: conforme, disconformidad con motivo o negativa a firmar con motivo. La opción de crear nuevas ausencias fue retirada de la interfaz; `ABSENT` se conserva únicamente para leer registros históricos.
- Corrección crítica F6.8: Android enviaba `uploadMode=ONLINE`, valor inválido para la API. Se reemplazó por `IMMEDIATE` y la cola offline usa `DEFERRED`.
- Corrección F6.8: alta, bloqueo, responsable, manifestación, firma y sellado pueden quedar en cola local sin perderse.
## 4. Hallazgos y evidencia
- Los Hallazgos pertenecen a un Acta explícita y a un elemento de Inventario incluido en ella.
- El catálogo se resuelve por Tipo de instalación/subinstalación y mantiene OTROS como salida no restrictiva.
- Corrección F6.8: alta de Hallazgo y carga de evidencia usan UUID de cliente para que un reintento offline no duplique registros.
- Corrección F6.8: cada fotografía se revisa antes de incorporarse: usar, volver a tomar o eliminar; conserva GPS y fecha de captura.
- Se mantienen múltiples fotografías por Hallazgo.
## 5. Inventarios
- Jerarquía activa: Departamento → Área → Yacimiento → Instalación → Subinstalación.
- Corrección de nomenclatura: la antigua expresión visible “clasificación técnica/familia técnica” se presenta como “Tipo de instalación” o “Tipo de subinstalación”. Los nombres físicos internos de tablas/variables se conservan para evitar migraciones destructivas.
- Altas en campo conservan GPS y foto obligatoria antes de habilitar Hallazgos.
- Corrección F6.8: creación, selección, foto y asociación al Acta pueden persistirse offline con identidad estable e idempotencia de servidor.
- Historial, dossier y consulta temporal siguen separados del estado actual para no reescribir historia.
## 6. Acta documental, fotos y Dashboard
- Desvío corregido: la ficha de Acta mezclaba demasiada información administrativa y el PDF/fotos no eran contenido principal.
- F6.8 agrega “Documento del Acta” con apertura y descarga del PDF real sellado.
- Las fotos de Hallazgos se muestran como miniaturas dentro del Acta.
- Las fotos de Inventario se limitan a eventos de campo de la misma Inspección y a elementos incluidos en esa Acta; no se mezclan fotos históricas de otras visitas.
- La proyección documental anterior queda sólo como referencia colapsada, no como sustituto del PDF oficial.
## 7. Seguimiento, verificaciones y vencimientos
- El seguimiento administrativo permanece separado de la captura de campo.
- Respuesta de empresa, documentación, fechas informadas y verificación física conservan trazabilidad sin reabrir el Acta.
- La planificación de verificaciones continúa basada en Hallazgos abiertos y no reemplaza el plazo administrativo del Acta.
- No se detectaron rutas activas que vuelvan a asignar la urgencia al Hallazgo.
## 8. Informes, GEDO y entrega documental
- Flujo activo confirmado: Acta → INF → oficialización GEDO/IF.
- Un INF corresponde a una sola Acta; una Inspección con varias Actas puede producir varios INF.
- El circuito legacy de aprobación/firma final por Director fue retirado de la superficie activa; sus menciones permanecen sólo en migraciones reversibles/historia.
- La entrega documental y SMTP continúan bajo permisos administrativos y trazabilidad.
## 9. Importaciones y compatibilidad histórica
- El módulo API de importaciones se conserva, pero la antigua pantalla de importación fue retirada deliberadamente de las rutas WEB en F5; no se reactivó durante F6.8 para no mezclar el contrato anterior con el modelo autoritativo actual.
- Las páginas Survey y campos como `plannedEndAt` existen como fuente histórica sin ruta activa; los módulos Survey tampoco están registrados en `AppModule`.
- Se mantienen redirects `/activos``/inventarios` y valores históricos de estados de Acta únicamente para compatibilidad de enlaces/datos existentes.
## 10. Offline, consistencia y seguridad de sincronización
- Room persiste operaciones y contexto descargado; WorkManager reintenta sólo con red disponible.
- Las operaciones dependientes se procesan en orden estable y la cola se detiene ante un error funcional permanente para no ejecutar hijos sobre un padre rechazado.
- Las operaciones críticas usan identificadores de cliente y columnas de idempotencia para evitar duplicados tras cortes/reintentos.
- Los archivos pendientes se almacenan dentro del espacio privado de la aplicación hasta quedar sincronizados.
## Barreras de aceptación F6.8
- API: build + suite integral de contratos/unidad.
- WEB: typecheck/build de producción.
- Android: compilación Debug/Release, tests unitarios, APK Debug instalable y lint por variante dentro de los límites del VPS.
- Deploy productivo: backup previo, migraciones, recreación API/WEB, health/versiones y ausencia de migraciones pendientes.
## Compatibilidad intencional que NO debe eliminarse a ciegas
- Estados/eventos históricos de Acta (`READY`, `CLOSED`, `RECTIFIED`, `ABSENT`) para lectura de expedientes existentes.
- Rutas antiguas `/activos` como redirección de compatibilidad.
- Migraciones históricas y textos de rollback: no se reescriben.
- Fuentes Survey/legacy no enrutadas: no forman parte del producto activo, pero sirven a contratos históricos y rollback.