# Plan de Implementación - Issue #51: Catálogo de Parámetros de Laboratorio ## Objetivo Implementar un catálogo maestro de parámetros de laboratorio con configuración por análisis y rangos de referencia flexibles basados en edad, sexo y otras condiciones del paciente. ## Arquitectura Propuesta ### Modelos Principales 1. **lims.analysis.parameter** - Catálogo maestro de parámetros 2. **product.template.parameter** - Asociación parámetro-análisis 3. **lims.parameter.range** - Rangos de referencia flexibles 4. **lims.result** (modificado) - Usar parameter_id en lugar de parameter_name ## Fases de Implementación ### Fase 1: Creación de Modelos Base (Tasks 1-4) **Objetivo**: Establecer la estructura de datos fundamental #### Task 1: Crear modelo lims.analysis.parameter - Crear archivo `lims_management/models/analysis_parameter.py` - Definir campos: name, code, value_type, unit, selection_values, description, active - Implementar constraints y validaciones - Crear vistas (list, form) para gestión del catálogo - Agregar menú de configuración - Crear permisos de seguridad #### Task 2: Crear modelo product.template.parameter - Crear archivo `lims_management/models/product_template_parameter.py` - Definir relación entre product.template y lims.analysis.parameter - Implementar campos: sequence, required, instructions - Agregar constraint de unicidad - Crear vista embebida en product.template - Actualizar herencia de product.template #### Task 3: Crear modelo lims.parameter.range - Crear archivo `lims_management/models/parameter_range.py` - Implementar campos de condiciones: gender, age_min, age_max, pregnant - Implementar campos de valores: normal_min/max, critical_min/max - Crear método _compute_name() - Agregar constraint de unicidad - Crear vistas de configuración #### Task 4: Agregar método _compute_age() en res.partner - Extender modelo res.partner - Implementar cálculo de edad basado en birth_date - Agregar campo is_pregnant (Boolean) - Crear tests unitarios para el cálculo ### Fase 2: Migración y Adaptación (Tasks 5-7) **Objetivo**: Adaptar el sistema existente al nuevo modelo #### Task 5: Modificar modelo lims.result - Cambiar parameter_name (Char) a parameter_id (Many2one) - Mantener parameter_name como campo related (compatibilidad) - Implementar _compute_applicable_range() - Actualizar _compute_is_out_of_range() para usar rangos flexibles - Crear script de migración de datos #### Task 6: Actualizar generación automática de resultados - Modificar _generate_test_results() en lims.test - Generar líneas basadas en product.template.parameter - Respetar orden (sequence) y obligatoriedad - Asignar tipos de dato correctos #### Task 7: Eliminar modelo obsoleto lims.analysis.range - Remover archivo del modelo - Eliminar referencias en product.template - Actualizar vistas que lo referencian - Limpiar datos de demo - Actualizar __init__.py y __manifest__.py ### Fase 3: Interfaz de Usuario (Tasks 8-10) **Objetivo**: Crear interfaces intuitivas para configuración y uso #### Task 8: Crear vistas de configuración de parámetros - Vista de catálogo de parámetros (búsqueda, filtros) - Formulario de parámetro con smart buttons - Vista de configuración de parámetros por análisis - Vista de rangos con filtros por parámetro #### Task 9: Actualizar vistas de ingreso de resultados - Adaptar formulario de lims.result - Mostrar tipo de dato esperado - Validación en tiempo real - Indicadores visuales de valores fuera de rango - Mostrar rango aplicable según paciente #### Task 10: Crear wizards de configuración masiva - Wizard para copiar configuración entre análisis - Wizard para importar parámetros desde CSV - Wizard para aplicar rangos a múltiples parámetros ### Fase 4: Datos y Validación (Tasks 11-13) **Objetivo**: Poblar el sistema con datos útiles y validar funcionamiento #### Task 11: Crear datos de demostración - Parámetros comunes de hematología - Parámetros de química sanguínea - Configuración para análisis existentes - Rangos por edad/sexo realistas - Casos de prueba especiales #### Task 12: Desarrollar tests automatizados - Tests unitarios para modelos - Tests de integración para flujos - Tests de validación de rangos - Tests de migración de datos - Tests de rendimiento #### Task 13: Actualizar reportes - Modificar report_test_result - Incluir información del catálogo - Mostrar rangos aplicables - Resaltar valores anormales - Agregar interpretación cuando esté disponible ## Consideraciones Técnicas ### Migración de Datos - Script Python para migrar parameter_name existentes - Crear parámetros automáticamente desde histórico - Mantener compatibilidad durante transición - Backup antes de migración ### Performance - Índices en campos de búsqueda frecuente - Cache para rangos aplicables - Lazy loading en vistas con muchos parámetros ### Seguridad - Solo administradores pueden crear/modificar catálogo - Técnicos pueden ver pero no editar parámetros - Logs de auditoría para cambios en rangos ## Cronograma Estimado - **Fase 1**: 2-3 días (Modelos base y estructura) - **Fase 2**: 2 días (Migración y adaptación) - **Fase 3**: 2 días (Interfaces de usuario) - **Fase 4**: 1-2 días (Datos y validación) **Total estimado**: 7-9 días de desarrollo ## Riesgos y Mitigaciones 1. **Riesgo**: Pérdida de datos durante migración - **Mitigación**: Scripts de backup y rollback 2. **Riesgo**: Resistencia al cambio de usuarios - **Mitigación**: Mantener compatibilidad temporal, capacitación 3. **Riesgo**: Complejidad en rangos múltiples - **Mitigación**: UI intuitiva, valores por defecto sensatos ## Criterios de Éxito - [ ] Todos los tests automatizados pasan - [ ] Migración sin pérdida de datos - [ ] Validación automática funcional - [ ] Reportes muestran información correcta - [ ] Performance aceptable (< 2s carga de resultados) - [ ] Documentación actualizada ## Próximos Pasos 1. Revisar y aprobar este plan 2. Comenzar con Task 1: Crear modelo lims.analysis.parameter 3. Seguir el orden de las fases para mantener coherencia 4. Validar cada fase antes de continuar --- **Nota**: Este plan está sujeto a ajustes según se descubran nuevos requerimientos o complejidades durante la implementación.