- packages/database: Agent, AgentSession, AgentStateEvent, AgentPauseEvent,
PauseReason, Queue, QueueMember (agente.md secao 53)
- apps/api/src/queues: CRUD de filas gerando queues.conf pelo mesmo padrao
do dialplan (arquivo compartilhado + module reload app_queue.so), mas
SEM membros estaticos no arquivo — membership eh 100% dinamica via AMI
(evita duas fontes de verdade conflitantes)
- apps/api/src/pause-reasons: CRUD de motivos de pausa
- apps/api/src/agents: CRUD administrativo de agentes (1:1 com User)
- apps/api/src/agent-console: maquina de estados do agente
(LOGGED_IN/AVAILABLE/PAUSED), 'tela do agente' via
login/available/pause/unpause/logout, cada transicao aciona AMI
QueueAdd/QueuePause/QueueRemove de verdade e registra
agent_state_events/agent_pause_events com inicio/fim
- apps/api/src/monitoring: GET /api/monitoring/queues (chamadas
aguardando, agentes logados/pausados/disponiveis via AMI QueueStatus ao
vivo) — metricas historicas (TME/TMA/SLA) ficam para a Fase 7
Testado ponta a ponta contra o Asterisk real: fila criada aparece via
'queue show'; agente loga, fica disponivel (QueueAdd confirmado, membro
dinamico visivel), pausa com motivo (confirmado 'paused:Almoco' ao vivo),
despausa, desloga (QueueRemove confirmado, fila volta a 'No Members').
Disposicoes de chamada e Callback adiados para a Fase 6 (dependem de
haver chamadas de campanha reais para classificar).