feat(mi-dia): app /hoy + CRM ligero para vendedores

- App Mi día: KPIs, mis actividades, mis leads con acciones rápidas
  (contactado/intento/agenda cita/descartar con motivo), captura rápida
  de lead (409 en duplicado por teléfono), vista equipo para coordinadores
- API: GET /api/mi-dia/resumen, POST /api/leads, /leads/:id/estado,
  /leads/:id/descartar; mapeo Usuario.mondayUserId (seed listo para
  cuando inviten a los vendedores a Monday)
- Landing: tarjeta Mi día; tests api 188, mi-dia 8, landing 4
This commit is contained in:
2026-08-28 06:23:15 +00:00
parent 1f5b6ee088
commit bc0f9da8fe
31 changed files with 5917 additions and 3 deletions

View File

@@ -2,9 +2,9 @@ import { describe, it, expect } from 'vitest'
import { MODULOS } from './modulos'
describe('MODULOS', () => {
it('expone los 5 módulos del ecosistema', () => {
expect(MODULOS).toHaveLength(5)
expect(MODULOS.map((m) => m.id)).toEqual(['cotizador', 'alta-clientes', 'cobranza', 'agente-ia', 'tableros'])
it('expone los 6 módulos del ecosistema', () => {
expect(MODULOS).toHaveLength(6)
expect(MODULOS.map((m) => m.id)).toEqual(['cotizador', 'alta-clientes', 'cobranza', 'agente-ia', 'tableros', 'mi-dia'])
})
it('cada módulo tiene nombre, descripción y URL válida', () => {
@@ -22,6 +22,7 @@ describe('MODULOS', () => {
expect(urls['cobranza']).toBe('/pay/')
expect(urls['agente-ia']).toBe('/ai/')
expect(urls['tableros']).toBe('/dash/')
expect(urls['mi-dia']).toBe('/hoy/')
})
it('no hay ids ni URLs duplicadas', () => {

View File

@@ -37,4 +37,10 @@ export const MODULOS: Modulo[] = [
descripcion: 'KPIs comerciales, inventario y cobranza en tiempo real',
url: '/dash/',
},
{
id: 'mi-dia',
nombre: 'Mi día',
descripcion: 'Agenda del vendedor: leads, actividades y captura rápida',
url: '/hoy/',
},
]