Saltar a contenido

🐾 PET como App — Cómo Exponer Objetos de Negocio en el Flow Builder

Fecha: 1 de abril de 2026 Propósito: Diseñar qué "Apps" reales aparecen en el AppSelectorDialog de Jaraxa cuando se usa desde dkv-pet-flows Premisa: El AppSelectorDialog actual tiene sus apps no-Flow-Control como mockups (Gmail, Slack, etc.). Son placeholder conceptual. Este documento define qué va en su lugar.


1. El Problema

El AppSelectorDialog de Jaraxa muestra apps al estilo Make.com: Gmail, Google Sheets, Slack, OpenAI... Pero dkv-pet-flows no se integra con Gmail ni Slack. Se integra con:

  • dkv-pet-cloud (fuente de verdad de negocio)
  • Gorush (push notifications)
  • SMTP/SendGrid (email)
  • Y potencialmente con sistemas DKV futuros

La pregunta es: ¿cómo organizo los objetos de negocio de PET en el concepto de "App" del selector?


2. Las 5 Apps Reales de DKV Pet Flows

graph LR
    subgraph "AppSelectorDialog"
        PET["🐾 DKV PET<br/>Datos de negocio"]
        NOTIFY["📲 Notificaciones<br/>Canales de salida"]
        FC["🔧 Flow Control<br/>Lógica del flujo"]
        DATA["🗄️ Datos<br/>Consultas y variables"]
        AI["🤖 Inteligencia<br/>IA y personalización"]
    end

    style PET fill:#009BE0,color:#fff
    style NOTIFY fill:#059669,color:#fff
    style FC fill:#10b981,color:#fff
    style DATA fill:#2563EB,color:#fff
    style AI fill:#DB2777,color:#fff

[!IMPORTANT] Estas 5 apps reemplazan los 9 mockups actuales (Google Sheets, Airtable, Gmail, Slack, OpenAI, HTTP, Webhooks, Tools, Flow Control). Solo Flow Control se mantiene tal cual.


3. App 1 — 🐾 DKV PET (Fuente de Datos)

Esta es la app más importante. Expone los objetos de negocio de dkv-pet-cloud como triggers y acciones.

Objetos de Negocio de PET

Objeto PET Descripción Rol en Flows
Queue (Cola) Cola de atención (Telemedicina, Urgencias, Nutrición...) 🔴 Trigger principal
Encounter (Caso) Caso médico (videollamada/chat) Datos del evento
User Usuario de la app QC+ Destinatario
Pet (Mascota) Mascota del usuario Datos de contexto
Policy (Póliza) Póliza de seguro Datos de segmentación

Módulos de la App "DKV PET"

ID Módulo Tipo Descripción Datos que produce
pet-case-closed Caso cerrado trigger Se dispara cuando un caso/encounter se cierra en una cola encounter_id, queue_id, patient_id, pet_id, vet_id, closed_at, diagnosis, queue_name
pet-case-created Nuevo caso trigger Se dispara cuando se abre un nuevo caso encounter_id, queue_id, patient_id, reason
pet-queue-timeout Tiempo de respuesta excedido trigger Se dispara cuando un caso supera el SLA de respuesta configurado en la cola encounter_id, queue_id, elapsed_time, sla_limit
pet-user-inactive Usuario inactivo trigger Se dispara periódicamente para usuarios sin actividad en N días user_id, last_active_at, days_inactive
pet-pet-birthday Cumpleaños de mascota trigger Se dispara en el cumpleaños de la mascota pet_id, pet_name, user_id, age
pet-policy-change Cambio de póliza trigger Alta, baja, o renovación de póliza policy_id, user_id, change_type, effective_date
pet-vaccine-reminder Recordatorio de vacuna trigger Próxima vacuna programada en N días pet_id, vaccine_name, due_date
pet-get-user Obtener usuario search Busca datos completos del usuario user_idname, email, phone, push_token, tags
pet-get-pet Obtener mascota search Busca datos de la mascota pet_idname, species, breed, birthdate, vaccines
pet-update-tags Actualizar tags action Modifica tags del usuario en tiempo real (sin deploy de app) Input: user_id, tags_to_add, tags_to_remove
pet-update-profile Actualizar perfil action Modifica datos del usuario/mascota Input: user_id, campos a modificar

La Cola como Puente Natural 🔑

