clinical_laboratory/documents/plans/ISSUE32_PLAN.md
Luis Ernesto Portillo Zaldivar 4be56fc9f7 fix(#32): Spanish translations and workflow fixes
- Fixed missing action_collect method for pending_collection state
- Updated all model field labels to Spanish
- Updated view labels and strings to Spanish
- Fixed readonly conditions for pending_collection state
- Added barcode and new fields to stock.lot views
- Updated sale.order embedded view with correct button
- Added 5-minute timeout note to CLAUDE.md
- Removed problematic demo sale.order XML records
- Updated test script location guidance in CLAUDE.md
- Marked all acceptance criteria as completed in plan
2025-07-14 23:46:31 -06:00

7.8 KiB

Plan de Implementación - Issue #32: Generación Automática de Muestras

Objetivo

Automatizar la generación de muestras cuando se confirman órdenes de laboratorio, basándose en las relaciones test-muestra establecidas en Issue #44.

Análisis de Requisitos

Funcionalidad Esperada

  1. Al confirmar una orden de laboratorio (sale.order con is_lab_request=True):
    • Analizar todos los análisis incluidos en las líneas de orden
    • Agrupar análisis por tipo de muestra requerida
    • Generar automáticamente registros stock.lot (muestras) para cada grupo
    • Asignar códigos de barras únicos a cada muestra
    • Establecer el estado inicial como 'pending_collection'

Reglas de Negocio

  1. Agrupación de Análisis: Múltiples análisis que requieran el mismo tipo de muestra deben compartir un único contenedor
  2. Volumen de Muestra: Sumar los volúmenes requeridos de todos los análisis del grupo
  3. Identificación: Cada muestra debe tener un código de barras único generado automáticamente
  4. Trazabilidad: Las muestras deben estar vinculadas a la orden de laboratorio original
  5. Manejo de Errores: Si un análisis no tiene tipo de muestra definido, generar advertencia pero continuar con los demás

Tareas de Implementación

1. Extender el modelo sale.order

Archivo: lims_management/models/sale_order.py

  • Agregar campo Many2many para referenciar las muestras generadas:
    generated_sample_ids = fields.Many2many(
        'stock.lot',
        'sale_order_stock_lot_rel',
        'order_id',
        'lot_id',
        string='Muestras Generadas',
        domain="[('is_lab_sample', '=', True)]",
        readonly=True
    )
    
  • Override del método action_confirm() para interceptar la confirmación
  • Implementar método _generate_lab_samples() con la lógica principal
  • Agregar método _group_analyses_by_sample_type() para agrupar análisis

2. Lógica de generación de muestras

Archivo: lims_management/models/sale_order.py

  • Implementar algoritmo de agrupación:
    def _group_analyses_by_sample_type(self):
        """Agrupa las líneas de orden por tipo de muestra requerida"""
        groups = {}
        for line in self.order_line:
            if line.product_id.is_analysis:
                sample_type = line.product_id.required_sample_type_id
                if sample_type:
                    if sample_type.id not in groups:
                        groups[sample_type.id] = {
                            'sample_type': sample_type,
                            'lines': [],
                            'total_volume': 0.0
                        }
                    groups[sample_type.id]['lines'].append(line)
                    groups[sample_type.id]['total_volume'] += line.product_id.sample_volume_ml or 0.0
        return groups
    
  • Crear método para generar muestras por grupo
  • Implementar logging para trazabilidad

3. Generación de códigos de barras

Archivo: lims_management/models/stock_lot.py

  • Mejorar el método _compute_barcode() para asegurar unicidad
  • Agregar validación de duplicados
  • Considerar prefijos por tipo de muestra

4. Actualizar vistas de sale.order

Archivo: lims_management/views/sale_order_views.xml

  • Agregar pestaña "Muestras Generadas" en formulario de orden
  • Mostrar campo generated_sample_ids con vista de lista embebida
  • Agregar botón para regenerar muestras (si es necesario)
  • Incluir indicadores visuales del estado de generación

5. Crear wizard de configuración (opcional)

Archivos:

  • lims_management/wizard/sample_generation_wizard.py
  • lims_management/wizard/sample_generation_wizard_view.xml
  • Crear wizard para revisar/modificar la generación antes de confirmar
  • Permitir ajustes manuales de agrupación si es necesario
  • Opción para excluir ciertos análisis de la generación automática

6. Notificaciones y alertas

Archivo: lims_management/models/sale_order.py

  • Implementar sistema de notificaciones:
    • Análisis sin tipo de muestra definido
    • Muestras generadas exitosamente
    • Errores en la generación
  • Usar el sistema de mensajería de Odoo (mail.thread)

7. Pruebas y validación

Archivo: verify_automatic_sample_generation.py

  • Crear script de verificación que pruebe:
    • Generación correcta de muestras
    • Agrupación adecuada de análisis
    • Cálculo correcto de volúmenes
    • Unicidad de códigos de barras
    • Manejo de casos edge (análisis sin tipo de muestra)

8. Actualizar datos de demostración

Archivo: lims_management/demo/z_automatic_generation_demo.xml

  • Crear órdenes de laboratorio de ejemplo que demuestren:
    • Orden con múltiples análisis del mismo tipo de muestra
    • Orden con análisis de diferentes tipos de muestra
    • Orden mixta con algunos análisis sin tipo de muestra

Consideraciones Técnicas

Performance

  • La generación debe ser eficiente incluso con órdenes grandes (20+ análisis)
  • Usar creación en batch para múltiples muestras
  • Considerar uso de SQL para verificación de unicidad de barcodes

Transaccionalidad

  • Todo el proceso debe ser atómico: o se generan todas las muestras o ninguna
  • Usar @api.model con manejo adecuado de excepciones
  • Rollback automático en caso de error

Configurabilidad

  • Considerar agregar configuración a nivel de compañía:
    • Habilitar/deshabilitar generación automática
    • Formato de código de barras personalizable
    • Reglas de agrupación personalizables

Compatibilidad

  • Mantener compatibilidad con flujo manual existente
  • Permitir creación manual de muestras adicionales si es necesario
  • No interferir con órdenes de venta regulares (no laboratorio)

Flujo de Trabajo

graph TD
    A[Orden de Laboratorio] --> B{¿Confirmar Orden?}
    B -->|Sí| C[Analizar Líneas de Orden]
    C --> D[Identificar Análisis]
    D --> E[Agrupar por Tipo de Muestra]
    E --> F{¿Todos tienen tipo de muestra?}
    F -->|No| G[Generar Advertencia]
    F -->|Sí| H[Continuar]
    G --> H
    H --> I[Crear Muestras por Grupo]
    I --> J[Generar Códigos de Barras]
    J --> K[Asociar a la Orden]
    K --> L[Confirmar Orden]
    L --> M[Notificar Usuario]

Criterios de Aceptación

  1. Al confirmar una orden de laboratorio, se generan automáticamente las muestras necesarias
  2. Los análisis que requieren el mismo tipo de muestra se agrupan en un solo contenedor
  3. Cada muestra tiene un código de barras único
  4. Se muestra claramente qué muestras fueron generadas para cada orden
  5. Se manejan adecuadamente los análisis sin tipo de muestra definido
  6. El sistema registra un log de la generación para auditoría
  7. La funcionalidad se puede deshabilitar si es necesario (opcional - no implementado)
  8. No afecta el rendimiento de confirmación de órdenes regulares

Estimación de Tiempo

  • Tarea 1-2: 2-3 horas (lógica principal)
  • Tarea 3: 1 hora (mejoras barcode)
  • Tarea 4: 1 hora (vistas)
  • Tarea 5: 2 horas (wizard opcional)
  • Tarea 6: 1 hora (notificaciones)
  • Tarea 7-8: 1-2 horas (pruebas y demo)

Total estimado: 8-10 horas

Dependencias

  • Completo: Issue #44 (Relaciones test-muestra) ✓
  • Requerido: Módulo stock de Odoo para stock.lot
  • Requerido: Librería python-barcode para generación de códigos

Riesgos y Mitigaciones

  1. Riesgo: Conflictos con otros módulos que modifiquen sale.order.action_confirm()

    • Mitigación: Usar super() correctamente y documentar la integración
  2. Riesgo: Rendimiento con órdenes muy grandes

    • Mitigación: Implementar creación en batch y considerar procesamiento asíncrono
  3. Riesgo: Duplicación de códigos de barras

    • Mitigación: Implementar verificación robusta y regeneración si es necesario