docs(#8): Crear plan detallado para gestión de pruebas y resultados
- Definición de 10 tareas principales - Modelos: lims.test, lims.test.parameter, lims.result - Flujo de validación de dos pasos - Generación de reportes PDF - Sistema de permisos por roles - Integración con órdenes y muestras existentes
This commit is contained in:
parent
67048b1c4b
commit
d285906b7b
225
documents/plans/ISSUE8_PLAN.md
Normal file
225
documents/plans/ISSUE8_PLAN.md
Normal file
|
@ -0,0 +1,225 @@
|
|||
# Plan de Implementación - Issue #8: Gestión de Pruebas y Resultados
|
||||
|
||||
## Objetivo
|
||||
Implementar el sistema completo de gestión de pruebas de laboratorio, incluyendo definición de parámetros, entrada de resultados, validación y generación de reportes.
|
||||
|
||||
## Análisis de Requisitos
|
||||
|
||||
### Funcionalidad Esperada
|
||||
1. **Catálogo de Pruebas con Parámetros**: Cada análisis debe tener parámetros configurables con unidades y rangos de referencia
|
||||
2. **Entrada de Resultados**: Interfaz dinámica para captura de resultados según el tipo de análisis
|
||||
3. **Validación de Resultados**: Flujo de dos pasos (técnico ingresa, administrador valida)
|
||||
4. **Generación de Reportes**: PDF con formato profesional y resultados fuera de rango resaltados
|
||||
5. **Control de Acceso**: Permisos basados en roles para técnicos y administradores
|
||||
|
||||
### Modelos de Datos Requeridos
|
||||
1. **lims.test**: Representa una prueba de laboratorio en progreso
|
||||
2. **lims.test.parameter**: Define parámetros para cada tipo de prueba
|
||||
3. **lims.result**: Almacena los resultados reales de las pruebas
|
||||
|
||||
## Tareas de Implementación
|
||||
|
||||
### 1. Crear modelo lims.test.parameter
|
||||
**Archivo:** `lims_management/models/test_parameter.py`
|
||||
- [ ] Definir modelo con campos:
|
||||
```python
|
||||
name = fields.Char(string='Parámetro', required=True)
|
||||
product_id = fields.Many2one('product.product', string='Análisis',
|
||||
domain=[('is_analysis', '=', True)])
|
||||
unit = fields.Char(string='Unidad de Medida')
|
||||
value_type = fields.Selection([
|
||||
('numeric', 'Numérico'),
|
||||
('text', 'Texto'),
|
||||
('selection', 'Selección'),
|
||||
('boolean', 'Sí/No')
|
||||
], string='Tipo de Valor', required=True)
|
||||
normal_min = fields.Float(string='Valor Normal Mínimo')
|
||||
normal_max = fields.Float(string='Valor Normal Máximo')
|
||||
selection_options = fields.Text(string='Opciones (para tipo selección)')
|
||||
sequence = fields.Integer(string='Secuencia', default=10)
|
||||
```
|
||||
- [ ] Agregar validaciones y constraints
|
||||
- [ ] Crear vista de configuración
|
||||
|
||||
### 2. Crear modelo lims.test
|
||||
**Archivo:** `lims_management/models/lims_test.py`
|
||||
- [ ] Definir modelo principal:
|
||||
```python
|
||||
name = fields.Char(string='Código de Prueba', required=True, readonly=True)
|
||||
sale_order_id = fields.Many2one('sale.order', string='Orden de Laboratorio')
|
||||
order_line_id = fields.Many2one('sale.order.line', string='Línea de Orden')
|
||||
product_id = fields.Many2one('product.product', string='Análisis')
|
||||
patient_id = fields.Many2one('res.partner', string='Paciente')
|
||||
sample_id = fields.Many2one('stock.lot', string='Muestra')
|
||||
state = fields.Selection([
|
||||
('pending', 'Pendiente'),
|
||||
('in_process', 'En Proceso'),
|
||||
('result_entered', 'Resultado Ingresado'),
|
||||
('validated', 'Validado'),
|
||||
('cancelled', 'Cancelado')
|
||||
], string='Estado', default='pending')
|
||||
technician_id = fields.Many2one('res.users', string='Técnico')
|
||||
validator_id = fields.Many2one('res.users', string='Validador')
|
||||
validation_date = fields.Datetime(string='Fecha de Validación')
|
||||
```
|
||||
- [ ] Implementar generación automática de código de prueba
|
||||
- [ ] Agregar métodos de transición de estados
|
||||
- [ ] Implementar creación automática desde orden confirmada
|
||||
|
||||
### 3. Crear modelo lims.result
|
||||
**Archivo:** `lims_management/models/lims_result.py`
|
||||
- [ ] Definir modelo de resultados:
|
||||
```python
|
||||
test_id = fields.Many2one('lims.test', string='Prueba', required=True)
|
||||
parameter_id = fields.Many2one('lims.test.parameter', string='Parámetro')
|
||||
value_numeric = fields.Float(string='Valor Numérico')
|
||||
value_text = fields.Text(string='Valor de Texto')
|
||||
value_selection = fields.Char(string='Valor de Selección')
|
||||
value_boolean = fields.Boolean(string='Valor Sí/No')
|
||||
is_normal = fields.Boolean(string='Dentro de Rango Normal', compute='_compute_is_normal')
|
||||
observations = fields.Text(string='Observaciones')
|
||||
attachment_ids = fields.Many2many('ir.attachment', string='Archivos Adjuntos')
|
||||
```
|
||||
- [ ] Implementar cálculo automático de is_normal
|
||||
- [ ] Agregar validaciones según tipo de valor
|
||||
|
||||
### 4. Implementar generación automática de pruebas
|
||||
**Archivo:** `lims_management/models/sale_order.py` (extender)
|
||||
- [ ] Al confirmar orden con análisis, crear registros lims.test
|
||||
- [ ] Vincular con muestras generadas automáticamente
|
||||
- [ ] Notificar en el chatter sobre pruebas creadas
|
||||
|
||||
### 5. Crear vistas de entrada de resultados
|
||||
**Archivo:** `lims_management/views/lims_test_views.xml`
|
||||
- [ ] Vista kanban por estado para gestión de pruebas
|
||||
- [ ] Vista formulario con:
|
||||
- Información del paciente y muestra (readonly)
|
||||
- Lista editable de resultados por parámetro
|
||||
- Destacar valores fuera de rango con color rojo
|
||||
- Botones de acción según estado
|
||||
- [ ] Vista lista con filtros y agrupaciones
|
||||
|
||||
### 6. Implementar flujo de validación
|
||||
**Archivo:** `lims_management/models/lims_test.py` (extender)
|
||||
- [ ] Método action_enter_results() - marca como resultado ingresado
|
||||
- [ ] Método action_validate() - valida resultados (solo administradores)
|
||||
- [ ] Método action_request_review() - solicita revisión
|
||||
- [ ] Agregar validaciones de permisos
|
||||
|
||||
### 7. Crear informe PDF de resultados
|
||||
**Archivos:**
|
||||
- `lims_management/report/test_results_report.xml`
|
||||
- `lims_management/report/test_results_template.xml`
|
||||
- [ ] Diseñar plantilla QWeb con:
|
||||
- Encabezado con logo del laboratorio
|
||||
- Información del paciente y orden
|
||||
- Tabla de resultados con formato:
|
||||
| Parámetro | Resultado | Unidad | Rango de Referencia |
|
||||
- Resaltar valores anormales
|
||||
- Sección de observaciones
|
||||
- Firma del validador
|
||||
- [ ] Configurar paper format A4
|
||||
|
||||
### 8. Implementar seguridad y permisos
|
||||
**Archivos:**
|
||||
- `lims_management/security/ir.model.access.csv` (actualizar)
|
||||
- `lims_management/security/security.xml` (actualizar)
|
||||
- [ ] Definir grupos:
|
||||
- Técnico de Laboratorio: crear/editar resultados
|
||||
- Administrador de Laboratorio: validar resultados
|
||||
- [ ] Crear reglas de registro para cada modelo
|
||||
- [ ] Implementar campo-nivel de seguridad para validación
|
||||
|
||||
### 9. Crear datos de demostración
|
||||
**Archivo:** `lims_management/demo/test_parameters_demo.xml`
|
||||
- [ ] Parámetros para hemograma completo
|
||||
- [ ] Parámetros para química sanguínea
|
||||
- [ ] Parámetros para uroanálisis
|
||||
- [ ] Crear algunas pruebas de ejemplo con resultados
|
||||
|
||||
### 10. Implementar notificaciones
|
||||
**Archivo:** `lims_management/models/lims_test.py` (extender)
|
||||
- [ ] Email al paciente cuando resultados están validados
|
||||
- [ ] Notificación al médico referente
|
||||
- [ ] Plantillas de email profesionales
|
||||
|
||||
## Consideraciones Técnicas
|
||||
|
||||
### Performance
|
||||
- Usar compute fields con store=True donde sea apropiado
|
||||
- Índices en campos de búsqueda frecuente (patient_id, state)
|
||||
- Lazy loading para attachments
|
||||
|
||||
### Usabilidad
|
||||
- Interfaz intuitiva para entrada rápida de resultados
|
||||
- Atajos de teclado para navegación entre campos
|
||||
- Autocompletado donde sea aplicable
|
||||
- Vista previa del PDF antes de enviar
|
||||
|
||||
### Validación de Datos
|
||||
- Validar rangos numéricos según parámetros
|
||||
- Prevenir modificación de resultados validados
|
||||
- Log de auditoría para cambios en resultados
|
||||
|
||||
### Integración
|
||||
- API REST para consulta de resultados (futuro)
|
||||
- Webhook para notificaciones externas
|
||||
- Exportación de resultados en formato HL7 (opcional)
|
||||
|
||||
## Flujo de Trabajo
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[Orden Confirmada] --> B[Generar Pruebas]
|
||||
B --> C[Estado: Pendiente]
|
||||
C --> D[Muestra Recibida]
|
||||
D --> E[Estado: En Proceso]
|
||||
E --> F[Técnico Ingresa Resultados]
|
||||
F --> G[Estado: Resultado Ingresado]
|
||||
G --> H{Validación por Admin}
|
||||
H -->|Aprobado| I[Estado: Validado]
|
||||
H -->|Rechazado| J[Solicitar Corrección]
|
||||
J --> F
|
||||
I --> K[Generar PDF]
|
||||
K --> L[Enviar Notificaciones]
|
||||
```
|
||||
|
||||
## Criterios de Aceptación
|
||||
|
||||
1. [ ] Los análisis tienen parámetros configurables con unidades y rangos
|
||||
2. [ ] La entrada de resultados es dinámica según el tipo de análisis
|
||||
3. [ ] Los valores fuera de rango se destacan visualmente
|
||||
4. [ ] El flujo de validación respeta los permisos por rol
|
||||
5. [ ] El PDF generado tiene formato profesional y es descargable
|
||||
6. [ ] Las notificaciones se envían automáticamente
|
||||
7. [ ] Existe trazabilidad completa de cambios
|
||||
8. [ ] La interfaz es intuitiva y eficiente
|
||||
|
||||
## Estimación de Tiempo
|
||||
|
||||
- Tareas 1-3: 3-4 horas (modelos y estructura)
|
||||
- Tarea 4: 1 hora (integración con órdenes)
|
||||
- Tarea 5: 2-3 horas (vistas complejas)
|
||||
- Tarea 6: 2 horas (flujo de validación)
|
||||
- Tarea 7: 3-4 horas (reporte PDF)
|
||||
- Tarea 8: 1-2 horas (seguridad)
|
||||
- Tareas 9-10: 2 horas (demo y notificaciones)
|
||||
|
||||
**Total estimado: 15-18 horas**
|
||||
|
||||
## Dependencias
|
||||
|
||||
- Issue #31: Configuración inicial del módulo ✓
|
||||
- Issue #32: Generación automática de muestras ✓
|
||||
- Módulos de Odoo: sale, stock, mail, report
|
||||
|
||||
## Riesgos y Mitigaciones
|
||||
|
||||
1. **Riesgo**: Complejidad en la entrada dinámica de resultados
|
||||
- **Mitigación**: Comenzar con tipos básicos y expandir gradualmente
|
||||
|
||||
2. **Riesgo**: Performance con muchos parámetros por prueba
|
||||
- **Mitigación**: Implementar paginación y carga diferida
|
||||
|
||||
3. **Riesgo**: Formato de PDF no cumple expectativas
|
||||
- **Mitigación**: Revisar ejemplos tempranos con usuario
|
Loading…
Reference in New Issue
Block a user