[!IMPORTANT] La Cola (Queue) de PET es el concepto puente perfecto entre PET y Flows. Cada cola ya tiene un campo webhook_new_message_recipients que envía webhooks cuando ocurre actividad. Esto convierte cada cola en un canal de eventos natural.

dkv-pet-cloud                                dkv-pet-flows
┌──────────────────────┐                     ┌──────────────────────┐
│ Queue: Telemedicina   │                     │ Trigger: Caso cerrado│
│  ├─ webhook_url ──────┼────── HTTP POST ───►│  ├─ Cola: Telemedicina│
│  ├─ sla_response: 2h  │                     │  ├─ Filtro: ...       │
│  └─ sla_resolution:24h│                     │  └─ Payload: {...}    │
│                       │                     │                       │
│ Queue: Urgencias      │                     │ Trigger: SLA excedido │
│  ├─ webhook_url ──────┼────── HTTP POST ───►│  ├─ Cola: Urgencias   │
│  └─ sla_response: 30m │                     │  └─ Timeout: 30m      │
└──────────────────────┘                     └──────────────────────┘

Cambio de requisito mencionado por el usuario: El primer cambio que han pedido se puede hacer "con unos ajustes añadiendo una nueva configuración de tiempo de respuesta (parecida) en la configuración de la cola". Esto confirma que la Cola es la entidad central de integración.


4. App 2 — 📲 Notificaciones (Canales de Salida)

Esta app agrupa todos los canales de comunicación con el usuario final.

ID Módulo Tipo Descripción Backend
notify-push Enviar Push action Push notification iOS/Android con rich content, deep links Gorush → APNs + FCM
notify-push-rich Push enriquecido action Push con imagen, botones de acción, deep link Gorush (rich payload)
notify-email Enviar Email action Email con template personalizado Dapr Binding → SMTP/SendGrid
notify-sms Enviar SMS action SMS transaccional Dapr Binding → Twilio/Vonage
notify-in-app Mensaje In-App action Mensaje mostrado al abrir la app WebSocket/SSE → QC+ App
notify-inbox Buzón In-App action Mensaje persistente en buzón del usuario PostgreSQL + API

[!TIP] Notificare replacement: Esta app es el reemplazo funcional directo de Notificare. Cada módulo aquí equivale a lo que Notificare hacía, pero con la ventaja de que los tags se pueden modificar en tiempo real (módulo pet-update-tags) sin publicar nueva versión de la app.


5. App 3 — 🔧 Flow Control (Lógica)

Ya existe en Jaraxa. Se mantiene tal cual con estos módulos:

ID Módulo Tipo Descripción
fc-router Router action Bifurcación condicional N ramas
fc-iterator Iterator action Itera sobre array de elementos
fc-aggregator Aggregator action Combina resultados
fc-sleep Espera action Delay temporal (minutos, horas, días)
fc-wait-event Esperar evento action Pausa hasta que ocurra evento o timeout
fc-rate-limiter Rate Limiter action Control de velocidad de envío
fc-error-handler Error Handler action Captura errores y redirige
fc-ab-split A/B Test action Split porcentual (60/40, 50/50, etc.)

6. App 4 — 🗄️ Datos & Consultas

ID Módulo Tipo Descripción
data-query Consulta BD search Query a PostgreSQL o PET API
data-transform Transformar action Mapear, filtrar o reestructurar datos
data-variable Variable action Set/Get variables del flow
data-template Template action Renderizar template con datos del contexto
data-http HTTP Request action Llamada a API externa genérica
data-webhook-out Webhook saliente action POST a sistema externo

7. App 5 — 🤖 Inteligencia (IA)

ID Módulo Tipo Descripción Backend
ai-generate Generar contenido action Personaliza mensaje con LLM LangChain4j → Azure OpenAI
ai-best-time Mejor hora de envío action Calcula hora óptima para el usuario ML model
ai-sentiment Análisis sentimiento action Analiza respuesta de encuesta LangChain4j
ai-classify Clasificar action Clasifica tipo de consulta, urgencia LangChain4j
ai-recommend Recomendar action Sugiere acción basada en historial Recommendation engine

8. Visualización Completa del AppSelectorDialog (DKV)

