- Respetar configuración del wizard (checkbox crear re-muestra)
- Prevenir creación de múltiples re-muestras activas
- Agregar campos para trazabilidad completa:
- root_sample_id: muestra original de la cadena
- resample_chain_count: total de re-muestreos en cadena
- Validar límite de re-muestreos por cadena completa
- Mejorar vista con información de trazabilidad
- Método auxiliar para contar re-muestreos recursivamente
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Agregar campo computed all_sample_ids que incluye re-muestras
- Método recursivo para obtener todas las re-muestras
- Mejorar vista de orden con pestaña unificada de muestras
- Mostrar indicador de re-muestra y muestra original
- Incluir estado y motivo de rechazo en la vista
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Agregar campo obligatorio res_model_id en mail.activity
- Obtener ID del modelo stock.lot antes de crear actividad
- Prevenir error de validación al rechazar muestras
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Crear script assign_admin_to_lab_group.py
- Integrar en proceso de inicialización
- Asegurar que admin tenga acceso completo al menú de configuración
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Agregar modelo de configuración del laboratorio (lims.config.settings)
- Implementar generación automática de re-muestras al rechazar
- Añadir campos de trazabilidad: parent_sample_id, child_sample_ids
- Crear vista de configuración accesible desde menú admin
- Mejorar vistas de stock.lot con información de re-muestreo
- Incluir notificaciones automáticas a recepcionistas
- Configurar límite máximo de re-muestreos por muestra
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Agregar permisos de lectura/escritura para recepcionista en sale.order.line
- Agregar permisos de solo lectura para técnico en sale.order y sale.order.line
- Agregar permisos completos para administrador en ambos modelos
Esto corrige el error "No puede ingresar a los registros 'Línea de pedido de venta'"
que impedía a la recepcionista ver las órdenes de laboratorio.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Agregar estado 'rejected' al ciclo de vida de la muestra
- Crear modelo lims.rejection.reason para gestionar motivos de rechazo
- Agregar campos de rechazo en stock.lot (reason, notes, rejected_by, date)
- Crear wizard para proceso de rechazo con validaciones
- Implementar acción de rechazo con notificaciones
- Crear vistas para muestras rechazadas con filtros y búsquedas
- Agregar 10 motivos de rechazo predefinidos (hemolizada, coagulada, etc.)
- Incluir permisos de seguridad para los nuevos modelos
- Agregar menús para gestión de rechazos y muestras rechazadas
- Corregir compatibilidad con Odoo 18 en vistas existentes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Sintaxis correcta para widget barcode en reportes QWeb
- Solución para caracteres especiales en PDFs
- Ejemplo de layout para múltiples etiquetas por página
- Problemas comunes y sus soluciones
- Corregir codificación UTF-8 usando referencias numéricas de caracteres
- Ajustar espaciado entre etiquetas para evitar solapamiento
- Reducir tamaño de código de barras para mejor ajuste
- Agregar contenedores con overflow para controlar el contenido
- Cambiar de web.html_container a web.basic_layout para mejor renderizado PDF
- Cambiar sintaxis de generación de código de barras a widget de Odoo 18
- Usar t-field con t-options para renderizar correctamente
- El código de barras ahora se muestra correctamente en el PDF
- Cambiar sintaxis de % a t-attf-src para mejor compatibilidad
- Agregar el número del código debajo de la imagen
- Verificado que las muestras tienen barcode en BD
- Simplificar la lógica del template
Co-Authored-By: Claude <noreply@anthropic.com>
- Agregar método _ensure_barcode() para generar códigos faltantes
- Llamar _ensure_barcode() antes de imprimir etiquetas
- Usar name del lote como fallback si no hay barcode
- Manejar casos donde el campo barcode está vacío
Co-Authored-By: Claude <noreply@anthropic.com>
- Mover paperformat antes del action report para evitar error de referencia
- Asegurar que los IDs se definan en el orden correcto
Co-Authored-By: Claude <noreply@anthropic.com>
- Crear plantilla QWeb para etiquetas de 100x50mm
- Incluir datos del paciente, orden y tipo de muestra
- Generar código de barras Code128 usando campo existente
- Agregar botón 'Imprimir Etiquetas' en órdenes confirmadas
- Formato optimizado para impresoras de etiquetas
Co-Authored-By: Claude <noreply@anthropic.com>
- Crear usuario 'recepcionista' con rol Recepcionista
- Crear usuario 'tecnico' con rol Técnico
- Crear usuario 'administrador' con rol Administrador
- Todos con contraseña 'demo' para facilitar pruebas
- Incluir archivo en datos demo del módulo
Co-Authored-By: Claude <noreply@anthropic.com>
- Ajustar permisos base: recepcionistas solo lectura, técnicos sin eliminar
- Crear reglas de registro para control granular por estado
- Implementar verificación de permisos en todas las transiciones
- Agregar mail.thread a stock.lot para trazabilidad completa
- Validar transiciones de estado y muestras asociadas
- Actualizar vistas con restricciones según grupos de usuario
- Mejorar mensajes del chatter con más contexto
Co-Authored-By: Claude <noreply@anthropic.com>
- Agregar estado 'cancelled' a stock.lot para muestras
- Implementar método action_cancel() en stock.lot
- Override action_cancel() en sale.order para:
* Cancelar muestras en estados: pending_collection, collected, received, in_process
* Cancelar pruebas asociadas que no estén validadas
* Registrar mensajes en el chatter de cada elemento cancelado
* Mostrar resumen de elementos cancelados en la orden
- Agregar tests unitarios completos para verificar:
* Cancelación correcta de muestras y pruebas
* No cancelación de elementos en estados finales
* Generación de mensajes en chatter
* Órdenes normales no afectadas
La funcionalidad asegura que no queden muestras o pruebas "huérfanas"
cuando se cancela una orden de laboratorio.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Cambiar view_mode de 'tree' a 'list' en menus.xml para action_lims_test
- Cambiar mode='tree' a 'list' en lims_test_views.xml para campo result_ids
- Corregir script create_demo_data.py:
* Comentar campo inexistente 'lab_request_priority'
* Cambiar 'observations' por 'note' (campo estándar)
* Cambiar 'lab_sample_ids' por 'generated_sample_ids'
* Ajustar índices de pacientes para usar María González (femenina) para embarazo
- Mejorar validación en lims_result.py:
* Considerar False y 0.0 como equivalentes para campos numéricos
* Solo requerir valores cuando la prueba no esté en estado 'draft'
Resuelve el error "View types not defined tree found in act_window action 457"
y permite confirmar órdenes con pruebas de selección correctamente.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Movido menus.xml al final del manifest para cargar después de las vistas
- Agregadas referencias explícitas a las vistas en action_lims_test
- Esto soluciona el error 'No se pudo encontrar una vista por defecto de tipo tree'
- Eliminado completamente el botón de reporte en lims_test_views.xml
- Removida referencia a report/report_test_result.xml del manifest
- Removida referencia a report_test_result.css del manifest
- Esto soluciona el error 'External ID not found' durante la inicialización
- Comentado el botón 'Imprimir Resultados' que referenciaba action_report_test_result
- Este action no existe ya que los reportes no han sido implementados aún
- Previene error de inicialización 'External ID not found'
Implementación completa del sistema de catálogo de parámetros flexible:
✅ **Tasks completadas:**
- Task 1-12: Todas las tareas implementadas exitosamente
- Task 13: No aplicable (no hay reportes desarrollados aún)
**Características principales:**
- Catálogo centralizado de parámetros reutilizables
- Rangos de referencia flexibles por edad/género/embarazo
- Generación automática de resultados basada en configuración
- Integración completa con el flujo existente
- 36 parámetros demo y 31 rangos de referencia
- Tests automatizados completos
**Modelos implementados:**
- lims.analysis.parameter
- lims.parameter.range
- product.template.parameter
La Task 13 se omitió ya que no existen reportes desarrollados en el módulo actualmente.
- Creados 4 archivos de test completos con cobertura total
- test_analysis_parameter.py: Tests del modelo de parámetros
- test_parameter_range.py: Tests de rangos de referencia
- test_result_parameter_integration.py: Tests de integración
- test_auto_result_generation.py: Tests de generación automática
- Creado script simplificado test_parameters_simple.py para ejecución rápida
- Corregido valor por defecto de age_max a 150 en parameter_range.py
- Documentación completa en README.md
- Creados 36 parámetros de análisis en parameter_demo.xml
- Creados 31 rangos de referencia en parameter_range_demo.xml
- Creadas 40 configuraciones parámetro-análisis en analysis_parameter_config_demo.xml
- Consolidado script de creación de datos demo en test/create_demo_data.py
- Actualizado init_odoo.py para usar script consolidado
- Eliminados scripts obsoletos (04_demo_lab_orders.sh, create_test_demo_data.py)
- Verificada carga exitosa de todos los datos demo
- Implementado método _generate_test_results() en lims.test
- Genera automáticamente líneas de lims.result basadas en product.template.parameter
- Se ejecuta al crear una nueva prueba
- Respeta el orden (sequence) y las instrucciones de cada parámetro
- Agregado action_regenerate_results() para regenerar manualmente
- Botón en la vista con confirmación para regenerar resultados
- Logging de información sobre resultados generados
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Cambio de parameter_name (Char) a parameter_id (Many2one a lims.analysis.parameter)
- Mantener parameter_name como campo related para compatibilidad
- Agregados campos: parameter_value_type, parameter_unit, value_boolean, value_display
- Implementado _compute_applicable_range() para determinar rango según paciente
- Actualizado _compute_is_out_of_range() para usar rangos flexibles y detectar valores críticos
- Validación mejorada según tipo de parámetro
- Actualizada vista de resultados en lims.test para nuevos campos
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Agregado campo computado 'age' que calcula edad en años desde birthdate_date
- Agregado campo 'is_pregnant' con validación de género femenino
- Implementado método _compute_age() usando relativedelta para precisión
- Agregado método helper get_age_at_date() para cálculos en fechas específicas
- Actualizada vista de pacientes para mostrar edad y estado de embarazo
- Validación que previene marcar embarazo en género masculino
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Creado modelo lims.parameter.range para rangos de referencia flexibles
- Campos de condiciones: gender, age_min/max, pregnant
- Campos de valores: normal_min/max, critical_min/max
- Métodos helper: is_value_normal(), is_value_critical(), get_value_status()
- Múltiples validaciones para garantizar consistencia de datos
- Vistas con filtros por edad, género y condiciones especiales
- Actualizado analysis_parameter con rangos en notebook
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Agregada sección "Desarrollo de nuevos modelos y vistas"
- Documentado orden correcto de carga en __manifest__.py
- Proceso en fases para modelos relacionados
- Guía de uso correcto de contextos en vistas XML
- Checklist de verificación antes de reiniciar instancia
Basado en lecciones aprendidas de Tasks 1 y 2
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Creado modelo product.template.parameter para asociar parámetros a análisis
- Campos: sequence, required, instructions
- Relación Many2one con analysis.parameter y product.template
- Agregadas vistas embebidas en product.template
- Actualizado analysis.parameter con relación One2many
- Configurados permisos de seguridad
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Creado modelo lims.analysis.parameter con campos: name, code, value_type, unit, etc.
- Implementadas validaciones y constraints
- Creadas vistas form, list y search
- Agregado menú en Configuración
- Configurados permisos de seguridad
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Arquitectura de 3 modelos: parameter, template.parameter, parameter.range
- 13 tareas organizadas en 4 fases
- Cronograma estimado de 7-9 días
- Incluye migración de datos existentes
- Plan detallado con consideraciones técnicas y riesgos
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Se agrega el campo 'name' obligatorio al crear stock.lot para muestras
- Se utiliza la secuencia 'stock.lot.serial' para generar nombres únicos
- Se incluye fallback basado en timestamp si no existe secuencia
- Corrige el error de validación en la creación de muestras
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Movidos scripts Python a carpetas organizadas (test/ y utils/)
- Agregado logo del laboratorio (lab_logo.png)
- Implementado sistema de actualización automática de logo y nombre de empresa
- Creado script de validación para verificar estado del logo
- Actualizada documentación CLAUDE.md con nuevas rutas
- Eliminados intentos fallidos de cambio de tema CSS
- Ajustado docker-compose.yml para mapear carpetas de scripts
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
- Agregar método _generate_lab_tests() en sale.order para crear pruebas automáticamente al confirmar orden
- Agregar método _find_sample_for_analysis() para asociar muestras con análisis según tipo
- Mejorar dominio de sample_id en lims.test para filtrar por paciente y estado (collected/in_analysis)
- Agregar método _onchange_sale_order_line() para actualizar dominio de muestra dinámicamente
- Las pruebas ahora se crean automáticamente con la muestra correcta asignada
Esto resuelve el problema reportado donde las órdenes aprobadas no generaban pruebas
y las muestras no estaban disponibles para selección manual.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Script Python para crear datos de demostración
- Crea pruebas con diferentes estados: en proceso, ingresado, validado
- Incluye resultados con valores dentro y fuera de rango
- Mezcla tipos de valor: numérico y texto
- Integrado en el proceso de inicialización
- Instancia validada sin errores
- Modelo res.config.settings con parámetro lims_require_validation
- Método _compute_require_validation usa la configuración
- Auto-validación cuando no se requiere validación manual
- Vista de configuración en Laboratorio > Configuración > Ajustes
- Instancia validada sin errores
- CSS personalizado para resaltar valores en rojo
- Integración con decoration-danger de Odoo 18
- Estilos aplicados a vistas lista y formulario
- Assets backend configurados en manifest
- Vista formulario con lista editable de resultados
- Campos dinámicos que se ocultan según tipo de valor
- Botones de acción según estado de la prueba
- Vista lista, kanban y búsqueda implementadas
- Menú agregado en sección Laboratorio
- decoration-danger para valores fuera de rango preparado