#!/bin/bash # Script para crear issues en Gitea usando tea # Asegúrate de que tea esté logueado y configurado para el repositorio correcto. # Issue 1: [Core] Configuración y Modelos Base del Módulo tea issue create --title "[Core] Configuración y Modelos Base del Módulo" --labels "feature" --description "$(cat <<'EOT' - Crear el módulo Odoo `lims_management` con su estructura de directorios (`models`, `views`, `security`, `report`, `data`). - Definir los grupos de seguridad principales en `security/lims_security.xml`: Recepcionista (`group_lims_receptionist`), Técnico de Laboratorio (`group_lims_technician`), y Administrador de Laboratorio (`group_lims_admin`). - Asignar jerarquías a los grupos (ej. Administrador hereda permisos de Técnico y Recepcionista). - Crear el menú principal del módulo "Laboratorio" y los submenús iniciales (Órdenes, Pacientes, Catálogo de Pruebas, etc.). EOT )" # Issue 2: [Core] Gestión de Pacientes y Médicos (Extensión de Contactos) tea issue create --title "[Core] Gestión de Pacientes y Médicos (Extensión de Contactos)" --labels "feature" --description "$(cat <<'EOT' - Extender el modelo `res.partner` para añadir los campos necesarios: - `is_patient` (Booleano) para identificar pacientes. - `is_doctor` (Booleano) para identificar médicos remitentes. - `patient_history_id` (Char) para el número de historia clínica. - `birthdate_date` (Fecha) y `gender` (Selección) para cálculos de rangos de referencia. - `parent_id` (Many2one a `res.partner`) para asociar pacientes menores de edad con su tutor legal. - Modificar la vista de formulario de Contactos para mostrar estos campos en una nueva pestaña "Información Clínica". - Aplicar reglas de registro para que la información clínica sensible solo sea visible para roles autorizados del laboratorio. EOT )" # Issue 3: [Core] Catálogo de Análisis Clínicos (Extensión de Productos) tea issue create --title "[Core] Catálogo de Análisis Clínicos (Extensión de Productos)" --labels "feature" --description "$(cat <<'EOT' - Extender el modelo `product.template` para añadir un campo `is_lab_test` (Booleano) que identifique los productos que son análisis de laboratorio. - Crear el modelo `lims.test.parameter` con los campos: - `name` (Nombre del parámetro, ej. "Hemoglobina"). - `product_id` (Many2one a `product.template`, el análisis al que pertenece). - `uom_id` (Many2one a `uom.uom`, unidad de medida). - `reference_min`, `reference_max` (Float, para rangos numéricos). - `reference_text` (Char, para valores cualitativos como "Negativo"). - `gender`, `age_min`, `age_max` para definir rangos contextuales. - Crear la vista de producto para que en la pestaña "Laboratorio" se puedan gestionar los parámetros (`One2many` a `lims.test.parameter`). EOT )" # Issue 4: [Core] Gestión de Órdenes de Laboratorio (Sobre `sale.order`) tea issue create --title "[Core] Gestión de Órdenes de Laboratorio (Sobre sale.order)" --labels "feature" --description "$(cat <<'EOT' - Personalizar la vista de formulario de `sale.order` para que funcione como "Orden de Laboratorio". Cambiar etiquetas y ocultar campos no relevantes para el flujo LIMS. - Añadir un campo `patient_id` (Many2one a `res.partner`, dominio `[('is_patient', '=', True)]`) a `sale.order`. - Implementar un `onchange` para que al seleccionar un paciente menor de edad, el campo de dirección de factura (`partner_invoice_id`) se popule automáticamente con el tutor (`parent_id`). - Sobrescribir el método `action_confirm` de `sale.order` para que, además de confirmar la venta, dispare la creación de los registros `lims.test` y las muestras (`stock.lot`) correspondientes. EOT )" # Issue 5: [Core] Gestión de Muestras (Sobre `stock.lot`) tea issue create --title "[Core] Gestión de Muestras (Sobre stock.lot)" --labels "feature" --description "$(cat <<'EOT' - Crear un producto genérico "Muestra de Laboratorio" (`product.template`) de tipo almacenable, no vendible/comprable, y con seguimiento por Lote/Nº de Serie. - Extender el modelo `stock.lot` para añadir campos específicos de la muestra: - `sample_state` (Selección: `pending`, `collected`, `in_analysis`, `result_ready`, `validated`, `disposed`). - `collection_datetime` (Datetime, fecha y hora de toma). - `collected_by_id` (Many2one a `res.users`, técnico que tomó la muestra). - `disposal_date` (Date, fecha de descarte). - `sale_order_id` (Many2one a `sale.order`). - Crear ubicaciones de inventario específicas para el laboratorio (ej. "LAB/Muestras/Recepción", "LAB/Muestras/Almacenamiento Frío") separadas del stock general. - Al confirmar una orden, generar un `stock.lot` por cada muestra requerida, asignando al paciente como propietario (`owner_id`) para que no afecte la valoración de inventario. - Desarrollar una vista Kanban para `stock.lot` que muestre las muestras agrupadas por su estado (`sample_state`). EOT )" # Issue 6: [Core] Gestión de Pruebas y Resultados tea issue create --title "[Core] Gestión de Pruebas y Resultados" --labels "feature" --description "$(cat <<'EOT' - Crear el modelo `lims.test` para representar la ejecución de un análisis: - `sale_order_line_id` (Many2one a `sale.order.line`). - `patient_id` y `product_id` (relacionados desde la línea de pedido). - `sample_id` (Many2one a `stock.lot`). - `state` (Selección: `draft`, `in_process`, `result_entered`, `validated`, `cancelled`). - `validator_id` (Many2one a `res.users`), `validation_date` (Datetime). - Crear el modelo `lims.result` para almacenar cada valor de resultado: - `test_id` (Many2one a `lims.test`). - `parameter_id` (Many2one a `lims.test.parameter`). - `value_numeric` (Float), `value_text` (Char), `value_selection` (Selección). - `is_out_of_range` (Booleano, calculado). - `notes` (Texto para comentarios del técnico). - Desarrollar la interfaz de ingreso de resultados: una vista de formulario para `lims.test` con una lista editable (`One2many`) de sus `lims.result`, donde los campos de parámetro se cargan dinámicamente. - Implementar la lógica visual para resaltar en rojo los resultados (`lims.result`) que estén fuera de su rango de referencia. EOT )" # Issue 7: [Core] Flujo de Validación y Seguridad tea issue create --title "[Core] Flujo de Validación y Seguridad" --labels "feature" --description "$(cat <<'EOT' - Implementar la máquina de estados en el modelo `lims.test` para controlar las transiciones (ej. no se puede validar si no hay resultados ingresados). - Crear reglas de registro (`ir.rule`) para asegurar que: - Los recepcionistas solo puedan crear y ver órdenes, pero no ingresar ni validar resultados. - Los técnicos puedan ver órdenes asignadas, registrar la toma de muestra e ingresar resultados, pero no validar. - Los administradores sean los únicos que puedan mover una prueba al estado `validated`. - Registrar en el chatter de `lims.test` y `stock.lot` cada cambio de estado, validación o acción relevante para auditoría. EOT )" # Issue 8: [Reporte] Etiquetas de Muestras con Código de Barras tea issue create --title "[Reporte] Etiquetas de Muestras con Código de Barras" --labels "feature" --description "$(cat <<'EOT' - Crear una plantilla de reporte QWeb para generar etiquetas de muestra. - La etiqueta debe incluir: Nombre del paciente, ID de la orden, tipo de muestra y un código de barras/QR único (basado en el `name` del `stock.lot`). - Añadir un botón "Imprimir Etiquetas" en la orden de laboratorio (`sale.order`) que ejecute este reporte para todas las muestras asociadas. EOT )" # Issue 9: [Reporte] Informe Final de Resultados en PDF tea issue create --title "[Reporte] Informe Final de Resultados en PDF" --labels "feature" --description "$(cat <<'EOT' - Crear una plantilla de reporte QWeb compleja y profesional para el informe de resultados. - El reporte debe tener un encabezado con datos del laboratorio (logo, dirección) y del paciente. - La sección de resultados debe agrupar los análisis y listar los parámetros en una tabla con columnas: `Parámetro`, `Resultado`, `Unidad`, `Valor de Referencia`. - Implementar la lógica para resaltar visualmente (ej. con color o un símbolo) los valores fuera de rango. - Incluir una sección para comentarios/observaciones y los datos del profesional que validó el informe. - Añadir un botón "Imprimir Informe de Resultados" en la orden, que solo se active cuando todas las pruebas estén en estado `validated`. - El PDF generado debe guardarse automáticamente como adjunto en la orden de laboratorio. EOT )" # Issue 10: [Integración] Flujo de Facturación y Cobro tea issue create --title "[Integración] Flujo de Facturación y Cobro" --labels "feature" --description "$(cat <<'EOT' - Configurar las políticas de facturación en los productos de análisis (ej. `service_policy` en Odoo). - Asegurar que la creación de la factura desde la `sale.order` funcione correctamente según la política definida (al confirmar la orden o al finalizar el servicio). - Personalizar la vista de la factura (`account.move`) si es necesario para incluir referencias a la orden de laboratorio. - Garantizar que los pagos se puedan registrar usando los métodos estándar de Odoo (diarios de caja, banco, etc.). EOT )" # Issue 11: [Extensión Opcional] Gestión de Inventario de Reactivos tea issue create --title "[Extensión Opcional] Gestión de Inventario de Reactivos" --labels "feature" --description "$(cat <<'EOT' - Configurar los reactivos como productos almacenables con seguimiento por Lote y reglas de caducidad (FEFO). - Permitir asociar una Lista de Materiales (BOM) a cada producto de análisis para definir los reactivos que consume. - Desarrollar la lógica para que al iniciar un `lims.test` (`state` = `in_process`), se genere y valide automáticamente un movimiento de stock (`stock.move`) para descontar los reactivos de la BOM del inventario. - Crear alertas o notificaciones para lotes de reactivos próximos a caducar o con bajo stock (utilizando los schedulers y reglas de reorden de Odoo). EOT )" # Issue 12: [Extensión Opcional] Portal Web para Pacientes/Médicos tea issue create --title "[Extensión Opcional] Portal Web para Pacientes/Médicos" --labels "feature" --description "$(cat <<'EOT' - Extender los controladores del portal de Odoo para mostrar las órdenes de laboratorio (`sale.order`) al usuario logueado. - Crear una vista en el portal para que el paciente/médico pueda ver el estado de su orden y descargar el informe PDF de resultados cuando esté disponible. - (Avanzado) Crear un formulario en el portal para que médicos remitentes puedan crear nuevas órdenes de laboratorio de forma remota. EOT )" # Issue 13: [Extensión Opcional] Integración con Calendario para Citas tea issue create --title "[Extensión Opcional] Integración con Calendario para Citas" --labels "feature" --description "$(cat <<'EOT' - Integrar con el módulo `calendar` de Odoo. - Añadir un botón en la orden de laboratorio para "Agendar Cita" de toma de muestra, creando un `calendar.event`. - El evento del calendario debe estar vinculado al paciente y a la orden de laboratorio. - Configurar recordatorios automáticos por email para las citas agendadas. EOT )" echo "Todos los issues han sido preparados en el script create_issues.sh"