Historial de servicios GMP y Protocolo ITS
El módulo Historial es el registro permanente de todos los servicios GMP que ION-target ejecuta sobre los equipos de sus clientes: calificaciones (IQ, OQ, PQ, IQOQ), verificaciones de performance, mantenimientos preventivos y calibraciones. Cada servicio tiene un número ITS único e inmutable y un Protocolo ITS (el panel de detalle) donde se cargan módulos, patrones (STD), técnicos, el reporte y el vínculo con el informe de cliente de eQMS.
El número ITS y el parentesco de un servicio son inmutables una vez creados. Los servicios no se eliminan
(la API responde 405 a cualquier DELETE): se archivan con motivo
obligatorio y quedan consultables. Todo cambio queda en el audit trail.
Estados del servicio
Un servicio GMP tiene cinco estados. Esta es la fuente única — cualquier otro valor que veas en pantalla es dato heredado:
| Estado | Descripción | Qué habilita |
|---|---|---|
| Por Realizar | Estado inicial al crear el servicio. Registrado, pendiente de agendar. | Editar el protocolo, programar, ejecutar o cancelar. |
| Programado | Fecha acordada con el cliente y técnico asignado. | Iniciar ejecución, volver a Por Realizar o cancelar. |
| En Ejecución | Técnico realizando el servicio en sitio. | Finalizar (con guard de informe) o cancelar. |
| Finalizado | Servicio completado. Odoo sincroniza el cierre. | Es el estado de cierre. Requiere informe de cliente o N/A. |
| Cancelado | El servicio no se realizó. Odoo sincroniza la cancelación. | No es irreversible: se puede volver a otro estado. |
En datos viejos podés ver servicios en estado "Ejecutado". Es un valor importado: el modal no permite setearlo, y los servicios nuevos usan "En Ejecución". Por eso el filtro "Ejecutado" del listado no trae los servicios nuevos — para esos, filtrá por "En Ejecución".
El modal permite pasar a cualquier estado. El backend solo valida que el estado sea un valor
válido (400 si no lo es) y aplica el guard de Finalizado. El diagrama de abajo es
la política operativa recomendada, no un bloqueo forzado por el sistema.
Las flechas grises son la política operativa recomendada (avance y retroceso), no un bloqueo del sistema: el modal permite ir a cualquier estado. El único candado real es el paso a Finalizado, que exige el informe de cliente (o marcar N/A). La cancelación es posible desde cualquier estado y no es irreversible.
Guard de cierre — informe de cliente
Para pasar un servicio a Finalizado se requiere el url_informe_cliente (el link
al informe firmado en eQMS/CTR) o marcarlo como N/A. Si falta, el backend responde
409 y en el protocolo aparece el botón "Sin informe eQMS (N/A)",
que pide una justificación de ≥15 caracteres. El link del informe lo recibe eQMS
automáticamente al firmar el bundle CTR, vía PATCH /historial/{id}/url-informe.
El estado del servicio existe en dos lugares: historial_servicio.estado (el banner del
Protocolo ITS) y equipo_servicio.estado (el chip que ves en el listado de Equipos). Solo
PATCH /historial/{id}/estado los mueve a los dos a la vez. Editar el servicio con
PUT no toca el estado — justamente para que no se pueda saltear el guard de
Finalizado.
Cancelación
Cancelar un servicio lo lleva al estado Cancelado y Odoo sincroniza la cancelación. A diferencia de lo que decía la versión anterior de esta ayuda:
- No pide justificación ni un mínimo de caracteres.
- No es irreversible: desde Cancelado se puede volver a otro estado (el sistema no lo bloquea).
Cambio de mes — cancela y recrea
Si cambiás el mes de la fecha de ejecución de un servicio que ya tiene protocolo, el sistema
cancela ese servicio y abre uno nuevo (con número ITS del nuevo mes): un número
ITS corresponde a un único mes, por trazabilidad. Por eso PUT /equipo-servicios/{id} bloquea el
cambio de mes cuando hay protocolo asociado (responde 409) y el flujo se resuelve por el modal
"Cambio de mes detectado". Cambiar solo el día del mismo mes no dispara la recreación.
Recalificación e ITS parentados
Un servicio puede ser hijo de otro (servicio_padre_id) del mismo equipo y
tipo — típicamente para encadenar una recalificación con su calificación original.
- El parentesco tiene un solo nivel: no hay "nietos" (un hijo no puede ser padre de otro).
- El vínculo padre-hijo es inmutable una vez creado.
- Un padre con hijos activos no se puede archivar (hay que resolver los hijos primero).
Tipos de servicio
El catálogo tiene 11 tipos de servicio GMP. La categoría se detecta por substring del nombre del tipo:
| Sigla | Tipo |
|---|---|
| IQ | Installation Qualification (calificación de instalación). |
| OQ | Operational Qualification (calificación operacional). |
| PQ | Performance Qualification (calificación de desempeño). |
| IQOQ | Calificación combinada de instalación y operación. |
| PV | Verificación de Performance. |
| PM | Mantenimiento Preventivo. |
| Cal | Calibración (y sus variantes del catálogo). |
AT (asistencia técnica) y RB (reparación) son intervenciones, no
servicios GMP: no se cargan como servicio del historial. Si se intenta crearlas como tipo de servicio, el
backend las rechaza con 422. Se gestionan desde
AT y Reparaciones.
Numeración y vencimiento
| Concepto | Regla |
|---|---|
| Número ITS | Formato ITS-AAAAMMDD-NN. El correlativo diario (NN) se asigna de forma
atómica y el número es inmutable. Si se ingresa un número manual, debe ser
único (409 si ya existe). |
| Vencimiento | Se calcula desde la fecha de ejecución + periodicidad (en meses) y se lleva al último día de ese mes. |
Protocolo ITS — el modal
El Protocolo ITS es el panel de detalle de un servicio. Se abre al hacer click en el número ITS (📋 ITS-20260722-01) desde cualquier parte del sistema.
| Campo / sección | Detalle |
|---|---|
| N° de protocolo | El número ITS. Inmutable. |
| N° de protocolo del cliente | Referencia del cliente. Editable. |
| Observaciones | Texto libre. |
| Reporte | Texto libre, con un botón "Aplicar comentario predeterminado" que sugiere un texto según la sigla del tipo de servicio. |
| Módulos | Selección de los módulos del equipo involucrados en el servicio. |
| STD | Instrumentos, estándares y solventes usados. Solo se ofrecen los recursos VIGENTES. Ver INST/STD/SV. |
| Técnicos ejecutores | Los técnicos que realizaron el servicio. |
| Informe de cliente | Sección con un badge de tres estados (ver abajo). |
La sección Informe de cliente muestra uno de tres badges según el estado del vínculo con eQMS:
Acciones sobre el servicio
| Acción | Endpoint | Condiciones |
|---|---|---|
| Listar | GET /historial | Con filtros y agrupaciones. |
| Ver protocolo | GET /historial/{id} | Detalle completo del servicio. |
| Crear | POST /historial | Genera el número ITS. Rechaza AT/RB (422). |
| Editar | PUT /historial/{id} | No toca el estado ni url_informe. 409 si está archivado. |
| Cambiar estado | PATCH /historial/{id}/estado | 400 si el estado es inválido; guard 409 al finalizar sin informe. Sincroniza equipo_servicio. |
| Recibir informe | PATCH /historial/{id}/url-informe | Lo llama eQMS al firmar el bundle CTR. |
| Marcar N/A | PATCH /historial/{id}/url-informe-na | Justificación ≥15 caracteres. |
| Archivar | PATCH /historial/{id}/archivar | Motivo obligatorio. Un padre con hijos activos no se archiva. |
| Restaurar | PATCH /historial/{id}/restaurar | Solo administrador (403 si no). |
| Eliminar | DELETE /historial/{id} | No permitido — responde 405. |
Preguntas frecuentes
url_informe_cliente) o marcarlo como N/A. Sin eso el sistema responde 409. Usá el botón
"Sin informe eQMS (N/A)" y escribí una justificación de al menos 15 caracteres, o esperá a que
eQMS envíe el informe al firmar el bundle.PATCH /historial/{id}/restaurar).
Si no sos admin, el sistema responde 403. Pedile a un administrador que lo restaure.