Commit Graph

152 Commits

Author SHA1 Message Date
5e9b2ac456 fix(auditoria completa): bloqueos de Mi Dia, cobranza (saldos y fechas), captura (departamento y rol), contactos (privacidad), cotizador (QR) y validaciones de API 2026-09-21 07:18:39 +00:00
75956a709f fix(crm-local): etapa tolerante a null en la actualizacion de afluencia 2026-09-18 16:06:33 +00:00
656116c4e5 fix(auditoria): afluencia (validacion, update sin perder datos ni retroceder etapa, dedup cruzado, notas), alta cliente (registro tras firma, documentos por cliente, aviso de fallos) y reporte de clientes aplanado 2026-09-18 16:05:18 +00:00
4965a4488a feat: rol manager, arreglos de reportes (cancelacion/afluencias), credito unico, cliente enkontrol, vendedor en bitacora y actualizar afluencia existente 2026-09-18 15:25:34 +00:00
9630893974 feat(reportes): rediseno del modulo (sidebar agrupado, KPIs, filtros claros, tabla mejorada y captura con carga) 2026-09-17 09:10:39 +00:00
84582ce6a2 feat(auditoria): mostrar el nombre del usuario en lugar del id (tabla y filtro) 2026-09-17 08:54:56 +00:00
9643f866cc feat(chat-frasa): acceso total a datos (13 herramientas con escopo por rol), streaming SSE, caché de embeddings, markdown y mantenimiento en Configuraciones 2026-09-17 08:41:21 +00:00
278a79c984 fix(reportes): select con rol/activo para la lista de vendedores 2026-09-17 07:19:45 +00:00
8bcb093fec feat(reportes): módulo de Reportes con 10 reportes, filtros y descarga Excel 2026-09-17 07:18:34 +00:00
31f83b0504 fix(mi-dia): admin reasigna/mueve leads, capturista real en cards, datos en apartados, INE obligatoria y bitácora persistente 2026-09-17 06:54:57 +00:00
b99707689f feat(config): alta de usuarios desde Configuraciones (POST /config/usuarios, solo admin) 2026-09-14 20:21:15 +00:00
31379806be fix(cobranza): invariante engancheTotal=plan completo, pago 0 inicial y abonos al pago correcto 2026-09-12 22:58:23 +00:00
34229f1894 fix(catalogos): SOLE y MUTUO en desarrollos de alta lead/afluencia/cliente y filtros 2026-09-12 22:41:15 +00:00
47b00bb6eb fix(cobranza): reimport del maestro con fechas reales y abonos (AplicacionPago) 2026-09-12 09:32:31 +00:00
411130a127 fix(captura): llenar ubicacion con codigo canonico y modelo faltante desde inventario 2026-09-12 09:13:31 +00:00
6473fb5981 fix(captura): reimport del maestro con mapeo explicito por hoja (unidades canonicas, fechas YYYY-MM-DD) 2026-09-12 08:40:39 +00:00
b2d3287c31 feat(captura): Escrituracion con 3 pares fecha+checkbox y columna Desviacion en dias 2026-09-12 08:03:44 +00:00
d2e97f33f5 feat(captura): fechas de Obra bloqueadas tras establecerse, solo admin las cambia 2026-09-12 07:52:40 +00:00
1c81331614 fix(captura): inputs de text/fecha se borraban al teclear (valor desde dirty) 2026-09-12 07:36:37 +00:00
1791dd69ba feat(captura): fecha junto a checkboxes de Obra con semaforo verde/rojo 2026-09-12 07:30:23 +00:00
852182fabc fix(6-mejoras): subcategoría+apartado libre+PDF+coacreditado+docs+dedup
1. Subcategoría en modal descarte (catálogo completo + select)
2. Apartado sin monto mínimo (eliminada validación de 0,000)
3. PDF solo con propuesta elegida (no las 4)
4. Co-acreditado: checkbox 'no tiene' valida sin campos obligatorios
5. Documentos apartado: previsualizar + descargar (endpoint + frontend)
6. Oportunidades: sin duplicados, orden Confirmar→Afluencia→Cotizar→Aparto(verde)→Descartar
2026-09-12 07:09:15 +00:00
c8357fe582 feat(7-mejoras): notas persisten + soporte + captura visible
1. Notas propagan entre etapas (convertirLead/apartar updateMany)
2. Afluencia: conexión → aviso amarillo
3. Escrituración: click nombre abre bitácora
4. Co-acreditado: opción 'no tiene'
5. Nota del alta de lead → bitácora
6. Módulo Soporte: formulario + listado solicitudes
7. Captura visible para todos
2026-09-11 23:17:25 +00:00
1ba7aa49da feat(mejoras): 22 mejoras UX en todos los módulos
Mi día: cancelación con motivo, conteo escrituración real, cita sin retroceder, calendario completo
Cobranza: MoraDashboard respeta alcance, hoy dinámico, cancelar con motivo
Landing: contactos paginados, error vs vacío diferenciado
Dashboards: KPI renombrado, drill-down planes activos
Chat: historial recarga, preguntas rotativas, error solo toast
Transversal: shadow-sm corrupto corregido en 9 archivos

