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.
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
| Nivel | Qué representa | Cuelga de |
|---|---|---|
| Laboratorio | El cliente (empresa farmacéutica). Tiene datos de contacto y vínculo con Odoo. | — (raíz) |
| Sector | Un área dentro del laboratorio (Control de Calidad, Desarrollo Analítico, Biológicos…). | Laboratorio |
| Usuario | Una persona del sector (analista, jefe de laboratorio, contacto). No es una credencial de login. | Sector |
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
| Campo | Obligatorio | Detalle |
|---|---|---|
| Nombre | ✅ Sí | Nombre del cliente. Se valida en el formulario y en el backend. |
| Dirección | — | Texto libre; se muestra junto al nombre. |
| Teléfono | — | Visible en el modal de edición. |
| — | En el alta se valida el formato; en la edición se acepta tal cual (tolera correos históricos). Se muestra como enlace mailto:. | |
| Ubicación | — | Texto libre para el mapa. Si está cargado aparece un botón "Mapa" que abre Google Maps. |
Sector
| Campo | Obligatorio | Detalle |
|---|---|---|
| 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ón | — | Texto libre junto al badge. |
| Laboratorio | ✅ (automático) | Se asigna solo, según el laboratorio donde abriste el modal. No hay selector manual. |
Usuario
| Campo | Obligatorio | Detalle |
|---|---|---|
| Nombre / Apellido | ✅ Sí | Ambos son obligatorios en el backend. |
| — | Único en todo el sistema: dos usuarios no pueden compartir email, aunque sean de laboratorios distintos. | |
| Rol | — | Etiqueta libre (Analista, Jefe de laboratorio…). Se muestra como chip. |
| Sector | ✅ (automático) | Se asigna según el sector donde abriste el modal. |
| Usuario primario | — | Marca al responsable por defecto del sector. Solo uno activo por sector. Al designar otro, el anterior se libera automáticamente. |
| Técnico Odoo | — | Vincula a una cuenta interna de Odoo (res.users), para asignación de tareas. Badge violeta. |
| Contacto Odoo | — | Vincula 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ón | Endpoint | Quién / condiciones |
|---|---|---|
| Crear laboratorio | POST /laboratorios/ | Nombre obligatorio. |
| Editar laboratorio | PUT /laboratorios/{id} | Bloqueado (409) si está archivado. |
| Archivar laboratorio | PATCH /laboratorios/{id}/archivar | Motivo obligatorio. |
| Restaurar laboratorio | PATCH /laboratorios/{id}/restaurar | Solo administrador (403 si no). |
| Crear / editar sector | POST /sectores/ · PUT /sectores/{id} | Nombre obligatorio; laboratorio automático. |
| Archivar / restaurar sector | PATCH /sectores/{id}/archivar · /restaurar | Restaurar solo administrador. |
| Crear / editar usuario | POST /usuarios/ · PUT /usuarios/{id} | Nombre y apellido obligatorios. |
| Archivar usuario | PATCH /admin/usuarios/{id}/archivar | Solo administrador (ruta admin). |
| Marcar primario | PUT /usuarios/{id} (es_primario) | Libera al primario anterior del sector. |
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.
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".
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 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
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.