Busca e Filtros
AuditorIA indexa cada llamada por decenas de criterios. Esta guía cubre las tres vías de búsqueda (rápida, por tarjeta y historial completo) y cómo combinarlas para encontrar exactamente la llamada que necesitás.
Búsqueda rápida por tarjeta
Desde el Dashboard, las tarjetas de acceso rápido lanzan búsquedas pre-filtradas:
| Tarjeta | Filtro aplicado |
|---|---|
| Buscar por campaña | campaign_id específico |
| Buscar por operador | operator_id o nombre |
| Buscar por fecha | Rango de fechas con date-picker |
| Buscar por dirección | Dirección telefónica o geografía |
| Ver audios problemáticos | Negatividad o discurso de odio > umbral |
Al entrar a una tarjeta, te pedirá el criterio concreto. Ejemplo de Buscar por campaña:

Ingresá el ID y clickeá Confirmar. El sistema arma la query con los índices compuestos (campaign_id, date) para respuestas rápidas aún sobre millones de registros.
Listado de resultados
Los resultados se muestran en una tabla densa con paginación server-side.

Columnas
| Columna | Qué muestra |
|---|---|
| ☐ | Checkbox para selección masiva |
| Ticket | ID del ticket interno (ej. 16722762) |
| Campaña | ID numérico de campaña |
| Usuario | operator_id del agente |
| Fecha | Fecha de la llamada |
| Hora | Hora local |
| Nombre del archivo | Nombre original del .mp3 |
| Estado | Badge: Listo para procesar, Transcribir audio, Audio no encontrada |
Estados del ticket
| Estado | Significado |
|---|---|
| Listo para procesar | Audio disponible, tarea no creada aún |
| Transcribir audio | Hover → CTA para lanzar transcripción manual |
| Audio no encontrada | El archivo no está en MinIO (borrado, nunca subido, rotado) |
Controles de paginación
- Grabaciones por página: 10, 25, 50 o 100.
- Navegación:
<>+ input de número de página. - Contador: "0 de 1816 filas seleccionadas" + "Página 179 de 182" en la esquina inferior.
Performance
El backend usa range queries (date >= :start AND date < :end) sobre índices compuestos — el filtro por fecha es O(log n) aún en tablas con decenas de millones de filas. Ver nota de arquitectura.
Historial completo y filtros combinados
Desde la barra lateral → Dashboard > Historial accedés a la vista avanzada con todos los filtros disponibles.
Filtros disponibles
| Filtro | Tipo | Detalle |
|---|---|---|
| Estado | Multi-select | pending, processing, completed, error, approved, rejected |
| Rango de fechas | Date picker | Inicio / fin, presets (hoy, 7d, 30d, custom) |
| Campaña | Multi-select | Respeta permisos de usuario |
| Operador | Autocomplete | Por nombre o operator_id |
| Motor | Select | whisperx / openai / deepgram |
| Dirección | Radio | entrante / saliente / cualquiera |
| Duración | Range slider | 0s a 2h |
| Puntaje | Range | 0 a 100 |
| Sentimiento | Multi-select | positive / neutral / negative |
| Etiquetas (tags) | Chips | Filtro por tags generados por GPT |
| Texto libre | Input | Búsqueda full-text en la transcripción |
Combinar filtros
Ejemplo: tareas completadas de la campaña 162, del operador 1897, de los últimos 30 días, con sentimiento negativo, ordenadas por puntaje descendente.
Persistencia
Los filtros se guardan en la URL (?status=completed&campaign=162&...) para poder compartir la vista por enlace.
Búsqueda por texto completo
El campo Búsqueda por texto busca dentro del contenido transcrito.
Operadores soportados
| Operador | Ejemplo | Comportamiento |
|---|---|---|
| AND implícito | cancelar servicio | Ambas palabras en el mismo segmento |
OR | refund OR devolución | Cualquiera de las dos |
"..." | "número de cliente" | Frase exacta |
- | ventas -spam | Excluye el término |
~ | factura~ | Fuzzy search (tolera typos) |
Motor de búsqueda
Los textos se indexan en PostgreSQL usando tsvector + GIN indexes para búsqueda en sub-segundo hasta ~10M de segmentos.
Ordenamiento
Clic en el encabezado de la columna para alternar asc/desc. Se soporta orden compuesto sosteniendo Shift al clickear.
| Columna | Orden | Uso típico |
|---|---|---|
| Fecha | DESC por default | Ver lo más reciente primero |
| Puntaje | ASC | Detectar auditorías fallidas |
| Duración | DESC | Identificar llamadas anormalmente largas |
| Operador | ASC alfabético | Agrupar por agente |
Selección masiva y acciones batch
- Usá el checkbox del encabezado para Seleccionar todo en la página.
- O marcá tareas individuales.
- Aparece una barra de acciones flotante:
| Acción | Comportamiento |
|---|---|
| Aprobar todas | Marca como aprobadas las seleccionadas |
| Reenviar | Reprocesa las seleccionadas (mismo o diferente engine) |
| Exportar | Descarga CSV con las filas seleccionadas |
| Asignar campaña | Reasocia las tareas a otra campaña |
| Archivar | Mueve al archivo histórico |
Límites
- Batch máximo: 500 tareas por acción (config. del tenant).
- Reenviar en batch reencola en Redis y puede saturar workers: hacelo fuera de horario pico.
Exportar
Desde el listado filtrado:
- Aplicá los filtros deseados.
- Clic en Exportar.
- Elegí formato:
- CSV (Excel-ready, con BOM UTF-8).
- XLSX (nativo de Excel, con estilos).
- JSON (objeto por tarea con toda la metadata).
- El archivo se descarga con el nombre
auditoria-export-YYYY-MM-DD-HHmm.ext.
El export respeta los filtros activos. Si seleccionás filas, se exportan solo las seleccionadas; si no, se exportan todas las que cumplan los filtros.
Performance
- Índices compuestos clave:
(operator_id, date),(campaign_id, date)encall_logs. - Range queries para fechas:
date >= :start AND date < :end(noDATE(col) = :val, que no usa índices). - Paginación server-side:
LIMIT/OFFSETconWHEREacotado, no trae millones de filas al cliente. - Full-text search en PostgreSQL con
tsvector, refrescado enINSERT/UPDATEde transcripciones.
Troubleshooting
| Problema | Causa | Solución |
|---|---|---|
| "0 resultados" con filtros razonables | Rango de fechas en zona horaria incorrecta | Verificar TZ en perfil (es-AR = GMT-3) |
| Paginación devuelve siempre la misma página | Cache del navegador agresivo | Hard refresh (Ctrl + Shift + R) |
| Export > 100k filas tarda mucho | Backend lo procesa en background | Esperar a notificacao quando estiver pronto |
| Full-text no encuentra términos obvios | Transcripción aún no indexada (async) | Reintentar en 1-2 min |