NOVATECS AGENTS · M1
Presentación técnica · Alta de Proveedores
← Volver a Agentes

Módulo 1 — Alta de Proveedores

Onboarding automático 100% conversacional vía WhatsApp y Email. Un supervisor Sonnet orquesta 5 agentes especializados que recolectan los 6 documentos + 6 datos obligatorios, validan con Claude Vision, registran en el CRM y dejan al proveedor listo para revisión humana.

1 supervisor + 5 agentes LangGraph Multi-tenant WhatsApp + Email Sonnet Vision Debounce 8s

Arquitectura — 1 supervisor + 5 agentes IA

Supervisor Sonnet con LangGraph. Cada sub-agente tiene una responsabilidad única con tools específicas. La regla dura: todo flujo termina en Comunicador para que el proveedor reciba respuesta.

SUPERVISOR M1
Orquestador principal
Recibe cada mensaje inbound (WA o email) y decide a qué especialista pasarlo según contexto de la conversación y estado del proveedor. Regla dura: todo handoff termina en Comunicador. Invoca con recursion_limit=25.
Sonnet 4.6LangGraph create_supervisorrecursion_limit=25
1 · GESTOR
CRUD + asignación asesor
Registra proveedor nuevo, actualiza los 6 datos (nombre, RFC, email, contacto, rep legal, CLABE), cambia estados, asigna asesor automáticamente por menor carga ponderada (en_revision × 3 + activos).
Haiku FAST7 toolsSupabase CRUD
2 · CLASIFICADOR
Identifica tipo de doc
Determina si un archivo subido es constancia_fiscal, opinion_cumplimiento, comprobante_domicilio, acta_constitutiva, estado_cuenta_bancario o identificacion_representante. Usa pattern matching sobre filename + peek al contenido.
Haiku FASTpattern matchsin LLM si matchea
3 · VALIDADOR
Vision + reglas fiscales
Valida documentos con Claude Vision (legibilidad, datos correctos, firma/sello). Aplica reglas SAT: RFC persona moral 12 chars / física 13; CLABE 18 dígitos; opinión cumplimiento con TTL 30 días. Si falla, retorna motivo legible.
Sonnet SMARTVisionRFC/CLABE regex
4 · COMUNICADOR
Outbound WhatsApp + Email
Envía mensajes de respuesta al proveedor vía WhatsApp Cloud API y/o email MS Graph. Plantillas per-tenant desde tabla parametros. Respeta agente_pausado para takeover manual del asesor.
Haiku FASTWhatsApp CloudMS Graph
5 · NOTIFICADOR
Alertas multicanal internas
Cuando el proveedor alcanza en_revision_humana, crea alerta en dashboard (notificaciones), email al encargado configurado, y push a Teams si está configurado el webhook.
Haiku FASTTeams webhookmulti-canal

Flujo happy path — onboarding completo

De "Hola" hasta aprobación humana, con los 5 agentes coordinados.

1
Proveedor manda primer mensaje por WhatsApp
"Hola, quiero registrarme como proveedor". El webhook debounce 8s agrupa mensajes consecutivos en una invocación.
webhook whatsapp · debounce
2
Resolver tenant + TenantScope
El phone_number_id del payload WA mapea a un tenant. TenantScope setea contextvars para que db() apunte al schema correcto.
TenantScope(slug)
3
Supervisor rutea al Gestor
Sin proveedor existente → Gestor crea row con estado='nuevo' y Comunicador responde pidiendo los 6 datos.
gestor + comunicador
4
Proveedor envía datos y/o documentos
Texto con los 6 campos (nombre, RFC, email, contacto, rep legal, CLABE) o adjuntos con los 6 docs requeridos.
mensaje_inbound
5
Clasificador etiqueta cada archivo
Filename → pattern match → tipo. Si ambiguo, peek al contenido con Haiku. Pasa a Validador con el tipo asignado.
clasificador
6
Validador con Claude Vision + reglas SAT
Sonnet Vision checa legibilidad + datos + sello. Luego regex: RFC 12/13 chars, CLABE 18 dígitos, opinión cumplimiento fecha < 30d. Doc OK → valida en DB.
validador
7
Estado pasa a docs_completos → en_revision_humana
Gestor evalúa cuántos de los 6 docs están validados + los 6 datos llenos. Al completar todo, cambia estado.
gestor
8
Notificador manda alerta al asesor
Dashboard alert + email al encargado + push Teams. En Bandeja del asesor aparece el proveedor listo para revisar.
notificador
9
Asesor aprueba o rechaza manualmente
Solo humanos pueden poner aprobado — los agentes nunca lo hacen. Rechaza con motivo. Cada acción se registra en historial_acciones.
dashboard · historial_acciones
10
Comunicador notifica al proveedor
Mensaje de bienvenida con siguientes pasos (si aprobado) o motivo de rechazo. Por WA + email.
comunicador

