feat(api,web): detalhamento da carteira do representante
Tela dedicada que abre pelo botao "Detalhar carteira" na listagem de clientes, com leitura acionavel da carteira em vez de so uma tabela. - `/reports/carteira` passa a devolver `faturamentoTotal`, `participacaoPct` e `faturamentoRepTotal`, permitindo medir o peso de cada cliente no faturamento do rep. - `CarteirePage`: cards de resumo (ativos / em risco / inativos / sem pedido), faturamento total e InsightCards que apontam concentracao em poucos clientes, maior cliente em risco, maior inativo e clientes nunca positivados. - Clientes classificados por dias sem comprar (30d em risco, 60d inativo), com navegacao direta para a ficha. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -30,6 +30,8 @@ export const CarteiraClienteSchema = z.object({
|
||||
diasSemPedido: z.number().nullable(),
|
||||
totalPedidos: z.number(),
|
||||
ticketMedio: z.string(),
|
||||
faturamentoTotal: z.string(),
|
||||
participacaoPct: z.number(),
|
||||
});
|
||||
export type CarteiraCliente = z.infer<typeof CarteiraClienteSchema>;
|
||||
|
||||
@@ -39,6 +41,7 @@ export const ReportCarteiraResponseSchema = z.object({
|
||||
inativos30: z.number(),
|
||||
inativos60: z.number(),
|
||||
semPedido: z.number(),
|
||||
faturamentoRepTotal: z.string(),
|
||||
});
|
||||
export type ReportCarteiraResponse = z.infer<typeof ReportCarteiraResponseSchema>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user