feat: roles con modulos por rol + mejoras Mi dia y descarte

- Matriz de roles (vendedor, administracion_venta, director_ventas,
  escrituracion, direccion_general, admin) con modulos visibles por rol;
  auth/me y login incluyen 'modulos'; PATCH /usuarios/:id/rol (admin).
- Landing: Cobranza -> Clientes, Chat IA -> Chat Hermes, nuevo modulo
  Contactos (vista interna leyendo el tablero Contactos), grid filtrado
  por rol, rol visible en Configuracion de cuenta.
- Dashboards: tab 'Tablero comercial' y tabs filtrados por rol.
- Boton '<- Menu' en el header de todas las apps.
- Mi dia: cada lead muestra el ultimo cambio (que, quien, cuando) desde
  el activity log de Monday (normalizacion de created_at 100ns/us/ms).
- Descarte: el motivo se crea en el grupo de su categoria en el tablero
  Motivos No Compra.
This commit is contained in:
2026-09-04 09:12:01 +00:00
parent 42cfe937cf
commit f72354f775
33 changed files with 1224 additions and 114 deletions

View File

@@ -6,7 +6,7 @@ export interface UsuarioMonday {
email: string
}
/** GET /auth/me — perfil del usuario autenticado (incluye mondayUserId) */
/** GET /auth/me — perfil del usuario autenticado (incluye mondayUserId y modulos) */
export async function getMe(): Promise<UsuarioSesion> {
const resp = await fetch(`${API_URL}/auth/me`, conAuth())
manejar401(resp)
@@ -14,6 +14,23 @@ export async function getMe(): Promise<UsuarioSesion> {
return (await resp.json()) as UsuarioSesion
}
export interface Contacto {
id: string
nombre: string
telefono: string
email: string
estado: string
updatedAt: string
}
/** GET /contactos — contactos del tablero Contactos de Monday (máx 100) */
export async function getContactos(): Promise<Contacto[]> {
const resp = await fetch(`${API_URL}/contactos`, conAuth())
manejar401(resp)
if (!resp.ok) throw new Error(`HTTP ${resp.status}`)
return (await resp.json()) as Contacto[]
}
/** GET /monday/usuarios — usuarios activos del workspace para el dropdown */
export async function getUsuariosMonday(): Promise<UsuarioMonday[]> {
const resp = await fetch(`${API_URL}/monday/usuarios`, conAuth())

View File

@@ -7,6 +7,9 @@ export interface UsuarioSesion {
rol: string
asignacion: string | null
mondayUserId: number | null
// Módulos del ecosistema visibles para el rol (matriz del API; presente en
// /auth/me y /auth/login desde sep-2026)
modulos?: string[]
}
export interface Sesion {