3.1 KiB
Fase D5.3.24 · Historial de contexto operativo
Objetivo
Preservar de forma explícita la evolución de la ubicación jerárquica y del contexto operativo de cada elemento del Inventario: padre físico, Área y Operadora.
Regla funcional
Un cambio actual de jerarquía, Área u Operadora nunca elimina la relación anterior. La relación vigente se cierra con una fecha de fin y se agrega una nueva relación con fecha de inicio, motivo, usuario, request y versión del Inventario.
Los cambios ordinarios de nombre, código, atributos o descripción siguen usando la edición normal. Los registros consolidados no pueden cambiar parentId, operationalAreaId ni operatorCompanyId por el endpoint general: deben usar el cambio de contexto auditado. La única excepción es una alta de campo todavía DRAFT y pendiente de revisión, porque en ese momento oficina está corrigiendo el registro provisional antes de validarlo.
Persistencia
Nueva tabla asset_context_history con un único registro activo por elemento. Guarda:
parent_idoperational_area_idoperator_company_idvalid_fromvalid_untilchange_reasonend_reasonasset_version_numbersourcerequest_id- usuario creador/finalizador
No existe eliminación de historial para el rol de aplicación.
Reconstrucción de antecedentes
La migración analiza asset_versions y detecta sólo los puntos donde cambió alguno de estos tres valores. Esos puntos se convierten en intervalos históricos. Así se aprovecha el versionado ya existente y no se presupone que la relación actual existió desde el alta del elemento.
Para activos sin versiones recuperables se crea una línea base a partir del contexto vigente.
Cambio de contexto
Nuevo endpoint:
POST /api/v3/assets/:id/context
Requiere assets.manage_context y un motivo obligatorio. Puede indicar una fecha efectiva pasada siempre que sea posterior al inicio del contexto vigente y no esté en el futuro.
La operación es transaccional:
- valida padre y reglas de jerarquía;
- valida Área–Operadora;
- cierra el contexto anterior;
- actualiza el contexto actual de
assets; - captura una nueva
asset_versiontipoCONTEXT_CHANGED; - inserta el nuevo intervalo;
- registra auditoría
ASSET_CONTEXT_CHANGED.
Consulta histórica
Nuevo endpoint:
GET /api/v3/assets/:id/context-history
El panel de Inventarios muestra contexto vigente e intervalos anteriores con motivo y vigencia.
AssetTemporalService también consulta asset_context_history, por lo que al pedir un activo a una fecha determinada reemplaza padre, Área y Operadora por los que estaban vigentes en ese instante.
Permisos iniciales
assets.manage_context queda asignado por defecto a admin y supervisor. El Inspector conserva las altas de campo y las correcciones provisionales, pero no puede transferir un Inventario consolidado.
Reglas preservadas
- Una visita = una Acta.
- Actas cerradas no se modifican.
- Hallazgos originales no se reescriben.
- Una conciliación de alta de campo no sustituye referencias históricas.
- SMTP puede continuar sin configurar.