[Extensión Opcional] Integración con Calendario para Citas #15

Open
opened 2025-07-12 22:06:54 +00:00 by luis_portillo · 3 comments
  • 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.
- 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.
Author
Owner

"### Estimaci�n de Tiempo de Desarrollo\n\nAn�lisis:\nEste issue requiere la integraci�n con el m�dulo de Calendario de Odoo para permitir la programaci�n de citas para la toma de muestras. Esto implica extender el modelo de eventos del calendario y crear vistas personalizadas.\n\nDesglose de Tareas Estimadas:\n- Extensi�n del modelo calendar.event: 1 - 2 horas\n- Creaci�n de vistas de formulario y calendario: 2 - 3 horas\n- L�gica para crear citas desde la orden de laboratorio: 2 - 3 horas\n\nTiempo Total Estimado: 5 - 8 horas\n\nNota: Esta es una estimaci�n y puede variar seg�n la complejidad que surja durante el desarrollo."
- \"### Estimaci�n de Tiempo de Desarrollo\n\n**An�lisis:**\nEste issue requiere la integraci�n con el m�dulo de Calendario de Odoo para permitir la programaci�n de citas para la toma de muestras. Esto implica extender el modelo de eventos del calendario y crear vistas personalizadas.\n\n**Desglose de Tareas Estimadas:**\n- Extensi�n del modelo `calendar.event`: 1 - 2 horas\n- Creaci�n de vistas de formulario y calendario: 2 - 3 horas\n- L�gica para crear citas desde la orden de laboratorio: 2 - 3 horas\n\n**Tiempo Total Estimado:** 5 - 8 horas\n\n*Nota: Esta es una estimaci�n y puede variar seg�n la complejidad que surja durante el desarrollo.*\"
Author
Owner

📋 Plan de Trabajo - Integración con Calendario para Citas

1. Análisis de Requerimientos

Funcionalidades principales:

  • Agendar citas de toma de muestra desde órdenes de laboratorio
  • Vincular citas con pacientes y órdenes
  • Notificaciones automáticas por email
  • Gestión de disponibilidad de personal flebotomista

2. Consideraciones Técnicas

Dependencias:

'depends': ['lims_management', 'calendar', 'mail']

Modelos a extender/crear:

  1. sale.order (Orden de Laboratorio):

    • Relación One2many con calendar.event
    • Campo computed para mostrar próxima cita
    • Método para crear citas
  2. calendar.event (Citas):

    • Campo Many2one a sale.order
    • Campo Many2one a res.partner (paciente)
    • Campo Many2one a hr.employee (flebotomista)
    • Campos adicionales: tipo_cita, instrucciones_previas
  3. res.partner (Paciente):

    • Relación One2many con calendar.event
    • Historial de citas

3. Propuesta de Implementación

Fase 1: Estructura Base

# Nuevos campos en sale.order
appointment_ids = fields.One2many('calendar.event', 'lab_order_id', string='Citas')
next_appointment_date = fields.Datetime(compute='_compute_next_appointment')
has_pending_appointment = fields.Boolean(compute='_compute_next_appointment')

# Extensión de calendar.event
lab_order_id = fields.Many2one('sale.order', string='Orden de Laboratorio')
appointment_type = fields.Selection([
    ('collection', 'Toma de Muestra'),
    ('delivery', 'Entrega de Resultados'),
    ('consultation', 'Consulta')
])
collection_instructions = fields.Text('Instrucciones Pre-Toma')
fasting_required = fields.Boolean('Requiere Ayuno')

Fase 2: Interfaz de Usuario

  1. Botón en Orden de Laboratorio:
<button name="action_schedule_appointment" 
        string="Agendar Cita" 
        type="object" 
        class="btn-primary"
        invisible="state != 'sale' or has_pending_appointment"
        icon="fa-calendar"/>
  1. Wizard para Agendar:
    • Selección de fecha/hora con disponibilidad
    • Asignación de flebotomista
    • Instrucciones específicas
    • Duración estimada

