- Campo clienteClave en RecordatorioVendedor (hash nombre+telefono)
- Al crear nota: se calcula clienteClave del lead/cliente
- Al buscar notas: busca por leadId O clienteClave (no por nombre suelto)
- Mantiene compatibilidad: notas viejas sin clienteClave siguen por leadId
- Migración SQL aplicada
- Las notas se buscan por leadId O por nombre del cliente
- Al convertir lead→oportunidad, las notas siguen visibles
- Funciona en todas las etapas: lead, oportunidad, apartado, escrituración
Hermes ahora puede:
- buscar_leads: buscar leads por nombre/teléfono/email
- ver_cliente: info completa de un cliente
- ver_oportunidades: pipeline de ventas con filtro por etapa
- ver_cobranza: resumen de pagos vencidos
Índices DB: LeadCaptura.nombreLead, Cliente.nombreCompleto, PlanPago.status
38 tests nuevos pasan.
1. Cancelar con motivo: Mis apartados y Escrituración piden motivo (modal reutilizado)
2. Origen BROCKER agregado en alta afluencia y captura rápida
3. Etapas oportunidades reordenadas: Agendo Cita → Afluencia → Cotizador
4. Cotizador: mensualidades diferibles (6, 12, 14, 18, 24 meses)
5. Calendario semanal por vendedor en Mi día
6. Hora en citas (datetime-local en vez de solo fecha)
7. Click en nombre → modal DetalleLeadModal (info + notas + historial)
- LeadMiDia ahora incluye campo 'desarrollo'
- Backend: mapeado desde Monday leads y desde LeadCaptura local
- Frontend: FilaLead muestra teléfono · desarrollo · origen
- Escrituración ahora solo muestra fases ACTIVAS:
Firma Cliente, Seguimiento, Llamada Escrituras, X Escriturar,
Banco/Infonavit, X Autorizar
- Cancelo y Escriturado son terminales → se remueven de la lista
- resumenMiDiaLocal ahora retorna 'todosApartados' (APARTADO filtrado)
- Incluye terminales como Firma Cliente, Escriturado, Cancelo
- Escrituración filtra sobre estos y solo muestra fases de escrituración
- Admin ahora ve 10 apartados en Escrituración (3 con Firma Cliente)
- ResumenMiDia ahora incluye 'todosApartados' (todos los apartados
incluyendo terminales como Firma Cliente, Escriturado, etc.)
- Escrituración filtra sobre 'todosApartados' en vez de 'misApartados'
- Sin esto, Firma Cliente era terminal → se excluía de misApartados →
la pestaña Escrituración no lo encontraba
- 'Firma Cliente' y todas las fases de escrituración añadidas a ESTADOS_FINALES_APARTADO
- Al pasar a Firma Cliente, el apartado YA NO aparece en 'Mis apartados'
- Solo aparece en la pestaña 'Escrituración'
- Al dar click en 'Firma Cliente', ahora primero cambia el estado del
apartado a 'Firma Cliente' y DESPUÉS cambia a la pestaña Escrituración
- Antes solo cambiaba la pestaña sin cambiar el estado
- Escrituración solo muestra apartados en fases: Seguimiento, Llamada Escrituras, X Escriturar, Banco/Infonavit, X Autorizar, Escriturado, Cancelo, Firma Cliente
- Ya no muestra apartados que están en Pago Apartado, Alta Enkontrol, etc.
- Solo llegan a Escrituración cuando se da click en 'Firma Cliente'
- Aparto en Mis oportunidades: botón verde (bg-green-600)
- Firma Cliente en Mis apartados: botón verde (bg-green-600)
- Los demás botones mantienen su estilo actual
- Lead creation: validación por email y teléfono normalizados (últimos 10 dígitos)
- Si ya existe lead con mismo email/teléfono → 409 con aviso
- Alta Afluencia: nombre dividido en Nombre(s), Apellido Paterno, Apellido Materno
- Fix lada: strip robusto de +52 y +1 con/sin espacio
- Backend + frontend actualizados
- 'Cancelo' añadido a ESTADOS_FINALES_APARTADO (se remueve de la lista)
- Botón 'Agendo →' en Mis leads: color verde
- Botón 'Apartó' en Mis oportunidades: color verde
- Botón 'Firma cliente →' en Mis apartados: color verde
- Campo 'Medio de contacto' reemplazado por 'Número de dependientes'
- Dropdown con opciones: 1, 2, 3, 4, 5 o más
- Backend + frontend + tipos API actualizados
- Nombres de tabs acortados: Leads, Oportunidades, Apartados, Escrituración, Tablero
- Barra scrollable en móvil (overflow-x-auto)
- Botones Exportar y Kanban más compactos (px-2 py-1 text-[11px])
- Sin wrap: todo en una fila con scroll horizontal
- Eliminado botón kanban duplicado en contenido de 'Mis leads'
- Botón 'Exportar' movido al final de la barra de pestañas (junto a Kanban)
- Exportar aparece en leads, oportunidades y apartados
- Un solo botón Kanban/Lista visible en todas las pestañas
- Botón Kanban/Lista movido al final de la barra de pestañas
- Visible en todas las pestañas (leads, oportunidades, apartados, escrituración)
- Eliminado botón duplicado del contenido principal
- TabsCrm recibe vistaKanban + onToggleKanban como props
- KanbanView genérico: acepta items, columnas y extractor de columna
- Kanban en Mis leads (5 columnas: Nuevo/Contactado/Interesado/Agendo/Descartado)
- Kanban en Mis oportunidades (5 columnas: Afluencia/Cotizador/Agendó/Apartó/Perdido)
- Kanban en Mis apartados (7 columnas: Pago Apartado → Cancelación)
- Kanban en Escrituración (7 columnas: Seguimiento → Canceló)
- Drag & drop funcional en todas las pestañas
- Layout full-width en modo kanban
- FASES_APARTADO_PERMITIDAS: añadidas 7 fases de escrituración + Firma Cliente
- El endpoint /apartados/:id/estado ahora acepta todas las fases
- Verificado: cambio a 'Seguimiento' funciona correctamente
- Nueva pestaña 'Escrituración' después de 'Mis apartados'
- 7 fases: Seguimiento, Llamada Escrituras, X Escriturar, Banco/Infonavit, X Autorizar, Escriturado, Cancelo
- 'Firma Cliente' en Apartados mueve a pestaña Escrituración
- Backend: fases de escrituración añadidas al controller de apartados
- UI: cada apartado muestra botones de fases de escrituración
- 630 API tests + 5 apps construidas
- esMio: admin/director_ventas/direccion_general ven todo
- Controller: admin carga todas las capturas y clientes (no solo las suyas)
- Admin ahora ve 123 leads + 8 ops + 5 apartados
- Firma Cliente (Venta) renombrada a Alta Enkontrol (mismo redirect a alta cliente)
- Campo 'Usuario Enkontrol' añadido en Datos Generales del alta cliente
- Unidad se bloquea (APARTADA) al pasar cliente a etapa Aparto
- Backend y frontend actualizados
- Rango salarial: input → select con 14 rangos (A-0 a M-100001)
- Lo quiere para: input → select con 2 opciones (Vivir / Inversión)
- Validación labels origen/desarrollo tolerante en backend (omitir si no existe)
- Redirect a /hoy/ después de crear afluencia o completar alta cliente
- Modal con 28 campos agrupados por sección (Datos, Contacto, Crédito, Propiedad, Marketing, Venta)
- Click en fila abre modal
- Dark mode completo
- Agregado 'clientes-maestro' a todos los roles
Añadido cache: 'no-store' a conAuth() en todas las apps. El navegador
cacheaba respuestas GET de la API, causando que los cambios (crear lead,
cambiar estado, etc.) no se reflejaran hasta borrar cookies.
6 apps reconstruidas.
- saludMonday: cache modo_local_forzado con _modoLocalDb + setModoLocalDb
- index.ts: eagerly carga modo_local_forzado al startup
- convertirLeadEndpoint: crea LeadCaptura OPORTUNIDADES para ids loc_*
- escaneoOportunidades: crea LeadCaptura APARTADO con usuarioId y oportunidadId
- Mi día: esMio para apartados incluye oportunidadId
Flujo verificado en modo local:
1. Lead loc_* creado y asignado al capturista
2. Cambio de estado funciona (CONTACTADO → CALIFICADO)
3. Agendo crea oportunidad local (loc_*)
4. Aparto crea apartado local vinculado
5. Cola sync: 9 operaciones pendientes para cuando Monday vuelva
6. Mi día muestra apartados correctamente
Nuevas tablas:
- ActividadLocal (historial de llamadas, reuniones, tareas)
- AsignacionLocal (round-robin local)
- fechaLimite en LeadCaptura
Servicios nuevos:
- actividad-local.service.ts (CRUD actividades)
- local-canal.ts (canal de envío para recordatorios)
- seed-modo-local.js (activar modo local)
Mi día local mejorado:
- Mis actividades hoy (filtros usuario/fecha/estado)
- Apartados por vencer (con fechaLimite real)
- Equipo (contadores por vendedor, solo coordinador/admin)
- unidadCodigo en oportunidades desde datosJson
Automatizaciones locales:
- Round-robin: asigna leads sin vendedor + crea actividad
- Inactividad: detecta oportunidades >10 días sin update
- Escalado: alerta oportunidades >48h sin contacto
Reportes: actividadesAbiertas + parcial:false en modo local
Cron wiring: crons locales cuando Monday caído
661 tests verdes.
- misLeads: solo muestra items del tablero Leads (captura ligera)
- misOportunidades: muestra items del tablero Oportunidades (afluencia)
- Eliminado el merge que causaba que el mismo item apareciera en ambas
- apartadosPorVencer: filtrado por esMio (solo propios)
- Limpiado duplicado MONICA RODRIGUEZ VEGA de Monday Leads
- 630 tests verdes
1. apartadosPorVencer: filtrado por esMio — cada vendedor solo ve sus
propios apartados por vencer, no los de todos.
2. misLeads: excluye items que ya estan en misOportunidades — evita que
el mismo item aparezca en ambas pestanas (leads + oportunidades).
3. 630 tests verdes.