🔧 AT y Reparaciones

Asistencias Técnicas y Reparaciones en Bench

El módulo gestiona dos tipos de intervención correctiva sobre los equipos de los clientes: las Asistencias Técnicas (AT) y las Reparaciones en Bench (RB). Ambas comparten prácticamente todo — estados, campos, integración con Odoo, reporte y archivado — y solo se diferencian en la numeración, en el botón de conversión y en detalles de presentación. Se administran desde una única pantalla de tarjetas.

⚖️
Numeración inmutable y sin saltos

Cada AT/RB recibe un número correlativo por día y tipo (AT-AAAAMMDD-NN / RB-AAAAMMDD-NN) generado de forma atómica. El número es UNIQUE e inmutable: se asigna una sola vez y nunca se reescribe. Como el alta es transaccional (un único commit), si falla la carga de los hijos no se consume el número, evitando saltos en la secuencia.

AT vs RB: qué las diferencia

Son casi idénticas. Comparten estados, campos, endpoints, integración con Odoo (ambas van al mismo proyecto), reporte y archivado. Las únicas diferencias reales son:

AspectoAT Asistencia TécnicaRB Reparación en Bench
NumeraciónAT-AAAAMMDD-NNRB-AAAAMMDD-NN
Botón "→ RB"✅ Presente (convierte a RB)— No aplica
Worksheet de Odoo8 (AT)9 (RB)
Color de la tarjetaAzulVerde
Proyecto Odoo13 — "Correctivos" (el mismo para ambas)
Estados, campos, endpoints, reporte, archivadoIdénticos
ℹ️
Las AT/RB no vencen

A diferencia de otros registros del sistema, las asistencias no tienen fecha de vencimiento: representan un trabajo correctivo puntual, no un recurso con vigencia. El único dato temporal es la fecha de ejecución.

Campos de una AT / RB

CampoDetalle
TipoAT o RB. Define la numeración, el color de la tarjeta y el worksheet de Odoo.
NúmeroUNIQUE, inmutable y automático. Correlativo atómico por día y tipo (AT-/RB-AAAAMMDD-NN).
EstadoPor defecto Por Realizar al crear.
Fecha de ejecuciónDía en que se realiza (o realizará) la intervención.
ReporteTexto del reporte técnico de la asistencia.
Usuario responsable del sectorSi no se elige explícitamente, toma el usuario primario del sector.
Técnico asignadoEs el primero de los técnicos seleccionados en el modal.
Creado porUsuario que dio el alta (audit trail).
odoo_task_idID de la tarea en Odoo, una vez creada con "Crear Odoo".

Alta: selección en el modal

Al crear una AT/RB, tras elegir laboratorio, sector y equipo, el modal ofrece:

SelecciónDe dónde sale
MódulosLos módulos del equipo elegido.
TécnicosUsuarios @ion-target.com, multi-selección. El primero queda como técnico asignado.
ConsumiblesLos consumibles del equipo.
STD (instrumentos/estándares/solventes)Solo los recursos VIGENTES.
⚖️
Alta transaccional

El alta se confirma en un único commit: la asistencia y todos sus hijos (técnicos, módulos, consumibles, STD) se guardan juntos. Si falla la carga de algún hijo, se revierte todo y el número correlativo no se consume, garantizando trazabilidad sin saltos.

Estados

El flujo típico avanza así, pero no hay máquina de estados que restrinja las transiciones: desde cualquier estado se puede pasar a cualquier otro. Lo único que bloquea el cambio es que la asistencia esté archivada.

Por Realizar Programado En Ejecución Resuelto Cancelado Sin transiciones restringidas: cualquier estado → cualquier estado (salvo si está archivada)

Flujo habitual. El estado por defecto al crear es "Por Realizar".

EstadoDescripción
Por RealizarEstado inicial por defecto. Registrada, sin ejecutar.
ProgramadoFecha acordada, técnico asignado.
En EjecuciónIntervención en curso.
ResueltoIntervención completada. El "Finalizado" de Odoo se traduce a este estado.
CanceladoIntervención cancelada.

El filtro "Activos"

ℹ️
"Activos" = Por Realizar + Programado

El filtro por defecto "Activos" muestra únicamente las asistencias en Por Realizar y Programado. No incluye "En Ejecución" (ni Resuelto ni Cancelado). Si no ves una AT/RB que está en ejecución, cambiá el filtro a "Todos" o al estado específico.

Conversión AT → RB

El botón "→ RB" existe solo en las AT. Aparece en toda AT no archivada, en cualquier estado — no hace falta que esté Resuelta.

⚠️
Qué hereda (y qué no) la nueva RB

