Análisis y estimación de tiempos — Features Audyn.AI
Proyecto: AudynAI — Plataforma multi-tenant de QA de llamadas con IA
Alcance: Solo los módulos aprobados para evaluación/ejecución
Fecha: Junio 2026
Estimación resumida del alcance
| Módulo |
Frontend |
Backend + DB |
Total |
| 1. Auth + autorización |
2 h |
2 h |
4 h |
| 2.1 Listado clientes |
1 h |
4 h |
5 h |
| 2.2 Detalle cliente |
3 h |
5 h |
8 h |
| 2.3 Usuarios cliente |
2 h |
3 h |
5 h |
| 2.4 Reporte analítica IA |
6 h |
8 h |
14 h |
| 3. Gestión agentes |
2 h |
3 h |
5 h |
| 4.1 Modelos IA |
2 h |
4 h |
6 h |
| 4.2 Prompts |
1 h |
3 h |
4 h |
| 4.3 Rúbricas |
2 h |
4 h |
6 h |
| 5. Admin usuarios |
2 h |
3 h |
5 h |
| 6. Plantillas permisos |
3 h |
3 h |
6 h |
| TOTAL ALCANCE |
|
|
~68 h |
Alcance del documento
Este documento analiza únicamente los features que el equipo ejecutará.
Features incluidos
| # |
Módulo |
| 1 |
Autenticación, seguridad y autorización basada en plantillas de permisos |
| 2 |
Gestión de clientes (listado, detalle, usuarios, reporte analítica IA) |
| 3 |
Gestión de agentes |
| 4 |
Configuración Agent IA (modelos, prompts, rúbricas, ingreso y procesamiento de llamadas) |
| 5 |
Administración de usuarios |
| 6 |
Administración de permisos — plantillas de permisos |
1. Autenticación, seguridad y autorización basada en plantillas de permisos
Descripción y flujo
Flujo de autenticación
- Usuario no autenticado accede a cualquier ruta WASM → redirección a
/Account/Login
- Ingresa credenciales → ASP.NET Core Identity valida contra PostgreSQL
- Se emite cookie HttpOnly + estado serializado para Blazor WASM
- Post-login: se cargan claims (
client_id, permission_template_id, authorization_level)
- Redirección al módulo según rol (admin →
/clients o /system-users)
Flujo de autorización
- Cada request API y ruta WASM evalúa la plantilla de permisos activa del usuario
- La plantilla define, por módulo, acciones: Ver, Agregar, Editar, Eliminar, Importar, Exportar
- UI oculta/deshabilita acciones sin permiso; API retorna 403 si se intenta bypass
- Multi-tenant: usuarios client solo ven datos de su
ClientId; partner ve subset; admin plataforma ve todo
Login → Claims (template + tenant) → Policy check → UI/API
↓
permission_template_modules
Requerimientos de Frontend (Blazor/Radzen)
| Elemento |
Estado |
Trabajo pendiente |
| Login split hero |
✅ Existe |
Conectar errores reales, branding final |
| Forgot password / Manage account |
✅ Template Identity |
Email sender real |
[Authorize] en páginas WASM |
✅ Aplicado |
Policies granulares por módulo |
SidebarUserProfile |
✅ Mock |
Logout, nombre, rol desde claims |
| Ocultar botones Create/Edit/Delete |
❌ |
Según matriz de permisos |
| Guards en NavMenu |
❌ |
Filtrar ítems por permiso View |
Archivos clave: AudynAi.Web/Components/Account/Pages/Authentication/Login.razor, SidebarUserProfile.razor, Routes.razor, NavMenu.razor
Requerimientos de Backend y Base de Datos
| Elemento |
Detalle |
| Identity |
Extender IdentityUser → ApplicationUser con AuthorizationLevel, PermissionTemplateId |
| Persistencia |
PostgreSQL (Npgsql); migrar desde SQLite dev si aplica |
| Claims |
client_id, permission_template_id, is_platform_admin |
| Policies |
CanViewClients, CanEditPrompts, CanViewAiAnalysis, etc. |
| Email |
Reemplazar IdentityNoOpEmailSender por SMTP/SendGrid |
| Seguridad |
Lockout, confirmación email, HTTPS, cookies HttpOnly |
Tablas (transaccional): tablas Identity existentes + extensión perfil usuario
2. Gestión de clientes
2.1 Listado de clientes activos
Descripción y flujo
- Usuario con permiso Clients → View accede a
/clients
- Grid paginado: Client Name (link), Alternate ID, Status (Active/Inactive)
- Acciones: navegar a detalle; Add New Client (si permiso Add); Add funds (evaluar si entra en alcance — hoy en mock)
- Scope tenant: admin ve todos; partner ve sus clientes; client user redirige a su único cliente
Requerimientos de Frontend
| Elemento |
Archivo |
Estado |
| Página listado |
Pages/Clients.razor |
✅ Mock |
| Grid CRUD |
CrudDataGrid |
✅ Reutilizable |
| Paginación server-side |
— |
❌ Conectar API |
Requerimientos de Backend y Base de Datos
- Tabla
clients: id, name, alternate_id, status, partner_id, is_active, rate_table_id, routing, flags…
- API:
GET /api/clients con paginación, sort, filtros
- Global query filter por
ClientId / partner scope
- Índices:
(status), (partner_id)
2.2 Detalle y edición de cliente
Descripción y flujo
/clients/{id} — tab Details (via ClientSectionNav)
- Formulario extenso: identificación, partner, status, routing, rate table, master client, import template, checkboxes operativos
- Validación → guardar → notificación éxito/error
- Tabs adyacentes: Users, AI Analysis
Requerimientos de Frontend
| Elemento |
Archivo |
Estado |
| Página detalle |
Pages/ClientDetail.razor |
✅ Mock (~200 líneas form) |
| Layout tabs |
ClientPageLayout.razor, ClientSectionNav.razor |
✅ |
| Validadores Radzen |
En form |
✅ Mock |
Requerimientos de Backend y Base de Datos
- API:
GET/PUT /api/clients/{id}
- Lookups: partners, rate tables (si rate table fuera de alcance, campo texto o FK nullable)
- Auditoría:
created_at, updated_at, updated_by
2.3 Usuarios asignados al cliente
Descripción y flujo
- Tab Users en
/clients/{id}/users
- Grid: User Name, Authorization Level, Status
- Add User → diálogo
AddClientUsersDialog para asignar usuarios existentes o crear nuevos
- Desactivar asignación sin borrar usuario global
Requerimientos de Frontend
| Elemento |
Archivo |
Estado |
| Página |
Pages/ClientUsers.razor |
✅ Mock |
| Diálogo |
AddClientUsersDialog.razor |
✅ Mock |
Requerimientos de Backend y Base de Datos
- Tabla
client_users: client_id, user_id, authorization_level, is_active
- API:
GET/POST/DELETE /api/clients/{id}/users
- Lookup usuarios no asignados al cliente
2.4 Reporte de analítica por IA
Descripción y flujo
- Tab AI Analysis en
/clients/{id}/ai-analysis
- Panel de filtros: reporting template, fechas, report type, teléfono, búsqueda en transcripción, recorded only, AI mismatch, auto-fail, duration, QA score
- View Report →
MessagesReportDashboard con secciones:
- Overview, Manager Verdicts, QA Score, Intent, Sentiment, Dispositions, Users, QA por categoría, Call History
- Click en llamada →
CallDetailDialog (audio, transcript, intent, votes, manager review, export PDF)
- Deep link:
/ai-analysis/call/{callId} abre detalle directo
Requerimientos de Frontend
| Componente |
Archivo |
Estado |
| Filtros |
Pages/ClientMessages.razor |
✅ Mock |
| Dashboard |
MessagesReportDashboard.razor |
✅ Mock (charts Radzen) |
| Grid llamadas |
CallHistoryGrid.razor |
✅ Mock |
| Detalle llamada |
CallDetailDialog.razor |
✅ Mock extenso |
| Transcript |
CallTranscriptPanel.razor |
✅ Mock |
| QA por categoría |
CategoryDistributionPanel.razor |
✅ Mock |
| Mock datos |
CallRecordingMockData.cs, QaCategoryDistributionMockData.cs |
✅ Referencia contratos |
Requerimientos de Backend y Base de Datos
Lectura (consumo de datos IA — Dapper recomendado):
- Agregaciones por dimensión filtradas por
client_id + rango fechas
- Full-text search en
call_transcripts (PostgreSQL tsvector)
- API:
POST /api/clients/{id}/ai-analysis/report con body de filtros
- API:
GET /api/clients/{id}/calls paginado para grid
- API:
GET /api/clients/{id}/calls/{callId} detalle completo
Datos consumidos (generados por pipeline — ver 4.4):
| Dato |
Uso en reporte |
call_recordings |
Metadatos, audio URL |
call_transcripts |
Búsqueda, panel transcript |
call_intent_results |
Sección Intent |
call_sentiment_results |
Sección Sentiment |
call_rubric_scores |
QA Score, categorías |
manager_reviews |
Manager Verdicts (humano, separado de IA) |
Integración de IA
Consume outputs ya procesados por el agente IA (Módulo 4.4). No invoca LLM en tiempo real al generar el reporte.
Incluye revisión humana en detalle de llamada:
- Veredictos: Un-reviewed, AI Correct, Agent Correct, Both Incorrect
- Notas manager — nunca sobrescriben análisis IA
3. Gestión de agentes
Descripción y flujo
/agents — administración de agentes de call center (personas), no confundir con "Agent IA"
- CRUD agentes: identificador, nombre, cliente asociado, status
- Los agentes aparecen en el reporte analítica (sección Users — conteo votos/métricas por agente)
- Vinculación agente ↔ metadatos de llamada (from/to) para atribución en QA
Admin → /agents → CRUD agente → asociar a client
↓
Call metadata (from/to) → atribución en reporte IA
Requerimientos de Frontend (Blazor/Radzen)
| Elemento |
Estado |
Trabajo |
Página /agents |
⬜ Placeholder |
Implementar grid CRUD desde cero |
| Patrón |
— |
Reutilizar CrudDataGrid, CrudPageLayout, DialogHelper |
| NavMenu |
✅ |
Ítem "Agents" ya existe |
Requerimientos de Backend y Base de Datos
- Tabla
agents: id, client_id, external_id, display_name, is_active, …
- API CRUD:
/api/agents scoped por tenant
- Relación opcional con identificadores telefónicos en
call_recordings
Datos: transaccional estándar
4. Configuración Agent IA
4.1 Modelos IA (Manage Client IA)
Descripción y flujo
/agent-ia/models — configuración de motores IA disponibles
- Por engine: habilitar/deshabilitar, marcar default, ver model (Claude 3.7 Sonnet, Haiku, etc.)
- Pricing mode: Token Based vs Fixed Per Prompt
- Tarifas: input/output per 1K, batch, cache write/read
- Guardar configuración (MVP: global plataforma; fase 2: override por client)
Requerimientos de Frontend
| Elemento |
Archivo |
Estado |
| Página |
Pages/AgentModels.razor |
✅ Mock completo |
| Modelo fila |
ClientIaEngineConfigEntry.cs |
✅ |
| Mock |
ClientIaEnginesMockData.cs |
✅ Referencia |
Requerimientos de Backend y Base de Datos
ia_engines — catálogo (Elite, High Quality, Fast, Legacy)
client_ia_configs o config global MVP
- API keys en secrets (Key Vault), no en BD plano
- API:
GET/PUT /api/ia/engines
4.2 Plantillas de prompts
Descripción y flujo
/agent-ia/prompts — grid de templates
- Campos: ID, Name, Description, Template Text, Version, Prompt Engine
- Acciones: Add, Edit, Delete, View Versions
- Editar = nueva versión inmutable; activar versión desde historial
- Variables:
{{transcript}}, {{raw_transcript}}, {{rubric_json}}
Requerimientos de Frontend
| Elemento |
Archivo |
Estado |
| Página |
Pages/AgentPrompts.razor |
✅ Mock |
| Versiones |
PromptTemplateVersionsDialog.razor |
✅ Mock |
| Mock |
PromptTemplatesMockData.cs |
✅ |
Requerimientos de Backend y Base de Datos
prompt_templates, prompt_template_versions
- Regla: no UPDATE destructivo del texto activo — solo nueva versión
- API versionada
Criterios de aceptación
4.3 Rúbricas QA editables
Descripción y flujo
/agent-ia/rubrics — hoy placeholder
- Admin define categorías (Etiqueta Telefónica, Protocolo de Votación, …)
- Por categoría: criterios, peso, umbral auto-fail
- Export JSON → consumido por prompt
qa_rubric_scoring y sección QA del reporte (2.4)
Nota producto (README): hoy la rúbrica está hardcodeada; este feature la hace editable desde UI.
Requerimientos de Frontend
| Elemento |
Estado |
Trabajo |
| Página |
⬜ Placeholder |
Editor categorías/criterios, preview JSON |
| Patrón |
— |
Secciones colapsables como dashboard QA |
Requerimientos de Backend y Base de Datos
rubrics, rubric_categories, rubric_criteria
- Validación: pesos suman 100 %
- Versionado recomendado (cambio no afecta llamadas ya procesadas)
4.4 Ingreso y procesamiento de llamadas vía agente de IA
Descripción y flujo
Ingreso:
- Llamada/grabación llega vía API webhook, batch import o upload admin
- Audio → blob storage; metadatos →
call_recordings
- Job encolado → estado Pending
Procesamiento (orquestador):
Audio → Transcripción (ASR)
→ clean_transcript (LLM)
→ intent_analysis (LLM)
→ sentiment_summary (LLM)
→ qa_rubric_scoring (LLM + rubric_json)
→ Billable_No_Vote si aplica (LLM)
→ Persistir resultados INMUTABLES
→ Completed
- Resultados alimentan reporte 2.4; revisión humana opcional en detalle
Requerimientos de Frontend
| Elemento |
Estado |
Trabajo |
| UI ingreso |
❌ |
Upload admin opcional; indicador estado en Call History |
| Call History |
✅ Mock |
Icono procesamiento OK / error / pending |
| Retry admin |
❌ |
Acción super admin reintentar job fallido |
Requerimientos de Backend y Base de Datos
Transaccional:
call_recordings, ai_processing_jobs
Generado por IA (inmutable):
call_transcripts, call_intent_results, call_sentiment_results
call_rubric_scores, call_director_votes, call_auto_fail_flags
Infraestructura:
- Blob storage (S3/Azure)
- Background worker / cola (Hangfire, Service Bus)
- Idempotencia por
call_id / external_id
Integración de IA
Feature crítico del alcance.
- ASR: Whisper, Deepgram u otro
- LLM: Claude/GPT según engines 4.1
- Prompts activos desde 4.2
- Rúbrica JSON desde 4.3
- Parsing JSON de respuestas; retry; dead letter queue
- Métricas: tokens, costo, latencia
5. Administración de usuarios
Descripción y flujo
/system-users — listado paginado: User Name, Authorization Level, Status
/system-users/add — alta: authorization level, username, password, confirm, status, permission template
- Usuario creado en Identity + perfil extendido
- Usuarios asignables a clientes (Módulo 2.3)
Requerimientos de Frontend (Blazor/Radzen)
| Pantalla |
Archivo |
Estado |
| Listado |
Pages/SystemUsers.razor |
✅ Mock |
| Alta |
Pages/SystemUsersAdd.razor |
✅ Mock |
| Mock |
SystemUsersMockData.cs |
✅ |
Requerimientos de Backend y Base de Datos
- Extensión Identity +
ApplicationUser
- API:
GET/POST /api/system-users
- Validación password, confirmación email
- Soft delete / deactivate
- FK a
permission_templates
6. Administración de permisos — Plantillas de permisos
Descripción y flujo
/system-users/permissions — listado plantillas: Template ID, Name, Permission type
/system-users/permissions/edit/{id} — editor:
- General: Template ID, Name, Display "Client" string, Permission type
- Matriz: filas = módulos del alcance; columnas = View, Add, Edit, Delete, Import, Export
- Plantilla asignada a usuarios en Módulo 5
- Módulo 1 consume matriz para policies runtime
Módulos en matriz (alcance)
| Módulo |
Clave sugerida |
| Clients |
clients |
| Client Users |
client_users |
| AI Analysis |
ai_analysis |
| Agents |
agents |
| IA Models |
ia_models |
| IA Prompts |
ia_prompts |
| IA Rubrics |
ia_rubrics |
| IA Pipeline / Calls |
ia_pipeline |
| System Users |
system_users |
| Permission Templates |
permission_templates |
Requerimientos de Frontend (Blazor/Radzen)
| Pantalla |
Archivo |
Estado |
| Listado |
Pages/SystemUsersPermissions.razor |
✅ Mock |
| Editor matriz |
Pages/EditPermissionTemplate.razor |
✅ Mock avanzado |
Requerimientos de Backend y Base de Datos
permission_templates
permission_template_modules: template_id, module_key, can_view, can_add, can_edit, can_delete, can_import, can_export
- API CRUD plantillas
AuthorizationHandler genérico
Dependencias
- Módulo 1 (consumidor de matriz)
- Módulo 5 (asignación a usuarios)