┌─────────────────────────────────────────────────────────────────────┐
│  🔍 Buscar apps o módulos...                          │ 📋 All apps│
│  ─────────────────────────────────────────────────────────────────  │
│                                                       │ ⭐ Featured│
│  Apps en este escenario                               │ 🔧 Built-in│
│                                                       │ ⚡ Triggers│
│  ┌─────────────────────────────────────────────────┐  │ 🤖 IA     │
│  │ 🐾  DKV PET                              ›     │  │            │
│  │     Casos, colas, usuarios, mascotas, pólizas   │  │            │
│  ├─────────────────────────────────────────────────┤  │            │
│  │ 📲  Notificaciones                        ›     │  │            │
│  │     Push, email, SMS, in-app, buzón             │  │            │
│  ├─────────────────────────────────────────────────┤  │            │
│  │ 🔧  Flow Control                         ›     │  │            │
│  │     Router, espera, iterador, A/B test          │  │            │
│  ├─────────────────────────────────────────────────┤  │            │
│  │ 🗄️  Datos                                ›     │  │            │
│  │     Queries, variables, templates, HTTP         │  │            │
│  ├─────────────────────────────────────────────────┤  │            │
│  │ 🤖  Inteligencia                          ›     │  │            │
│  │     Generar contenido, sentimiento, timing      │  │            │
│  └─────────────────────────────────────────────────┘  │            │
│                                                       │ 💬 Feedback│
└─────────────────────────────────────────────────────────────────────┘

Vista de módulos de "DKV PET" (drill-down)

┌─────────────────────────────────────────────────────────────────────┐
│  ‹ 🐾 DKV PET                                                      │
│  ─────────────────────────────────────────────────────────────────  │
│                                                                     │
│  TRIGGERS                                                           │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ ⚡ Caso cerrado                                   TRIGGER  │   │
│  │    Se dispara cuando un caso se cierra en una cola          │   │
│  ├─────────────────────────────────────────────────────────────┤   │
│  │ ⚡ Nuevo caso                                     TRIGGER  │   │
│  │    Se dispara cuando se abre un nuevo caso                  │   │
│  ├─────────────────────────────────────────────────────────────┤   │
│  │ ⏰ Tiempo de respuesta excedido                   TRIGGER  │   │
│  │    Se dispara cuando un caso supera el SLA                  │   │
│  ├─────────────────────────────────────────────────────────────┤   │
│  │ 😴 Usuario inactivo                               TRIGGER  │   │
│  │    Usuarios sin actividad en los últimos N días             │   │
│  ├─────────────────────────────────────────────────────────────┤   │
│  │ 🎂 Cumpleaños de mascota                          TRIGGER  │   │
│  │ 💉 Recordatorio de vacuna                         TRIGGER  │   │
│  │ 📋 Cambio de póliza                               TRIGGER  │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  BÚSQUEDA                                                           │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ 🔍 Obtener usuario                                SEARCH  │   │
│  │ 🔍 Obtener mascota                                SEARCH  │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  ACCIONES                                                           │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ 🏷️ Actualizar tags                                ACTION  │   │
│  │ 👤 Actualizar perfil                              ACTION  │   │
│  └─────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────┘

9. De Mockup a Realidad — Plan de Implementación

Paso Descripción Dónde
1 Mover MOCK_APPS → interfaz AppRegistry extensible @jaraxa/flow-canvas
2 Crear constante DKV_APPS con las 5 apps reales dkv-pet-flows-admin
3 El AppSelectorDialog recibe apps via prop o provider, no hardcodeado @jaraxa/flow-canvas
4 Crear endpoint GET /api/integrations que devuelve las apps dinámicamente dkv-pet-flows-api
5 Crear endpoint GET /api/pet/queues para listar colas disponibles de PET dkv-pet-flows-api
6 Post-selección de trigger PET → mostrar selector de cola + configuración dkv-pet-flows-admin

[!WARNING] El fetchAppsAPI actual es un mock estático. Para el MVP Backlog, basta con reemplazar los datos mock por las 5 apps definidas aquí. La versión dinámica (endpoint real) puede esperar a Sprint 2.


Documentos Relacionados

Documento Propósito
01 — Mapa de Piezas Vista general del ecosistema
02 — Tensión Conceptual Make.com vs Customer Engagement
04 — Anatomía del MVP Backlog Flujo concreto de encuesta
05 — Direcciones Estratégicas Qué construir primero