Fase 3: Lógica de Negocio

def action_schedule_appointment(self):
    """Abrir wizard para agendar cita"""
    # Calcular duración basada en análisis
    duration = self._calculate_appointment_duration()
    
    # Preparar valores por defecto
    default_values = {
        'name': f'Toma de muestra - {self.partner_id.name}',
        'partner_ids': [(4, self.partner_id.id)],
        'lab_order_id': self.id,
        'duration': duration,
        'appointment_type': 'collection',
        'location': self._get_default_location(),
    }
    
    # Abrir wizard con contexto
    return {
        'type': 'ir.actions.act_window',
        'res_model': 'lims.appointment.wizard',
        'view_mode': 'form',
        'target': 'new',
        'context': {'default_values': default_values}
    }

4. Sistema de Notificaciones

Configuración de Recordatorios:

  1. Email Templates:

    • Confirmación de cita (inmediato)
    • Recordatorio 24h antes
    • Recordatorio 2h antes
    • Instrucciones de preparación
  2. Contenido Dinámico:

<template id="appointment_reminder_email">
    <p>Estimado/a ${object.partner_id.name},</p>
    <p>Le recordamos su cita para toma de muestra:</p>
    <ul>
        <li>Fecha: ${object.start_datetime}</li>
        <li>Lugar: ${object.location}</li>
        <li>Orden: ${object.lab_order_id.name}</li>
    </ul>
    % if object.fasting_required:
        <p><strong>IMPORTANTE: Debe presentarse en ayunas (8 horas mínimo)</strong></p>
    % endif
</template>

5. Mejores Prácticas Propuestas

Seguridad:

  • Grupo específico: lims_management.group_appointment_manager
  • Permisos diferenciados para agendar/modificar/cancelar
  • Registro de auditoría para cambios en citas

UX/UI:

  • Vista calendario filtrada por flebotomista
  • Colores por tipo de cita
  • Drag & drop para reagendar
  • Validación de conflictos de horario

Integraciones:

  • SMS opcional (requiere módulo adicional)
  • Sincronización con Google Calendar (opcional)
  • QR code en confirmación para check-in rápido

6. Estructura de Archivos

lims_appointment/
├── __init__.py
├── __manifest__.py
├── security/
│   ├── ir.model.access.csv
│   └── appointment_security.xml
├── models/
│   ├── __init__.py
│   ├── sale_order.py
│   ├── calendar_event.py
│   └── res_partner.py
├── wizards/
│   ├── __init__.py
│   └── appointment_wizard.py
├── views/
│   ├── sale_order_views.xml
│   ├── calendar_event_views.xml
│   └── appointment_wizard_views.xml
├── data/
│   ├── mail_template_data.xml
│   └── appointment_data.xml
└── static/
    └── description/
        └── icon.png

7. Casos de Uso Especiales

  1. Múltiples muestras: Agendar varias tomas en días diferentes
  2. Domicilios: Integración con rutas de flebotomistas
  3. Urgencias: Marcado especial sin cita previa
  4. Reprogramación: Política de cambios y cancelaciones

8. Testing

Casos de prueba:

  1. Crear cita desde orden confirmada
  2. Notificaciones se envían correctamente
  3. Validación de disponibilidad
  4. Cancelación y reprogramación
  5. Vista calendario muestra correctamente
  6. Permisos por rol funcionan

9. Documentación

  • Manual de usuario para recepcionistas
  • Guía de configuración de horarios
  • FAQ para pacientes sobre citas

10. Consideraciones Futuras

  • Dashboard de métricas de citas (cumplimiento, no-show, etc.)
  • Integración con app móvil para pacientes
  • Sistema de lista de espera automática
  • Optimización de rutas para visitas domiciliarias

Nota: Este plan está diseñado como módulo independiente lims_appointment que extiende lims_management, siguiendo el principio de responsabilidad única y facilitando su instalación opcional.

