Files
dh-inspeccion-v2/docs/AUDITORIA_CONSISTENCIA_F6_1.md

5.3 KiB

Auditoría de consistencia · F6.1

Baseline revisado: 25a63cd3d4b2c561803cc5105cce100983c8eeff
Alcance: API, modelo de datos, Inventarios, Inspecciones, Actas, Hallazgos, Informes/GEDO, WEB, Android, permisos, versionado documental y CI.

Resultado

El modelo funcional consolidado de F6.1 es coherente. No se detectó una contradicción estructural que requiera rediseñar tablas o migrar datos antes de continuar.

La auditoría sí encontró deuda de terminología/documentación y una inconsistencia de metadata generada. Las correcciones funcionales/documentales se integran en esta rama; la metadata de lockfiles se documenta como observación no funcional y debe regenerarse con npm en un corte controlado, no editarse parcialmente a mano.

Contratos verificados

Inventario

  • Jerarquía física única: Departamento → Área → Yacimiento → Instalación → Subinstalación.
  • Empresa es un maestro independiente.
  • Operadora vigente se resuelve por relación temporal Área ⇄ Empresa.
  • Cambiar Operadora no reparenta Inventario.
  • Departamento, Área y Yacimiento no llevan familia técnica.
  • Instalación y Subinstalación requieren familia técnica.
  • Subinstalación debe ser compatible con la familia de la Instalación padre.
  • PostgreSQL protege jerarquía y compatibilidad, además de las validaciones de API.

Inspecciones

  • Lifecycle canónico DRAFT → PLANNED → IN_PROGRESS → CLOSED.
  • Planificación requiere Área, Operadora vigente, Inspector responsable, fecha/hora y checklist.
  • La APK abre una Inspección reutilizando el mismo create/plan/start; no existe un lifecycle móvil paralelo.
  • No hay referencias activas a plannedEndAt / planned_end_at en el código actual.

Actas

  • Una Inspección puede contener múltiples Actas.
  • El constraint histórico de una sola Acta por visita fue eliminado por F1.1.
  • Existe un índice parcial que permite sólo un Acta DRAFT simultánea por Inspección.
  • El cierre de la Inspección exige que todas las Actas no canceladas estén SELLADAS.
  • El Acta finalizada/bloqueada es inmutable.

Hallazgos

  • Destinos directos: Yacimiento, Instalación y Subinstalación.
  • Departamento y Área no son destinos directos.
  • OTROS / Agregar otro permanece disponible.
  • Yacimiento no requiere familia técnica.
  • Instalación/Subinstalación sí requieren clasificación.
  • Inventario nacido en campo necesita GPS + foto antes de admitir Hallazgos.

Informes / GEDO

  • El Informe pertenece al Acta.
  • La oficialización GEDO/IF es inmutable.
  • Oficializar en GEDO no activa por sí solo el vencimiento No urgente.
  • El valor persistido histórico GEDO_DATE se conserva como ABI de base; en código existe el alias semántico NOTIFICATION_DATE para evitar interpretar GEDO como notificación automática.

Correcciones integradas en la auditoría

  1. Se corrigió la terminología residual Área/Yacimiento en el lifecycle de Inspecciones. El contexto operativo queda definido inequívocamente como Área + Operadora vigente.
  2. Se documentó en código la separación entre Empresa y la jerarquía física del Inventario.
  3. Se documentó en la entidad Acta el contrato multi-Acta + único DRAFT simultáneo.
  4. Se agregó un test transversal F6.1 que protege jerarquía, contexto operativo, multi-Acta, Hallazgos, apertura móvil y separación GEDO/vencimiento.
  5. Se consolidó docs/F6_INVENTORY_MODEL.md como única referencia viva y los duplicados históricos apuntan a ella.
  6. Se crearon MANUAL_PROGRAMADOR.md y MANUAL_USUARIO.md.

Compatibilidades históricas que NO deben “limpiarse” sin migración

  • Migraciones antiguas conservan nombres y reglas que fueron válidas en fases anteriores. No se modifican; migraciones posteriores son las que expresan la evolución.
  • InspectionDeadlineBasis.GEDO_DATE comparte valor persistido con NOTIFICATION_DATE por compatibilidad de esquema.
  • assets.operator_company_id puede conservar una fotografía de compatibilidad incluso cuando la relación temporal ya finalizó. La fuente de verdad vigente/histórica sigue siendo area_company_relations.
  • F5.1 es una migración destructiva de inicio limpio y no tiene down() reconstructivo; su rollback es el backup PRE.

Observación no funcional: metadata de package-lock

Los package.json actuales declaran las versiones de producto vigentes, pero la metadata name/version de la raíz de ambos package-lock.json todavía conserva 0.20.0-2 de un corte anterior.

Esto no cambia el grafo de dependencias ni el runtime y npm ci continúa siendo la barrera de instalación. Se deja explícitamente registrado para no ocultarlo.

Tratamiento correcto: regenerar cada lockfile con npm (npm install --package-lock-only) cuando se haga el próximo corte controlado de metadata/dependencias y verificar el diff completo. No editar manualmente sólo las primeras líneas del lockfile.

Criterio de aceptación de esta auditoría

Antes de mergear esta rama deben pasar nuevamente:

  • API typecheck + tests + build.
  • WEB typecheck + contrato + build.
  • migraciones sobre PostGIS limpio.
  • preflight aislado equivalente al VPS.
  • build de imágenes productivas.
  • Android assemble + unit tests cuando el workflow se dispare por el PR.

La rama de documentación/consistencia no debe promoverse a deploy durante esta revisión. El despliegue queda deliberadamente pausado.