
- Reducir alcance a lo especificado en Issue #8 - Eliminar funcionalidades de otros issues (PDF, seguridad avanzada) - Agregar validación opcional configurable - Actualizar estimación a 9 horas - 7 tareas principales enfocadas en modelos e interfaz
6.7 KiB
6.7 KiB
Plan de Implementación - Issue #8: Gestión de Pruebas y Resultados
Objetivo
Implementar los modelos y la interfaz básica para la gestión de pruebas y resultados de laboratorio, específicamente los modelos lims.test
y lims.result
con entrada dinámica de resultados.
Análisis de Requisitos
Funcionalidad Esperada (según Issue #8)
- Modelo lims.test: Representar la ejecución de un análisis con estados
- Modelo lims.result: Almacenar cada valor de resultado con soporte para múltiples tipos
- Interfaz de entrada dinámica: Vista formulario con lista editable de resultados
- Resaltado visual: Mostrar en rojo los resultados fuera de rango
- Validación opcional: Permitir configurar si se requiere validación por administrador
Modelos de Datos Requeridos (según Issue #8)
- lims.test: Representa la ejecución de un análisis
- lims.result: Almacena cada valor de resultado
- lims.test.parameter: Modelo referenciado (asumimos ya existe o se creará)
Tareas de Implementación
1. Crear modelo lims.test
Archivo: lims_management/models/lims_test.py
- Definir modelo según especificación del issue:
sale_order_line_id = fields.Many2one('sale.order.line', string='Línea de Orden') patient_id = fields.Many2one('res.partner', string='Paciente', related='sale_order_line_id.order_id.partner_id') product_id = fields.Many2one('product.product', string='Análisis', related='sale_order_line_id.product_id') sample_id = fields.Many2one('stock.lot', string='Muestra') state = fields.Selection([ ('draft', 'Borrador'), ('in_process', 'En Proceso'), ('result_entered', 'Resultado Ingresado'), ('validated', 'Validado'), ('cancelled', 'Cancelado') ], string='Estado', default='draft') validator_id = fields.Many2one('res.users', string='Validador') validation_date = fields.Datetime(string='Fecha de Validación') require_validation = fields.Boolean(string='Requiere Validación', compute='_compute_require_validation')
- Implementar _compute_require_validation basado en configuración
- Agregar métodos de transición de estados
2. Crear modelo lims.result
Archivo: lims_management/models/lims_result.py
- Definir modelo según especificación:
test_id = fields.Many2one('lims.test', string='Prueba', required=True, ondelete='cascade') parameter_id = fields.Many2one('lims.test.parameter', string='Parámetro') value_numeric = fields.Float(string='Valor Numérico') value_text = fields.Char(string='Valor de Texto') value_selection = fields.Selection([], string='Valor de Selección') is_out_of_range = fields.Boolean(string='Fuera de Rango', compute='_compute_is_out_of_range') notes = fields.Text(string='Notas del Técnico')
- Implementar _compute_is_out_of_range para detectar valores anormales
- Agregar validación para asegurar que solo un tipo de valor esté lleno
3. Desarrollar interfaz de ingreso de resultados
Archivo: lims_management/views/lims_test_views.xml
- Crear vista formulario para lims.test con:
- Información de cabecera (paciente, análisis, muestra)
- Lista editable (One2many) de lims.result
- Campos dinámicos según parámetros del análisis
- Implementar widget o CSS para resaltar en rojo valores fuera de rango
- Agregar botones de acción según estado
4. Implementar lógica visual para valores fuera de rango
Archivo: lims_management/static/src/
(CSS/JS)
- Crear CSS para clase .out-of-range con color rojo
- Implementar widget o computed field que aplique la clase
- Asegurar que funcione en vista formulario y lista
5. Agregar configuración de validación opcional
Archivo: lims_management/models/res_config_settings.py
- Agregar campo booleano lims_require_validation
- Extender res.config.settings para incluir esta configuración
- Modificar lims.test para usar esta configuración en flujo de trabajo
6. Crear vistas básicas
Archivo: lims_management/views/lims_test_views.xml
- Vista lista de pruebas con campos básicos
- Vista kanban agrupada por estado
- Menú de acceso en Laboratorio > Pruebas
7. Crear datos de demostración básicos
Archivo: lims_management/demo/lims_test_demo.xml
- Crear algunos registros lims.test de ejemplo
- Agregar resultados de demostración
- Incluir casos con valores dentro y fuera de rango
Consideraciones Técnicas
Performance
- Usar compute fields con store=True para is_out_of_range
- Carga eficiente de parámetros relacionados
Usabilidad
- Interfaz clara para entrada de resultados
- Feedback visual inmediato para valores fuera de rango
- Navegación intuitiva entre estados
Validación de Datos
- Solo un tipo de valor debe estar lleno por resultado
- Validar que el parámetro corresponda al análisis
- Estados coherentes con el flujo de trabajo
Flujo de Trabajo
graph TD
A[Línea de Orden] --> B[Crear lims.test]
B --> C[Estado: draft]
C --> D[Estado: in_process]
D --> E[Técnico Ingresa Resultados]
E --> F[Estado: result_entered]
F --> G{¿Requiere Validación?}
G -->|Sí| H[Esperar Validación]
G -->|No| I[Proceso Completo]
H --> J[Estado: validated]
Criterios de Aceptación (según Issue #8)
- Modelo lims.test creado con todos los campos especificados
- Modelo lims.result creado con soporte para múltiples tipos de valor
- Interfaz de formulario con lista editable de resultados
- Valores fuera de rango se muestran en rojo
- La validación por administrador es configurable
- Los campos relacionados (patient_id, product_id) funcionan correctamente
Estimación de Tiempo
- Tarea 1: 2 horas (modelo lims.test)
- Tarea 2: 1.5 horas (modelo lims.result)
- Tarea 3: 2 horas (interfaz de entrada)
- Tarea 4: 1 hora (lógica visual)
- Tarea 5: 1 hora (configuración)
- Tareas 6-7: 1.5 horas (vistas y demo)
Total estimado: 9 horas
Dependencias
- Issue #31: Configuración inicial del módulo ✓
- Issue #32: Generación automática de muestras ✓
- Modelo lims.test.parameter (debe existir o crearse)
- Módulos de Odoo: sale, stock
Riesgos y Mitigaciones
-
Riesgo: El modelo lims.test.parameter no está definido
- Mitigación: Crear modelo básico o usar product.product temporalmente
-
Riesgo: Complejidad en la detección de valores fuera de rango
- Mitigación: Implementar lógica simple inicialmente
-
Riesgo: Integración con flujo existente de órdenes
- Mitigación: Crear pruebas manualmente en primera versión