Compare commits
2 Commits
9d54f832b4
...
fa4dd11b5e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fa4dd11b5e | ||
|
|
0ead18e28f |
96
docs/05-frontend/pages/PAGE-ANALYTICS.md
Normal file
96
docs/05-frontend/pages/PAGE-ANALYTICS.md
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
# Analytics Dashboard Page Specification
|
||||||
|
|
||||||
|
**Modulo:** analytics
|
||||||
|
**Ultima actualizacion:** 2026-02-03
|
||||||
|
**Total Paginas:** 1
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## AnalyticsDashboardPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/analytics`
|
||||||
|
**Archivo:** `src/pages/admin/AnalyticsDashboardPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Dashboard de analiticas con metricas clave del negocio, tendencias temporales y uso por feature. Permite seleccionar diferentes periodos de tiempo.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Period Selector - Botones de seleccion de periodo (7d, 30d, 90d, 1y)
|
||||||
|
- MetricCard - Tarjetas de KPI con tendencia
|
||||||
|
- TrendChart - Graficos de linea para tendencias
|
||||||
|
- Top Features Section - Barras de uso por feature
|
||||||
|
- Activity by Hour Chart - Grafico de barras por hora
|
||||||
|
- Icons: Users, DollarSign, Activity, TrendingUp, BarChart3, Clock (lucide-react)
|
||||||
|
- clsx - Utilidad para clases condicionales
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useAnalyticsSummary()` - Resumen de metricas principales
|
||||||
|
- `useAnalyticsTrends(period)` - Tendencias por periodo
|
||||||
|
- `useUsageMetrics(period)` - Metricas de uso
|
||||||
|
- `getAvailablePeriods()` - Lista de periodos disponibles
|
||||||
|
- `getPeriodLabel(period)` - Label legible del periodo
|
||||||
|
- `formatCurrency(value)` - Formato moneda
|
||||||
|
- `formatNumber(value)` - Formato numero
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Seleccionar periodo de tiempo (7d, 30d, 90d, 1y)
|
||||||
|
2. Ver KPIs principales:
|
||||||
|
- Active Users (con cambio % y total)
|
||||||
|
- MRR (con cambio % y ARR)
|
||||||
|
- Total Actions (con cambio % y promedio por usuario)
|
||||||
|
- Engagement Rate (con cambio % y sesiones)
|
||||||
|
3. Ver graficos de tendencia:
|
||||||
|
- User Growth
|
||||||
|
- Revenue Trend
|
||||||
|
- Daily Actions
|
||||||
|
4. Ver top 5 features mas usadas con porcentaje
|
||||||
|
5. Ver actividad por hora del dia (24 barras)
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Skeletons y spinners por seccion
|
||||||
|
- Success: Dashboard completo con datos
|
||||||
|
- Empty Top Features: "No feature data available"
|
||||||
|
- Empty Hourly: "No hourly data available"
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click periodo | Recarga datos con nuevo periodo |
|
||||||
|
| Hover barra hora | Muestra tooltip con valor |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `analytics:read` - Ver dashboard de analiticas
|
||||||
|
|
||||||
|
### Tipos de Datos
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
type AnalyticsPeriod = '7d' | '30d' | '90d' | '1y';
|
||||||
|
|
||||||
|
interface AnalyticsSummary {
|
||||||
|
users: { active: number; total: number; change?: number };
|
||||||
|
revenue: { mrr: number; arr: number; change?: number };
|
||||||
|
usage: { actions: number; avgPerUser: number; change?: number };
|
||||||
|
engagement: { rate: number; sessions: number; change?: number };
|
||||||
|
}
|
||||||
|
|
||||||
|
interface TrendData {
|
||||||
|
users: { date: string; value: number }[];
|
||||||
|
revenue: { date: string; value: number }[];
|
||||||
|
actions: { date: string; value: number }[];
|
||||||
|
}
|
||||||
|
|
||||||
|
interface UsageMetrics {
|
||||||
|
topFeatures: { feature: string; count: number; percentage: number }[];
|
||||||
|
byHour: { hour: number; actions: number }[];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Notas
|
||||||
|
- Los valores de cambio (change) se muestran en verde (positivo) o rojo (negativo)
|
||||||
|
- Los graficos de tendencia usan colores consistentes por metrica
|
||||||
|
- El grafico de horas muestra 24 barras, con labels cada 4 horas
|
||||||
|
- La altura de las barras es proporcional al maximo del periodo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Documentacion generada - Template SaaS - 2026-02-03*
|
||||||
92
docs/05-frontend/pages/PAGE-AUDIT.md
Normal file
92
docs/05-frontend/pages/PAGE-AUDIT.md
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
# Audit Logs Page Specification
|
||||||
|
|
||||||
|
**Modulo:** audit
|
||||||
|
**Ultima actualizacion:** 2026-02-03
|
||||||
|
**Total Paginas:** 1
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## AuditLogsPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/audit`
|
||||||
|
**Archivo:** `src/pages/dashboard/AuditLogsPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Pagina de logs de auditoria. Muestra registro de todas las acciones realizadas en el sistema con filtros avanzados y timeline.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- AuditFilters - Panel de filtros multiples
|
||||||
|
- AuditLogRow - Fila de log con detalles expandibles
|
||||||
|
- AuditStatsCard - Tarjetas de estadisticas
|
||||||
|
- ActivityTimeline - Timeline visual de actividad
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useAuditLogs(filters)` - Lista logs con filtros
|
||||||
|
- `useActivityLogs()` - Timeline de actividad
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Filtrar por usuario
|
||||||
|
2. Filtrar por tipo de accion (create, update, delete, login, logout)
|
||||||
|
3. Filtrar por entidad afectada
|
||||||
|
4. Filtrar por rango de fechas
|
||||||
|
5. Ver detalles de cada accion
|
||||||
|
6. Ver cambios realizados (before/after)
|
||||||
|
7. Ver timeline de actividad reciente
|
||||||
|
|
||||||
|
### Filtros Disponibles
|
||||||
|
|
||||||
|
| Filtro | Tipo | Opciones |
|
||||||
|
|--------|------|----------|
|
||||||
|
| Usuario | Select | Lista de usuarios |
|
||||||
|
| Accion | Select | create, update, delete, login, logout |
|
||||||
|
| Entidad | Select | user, tenant, invoice, etc |
|
||||||
|
| Fecha desde | Date | Datepicker |
|
||||||
|
| Fecha hasta | Date | Datepicker |
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Success: Tabla de logs con paginacion
|
||||||
|
- Empty: Mensaje "No audit logs found"
|
||||||
|
- Error: Mensaje de error
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Seleccionar filtro | Filtra resultados |
|
||||||
|
| Click en fila | Expande detalles |
|
||||||
|
| Limpiar filtros | Reset a todos |
|
||||||
|
| Previous/Next | Cambia pagina |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `audit:read` - Ver logs de auditoria
|
||||||
|
|
||||||
|
### Estructura de Log
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
interface AuditLog {
|
||||||
|
id: string;
|
||||||
|
user_id: string;
|
||||||
|
user_email: string;
|
||||||
|
action: 'create' | 'update' | 'delete' | 'login' | 'logout';
|
||||||
|
entity_type: string;
|
||||||
|
entity_id: string;
|
||||||
|
changes?: {
|
||||||
|
before: Record<string, any>;
|
||||||
|
after: Record<string, any>;
|
||||||
|
};
|
||||||
|
metadata?: Record<string, any>;
|
||||||
|
ip_address?: string;
|
||||||
|
user_agent?: string;
|
||||||
|
created_at: string;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Notas
|
||||||
|
- Los logs son inmutables, no se pueden editar ni eliminar
|
||||||
|
- La retencion de logs depende del plan de suscripcion
|
||||||
|
- Los campos sensibles (passwords) nunca se registran
|
||||||
|
- El IP y user agent se registran para seguridad
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Documentacion generada - Template SaaS - 2026-02-03*
|
||||||
230
docs/05-frontend/pages/PAGE-GOALS.md
Normal file
230
docs/05-frontend/pages/PAGE-GOALS.md
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
# Goals Pages Specification
|
||||||
|
|
||||||
|
**Modulo:** goals
|
||||||
|
**Ultima actualizacion:** 2026-02-03
|
||||||
|
**Total Paginas:** 5
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. GoalsPage (Dashboard)
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/goals`
|
||||||
|
**Archivo:** `src/pages/dashboard/goals/GoalsPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Dashboard principal del modulo de metas. Muestra un resumen de las metas del usuario y de la organizacion, con metricas clave y accesos rapidos.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Summary Cards (custom) - Tarjetas de resumen con iconos
|
||||||
|
- Goals List - Listado de metas activas
|
||||||
|
- Top Performers - Ranking de usuarios
|
||||||
|
- Quick Actions - Enlaces rapidos a otras paginas
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useGoalDefinitions()` - Obtiene definiciones de metas activas
|
||||||
|
- `useMyGoalsSummary()` - Obtiene resumen de metas del usuario
|
||||||
|
- `useGoalCompletionReport()` - Obtiene reporte de completitud general
|
||||||
|
- `useGoalUserReport()` - Obtiene ranking de usuarios
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Mostrar metricas personales (activas, logradas, en riesgo, progreso promedio)
|
||||||
|
2. Mostrar overview de la organizacion
|
||||||
|
3. Listar metas activas con estado y asignados
|
||||||
|
4. Mostrar top 5 performers
|
||||||
|
5. Accesos rapidos a otras secciones
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Success: Muestra dashboard completo
|
||||||
|
- Empty: Mensajes individuales por seccion
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click en meta | Navega a detalle |
|
||||||
|
| Click en Quick Action | Navega a seccion |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- Usuario autenticado
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. DefinitionsPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/goals/definitions`
|
||||||
|
**Archivo:** `src/pages/dashboard/goals/DefinitionsPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Listado y gestion de definiciones de metas. Permite crear, editar, duplicar y eliminar definiciones de metas.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Filters Panel - Filtros por status, periodo, categoria
|
||||||
|
- Definitions Table - Tabla con paginacion
|
||||||
|
- Status Badge - Badges de estado con color
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useGoalDefinitions(filters)` - Lista definiciones con filtros
|
||||||
|
- `useDeleteGoalDefinition()` - Elimina definicion
|
||||||
|
- `useUpdateGoalStatus()` - Cambia estado de definicion
|
||||||
|
- `useDuplicateGoalDefinition()` - Duplica definicion
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Filtrar por status (draft, active, paused, completed, cancelled)
|
||||||
|
2. Filtrar por periodo (daily, weekly, monthly, quarterly, yearly)
|
||||||
|
3. Filtrar por categoria
|
||||||
|
4. Buscar por nombre
|
||||||
|
5. Cambiar estado inline via select
|
||||||
|
6. Ver, editar, duplicar, eliminar desde tabla
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Error: Mensaje de error
|
||||||
|
- Empty: Icono + mensaje + CTA para crear
|
||||||
|
- Success: Tabla con definiciones
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click "+ New Definition" | Navega a formulario |
|
||||||
|
| Cambiar status select | Actualiza estado |
|
||||||
|
| Click "View" | Navega a detalle |
|
||||||
|
| Click "Edit" | Navega a edicion |
|
||||||
|
| Click "Duplicate" | Crea copia |
|
||||||
|
| Click "Delete" | Confirm + elimina |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `goals:read` - Ver listado
|
||||||
|
- `goals:write` - Crear/editar/duplicar
|
||||||
|
- `goals:delete` - Eliminar
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. MyGoalsPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/goals/my-goals`
|
||||||
|
**Archivo:** `src/pages/dashboard/goals/MyGoalsPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Vista personal de metas asignadas al usuario actual. Permite ver progreso y actualizar avance manualmente.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Summary Cards - Resumen de estadisticas personales
|
||||||
|
- Goal Cards - Tarjetas de meta con barra de progreso
|
||||||
|
- Progress Form - Formulario inline para actualizar progreso
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useMyGoals()` - Lista metas asignadas al usuario
|
||||||
|
- `useMyGoalsSummary()` - Resumen de estadisticas
|
||||||
|
- `useUpdateMyGoalProgress()` - Actualiza progreso de meta
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Ver resumen personal (total, activas, logradas, en riesgo, progreso promedio)
|
||||||
|
2. Ver tarjetas de cada meta con progreso visual
|
||||||
|
3. Ver dias restantes por meta
|
||||||
|
4. Actualizar progreso manualmente con notas
|
||||||
|
5. Navegar a detalle de asignacion
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Error: Mensaje de error
|
||||||
|
- Empty: Mensaje "No goals assigned" + link
|
||||||
|
- Success: Lista de tarjetas de metas
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click "Update Progress" | Abre formulario inline |
|
||||||
|
| Submit progreso | Guarda nuevo valor |
|
||||||
|
| Click "Cancel" | Cierra formulario |
|
||||||
|
| Click "View Details" | Navega a detalle |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- Usuario autenticado
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. ReportsPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/goals/reports`
|
||||||
|
**Archivo:** `src/pages/dashboard/goals/ReportsPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Reportes detallados de metas con estadisticas de completitud, rendimiento por usuario y exportacion CSV.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Date Range Filter - Filtro de fechas
|
||||||
|
- Summary Cards - KPIs principales
|
||||||
|
- Status Distribution Bars - Barras de progreso por estado
|
||||||
|
- User Performance Table - Tabla de rendimiento
|
||||||
|
- Active Goals List - Lista de metas activas
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useGoalCompletionReport(startDate, endDate)` - Reporte de completitud
|
||||||
|
- `useGoalUserReport()` - Reporte por usuario
|
||||||
|
- `useGoalDefinitions({status: 'active'})` - Metas activas
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Filtrar por rango de fechas
|
||||||
|
2. Ver KPIs: total, logradas, tasa completitud, progreso promedio
|
||||||
|
3. Ver distribucion por estado (achieved, active, failed)
|
||||||
|
4. Ver usuarios con logros y top performer
|
||||||
|
5. Ver tabla de rendimiento por usuario con ranking
|
||||||
|
6. Exportar a CSV (summary y user report)
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Success: Dashboard de reportes
|
||||||
|
- Empty: Mensajes por seccion
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Seleccionar fecha inicio | Filtra datos |
|
||||||
|
| Seleccionar fecha fin | Filtra datos |
|
||||||
|
| Click "Clear Filters" | Limpia filtros |
|
||||||
|
| Click "Export Summary" | Descarga CSV summary |
|
||||||
|
| Click "Export User Report" | Descarga CSV usuarios |
|
||||||
|
| Click "View" en meta | Navega a detalle |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `goals:read` - Ver reportes
|
||||||
|
- `reports:export` - Exportar CSV
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. AssignmentsPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/goals/assignments`
|
||||||
|
**Archivo:** `src/pages/dashboard/goals/AssignmentsPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Gestion de asignaciones de metas a usuarios. Permite ver, filtrar y gestionar asignaciones.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Filters Panel - Filtros multiples
|
||||||
|
- Assignments Table - Tabla con paginacion
|
||||||
|
- Status Badge - Badges de estado
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useGoalAssignments(filters)` - Lista asignaciones
|
||||||
|
- `useDeleteAssignment()` - Elimina asignacion
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Filtrar por definicion, usuario, estado
|
||||||
|
2. Ver tabla con progreso visual
|
||||||
|
3. Navegar a detalle de asignacion
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Error: Mensaje de error
|
||||||
|
- Empty: Mensaje + CTA
|
||||||
|
- Success: Tabla de asignaciones
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `goals:read` - Ver listado
|
||||||
|
- `goals:assign` - Crear asignaciones
|
||||||
|
- `goals:delete` - Eliminar asignaciones
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Documentacion generada - Template SaaS - 2026-02-03*
|
||||||
233
docs/05-frontend/pages/PAGE-MLM.md
Normal file
233
docs/05-frontend/pages/PAGE-MLM.md
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
# MLM Pages Specification
|
||||||
|
|
||||||
|
**Modulo:** mlm
|
||||||
|
**Ultima actualizacion:** 2026-02-03
|
||||||
|
**Total Paginas:** 5
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. MLMPage (Dashboard)
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/mlm`
|
||||||
|
**Archivo:** `src/pages/dashboard/mlm/MLMPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Dashboard principal del modulo MLM (Marketing Multinivel). Muestra resumen de red, rango actual, progreso hacia siguiente rango y estructuras activas.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Summary Cards - Tarjetas con metricas clave
|
||||||
|
- Rank Display - Muestra rango actual con badge visual
|
||||||
|
- Next Rank Progress - Barras de progreso hacia siguiente rango
|
||||||
|
- Volume Summary - Resumen de volumenes
|
||||||
|
- Active Structures Grid - Grid de estructuras activas
|
||||||
|
- Quick Actions - Enlaces rapidos
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useMyDashboard()` - Obtiene dashboard personal MLM
|
||||||
|
- `useStructures({isActive: true})` - Lista estructuras activas
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Ver metricas principales (downline total, referidos directos, volumen grupo, ganancias)
|
||||||
|
2. Ver rango actual con nivel y badge
|
||||||
|
3. Ver progreso hacia siguiente rango (PV, GV, referidos requeridos)
|
||||||
|
4. Ver resumen de volumenes (personal, grupo, downline activos)
|
||||||
|
5. Ver estructuras MLM activas
|
||||||
|
6. Accesos rapidos a otras secciones
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Success: Dashboard completo
|
||||||
|
- No Rank: Mensaje "No rank assigned yet"
|
||||||
|
- Top Rank: Mensaje "You've reached the highest rank!"
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click en estructura | Navega a detalle |
|
||||||
|
| Click Quick Action | Navega a seccion |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- Usuario autenticado
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. StructuresPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/mlm/structures`
|
||||||
|
**Archivo:** `src/pages/dashboard/mlm/StructuresPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Listado y gestion de estructuras MLM. Permite crear, ver y eliminar estructuras con diferentes tipos (unilevel, binary, matrix, hybrid).
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Filters Panel - Filtros por tipo y estado
|
||||||
|
- Structure Cards Grid - Grid de tarjetas de estructura
|
||||||
|
- Type Badge - Badge con color segun tipo
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useStructures(filters)` - Lista estructuras con filtros
|
||||||
|
- `useDeleteStructure()` - Elimina estructura
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Filtrar por tipo (unilevel, binary, matrix, hybrid)
|
||||||
|
2. Filtrar por estado (activo/inactivo)
|
||||||
|
3. Buscar por nombre
|
||||||
|
4. Ver tarjetas con configuracion (max depth, max width, commission levels)
|
||||||
|
5. Ver estado activo/inactivo
|
||||||
|
6. Eliminar estructura con confirmacion
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Error: Mensaje de error
|
||||||
|
- Empty: Icono + mensaje + CTA
|
||||||
|
- Success: Grid de tarjetas
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click "+ Add Structure" | Navega a formulario |
|
||||||
|
| Cambiar filtro tipo | Filtra estructuras |
|
||||||
|
| Cambiar filtro estado | Filtra estructuras |
|
||||||
|
| Buscar | Filtra por nombre |
|
||||||
|
| Click "View Details" | Navega a detalle |
|
||||||
|
| Click "Delete" | Confirm + elimina |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `mlm:read` - Ver listado
|
||||||
|
- `mlm:write` - Crear/editar
|
||||||
|
- `mlm:delete` - Eliminar
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. MyNetworkPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/mlm/my-network`
|
||||||
|
**Archivo:** `src/pages/dashboard/mlm/MyNetworkPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Vista de la red personal del usuario. Muestra arbol jerarquico de downline, estadisticas y permite generar enlaces de invitacion.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Invite Link Banner - Banner con link de invitacion
|
||||||
|
- Summary Cards - Metricas de red
|
||||||
|
- My Rank Card - Tarjeta de rango actual
|
||||||
|
- Volume Summary Card - Resumen de volumenes
|
||||||
|
- Network Tree - Arbol de red con nodos expandibles
|
||||||
|
- Quick Actions - Enlaces rapidos
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useMyDashboard()` - Datos del dashboard
|
||||||
|
- `useMyNetwork(maxDepth)` - Arbol de red con profundidad configurable
|
||||||
|
- `useMyRank()` - Informacion de rango
|
||||||
|
- `useGenerateInviteLink()` - Genera link de invitacion
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Generar link de invitacion unico
|
||||||
|
2. Copiar link al clipboard
|
||||||
|
3. Ver metricas (downline total, referidos directos, activos, volumen grupo)
|
||||||
|
4. Ver rango actual con color y nivel
|
||||||
|
5. Ver volumenes (personal, grupo, ganancias)
|
||||||
|
6. Ver arbol de red con profundidad configurable (1-10 niveles)
|
||||||
|
7. Ver status de cada nodo (pending, active, inactive, suspended)
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Success: Dashboard con arbol
|
||||||
|
- Empty Network: Mensaje "You're not part of any MLM structure"
|
||||||
|
- Invite Generated: Muestra banner con link
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click "Generate Invite Link" | Genera y muestra link |
|
||||||
|
| Click "Copy" | Copia link al clipboard |
|
||||||
|
| Cambiar selector depth | Recarga arbol con nueva profundidad |
|
||||||
|
| Click Quick Action | Navega a seccion |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- Usuario autenticado
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. RanksPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/mlm/ranks`
|
||||||
|
**Archivo:** `src/pages/dashboard/mlm/RanksPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Gestion de rangos MLM. Permite ver, crear, editar y eliminar rangos con sus requisitos y bonificaciones.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Filters Panel - Filtro por estructura y estado
|
||||||
|
- Ranks Table - Tabla con nivel, badge, requisitos
|
||||||
|
- Level Badge - Badge circular con color y nivel
|
||||||
|
- Requirements Display - Muestra PV, GV, referidos
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useRanks(filters)` - Lista rangos con filtros
|
||||||
|
- `useStructures({isActive: true})` - Estructuras para filtro
|
||||||
|
- `useDeleteRank()` - Elimina rango
|
||||||
|
- `useEvaluateRanks(structureId)` - Evalua rangos de toda la estructura
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Filtrar por estructura
|
||||||
|
2. Filtrar por estado (activo/inactivo)
|
||||||
|
3. Ver tabla con nivel, nombre, requisitos, bonus rate, estado
|
||||||
|
4. Evaluar rangos de todos los miembros de una estructura
|
||||||
|
5. Editar y eliminar rangos
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Error: Mensaje de error
|
||||||
|
- Empty: Icono + mensaje + CTA
|
||||||
|
- Success: Tabla de rangos
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click "+ Add Rank" | Navega a formulario |
|
||||||
|
| Seleccionar estructura | Filtra rangos |
|
||||||
|
| Click "Evaluate All Ranks" | Evalua y actualiza rangos |
|
||||||
|
| Click "Edit" | Navega a edicion |
|
||||||
|
| Click "Delete" | Confirm + elimina |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `mlm:read` - Ver listado
|
||||||
|
- `mlm:write` - Crear/editar/evaluar
|
||||||
|
- `mlm:delete` - Eliminar
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. MyEarningsPage (MLM)
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/mlm/my-earnings`
|
||||||
|
**Archivo:** `src/pages/dashboard/mlm/MyEarningsPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Vista de ganancias MLM del usuario. Muestra comisiones por nivel, bonos y historial.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Earnings Summary Cards - Tarjetas de resumen
|
||||||
|
- Earnings by Level Chart - Grafico por nivel
|
||||||
|
- Recent Commissions Table - Tabla de comisiones recientes
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useMyMLMEarnings()` - Ganancias MLM del usuario
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Ver total de ganancias
|
||||||
|
2. Ver ganancias por nivel de la red
|
||||||
|
3. Ver bonificaciones
|
||||||
|
4. Ver historial de comisiones
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Empty: Mensaje sin datos
|
||||||
|
- Success: Dashboard de ganancias
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- Usuario autenticado
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Documentacion generada - Template SaaS - 2026-02-03*
|
||||||
149
docs/05-frontend/pages/PAGE-NOTIFICATIONS-ADMIN.md
Normal file
149
docs/05-frontend/pages/PAGE-NOTIFICATIONS-ADMIN.md
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
# Notifications Admin Pages Specification
|
||||||
|
|
||||||
|
**Modulo:** notifications
|
||||||
|
**Ultima actualizacion:** 2026-02-03
|
||||||
|
**Total Paginas:** 2
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. NotificationsPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/notifications`
|
||||||
|
**Archivo:** `src/pages/dashboard/notifications/NotificationsPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Centro de notificaciones del usuario. Muestra notificaciones recibidas con tabs para filtrar y configurar preferencias.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Tab Navigation - Tabs All/Unread/Settings
|
||||||
|
- Notification Item - Card de notificacion con acciones
|
||||||
|
- Preferences Section - Toggles de preferencias
|
||||||
|
- Pagination - Navegacion de paginas
|
||||||
|
- Icons: Bell, CheckCheck, ExternalLink, Settings, Mail, Smartphone, MessageSquare, FileText (lucide-react)
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useNotifications({page, limit, unreadOnly})` - Lista notificaciones
|
||||||
|
- `useUnreadCount()` - Contador de no leidas
|
||||||
|
- `useMarkAsRead()` - Marca como leida
|
||||||
|
- `useMarkAllAsRead()` - Marca todas como leidas
|
||||||
|
- `useNotificationPreferences()` - Obtiene preferencias
|
||||||
|
- `useUpdatePreferences()` - Actualiza preferencias
|
||||||
|
- `getNotificationTypeColor()` - Color segun tipo
|
||||||
|
- `formatNotificationTime()` - Formato de tiempo
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Ver notificaciones con titulo, cuerpo, tiempo
|
||||||
|
2. Filtrar por todas o solo no leidas
|
||||||
|
3. Marcar individual como leida
|
||||||
|
4. Marcar todas como leidas
|
||||||
|
5. Ver action link si existe
|
||||||
|
6. Configurar preferencias por canal (email, push, in-app, SMS)
|
||||||
|
7. Navegar a gestion de templates
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Success: Lista de notificaciones
|
||||||
|
- Empty All: "No notifications yet"
|
||||||
|
- Empty Unread: "No unread notifications"
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click tab "All" | Muestra todas |
|
||||||
|
| Click tab "Unread" | Filtra no leidas |
|
||||||
|
| Click tab "Settings" | Muestra preferencias |
|
||||||
|
| Click "Mark as read" | Marca como leida |
|
||||||
|
| Click "Mark all as read" | Confirm + marca todas |
|
||||||
|
| Click action link | Navega a URL |
|
||||||
|
| Toggle preferencia | Actualiza setting |
|
||||||
|
| Click "Manage Templates" | Navega a templates |
|
||||||
|
| Click Previous/Next | Cambia pagina |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- Usuario autenticado
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. TemplatesPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/notifications/templates`
|
||||||
|
**Archivo:** `src/pages/dashboard/notifications/TemplatesPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Gestion de templates de notificacion. Permite crear, editar, previsualizar y gestionar templates para diferentes canales.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Search Input - Busqueda de templates
|
||||||
|
- Channel Filter - Filtro por canal (email, push, in_app, sms)
|
||||||
|
- Category Filter - Filtro por categoria
|
||||||
|
- Templates Grid - Grid de cards de template
|
||||||
|
- TemplateCard - Card con preview y acciones
|
||||||
|
- TemplateForm - Formulario de creacion/edicion
|
||||||
|
- TemplatePreview - Modal de preview
|
||||||
|
- Delete Confirmation Modal - Modal de confirmacion
|
||||||
|
- Icons: Plus, ArrowLeft, FileText, AlertTriangle, Search, Filter (lucide-react)
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useNotificationTemplates()` - Lista templates
|
||||||
|
- `useCreateTemplate()` - Crea template
|
||||||
|
- `useUpdateTemplate()` - Actualiza template
|
||||||
|
- `useDeleteTemplate()` - Elimina template
|
||||||
|
- `useToggleTemplateActive()` - Activa/desactiva template
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Buscar templates por nombre, codigo o descripcion
|
||||||
|
2. Filtrar por canal (email, push, in_app, sms)
|
||||||
|
3. Filtrar por categoria
|
||||||
|
4. Ver grid de templates con preview rapido
|
||||||
|
5. Toggle active/inactive desde card
|
||||||
|
6. Crear nuevo template con formulario completo
|
||||||
|
7. Editar template existente
|
||||||
|
8. Previsualizar template
|
||||||
|
9. Eliminar template con confirmacion
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- View Modes: list, create, edit
|
||||||
|
- Loading: Spinner en grid
|
||||||
|
- Success: Grid de templates
|
||||||
|
- Empty: "No templates yet" + CTA
|
||||||
|
- Filtered Empty: "No matching templates"
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click "Create Template" | Cambia a vista create |
|
||||||
|
| Buscar | Filtra templates |
|
||||||
|
| Seleccionar canal | Filtra por canal |
|
||||||
|
| Seleccionar categoria | Filtra por categoria |
|
||||||
|
| Click edit en card | Cambia a vista edit |
|
||||||
|
| Click preview en card | Abre modal preview |
|
||||||
|
| Click delete en card | Abre modal confirm |
|
||||||
|
| Toggle active | Activa/desactiva |
|
||||||
|
| Submit form | Crea o actualiza |
|
||||||
|
| Click "Cancel" | Vuelve a lista |
|
||||||
|
| Confirm delete | Elimina template |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `notifications:read` - Ver templates
|
||||||
|
- `notifications:write` - Crear/editar/toggle
|
||||||
|
- `notifications:delete` - Eliminar templates
|
||||||
|
|
||||||
|
### Notas
|
||||||
|
- Los templates usan variables con formato `{{variable}}`
|
||||||
|
- Cada canal tiene campos especificos (email tiene subject, html_body)
|
||||||
|
- La preview muestra como se veria la notificacion
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Canales de Notificacion
|
||||||
|
|
||||||
|
| Canal | Campos | Descripcion |
|
||||||
|
|-------|--------|-------------|
|
||||||
|
| email | subject, html_body, text_body | Correo electronico |
|
||||||
|
| push | title, body | Notificacion push del navegador |
|
||||||
|
| in_app | title, body, action_url | Notificacion dentro de la app |
|
||||||
|
| sms | body | Mensaje SMS |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Documentacion generada - Template SaaS - 2026-02-03*
|
||||||
163
docs/05-frontend/pages/PAGE-PORTFOLIO.md
Normal file
163
docs/05-frontend/pages/PAGE-PORTFOLIO.md
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
# Portfolio Pages Specification
|
||||||
|
|
||||||
|
**Modulo:** portfolio
|
||||||
|
**Ultima actualizacion:** 2026-02-03
|
||||||
|
**Total Paginas:** 3
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. PortfolioPage (Dashboard)
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/portfolio`
|
||||||
|
**Archivo:** `src/pages/dashboard/portfolio/PortfolioPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Dashboard principal del catalogo de productos. Muestra estadisticas, categorias y productos recientes con busqueda global.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Search Input - Busqueda global con icono
|
||||||
|
- Filter Button - Boton de filtros (placeholder)
|
||||||
|
- Stats Cards - 4 tarjetas con metricas
|
||||||
|
- Categories Panel - Panel con lista de categorias
|
||||||
|
- Recent Products Panel - Panel con productos recientes
|
||||||
|
- Icons: Package, FolderTree, Plus, Search, Filter (lucide-react)
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useCategories()` - Lista categorias
|
||||||
|
- `useProducts({limit: 10})` - Lista productos recientes
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Buscar productos o categorias (UI, sin filtrado implementado)
|
||||||
|
2. Ver estadisticas (total productos, categorias, activos, borradores)
|
||||||
|
3. Ver lista de categorias (max 5) con link a todas
|
||||||
|
4. Ver productos recientes (max 5) con status badge
|
||||||
|
5. Crear nueva categoria o producto via botones header
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner en cada panel
|
||||||
|
- Success: Dashboard completo
|
||||||
|
- Empty Categories: Mensaje "No categories yet"
|
||||||
|
- Empty Products: Mensaje "No products yet"
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click "New Category" | Navega a /portfolio/categories/new |
|
||||||
|
| Click "New Product" | Navega a /portfolio/products/new |
|
||||||
|
| Click categoria | Navega a detalle |
|
||||||
|
| Click producto | Navega a detalle |
|
||||||
|
| Click "View all" | Navega a listado completo |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `portfolio:read` - Ver catalogo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. ProductsPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/portfolio/products`
|
||||||
|
**Archivo:** `src/pages/dashboard/portfolio/ProductsPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Listado de productos con filtros, busqueda y acciones CRUD. Tabla paginada con acciones inline.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Search Input - Busqueda por nombre
|
||||||
|
- Status Filter Select - Filtro por estado
|
||||||
|
- Products Table - Tabla con columnas y paginacion
|
||||||
|
- Status Badge - Badge con color segun estado
|
||||||
|
- Action Icons: Eye, Edit, Copy, Trash2 (lucide-react)
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useProducts({page, limit, search, status})` - Lista productos con filtros
|
||||||
|
- `useDeleteProduct()` - Elimina producto
|
||||||
|
- `useDuplicateProduct()` - Duplica producto
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Buscar por nombre de producto
|
||||||
|
2. Filtrar por estado (draft, active, inactive, discontinued, out_of_stock)
|
||||||
|
3. Ver tabla con nombre, tipo, SKU, categoria, precio, estado
|
||||||
|
4. Paginacion con 20 items por pagina
|
||||||
|
5. Ver detalle, editar, duplicar, eliminar desde acciones
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner en tabla
|
||||||
|
- Success: Tabla con productos
|
||||||
|
- Empty: Mensaje "No products found" + CTA
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click "New Product" | Navega a formulario |
|
||||||
|
| Buscar | Filtra tabla |
|
||||||
|
| Cambiar filtro estado | Filtra tabla |
|
||||||
|
| Click View icon | Navega a detalle |
|
||||||
|
| Click Edit icon | Navega a edicion |
|
||||||
|
| Click Copy icon | Duplica producto |
|
||||||
|
| Click Delete icon | Confirm + elimina |
|
||||||
|
| Click Previous/Next | Cambia pagina |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `portfolio:read` - Ver listado
|
||||||
|
- `portfolio:write` - Crear/editar/duplicar
|
||||||
|
- `portfolio:delete` - Eliminar
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. CategoriesPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/portfolio/categories`
|
||||||
|
**Archivo:** `src/pages/dashboard/portfolio/CategoriesPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Gestion de categorias en estructura de arbol jerarquico. Permite expandir/colapsar y buscar categorias.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Search Input - Busqueda de categorias
|
||||||
|
- Category Tree - Arbol jerarquico recursivo
|
||||||
|
- CategoryTreeNode - Nodo individual con expand/collapse
|
||||||
|
- Expand/Collapse All Button - Toggle global
|
||||||
|
- Icons: FolderTree, Plus, Search, Edit, Trash2, ChevronRight, ChevronDown (lucide-react)
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useCategoryTree()` - Arbol de categorias
|
||||||
|
- `useDeleteCategory()` - Elimina categoria
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Buscar categorias (filtra arbol recursivamente)
|
||||||
|
2. Expandir/colapsar nodos individuales
|
||||||
|
3. Expandir/colapsar todos
|
||||||
|
4. Ver count de productos por categoria
|
||||||
|
5. Ver estado activo/inactivo
|
||||||
|
6. Editar y eliminar desde cada nodo
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Success: Arbol de categorias
|
||||||
|
- Empty: Icono + mensaje
|
||||||
|
- Filtered Empty: Mensaje "No categories match your search"
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click "New Category" | Navega a formulario |
|
||||||
|
| Click chevron | Expande/colapsa nodo |
|
||||||
|
| Click "Expand/Collapse all" | Toggle global |
|
||||||
|
| Buscar | Filtra arbol |
|
||||||
|
| Click nombre categoria | Navega a detalle |
|
||||||
|
| Click Edit icon | Navega a edicion |
|
||||||
|
| Click Delete icon | Confirm + elimina (productos quedan sin categoria) |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `portfolio:read` - Ver listado
|
||||||
|
- `portfolio:write` - Crear/editar
|
||||||
|
- `portfolio:delete` - Eliminar
|
||||||
|
|
||||||
|
### Notas
|
||||||
|
- La eliminacion de categoria NO elimina productos, los deja sin categoria
|
||||||
|
- El arbol soporta multiples niveles de anidacion
|
||||||
|
- La busqueda muestra padres de resultados para mantener contexto
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Documentacion generada - Template SaaS - 2026-02-03*
|
||||||
138
docs/05-frontend/pages/PAGE-RBAC.md
Normal file
138
docs/05-frontend/pages/PAGE-RBAC.md
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
# RBAC Pages Specification
|
||||||
|
|
||||||
|
**Modulo:** rbac
|
||||||
|
**Ultima actualizacion:** 2026-02-03
|
||||||
|
**Total Paginas:** 2
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. RolesPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/rbac/roles`
|
||||||
|
**Archivo:** `src/pages/dashboard/rbac/RolesPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Gestion de roles de usuario. Vista master-detail con lista de roles a la izquierda y detalle de permisos a la derecha.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Search Input - Busqueda de roles
|
||||||
|
- Roles List - Lista seleccionable de roles
|
||||||
|
- Role Card - Tarjeta de rol con icono y contador
|
||||||
|
- Role Detail Panel - Panel derecho con info y permisos
|
||||||
|
- Permission Tags - Tags agrupados por categoria
|
||||||
|
- Lock Icon - Indica roles de sistema
|
||||||
|
- Icons: Shield, Plus, Search, Edit, Trash2, Lock (lucide-react)
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useRoles()` - Lista todos los roles
|
||||||
|
- `usePermissions()` - Lista todos los permisos (para agrupar)
|
||||||
|
- `useDeleteRole()` - Elimina rol
|
||||||
|
- `getPermissionCategoryLabel()` - Labels de categorias
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Buscar roles por nombre
|
||||||
|
2. Ver lista de roles con contador de permisos
|
||||||
|
3. Identificar roles de sistema (bloqueados)
|
||||||
|
4. Seleccionar rol para ver detalle
|
||||||
|
5. Ver info del rol (tipo, default, slug)
|
||||||
|
6. Ver permisos agrupados por categoria
|
||||||
|
7. Editar y eliminar roles custom (no system)
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner en lista
|
||||||
|
- Success: Layout master-detail
|
||||||
|
- No Selection: Panel derecho con mensaje "Select a role"
|
||||||
|
- Empty Search: Mensaje "No roles found"
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click "New Role" | Navega a /rbac/roles/new |
|
||||||
|
| Buscar | Filtra lista de roles |
|
||||||
|
| Click en rol | Selecciona y muestra detalle |
|
||||||
|
| Click "Edit" | Navega a edicion (solo custom) |
|
||||||
|
| Click "Delete" | Confirm + elimina (solo custom) |
|
||||||
|
| Click en rol system | Alerta "System roles cannot be deleted" |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `rbac:read` - Ver roles y permisos
|
||||||
|
- `rbac:write` - Crear/editar roles
|
||||||
|
- `rbac:delete` - Eliminar roles
|
||||||
|
|
||||||
|
### Notas
|
||||||
|
- Roles de sistema (is_system: true) no pueden editarse ni eliminarse
|
||||||
|
- El rol default se asigna automaticamente a nuevos usuarios
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. PermissionsPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/rbac/permissions`
|
||||||
|
**Archivo:** `src/pages/dashboard/rbac/PermissionsPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Vista de todos los permisos del sistema. Solo lectura, agrupados por categoria con filtros.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Stats Cards - Metricas de permisos
|
||||||
|
- Search Input - Busqueda de permisos
|
||||||
|
- Category Filter Select - Filtro por categoria
|
||||||
|
- Permissions List - Lista agrupada por categoria
|
||||||
|
- Permission Item - Item con nombre, action badge, descripcion, slug
|
||||||
|
- Action Badge - Badge con color segun accion (read, write, delete, assign)
|
||||||
|
- Icons: Key, Shield, Filter, Search (lucide-react)
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `usePermissions()` - Lista todos los permisos
|
||||||
|
- `getPermissionCategoryLabel(category)` - Label de categoria
|
||||||
|
- `getPermissionActionLabel(action)` - Label de accion
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Ver estadisticas (total permisos, categorias, filtrados)
|
||||||
|
2. Buscar por nombre, slug o descripcion
|
||||||
|
3. Filtrar por categoria
|
||||||
|
4. Ver permisos agrupados por categoria
|
||||||
|
5. Ver accion con color (read=gray, write=yellow, delete=red, assign=purple)
|
||||||
|
6. Ver slug tecnico de cada permiso
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner centrado
|
||||||
|
- Error: Mensaje de error
|
||||||
|
- Success: Lista agrupada
|
||||||
|
- Empty Filter: Icono + mensaje "No permissions found matching your criteria"
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Buscar | Filtra permisos |
|
||||||
|
| Seleccionar categoria | Filtra por categoria |
|
||||||
|
| (Solo lectura) | - |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `rbac:read` - Ver permisos
|
||||||
|
|
||||||
|
### Notas
|
||||||
|
- Esta pagina es SOLO lectura
|
||||||
|
- Los permisos son definidos por el sistema, no se pueden crear/editar/eliminar
|
||||||
|
- Sirve como referencia para administradores al asignar roles
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Diagrama de Flujo RBAC
|
||||||
|
|
||||||
|
```
|
||||||
|
Usuario → tiene → Roles
|
||||||
|
Roles → tienen → Permisos
|
||||||
|
Permisos → definen → Acciones permitidas
|
||||||
|
|
||||||
|
Ejemplo:
|
||||||
|
- Usuario "John"
|
||||||
|
→ Rol "Admin"
|
||||||
|
→ Permiso "users:read" (puede ver usuarios)
|
||||||
|
→ Permiso "users:write" (puede editar usuarios)
|
||||||
|
→ Permiso "users:delete" (puede eliminar usuarios)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Documentacion generada - Template SaaS - 2026-02-03*
|
||||||
179
docs/05-frontend/pages/PAGE-SETTINGS.md
Normal file
179
docs/05-frontend/pages/PAGE-SETTINGS.md
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
# Settings Pages Specification
|
||||||
|
|
||||||
|
**Modulo:** settings
|
||||||
|
**Ultima actualizacion:** 2026-02-03
|
||||||
|
**Total Paginas:** 4
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. SettingsPage (Container)
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/settings`
|
||||||
|
**Archivo:** `src/pages/settings/SettingsPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Pagina contenedora de configuracion con navegacion por tabs. Agrupa las diferentes secciones de configuracion del usuario.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Tabs Navigation - Navegacion entre secciones
|
||||||
|
- Tab Content - Contenido dinamico segun tab
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useAuth()` - Estado de autenticacion
|
||||||
|
- `useCurrentUser()` - Datos del usuario actual
|
||||||
|
|
||||||
|
### Tabs Disponibles
|
||||||
|
|
||||||
|
| Tab | Componente | Descripcion |
|
||||||
|
|-----|------------|-------------|
|
||||||
|
| General | GeneralSettings | Perfil del usuario |
|
||||||
|
| Notifications | NotificationSettings | Preferencias de notificaciones |
|
||||||
|
| Security | SecuritySettings | Password y sesiones |
|
||||||
|
| AI | AISettings | Configuracion de IA |
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click en tab | Cambia seccion |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- Usuario autenticado
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. GeneralSettings
|
||||||
|
|
||||||
|
**Archivo:** `src/pages/settings/GeneralSettings.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Configuracion del perfil del usuario. Permite editar nombre y avatar.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Profile Form - Formulario de perfil
|
||||||
|
- Avatar Upload - Subir/cambiar avatar
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useCurrentUser()` - Datos actuales
|
||||||
|
- `useUpdateProfile()` - Actualiza perfil
|
||||||
|
- `useForm()` - Manejo de formulario
|
||||||
|
|
||||||
|
### Campos del Formulario
|
||||||
|
|
||||||
|
| Campo | Tipo | Validacion | Editable |
|
||||||
|
|-------|------|------------|----------|
|
||||||
|
| First name | text | Opcional | Si |
|
||||||
|
| Last name | text | Opcional | Si |
|
||||||
|
| Email | email | Requerido | No (read-only) |
|
||||||
|
| Avatar | file | Image only | Si |
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Skeleton del formulario
|
||||||
|
- Success: Formulario con datos
|
||||||
|
- Saving: Boton disabled + spinner
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Editar campos | Habilita boton guardar |
|
||||||
|
| Click avatar | Abre file picker |
|
||||||
|
| Submit | Guarda cambios |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. NotificationSettings
|
||||||
|
|
||||||
|
**Archivo:** `src/pages/settings/NotificationSettings.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Preferencias de notificaciones del usuario. Configura canales y tipos de eventos.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Toggle Switches - Switches para on/off
|
||||||
|
- Event Checkboxes - Seleccion de eventos
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useNotificationPreferences()` - Preferencias actuales
|
||||||
|
- `useUpdatePreferences()` - Actualiza preferencias
|
||||||
|
|
||||||
|
### Configuraciones Disponibles
|
||||||
|
|
||||||
|
| Categoria | Opciones |
|
||||||
|
|-----------|----------|
|
||||||
|
| Canales | Email, Push, In-app |
|
||||||
|
| Eventos | Billing, Security, Updates, Marketing |
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Skeletons de toggles
|
||||||
|
- Success: Toggles con estado actual
|
||||||
|
- Saving: Toggle disabled momentaneamente
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Toggle canal | Activa/desactiva canal |
|
||||||
|
| Toggle evento | Activa/desactiva evento |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. SecuritySettings
|
||||||
|
|
||||||
|
**Archivo:** `src/pages/settings/SecuritySettings.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Configuracion de seguridad de la cuenta. Permite cambiar password y ver sesiones activas.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- Password Form - Formulario de cambio de password
|
||||||
|
- Sessions List - Lista de sesiones activas
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useAuth()` - Operaciones de auth
|
||||||
|
- `useChangePassword()` - Cambia password
|
||||||
|
- `useSessions()` - Lista sesiones
|
||||||
|
- `useRevokeSession()` - Cierra sesion
|
||||||
|
|
||||||
|
### Secciones
|
||||||
|
|
||||||
|
#### Cambiar Password
|
||||||
|
|
||||||
|
| Campo | Tipo | Validacion |
|
||||||
|
|-------|------|------------|
|
||||||
|
| Current password | password | Requerido |
|
||||||
|
| New password | password | Min 8 chars, complexity |
|
||||||
|
| Confirm password | password | Debe coincidir |
|
||||||
|
|
||||||
|
#### Sesiones Activas
|
||||||
|
|
||||||
|
| Info | Descripcion |
|
||||||
|
|------|-------------|
|
||||||
|
| Device | Tipo de dispositivo |
|
||||||
|
| Browser | Navegador |
|
||||||
|
| IP | Direccion IP |
|
||||||
|
| Location | Ubicacion aproximada |
|
||||||
|
| Last active | Ultima actividad |
|
||||||
|
| Current | Si es la sesion actual |
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner en secciones
|
||||||
|
- Success: Formulario y lista
|
||||||
|
- Password Changed: Toast de exito
|
||||||
|
- Session Revoked: Toast de exito
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Submit password form | Cambia password |
|
||||||
|
| Click "Revoke" en sesion | Cierra sesion remota |
|
||||||
|
| Click "Revoke all" | Cierra todas menos actual |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- Usuario autenticado
|
||||||
|
|
||||||
|
### Notas
|
||||||
|
- La sesion actual no puede revocarse desde aqui
|
||||||
|
- El cambio de password cierra otras sesiones
|
||||||
|
- MFA esta planificado pero no implementado
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Documentacion generada - Template SaaS - 2026-02-03*
|
||||||
88
docs/05-frontend/pages/PAGE-STORAGE.md
Normal file
88
docs/05-frontend/pages/PAGE-STORAGE.md
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
# Storage Page Specification
|
||||||
|
|
||||||
|
**Modulo:** storage
|
||||||
|
**Ultima actualizacion:** 2026-02-03
|
||||||
|
**Total Paginas:** 1
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## StoragePage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/storage`
|
||||||
|
**Archivo:** `src/pages/dashboard/StoragePage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Gestion de archivos del tenant. Permite subir, listar, filtrar, descargar y eliminar archivos con visualizacion del uso de almacenamiento.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- FileList - Tabla/grid de archivos
|
||||||
|
- FileUpload - Zona de drag & drop
|
||||||
|
- FileItem - Item individual de archivo
|
||||||
|
- StorageUsageCard - Tarjeta de uso de storage
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useFiles(filters)` - Lista archivos con filtros
|
||||||
|
- `useUpload()` - Sube archivos
|
||||||
|
- `useStorageUsage()` - Obtiene uso de storage
|
||||||
|
- `useDeleteFile()` - Elimina archivo
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Subir archivos via drag & drop o click
|
||||||
|
2. Listar archivos con paginacion
|
||||||
|
3. Filtrar por carpeta/tipo de archivo
|
||||||
|
4. Buscar por nombre
|
||||||
|
5. Descargar archivos
|
||||||
|
6. Eliminar archivos con confirmacion
|
||||||
|
7. Ver uso de storage vs limite del plan
|
||||||
|
8. Preview de imagenes
|
||||||
|
9. Ver metadata (tamano, tipo, fecha)
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner en lista
|
||||||
|
- Uploading: Progress bar durante upload
|
||||||
|
- Success: Lista de archivos
|
||||||
|
- Empty: Mensaje "No files uploaded"
|
||||||
|
- Storage Full: Warning cuando esta lleno
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Drag & drop archivo | Inicia upload |
|
||||||
|
| Click zona upload | Abre file picker |
|
||||||
|
| Click descargar | Descarga archivo |
|
||||||
|
| Click eliminar | Confirm + elimina |
|
||||||
|
| Filtrar por tipo | Filtra lista |
|
||||||
|
| Buscar | Filtra por nombre |
|
||||||
|
| Previous/Next | Cambia pagina |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `storage:read` - Ver archivos
|
||||||
|
- `storage:write` - Subir archivos
|
||||||
|
- `storage:delete` - Eliminar archivos
|
||||||
|
|
||||||
|
### Tipos de Archivo Soportados
|
||||||
|
|
||||||
|
| Categoria | Extensiones | MIME Types |
|
||||||
|
|-----------|-------------|------------|
|
||||||
|
| Images | jpg, jpeg, png, gif, webp | image/* |
|
||||||
|
| Documents | pdf, doc, docx, xls, xlsx | application/* |
|
||||||
|
| Text | txt, csv, json | text/* |
|
||||||
|
| Archives | zip, rar, tar, gz | application/* |
|
||||||
|
|
||||||
|
### Limites por Plan
|
||||||
|
|
||||||
|
| Plan | Storage | Max File Size |
|
||||||
|
|------|---------|---------------|
|
||||||
|
| Free | 1 GB | 10 MB |
|
||||||
|
| Pro | 10 GB | 100 MB |
|
||||||
|
| Enterprise | 100 GB | 1 GB |
|
||||||
|
|
||||||
|
### Notas
|
||||||
|
- Los archivos son privados por tenant (RLS)
|
||||||
|
- Los uploads usan presigned URLs para eficiencia
|
||||||
|
- Se genera thumbnail automatico para imagenes
|
||||||
|
- Los archivos eliminados van a "trash" por 30 dias
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Documentacion generada - Template SaaS - 2026-02-03*
|
||||||
109
docs/05-frontend/pages/PAGE-WEBHOOKS.md
Normal file
109
docs/05-frontend/pages/PAGE-WEBHOOKS.md
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
# Webhooks Page Specification
|
||||||
|
|
||||||
|
**Modulo:** webhooks
|
||||||
|
**Ultima actualizacion:** 2026-02-03
|
||||||
|
**Total Paginas:** 1
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## WebhooksPage
|
||||||
|
|
||||||
|
**Ruta:** `/dashboard/webhooks`
|
||||||
|
**Archivo:** `src/pages/dashboard/WebhooksPage.tsx`
|
||||||
|
|
||||||
|
### Descripcion
|
||||||
|
Configuracion de webhooks outbound. Permite crear endpoints que reciben notificaciones de eventos del sistema.
|
||||||
|
|
||||||
|
### Componentes Utilizados
|
||||||
|
- WebhookCard - Tarjeta de webhook con estado
|
||||||
|
- WebhookForm - Formulario de creacion/edicion
|
||||||
|
- WebhookDeliveryList - Lista de entregas recientes
|
||||||
|
- EventSelector - Selector de eventos a escuchar
|
||||||
|
|
||||||
|
### Hooks Utilizados
|
||||||
|
- `useWebhooks()` - Lista webhooks
|
||||||
|
- `useCreateWebhook()` - Crea webhook
|
||||||
|
- `useUpdateWebhook()` - Actualiza webhook
|
||||||
|
- `useDeleteWebhook()` - Elimina webhook
|
||||||
|
- `useWebhookDeliveries(webhookId)` - Lista entregas
|
||||||
|
- `useRetryDelivery()` - Reintenta entrega fallida
|
||||||
|
- `useTestWebhook()` - Envia test
|
||||||
|
|
||||||
|
### Funcionalidades
|
||||||
|
1. Crear nuevo webhook con URL y eventos
|
||||||
|
2. Configurar headers custom (ej: Authorization)
|
||||||
|
3. Ver estado (active/paused)
|
||||||
|
4. Ver historial de entregas con status
|
||||||
|
5. Reintentar entregas fallidas
|
||||||
|
6. Enviar evento de test
|
||||||
|
7. Ver secreto para validar firma
|
||||||
|
8. Editar y eliminar webhooks
|
||||||
|
|
||||||
|
### Eventos Disponibles
|
||||||
|
|
||||||
|
| Evento | Descripcion |
|
||||||
|
|--------|-------------|
|
||||||
|
| user.created | Usuario creado |
|
||||||
|
| user.updated | Usuario actualizado |
|
||||||
|
| user.deleted | Usuario eliminado |
|
||||||
|
| subscription.created | Suscripcion creada |
|
||||||
|
| subscription.updated | Suscripcion actualizada |
|
||||||
|
| subscription.cancelled | Suscripcion cancelada |
|
||||||
|
| invoice.paid | Factura pagada |
|
||||||
|
| invoice.failed | Pago fallido |
|
||||||
|
|
||||||
|
### Estados
|
||||||
|
- Loading: Spinner en lista
|
||||||
|
- Success: Lista de webhooks
|
||||||
|
- Empty: Mensaje "No webhooks configured"
|
||||||
|
- Delivery Success: Badge verde
|
||||||
|
- Delivery Failed: Badge rojo con retry
|
||||||
|
|
||||||
|
### Acciones del Usuario
|
||||||
|
| Accion | Resultado |
|
||||||
|
|--------|-----------|
|
||||||
|
| Click "Create Webhook" | Abre formulario |
|
||||||
|
| Submit formulario | Crea webhook |
|
||||||
|
| Click "Edit" | Abre edicion |
|
||||||
|
| Click "Delete" | Confirm + elimina |
|
||||||
|
| Click "Test" | Envia evento test |
|
||||||
|
| Click "Retry" en delivery | Reintenta envio |
|
||||||
|
| Toggle active | Activa/pausa webhook |
|
||||||
|
|
||||||
|
### Permisos Requeridos
|
||||||
|
- `webhooks:read` - Ver webhooks y entregas
|
||||||
|
- `webhooks:write` - Crear/editar webhooks
|
||||||
|
- `webhooks:delete` - Eliminar webhooks
|
||||||
|
|
||||||
|
### Estructura de Entrega
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
interface WebhookDelivery {
|
||||||
|
id: string;
|
||||||
|
webhook_id: string;
|
||||||
|
event: string;
|
||||||
|
payload: Record<string, any>;
|
||||||
|
response_status?: number;
|
||||||
|
response_body?: string;
|
||||||
|
error?: string;
|
||||||
|
attempts: number;
|
||||||
|
delivered_at?: string;
|
||||||
|
created_at: string;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Seguridad
|
||||||
|
|
||||||
|
- Cada webhook tiene un `secret` unico
|
||||||
|
- Las entregas incluyen header `X-Webhook-Signature` con HMAC-SHA256
|
||||||
|
- Los endpoints deben responder con 2xx en 30 segundos
|
||||||
|
- Reintentos automaticos: 3 intentos con backoff exponencial
|
||||||
|
|
||||||
|
### Notas
|
||||||
|
- Los webhooks pausados no reciben eventos
|
||||||
|
- Las entregas fallidas se retienen por 7 dias
|
||||||
|
- El payload incluye `event`, `data`, `timestamp` y `webhook_id`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Documentacion generada - Template SaaS - 2026-02-03*
|
||||||
57
docs/05-frontend/pages/_INDEX.md
Normal file
57
docs/05-frontend/pages/_INDEX.md
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
# Frontend Pages Documentation Index
|
||||||
|
|
||||||
|
**Proyecto:** template-saas
|
||||||
|
**Actualizado:** 2026-02-03
|
||||||
|
**Total de Especificaciones:** 10
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Documentacion Detallada de Paginas
|
||||||
|
|
||||||
|
Esta carpeta contiene especificaciones detalladas de paginas que no estan cubiertas en el archivo principal `FRONTEND-PAGES-SPEC.md`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Indice de Especificaciones
|
||||||
|
|
||||||
|
| Archivo | Modulo | Paginas | Descripcion |
|
||||||
|
|---------|--------|---------|-------------|
|
||||||
|
| [PAGE-GOALS.md](./PAGE-GOALS.md) | goals | 5 | Sistema de metas y objetivos |
|
||||||
|
| [PAGE-MLM.md](./PAGE-MLM.md) | mlm | 5 | Marketing multinivel |
|
||||||
|
| [PAGE-PORTFOLIO.md](./PAGE-PORTFOLIO.md) | portfolio | 3 | Catalogo de productos |
|
||||||
|
| [PAGE-RBAC.md](./PAGE-RBAC.md) | rbac | 2 | Roles y permisos |
|
||||||
|
| [PAGE-NOTIFICATIONS-ADMIN.md](./PAGE-NOTIFICATIONS-ADMIN.md) | notifications | 2 | Gestion de notificaciones |
|
||||||
|
| [PAGE-ANALYTICS.md](./PAGE-ANALYTICS.md) | analytics | 1 | Dashboard de analiticas |
|
||||||
|
| [PAGE-AUDIT.md](./PAGE-AUDIT.md) | audit | 1 | Logs de auditoria |
|
||||||
|
| [PAGE-STORAGE.md](./PAGE-STORAGE.md) | storage | 1 | Gestion de archivos |
|
||||||
|
| [PAGE-WEBHOOKS.md](./PAGE-WEBHOOKS.md) | webhooks | 1 | Configuracion de webhooks |
|
||||||
|
| [PAGE-SETTINGS.md](./PAGE-SETTINGS.md) | settings | 4 | Configuracion de cuenta |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Resumen por Modulo
|
||||||
|
|
||||||
|
| Modulo | Total Paginas | Estado |
|
||||||
|
|--------|---------------|--------|
|
||||||
|
| Goals | 5 | Documentado |
|
||||||
|
| MLM | 5 | Documentado |
|
||||||
|
| Portfolio | 3 | Documentado |
|
||||||
|
| RBAC | 2 | Documentado |
|
||||||
|
| Notifications | 2 | Documentado |
|
||||||
|
| Analytics | 1 | Documentado |
|
||||||
|
| Audit | 1 | Documentado |
|
||||||
|
| Storage | 1 | Documentado |
|
||||||
|
| Webhooks | 1 | Documentado |
|
||||||
|
| Settings | 4 | Documentado |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Relacion con Otros Documentos
|
||||||
|
|
||||||
|
- **FRONTEND-PAGES-SPEC.md**: Especificacion principal que cubre Auth, Dashboard Core, Sales, Commissions, Superadmin y Onboarding
|
||||||
|
- **FRONTEND-ROUTING.md**: Definicion de rutas y guards
|
||||||
|
- Esta carpeta complementa esos documentos con paginas de modulos Sprint 2
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Documentacion generada - Template SaaS - 2026-02-03*
|
||||||
2
frontend
2
frontend
@ -1 +1 @@
|
|||||||
Subproject commit 891689a4f448b91e244059942533431e22a2fa86
|
Subproject commit 9bd1aba33d9f81cc07837c9d28dcba2117c871ae
|
||||||
@ -0,0 +1,179 @@
|
|||||||
|
# Reporte de Dead Code - Frontend
|
||||||
|
|
||||||
|
**Fecha:** 2026-02-03
|
||||||
|
**Autor:** Claude Opus 4.5 (ST-3.4-DEAD-CODE)
|
||||||
|
**Proyecto:** template-saas/frontend
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Resumen Ejecutivo
|
||||||
|
|
||||||
|
| Categoria | Total | Usados | No Usados | % Uso |
|
||||||
|
|-----------|-------|--------|-----------|-------|
|
||||||
|
| Hooks usePortfolio | 21 | 18 | 3 | 86% |
|
||||||
|
| Componentes Portfolio | 6 | 0 | 6 | 0% |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## usePortfolio Hook
|
||||||
|
|
||||||
|
### Total funciones exportadas: 21
|
||||||
|
|
||||||
|
### Funciones USADAS (18)
|
||||||
|
|
||||||
|
| Funcion | Usada En |
|
||||||
|
|---------|----------|
|
||||||
|
| `useCategories` | PortfolioPage.tsx, ProductFormPage.tsx |
|
||||||
|
| `useCategory` | CategoryDetailPage.tsx |
|
||||||
|
| `useCategoryTree` | CategoriesPage.tsx |
|
||||||
|
| `useCreateCategory` | CategoryDetailPage.tsx |
|
||||||
|
| `useUpdateCategory` | CategoryDetailPage.tsx |
|
||||||
|
| `useDeleteCategory` | CategoriesPage.tsx, CategoryDetailPage.tsx |
|
||||||
|
| `useProducts` | PortfolioPage.tsx, ProductsPage.tsx, CategoryDetailPage.tsx |
|
||||||
|
| `useProduct` | ProductDetailPage.tsx, ProductFormPage.tsx |
|
||||||
|
| `useCreateProduct` | ProductFormPage.tsx |
|
||||||
|
| `useUpdateProduct` | ProductFormPage.tsx |
|
||||||
|
| `useUpdateProductStatus` | ProductDetailPage.tsx |
|
||||||
|
| `useDuplicateProduct` | ProductDetailPage.tsx, ProductsPage.tsx |
|
||||||
|
| `useDeleteProduct` | ProductDetailPage.tsx, ProductsPage.tsx |
|
||||||
|
| `useProductVariants` | ProductDetailPage.tsx |
|
||||||
|
| `useCreateVariant` | ProductDetailPage.tsx |
|
||||||
|
| `useDeleteVariant` | ProductDetailPage.tsx |
|
||||||
|
| `useProductPrices` | ProductDetailPage.tsx |
|
||||||
|
| `useCreatePrice` | ProductDetailPage.tsx |
|
||||||
|
| `useDeletePrice` | ProductDetailPage.tsx |
|
||||||
|
|
||||||
|
### Funciones NO USADAS (3)
|
||||||
|
|
||||||
|
| Funcion | Descripcion | Recomendacion |
|
||||||
|
|---------|-------------|---------------|
|
||||||
|
| `useUpdateVariant` | Actualiza una variante existente | MANTENER - Se usara para edicion de variantes |
|
||||||
|
| `useUpdatePrice` | Actualiza un precio existente | MANTENER - Se usara para edicion de precios |
|
||||||
|
| (ninguna otra) | - | - |
|
||||||
|
|
||||||
|
**Nota:** Las funciones `useUpdateVariant` y `useUpdatePrice` tienen DTOs correspondientes (`UpdateVariantDto`, `UpdatePriceDto`) y siguen el patron CRUD completo. Aunque actualmente los modales solo permiten crear y eliminar, la funcionalidad de edicion es esperada en futuras iteraciones.
|
||||||
|
|
||||||
|
### Decision: MANTENER todas las funciones
|
||||||
|
|
||||||
|
**Razon:** El hook `usePortfolio` implementa un CRUD completo y bien estructurado. Las 3 funciones no usadas (`useUpdateVariant`, `useUpdatePrice`) son parte del patron completo y seran necesarias cuando se agregue funcionalidad de edicion en los modales de variantes y precios.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Componentes Portfolio NO USADOS
|
||||||
|
|
||||||
|
Los siguientes componentes estan exportados en `src/components/portfolio/index.ts` pero NO se importan en ninguna pagina:
|
||||||
|
|
||||||
|
| Componente | Archivo | Lineas | Recomendacion |
|
||||||
|
|------------|---------|--------|---------------|
|
||||||
|
| `CategoryTree` | CategoryTree.tsx | 182 | MANTENER - Version reutilizable |
|
||||||
|
| `CategoryForm` | CategoryForm.tsx | 200 | MANTENER - Modal reutilizable |
|
||||||
|
| `ProductCard` | ProductCard.tsx | ~100 | MANTENER - Para vista grid futura |
|
||||||
|
| `ProductFilters` | ProductFilters.tsx | ~150 | MANTENER - Filtros avanzados |
|
||||||
|
| `VariantList` | VariantList.tsx | ~100 | MANTENER - Lista reutilizable |
|
||||||
|
| `PriceTable` | PriceTable.tsx | ~100 | MANTENER - Tabla reutilizable |
|
||||||
|
|
||||||
|
### Analisis Detallado
|
||||||
|
|
||||||
|
1. **CategoryTree.tsx** (182 lineas)
|
||||||
|
- Version mas robusta y reutilizable del arbol de categorias
|
||||||
|
- Soporta: `selectedId`, `showActions`, callbacks externos
|
||||||
|
- Las paginas usan una version inline simplificada
|
||||||
|
- **Decision:** MANTENER para refactorizacion futura
|
||||||
|
|
||||||
|
2. **CategoryForm.tsx** (200 lineas)
|
||||||
|
- Modal completo para crear/editar categorias
|
||||||
|
- Soporta: `parentCategories`, `isLoading`
|
||||||
|
- CategoryDetailPage.tsx tiene formulario inline
|
||||||
|
- **Decision:** MANTENER para uso futuro en modal
|
||||||
|
|
||||||
|
3. **ProductCard.tsx**
|
||||||
|
- Componente de tarjeta para vista grid
|
||||||
|
- ProductsPage.tsx actualmente usa tabla
|
||||||
|
- **Decision:** MANTENER para toggle grid/list futuro
|
||||||
|
|
||||||
|
4. **ProductFilters.tsx**
|
||||||
|
- Filtros avanzados por tipo, status, categoria
|
||||||
|
- ProductsPage.tsx tiene filtros basicos inline
|
||||||
|
- **Decision:** MANTENER para filtros avanzados
|
||||||
|
|
||||||
|
5. **VariantList.tsx / PriceTable.tsx**
|
||||||
|
- Versiones reutilizables con edicion inline
|
||||||
|
- ProductDetailPage.tsx tiene versiones simplificadas
|
||||||
|
- **Decision:** MANTENER para refactorizacion
|
||||||
|
|
||||||
|
### Decision: NO ELIMINAR componentes
|
||||||
|
|
||||||
|
**Razon:** Estos componentes fueron creados como parte del diseno del modulo Portfolio y representan versiones mas completas y reutilizables. Las paginas actualmente usan implementaciones inline simplificadas. Eliminarlos seria perder trabajo que sera util en futuras mejoras de UX.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Imports No Usados Encontrados
|
||||||
|
|
||||||
|
Tras revision de todos los archivos de Portfolio, NO se encontraron imports no usados significativos.
|
||||||
|
|
||||||
|
Los archivos revisados tienen imports limpios:
|
||||||
|
- CategoriesPage.tsx: OK
|
||||||
|
- CategoryDetailPage.tsx: OK
|
||||||
|
- ProductsPage.tsx: OK
|
||||||
|
- ProductDetailPage.tsx: OK
|
||||||
|
- ProductFormPage.tsx: OK
|
||||||
|
- PortfolioPage.tsx: OK
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Codigo Limpiado
|
||||||
|
|
||||||
|
**Ninguno.** No se realizo limpieza de codigo porque:
|
||||||
|
|
||||||
|
1. Las funciones de hooks no usadas son parte del patron CRUD completo
|
||||||
|
2. Los componentes no usados son versiones reutilizables que seran utiles
|
||||||
|
3. No se encontraron imports no usados para limpiar
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Validaciones
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd projects/template-saas/frontend
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
**Estado:** BUILD FALLA debido a errores de sintaxis en archivos de tests creados por otra subtarea (ST-3.8-UNIT-TESTS).
|
||||||
|
|
||||||
|
**Archivos con errores:**
|
||||||
|
- `src/__tests__/hooks/useAuth.test.ts` (linea 55): JSX en archivo .ts (deberia ser .tsx)
|
||||||
|
|
||||||
|
**Nota:** Estos errores NO fueron introducidos por esta subtarea (ST-3.4-DEAD-CODE). Son archivos de tests nuevos creados en paralelo. La subtarea ST-3.4 no modifico ningun archivo de codigo fuente.
|
||||||
|
|
||||||
|
**Codigo del Portfolio:**
|
||||||
|
- Todos los archivos de Portfolio compilan correctamente
|
||||||
|
- NO se elimino ningun codigo
|
||||||
|
- NO se introdujeron cambios
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Recomendaciones Futuras
|
||||||
|
|
||||||
|
1. **Refactorizar CategoriesPage.tsx**
|
||||||
|
- Extraer `CategoryTreeNode` a usar el componente `CategoryTree`
|
||||||
|
- Reducir duplicacion de codigo
|
||||||
|
|
||||||
|
2. **Agregar edicion de variantes/precios**
|
||||||
|
- Usar `useUpdateVariant` y `useUpdatePrice` existentes
|
||||||
|
- Completar la experiencia CRUD en ProductDetailPage
|
||||||
|
|
||||||
|
3. **Agregar toggle grid/list en ProductsPage**
|
||||||
|
- Usar `ProductCard` para vista grid
|
||||||
|
- Mejorar la experiencia de navegacion
|
||||||
|
|
||||||
|
4. **Usar ProductFilters en ProductsPage**
|
||||||
|
- Reemplazar filtros inline con componente reutilizable
|
||||||
|
- Agregar filtros por categoria y tipo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
El frontend de Portfolio tiene una arquitectura bien disenada con hooks CRUD completos y componentes reutilizables preparados. El codigo "no usado" actual representa preparacion para futuras funcionalidades, no dead code real.
|
||||||
|
|
||||||
|
**Recomendacion Final:** NO eliminar codigo. Documentar para implementacion futura.
|
||||||
@ -116,7 +116,7 @@ tareas_activas:
|
|||||||
titulo: "Auditoría y Planificación Frontend/UX-UI"
|
titulo: "Auditoría y Planificación Frontend/UX-UI"
|
||||||
fase_actual: "EJECUCION"
|
fase_actual: "EJECUCION"
|
||||||
sp_total: 49
|
sp_total: 49
|
||||||
sp_ejecutados: 53
|
sp_ejecutados: 67
|
||||||
subtareas:
|
subtareas:
|
||||||
sprint_1_p0:
|
sprint_1_p0:
|
||||||
- "ST-1.1-RBAC-FRONTEND (5 SP) - COMPLETADA"
|
- "ST-1.1-RBAC-FRONTEND (5 SP) - COMPLETADA"
|
||||||
@ -133,10 +133,14 @@ tareas_activas:
|
|||||||
sprint_2_commits:
|
sprint_2_commits:
|
||||||
- "891689a - [SPRINT-2] feat: Complete Portfolio, MLM and Goals UI modules"
|
- "891689a - [SPRINT-2] feat: Complete Portfolio, MLM and Goals UI modules"
|
||||||
sprint_3_p2:
|
sprint_3_p2:
|
||||||
- "ST-3.1-WCAG-IMPROVE (5 SP)"
|
- "ST-3.1-WCAG-IMPROVE (5 SP) - COMPLETADA"
|
||||||
- "ST-3.2-UNIT-TESTS (5 SP)"
|
- "ST-3.2-UNIT-TESTS (5 SP) - COMPLETADA"
|
||||||
- "ST-3.3-DOCS-PAGES (3 SP)"
|
- "ST-3.3-DOCS-PAGES (3 SP) - COMPLETADA"
|
||||||
- "ST-3.4-DEAD-CODE (1 SP)"
|
- "ST-3.4-DEAD-CODE (1 SP) - COMPLETADA"
|
||||||
|
sprint_3_completado: "2026-02-03"
|
||||||
|
sprint_3_commits:
|
||||||
|
- "9bd1aba - [SPRINT-3] feat: Add WCAG improvements and 160 unit tests"
|
||||||
|
- "0ead18e2 - [SPRINT-3] docs: Add page specifications and dead code analysis"
|
||||||
sprint_4_p3:
|
sprint_4_p3:
|
||||||
- "ST-4.1-PURGE-DOCS (1 SP)"
|
- "ST-4.1-PURGE-DOCS (1 SP)"
|
||||||
- "ST-4.2-UPDATE-INVENTORY (2 SP)"
|
- "ST-4.2-UPDATE-INVENTORY (2 SP)"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user