From d709c5c1c7a88c8fce23c89974efe113cede1c8f Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Tue, 15 Jul 2025 10:33:02 -0600 Subject: [PATCH] =?UTF-8?q?docs:=20Plan=20de=20implementaci=C3=B3n=20para?= =?UTF-8?q?=20issue=20#51=20-=20Cat=C3=A1logo=20de=20par=C3=A1metros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Arquitectura de 3 modelos: parameter, template.parameter, parameter.range - 13 tareas organizadas en 4 fases - Cronograma estimado de 7-9 días - Incluye migración de datos existentes - Plan detallado con consideraciones técnicas y riesgos 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../plans/issue-51-implementation-plan.md | 173 ++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 documents/plans/issue-51-implementation-plan.md diff --git a/documents/plans/issue-51-implementation-plan.md b/documents/plans/issue-51-implementation-plan.md new file mode 100644 index 0000000..9705a7b --- /dev/null +++ b/documents/plans/issue-51-implementation-plan.md @@ -0,0 +1,173 @@ +# 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. \ No newline at end of file