feat: Fase 9/10 — métricas, scripts operacionais, callback/wrap-up e aceite final

Fase 9 (segurança e produção):
- GET /api/metrics: endpoint Prometheus com métricas reais (chamadas,
  agentes, filas, CPS por campanha), protegido por permissão
- scripts/backup.sh, restore.sh, healthcheck.sh, install.sh, update.sh —
  testados contra o ambiente real (backup.sh e healthcheck.sh rodados de
  verdade; install.sh/update.sh validados por inspeção, ambiente atual já
  provisionado)
- POST /api/agent-console/dispose: aplica disposição de chamada de verdade
  (lacuna deixada aberta desde a Fase 6), com ações CALLBACK (agenda
  retorno) e DO_NOT_CALL (suprime automaticamente)
- apps/dialer-worker/src/callback-sweep.ts: reativa leads com callback
  vencido; GET /api/callbacks para consulta
- apps/dialer-worker/src/wrap-up-sweep.ts: transição automática
  WRAP_UP -> AVAILABLE + despausa real na fila do Asterisk. Exigiu corrigir
  main.ts para conectar ao AMI mesmo em DIALER_SIMULATION=true
  (DIALER_SIMULATION deve impedir só originação de chamada, não ações
  administrativas de fila)
- nftables revisado (sem alterações necessárias)
- Documentação completa: INSTALL, OPERATIONS, BACKUP_RESTORE, SECURITY,
  DATABASE, API, ASTERISK, OPENSIPS (não implementado, motivo
  documentado), TROUBLESHOOTING
- README.md e CHANGELOG.md reescritos

Fase 10 (testes e aceite):
- Quality gate completo executado: build/typecheck (7 workspaces), lint,
  46 testes unitários, docker compose config/ps, healthcheck — tudo verde
- Aceite de segurança (seção 92): 13 itens verificados ao vivo contra o
  sistema real, não só por inspeção de código
- Aceite Asterisk (seção 93): os 5 comandos executados e documentados,
  comunicação API->AMI->Asterisk validada
- docs/RELATORIO_FINAL.md: relatório final no formato da seção 96

Todos os fixtures de teste desta fase foram removidos/desativados ao
final. Credenciais de acesso entregues separadamente em CREDENCIAIS.txt
(fora do git, nunca versionado).
This commit is contained in:
2026-08-27 19:16:14 -03:00
parent 6273b32214
commit 80e72881b2
33 changed files with 2024 additions and 39 deletions

83
README.md Normal file
View File

@@ -0,0 +1,83 @@
# B2BCall
Plataforma de discagem preditiva / call center — monorepo TypeScript
(Next.js + NestJS + PostgreSQL + Redis + Asterisk 22/PJSIP), construída e
testada de ponta a ponta contra containers reais.
## Stack
- **Frontend**: Next.js 15 (App Router), React 19, Tailwind CSS v4.
- **Backend**: NestJS 11 (Fastify), Prisma ORM.
- **Banco**: PostgreSQL 17 (schemas `public` + `asterisk`).
- **Cache/coordenação**: Redis 7 (CPS limiter, lock distribuído, EWMA de
pacing).
- **Telefonia**: Asterisk 22.10.1 (PJSIP, AMI, ARI, Realtime via ODBC).
- **Infra**: Docker Compose, Nginx (reverse proxy único), nftables.
## Início rápido
```bash
git clone <url> /opt/b2bcall
cd /opt/b2bcall
sudo ./scripts/install.sh
```
Ao final, a URL de acesso e o caminho do `FIRST_LOGIN.txt` (credenciais do
primeiro acesso) são impressos no terminal. Detalhes em
[`docs/INSTALL.md`](docs/INSTALL.md).
## Documentação
| Documento | Conteúdo |
|---|---|
| [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) | Decisões de arquitetura, estrutura do monorepo, rede |
| [`docs/INSTALL.md`](docs/INSTALL.md) | Instalação passo a passo |
| [`docs/OPERATIONS.md`](docs/OPERATIONS.md) | Operação do dia a dia, atualização, escala |
| [`docs/BACKUP_RESTORE.md`](docs/BACKUP_RESTORE.md) | Backup e restore |
| [`docs/SECURITY.md`](docs/SECURITY.md) | Postura de segurança e checklist de aceite |
| [`docs/DATABASE.md`](docs/DATABASE.md) | Modelo de dados e decisões de schema |
| [`docs/API.md`](docs/API.md) | Referência de rotas da API |
| [`docs/ASTERISK.md`](docs/ASTERISK.md) | Configuração e diagnóstico do Asterisk |
| [`docs/OPENSIPS.md`](docs/OPENSIPS.md) | Por que não foi implantado nesta fase |
| [`docs/PREDICTIVE_DIALER.md`](docs/PREDICTIVE_DIALER.md) | Algoritmo do discador preditivo |
| [`docs/TROUBLESHOOTING.md`](docs/TROUBLESHOOTING.md) | Problemas reais encontrados e soluções |
| [`docs/RELATORIO_FINAL.md`](docs/RELATORIO_FINAL.md) | Relatório final de aceite do projeto |
| [`CHANGELOG.md`](CHANGELOG.md) | O que foi entregue em cada fase |
| [`TODO.md`](TODO.md) | Checklist detalhado, item a item, com notas de teste |
## Estrutura
```text
apps/
frontend Next.js — interface web completa
api NestJS — REST, autenticação, RBAC, telefonia, relatórios
dialer-worker Motor do discador preditivo
asterisk-events Conector AMI dedicado (eventos → Postgres/Redis)
packages/
database Schema Prisma + migrations
shared Utilitários compartilhados (permissões, criptografia)
telephony Client AMI/ARI próprio
infrastructure/
asterisk Configuração do Asterisk
nginx Reverse proxy
postgres Scripts de inicialização (schemas public + asterisk)
docker Dockerfiles
nftables Regras de firewall
scripts/ install.sh, update.sh, backup.sh, restore.sh, healthcheck.sh
```
## Desenvolvimento
```bash
pnpm install
pnpm -r build # build de todos os pacotes/apps
pnpm -r test # testes unitários (dialer-worker + api)
pnpm --filter @b2bcall/api lint
```
## Ambiente de referência
Construído e validado em Debian 13 (trixie), 2 vCPU / 1.9 GiB RAM — ver
`docs/ARCHITECTURE.md` §1 para as implicações dessa restrição nas decisões
de arquitetura. Recomendado 4 vCPU / 8 GiB RAM para produção com volume
real de discagem.