clinical_laboratory/lims_management/security/lims_security.xml
Luis Ernesto Portillo Zaldivar 58e1648493 feat(#9): Implementar flujo de validación y seguridad
- Ajustar permisos base: recepcionistas solo lectura, técnicos sin eliminar
- Crear reglas de registro para control granular por estado
- Implementar verificación de permisos en todas las transiciones
- Agregar mail.thread a stock.lot para trazabilidad completa
- Validar transiciones de estado y muestras asociadas
- Actualizar vistas con restricciones según grupos de usuario
- Mejorar mensajes del chatter con más contexto

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-15 19:19:51 -06:00

114 lines
5.7 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="module_category_lims" model="ir.module.category">
<field name="name">Laboratorio</field>
<field name="description">Permisos y roles para el módulo de Laboratorio Clínico.</field>
<field name="sequence">20</field>
</record>
<record id="group_lims_receptionist" model="res.groups">
<field name="name">Laboratorio / Recepcionista</field>
<field name="category_id" ref="module_category_lims"/>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
<field name="comment">
El usuario puede registrar pacientes, crear órdenes de laboratorio y generar facturas. No tiene acceso a los resultados clínicos.
</field>
</record>
<record id="group_lims_technician" model="res.groups">
<field name="name">Laboratorio / Técnico</field>
<field name="category_id" ref="module_category_lims"/>
<field name="implied_ids" eval="[(4, ref('group_lims_receptionist'))]"/>
<field name="comment">
El usuario puede gestionar muestras, registrar la toma e ingresar resultados de los análisis. No puede validar resultados.
</field>
</record>
<record id="group_lims_admin" model="res.groups">
<field name="name">Laboratorio / Administrador</field>
<field name="category_id" ref="module_category_lims"/>
<field name="implied_ids" eval="[(4, ref('group_lims_technician'))]"/>
<field name="comment">
El usuario tiene acceso completo al módulo LIMS, incluyendo la validación de resultados, configuración y reportes.
</field>
</record>
<!-- Reglas de registro para lims.test -->
<!-- Recepcionistas: Solo pueden ver pruebas, no editarlas -->
<record id="lims_test_receptionist_read_rule" model="ir.rule">
<field name="name">Recepcionista: Solo lectura en pruebas</field>
<field name="model_id" ref="model_lims_test"/>
<field name="groups" eval="[(4, ref('group_lims_receptionist'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
<field name="domain_force">[(1, '=', 1)]</field>
</record>
<!-- Técnicos: Pueden editar solo pruebas no validadas -->
<record id="lims_test_technician_write_rule" model="ir.rule">
<field name="name">Técnico: Editar solo pruebas no validadas</field>
<field name="model_id" ref="model_lims_test"/>
<field name="groups" eval="[(4, ref('group_lims_technician'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="False"/>
<field name="domain_force">[('state', '!=', 'validated')]</field>
</record>
<!-- Administradores: Acceso completo (sin restricciones) -->
<record id="lims_test_admin_all_rule" model="ir.rule">
<field name="name">Administrador: Acceso completo a pruebas</field>
<field name="model_id" ref="model_lims_test"/>
<field name="groups" eval="[(4, ref('group_lims_admin'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="True"/>
<field name="domain_force">[(1, '=', 1)]</field>
</record>
<!-- Reglas de registro para lims.result -->
<!-- Recepcionistas: Solo pueden ver resultados -->
<record id="lims_result_receptionist_read_rule" model="ir.rule">
<field name="name">Recepcionista: Solo lectura en resultados</field>
<field name="model_id" ref="model_lims_result"/>
<field name="groups" eval="[(4, ref('group_lims_receptionist'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
<field name="domain_force">[(1, '=', 1)]</field>
</record>
<!-- Técnicos: Pueden editar resultados de pruebas no validadas -->
<record id="lims_result_technician_write_rule" model="ir.rule">
<field name="name">Técnico: Editar resultados de pruebas no validadas</field>
<field name="model_id" ref="model_lims_result"/>
<field name="groups" eval="[(4, ref('group_lims_technician'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="False"/>
<field name="domain_force">[('test_id.state', '!=', 'validated')]</field>
</record>
<!-- Administradores: Acceso completo a resultados -->
<record id="lims_result_admin_all_rule" model="ir.rule">
<field name="name">Administrador: Acceso completo a resultados</field>
<field name="model_id" ref="model_lims_result"/>
<field name="groups" eval="[(4, ref('group_lims_admin'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="True"/>
<field name="domain_force">[(1, '=', 1)]</field>
</record>
</data>
</odoo>