diff --git a/Admin.md b/Admin.md index de07afc..9ce18cd 100644 --- a/Admin.md +++ b/Admin.md @@ -23,6 +23,8 @@ Sustenta o painel administrativo e parte do painel supervisor: O fluxo do agente virtual e a configuracao de triagem ficam no modulo `knowledge-base`, mantendo o prefixo `/admin/knowledge` por compatibilidade. A agenda de contatos fica no modulo `contacts`, mantendo o prefixo `/contacts` por compatibilidade. + +Presenca e notas do atendente ficam no modulo `agent`, mantendo os prefixos `/agent/presence` e `/agent/notes`. ## Endpoints principais diff --git a/Agent.md b/Agent.md index 423191b..725900c 100644 --- a/Agent.md +++ b/Agent.md @@ -1,57 +1,82 @@ -# Modulo Agente - -O backend do agente esta dentro de `src/modules/admin`, dividido em presenca e notas. - -## Presenca do agente - -Arquivos: - -- `agent-presence.controller.ts` -- `agent-presence.service.ts` - -Prefixo: - -```txt -/agent/presence -``` - -### Endpoints - -| Metodo | Rota | Descricao | -|---|---|---| -| GET | `/agent/presence` | Lista presenca dos agentes | -| GET | `/agent/presence/me?userId=` | Retorna presenca de um agente | -| POST | `/agent/presence/pause` | Marca agente como pausado | -| POST | `/agent/presence/resume` | Retoma agente | -| POST | `/agent/presence/offline` | Marca agente como offline | - -### Regras - -- Pausar move atendimentos do agente para fila e cria reserva temporaria. -- Retomar tenta recuperar atendimentos reservados ainda livres. -- Offline remove reserva e evita atribuicao direta. - -## Notas do agente - -Arquivos: - -- `agent-notes.controller.ts` -- `agent-notes.service.ts` - -Prefixo: - -```txt -/agent/notes -``` - -### Endpoints - -| Metodo | Rota | Descricao | -|---|---|---| -| GET | `/agent/notes?userId=` | Lista notas do agente | -| POST | `/agent/notes` | Cria nota | -| DELETE | `/agent/notes/:id?userId=` | Remove nota | - -## Code review - -Hoje `userId` vem por query/body. Em producao, deve sair do JWT validado no backend. +# Modulo Agente + +Modulo responsavel por presenca operacional do agente e notas pessoais do atendente. + +## Base tecnica + +- Module: `src/modules/agent/agent.module.ts` +- Presence Controller: `src/modules/agent/agent-presence.controller.ts` +- Presence Service: `src/modules/agent/agent-presence.service.ts` +- Presence Repository: `src/modules/agent/repositories/agent-presence.repository.ts` +- Notes Controller: `src/modules/agent/agent-notes.controller.ts` +- Notes Service: `src/modules/agent/agent-notes.service.ts` +- Notes Repository: `src/modules/agent/repositories/agent-notes.repository.ts` +- DTOs: `src/modules/agent/dto/agent.dto.ts` + +## Responsabilidades + +- Controlar status do agente: `available`, `paused`, `offline`. +- Liberar atendimentos do agente quando ele pausa. +- Restaurar atendimentos reservados quando ele retoma. +- Marcar agente offline e devolver atendimentos para fila. +- Gerenciar notas pessoais do agente. + +## Presenca do agente + +Prefixo: + +```text +/agent/presence +``` + +| Metodo | Rota | Perfis | Descricao | +|---|---|---|---| +| GET | `/agent/presence` | Admin, Supervisor | Lista presenca dos agentes | +| GET | `/agent/presence/me` | Admin, Supervisor, Agente | Retorna presenca do usuario autenticado | +| POST | `/agent/presence/pause` | Admin, Supervisor, Agente | Pausa o usuario autenticado | +| POST | `/agent/presence/resume` | Admin, Supervisor, Agente | Retoma o usuario autenticado | +| POST | `/agent/presence/offline` | Admin, Supervisor, Agente | Marca o usuario autenticado como offline | + +O parametro/body `userId` pode continuar vindo do frontend por compatibilidade, mas o backend usa o usuario autenticado no JWT. + +## Notas do agente + +Prefixo: + +```text +/agent/notes +``` + +| Metodo | Rota | Perfis | Descricao | +|---|---|---|---| +| GET | `/agent/notes` | Admin, Supervisor, Agente | Lista notas do usuario autenticado | +| POST | `/agent/notes` | Admin, Supervisor, Agente | Cria nota para o usuario autenticado | +| DELETE | `/agent/notes/:id` | Admin, Supervisor, Agente | Remove nota do usuario autenticado | + +O parametro/body `userId` pode continuar vindo do frontend por compatibilidade, mas o backend usa o usuario autenticado no JWT. + +## Arquitetura interna + +```text +Controller -> Service -> Repository -> DatabaseService +``` + +- Controller: rotas, roles, Swagger, DTOs e usuario autenticado. +- Service: regra de negocio e validacao de usuario. +- Repository: SQL de `agent_presence`, `agent_notes` e reserva/liberacao de atendimentos. +- DatabaseService: pool PostgreSQL e transacoes. + +## Banco + +O modulo nao cria schema em runtime. + +As tabelas/colunas devem existir via migrations: + +- `008_agent_notes.sql` +- `015_agent_presence_pause.sql` + +## Code review + +- Presenca e notas sairam de `admin` porque sao dominio operacional do agente. +- Acoes pessoais usam `@CurrentUser()` e JWT, nao `userId` vindo do cliente. +- `AgentPresenceService` e usado pelo `AttendanceAssignmentService` para impedir atribuicao a usuario indisponivel. diff --git a/Whatsapp.md b/Whatsapp.md index c13c1a7..d9d1beb 100644 --- a/Whatsapp.md +++ b/Whatsapp.md @@ -9,6 +9,7 @@ Base tecnica: - Contacts Service: `src/modules/contacts/contacts.service.ts` - Attendance Assignment: `src/modules/attendance/attendance-assignment.service.ts` - Attendance Repository: `src/modules/attendance/repositories/attendance-assignment.repository.ts` +- Agent Presence: `src/modules/agent/agent-presence.service.ts` - Gateway: `src/modules/whatsapp/whatsapp.gateway.ts` - Prefixo: `/whatsapp` @@ -70,6 +71,7 @@ Fila, atribuicao, transferencia, fechamento e triagem do atendimento ficam no mo - Impede envio quando atendimento ativo aguarda resposta do cliente. - Roteia conversas por area, fluxo configurado ou arvore do bot. - Monta observacao de transferencia do Agente Virtual. +- Consulta `AgentPresenceService` antes de atribuir atendimento a um usuario. - Nao cria/altera schema em runtime; `whatsapp_chat_atribuicoes` deve ser mantida pelas migrations. ### `attendance-assignment.repository.ts`