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

3.3 KiB

Fase D5.3.25 · Historial de verificaciones de hallazgos

Objetivo

Convertir el seguimiento de verificaciones en una historia explícita de eventos. nextControlOn continúa siendo la proyección vigente usada por colas y planificación, pero deja de ser la única evidencia de lo ocurrido.

Regla funcional

Cada hallazgo conserva todas las decisiones de control y todas las verificaciones sucesivas. Una nueva fecha nunca elimina la anterior y un resultado de campo ya registrado no puede sustituirse.

La secuencia puede contener tantas iteraciones como sean necesarias:

  1. fecha de verificación definida por oficina;
  2. visita de verificación planificada;
  3. resultado de campo;
  4. nueva fecha si el hallazgo continúa abierto;
  5. nueva visita;
  6. nuevo resultado;
  7. cierre administrativo cuando corresponda.

Ledger append-only

Nueva tabla inspection_finding_verification_events.

Registra eventos:

  • CONTROL_DATE_DEFINED
  • CONTROL_DATE_CHANGED
  • CONTROL_DATE_CLEARED
  • VISIT_PLANNED
  • RESULT_RECORDED

Cada evento conserva fecha de ocurrencia, fecha anterior, fecha nueva, visita vinculada, resultado, observaciones, usuario y evidencia relacionada.

El rol de aplicación sólo tiene SELECT e INSERT. No puede actualizar ni borrar eventos.

Antecedentes

La migración reconstruye eventos existentes desde:

  • inspection_finding_versions, para cambios de nextControlOn realizados por oficina;
  • inspection_finding_verification_visits, para visitas y resultados ya registrados.

No se inventan eventos que no puedan deducirse de los antecedentes persistidos.

Resultado de campo inmutable

Una fila inspection_finding_verification_visits representa un intento concreto dentro de una visita concreta. D5.3.25 impide registrar dos veces el resultado del mismo intento.

La protección existe en dos niveles:

  • servicio: devuelve VERIFICATION_RESULT_IMMUTABLE si ya existe resultado;
  • base de datos: un trigger impide modificar los campos del resultado una vez que result_recorded_at quedó definido.

Una verificación posterior se realiza en una nueva visita y genera nuevos eventos, sin tocar la anterior.

Proyección vigente

inspection_findings.next_control_on se conserva para búsquedas, dashboard y planificación. Cada cambio de ese campo se acompaña de un evento histórico dentro de la misma transacción.

Cuando un resultado:

  • es RESOLVED, la proyección se limpia y el historial conserva el control realizado;
  • es NOT_RESOLVED, la proyección se limpia y oficina debe definir el siguiente control;
  • es REQUIRES_NEW_DATE, la nueva fecha se convierte en la proyección vigente y también queda registrada en el ledger.

Consulta y web

GET /api/v3/inspection-findings/:id/verification-history

La ficha de Hallazgos incorpora “Historial completo de verificaciones” con:

  • cambios de fecha;
  • visitas planificadas;
  • resultados sucesivos;
  • observaciones;
  • usuario;
  • enlace a cada visita;
  • cantidad de evidencias vinculadas.

Reglas preservadas

  • Una visita = una Acta.
  • Actas cerradas no se modifican.
  • El hallazgo original no se reescribe.
  • La primera respuesta de empresa continúa inmutable.
  • Las presentaciones posteriores siguen siendo append-only.
  • El cierre del hallazgo continúa siendo una decisión administrativa.
  • SMTP puede continuar pendiente sin bloquear esta fase.