Conexia opera con 3 sistemas que deben trabajar juntos. El CRM es el hub central que unifica la informacion de los otros dos.
+-----------------------------------+ +---------------------------+
| PRESUPUESTADOR (PHP) | | DoWISP API |
| pedidos.conexiatec.com | | conexiatec.dowisp.com |
|-----------------------------------| |---------------------------|
| Presupuestos, Pedidos | | Clientes (54 campos) |
| Pipeline Kanban distribuidores | | Suscripciones (58 campos) |
| Productos (36 mapeados DoWISP) | | Facturas + Lineas |
| Agentes (1,638), Distrib. (1,456) | | Efectos/Cobros (30 camp.) |
| Actividades comerciales | | Firma Contrato (50 camp.) |
| Scoring / Gamificacion | | Tickets (45 campos) |
| Cobertura (iframe actual) | | Productos + Tarifas |
| | | Email + SMS integrado |
| Webhooks salientes (6 eventos) | | |
| API REST (X-API-Key, 7 endpoints) | | Auth: Token header |
+-----------------------------------+ +---------------------------+
| |
| Webhooks + API REST | API REST (polling)
| (bidireccional) | (lectura + escritura)
v v
+------------------------------------------------------------------+
| CRM CONEXIA (NUEVO) |
| crm.conexiatec.com - HUB CENTRAL |
|------------------------------------------------------------------|
| Contactos unificados (Presup + DoWISP vinculados por NIF) |
| Vista 360: servicios + facturas + deuda + tickets + actividades |
| Tickets con sub-tickets en cascada |
| Mensajeria multi-canal (WhatsApp, Telegram, PBX) |
| Cobertura multi-proveedor (Sarenet, Onivia, CableMovil) |
| Gestion organizaciones (5 niveles) |
| Analytics y dashboards por rol |
+------------------------------------------------------------------+
REGLA DE ORO: No replicar lo que otro sistema ya hace bien.
| Sistema | Responsabilidad | El CRM NO hace |
|---|---|---|
| Presupuestador | Crear presupuestos, gestionar pedidos, pipeline de distribuidores, scoring/gamificacion, aclaradores | El CRM no crea presupuestos ni gestiona pedidos. Lee datos via API. |
| DoWISP | Facturacion, cobros, suscripciones, provisioning, firma contratos | El CRM no genera facturas ni gestiona cobros. Lee datos via API y los cachea. |
| CRM Conexia | Vision unificada del cliente, tickets + sub-tickets, mensajeria, cobertura, organizaciones, analytics | El CRM es el punto unico de consulta. Agrega datos de ambos sistemas. |
| Componente | CRM (nuevo) | Presupuestador (existente) |
|---|---|---|
| Backend | Python 3.12 + FastAPI | PHP puro con clases OOP |
| Frontend | Next.js 14 + React 18 + shadcn/ui + Tailwind | jQuery 3.7 + Bootstrap 4/5 |
| BD | PostgreSQL 16 | MySQL (conexiatec_adminpresupuestador) |
| Cache | Redis 7 | No tiene |
| Async | Celery 5 (polling DoWISP, emails, reglas) | No tiene (todo sincrono) |
| Auth | JWT (access 15min + refresh 7d) + 2FA TOTP | Sesiones PHP + SHA-256 + salt |
| API | REST con Bearer token (45 endpoints) | REST con X-API-Key (7 endpoints + 10 Fase 0) |
| Webhooks | Receptor HMAC-SHA256 | Emisor HMAC-SHA256 (backoff exponencial) |
| Infra | Docker Compose + Nginx | Servidor PHP (pedidos.conexiatec.com) |
El sistema tiene exactamente 5 roles. No mas.
| Rol | Descripcion | Ve datos financieros | Puede configurar |
|---|---|---|---|
| Super Admin | Control total del sistema. Unico rol que ve MRR, ARPU, churn, ganancias, deuda global, analytics. Puede suplantar cualquier usuario. | SI | SI (todo) |
| Admin | Gestion operativa: tickets, contactos, organizaciones, usuarios. NO ve datos financieros globales. | NO | Parcial (usuarios, orgs) |
| Agente | Atencion al cliente: tickets asignados, contactos asignados, presupuestos (lectura via Presupuestador), comunicaciones, cobertura. | NO | NO |
| Distribuidor | Ve SUS clientes, tickets de sus clientes, presupuestos (via Presupuestador), servicios. Puede tener delegaciones. | NO (excepto SUS comisiones MR en Presupuestador) | Sus usuarios |
| Cliente | Portal simplificado: facturas, servicios, tickets propios, datos personales. No ve nada del back-office. | Solo SUS facturas | Solo SUS datos |
Regla critica: Datos financieros (MRR, ARPU, churn, deuda global, ganancias, analytics financiero) son exclusivos del Super Admin. Ningun otro rol puede verlos.
N0: CONEXIA (Super-Matriz)
Control y visibilidad absoluta. Suplantacion de cualquier usuario.
Roles internos: Super Admin, Admin, Agente
|
+-- N1: MASTER (distribuidor de alto nivel)
| Ve: sus distribuidores, clientes de estos, comisiones
| NO puede: suplantar distribuidores inferiores
| |
| +-- N2: DISTRIBUIDOR (1,456 existentes)
| | Ve: clientes activos, suscripciones, servicios, importes
| | Puede: modificar servicios, generar tickets en nombre de clientes
| | Presupuestador: CRM ventas Kanban, generar pedidos, ver comisiones MR
| | |
| | +-- N2.5: DELEGACION (sucursales del distribuidor)
| | | Silo aislado: solo ve SUS presupuestos
| | | NO ve: otras delegaciones, datos economicos del distribuidor, 347
| | |
| | +-- N3: CLIENTE (empresa / autonomo / particular)
| | Portal: facturas, servicios, tickets, contratos, datos
| | |
| | +-- CONTACTOS (personas sin acceso, solo datos)
| |
| +-- N2: DISTRIBUIDOR ...
|
+-- N1: MASTER ...
Regla de visibilidad: Cada nivel ve SOLO sus descendientes. Nunca al reves (un distribuidor no ve al master) ni lateralmente (un distribuidor no ve a otro distribuidor).
| Funcionalidad | Super Admin | Admin | Agente | Distribuidor | Cliente |
|---|---|---|---|---|---|
| Dashboard (con sus KPIs) | SI | SI | SI | SI | Portal |
| Contactos / Vista 360 | TODOS | TODOS | Solo asignados | Solo SUS clientes | NO |
| Tickets (ver) | TODOS | TODOS | Solo asignados | Solo SUS clientes | Solo propios |
| Tickets (crear) | SI | SI | SI | En nombre de sus clientes | Tipificados |
| Sub-tickets (crear/escalar) | SI | SI | SI | NO | NO |
| Pipeline comercial | SI | SI | NO | NO (usa Presupuestador) | NO |
| Catalogo productos | CRUD completo | CRUD | Solo lectura | Solo lectura (filtrado) | NO |
| Presupuestos | Lectura (via API Presup) | Lectura | Lectura | CRUD (en Presupuestador) | NO |
| Pedidos | Lectura + tramitar | Lectura + tramitar | Lectura | Lectura propios | NO |
| Cobertura | SI | SI | SI | SI | NO |
| Facturacion (DoWISP) | TODA | TODA | Solo asignados | Solo SUS clientes | Solo propias |
| Comunicaciones / Mensajeria | TODAS | TODAS | Solo asignados | NO | NO |
| Analytics | TODOS los tabs | NO | NO | NO | NO |
| Organizaciones | CRUD completo | Lectura + crear | NO | Solo SU org | NO |
| Usuarios | CRUD todos | CRUD (no Super Admin) | NO | Solo SUS usuarios | NO |
| Configuracion sistema | TODO | NO | NO | NO | NO |
| Suplantar usuarios | Cualquiera | NO | NO | Solo SUS empleados | NO |
| Ver datos financieros globales | SI | NO | NO | NO | NO |
El sistema se basa en Organizaciones, no en usuarios sueltos. Cada entidad (Conexia, distribuidor, cliente) es una organizacion.
| Campo | Regla |
|---|---|
| NIF/CIF | Inmutable tras creacion. No se puede modificar nunca. |
| IBAN | Al modificar, el sistema exige subir un Certificado Bancario. Esto genera un ticket de aprobacion para Super Admin. El cambio NO es inmediato. |
| Observaciones | Campo de texto libre. Solo visible para CONEXIA (N0). Oculto para Masters, Distribuidores y Clientes. |
| Estado Activo/Inactivo | Solo CONEXIA puede bloquear el acceso total a la plataforma. |
| Codigo Postal | Al introducirlo, se auto-rellenan Poblacion, Provincia, CCAA. Esto determina automaticamente el tipo de impuesto (IVA 21% / IGIC 7% / IPSI). |
| Comercial asignado | Selector que muestra solo usuarios CONEXIA con rol Agente. Solo visible en fichas Master/Distribuidor. |
| Eliminacion usuarios | Siempre soft-delete (logica). Nunca borrado fisico para mantener trazabilidad. |
El Super Admin es el unico rol con vision completa del negocio. Tiene acceso a todo el sistema sin restricciones.
Sidebar completo: Dashboard, Contactos, Vista 360, Tickets, Pipeline, Catalogo, Presupuestos, Pedidos, Cobertura, Facturacion, Comunicaciones, Centro de Control, Analytics, Configuracion, Portal Cliente (vista previa).
KPIs financieros: MRR (ingresos recurrentes mensuales), ARPU (ingreso medio por cliente), Churn (tasa abandono), Deuda vencida. Graficos: evolucion MRR 12 meses, pipeline funnel, nuevos vs bajas, mix productos. Tablas: tickets urgentes, actividad reciente.
El Admin gestiona operaciones diarias sin acceso a datos financieros globales.
Todo excepto: Configuracion del sistema, Analytics, datos financieros.
KPIs operativos: Tickets abiertos (criticos), SLA cumplido, Contactos activos, Tareas equipo.
El Agente atiende clientes, gestiona tickets y consulta informacion.
Dashboard (sus KPIs), Contactos (asignados), Tickets (asignados), Presupuestos (lectura), Cobertura, Facturacion (sus clientes), Comunicaciones.
KPIs personales: Mis tickets (criticos), SLA mis tickets, Tareas pendientes, Contactos asignados.
El Distribuidor gestiona sus clientes y usa el Presupuestador para ventas.
Dashboard (sus KPIs), Contactos (SUS clientes), Tickets (de sus clientes), Facturacion (de sus clientes), Cobertura.
El distribuidor accede al Presupuestador (pedidos.conexiatec.com) para crear presupuestos, gestionar pedidos y ver su pipeline Kanban. Desde el CRM, un boton redirige al Presupuestador con inicio de sesion automatico.
Integracion CRM <-> Presupuestador para el Distribuidor:
KPIs: Mis clientes (nuevos este mes), Tickets (criticos), Presupuestos pendientes, Servicios activos.
El Admin del distribuidor puede:
Sucursales del distribuidor con entorno aislado. El usuario master de la delegacion solo puede crear, ver y tramitar presupuestos de SU delegacion. No ve otras delegaciones ni datos economicos del distribuidor principal.
El Cliente accede a un portal simplificado. Layout diferente (sin sidebar completo).
Portal Cliente: Mis servicios, Mis facturas, Soporte, Mis datos.
| Seccion | Funcionalidad |
|---|---|
| Mis servicios | Ver servicios activos con cuota, permanencia, estado. Solicitar ampliacion/suspension. |
| Mis facturas | Consultar facturas, descargar PDF, pagar pendientes (URL cobro), descargar 347 anual. |
| Soporte | Crear tickets tipificados (Tecnico, Administrativo, Back Office). Ver estado de tickets existentes. |
| Mis datos | Modificar email de facturacion. Ver datos personales (nombre, NIF, IBAN enmascarado). Descargar contratos firmados. |
| Contactos | Crear contactos internos (nombre, cargo, email, telefono) que no tienen acceso a la plataforma. |
El dashboard se adapta segun el rol del usuario. Solo Super Admin ve datos financieros.
| Rol | KPIs visibles |
|---|---|
| Super Admin | MRR, ARPU, Churn, Deuda vencida, Tickets abiertos, SLA, Pipeline valor, Nuevos clientes + todos los graficos |
| Admin | Tickets abiertos, SLA cumplido, Contactos activos, Tareas equipo |
| Agente | Mis tickets, SLA mis tickets, Tareas pendientes, Contactos asignados |
| Distribuidor | Mis clientes, Tickets, Presupuestos pendientes, Servicios activos |
| Cliente | Portal: Servicios, Cuota mensual, Facturas pendientes, Tickets abiertos |
La pagina mas importante del CRM. Toda la informacion del cliente en una sola pantalla.
| Tab | Datos | Origen |
|---|---|---|
| Resumen | Datos cliente, deuda, servicios activos, ultima actividad | CRM + DoWISP |
| Servicios | Suscripciones detalladas: producto, cuota, permanencia, proveedor, alta | DoWISP |
| Facturas | Historial facturas: fecha, base, IVA, total, estado, PDF, enviar email | DoWISP |
| Tickets | Tickets abiertos + historial, con boton crear ticket pre-rellenando cliente | CRM |
| Pipeline | Oportunidades activas + presupuestos del Presupuestador | CRM + Presupuestador API |
| Actividades | Timeline cronologico: llamadas, emails, visitas, tareas con filtros | CRM |
| Comunicaciones | Log de emails, SMS, WhatsApp, llamadas con estado entrega | CRM |
| Documentos | Contratos firmados, mandatos SEPA, ofertas (descarga PDF) | DoWISP (firmas) |
| Notas | Notas libres del equipo. Privadas (solo N0) y publicas. | CRM |
Un contacto del CRM se vincula con el cliente de DoWISP y el contacto del Presupuestador mediante el NIF/CIF como clave natural. El campo dowisp_cliente_id almacena el ID de DoWISP. El campo presup_uuid almacena el UUID del Presupuestador.
Estructura: sidebar (estado, prioridad, asignado, SLA, cliente, servicio afectado, tags, acciones) + conversacion (hilos de respuestas y notas internas).
Cuando un ticket necesita involucrar a terceros (proveedor, distribuidor, equipo interno), se crean sub-tickets con numeracion #parent-N.
TICKET #1234 - "Sin conexion FTTH zona norte"
Creado por: Cliente (Juan Perez)
Asignado a: Ana Garcia (Agente)
Conversacion: cliente <-> agente
|
|-- SUB-TICKET #1234-1 (Proveedor: Sarenet)
| Hilo propio: Back Office <-> Sarenet (via email)
| Cada respuesta email del proveedor se integra en el hilo
|
|-- SUB-TICKET #1234-2 (Distribuidor: Alpha)
| Hilo propio: Agente <-> Distribuidor
| Notificacion al distribuidor sobre clientes afectados
|
|-- SUB-TICKET #1234-3 (Interno: Tecnico)
Hilo propio: solo equipo interno
Verificacion post-restauracion
| Prioridad | Tiempo primera respuesta | Tiempo resolucion |
|---|---|---|
| Critica | 30 minutos | 2 horas |
| Alta | 1 hora | 4 horas |
| Normal | 4 horas | 24 horas |
| Baja | 8 horas | 48 horas |
Kanban de oportunidades de venta. Solo visible para Super Admin y Admin.
Etapas: Prospecto (10%) -> Contactado (25%) -> Propuesta (50%) -> Negociacion (75%) -> Ganado (100%) / Perdido.
Cada tarjeta muestra: nombre oportunidad, empresa, valor MRR, agente asignado. Drag & drop para mover etapas.
Relacion con el Presupuestador: El pipeline del CRM muestra las oportunidades del CRM. El pipeline del Presupuestador (potenciales/activos) es independiente y lo usan los distribuidores. Los datos se sincronizan via webhooks (lead.creado, lead.etapa_cambiada).
Gestion del catalogo de productos con jerarquia de 3 niveles.
FAMILIA (ej: "Pack Fibra+Movil")
|-- Segmento: Empresa / Residencial / Ambos
|-- Margen Master: 8%
|-- Margen Distribuidor: 5%
|-- Visibilidad: Todos / Solo Masters / Solo CONEXIA
|
+-- SUBFAMILIA (ej: "Pack Fibra 600Mb")
| |-- Hereda margenes de Familia (puede sobrescribir)
| |
| +-- PRODUCTO (ej: "Fibra 600Mb + Movil 30GB")
| |-- Ref DoWISP (vinculacion)
| |-- Ref Herramienta (auto-generada)
| |-- es_servicio: true (genera MRR)
| |-- Precio coste (solo visible Gerencia/Super Admin)
| |-- PVP (Base Imponible)
| |-- Descuento por defecto
| |-- Importe alta + descuento alta
| |-- Margenes (hereda o sobrescribe)
| |-- DataSheets PDF vinculados
| +-- Imagenes (galeria)
Si se desactiva una Familia, se ocultan automaticamente todas sus subfamilias y productos.
Los presupuestos se crean en el Presupuestador (pedidos.conexiatec.com) y se leen en el CRM via API REST.
presupuesto_creado y substatus_cambiadoGET presupuesto/listar, GET presupuesto/ver/{uuid}Los pedidos se tramitan en el Presupuestador y se consultan en el CRM.
Al tramitar un pedido, el Presupuestador muestra formularios dinamicos segun el producto:
| Producto | Aclarador | Campos |
|---|---|---|
| Linea Movil | Aclarador Movil | Tipo tramite (nuevo/portabilidad), soporte (SIM/eSIM), logistica (envio), numero a portar, operador origen |
| Fibra | Aclarador Fibra | Tipo instalacion, direccion, contacto en sitio, franja horaria, cobertura verificada |
| PBX VoIP | Aclarador PBX | Numero extensiones, tipo terminales, portabilidad fijos |
Multiplicidad: Si el cliente contrata 5 lineas moviles, el sistema exige rellenar 5 aclaradores de movil.
Campos condicionales: Si es portabilidad -> pedir numero actual. Si es eSIM -> pedir email. Si es SIM fisica -> pedir direccion envio.
Check de cobertura consultando 3 proveedores desde una sola pantalla.
| Proveedor | Metodo | Datos disponibles | Estado |
|---|---|---|---|
| Sarenet | Busqueda en CSV local de nodos | FTTH disponible, velocidad max, central, nodo, distancia | CSV disponible |
| Onivia | API REST v2.3 | FTTO 10Gb, tipo acceso, SLA, tiempo activacion | Credenciales OK |
| CableMovil/Orange | Consulta cobertura Orange | FTTH disponible, velocidad, tecnologia, operador red | Pendiente definir metodo |
Pendiente definir: El metodo exacto para CableMovil/Orange. Opciones: (a) API oficial si la proporcionan, (b) iframe integrado, (c) link directo a orange.es/contratacion/cobertura. La idea es centralizar la consulta, no necesariamente automatizarla al 100%.
El CRM no genera facturas. Lee y cachea datos de DoWISP para mostrarlos.
| Tab | Datos | Origen |
|---|---|---|
| Suscripciones | Cliente, producto, estado, cuota, permanencia, alta | DoWISP /suscripciones/ |
| Facturas | Numero, fecha, base, IVA, total, estado, PDF, enviar email | DoWISP /facturas/ |
| Cobros/Efectos | Importe, vencimiento, estado, dias vencido + KPIs | DoWISP /efectos/ |
| Top deudores | Ranking morosos: deuda, recibos, antiguedad, score riesgo | Calculado CRM desde DoWISP |
| Modulo | Frecuencia polling |
|---|---|
| Clientes | 5 minutos |
| Suscripciones | 5 minutos |
| Tickets | 2 minutos |
| Efectos/Cobros | 10 minutos |
| Facturas | 15 minutos |
| Firmas/Contratos | 10 minutos |
| Productos/Tarifas | 1 hora |
Nota sobre DoWISP API: Actualmente solo funciona el endpoint /api/clientes/. Los demas (suscripciones, facturas, tickets, efectos) necesitan que DoWISP active el acceso. Esto esta confirmado como posible - solo hay que solicitarlo.
Interfaz tipo chat con panel izquierdo (lista conversaciones) y panel derecho (chat activo). Canales integrados:
| Canal | Integracion | Archivo backend |
|---|---|---|
| Meta Business API (Bearer Token) | comms/channels/whatsapp.py | |
| Telegram | Bot API (Bot Token) | comms/channels/telegram.py |
| PBX/Centralita | 3CX/Asterisk AMI (IP whitelist) | comms/channels/pbx.py |
Cada conversacion se vincula al contacto (Vista 360) y opcionalmente a un ticket.
Log de todas las comunicaciones: fecha, canal, direccion (entrante/saliente), destino, asunto, estado entrega, usuario.
Templates con variables: {{nombre}}, {{empresa}}, {{deuda}}, {{url_cobro}}, etc. Tipos: Email, SMS, WhatsApp.
Envio masivo segmentado: seleccionar audiencia (filtros), plantilla, canal, programar envio. Metricas: enviados, abiertos, clicks, conversiones.
Solo visible para Super Admin.
| Tab | Metricas |
|---|---|
| Ejecutivo | MRR, ARPU, Churn, Clientes activos. Graficos: MRR 12m, nuevos vs bajas, mix productos, tickets por prioridad |
| Comercial | Leads activos, tasa conversion, tiempo cierre, win rate. Ranking agentes. ROI por canal. Pipeline funnel. |
| Financiero | Facturacion mes, cobrado vs facturado, devoluciones, antiguedad deuda, deuda por producto |
| Soporte | Tiempo resolucion, SLA cumplido, backlog, satisfaccion. Tickets por departamento. Carga agentes. Reincidencia. |
Solo visible para Super Admin (N0). Panel unificado que consolida datos de los 3 sistemas (CRM, Presupuestador, DoWISP) en una unica vista. Permite controlar todos los procesos que se estan desarrollando a traves de los tres sistemas.
Objetivo: El Super Admin necesita vision completa y cruzada del negocio sin tener que saltar entre 3 plataformas. El Centro de Control es el panel de mando unificado.
/control-center - Icono "capas" en el sidebar, entre Comunicaciones y Analytics. Solo aparece para rol Super Admin.
En la parte superior se muestran los 3 sistemas con su estado en tiempo real (Online/Offline/Degradado). Permite saber de un vistazo si alguna integracion esta caida.
Fuente: Los 3 sistemas combinados
Fuente: Presupuestador API (pedidos.conexiatec.com)
Fuente: DoWISP (cache billing en PostgreSQL)
Fuente: CRM interno + DoWISP cache
Fuente: n8n API + sync_state + webhook_log
A diferencia del Dashboard (que muestra KPIs del rol) y Analytics (que profundiza en una dimension), el Centro de Control cruza datos entre sistemas:
| Endpoint | Descripcion | Fuente |
|---|---|---|
GET /api/v1/control-center/overview | KPIs globales cruzados + alertas + timeline | CRM + Presup. API + DoWISP cache |
GET /api/v1/control-center/commercial | Pipeline, top distribuidores, en riesgo | Presupuestador API REST |
GET /api/v1/control-center/operations | Suscripciones, cobros, firmas, deuda | DoWISP cache (billing schema) |
GET /api/v1/control-center/support | Tickets, agentes, churn cruzado | CRM interno + DoWISP cache |
GET /api/v1/control-center/health | Workflows n8n, sync state, webhooks, audit | n8n API + sync_state + webhook_log |
analytics.control_center - Solo asignado a los roles super_admin y gerencia.
Solo visible para Super Admin.
| Tab | Contenido |
|---|---|
| Organizaciones | Arbol jerarquico (N0-N3). Crear, editar, desactivar organizaciones. |
| Usuarios | CRUD usuarios con filtro por org, rol, estado. Asignar roles. Forzar 2FA. |
| Sync DoWISP | Estado de cada modulo: frecuencia, ultimo sync, registros, errores. Boton forzar sync. |
| Integraciones | DoWISP (URL/token cifrado), Presupuestador (URL/API Key), Webhooks (URLs + HMAC), SMTP (SendGrid). |
| General | Datos empresa, zona horaria, idioma, moneda. Seguridad: 2FA obligatorio, intentos login, sesion expira. |
Descrito en seccion 7. Layout diferente al back-office. 4 tabs: Servicios, Facturas, Soporte, Mis datos.
Principio: El CRM es el hub central de datos del cliente. El Presupuestador es la herramienta de ventas. Ambos coexisten y se comunican via API REST.
El Presupuestador emite webhooks (HMAC-SHA256) cuando ocurren eventos:
| Evento | Cuando se dispara | Estado |
|---|---|---|
presupuesto_creado | Al guardar nuevo presupuesto | Existe |
substatus_cambiado | Al cambiar estado (tramitado, rechazado, caducado) | Existe |
distribuidor.creado | Al crear prospecto via API | Existe |
distribuidor.activado | Al convertir prospecto a activo | Existe |
agente.creado | Al activar distribuidor (crea agente automatico) | Existe |
pedido.tramitado | Al tramitar pedido (contrato DoWISP creado) | Fase 0 |
lead.creado | Nuevo lead en pipeline | Fase 0 |
lead.etapa_cambiada | Lead cambia etapa en Kanban | Fase 0 |
El CRM recibe estos webhooks en POST /webhooks/presupuestador, verifica firma HMAC, y actualiza sus datos.
El CRM consulta datos del Presupuestador via su API (auth: X-API-Key):
| Endpoint | Uso en el CRM | Estado |
|---|---|---|
GET distribuidor/listar | Sincronizar lista distribuidores | Existe |
GET distribuidor/ver/{uuid} | Detalle distribuidor con agentes | Existe |
GET stats/resumen | KPIs para analytics | Existe |
GET presupuesto/listar | Lista presupuestos en Vista 360 | Fase 0 |
GET presupuesto/ver/{uuid} | Detalle presupuesto | Fase 0 |
GET pedido/listar | Lista pedidos | Fase 0 |
GET producto/listar | Catalogo activo | Fase 0 |
POST contacto/buscar | Buscar contacto por CIF (POST, nunca URL) | Fase 0 |
Decision tomada: El Presupuestador sigue siendo la herramienta de creacion de presupuestos. Desde el CRM, segun el rol del usuario, habra un boton que redirige al Presupuestador. Opciones de inicio de sesion:
pedidos.conexiatec.com/auto-login?token=JWT_TEMPORAL&redirect=presupuestos.phpRecomendacion: Opcion 2 (deep link con token temporal). El Presupuestador ya tiene sistema de sesiones PHP + API keys. Se puede agregar un endpoint POST auto-login que acepte un JWT firmado por el CRM, cree la sesion PHP, y redirija.
Celery tasks hacen polling periodico a la API de DoWISP y cachean los datos en PostgreSQL:
Al tramitar un pedido, el flujo es: Presupuestador llama a DoWISP POST /contratador/crea_contrato/. El CRM no escribe directamente en DoWISP (lo hace el Presupuestador).
Pendiente: Actualmente solo funciona /api/clientes/ en DoWISP. Los endpoints de suscripciones, facturas, tickets, efectos necesitan que DoWISP active el acceso. Confirmado que es posible solicitandolo.
| Proveedor | Metodo | Estado |
|---|---|---|
| Sarenet | CSV local con nodos y zonas de cobertura. Busqueda por CP/direccion. | CSV disponible |
| Onivia B2B | API REST cobertura v2.3. Credenciales: acceso a front.onivia.es confirmado. | Acceso OK |
| CableMovil/Orange | Consulta cobertura. Metodo exacto pendiente de definir. | Pendiente metodo |
| Canal | Auth entrante | Auth saliente | Proteccion |
|---|---|---|---|
| Verify Token | Bearer Token Meta | IP whitelist Meta | |
| Telegram | Secret token en URL | Bot Token | Verificar source IP |
| PBX/Centralita | IP whitelist | AMI credentials | Red interna / VPN |
n8n Skynet (skynet-n8n.conexiatec.com) para automatizaciones que conectan el CRM con otros sistemas:
Auth: API Key con scope limitado. Red interna Docker.
| # | Amenaza | Proteccion |
|---|---|---|
| A01 | Broken Access Control | RBAC + org hierarchy check en CADA endpoint (middleware FastAPI) |
| A02 | Cryptographic Failures | TLS 1.3 + AES-256 campos sensibles (pgcrypto) |
| A03 | Injection | ORM parametrizado (SQLAlchemy) + Pydantic validacion + CSP headers |
| A07 | Auth Failures | JWT refresh + 2FA TOTP + lockout (5 intentos, 30min bloqueo) |
| A08 | Data Integrity | Firma HMAC-SHA256 en todos los webhooks |
| A09 | Logging Failures | Audit log + Sentry. NUNCA loguear passwords, tokens, IBAN |
| Mecanismo | Detalle |
|---|---|
| JWT Access Token | Expira 15 min. Header Authorization: Bearer |
| JWT Refresh Token | Expira 7 dias. Cookie httponly secure samesite=strict |
| Password Hash | bcrypt 12 rounds |
| 2FA TOTP | Google Authenticator. Secret cifrado en BD con APP_KEY |
| Rate Limiting | 120 req/min general, 10 req/min en /auth/*, 300 en /webhooks |
| Session Fingerprint | Hash de IP+UserAgent en JWT. Si cambia, invalidar. |
DELETE /api/v1/contacts/{id}/gdprGET /api/v1/contacts/{id}/export (JSON/CSV)| Fase | Semanas | Entregable |
|---|---|---|
| Fase 0 (Presupuestador) | 3 | API REST 12 endpoints, organizations, RBAC, dowisp_id, webhooks, margenes, IVA/IGIC, cifrar token |
| Fase 1 (Fundacion CRM) | 6 | Docker, auth JWT+2FA, contacts, tickets, frontend base (login, dashboard, sidebar) |
| Fase 2 (DoWISP) | 4 | Celery polling, sync 7 modulos, Vista 360 parcial |
| Fase 3 (Presup+Pipeline+Comms) | 4 | Webhooks bidireccional, pipeline CRM, canales comunicacion |
| Fase 4 (Portal Cliente) | 3 | Portal N3, aclaradores dinamicos |
| Fase 5 (Analytics+n8n) | 3 | 4 tabs analytics, motor reglas, dashboards, integracion n8n |
| # | Tema | Estado | Nota |
|---|---|---|---|
| 1 | DoWISP: activar endpoints suscripciones, facturas, tickets, efectos | Pedir acceso | Confirmado que es posible |
| 2 | CableMovil/Orange cobertura: metodo exacto | Definir | API, iframe o link directo |
| 3 | Onivia API: analizar interfaz y documentar flujo | Analizar | Credenciales OK, pendiente documentar |
| 4 | SSO Presupuestador: implementar deep link con token | Decision tomada | Opcion deep link recomendada |
| 5 | Acceso al codigo Laravel del Presupuestador | Verificar | Si tenemos acceso al repo o marc@points2c hace deploy |
| 6 | Workflow cobranza: definir pasos y tiempos exactos | Definir | Dias entre SMS, email, llamada, suspension |
| 7 | WhatsApp WABA: usar el existente (109603372144228) o nuevo para CRM | Definir | Actualmente usado por bot Desk |
Este documento es la base del proyecto. Nada de lo descrito aqui esta inventado. Todo esta basado en: el manual tecnico del Presupuestador, los 7 PDFs de analisis (97 paginas), el mockup funcional, y las decisiones tomadas en conversacion.
Cualquier funcionalidad no descrita aqui necesita ser analizada y documentada antes de desarrollarse.