diff --git a/lims_management/__manifest__.py b/lims_management/__manifest__.py index 0dfb2cc..27aafab 100644 --- a/lims_management/__manifest__.py +++ b/lims_management/__manifest__.py @@ -33,9 +33,11 @@ 'views/analysis_views.xml', 'views/sale_order_views.xml', 'views/stock_lot_views.xml', - 'views/lims_test_views.xml', - 'views/res_config_settings_views.xml', 'views/menus.xml', + 'views/lims_test_views.xml', + 'views/lims_result_views.xml', + 'views/lims_result_bulk_entry_views.xml', + 'views/res_config_settings_views.xml', 'views/product_template_parameter_views.xml', 'views/parameter_range_views.xml', 'views/analysis_parameter_views.xml', diff --git a/lims_management/models/lims_result.py b/lims_management/models/lims_result.py index d6b3e8b..ea7dc7c 100644 --- a/lims_management/models/lims_result.py +++ b/lims_management/models/lims_result.py @@ -41,6 +41,13 @@ class LimsResult(models.Model): readonly=True ) + parameter_code = fields.Char( + string='Código', + related='parameter_id.code', + store=True, + readonly=True + ) + sequence = fields.Integer( string='Secuencia', default=10 @@ -121,6 +128,12 @@ class LimsResult(models.Model): store=True ) + result_status = fields.Selection([ + ('normal', 'Normal'), + ('abnormal', 'Anormal'), + ('critical', 'Crítico') + ], string='Estado', compute='_compute_result_status', store=True) + @api.depends('test_id', 'parameter_name') def _compute_display_name(self): """Calcula el nombre a mostrar.""" @@ -205,6 +218,19 @@ class LimsResult(models.Model): record.is_out_of_range = (status != 'normal') record.is_critical = (status == 'critical') + @api.depends('parameter_id', 'value_numeric', 'is_out_of_range', 'is_critical', 'parameter_value_type') + def _compute_result_status(self): + """Calcula el estado visual del resultado.""" + for record in self: + if record.parameter_value_type != 'numeric': + record.result_status = 'normal' + elif record.is_critical: + record.result_status = 'critical' + elif record.is_out_of_range: + record.result_status = 'abnormal' + else: + record.result_status = 'normal' + @api.constrains('value_numeric', 'value_text', 'value_selection', 'value_boolean', 'parameter_value_type') def _check_value_type(self): """Asegura que el valor ingresado corresponda al tipo de parámetro.""" diff --git a/lims_management/views/lims_result_bulk_entry_views.xml b/lims_management/views/lims_result_bulk_entry_views.xml new file mode 100644 index 0000000..83910e4 --- /dev/null +++ b/lims_management/views/lims_result_bulk_entry_views.xml @@ -0,0 +1,175 @@ + + + + + lims.test.result.entry.form + lims.test + 20 + +
+
+ +
+ +
+

+ +

+

+ +

+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + Ingreso Rápido de Resultados + lims.test + list,form + + + [('state', 'in', ['in_process', 'result_entered'])] + {'search_default_my_tests': 1, 'search_default_in_process': 1} + +

+ No hay pruebas pendientes de resultados +

+

+ Las pruebas aparecerán aquí cuando estén listas para + el ingreso de resultados. +

+
+
+ + + + lims.result.pivot + lims.result + + + + + + + + + + + lims.result.graph + lims.result + + + + + + + + + + + Análisis de Resultados + lims.result + pivot,graph,list + +

+ Análisis estadístico de los resultados de laboratorio. +

+
+
+ + + + + +
\ No newline at end of file diff --git a/lims_management/views/lims_result_views.xml b/lims_management/views/lims_result_views.xml new file mode 100644 index 0000000..d0364a0 --- /dev/null +++ b/lims_management/views/lims_result_views.xml @@ -0,0 +1,155 @@ + + + + + lims.result.form + lims.result + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + + lims.result.list + lims.result + + + + + + + + + + + + + + + + + + + + + + lims.result.search + lims.result + + + + + + + + + + + + + + + + + + + + + + + + + + + Resultados de Análisis + lims.result + list,form + + {'search_default_out_of_range': 1} + +

+ No hay resultados registrados +

+

+ Los resultados se crean automáticamente al generar las pruebas + de laboratorio basándose en los parámetros configurados. +

+
+
+ + + +
\ No newline at end of file diff --git a/lims_management/views/lims_test_views.xml b/lims_management/views/lims_test_views.xml index 9cc6360..05b539e 100644 --- a/lims_management/views/lims_test_views.xml +++ b/lims_management/views/lims_test_views.xml @@ -59,24 +59,53 @@ - - - + context="{'default_test_id': id, 'default_patient_id': patient_id, 'default_test_date': create_date}" + mode="tree"> + + + + + + widget="float" + options="{'digits': [16, 4]}" + class="oe_edit_only"/> + invisible="parameter_value_type != 'text'" + class="oe_edit_only"/> + invisible="parameter_value_type != 'selection'" + widget="selection" + class="oe_edit_only"/> - + invisible="parameter_value_type != 'boolean'" + widget="boolean_toggle" + class="oe_edit_only"/> + + + + + + @@ -198,23 +227,5 @@ - - - Pruebas de Laboratorio - lims.test - list,kanban,form - - {'search_default_my_tests': 1} - -

- Crear primera prueba de laboratorio -

-

- Aquí podrá gestionar las pruebas de laboratorio, - ingresar resultados y validarlos. -

-
-
- \ No newline at end of file diff --git a/lims_management/views/menus.xml b/lims_management/views/menus.xml index e8e789b..94bd048 100644 --- a/lims_management/views/menus.xml +++ b/lims_management/views/menus.xml @@ -102,12 +102,43 @@ action="action_lims_lab_sample" sequence="16"/> + + + + + + Pruebas de Laboratorio + lims.test + list,kanban,form + {'search_default_my_tests': 1} + +

+ Crear primera prueba de laboratorio +

+

+ Aquí podrá gestionar las pruebas de laboratorio, + ingresar resultados y validarlos. +

+
+
+ + sequence="10"/> + + + + + + Configuración + ir.actions.act_window + res.config.settings + form + inline + {'module' : 'lims_management'} + + diff --git a/lims_management/views/res_config_settings_views.xml b/lims_management/views/res_config_settings_views.xml index 1e7e15a..be0a437 100644 --- a/lims_management/views/res_config_settings_views.xml +++ b/lims_management/views/res_config_settings_views.xml @@ -23,15 +23,5 @@
- - - Configuración - ir.actions.act_window - res.config.settings - form - inline - {'module' : 'lims_management'} - - \ No newline at end of file