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:
@@ -77,3 +77,27 @@ export interface AIDashboardReport {
|
||||
topAgents: { agentId: string; name: string; avgScore: number; calls: number }[];
|
||||
bottomAgents: { agentId: string; name: string; avgScore: number; calls: number }[];
|
||||
}
|
||||
|
||||
export interface ConsumoReport {
|
||||
period: { from: string; to: string };
|
||||
usage: {
|
||||
callCount: number;
|
||||
callSeconds: number;
|
||||
extensionActiveDays: number;
|
||||
agentActiveDays: number;
|
||||
trunkActiveDays: number;
|
||||
recordingBytes: number;
|
||||
};
|
||||
aiUsage: {
|
||||
transcriptionSeconds: number;
|
||||
analysisRequests: number;
|
||||
inputTokens: number;
|
||||
outputTokens: number;
|
||||
};
|
||||
limits: {
|
||||
maxMonthlyCalls: number | null;
|
||||
maxRecordingStorageGb: number | null;
|
||||
callCountUsedRatio: number | null;
|
||||
recordingStorageUsedRatio: number | null;
|
||||
} | null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user