Plataforma de Inteligencia Artificial Operativa para Negocios de Centroamérica
Documento generado: Mayo 2026 · Versión del manifiesto: v2.2
Nexus es una plataforma de inteligencia artificial operativa diseñada para negocios de Centroamérica. No es un chatbot. No es un wrapper de OpenAI. Es un sistema completo que:
El chat (POST /v1/chat/completions) es UNA de 304 rutas HTTP. Las otras manejan workflows, integraciones, facturación, conocimiento, reglas, reportes, aprobaciones, memoria, descubrimiento de esquemas, Sentinel, Connector, equipos, roles, erasure, verticales, y más.
Negocios de Centroamérica (SV, CR, GT, HN, PA, NI, DO) que necesitan automatizar operaciones sin exponer datos sensibles a proveedores de LLM. Desde un contador independiente hasta una empresa de 10,000 empleados. Español primero, variantes regionales (salvadoreño, tico, chapín, catracho, dominicano, panameño).
“Conectá Nexus a tu negocio. En horas entiende cómo trabajás. En días te propone los workflows que te van a ahorrar 20–30 horas al mes. Vos aprobás, Nexus ejecuta 24/7.”
Tres productos peer (misma base de código, repos separados para Comm API):
| Componente | Directorio | Puerto | Función |
|---|---|---|---|
| Brain API (Main API) | api/ | 9700 | Toda la lógica de negocio. HTTP only. Anonimización, routing, workflows, integraciones, memoria, costos, reglas, Sentinel. |
| Comm API | comm-api/ | 8001 | Gateway de tiempo real. WebSockets + webhooks. Pass-through estricto — sin storage, sin lógica de negocio, sin acceso a BD. |
| Connector | connector/ | — | Agente local instalado en infraestructura del cliente. WSS bidireccional iniciado por el cliente. Dumb-pipe: cero lógica local. |
| Customer Portal | customer-portal/ | 8700 | Portal self-service para clientes. HTML estático + JS vanilla. serve.py inyecta config en runtime. |
| Admin Portal | frontend/ | 8701 | Portal staff/admin. Gestión de tenants, aplicaciones, tiers, branding, SSO. |
| Web App | web/ | 3000 | Next.js 14. Reemplazo moderno del portal HTML (en progreso). |
| Mode A — Shared (multi-tenant) | Mode B — Dedicated (single-tenant) | |
|---|---|---|
| Para quién | Starter / Pro / Enterprise tiers | Contratos Tier-2 con requisito de aislamiento de datos |
| Infra | 1 Main API, 1 Postgres, 1 Redis, compartidos | Main API + DB + Redis dedicados por cliente |
| Aislamiento Postgres | Row-Level Security (RLS) | Base de datos separada |
| Aislamiento Redis | Prefijo tenant:{id}: | Cluster separado |
| Onboarding | < 5 minutos | ~15 minutos (Terraform + script) |
La lógica de negocio nunca bifurca por modo de despliegue. Un TenantResolver se inyecta al arranque; el código downstream solo ve un TenantContext resuelto.
| Proveedor | Rol | Modelos principales | Estado |
|---|---|---|---|
| Groq | Generalista (fast, cheap) | LLaMA, Mixtral | Live |
| xAI (Grok) | Generalista | Grok-2 | Live |
| Anthropic | Generalista (quality) | Claude 4.x | Live |
| Generalista (multimodal) | Gemini | Live | |
| DeepSeek | Generalista (code/reasoning) | DeepSeek-V3 | Live |
| OpenAI | Generalista (fallback) | GPT-4o | Live |
| Perplexity | Especialista (búsqueda) | Sonar Pro/Reasoning | Opt-in |
Matriz de tier × categoría (fast_chat, reasoning_coding, creative_writing, multimodal_vision, factual_research, ultra_cheap) que determina (provider, model, params) por llamada. Cuatro niveles de fallback: app-override → app-default → tenant-default → plan-default. DB-backed y editable desde admin.
Ensemble Scout → Reader(s) → Synth por categoría. Cada paso atribuido vía RTK. Recetas editables desde staff admin.
fast_cheap, balanced, best_quality, long_context — el cliente usa aliases, Nexus rutea al proveedor óptimo.
Chat nativo (web + dock flotante + móvil), TTS (ElevenLabs 4 voces), STT (Groq Whisper), attachments con escaneo antivirus (ClamAV), redacción de imágenes (caras + OCR), streaming SSE.
Motor de workflows (LangGraph), definiciones con steps JSON, triggers (chat, cron, webhook), aprobaciones human-in-loop, dry-run, propuestas de workflow desde skeleton.
Memoria por sesión, SLCE (6 capas de auto-aprendizaje), pgvector embeddings, skeleton de negocio, descubrimiento de esquemas, memoria editable por usuario, forget-on-request.
16 adaptadores (Gmail, Calendar, Drive, HubSpot, Slack, Notion, Alegra, Contífico, QuickBooks, Stripe, Shopify, WooCommerce, Zoho, Pipedrive, Belvo, D7 SMS). OAuth refresh, circuit breaker, retry, idempotencia.
Dashboard de uso (24h/7d/30d), ROI con desglose por workflow, reportes generados (PDF/PPTX), digests diarios, detección de anomalías, presentaciones con branding del tenant.
Motor de reglas (system + custom por tenant), aprobaciones, caps de gasto (diario/mensual con downgrade automático), audit logs, anonimización reversible (texto + imagen), erasure GDPR, white-label, SSO por tenant.
Monitor LLM-powered que corre continuamente: verificaciones RLS, fallos de anonimización, anomalías de costo, patrones de auth, completitud de erasure. Infraestructura siempre activa; business-scope opt-in por tenant. Read-only por defecto con acciones pre-aprobadas acotadas.
HTML estático + JS vanilla. Sin build step, sin Node. serve.py inyecta PUBLIC_BASE_URL en <meta name="nx-api-base"> al servir. Mismo artifact en dev/UAT/prod.
| Tab | Página | Función |
|---|---|---|
| Inicio | dashboard.html | Uso (requests, tokens, costo, errores), barras diarias, desglose por modelo, presupuesto |
| chat.html | Chat real-time con 7 modelos, historial de conversaciones, streaming SSE | |
| insights.html | Digests diarios, análisis de datos, anomalías | |
| reports.html | Reportes generados con signed-URL retrieval | |
| roi.html | ROI: horas-hombre ahorradas, costo LLM, desglose por workflow | |
| Trabajo | propuestas.html | Propuestas de workflow generadas por LLM: revisar, aprobar, rechazar, materializar |
| workflows.html | Workflows definidos por tenant: crear, ejecutar, historial de runs | |
| approvals.html | Cola de aprobaciones de tool-calls con razonamiento | |
| calls.html | Historial de llamadas LLM y voz | |
| Conocimiento | mi-negocio.html | Perfil de negocio / contexto empresarial |
| fuentes.html | Fuentes de datos (data sources) | |
| mapeo.html | Editor de mapeo de esquemas (read + edit live) | |
| memoria.html | Memoria por scopes (short/long-term, por subject) | |
| conocimiento.html | Base de conocimiento SLCE (6 capas), opt-outs por capa/fila | |
| sugerencias.html | Inbox de sugerencias (SLCE): aceptar, descartar, bulk | |
| rules.html | Reglas custom (crear, editar, preview, eliminar) | |
| Config | integrations.html | Adaptadores OAuth + credenciales directas. Habilitar/deshabilitar/eliminar |
| email.html | Credenciales de canal email (vault cifrado) | |
| sentinel.html | Hallazgos de seguridad Sentinel, marcar falsos positivos, exportar CSV | |
| quota.html | Cuotas de uso y límites | |
| billing.html | Checkout de facturación, selección de tier | |
| plan.html | Plan actual y opciones de upgrade | |
| key.html | API key: mostrar, rotar (60s overlap) | |
| ayuda.html | Centro de ayuda / documentación | |
| admin-docs.html | Documentación administrativa |
Auth: BFF cookie HttpOnly (nexus_sid) via Authentik OIDC, o Bearer token en sessionStorage (API key).
36 módulos JS incluyendo: config.js (runtime injection), api.js (100+ endpoints), common.js (shell, branding, formatting), chat-dock.js (dock flotante), command-palette.js (CMD+K), voice-input.js, helpbot.js (RAG), intro-video.js, service-status.js.
Staff-only. Authentik OIDC auth. Gestión de tenants, apps, tiers, quotas, logs, salud, pilotos, onboarding.
21 rutas, React 18, Zustand, TypeScript. Reemplazo moderno del portal HTML (en progreso). Incluye chat SSE, command palette, navegación por secciones (Inicio, Trabajo, Conocimiento, Config).
iOS + Android. SecureStore auth, SSE streaming, biometric lock, offline send-queue con replay, push notifications (Expo broker). M.1–M.5 shipped. M.6 (app store submission) pendiente.
Drop-in replacement para OpenAI SDK. El cliente cambia api_base y api_key. Mismo schema de request/response, misma semántica HTTP, mismo streaming SSE. Anonimización automática, invisble para el cliente.
| Dominio | Rutas clave | Count | Propósito |
|---|---|---|---|
| Chat & Completions | POST /v1/chat/completions, GET /v1/models | 2 | Gateway LLM compatible con OpenAI (streaming + non-streaming) |
| Voz | POST /v1/transcribe, POST /v1/tts, GET /v1/tts/voices | 3 | Speech-to-text (Groq Whisper) y text-to-speech (ElevenLabs) |
| Attachments | POST /v1/me/attachments, etc. | 3 | Upload, scan (ClamAV), text extraction, image redaction |
| Auth Portal (BFF) | /v1/auth/login/* | 4 | OIDC PKCE con Authentik, cookies HttpOnly, rate limiting |
| Auth SSO (per-tenant) | /v1/auth/sso/* | 4 | Customer OIDC: start, callback, status, session JWT |
| Aprobaciones | /v1/approvals/* | 3 | Aprobar/rechazar/avanzar step en pipeline multi-step |
| Customer Self-Service | /v1/me/* | ~90 | Usage, quota, billing, branding, memory, rules, integrations, push, SSO, teams, roles, reports, ROI, suggestions, knowledge, conversations, onboarding, custom domain, forget, help, connector, vertical, DKIM |
| Workflows | /v1/workflows/* | 7 | Definiciones CRUD, ejecutar, status de runs, resume |
| Reglas | /v1/rules/*, /v1/me/rules/* | 8 | System rules + custom rules por tenant, preview |
| Memoria | /v1/memory/*, /v1/me/memory/* | 6 | CRUD por scope (business, user, client) |
| Skeleton & Schema | /v1/connectors/skeleton/*, /v1/connectors/schema/* | ~25 | Discover, synthesize, refine, proposals, mappings, ingest |
| Verticales | /v1/verticals, /v1/me/vertical | 4 | Playbooks por industria (12 verticales). Asignación + overrides por tenant |
| Equipos y Roles | /v1/teams/*, /v1/user-roles/* | 9 | Teams CRUD, membership, tenant-level roles (user/team_lead/manager/admin) |
| DKIM | /v1/me/branding/dkim/* | 4 | Request, update, status, DNS records para email signing |
| Voz Round-trip | /v1/voice/roundtrip | 1 | Push-to-talk STT → chat agent → TTS round-trip |
| Connector | /v1/connector/*, /v1/me/connector/* | ~12 | Binding, results, instances, mappings, publishers |
| Channels | /v1/channels/* | 6 | Config per-tenant de canales (email, WA, SMS, web, mobile), credentials vault |
| Webhooks externos | /webhooks/* | 3 | Stripe, D7 SMS, billing genérico |
| Admin (staff) | /admin/* | ~60 | Tenants, apps, quotas, tiers, routing, billing, connector fleet, data sources, docs, erasure, pilots, support, WhatsApp rebind |
| Sentinel | /v1/sentinel/* | 7 | Settings, findings (list, remediate, snooze, dismiss, CSV export) |
| Salud e Infra | /health/*, /metrics | 5 | Liveness, readiness (DB+Redis+LLM), provider probe, Prometheus |
| Status público | /v1/public/status, /v1/alerts/alertmanager | 2 | Status page + Alertmanager webhook |
| Branding público | /public/branding/* | 1 | Assets de branding por tenant slug |
| Internal | /v1/internal/* | ~4 | WhatsApp resolve, inbound stamp, custom domain confirm |
| SCIM 2.0 | /v1/scim/Users/*, /v1/scim/Groups/* | 8 | Enterprise IdP user sync (RFC 7643/7644). CRUD + filter + PATCH for Azure AD, Okta, OneLogin |
| NL Query | POST /v1/me/query | 1 | Natural-language to SQL sobre datos de uso del tenant. Allow-listed tables, read-only |
| Compliance | GET /admin/compliance/snapshot | 1 | SOC 2 / ISO evidence binder. Recoge evidencia de 6 controles automáticamente |
| Workflow Builder | /v1/workflows/builder/* | 5 | Validate, preview, reorder, step-types catalog, generate from NL description |
| Deploy & Canary | /admin/deployment, /health/canary, /health/version | 3 | Blue/green + canary deploy support. Version headers, traffic weight, promotion readiness |
| DR Validation | /admin/dr/* | 3 | Disaster recovery assessment + failover simulation (DB, Redis) |
| SLA | GET /v1/me/sla/compliance | 1 | SLO compliance snapshot: P95 latency, error rate, workflow success, audit coverage |
| Test Runner | /admin/tests/* | 3 | Trigger pytest batches against live DB, poll results, list runs. Failures auto-email devops |
| Kill Switch | /admin/killswitch/* | 3 | SIS SA-only API lockdown (engage/disengage/status). 503 middleware on all non-health routes |
| Log Watcher | /admin/log-watcher/snapshot | 1 | Sentinel log watcher state: error/auth window counts, recent events, alert history |
| Onboarding WA | /v1/onboarding/whatsapp/* | 1 | Flujo multi-turn de onboarding por WhatsApp |
| UI (server-rendered) | /, /apps, /quotas, /logs, /ui/* | ~8 | Dashboard admin HTML server-rendered |
| Tabla | Función | RLS |
|---|---|---|
| tenants | Boundary de aislamiento. Tier, Stripe IDs, custom domain, onboarding state, rate overrides | ✓ |
| users | Usuarios por tenant. Unique (tenant_id, email). Roles: admin/member/viewer | ✓ |
| teams | Equipos intra-tenant para visibilidad | ✓ |
| user_team_memberships | Relación users↔teams con rol (member/lead/manager) | ✓ |
| user_roles | Rol canónico de visibilidad (user/team_lead/manager/admin) | ✓ |
| tiers | Catálogo de planes: independiente, equipo, empresa, corporativo | — |
| applications | Una por proyecto de usuario. API key hash, system prompt, model overrides | ✓ |
| api_keys | Keys de proveedores LLM (encrypted). Sin tenant scope | — |
| Tabla | Función |
|---|---|
| usage_quotas | Límites (RPM, TPM, daily tokens, daily/monthly cost) + contadores live por app |
| usage_logs | Tracking per-request: modelo, tokens, costo, latencia, fallback chain |
| llm_calls | RTK attribution row. invoker + provenance + tier + ensemble por llamada |
| payment_orders | Estado machine: pending → awaiting → confirmed. 5 proveedores de pago |
| tenant_config | Overage, budgets, tier defaults por tenant |
| audit_logs | Todas las acciones staff/system con correlation ID. 365 días retención |
| Tabla | Función |
|---|---|
| workflows | Definiciones: slug, steps JSON, trigger (chat/cron/webhook), schedule |
| workflow_runs | Ejecuciones: status, current node, state JSON, error |
| tool_calls | Audit per-dispatch de tool use con argumentos, resultados, latencia, costo |
| pending_approvals | Cola de aprobaciones para tools con requires_approval |
| Tabla | Función |
|---|---|
| memory_items | Memoria long-term con embedding pgvector(1024) |
| knowledge.business_profile | Hechos de negocio (key-value con confidence) |
| knowledge.persons | Entidades persona con metadata |
| knowledge.person_relations | Relaciones inter-persona |
| knowledge.unwritten_rules | Reglas no escritas extraídas del contexto |
| knowledge.operational_patterns | Patrones operacionales observados |
| knowledge.accumulated_knowledge | Conocimiento acumulado por topic/layer |
| knowledge.knowledge_embeddings | Embeddings polimórficos pgvector(1536) |
| knowledge.knowledge_audit | Trail de auditoría de conocimiento |
| knowledge.layer_opt_outs | Opt-out por tenant por layer |
| Tabla | Función |
|---|---|
| integrations | Instancias de adaptador por tenant. Circuit breaker state |
| oauth_tokens | Tokens OAuth cifrados (access/refresh) |
| integration_events | Log append-only de llamadas a APIs externas |
| webhook_events | Eventos entrantes de proveedores (Stripe, D7, etc.) |
| event_subscriptions | Trigger: “cuando X ocurra, ejecutar workflow Y” |
| tenant_channels | Config de canales (web/email/WA/SMS/mobile) por tenant |
| tenant_channel_secrets | Credenciales selladas por canal (SMTP/IMAP passwords) |
| email_inbox_state | Estado de polling IMAP (UIDs, last polled) |
| email_outbound_state | Estado de auto-reply por mensaje |
| whatsapp_phone_bindings | E.164 → tenant binding |
| device_push_tokens | Tokens Expo Push por dispositivo |
| Tabla | Función |
|---|---|
| company_skeleton | Revisiones inmutables del skeleton de negocio (versionado) |
| skeleton_entity | Entidades detectadas (client/supplier/product/account/employee) |
| skeleton_process | Procesos detectados con frecuencia y entity refs |
| skeleton_workflow_proposal | Propuestas de workflow generadas por LLM |
| schema_discovery_run | Runs de descubrimiento de esquema (status, cost cap) |
| tenant_schema_mapping | Mapeos de BD versionados (draft/active/superseded) |
| skeleton_ingest_events | Log append-only de ingesta (db_snapshot, file_index, document, operational_summary) |
| operational_events | Eventos operacionales por workflow run (completed/failed/paused/intervention/timeout) — alimenta re-síntesis nocturna |
| tenant_data_sources | Catálogo de fuentes de datos (postgres/mysql/imap/smb/etc.) |
| tenant_data_source_secrets | Secretos sellados de conexión |
| connector_publishers | Dispatches programados al Connector |
| connector_publisher_runs | Historial de ejecuciones del Connector |
| connector_mappings | Propuestas de mapeo del Connector (aprobación admin/tenant) |
| vertical_playbooks | Playbooks por vertical (12 industrias). Entidades, procesos, hints de síntesis esperados |
| Tabla | Función |
|---|---|
| attachments | Uploads con scan status, SHA-256, extracted text, redaction info |
| document_extractions | OCR + structured extraction de documentos |
| pii_mappings | Vault de anonimización reversible (token → plaintext cifrado) |
| report_artifacts | Reportes generados (PDF/PPTX/CSV) en Spaces |
| tenant_branding | White-label: logo, colores, slogan, email From name |
| tenant_sso_configs | Config OIDC del IdP del cliente (client_secret sellado) |
| image_redaction_settings | Thresholds de redacción por tenant |
| tenant_digests | Digests diarios de insights |
| erasure_requests | Solicitudes de borrado de datos (GDPR) |
| rule_configs | Políticas de reglas por tenant (on/off) |
| tenant_custom_rules | Reglas free-text definidas por cliente |
| sentinel_tenant_settings | Opt-in de Sentinel + whitelist de acciones |
| tenant_tools | Enable/disable de tools por tenant + daily cap |
| Tabla | Función |
|---|---|
| admin_config.quality_tiers | Catálogo de tiers de calidad (Bronze/Silver/Gold/Platinum) |
| admin_config.tier_category_matrix | Mapeos tier → modelo por categoría |
| admin_config.platinum_recipes | Recetas de ensemble Platinum |
| admin_config.plan_tier_defaults | Defaults de tier por plan |
| admin_config.slce_layer_config | Config de capas SLCE |
| routing_cost_tiers | Política de routing por costo (6 tiers) |
| routing_tier_models | Modelos por routing tier |
| routing_task_defaults | Tier por defecto por tipo de tarea |
| Adaptador | Tipo | Operaciones | Estado |
|---|---|---|---|
| Gmail | OAuth 2.0 | Read/send email, XOAUTH2 SMTP+IMAP, DKIM signing | Live |
| Google Calendar | OAuth 2.0 | Event CRUD | Live |
| Google Drive | OAuth 2.0 | File list/download (multipart) | Live |
| HubSpot | OAuth 2.0 | Contacts/deals CRUD | Live |
| Slack | OAuth 2.0 | DMs, channel post | Live |
| Notion | OAuth 2.0 | Pages/databases | Live |
| Alegra | API Key | Facturas, personas, contabilidad CA | Live |
| Contífico | API Key | Facturas SRI Ecuador, personas | Live |
| QuickBooks | OAuth 2.0 | Invoices, customers (US accounting) | Live |
| Stripe | Secret Key | Customers + invoices read | Live |
| Shopify | Custom App | Orders/products read | Live |
| WooCommerce | REST API | Orders/products read | Live |
| Zoho | OAuth 2.0 | CRM contacts/deals/leads | Live |
| Pipedrive | API Key | Persons/deals/organizations | Live |
| Belvo | API Key | LATAM banking open-banking read | Live |
| D7 SMS | API Key | Outbound SMS via comm-api | Live |
| EzBilling Pro | API Key | Facturas, CCF, clientes, DTE status, reportes ventas (SV) | Live |
| SAF | Bearer / Cert | Presupuestos, transacciones, partidas contables, estados financieros (SV gobierno) | Live |
Todos comparten: base.py contract, _auth_headers hook, data= kwarg, circuit breaker, per-tenant token vault (AES-256-GCM con INTEGRATION_MASTER_KEY), OAuth refresh automático.
Engine: LangGraph (compile + checkpoint/resume). Definiciones con steps_json. Triggers: chat, cron, webhook.
Ciclo de vida: pending → running → paused (human approval) → completed / failed.
Capacidades actuales:
/v1/workflows/defs)workflow_run_idWorkflow Builder API (/v1/workflows/builder/*): Validación de steps (12 tipos: llm_call, tool_call, condition, loop, human_approval, wait, parallel, email_send, webhook_call, transform, memory_query, memory_store), detección de ciclos (DFS), steps inalcanzables, preview con estimados de duración/costo, reorder, y generación de workflows desde descripción en lenguaje natural vía LLM.
Workflow Builder UI (portal workflows.html): Canvas visual con drag-and-drop de nodos, 12 tipos de step, panel de propiedades por nodo, edges SVG entre nodos, validación en tiempo real (ciclos, inalcanzables), vista previa con estimados de duración/costo, y generación de workflows desde descripción en lenguaje natural vía LLM.
Self-Learning Context Extraction: Después de cada turno de chat, un modelo Bronze extrae hechos estructurados en 6 capas de conocimiento.
| Capa | Qué captura | Default |
|---|---|---|
| business_profile | Hechos del negocio (key-value con confidence) | ON |
| persons | Personas mencionadas + metadata | ON |
| unwritten_rules | Reglas no escritas del negocio | ON |
| operational_patterns | Patrones operacionales observados | ON |
| accumulated_knowledge | Conocimiento general acumulado por topic | ON |
| financial_patterns | Patrones financieros (alta sensibilidad) | OFF |
Embeddings: pgvector HNSW. Turnos futuros reciben snippets relevantes inyectados en el system prompt.
Correcciones: Detector regex (español + inglés) detecta “no, en realidad…”, “te equivocas” — skip extraction, escribe correction_applied audit row.
Sugerencias: Scan periódico grada topics frecuentes a filas propuestas. Cliente acepta/descarta desde /portal/sugerencias.html.
Control del usuario: Toggle layers, forget una fila, wipe un layer, wipe todo. learning_disabled per-turn opt-out.
El diferenciador fundamental de Nexus. No usa templates pre-armados — descubre cómo opera cada negocio:
/v1/skeleton/ingest/*needs_review.Seguridad: Skeleton cifrado per-tenant con AES-256-GCM (tercer vault: SKELETON_MASTER_KEY). HKDF per-tenant.
Versionado: Revisiones inmutables con parent_revision_id. Máximo 1 active por tenant (enforced con partial unique index).
12 verticales pre-cargadas como “prior knowledge” que sesga la síntesis sin reemplazar datos reales:
| Vertical | Ejemplo de entidades | Ejemplo de procesos |
|---|---|---|
| Contaduría | Clientes contribuyentes, cuentas contables | Facturación DTE/FEL, declaraciones fiscales |
| Clínica Médica | Pacientes, personal médico, seguros | Citas, expedientes, facturación médica |
| Hospital | Pacientes, departamentos, proveedores | Admisión, cirugías, farmacia, laboratorio |
| Retail | Productos, tiendas, proveedores | POS, inventario, compras, transferencias |
| Minimart / Tienda | Productos, proveedores locales | Punto de venta, reposición, merma |
| Restaurante | Menú, mesas, proveedores | Pedidos, despacho, inventario cocina |
| Servicios Profesionales | Clientes, proyectos, contratistas | Propuestas, hojas de tiempo, facturación |
| Construcción | Proyectos, subcontratistas, materiales | Presupuestos, planillas, avance de obra |
| Hotel | Huéspedes, habitaciones, proveedores | Reservaciones, check-in/out, room service |
| Aeropuerto | Aerolíneas, pasajeros, concesionarios | Asignación de gates, handling, facturación |
| Gobierno | Ciudadanos, instituciones, proveedores | Trámites, licitaciones, nómina, presupuesto |
| Telecomunicaciones | Suscriptores, torres, equipos | Provisioning, facturación recurrente, tickets |
Customizable por tenant: onboarding_state.playbook_overrides permite agregar/quitar entidades, procesos y hints sin modificar el playbook base. Endpoints: GET/PUT /v1/me/vertical, PUT /v1/me/vertical/overrides.
| Vault | Key | Protege |
|---|---|---|
| PII Anonymization | ANONYMIZATION_MASTER_KEY | Mapeos de anonimización reversible (token → plaintext) |
| Integration Tokens | INTEGRATION_MASTER_KEY | OAuth tokens (access/refresh) de integraciones |
| Company Skeleton | SKELETON_MASTER_KEY | Datos del skeleton de negocio |
Cada vault usa HKDF-SHA256 per-tenant con contexto info distinto. AES-256-GCM con nonce de 12 bytes.
Presidio + spaCy español + recognizers custom. Low confidence = bloquear la llamada LLM.
MediaPipe face detection + Tesseract OCR (spa+eng) + mismos reconocedores de texto. Por tenant: off / redact_and_pass / block_on_detect. Faces se difuminan con Gaussian blur; texto PII se cubre con rectángulo negro. La imagen original en Spaces se sobrescribe (irrecuperable).
| Método | Uso | Mecanismo |
|---|---|---|
| BFF Cookie | Customer portal | HttpOnly nexus_sid, Redis sessions, PKCE + Authentik |
| API Key | SDK / integraciones | Bearer 5ai_*, bcrypt hash (12 rounds) |
| Nexus Session JWT | Customer SSO | HS256, 12h TTL, iss=nexus-sso |
| Authentik JWT | Staff admin | RS256/ES256, JWKS validation, admin group check |
Redis sliding window (sorted set + Lua script). Fallback in-memory cuando Redis no está disponible. Dos capas: auth endpoints (20 RPM por IP), app endpoints (configurable por tier).
| Plan | Precio/mes | Tareas incluidas | Operadores |
|---|---|---|---|
| Solo (Independiente) | $249 | Limitadas | Ilimitados |
| Equipo | $499 | Moderadas | Ilimitados |
| Empresa | $999 | Amplias | Ilimitados |
| Corporativo | $6,999 | Extensivas | Ilimitados |
Cada plan = N tareas/mes + multi-bucket tokens (Bronze/Silver/Gold/Platinum). Break-even: 14 clientes mix.
| Proveedor | Mercado | Estado |
|---|---|---|
| Bank Transfer | CA (confirmación operador) | Live |
| Wompi | SV cards | Live |
| N1co | Regional cards | Live |
| EzBilling Pro | Factura fiscal Ecuador | Live |
| Stripe | Internacional (fallback) | Live |
State machine: pending → awaiting_confirmation → confirmed. Confirmación atomically upgrades tier.
Retry-After)allow_overage flag + overage_limit_usdDesktop agent (Python 3.12) instalable en infraestructura del cliente (Windows/Linux/macOS). Dumb-pipe puro: cero lógica de negocio, cero LLMs localmente.
Nunca decide qué enviar. Nunca ejecuta lógica de negocio. Nunca DELETE/DROP/TRUNCATE en sistemas del cliente. Idempotencia local. Aprobación humana antes de automatización. Offline = inerte.
| Módulo | Recursos | Función |
|---|---|---|
| droplet | VPC + droplets + LB | App instances con HA |
| droplet_worker | Worker droplets | Fast/slow pool workers |
| managed_postgres | DB cluster + firewall | Postgres 16 HA (VPC-internal) |
| managed_redis | Redis cluster + firewall | Redis 7 (VPC-internal) |
| spaces | DO Spaces bucket | Object storage (attachments, reports) |
| managed_authentik | Droplet + managed PG | Authentik SSO server |
≥2 app droplets + LB, fast workers, slow workers, Postgres HA, Redis, Spaces, Authentik. Backend: S3 (DO Spaces).
≥1 app droplet + LB, Postgres (1 node, HA add-on), Redis, Spaces dedicado. Apunta a shared Authentik de Mode A. Backend: S3 con key mode_b/{tenant_id}/terraform.tfstate.
| Servicio | Imagen | Puerto |
|---|---|---|
| api | ./api (uvicorn) | 9700 |
| worker-fast | ./api (arq FastWorkerSettings) | — |
| worker-slow | ./api (arq SlowWorkerSettings) | — |
| comm-api | ./comm-api | 8001 |
| customer-portal | python:3.12-slim | 8700 |
| admin-portal | python:3.12-slim | 8701 |
| db | postgres:16-alpine | 5432 (internal) |
| redis | redis:7-alpine | 6379 (internal) |
| clamav | clamav/clamav:stable | 3310 (internal) |
| loki | grafana/loki:3.2.1 | 3100 (internal) |
TLS termination + reverse proxy para los 3 servicios + custom domain catch-all con on-demand TLS (Epic L.3).
nexus-api.service, nexus-portal.service, nexus-admin.service, nexus-worker-fast.service, nexus-worker-slow.service
| Componente | Herramienta | Función |
|---|---|---|
| Logging | structlog JSON + Loki | Push directo a Loki. Cada log: timestamp, level, correlation_id, deployment_id, tenant_id, user_id, operation, duration_ms, status |
| Métricas | Prometheus + Grafana | Scraping de /metrics. 5 dashboards. |
| Alertas | Alertmanager | Critical → PagerDuty + Slack. High → Slack @here. Warn → digest batch. |
| Tracing | OpenTelemetry | Auto-instrumentation: FastAPI, httpx, SQLAlchemy |
| Errors | Sentry | Error tracking con PII scrubbing. 10% trace sampling. |
| Correlation | X-Correlation-Id | UUID-v4 por request, propagado a todos los logs/traces/jobs. |
Load testing: k6 script (ops/load/chat_load.js) — 50 VUs, 5 min, p80 <3s, <0.1% errores, $0.50-$1.00 LLM spend por run. Nightly CI workflow.
| Job | Trigger | Función |
|---|---|---|
| webhook_handler_sweep | Every min | Drain webhook_events, dispatch a handlers (Stripe, D7, etc.) |
| event_trigger_sweep | Every min | Trigger workflows desde integration events |
| workflow_cron_sweep | Every min | Fire cron-triggered workflows por tenant |
| approvals_expiry_sweep | Every min | Expirar pending_approvals vencidas |
| connector_publisher_sweep | Every min | Fire publishers de Connector pendientes |
| scan_attachment | On upload | Download, antivirus, text extract, anonymize |
| email_reply_send | Per message | Chat handoff + SMTP reply |
| deliver_report | On workflow finish | Render PDF, upload Spaces, deliver |
| extract_knowledge | Per chat turn | SLCE Bronze extraction a knowledge layers |
| extract_business_memory | Per chat turn | Extraer hechos durables a memory_items |
| Job | Trigger | Función |
|---|---|---|
| sentinel_sweep | Every 10 min | Audit RLS, anonymization, cost anomalies |
| retention_prune_sweep | Hourly (:17) | Borrar filas cold por age windows configuradas |
| overage_report_sweep | Hourly (:43) | Reportar overage a Stripe |
| billing_expire_sweep | Hourly (:53) | Expirar payment_orders vencidos |
| custom_domain_reverify | Daily 03:23 UTC | Re-verificar TXT records de custom domains |
| detect_patterns_weekly | Weekly Mon 04:07 | Detectar patrones operacionales → suggestions |
| email_inbox_poll_sweep | Every 5 min | IMAP polling de canales habilitados |
| digest_sweep | Hourly (:31) | Build daily digest con anomaly detection |
| workflow_run_async | On trigger | Ejecución de workflows (LangGraph engine) |
| export_tenant_bundle | On demand | Export tenant data a JSONL tarball |
Background monitor LLM-powered que corre cada 10 minutos:
Acciones pre-aprobadas: pause_workflow_run, lock_application (auto-wired on cost_spike), downgrade_tier, throttle_rule_config (auto-trigger via rule_violation_streak).
Costo: Atribuido a sentinel cost category via RTK. Billing separada.
Customer-facing: Findings + remediate/snooze/dismiss + CSV export en /portal/sentinel.html.
| Categoría | Feature | Estado |
|---|---|---|
| LLM Core | OpenAI-compatible chat gateway (7 proveedores) | Live |
| Auto-routing por task type | Live | |
| Quality Tiers v2 (Bronze/Silver/Gold/Platinum) | Live | |
| Platinum orchestrator (Scout → Readers → Synth) | Live | |
| Streaming SSE + incremental rule eval (configurable lookahead) | Live | |
| Model override policy (alias/pass_through/reject) | Live | |
| RTK cost attribution per call (tenant/user/workflow/channel) | Live | |
| Conversación | Web chat + floating dock (SSE, historial) | Live |
| Mobile app iOS + Android (Expo 51, biometric, offline queue) | Live | |
| Voice input STT (Groq Whisper) | Live | |
| Text-to-speech TTS (ElevenLabs) | Live | |
| File + image attachments con ClamAV scan | Live | |
| Seguridad | Anonimización PII reversible (texto + imágenes) | Live |
| Image redaction (faces + OCR text) | Live | |
| 3-vault encryption (PII, OAuth, Skeleton) | Live | |
| Rate limiting (Redis sliding window + auth per-IP) | Live | |
| OIDC retry/backoff + JWT log sanitization | Live | |
| Auth | BFF cookie auth (portal) | Live |
| API key auth (bcrypt, rotation con 60s overlap) | Live | |
| Customer SSO per-tenant (OIDC + JIT provisioning) | Live | |
| Multi-IdP por tenant (N proveedores OIDC, primary flag) | Live | |
| Authentik staff auth (RS256/ES256) | Live | |
| Conocimiento | Session memory (X-Nexus-Session) | Live |
| SLCE 6-layer self-learning | Live | |
| Correction-aware learning | Live | |
| Suggestions inbox | Live | |
| Skeleton discovery + synthesis + proposals | Live | |
| Schema mapping editable por tenant | Live | |
| Verticales | 12 vertical playbooks (contador, clínica, hospital, retail, minimart, restaurante, servicios, construcción, hotel, aeropuerto, gobierno, telecomunicaciones) | Live |
| Per-tenant playbook overrides (extra/remove entities, processes, hints) | Live | |
| Workflows | Engine LangGraph (compile + checkpoint/resume) | Live |
| Cron + webhook + chat triggers | Live | |
| Aprobaciones human-in-loop (multi-step con asignación por paso) | Live | |
| Builder API: validación de steps, detección de ciclos, preview, generación desde NL | Live | |
| Integraciones | 18 adaptadores (OAuth + direct credentials), incl. EzBilling Pro + SAF (SV) | Live |
| Circuit breaker + token vault + refresh automático | Live | |
| Tool dispatch en streaming (18 adapters como tools en chat SSE) | Live | |
| OAuth callback redirect (self-service connection desde portal) | Live | |
| Canales | WhatsApp inbound + outbound (Sent.dm) | Live |
| Email inbound (IMAP) + outbound (SMTP/Gmail XOAUTH2) + DKIM signing | Live | |
| Push notifications (Expo broker, 4 triggers wired) | Live | |
| SMS outbound (D7) | Live | |
| Facturación | 5 rieles de pago | Live |
| Hard budget caps (80/95/100%) | Live | |
| Overage state machine | Live | |
| Stripe webhooks | Live | |
| Tier upgrade automático en confirmación | Live | |
| Branding | White-label (logo, colores, slogan) | Live |
| Custom domain (Caddy on-demand TLS) | Live | |
| Branded email From: name | Live | |
| GDPR erasure (/v1/me/forget) | Live | |
| Infra | Terraform Mode A + Mode B | Live |
| Docker Compose (10 servicios) | Live | |
| Observabilidad (Loki + Grafana + Alertmanager + Sentry + OTEL) | Live | |
| Inteligencia | ROI dashboard con desglose por workflow, proyecciones, CSV export | Live |
| Daily digests con anomaly detection | Live | |
| Document OCR + structured extraction | Live | |
| Eval harness (5 suites: rules, task_planner, anonymization, cost_caps, response_quality) | Live | |
| Sentinel | Infrastructure monitoring (always-on) + rule_violation_streak auto-actions | Live |
| Business-scope opt-in (per-domain config, analysis pipeline) | Live | |
| Log watcher (real-time error/auth/restart anomaly detection, devops email alerts, admin portal dashboard) | Live | |
| Connector | Binding, WSS transport, DB adapter, file crawler | Live |
| Platform Ops | Admin test runner (pytest batches against live DB, email on failure, portal UI) | Live |
| Kill switch (SIS superadmin only, 503 lockdown, middleware-enforced, no dev bypass) | Live | |
| Superadmin auth gate (nexus-superadmins group, JWT-only, no API keys) | Live | |
| Auth (enterprise) | Multi-IdP por tenant (N proveedores OIDC, primary flag, UUID PK) | Live |
| SCIM 2.0 user sync (RFC 7643/7644 — Users CRUD + Groups read-only) | Live | |
| SOC 2 / ISO evidence binder (6 controles automáticos) | Live | |
| NL-querying de uso (text-to-SQL con tenant scope, allow-listed tables) | Live | |
| Ops & DR | Blue/green + canary deploy support (version headers, traffic weight, promotion) | Live |
| DR validation tooling (component assessment, failover simulation, RTO estimate) | Live | |
| Per-tenant SLA compliance (P95 latency, error rate, workflow success, audit coverage) | Live | |
| Testing | 203+ test files, admin portal test runner (parallel batches, devops email on failure), k6 load test nightly | Live |
| Item | Qué falta | Esfuerzo | Estado |
|---|---|---|---|
| Integraciones como tools en chat | Tool dispatch en streaming executor + UX chips en portal + system prompt guidance | — | Live |
| Integration picker en portal | OAuth callback ahora redirige a portal con toast de éxito/error | — | Live |
| Mobile app store submission (M.6) | eas.json + privacy policy + store metadata listos; falta generar icons, Apple Team ID, eas build | ~1 sem | Partial |
| Push triggers (quota/workflow/breaker) | Los 4 triggers wired con dedupe Redis (approval, quota 95%, workflow complete, breaker open) | — | Live |
| Gmail OAuth status en portal email | Portal detecta gmail_oauth y oculta form; XOAUTH2 cableado en inbox poll + reply jobs | — | Live |
| Streaming rule eval incremental | IncrementalRuleStreamer con lookahead configurable (env vars); eval cada 64 chars | — | Live |
| Pilot 0 QA end-to-end | Ejecutar contra ezBilling UAT con datos reales. Requiere acceso + tenant de prueba | ~2 sem | Planned |
| Item | Qué falta |
|---|---|
| Terraform apply Mode A | Provisionar ≥2 droplets, LB, managed PG HA, Redis, Authentik en DO |
| Secrets en secrets manager | 3 master keys, 6 provider keys, webhook secrets, PagerDuty/Slack keys |
| Grafana dashboards | 5 dashboards provisionados + alertas validadas |
| k6 24h soak | 10 VUs, 24h, sin errores, dashboards monitoreados |
| Backup + DR drill | PITR restore a 1h, Spaces versioning |
| First-boot walkthrough | Cold deploy desde DEPLOYMENT.md, onboarding, primer curl |
| Security sweep | Anonimización ≥95%, multi-tenancy read-only test, pip-audit, TLS 1.2+ |
| Feature | Trigger | Impacto |
|---|---|---|
| Shipped — SCIM 2.0 Users CRUD + Groups read-only, filter support, PATCH operations | Live | |
| Shipped — UUID PK, N proveedores OIDC por tenant, primary flag, (tenant_id, provider_type) unique | Live | |
Shipped — GET /admin/compliance/snapshot recoge evidencia automática de 6 controles (CC6.1, CC6.2, CC7.2, CC6.5, CC8.1, A1.2) | Live | |
| Dedicated Comm API per tenant | Premium customer con aislamiento de canales | Alta (stack de aislamiento completo Mode B) |
| Shipped — Opt-in per-tenant, per-domain config (JSONB), analysis pipeline, migration 084 | Live | |
| Learning loop (nightly re-synthesis) | Infrastructure ready: operational_events table, recording hook en workflow_run_job, skeleton_resynth_nightly Arq job (03:47 UTC). Necesita datos reales del Pilot 0 | Mejora continua del modelo de negocio |
| Shipped — 12 verticales, per-tenant overrides, synthesis prompt injection, endpoints CRUD | Live |
| Feature | Qué haría | Complejidad |
|---|---|---|
| Shipped — Canvas visual con 12 step types, drag-and-drop, validación, preview, generación desde NL | Live | |
| WhatsApp-first onboarding | Sign-up + tenant provisioning por WhatsApp | Media |
Shipped — POST /v1/voice/roundtrip push-to-talk STT → chat → TTS | Live | |
Shipped — POST /v1/me/query text-to-SQL con tenant scope, 7 tablas allow-listed, SQL validation, LLM explanation | Live | |
| Shipped: pause_workflow, lock_application, downgrade_tier, throttle_rule_config (rule_violation_streak trigger) | Live | |
Shipped — GET /v1/me/sla (portal) + GET /v1/me/sla/compliance (SLO metrics: P95, error rate, workflow success, audit coverage) | Live | |
| Custom From: address (per domain) | Enviar como no-reply@micompania.com | Media (DKIM/SPF/DMARC per tenant) |
| Shipped — EzBilling Pro (facturas, CCF, DTE, clientes, ventas SV) + SAF (presupuestos, transacciones, partidas, estados financieros SV gobierno). Total: 18 | Live | |
| Shared-number WhatsApp | Multi-tenant en un solo número WA | Media (modelo de negocio) |
Shipped — /admin/deployment, /health/canary, /health/version con version headers, traffic weight, canary promotion readiness | Live | |
Shipped — /admin/dr/assessment (5 component checks, RTO estimate) + simulación de failover DB/Redis | Live |
| Categoría | Librerías |
|---|---|
| Framework | FastAPI 0.115, Uvicorn, Pydantic v2 (extra=“forbid”), Jinja2 |
| LLM | LiteLLM 1.56 (wrapped en ModelRouter) |
| Database | SQLAlchemy 2.0 async, asyncpg, Alembic, pgvector |
| Auth | PyJWT (crypto), cryptography (AES-256-GCM) |
| HTTP | httpx 0.27 (async only, nunca requests) |
| Cache & Queue | redis 5.2, Arq 0.26 |
| aiosmtplib, aioimaplib | |
| Workflow | LangGraph 0.2 |
| Storage | aioboto3 (DO Spaces / S3) |
| Observability | structlog, prometheus-client, sentry-sdk, opentelemetry-* |
| Documents | pypdf, python-docx, Pillow, pytesseract, python-pptx (lazy-loaded) |
| Security | passlib (bcrypt), argon2-cffi |
| SSH | asyncssh (tunnels para data sources) |
| Cron | croniter |
| DNS | dnspython (domain verification) |
| Surface | Stack |
|---|---|
| Customer Portal | HTML + vanilla JS + CSS (no build, no bundler) |
| Admin Portal | HTML + vanilla JS + Vite (build only) |
| Web App | Next.js 14.2, React 18.3, Zustand 4.5, TypeScript, react-markdown |
| Mobile | Expo 51, React Native 0.74, SecureStore, expo-notifications |
| Componente | Versión |
|---|---|
| PostgreSQL | 16-alpine (+ pgvector) |
| Redis | 7-alpine |
| ClamAV | stable (signatures cached) |
| Loki | 3.2.1 |
| Caddy | Latest (on-demand TLS) |
| Authentik | Self-hosted (2 instances HA) |
| Terraform | DigitalOcean provider |
| Docker | Multi-stage builds |
196 archivos de test cubriendo:
| Categoría | Tests | Cobertura |
|---|---|---|
| Chat Pipeline | 15 files (stages, executors, pipeline integration) | Cada stage, streaming/non-streaming, failure path telemetry |
| Anonimización | 5 files (text, image, tool-call, vault properties) | PII vault, reconocedores CA, image redaction |
| Integraciones | 18+ files (each adapter) | Auth headers, refresh, body shape, idempotency, tool dispatch per-adapter |
| Billing | 6 files | Stripe, overage, cost caps, orders state machine |
| Sentinel | 6 files | Triggers, actions, rule_violation_streak throttle, fleet cost, tenant admin |
| Workflows | 7 files | Engine, JSON interpreter, cron triggers, LangGraph compile |
| Connector | 3 files | Binding, redemption, publishers |
| Skeleton | 8 files | Crypto, edit, ingest, proposals, synthesis, schemas |
| Multi-tenancy | 6 files | RLS, visibility, identity tables, GUC injection, tenant isolation |
| Auth | Multiple | API keys, SSO, BFF+PKCE portal auth, SCIM DTOs, rate limiting |
| Eval Harness | 5 suites | Rules, task planner, anonymization, cost caps, response quality (9 deterministic cases) |
| Smoke (new features) | 8 files, 334+ tests | Models, routes, auth, utils, anonymization, services, config, new features (SCIM, NL-query, compliance, workflow builder, adapters, deploy, DR, SLA) |
Admin test runner: POST /admin/tests/run triggers pytest split into parallel batches against the live database (UAT or prod). Results polled via GET /admin/tests/results/{run_id}. Failures auto-email to devops. Portal page at /tests.html with batch detail + run history.
Integration testing: Suite completa corre contra UAT Postgres (asyncpg + NullPool + GUC server_settings).
Coverage fail-under: 70% en módulos críticos de seguridad (anonymization, forget, erasure, tenancy, cost, router).
Herramientas: pytest-asyncio, pytest-httpx, fakeredis, aiosqlite, hypothesis (property-based), mutmut (mutation testing quarterly).
Load testing: k6 nightly CI — 50 VUs, 5 min soak, assertions on p80 latency + error rate + session drops.
Nexus Technical Specifications · Mayo 2026 · Manifiesto v2.2
Smart Insight Solutions · El Salvador