## 📋 Plan de Trabajo - Integración con Calendario para Citas ### 1. Análisis de Requerimientos #### Funcionalidades principales: - Agendar citas de toma de muestra desde órdenes de laboratorio - Vincular citas con pacientes y órdenes - Notificaciones automáticas por email - Gestión de disponibilidad de personal flebotomista ### 2. Consideraciones Técnicas #### Dependencias: ```python 'depends': ['lims_management', 'calendar', 'mail'] ``` #### Modelos a extender/crear: 1. **sale.order** (Orden de Laboratorio): - Relación One2many con calendar.event - Campo computed para mostrar próxima cita - Método para crear citas 2. **calendar.event** (Citas): - Campo Many2one a sale.order - Campo Many2one a res.partner (paciente) - Campo Many2one a hr.employee (flebotomista) - Campos adicionales: tipo_cita, instrucciones_previas 3. **res.partner** (Paciente): - Relación One2many con calendar.event - Historial de citas ### 3. Propuesta de Implementación #### Fase 1: Estructura Base ```python # Nuevos campos en sale.order appointment_ids = fields.One2many('calendar.event', 'lab_order_id', string='Citas') next_appointment_date = fields.Datetime(compute='_compute_next_appointment') has_pending_appointment = fields.Boolean(compute='_compute_next_appointment') # Extensión de calendar.event lab_order_id = fields.Many2one('sale.order', string='Orden de Laboratorio') appointment_type = fields.Selection([ ('collection', 'Toma de Muestra'), ('delivery', 'Entrega de Resultados'), ('consultation', 'Consulta') ]) collection_instructions = fields.Text('Instrucciones Pre-Toma') fasting_required = fields.Boolean('Requiere Ayuno') ``` #### Fase 2: Interfaz de Usuario 1. **Botón en Orden de Laboratorio**: ```xml <button name="action_schedule_appointment" string="Agendar Cita" type="object" class="btn-primary" invisible="state != 'sale' or has_pending_appointment" icon="fa-calendar"/> ``` 2. **Wizard para Agendar**: - Selección de fecha/hora con disponibilidad - Asignación de flebotomista - Instrucciones específicas - Duración estimada #### Fase 3: Lógica de Negocio ```python def action_schedule_appointment(self): """Abrir wizard para agendar cita""" # Calcular duración basada en análisis duration = self._calculate_appointment_duration() # Preparar valores por defecto default_values = { 'name': f'Toma de muestra - {self.partner_id.name}', 'partner_ids': [(4, self.partner_id.id)], 'lab_order_id': self.id, 'duration': duration, 'appointment_type': 'collection', 'location': self._get_default_location(), } # Abrir wizard con contexto return { 'type': 'ir.actions.act_window', 'res_model': 'lims.appointment.wizard', 'view_mode': 'form', 'target': 'new', 'context': {'default_values': default_values} } ``` ### 4. Sistema de Notificaciones #### Configuración de Recordatorios: 1. **Email Templates**: - Confirmación de cita (inmediato) - Recordatorio 24h antes - Recordatorio 2h antes - Instrucciones de preparación 2. **Contenido Dinámico**: ```xml <template id="appointment_reminder_email"> <p>Estimado/a ${object.partner_id.name},</p> <p>Le recordamos su cita para toma de muestra:</p> <ul> <li>Fecha: ${object.start_datetime}</li> <li>Lugar: ${object.location}</li> <li>Orden: ${object.lab_order_id.name}</li> </ul> % if object.fasting_required: <p><strong>IMPORTANTE: Debe presentarse en ayunas (8 horas mínimo)</strong></p> % endif </template> ``` ### 5. Mejores Prácticas Propuestas #### Seguridad: - Grupo específico: `lims_management.group_appointment_manager` - Permisos diferenciados para agendar/modificar/cancelar - Registro de auditoría para cambios en citas #### UX/UI: - Vista calendario filtrada por flebotomista - Colores por tipo de cita - Drag & drop para reagendar - Validación de conflictos de horario #### Integraciones: - SMS opcional (requiere módulo adicional) - Sincronización con Google Calendar (opcional) - QR code en confirmación para check-in rápido ### 6. Estructura de Archivos ``` lims_appointment/ ├── __init__.py ├── __manifest__.py ├── security/ │ ├── ir.model.access.csv │ └── appointment_security.xml ├── models/ │ ├── __init__.py │ ├── sale_order.py │ ├── calendar_event.py │ └── res_partner.py ├── wizards/ │ ├── __init__.py │ └── appointment_wizard.py ├── views/ │ ├── sale_order_views.xml │ ├── calendar_event_views.xml │ └── appointment_wizard_views.xml ├── data/ │ ├── mail_template_data.xml │ └── appointment_data.xml └── static/ └── description/ └── icon.png ``` ### 7. Casos de Uso Especiales 1. **Múltiples muestras**: Agendar varias tomas en días diferentes 2. **Domicilios**: Integración con rutas de flebotomistas 3. **Urgencias**: Marcado especial sin cita previa 4. **Reprogramación**: Política de cambios y cancelaciones ### 8. Testing #### Casos de prueba: 1. Crear cita desde orden confirmada 2. Notificaciones se envían correctamente 3. Validación de disponibilidad 4. Cancelación y reprogramación 5. Vista calendario muestra correctamente 6. Permisos por rol funcionan ### 9. Documentación - Manual de usuario para recepcionistas - Guía de configuración de horarios - FAQ para pacientes sobre citas ### 10. Consideraciones Futuras - Dashboard de métricas de citas (cumplimiento, no-show, etc.) - Integración con app móvil para pacientes - Sistema de lista de espera automática - Optimización de rutas para visitas domiciliarias --- **Nota**: Este plan está diseñado como módulo independiente `lims_appointment` que extiende `lims_management`, siguiendo el principio de responsabilidad única y facilitando su instalación opcional.
Author
Owner

