feat: recordatorios periódicos; supervisor invita auxiliares; owner edita usuarios; precios planes y MSI

This commit is contained in:
Horux Dev
2026-06-25 20:56:39 +00:00
parent 0bded50e57
commit 57c4908e68
12 changed files with 770 additions and 102 deletions

View File

@@ -674,6 +674,127 @@ pm2 reload horux-web
---
## 30. Supervisor puede invitar Clientes y Auxiliares
**Fecha:** 2026-06-25
### Cambio
Antes los supervisores solo podían invitar usuarios con rol **Cliente**. Ahora también pueden invitar **Auxiliares**, siempre asignados a su propia supervisión.
### Backend
| Archivo | Cambio |
|---|---|
| `apps/api/src/controllers/usuarios.controller.ts` | Permite a `supervisor` invitar `cliente` y `auxiliar`; al invitar un auxiliar se asigna a sí mismo por defecto y no permite asignar a otro supervisor |
| `apps/api/src/routes/cartera.routes.ts` | `/carteras/supervisores` ahora acepta `owner` y `supervisor` |
| `apps/api/src/controllers/cartera.controller.ts` | `getSupervisores` filtra para que un supervisor solo se vea a sí mismo en el dropdown |
### Frontend
| Archivo | Cambio |
|---|---|
| `apps/web/app/(dashboard)/usuarios/page.tsx` | El dropdown de roles para supervisor incluye **Auxiliar**; al seleccionar auxiliar se preselecciona al supervisor logueado como responsable |
### Deploy
```bash
cd /root/HoruxDespachosNuevo
pnpm --filter api build
pnpm --filter web build
pm2 reload horux-api
pm2 reload horux-web
```
**Estado:** ✅ Exitoso
---
## 31. Owner puede editar nombre y rol de usuarios
**Fecha:** 2026-06-25
### Cambio
En la página **Configuración Usuarios**, el **owner** ahora puede editar el **nombre** y el **rol** de cualquier usuario del tenant desde un modal.
### Detalles
- Se agregó el botón **Editar** en cada fila de usuario (solo visible para `owner`).
- El modal permite cambiar:
- **Nombre**
- **Rol** (los roles disponibles dependen de si es tenant despacho o legacy)
- Un owner **no puede cambiar su propio rol** (solo su nombre).
- El backend ya tenía el endpoint `PATCH /usuarios/:id`; se ajustó la UI para exponerlo.
### Archivos modificados
| Archivo | Cambio |
|---|---|
| `apps/web/app/(dashboard)/usuarios/page.tsx` | Botón Editar, modal de edición, validación de rol propio |
### Deploy
```bash
cd /root/HoruxDespachosNuevo
pnpm --filter web build
pm2 reload horux-web
```
**Estado:** ✅ Exitoso
---
## 32. Recordatorios periódicos en calendario
**Fecha:** 2026-06-25
### Cambio
Los recordatorios custom del calendario ahora pueden ser **periódicos**: mensual, bimestral, trimestral o anual. Se mantienen activos indefinidamente hasta que el usuario cancele la serie.
### Modelo
Se reutiliza la tabla `recordatorios` con metadatos de serie:
- **Maestro**: `serie_id IS NULL` y `recurrencia <> 'unica'`.
- **Instancias**: filas con `serie_id = maestro.id`, una por cada ocurrencia generada.
Esto permite completar una instancia sin afectar las demás, y el cron de emails de recordatorios próximos sigue funcionando sin cambios mayores.
### Funcionalidad
- Al crear un recordatorio periódico se generan instancias para un horizonte de 24 meses.
- Al **editar** una instancia se actualizan el maestro y **todas las ocurrencias futuras no completadas**.
- Al **eliminar** una instancia periódica se **cancela toda la serie**: se desactiva el maestro y se borran las instancias futuras no completadas.
- Un cron diario a las 6:00 AM extiende automáticamente las series activas para mantener el horizonte futuro.
### Frecuencias soportadas
- `mensual`
- `bimestral`
- `trimestral`
- `anual`
### Archivos modificados
| Archivo | Cambio |
|---|---|
| `apps/api/src/migrations/tenant/056_recordatorios_periodicos.sql` | Nuevas columnas `recurrencia`, `serie_id`, `activo`, `fecha_inicio`, `fecha_fin` e índices |
| `apps/api/src/services/recordatorios.service.ts` | Lógica de creación, edición, eliminación y regeneración de series periódicas |
| `apps/api/src/services/notifications.service.ts` | Excluir maestros del envío de recordatorios próximos |
| `apps/api/src/controllers/calendario.controller.ts` | Schemas aceptan `recurrencia` y `fechaFin` |
| `apps/api/src/jobs/recordatorios-periodicos.job.ts` | Nuevo cron de extensión de series |
| `apps/api/src/index.ts` | Registro del nuevo cron |
| `apps/web/app/(dashboard)/calendario/page.tsx` | Selector de recurrencia, fecha fin, indicador de serie y confirmación al cancelar |
### Deploy
```bash
cd /root/HoruxDespachosNuevo
pnpm --filter api build
pnpm --filter web build
pnpm --filter @horux/api db:migrate-tenants
pm2 reload horux-api
pm2 reload horux-web
```
**Estado:** ✅ Exitoso
---
## Deploy histórico
### Preparación