553 API tests + 7 apps construidas
2026-09-11 12:48:47 +00:00
89d95eb53b feat(purga): Monday eliminado completamente del sistema
14 servicios eliminados, 7 controllers local-only, crons locales,
config sin MONDAY_*, frontend sin banners/avisos Monday.
552 tests API + 7 apps construidas.
2026-09-11 11:47:17 +00:00
64b01246d6 feat(mejoras): 25 mejoras UX en todos los módulos + purga Monday
Backend: mi-dia siempre local, vocabulario canónico, AplicacionPago con usuario
Mi día: modal español real, cita desde modal, score falso eliminado
Cotizador: barra sticky, persistencia local con folio
Alta Clientes: redirect eliminado, foto conectada, asesor desde sesión, refs dinámicas
Cobranza: contrato Mora arreglado, link a Plan, abono próximo pago, WhatsApp
Landing: contactos locales, ModalContacto eliminado, ModoTrabajo eliminado
Dashboards: MiTablero unificado, funnel con descartados, drill-down, rango fechas
Chat FRASA: corpus 5 desarrollos, 6 herramientas, historial conversaciones

69 archivos, 7 apps construidas
2026-09-11 06:52:37 +00:00
075d47c304 fix(mi-dia): 5 bugs críticos + 8 mejoras UX
Bugs críticos: descartar, kanban drag&drop, escrituración, fases API, export filtros
UX: tel clicable, WhatsApp, filtros por tab, tareas, calendario, estado, notas, navegación
2026-09-11 02:05:25 +00:00
fabf507aa0 fix(citas): aceptar datetime-local en validación de etapa
- Backend: fecha ya no requiere formato YYYY-MM-DD, acepta datetime-local
- El input datetime-local del frontend envía 'YYYY-MM-DDTHH:mm'
2026-09-11 00:36:56 +00:00
46d20657ea fix(cancelar): botones Cancelación Apartado y Cancelo funcionan con motivo
- ModalDescarteGenerico restaurado (motivo + comentario)
- Cancelación Apartado: abre modal → confirma → cambia estado
- Cancelo en Escrituración: abre modal → confirma → cambia estado
- onFase intercepta ambas fases y abre el modal de cancelación
2026-09-11 00:26:52 +00:00
cfffb36965 fix(apartados): eliminar modal NotasApartado, solo queda DetalleLeadModal
- Eliminado NotasApartado import y JSX
- Eliminado apartadoSeleccionado state
- Eliminado onClick/tabIndex/role del card de apartado
- El único modal es DetalleLeadModal (se abre al click en el nombre)
2026-09-11 00:08:59 +00:00
4d026a36d2 fix(mi-dia): eliminar modales antiguos, solo queda DetalleLeadModal
- Eliminado ModalDescarteGenerico (función completa)
- Eliminado ModalDescartar (función completa)
- Eliminado TimelineLead import y leadTimeline state
- Eliminado botón 'Historial' de FilaLead
- Eliminado prop onTimeline de FilaLead
- Eliminado modal JSX de timeline
- Descarte ahora es llamada directa sin modal
- 1525 líneas (antes 1800)
2026-09-10 23:58:47 +00:00
b1e408f435 fix(notas): notas persisten entre etapas via clienteClave
- 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
2026-09-10 22:55:11 +00:00
5a50243dff fix(notas): buscar por leadId O nombre del cliente
- 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
2026-09-10 21:31:51 +00:00
98889bbf6a fix(api-url): todas las apps usan || en vez de ?? para VITE_API_URL
- 11 archivos corregidos: agente-ia, alta-clientes, cobranza, cotizador,
  dashboards, mi-dia, landing (auth.ts, api.ts, mi-dia.ts, reportes.ts,
  push.ts, notas.ts, recordatorios.ts, reporte-mi-tablero.ts)