📋 Plan de Trabajo - Integración con Calendario para Citas

1. Análisis de Requerimientos

Funcionalidades principales:

  • Agendar citas de toma de muestra desde órdenes de laboratorio
  • Vincular citas con pacientes y órdenes
  • Notificaciones automáticas por email
  • Gestión de disponibilidad de personal flebotomista

2. Consideraciones Técnicas

Dependencias:

\

Modelos a extender/crear:

  1. sale.order (Orden de Laboratorio):

    • Relación One2many con calendar.event
    • Campo computed para mostrar próxima cita
    • Método para crear citas
  2. calendar.event (Citas):

    • Campo Many2one a sale.order
    • Campo Many2one a res.partner (paciente)
    • Campo Many2one a hr.employee (flebotomista)
    • Campos adicionales: tipo_cita, instrucciones_previas
  3. res.partner (Paciente):

    • Relación One2many con calendar.event
    • Historial de citas

3. Propuesta de Implementación

Fase 1: Estructura Base

\

Fase 2: Interfaz de Usuario

  1. Botón en Orden de Laboratorio:
    \
  2. Wizard para Agendar:
    • Selección de fecha/hora con disponibilidad
    • Asignación de flebotomista
    • Instrucciones específicas
    • Duración estimada

4. Sistema de Notificaciones

Email Templates:

  • Confirmación de cita (inmediato)
  • Recordatorio 24h antes
  • Recordatorio 2h antes
  • Instrucciones de preparación

5. Mejores Prácticas Propuestas

Seguridad:

  • Grupo específico: lims_management.group_appointment_manager
  • Permisos diferenciados para agendar/modificar/cancelar
  • Registro de auditoría para cambios en citas

UX/UI:

  • Vista calendario filtrada por flebotomista
  • Colores por tipo de cita
  • Drag & drop para reagendar
  • Validación de conflictos de horario

