feat(frontend): Relatórios > Consumo (tenant)

GET /reports/consumo agrega os 2 ledgers imutáveis de uso (UsageEvent +
AIUsageRecord — os mesmos que o RatingEngine usa pra faturar) por meter/tipo no mês
corrente: chamadas, minutos, dias ativos, armazenamento de gravação, tokens de IA.
Nunca calcula valor em dinheiro (isso é billing/RatingEngine, platform-only) —
decisão deliberada pra não duplicar essa lógica fora dele. Devolve também os limites
do plano (maxMonthlyCalls/maxRecordingStorageGb) pra comparação.

Tela /app/relatorios/consumo reaproveita o InstrumentTile do dashboard, zeros
honestos em vez de esconder seção. Testado ponta a ponta contra o tenant Acme real
(2 dias-tronco já ledgerados aparecem certos, resto zerado por não ter chamada
rodada ainda).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BFaBaBSQGhyXGEgtTYZGV8
This commit is contained in:
2026-08-30 08:22:34 -03:00
parent 2fb5010283
commit de0b632fc9
7 changed files with 196 additions and 1 deletions

16
TODO.md
View File

@@ -1540,6 +1540,22 @@ Usuários (agente.md secao 169)
lista de callbacks, volta pra `READY`), lead de teste removido no
final
## PHASE 42 — Relatórios > Consumo (tenant, agente.md secao 131-132, 169)
- [x] `GET /reports/consumo` — lê os 2 ledgers imutáveis (`UsageEvent` +
`AIUsageRecord`, os mesmos que o RatingEngine usa pra faturar) e
agrega por meter/tipo no período (default: mês corrente). Nunca
calcula valor em dinheiro — só quantidade bruta (chamadas, minutos,
dias ativos, bytes, tokens), decisão deliberada pra não duplicar o
trabalho do RatingEngine fora dele (docs/BILLING.md). Também
devolve os limites do plano (`maxMonthlyCalls`/
`maxRecordingStorageGb`) pra comparação lado a lado
- [x] Tela `/app/relatorios/consumo` — reaproveita `InstrumentTile` (o
mesmo mostrador do dashboard), zeros honestos em vez de esconder
seção
- [x] Testado ponta a ponta: curl retornou os números reais do tenant
Acme (2 dias-tronco já ledgerados, resto zerado — nenhuma chamada
rodou ainda neste tenant), tela renderizando os mesmos números
---
## Riscos conhecidos