diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..b8988b6 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,17 @@ +{ + "permissions": { + "allow": [ + "Bash(python:*)", + "Bash(tea issue:*)", + "Bash(git add:*)", + "Bash(git push:*)", + "Bash(git checkout:*)", + "Bash(git pull:*)", + "Bash(git stash:*)", + "Bash(git commit:*)", + "Bash(docker-compose up:*)", + "Bash(docker:*)" + ], + "deny": [] + } +} \ No newline at end of file diff --git a/issue_content.txt b/issue_content.txt new file mode 100644 index 0000000..59ced20 --- /dev/null +++ b/issue_content.txt @@ -0,0 +1,38 @@ +**Contexto:** +Para poder implementar la automatización de generación de muestras (Issue #32), es necesario establecer una relación entre los productos tipo análisis y los tipos de muestra que requieren. + +**Problema Actual:** +- Los productos tipo test (is_analysis=True) no tienen campo que indique qué tipo de muestra requieren +- Los productos tipo muestra (is_sample_type=True) no están relacionados con los tests +- El modelo stock.lot tiene container_type como Selection hardcodeado, no como relación + +**Tareas Requeridas:** + +1. **Modificar product.template:** + - Agregar campo Many2one 'required_sample_type_id' que relacione análisis con tipo de muestra + - Domain: [('is_sample_type', '=', True)] + +2. **Actualizar stock.lot:** + - Opción A: Cambiar container_type de Selection a Many2one hacia product.template + - Opción B: Agregar nuevo campo sample_type_product_id + - Mantener compatibilidad con datos existentes + +3. **Actualizar vistas:** + - Agregar campo en formulario de productos cuando is_analysis=True + - Mostrar tipo de muestra requerida en vistas de análisis + +4. **Migración de datos:** + - Mapear valores actuales de container_type a productos tipo muestra + - Actualizar registros existentes + +5. **Actualizar demo data:** + - Asignar tipos de muestra correctos a cada análisis + - Ejemplo: Hemograma → Tubo EDTA, Glucosa → Tubo Suero + +**Beneficios:** +- Permitirá automatizar la generación de muestras al confirmar órdenes +- Evitará errores al saber exactamente qué contenedor usar para cada test +- Facilitará la agrupación de análisis que usan el mismo tipo de muestra + +**Dependencia:** +Este issue es prerequisito para poder implementar el Issue #32 \ No newline at end of file diff --git a/lims_management/models/product.py b/lims_management/models/product.py index 40f24a7..c3eb347 100644 --- a/lims_management/models/product.py +++ b/lims_management/models/product.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- -from odoo import models, fields +from odoo import models, fields, api +from odoo.exceptions import ValidationError class ProductTemplate(models.Model): _inherit = 'product.template' @@ -31,3 +32,27 @@ class ProductTemplate(models.Model): string="Is a Sample Type", help="Check if this product represents a type of laboratory sample container." ) + + 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" + ) + + sample_volume_ml = fields.Float( + string='Volumen Requerido (ml)', + help="Volumen de muestra requerido en mililitros para realizar este análisis" + ) + + @api.constrains('required_sample_type_id', 'is_analysis') + def _check_sample_type_for_analysis(self): + for product in self: + if product.required_sample_type_id and not product.is_analysis: + raise ValidationError("Solo los productos marcados como 'Es un Análisis Clínico' pueden tener un tipo de muestra requerida.") + + @api.constrains('sample_volume_ml', 'is_analysis') + def _check_volume_for_analysis(self): + for product in self: + if product.sample_volume_ml and not product.is_analysis: + raise ValidationError("Solo los productos marcados como 'Es un Análisis Clínico' pueden tener un volumen requerido.") diff --git a/pr_description.txt b/pr_description.txt new file mode 100644 index 0000000..4def293 --- /dev/null +++ b/pr_description.txt @@ -0,0 +1,13 @@ +Este Pull Request implementa el ciclo de vida completo para las muestras clínicas en el modelo `stock.lot`, incluyendo: +- Adición de un campo de estado (`state`) y métodos de transición (`action_receive`, `action_start_analysis`, etc.). +- Integración de un `header` con botones de acción y un `statusbar` en la vista de formulario de `stock.lot`. +- Ajuste de la visibilidad de botones y campos según el estado de la muestra. + +Además, se han realizado las siguientes mejoras en las herramientas de desarrollo: +- Actualización de `GEMINI.md` con instrucciones detalladas sobre el uso de la API de Gitea para la gestión de issues y pull requests. +- Introducción del script `gitea_cli_helper.py`, una herramienta robusta basada en Python para interactuar con la API de Gitea, permitiendo: + - Creación de issues con descripciones multilínea. + - Creación de pull requests. + - Comentar en issues. + - Cerrar issues. +- Actualización del archivo `.env` para incluir las variables de configuración necesarias para la API de Gitea. \ No newline at end of file