6. Estructura de Archivos

\

7. Casos de Uso Especiales

  1. Múltiples muestras: Agendar varias tomas en días diferentes
  2. Domicilios: Integración con rutas de flebotomistas
  3. Urgencias: Marcado especial sin cita previa
  4. Reprogramación: Política de cambios y cancelaciones

8. Testing

Casos de prueba:

  1. Crear cita desde orden confirmada
  2. Notificaciones se envían correctamente
  3. Validación de disponibilidad
  4. Cancelación y reprogramación
  5. Vista calendario muestra correctamente
  6. Permisos por rol funcionan

9. Consideraciones Futuras

  • Dashboard de métricas de citas (cumplimiento, no-show, etc.)
  • Integración con app móvil para pacientes
  • Sistema de lista de espera automática
  • Optimización de rutas para visitas domiciliarias

Nota: Este plan está diseñado como módulo independiente que extiende lims_management, siguiendo el principio de responsabilidad única y facilitando su instalación opcional.

## 📋 Plan de Trabajo - Integración con Calendario para Citas ### 1. Análisis de Requerimientos #### Funcionalidades principales: - Agendar citas de toma de muestra desde órdenes de laboratorio - Vincular citas con pacientes y órdenes - Notificaciones automáticas por email - Gestión de disponibilidad de personal flebotomista ### 2. Consideraciones Técnicas #### Dependencias: \ #### Modelos a extender/crear: 1. **sale.order** (Orden de Laboratorio): - Relación One2many con calendar.event - Campo computed para mostrar próxima cita - Método para crear citas 2. **calendar.event** (Citas): - Campo Many2one a sale.order - Campo Many2one a res.partner (paciente) - Campo Many2one a hr.employee (flebotomista) - Campos adicionales: tipo_cita, instrucciones_previas 3. **res.partner** (Paciente): - Relación One2many con calendar.event - Historial de citas ### 3. Propuesta de Implementación #### Fase 1: Estructura Base \ #### Fase 2: Interfaz de Usuario 1. **Botón en Orden de Laboratorio**: \ 2. **Wizard para Agendar**: - Selección de fecha/hora con disponibilidad - Asignación de flebotomista - Instrucciones específicas - Duración estimada ### 4. Sistema de Notificaciones #### Email Templates: - Confirmación de cita (inmediato) - Recordatorio 24h antes - Recordatorio 2h antes - Instrucciones de preparación ### 5. Mejores Prácticas Propuestas #### Seguridad: - Grupo específico: lims_management.group_appointment_manager - Permisos diferenciados para agendar/modificar/cancelar - Registro de auditoría para cambios en citas #### UX/UI: - Vista calendario filtrada por flebotomista - Colores por tipo de cita - Drag & drop para reagendar - Validación de conflictos de horario ### 6. Estructura de Archivos \ ### 7. Casos de Uso Especiales 1. **Múltiples muestras**: Agendar varias tomas en días diferentes 2. **Domicilios**: Integración con rutas de flebotomistas 3. **Urgencias**: Marcado especial sin cita previa 4. **Reprogramación**: Política de cambios y cancelaciones ### 8. Testing #### Casos de prueba: 1. Crear cita desde orden confirmada 2. Notificaciones se envían correctamente 3. Validación de disponibilidad 4. Cancelación y reprogramación 5. Vista calendario muestra correctamente 6. Permisos por rol funcionan ### 9. Consideraciones Futuras - Dashboard de métricas de citas (cumplimiento, no-show, etc.) - Integración con app móvil para pacientes - Sistema de lista de espera automática - Optimización de rutas para visitas domiciliarias --- **Nota**: Este plan está diseñado como módulo independiente que extiende lims_management, siguiendo el principio de responsabilidad única y facilitando su instalación opcional.
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Grupo-Consiti/clinical_laboratory#15
No description provided.