clinical_laboratory/documents/plans/ISSUE31_PLAN.md
2025-07-14 12:16:03 -06:00

3.6 KiB

Plan de Actividades: Issue #31 - Ciclo de Vida de la Muestra

Objetivo

Implementar una máquina de estados completa para el modelo stock.lot con el fin de gestionar y trazar el ciclo de vida de una muestra de laboratorio, desde su recolección hasta su descarte.


Plan de Ejecución

1. Modificación del Modelo (stock.lot)

  • Archivo: lims_management/models/stock_lot.py
  • Tareas:
    • Añadir campo state:
      • Tipo: Selection
      • Nombre técnico: state
      • String: "Estado"
      • Opciones:
        • collected: 'Recolectada' (Estado por defecto)
        • received: 'Recibida en Laboratorio'
        • in_process: 'En Proceso'
        • analyzed: 'Analizada'
        • stored: 'Almacenada'
        • disposed: 'Desechada'
      • Atributos: tracking=True para registrar cambios en el chatter.
    • Definir métodos para transiciones:
      • action_receive(): Cambia el estado a received.
      • action_start_analysis(): Cambia el estado a in_process.
      • action_complete_analysis(): Cambia el estado a analyzed.
      • action_store(): Cambia el estado a stored.
      • action_dispose(): Cambia el estado a disposed.
      • Cada método debe realizar una transición de estado simple y registrar un mensaje en el chatter.

2. Adaptación de las Vistas (stock_lot_views.xml)

  • Archivo: lims_management/views/stock_lot_views.xml
  • Tareas:
    • Vista de Formulario:
      • Añadir header:
        • Incorporar botones para las acciones (action_receive, action_start_analysis, etc.).
        • Controlar la visibilidad de los botones según el estado actual (ej. el botón "Recibir" solo debe ser visible si el estado es 'Recolectada').
      • Añadir statusbar:
        • Visualizar el campo state usando el widget statusbar.
        • Definir el statusbar_visible para mostrar los estados clave del flujo principal.
      • Hacer campos readonly:
        • Campos como patient_id, request_id, collection_date deben volverse de solo lectura después de que la muestra es recibida para asegurar la integridad de los datos. Se usará el atributo attrs con el nuevo formato invisible o readonly basado en el campo state.
    • Vista de Lista:
      • Añadir el campo state para que sea visible.
      • Añadir el campo state a los filtros por defecto en el search para poder agrupar por estado fácilmente.

3. Seguridad (Opcional, si es necesario)

  • Archivo: lims_management/security/lims_security.xml o ir.model.access.csv
  • Tareas:
    • Evaluar si se necesitan reglas de seguridad específicas para controlar quién puede ejecutar las transiciones de estado. Por ahora, se asumirá que los grupos existentes (group_lims_technician, group_lims_admin) tienen los permisos.

4. Verificación y Pruebas

  • Pasos:
    • Reiniciar la instancia de Odoo con el módulo actualizado.
    • Crear una nueva muestra de laboratorio manualmente.
    • Verificar que el estado por defecto sea 'Recolectada'.
    • Probar cada uno de los botones de transición de estado en la vista de formulario.
    • Confirmar que el statusbar se actualiza correctamente.
    • Revisar el chatter para asegurarse de que los cambios de estado se están registrando.
    • Verificar la visibilidad condicional de los botones y el modo de solo lectura de los campos.
    • Filtrar y agrupar por estado en la vista de lista.