- ?? solo cubre null/undefined, || cubre string vacío
- 7 apps reconstruidas
2026-09-10 21:26:54 +00:00
913bdff0d1 feat(bitacora): modal de cliente rediseñado con sidebar lateral
- 5 secciones: Info, Cita, Tareas, Notas, Miembros
- Sidebar de navegación con íconos (lucide-react)
- Notas con búsqueda, botón +Añadir, empty state
- Cita programada visible
- Tareas pendientes con checkbox
- Dark mode completo
- Max-w-5xl, layout flex horizontal
2026-09-10 21:17:17 +00:00
44360591b0 feat(hermes): 4 herramientas nuevas + índices DB
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.
2026-09-10 21:11:01 +00:00
88babe9913 rename: Chat Hermes → Chat FRASA en landing 2026-09-10 07:14:39 +00:00
16cacd5f31 feat(9-mejoras): limpieza leads + admin CRUD + calendario + CRM360 FRASA
1. Leads limpiados (207 eliminados, 18 apartados conservados)
2. Round-robin desactivado (config round_robin_habilitado=false)
3. Admin puede borrar/reasignar/mover leads (DELETE/PATCH/POST)
4. Calendario: fechaCita guardada y pasada correctamente
5. Avisos Monday eliminados (BannerModoLocal, ChipPendienteSync, vinculación)
6. Contactos filtrados por usuario asignado
7. Modal bitácora: notas persisten entre fases
8. Fases oportunidades: Agendo→Afluencia→Cotizar→Aparto
9. Toast de nota eliminado en cambios de status
10. Branding: CRM360 FRASA + logo en todas las apps
11. 7 apps construidas
2026-09-10 07:05:40 +00:00
356bf46216 fix(escrituracion): fases reordenadas según solicitud
- Fases: Venta → Seguimiento → Integración → X Autorizar → Autorizado
  → X Escriturar → Escriturado → Titulado → Cancelo
- Kanban y botones actualizados con el nuevo orden
- obtenerColumnaEscrituracion actualizado
- Backend FASES_APARTADO_PERMITIDAS actualizado
2026-09-09 10:41:38 +00:00
d546460ba4 feat(8-mejoras): cancelar+motivo, brocker, etapas, calendario, modal cliente
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)
2026-09-09 10:26:36 +00:00
6db9662838 fix(mi-dia): mostrar desarrollo en cards de leads
- LeadMiDia ahora incluye campo 'desarrollo'
- Backend: mapeado desde Monday leads y desde LeadCaptura local
- Frontend: FilaLead muestra teléfono · desarrollo · origen
2026-09-08 18:26:58 +00:00
2d61b3987f docs: guía de usuario FRASA CRM en PDF
Guía completa para usuarios no técnicos:
- Cómo entrar al sistema
- Mi día (leads, oportunidades, apartados, escrituración)
- Alta de clientes (afluencia + completa)
- Cotizador
- Cobranza
- Tableros
- Contactos
- Chat Hermes
- Configuraciones (admin)
- Consejos útiles

PDF: docs/Guia_Usuario_FRASA_CRM.pdf
2026-09-08 10:53:52 +00:00
1a70199de8 fix(escrituracion): Cancelo/Escriturado remueven de la lista
- 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
2026-09-08 10:49:26 +00:00
98fe6dd8bf fix(escrituracion): todosApartados incluido en resumenMiDiaLocal
- 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)
2026-09-08 10:22:30 +00:00
cfcedd5452 fix(escrituracion): usar todosApartados para que aparezcan los terminales
- 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
2026-09-08 10:17:37 +00:00
06ec2a6f7f fix(apartados): Firma Cliente + fases escrituración son terminales
- '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'
2026-09-08 10:11:20 +00:00
df87d17fb2 fix(firma-cliente): cambiar etapa ANTES de mover 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
2026-09-08 10:08:49 +00:00
e5d412389d fix(escrituracion): filtrar apartados solo en fases de escrituración
- 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'
2026-09-08 10:06:02 +00:00
ce95cb9631 fix(mora): pagoVencido es number, no string - fix .slice() error
- MoraDashboard: pagoVencido tipo number, mostrado como 'X pagos vencidos'
- Corrige TypeError: u.pagoVencido.slice is not a function
2026-09-08 09:59:00 +00:00
9b5ba96f30 feat(cobranza): importar datos de COBRANZA PREVENTA 060926.xlsx
- 93 planes de pago importados (10 desarrollos)
- 448 pagos mensuales creados
- Desarrollos: Zafiro, Mutuo, Sole, Atelier, Estanza, Solana I/II, Diagonal 40, Senda
- Script importador: scripts/importar-cobranza-preventa.js
- Soporte para fechas Excel serial y fórmulas
2026-09-08 09:55:51 +00:00
3213808741 fix(botones): verde en Aparto (oportunidades) y Firma Cliente (apartados)
- 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
2026-09-08 09:44:54 +00:00