| Ubicación | Tipo | Origen de datos |
|---|---|---|
Contacto | Modelo | WhatsApp bot + backfill proyectos + manual |
Tercero | Modelo | Sync Alegra/Siigo |
Proyecto.cliente | CharField | Alta manual proyecto |
Ingreso.cliente_nombre | CharField | Sync facturas venta |
PalancaComercial.contacto_clave | CharField | Alta manual palanca |
Ej: "Arcopack" existe como Contacto #42, Tercero #7, Proyecto.cliente texto y Ingreso.cliente_nombre con razón social completa. Ninguno sabe del otro.
| Modelo | Propósito | Conexión |
|---|---|---|
Proyecto | Delivery / equipo | No tiene FK a nada financiero |
ProyectoFinanciero | Contabilidad / facturación | No sabe que Proyecto existe |
PalancaComercial | Meta plan de brecha | FK a ProyectoFinanciero (no al de delivery) |
Contacto ↔ Tercero — el mismo cliente vive en 2 tablas sin puenteProyecto ↔ ProyectoFinanciero — delivery y finanzas desconectadosProyecto ↔ PalancaComercial — cerrar palanca no crea proyectosCompromiso ↔ ProyectoFinanciero — no se filtra ingresos/egresos por tareaResumenReunion ↔ Contacto — attendees como JSON, requiere string matchMiembroEquipo ↔ Contacto (equipo) — dos tablas paralelas para el teamprocess_principal_message() — procesa mensajes entrantes de clientes (no conectado)_handle_forwarded_lead / _handle_new_contact — auto-lead desde reenvíoContacto.tipo='desconocido' — flujo de detección automática muertoAnalisisDiario.mensajes_recibidos/enviados — campos no escritos actualmenteAsignacionProyecto — ~0 registrosGastoPlanificado — existe pero no hay UI ni toolMejoraAsistente — se llena por chat sin vista de consultaReducir de 28 modelos a ~20 consolidando conceptos duplicados. Core: una Entidad (cliente/lead/proveedor) y un único Proyecto enlazado a Palanca + Finanzas.
"Cuánto facturé a los clientes de palanca ISA en 12m", "clientes con 3+ reuniones y $0 facturado"
Avance por palanca = suma real de proyectos contratados, no valor estimado cacheado
Palanca contratada → proyectos se crean. Cartera vencida → tareas de cobro auto
Timeline cronológico: mensajes, reuniones, oportunidades, proyectos, facturas, pagos
Un Contacto editado se refleja en reportes de finanzas sin scripts fuzzy
Drive (adjuntos), Email (parser leads), Calendly (auto-oportunidad) encajan cleanly
Proyecto.palanca (1:N)Proyecto.entidad (reemplaza cliente texto)ResumenReunion.entidad principalNo toca finanzas ni rompe integraciones. Habilita vista 360 real.
Contacto + Tercero → EntidadProyecto + ProyectoFinancieroResumenReunion.entidades (vs JSON)Migración graceful: mantener FKs legacy + nuevas en paralelo unos días.
Evento transversal/expediente/<id>/ con timelineTransforma Nova en un CRM+ERP liviano orientado al CEO.
Dado que el webhook del número principal no está activo, estos handlers son código muerto:
process_principal_message()_handle_forwarded_lead(), _handle_new_contact()Mensaje.numero_origen='principal' → dead branchAnalisisDiario.mensajes_* → campos sin escrituraLimpiarlos reduce superficie de mantenimiento sin afectar nada.
4 cambios de ~1 día total, sin romper integraciones. Deja el terreno listo para Plata+Bronce según apetito. Todo lo relacionado con "bot comercial recibiendo mensajes" queda fuera de scope porque el canal no está conectado.