Al convertir se crea una RB nueva que hereda del equipo equipo, usuario, módulos y consumibles. No hereda los técnicos, ni los STD, ni el reporte: la RB arranca en blanco en esos tres puntos. La AT original pasa a Resuelto, con el reporte de cierre que escribís en el prompt de conversión.

Integración con Odoo

Ambos tipos se integran con el proyecto 13 "Correctivos" de Odoo. A diferencia de lo que podría suponerse, guardar una AT/RB NO crea la tarea en Odoo automáticamente: la creación de la tarea es una acción manual y aparte.

1
"Crear Odoo"

POST /odoo/from-odoo crea la tarea en Odoo. Requiere que el laboratorio tenga vínculo con Odoo (partner). Recién ahí queda el odoo_task_id en la asistencia.

2
"Odoo ↑" — empujar datos

POST /odoo/to-odoo envía los datos de la asistencia a la tarea de Odoo.

3
"↙ Odoo" — traer cambios

POST /odoo/sync-from-odoo trae de Odoo las novedades de la tarea.

ℹ️
Ningún botón "abre" la tarea en Odoo

Los botones sincronizan datos (crear / empujar / traer). No existe un botón que abra la tarea en la interfaz de Odoo.

⚖️
Cierre automático por webhook (fail-closed)

El cierre desde Odoo llega por el webhook POST /odoo/webhook-stage, protegido por un secreto en la URL. Para AT/RB, el estado "Finalizado" de Odoo se traduce a "Resuelto" en ITS. El webhook es fail-closed: si el secreto no coincide, responde 503 y no procesa nada.

Reporte

El detalle de cada asistencia ofrece tres salidas del reporte:

BotónQué hace
PDFImprime el reporte (para PDF/papel).
CorreoEnvía el reporte por email, con adjunto.
ExportarImprime la grilla filtrada.

Tabla de acciones

AcciónEndpointCondiciones
CrearPOST /asistenciasAlta transaccional.
Cambiar estadoPATCH /asistencias/{id}/estadoSin motivo (tampoco al Cancelar).
EditarPUT /asistencias/{id}409 si está archivada.
ArchivarPATCH /asistencias/{id}/archivarMotivo ≥ 5 caracteres (en pantalla).
RestaurarPATCH /asistencias/{id}/restaurarSolo administrador.
EliminarDELETENo existe → 405.
VerGET /asistencias/{id}
ListarGET /asistencias?incluir_archivados=
Crear tarea OdooPOST /odoo/from-odooRequiere lab vinculado a Odoo.
Push a OdooPOST /odoo/to-odoo
Sync desde OdooPOST /odoo/sync-from-odoo
⚖️
Sin eliminación — solo archivado con motivo

No hay borrado: cualquier DELETE responde 405. Para dar de baja se archiva con motivo (mínimo 5 caracteres), queda en el audit trail y solo un administrador puede restaurar. La edición sobre una asistencia archivada se bloquea con 409.

⚖️
Trazabilidad de STD y audit trail contemporáneo

Los STD usados en la asistencia quedan registrados en el logbook (con el certificado y vencimiento vigentes al momento del uso). Cada acción sobre la AT/RB se registra de forma contemporánea en el audit trail (ALCOA+).


Preguntas frecuentes

Al guardar la AT/RB, ¿se crea sola la tarea en Odoo?+
No. Guardar la asistencia no crea nada en Odoo. La tarea se crea con una acción manual aparte: el botón "Crear Odoo" (POST /odoo/from-odoo), que además requiere que el laboratorio esté vinculado a Odoo (partner).
¿Por qué no veo mis AT "En Ejecución" con el filtro por defecto?+
Porque el filtro "Activos" muestra solo Por Realizar y Programado. "En Ejecución" queda fuera. Cambiá el filtro a "Todos" o al estado específico para verlas.
¿Cuándo aparece el botón "→ RB" y qué hereda la nueva RB?+
Aparece en toda AT no archivada, en cualquier estado (no hace falta que esté Resuelta). La RB nueva hereda equipo, usuario, módulos y consumibles; no hereda técnicos, STD ni reporte. La AT original pasa a Resuelto con el reporte de cierre que escribís.
¿Puedo asignar varios técnicos a una misma AT/RB?+
Sí, la selección de técnicos es múltiple. El primero de los seleccionados queda como técnico asignado.
¿Cuál es la diferencia entre Cancelar y Archivar?+
Cancelar es un estado (Cancelado) y no pide motivo. Archivar saca el registro de la vista activa, exige motivo (≥5 caracteres) y solo un administrador puede restaurarlo. En ambos casos el registro permanece en el sistema.