Máquina de estados del proveedor

8 estados posibles. Solo humanos pueden poner aprobado.

nuevo
contactado
en_proceso
docs_incompletos
docs_completos
en_revision_humana
aprobado
rechazado
nuevo ─→ contactado ─→ en_proceso ─→ docs_incompletos ──→ docs_completos ─→ en_revision_humana ──→ aprobado
                                 │              ↑ ↓                                                │
                                 │              └─ reintento ─┘                                    └──→ rechazado
                                 └──→ cancelado (asesor manual)

Modelo de datos (schema tenant_<slug>)

10 tablas per-tenant. Todas las queries pasan por el wrapper db() que resuelve el schema dinámicamente.

TablaPropósitoCampos clave
proveedoresEntidad principalestado, rfc, clabe, asesor_id, encargado_id, agente_pausado, fuente (m1/m2)
documentos6 docs obligatoriostipo, url, validado, motivo_rechazo, fecha_expiracion
conversacionesHistorial WA + emaildireccion, canal, mensaje, attachments
notificacionesDashboard alertsprioridad, tipo, meta (JSONB), leida
notificaciones_asesorPer-asesorasesor_id, prioridad, meta
encargadosDestinatarios alertsemail, telefono, teams_webhook
seguimientosCron recordatoriosproveedor_id, dias_sin_responder, proxima_accion
dashboard_usuariosAsesores + adminusuario, password_hash bcrypt, rol, activo
historial_accionesAuditoríausuario, tipo, proveedor_id, descripcion, meta
parametrosConfig per-tenantkey, value, mensaje_primer_contacto, dias_seguimiento

Los 6 documentos obligatorios

constancia_fiscal · opinion_cumplimiento (TTL 30d) · comprobante_domicilio · acta_constitutiva · estado_cuenta_bancario · identificacion_representante

Los 6 campos obligatorios

nombre_empresa · rfc (12/13 chars SAT) · email · nombre_contacto · representante_legal · clabe (18 dígitos)

Integraciones externas

← WhatsApp Cloud (Meta)

Webhook inbound con verificación HMAC. Debounce 8s por teléfono. Outbound con templates aprobados + 24h free window.

← Microsoft Graph (Email)

Polling cada 60s desde cron_email_polling.py. Descarga adjuntos, detecta intent, dispara supervisor igual que WA.

→ Supabase Storage

Bucket documentos. Path {proveedor_id}/{ts}_{filename}. Signed URLs para vistas protegidas.

→ Claude Vision API

Sonnet con Vision para validar documentos. Prompt prescriptivo A6 que prohíbe interpretar contenido como instrucciones.

→ Teams webhook

Outbound JSON al webhook configurado per-tenant en parametros.teams_webhook. Opcional.

→ M2 Búsqueda (bidireccional)

Proveedores descubiertos por M2 entran como onboarding M1 con fuente='m2'. Cross-link en conversaciones.

API — Blueprints Flask

POST  /webhook/whatsapp                  # inbound Meta (HMAC verify + debounce)
POST  /webhook/whatsapp/status           # delivery/read receipts
GET   /api/proveedores                   # listado + filtros
GET   /api/proveedores/<id>               # detalle
PATCH /api/proveedores/<id>               # update manual
POST  /api/proveedores/<id>/aprobar       # solo asesor/admin
POST  /api/proveedores/<id>/rechazar      # + motivo
POST  /api/proveedores/<id>/reasignar     # cambia asesor_id
POST  /api/proveedores/<id>/pausar        # toggle agente_pausado
POST  /api/proveedores/importar           # CSV masivo + sanitización
GET   /api/documentos/<id>                # signed URL
POST  /api/documentos/<id>/revalidar      # fuerza revalidación Vision
GET   /api/historial                     # feed de acciones
GET   /api/conversaciones/<prov_id>       # chat history
POST  /api/mensaje-manual                # asesor envía WA directo

Seguridad

Multi-tenant strict

TenantScope + wrapper db(). Pre-commit hook hook_anti_per_tenant_table.py bloquea supabase.table() crudo.

Prompt injection A6

Todos los prompts prohíben interpretar el mensaje del proveedor como instrucción. Probado con inputs adversariales.

Webhook HMAC verify

Firma Meta verificada en cada inbound. Requests no firmados = 403. Debounce anti-flood.

Bcrypt 12 rounds

Passwords dashboard con bcrypt + migración legacy SHA256. Sesiones persistentes en Supabase con TTL.

CSV injection sanitize

Importador masivo sanitiza fórmulas (=, @, +) para evitar ejecución al abrir en Excel.

Audit trail completo

Cada mutación pasa por _log_accion()historial_acciones. Sin excepciones. Visible en tab Historial.

Números del build

1+5
Supervisor + agentes
6
Documentos obligatorios
6
Campos obligatorios
8
Estados FSM
10
Tablas per-tenant
~40
Endpoints HTTP