Saltar a contenido

🗺️ Mapa de Piezas — Ecosistema DKV Pet Flows

Fecha: 4 de abril de 2026 (actualizado) Audiencia: Product Owner / Equipo técnico Propósito: Visión de pájaro de TODAS las piezas implicadas y sus relaciones


1. Las 5 Piezas del Ecosistema

graph TB
    subgraph "LIBRERÍA (IP propia)"
        JARAXA["🔧 Jaraxa / ui-flows<br/>Librería npm visual de flows<br/>workspace.jaraxa/ui-flows"]
    end

    subgraph "PRODUCTO (Para DKV)"
        FLOWS["📊 dkv-pet-flows<br/>Plataforma Customer Engagement<br/>workspace.dkv/dkv-pet-flows"]

        subgraph "Frontend"
            ADMIN["dkv-pet-flows-admin<br/>React 18 + Vite"]
        end
        subgraph "Backend"  
            API["dkv-pet-flows-api<br/>Quarkus 3.32 + Dapr"]
        end
    end

    subgraph "FUENTE DE DATOS (Cliente)"
        PET["🐾 dkv-pet-cloud<br/>Spring Boot 3.5.9 + Pekko<br/>Monolito modular"]
        NTF["📲 dkv-notifications<br/>Erlang OTP<br/>Gorush → APNs + FCM"]
        DTM["⏰ distributed-task-manager<br/>Quartz Scheduler<br/>Planificaciones"]
        NETCOMP["🦎 netcomp<br/>Erlang legacy<br/>En proceso de migración"]
    end

    subgraph "INFRAESTRUCTURA (DKV)"
        HC["InterSystems Health Connect<br/>ESB Sanitario"]
        RMQ["RabbitMQ<br/>Mensajería bidireccional"]
    end

    JARAXA -->|"npm link / workspaces"| ADMIN
    ADMIN -->|"REST API"| API
    NETCOMP -->|"HTTP POST /api/v1/events"| API
    API -->|"AMQP publish"| RMQ
    RMQ -->|"AMQP consume"| API
    API -->|"Webhooks IN"| PET
    API -->|"REST OUT (proxy)"| PET
    API -.->|"Fase 2: absorbe"| NTF
    API -.->|"Strangler Fig"| DTM
    PET <-->|"Leader/Follower"| NETCOMP
    PET <-->|"AMQP"| RMQ
    NTF -->|"Push"| GORUSH["Gorush<br/>APNs + FCM"]
    HC -->|"Eventos clínicos"| PET

    style JARAXA fill:#7C3AED,color:#fff
    style FLOWS fill:#3b82f6,color:#fff
    style PET fill:#009BE0,color:#fff
    style NTF fill:#D97706,color:#fff
    style DTM fill:#6366f1,color:#fff
    style NETCOMP fill:#ef4444,color:#fff
    style HC fill:#0891B2,color:#fff

2. Estado Actual de Cada Pieza

# Pieza Estado Lo que EXISTE Lo que FALTA
1 Jaraxa (ui-flows) 🟡 30% Canvas, BaseNode, RouterNode, EmptyTrigger, ModuleNode, AppSelectorDialog, ContextMenu, EdgeFilter, SettingsPanel, Store completo, 4 temas CSS Iterator, Aggregator, nodos de control avanzados, sistema de scheduling, conexión con API real
2 dkv-pet-flows-admin 🔴 10% Scaffolding React 18 + Vite, estructura MUI/Tailwind heredada de pet-cloud-admin Integración de Jaraxa, páginas de escenarios, dashboard, analíticas
3 dkv-pet-flows-api 🟡 25% AMQP Gateway nativo (SmallRye, 8 clases), subscribe/unsubscribe dinámico, webhook forwarding, mvn clean compile Modelo de datos Flow/Node/Edge, motor de ejecución Dapr, UI admin
4 dkv-pet-cloud ✅ Producción API REST completa, Encounters, Queues con webhook_new_message_recipients, Pekko cluster OpenAPI formal no publicada
5 dkv-notifications ✅ Producción Push via Gorush, DB propia PostgreSQL 11.6 Nada — se absorberá en Fase 2
6 DTM ✅ Producción Quartz Scheduler activo Nada — Strangler Fig, expira orgánicamente

3. Flujo de Datos — MVP Backlog (Encuesta de Satisfacción)

sequenceDiagram
    participant PET as dkv-pet-cloud
    participant Q as Cola (Queue)
    participant FLOWS as dkv-pet-flows-api
    participant ENGINE as Dapr Workflow
    participant GORUSH as Gorush
    participant APP as QC+ App

    PET->>Q: Caso médico cerrado (Encounter CLOSED)
    Q->>FLOWS: Webhook POST (payload con datos del caso)
    FLOWS->>ENGINE: Dispara flow "Encuesta Post-Consulta"
    ENGINE->>ENGINE: Wait 5 días (Dapr Timer)
    ENGINE->>ENGINE: Evaluar condición (¿push habilitado?)
    ENGINE->>GORUSH: Enviar push con deep link
    GORUSH->>APP: Push notification → Deep link a encuesta
    APP->>PET: Usuario completa encuesta

