
- Created verify_sample_relationships.py script to validate implementation - Updated ISSUE44_PLAN.md marking completed tasks - Created ISSUE44_IMPLEMENTATION.md with complete summary - Script verifies: - Analyses have sample type assignments - Sample types are properly configured - Stock.lot samples use new fields correctly - Field synchronization works properly All tasks for Issue #44 completed successfully. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
6.6 KiB
6.6 KiB
Plan de Implementación - Issue #44: Agregar relación entre análisis y tipos de muestra
Objetivo
Establecer una relación entre los productos tipo análisis (tests) y los tipos de muestra que requieren, para permitir la automatización de generación de muestras al confirmar órdenes de laboratorio.
Análisis Previo
Situación Actual
- Los productos tipo análisis (
is_analysis=True
) no tienen campo para indicar qué tipo de muestra requieren - Los productos tipo muestra (
is_sample_type=True
) existen pero no están relacionados con los análisis - El modelo
stock.lot
tienecontainer_type
como Selection hardcodeado, no como relación con productos
Impacto
- Sin esta relación, no es posible automatizar la generación de muestras (Issue #32)
- No se puede validar que se use el contenedor correcto para cada análisis
- Dificulta la agrupación de análisis que usan el mismo tipo de muestra
Tareas de Implementación
1. Modificar el modelo ProductTemplate
- Archivo:
lims_management/models/product.py
- Tareas:
- Agregar campo
required_sample_type_id
:required_sample_type_id = fields.Many2one( 'product.template', string='Tipo de Muestra Requerida', domain="[('is_sample_type', '=', True)]", help="Tipo de muestra/contenedor requerido para realizar este análisis" )
- Agregar validación para asegurar que solo se puede asignar a productos con
is_analysis=True
- Considerar agregar campo
sample_volume_ml
para indicar volumen requerido
- Agregar campo
2. Actualizar el modelo StockLot
- Archivo:
lims_management/models/stock_lot.py
- Tareas:
- Opción A - Migrar container_type a Many2one:
# Deprecar el campo Selection actual container_type_legacy = fields.Selection([...], deprecated=True) # Nuevo campo relacional sample_type_product_id = fields.Many2one( 'product.template', string='Tipo de Muestra', domain="[('is_sample_type', '=', True)]" )
- Opción B - Mantener ambos campos:
- Mantener
container_type
para compatibilidad - Agregar
sample_type_product_id
como campo principal - Sincronizar ambos campos con un @api.onchange
- Mantener
- Agregar método para obtener el nombre del contenedor desde el producto
- Opción A - Migrar container_type a Many2one:
3. Actualizar las vistas
3.1 Vista de Producto (Análisis)
- Archivo:
lims_management/views/product_views.xml
- Tareas:
- Agregar campo
required_sample_type_id
en el formulario cuandois_analysis=True
- Mostrarlo en la pestaña de especificaciones técnicas
- Agregar en la vista lista de análisis
- Agregar campo
3.2 Vista de Stock Lot
- Archivo:
lims_management/views/stock_lot_views.xml
- Tareas:
- Reemplazar/actualizar el campo
container_type
consample_type_product_id
- Actualizar vistas de lista y formulario
- Considerar mostrar imagen del contenedor desde el producto
- Reemplazar/actualizar el campo
4. Migración de datos existentes
- Archivo:
lims_management/migrations/18.0.1.1.0/post-migration.py
- Tareas:
- Crear script de migración para mapear valores de
container_type
a productos:mapping = { 'serum_tube': 'lims_management.sample_type_serum_tube', 'edta_tube': 'lims_management.sample_type_edta_tube', 'urine': 'lims_management.sample_type_urine_container', # etc... }
- Actualizar registros
stock.lot
existentes con el producto correspondiente - Marcar
container_type
como deprecated
- Crear script de migración para mapear valores de
5. Actualizar datos de demostración
- Archivos:
lims_management/demo/z_analysis_demo.xml
lims_management/demo/z_sample_demo.xml
- Tareas:
- Asignar
required_sample_type_id
a cada análisis de demo:- Hemograma → Tubo EDTA
- Glucosa → Tubo Suero
- Urocultivo → Contenedor Orina
- etc.
- Verificar que todos los tipos de muestra necesarios estén creados
- Asignar
6. Crear datos iniciales de tipos de muestra
- Archivo:
lims_management/data/sample_types.xml
- Tareas:
- Crear productos para tipos de muestra comunes:
<record id="sample_type_serum_tube" model="product.template"> <field name="name">Tubo de Suero (Tapa Roja)</field> <field name="is_sample_type">True</field> <field name="type">consu</field> <field name="categ_id" ref="product_category_sample_containers"/> </record>
- Incluir todos los tipos básicos: EDTA, Suero, Orina, Hisopado, etc.
- Crear productos para tipos de muestra comunes:
7. Documentación y pruebas
- Tareas:
- Actualizar README o documentación técnica
- Crear script de verificación
verify_sample_relationships.py
- Pruebas manuales:
- Crear nuevo análisis y asignar tipo de muestra
- Verificar que la relación se guarda correctamente
- Crear stock.lot y verificar el nuevo campo
- Probar migración con datos existentes
8. Preparación para Issue #32
- Tareas:
- Documentar cómo usar la nueva relación para automatización
- Identificar lógica de agrupación (múltiples análisis → misma muestra)
- Considerar reglas de negocio adicionales:
- ¿Qué pasa si un análisis no tiene tipo de muestra asignado?
- ¿Se pueden hacer múltiples análisis con la misma muestra física?
Consideraciones Técnicas
Compatibilidad hacia atrás
- Mantener el campo
container_type
temporalmente para no romper integraciones existentes - Usar decorador
@api.depends
para sincronizar valores
Performance
- Indexar el campo
is_sample_type
si no está indexado - Considerar vista SQL para reportes que unan análisis con tipos de muestra
Seguridad
- Solo usuarios con permisos de edición de productos pueden modificar
required_sample_type_id
- Validar que no se pueda eliminar un tipo de muestra si está siendo usado por algún análisis
Orden de Ejecución
- Crear tipos de muestra en data inicial
- Modificar modelos (product.py, stock_lot.py)
- Actualizar vistas
- Actualizar datos demo
- Crear y ejecutar migración
- Pruebas exhaustivas
- Documentación
Criterios de Aceptación
- Cada análisis puede tener asignado un tipo de muestra
- Los stock.lot pueden referenciar productos tipo muestra
- Migración exitosa de datos existentes
- Vistas actualizadas y funcionales
- Sin errores en logs de Odoo
- Datos demo coherentes y completos