feat: automatizaciones ronda 2 + app de dashboards /dash

- Escalado: lead asignado sin contactar >48h genera actividad URGENTE
  al coordinador (LEAD_ESCALADO_HORAS, MONDAY_COORDINADOR_USER_ID)
- Oportunidad en Aparto crea item en Apartado (fecha límite +7d);
  en Ganado crea la Venta; ambos con dedup
- GET /api/reportes/resumen: leads, funnel, unidades por desarrollo,
  cobranza y actividades en una respuesta (cache 60s)
- App dashboards (/dash): 8 KPIs + 3 gráficas Recharts, con auth
- Landing: tarjeta Tableros; docs/AUTOMATIZACIONES-MONDAY.md con las
  recetas nativas para activar en la UI
- Tests: api 158, dashboards 7, landing 5 — todo verde
This commit is contained in:
2026-08-27 09:05:09 +00:00
parent de11af985e
commit 04568a5603
34 changed files with 6279 additions and 8 deletions

View File

@@ -0,0 +1,70 @@
# Automatizaciones nativas de Monday — checklist del admin
Recetas que se activan **desde la UI de Monday** (botón "Automatizar" en cada
tablero). Tiempo estimado total: ~10 minutos. Ninguna requiere código.
> **No duplicar**: el servidor (API Gateway, crons cada 5 min) ya cubre la
> asignación round-robin de vendedores, el recordatorio de leads inactivos
> (10 días), el escalado de leads sin contactar (48 h), y la creación de items
> en Apartado / Ventas cuando una oportunidad entra a **Aparto** o **Ganado**.
> Las recetas de abajo son solo *avisos y orden visual*; no repitas esas reglas
> como recetas nativas.
## 1. Tablero Leads — avisar al vendedor cuando se le asigna un lead
El round-robin del servidor asigna la columna **Vendedor**; esta receta solo
envía la notificación.
- Board: **Leads**
- Receta: *"When a person is assigned to someone, notify someone"* (categoría
**People**; en español: "Cuando se asigne una persona, notificar a alguien")
- Parámetros:
- person column: **Vendedor**
- notify: **the person assigned** (el vendedor asignado)
- mensaje: `Tienes un lead nuevo: {item.name}`
## 2. Tablero Oportunidades — avisar cuando algo se gana
El servidor ya crea el item en Ventas; esto solo avisa al equipo.
- Board: **Oportunidades**
- Receta: *"When status changes to something, notify someone"* (categoría
**Status**)
- Parámetros:
- status column: **Estado** → valor: **Ganado**
- notify: una persona o equipo de coordinación (elegir en la receta)
- mensaje: `Venta ganada: {item.name} — {item.text_mm6ezd0d}` (unidad)
## 3. Tablero Apartado — recordatorio de fecha límite
- Board: **Apartado**
- Receta: *"When a date arrives, notify someone"* (categoría **Date
reminders**)
- Parámetros:
- date column: **Fecha límite**
- when: **1 día antes**, a las **9:00**
- notify: **el responsable del expediente** (o coordinación)
- mensaje: `El apartado de {item.name} vence mañana`
## 4. Mover items entre grupos por estado (orden visual)
Si los tableros tienen grupos (p. ej. "Activos" / "Cerrados"), una receta por
tablero mantiene el orden sin trabajo manual:
- Board: **Oportunidades** (repetir en **Leads** si usa grupos)
- Receta: *"When status changes to something, move item to group"* (categoría
**Status**)
- Parámetros sugeridos:
- **Estado** = Ganado → mover al grupo **Cerrados**
- **Estado** = Perdido → mover al grupo **Cerrados**
- **Estado** = Abandono → mover al grupo **Cerrados**
> Si el tablero no tiene grupos, omite esta receta: no afecta nada del servidor.
## Verificación rápida (2 min)
1. Crea un item de prueba en **Leads**, asígnate como Vendedor → debe llegarte
la notificación de la receta 1. Bórralo después.
2. En **Oportunidades**, cambia un item de prueba a **Ganado** → notificación
de la receta 2 **y** (en ≤ 5 min, por el servidor) un item nuevo en
**Ventas**. Borra ambos después.