4. Relación Jaraxa ↔ Flows (Librería vs Producto)

                    GENÉRICO                              ESPECÍFICO
                    ─────────                             ──────────

    ┌───────────────────────────────┐     ┌───────────────────────────────┐
    │     Jaraxa (ui-flows)         │     │    dkv-pet-flows              │
    │                               │     │                               │
    │  • Canvas React Flow          │     │  • 40 nodos de negocio DKV    │
    │  • BaseNode, RouterNode...    │     │  • Apps = { PET, Gorush... }  │
    │  • AppSelectorDialog          │ ──► │  • Triggers = eventos PET     │
    │  • Store Zustand              │     │  • Scheduling = colas PET     │
    │  • 4 temas CSS                │     │  • DomainIconPack pet-health  │
    │  • ModuleType taxonomy        │     │  • Backend Quarkus + Dapr     │
    │  • Edges con filtros          │     │  • Persistencia PostgreSQL    │
    │                               │     │                               │
    │  IP: Jaraxa Software          │     │  IP: Para DKV Seguros         │
    └───────────────────────────────┘     └───────────────────────────────┘

[!IMPORTANT] Jaraxa es agnóstica de dominio. No sabe qué es un "caso médico", una "cola", ni un "push". Solo sabe de nodos, edges, apps, módulos, y canvas. Todo lo específico de DKV vive en dkv-pet-flows.


5. Las 3 Grandes Tensiones Detectadas

Tensión 1 — Terminología: Make.com vs Customer Engagement

Jaraxa usa la taxonomía de Make.com (Scenario, Module, Blueprint, Trigger/Action/Search). Pero dkv-pet-flows es un sistema de Customer Engagement (la jerga es: Campaña, Segmento, Canal, Evento, Audiencia).

Make.com Customer Engagement ¿Conflicto?
Scenario Flujo / Campaña ⚠️ Naming
Module Nodo / Bloque ⚠️ Naming
Trigger Evento de entrada ✅ Compatible
Action Canal / Acción ✅ Compatible
App Integración / Conector ⚠️ Concepto clave
Filter (en edge) Condición / Segmento ⚠️ Naming
Blueprint Flow Definition ✅ Compatible

Tensión 2 — Filtro de Entrada al Flujo

En Make.com, un Scenario empieza con un Trigger de una App. En Customer Engagement, un flujo empieza con un criterio de audiencia:

  • "En este flujo entran todos los pacientes que cierren un caso"Event-based trigger
  • "Usuarios que llevan 1 mes sin conectar"Segment-based trigger (cron + query)
  • "Flujo permanente que detecta cierres de caso"Always-on webhook trigger

Esto implica que el nodo Trigger de Jaraxa necesita ser mucho más rico de lo que es en Make.com. No es solo "App X → Watch Rows". Es "PET.Queues → Case Closed → con filtros de segmento".

Tensión 3 — ¿Cómo expone PET sus objetos de negocio?

Pet Cloud tiene objetos de negocio ricos: Encounters, Queues, Users, Policies, Pets. Pero no tiene una API de "apps & modules" como Make.com. La pregunta es: ¿cómo traduzco los objetos de PET al concepto de "App" del AppSelectorDialog?


6. Inventario de Progreso por Capa

Capa Pieza Progreso Detalle
L0 — Librería @jaraxa/flow-canvas 🟡 70% Canvas, store, dialogs, temas
L0 — Librería @jaraxa/flow-nodes 🟡 50% BaseNode, Router, EmptyTrigger, Module
L0 — Librería @jaraxa/flow-edges 🟡 40% AnimatedEdge básico
L0 — Librería @jaraxa/flow-icons 🟢 80% Resolución L1/L2 con lucide
L0 — Librería @jaraxa/flow-config 🔴 0% No iniciado
L0 — Librería @jaraxa/flow-monitor 🔴 0% No iniciado
L1 — Producto FE dkv-pet-flows-admin 🔴 10% Solo scaffolding
L1 — Producto BE dkv-pet-flows-api 🟡 25% AMQP Gateway: publish REST, consume AMQP, subscribe dinámico, webhook forwarding
L2 — Integración netcomp → Flows → RabbitMQ ✅ Implementado POST /api/v1/events vía hackney + SmallRye AMQP Gateway
L2 — Integración PET → Flows webhook 📋 Diseñado webhook_new_message_recipients confirmado
L2 — Integración Flows → Gorush push 📋 Diseñado Arquitectura clara, Gorush stateless
L3 — Modelo datos Flow/Node/Edge types 🔴 0% Definido conceptualmente, no implementado

Documentos Relacionados

Documento Propósito
02 — Tensión Conceptual: Make.com vs Customer Engagement Análisis profundo de la Tensión 1 y 2
03 — PET como App: Cómo exponer objetos de negocio Resolución de la Tensión 3
04 — Anatomía del MVP Backlog: Flujo Encuesta de Satisfacción Diseño completo del flujo MVP Backlog
05 — Direcciones Estratégicas: ¿Qué construir primero? Opciones de priorización con análisis RICE