From b9cd21b2c201ed6f62a9e4ea0f3b6d14cd17ac93 Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Wed, 16 Jul 2025 14:16:41 -0600 Subject: [PATCH] =?UTF-8?q?docs(#11):=20Plan=20detallado=20para=20implemen?= =?UTF-8?q?taci=C3=B3n=20de=20informe=20de=20resultados=20en=20PDF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plan_issue_11_informe_resultados_pdf.md | 294 ++++++++++++++++++ 1 file changed, 294 insertions(+) create mode 100644 planes/plan_issue_11_informe_resultados_pdf.md diff --git a/planes/plan_issue_11_informe_resultados_pdf.md b/planes/plan_issue_11_informe_resultados_pdf.md new file mode 100644 index 0000000..78ca84e --- /dev/null +++ b/planes/plan_issue_11_informe_resultados_pdf.md @@ -0,0 +1,294 @@ +# Plan de Desarrollo - Issue #11: Informe Final de Resultados en PDF + +## Resumen del Issue +Crear una plantilla de reporte QWeb compleja y profesional para el informe de resultados de laboratorio, con capacidad de resaltar valores fuera de rango, incluir datos del laboratorio y paciente, y guardarse automáticamente como adjunto. + +## Análisis de Requerimientos + +### Componentes del Reporte +1. **Encabezado** + - Logo del laboratorio + - Datos del laboratorio (nombre, dirección, teléfono) + - Datos del paciente (nombre, ID, edad, sexo) + - Número de orden y fecha + +2. **Sección de Resultados** + - Agrupación por tipo de análisis + - Tabla con columnas: Parámetro | Resultado | Unidad | Valor de Referencia + - Resaltado visual de valores fuera de rango (color/símbolo) + - Indicación especial para valores críticos + +3. **Sección de Comentarios** + - Observaciones generales de la orden + - Notas específicas por resultado si las hay + +4. **Pie del Informe** + - Datos del profesional validador (nombre, título, registro) + - Fecha y hora de validación + - Firma digital o espacio para firma + +### Requisitos Técnicos +- Botón "Imprimir Informe de Resultados" solo activo cuando todas las pruebas estén en estado "validated" +- PDF generado se guarda automáticamente como adjunto en la orden +- Formato profesional y limpio + +## Estructura de Archivos a Crear/Modificar + +### 1. Reporte QWeb +``` +lims_management/ +├── reports/ +│ ├── lab_results_report.xml # Plantilla QWeb del reporte +│ └── lab_results_report_data.xml # Definición del reporte y paper format +``` + +### 2. Modelos a Modificar +``` +lims_management/ +├── models/ +│ └── sale_order.py # Agregar método para generar reporte +``` + +### 3. Vistas a Modificar +``` +lims_management/ +├── views/ +│ └── sale_order_views.xml # Agregar botón de impresión +``` + +### 4. Manifest +``` +lims_management/ +├── __manifest__.py # Agregar archivos de reportes +``` + +## Implementación Detallada + +### Fase 1: Estructura Base del Reporte + +#### 1.1 Definir Paper Format Personalizado +```xml + + + Formato Resultados de Laboratorio + A4 + Portrait + 40 + 25 + 10 + 10 + 35 + +``` + +#### 1.2 Definir Acción del Reporte +```xml + + Informe de Resultados + sale.order + qweb-pdf + lims_management.report_lab_results + lims_management.report_lab_results + + 'Resultados_Lab_' + object.name + '.pdf' + True + +``` + +### Fase 2: Plantilla QWeb del Reporte + +#### 2.1 Estructura Principal +```xml + + +``` + +#### 2.2 Documento Individual +```xml + +``` + +### Fase 3: Lógica del Modelo + +#### 3.1 Método para Verificar Estado +```python +# En sale_order.py +@api.depends('lab_test_ids.state') +def _compute_can_print_results(self): + for order in self: + tests = order.lab_test_ids + order.can_print_results = ( + tests and + all(test.state == 'validated' for test in tests) + ) + +can_print_results = fields.Boolean( + compute='_compute_can_print_results', + string="Puede Imprimir Resultados" +) +``` + +#### 3.2 Método para Generar y Adjuntar PDF +```python +def action_print_lab_results(self): + """Genera el informe de resultados y lo adjunta""" + self.ensure_one() + + # Verificar que todas las pruebas estén validadas + if not self.can_print_results: + raise ValidationError("No se puede imprimir: hay pruebas sin validar") + + # Generar el reporte + return self.env.ref('lims_management.action_report_lab_results').report_action(self) +``` + +### Fase 4: Botón en la Vista + +```xml + + +