🏢 Laboratorios

Laboratorios, sectores y usuarios

El módulo Laboratorios organiza a los clientes de ION-target en una jerarquía de tres niveles: Laboratorio → Sector → Usuario. Todo se administra desde una única pantalla de tarjetas expandibles (acordeón), sin subpáginas. Es el punto de partida del sistema: los equipos, servicios y reportes cuelgan siempre de un sector de un laboratorio.

⚖️
Sin eliminaciones — solo archivado

Ningún laboratorio, sector ni usuario puede borrarse. La API responde 405 a cualquier DELETE. Para dar de baja se archiva con un motivo obligatorio, y el registro queda consultable con el toggle "Ver archivados". Restaurar es una acción exclusiva de administradores.

La jerarquía de tres niveles

NivelQué representaCuelga de
LaboratorioEl cliente (empresa farmacéutica). Tiene datos de contacto y vínculo con Odoo.— (raíz)
SectorUn área dentro del laboratorio (Control de Calidad, Desarrollo Analítico, Biológicos…).Laboratorio
UsuarioUna persona del sector (analista, jefe de laboratorio, contacto). No es una credencial de login.Sector
ℹ️
Un usuario del sector no es un usuario de login

El modal de usuario de este módulo registra al contacto/responsable del sector: no tiene campo de contraseña ni de administrador. Las credenciales de acceso al sistema se gestionan aparte, desde Administración.

Campos de cada nivel

Laboratorio

CampoObligatorioDetalle
Nombre✅ SíNombre del cliente. Se valida en el formulario y en el backend.
DirecciónTexto libre; se muestra junto al nombre.
TeléfonoVisible en el modal de edición.
EmailEn el alta se valida el formato; en la edición se acepta tal cual (tolera correos históricos). Se muestra como enlace mailto:.
UbicaciónTexto libre para el mapa. Si está cargado aparece un botón "Mapa" que abre Google Maps.

Sector

CampoObligatorioDetalle
Nombre✅ SíEl sistema colorea el badge según el área (Control de Calidad = verde, Desarrollo Analítico = naranja, Biológicos = violeta, Procesos = amarillo, Microbiología = rosa; cualquier otro nombre recibe un color derivado).
DescripciónTexto libre junto al badge.
Laboratorio✅ (automático)Se asigna solo, según el laboratorio donde abriste el modal. No hay selector manual.

Usuario

CampoObligatorioDetalle
Nombre / Apellido✅ SíAmbos son obligatorios en el backend.
EmailÚnico en todo el sistema: dos usuarios no pueden compartir email, aunque sean de laboratorios distintos.
RolEtiqueta libre (Analista, Jefe de laboratorio…). Se muestra como chip.
Sector✅ (automático)Se asigna según el sector donde abriste el modal.
Usuario primarioMarca al responsable por defecto del sector. Solo uno activo por sector. Al designar otro, el anterior se libera automáticamente.
Técnico OdooVincula a una cuenta interna de Odoo (res.users), para asignación de tareas. Badge violeta.
Contacto OdooVincula a un contacto/persona del CRM de Odoo (res.partner). Badge celeste.

Acciones y estados

Cada nivel se crea, edita, archiva y restaura de forma independiente. La pantalla carga los tres listados en paralelo y arma la jerarquía en memoria.

AcciónEndpointQuién / condiciones
Crear laboratorioPOST /laboratorios/Nombre obligatorio.
Editar laboratorioPUT /laboratorios/{id}Bloqueado (409) si está archivado.
Archivar laboratorioPATCH /laboratorios/{id}/archivarMotivo obligatorio.
Restaurar laboratorioPATCH /laboratorios/{id}/restaurarSolo administrador (403 si no).
Crear / editar sectorPOST /sectores/ · PUT /sectores/{id}Nombre obligatorio; laboratorio automático.
Archivar / restaurar sectorPATCH /sectores/{id}/archivar · /restaurarRestaurar solo administrador.
Crear / editar usuarioPOST /usuarios/ · PUT /usuarios/{id}Nombre y apellido obligatorios.
Archivar usuarioPATCH /admin/usuarios/{id}/archivarSolo administrador (ruta admin).
Marcar primarioPUT /usuarios/{id} (es_primario)Libera al primario anterior del sector.
⚠️
Archivar no es en cascada

Archivar un laboratorio no archiva sus sectores ni usuarios: quedan activos "bajo" un laboratorio archivado. Archivá cada nivel por separado si corresponde. (Del mismo modo, restaurar un nivel no restaura los que estén archivados debajo.)

Integración con Odoo

El laboratorio se vincula a la empresa en Odoo (odoo_partner_id); los usuarios pueden vincularse a un técnico interno y/o a un contacto del CRM. El botón "Sync Odoo" del encabezado intenta completar esos vínculos automáticamente por email.

1
Sync Odoo

POST /odoo/sincronizar-usuarios cruza los usuarios de ITS con Odoo por email. Solo completa los que están vacíos (nunca pisa un vínculo existente) y devuelve cuántos técnicos y contactos vinculó y cuántos quedaron "sin match".

2
Buscador de contacto Odoo

En el modal de usuario, al escribir 3 o más letras se consulta GET /odoo/contactos?q=… (trae de a 20). En edición, el contacto ya guardado se resuelve por su ID y se marca "· archivado en Odoo" si allí fue dado de baja, en lugar de aparecer como "sin vincular".

💡
Técnico ≠ Contacto

"Técnico Odoo" apunta a una cuenta de usuario interno (para asignar tareas); "Contacto Odoo" apunta a un contacto/persona del CRM. Un usuario puede tener uno, ambos o ninguno.


Preguntas frecuentes

¿Por qué no puedo eliminar un laboratorio, sector o usuario?+
Por política GMP no existe el borrado: la API responde 405 a cualquier DELETE. Se archiva con un motivo (mínimo 5 caracteres) y queda en el audit trail. Un registro archivado se puede restaurar, pero solo un administrador.
Activé "Ver archivados" pero no aparecen los usuarios archivados.+
El listado de usuarios de esta pantalla siempre oculta los archivados (el parámetro solo lo aplican Laboratorios y Sectores). Para ver o restaurar usuarios archivados, usá el panel de Administración.
¿Qué diferencia hay entre "Técnico Odoo" y "Contacto Odoo"?+
"Técnico Odoo" vincula la persona a una cuenta interna de Odoo (para asignar tareas); "Contacto Odoo" la vincula a un contacto del CRM. Son independientes. El botón "Sync Odoo" intenta completarlos por email.
¿Para qué sirve el "Usuario primario" del sector?+
Es el responsable por defecto que se asigna al crear servicios de ese sector. Solo puede haber uno activo por sector: al marcar un nuevo primario, el anterior se libera automáticamente (y queda en el audit trail).
Cargo un email que ya existe y falla. ¿Por qué?+
El email de usuario es único en todo el sistema, no solo dentro del laboratorio. Dos usuarios no pueden compartir el mismo email. En el alta, además, se valida el formato del correo.