# 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:**
    - [x] **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.
    - [x] **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:**
    - [x] **Vista de Formulario:**
        - [x] **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').
        - [x] **Añadir `statusbar`:**
            - Visualizar el campo `state` usando el widget `statusbar`.
            - Definir el `statusbar_visible` para mostrar los estados clave del flujo principal.
        - [x] **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`.
    - [x] **Vista de Lista:**
        - [x] Añadir el campo `state` para que sea visible.
        - [x] 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:**
    - [x] 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:**
    - [x] Reiniciar la instancia de Odoo con el módulo actualizado.
    - [x] Crear una nueva muestra de laboratorio manualmente.
    - [x] Verificar que el estado por defecto sea 'Recolectada'.
    - [x] Probar cada uno de los botones de transición de estado en la vista de formulario.
    - [x] Confirmar que el `statusbar` se actualiza correctamente.
    - [x] Revisar el chatter para asegurarse de que los cambios de estado se están registrando.
    - [x] Verificar la visibilidad condicional de los botones y el modo de solo lectura de los campos.
    - [x] Filtrar y agrupar por estado en la vista de lista.

---
