Indicador (KPI)
KpiSchema é um cartão de KPI: fundo colorido sólido, um ícone, um
título, um valor grande e uma legenda.
iconé o nome de um ícone do Google Material Symbols (ex:bar_chart,attach_money,warning) ou"none"— o seletor de ícone do painel busca tanto pelo nome técnico quanto por um rótulo em linguagem natural nolocaleativo.title/value/subtitlesão texto comum (mesma sintaxe{path}/{FUNÇÃO(...)}de um campo de texto solto) — semBindingpróprio, resolvidos direto contra o documento inteiro na hora de gerar.
Estilo
titleFontSize/valueFontSize/subtitleFontSize/iconSize(pt) — cada um cai no tamanho fixo original do cartão quando ausente (8/20/8/14pt), então templates existentes nunca mudam de aparência.borderRadius(0–100, uma porcentagem) — arredondamento de canto relativo ao lado menor do próprio cartão (0 = cantos retos, 100 = "pílula" cheia). Default de ~16%, batendo com o raio fixo original de 8pt do cartão no tamanho padrão.
Elementos opcionais
title/value/subtitle são opcionais — remover qualquer um deles (ou
o ícone, com icon: "none") simplesmente não desenha, no editor e no
PDF gerado. Selecione o cartão sozinho (sem seleção múltipla) e a aba
Campos mostra seus 4 sub-elementos — ícone/título/valor/legenda — cada
um com um botão "+"/lixeira pra adicionar de volta ou remover.
Posição própria, trava e reset
Cada sub-elemento pode ser arrastado pra uma posição própria no canvas,
independente dos outros três — guardada em iconOffset/titleOffset/
valueOffset/subtitleOffset ({ x, y } em mm, relativo ao canto
superior-esquerdo do cartão). Ausente, um sub-elemento usa o layout fixo
original do cartão — todo template existente mantém a aparência exata.
Um sub-elemento nasce travado (iconLocked/titleLocked/
valueLocked/subtitleLocked, ausente ou true = travado) — clique no
cadeado dele na lista de sub-elementos da aba Campos pra destravar antes
de arrastar. Clicar num sub-elemento (na aba Campos ou direto no canvas)
foca ele: a aba Estilo passa a mostrar só os controles DAQUELE elemento
(tamanho de fonte, seletor de ícone, formato de número...), com um link
"← Estilo do card" pra voltar ao estilo do cartão inteiro e, quando ele
já tem posição própria, um botão "Redefinir posição" que limpa o offset
e volta pro layout padrão.
Formato do número
numberFormat (aba Dados) reformata o value quando ele resolve pra
um número puro — nunca toca em texto com prefixo/sufixo (ex: "R$ 42"
não é um número puro, então fica intocado):
numberFormat | Exemplo |
|---|---|
"none" (default) | Mostra o valor resolvido exatamente como está. |
"plain" | 10000 — vírgula decimal se o número tiver uma, sem separador de milhar. |
"grouped" | 10.000 — igual, com separador de milhar. |
Vínculo a um array (agregação)
O value de um KPI é um template livre por padrão (mesma sintaxe
{path}/{FUNÇÃO(...)} de texto). Ele pode ser vinculado direto a um
array — mesma ideia de um gráfico — via um Binding do tipo kpi:
const binding: Binding = {
schemaName: "total_vendas",
type: "kpi",
path: "vendasPorAgente",
valueColumn: "value", // ignorado quando aggregation é "count"
aggregation: "sum", // "sum" | "count" | "avg" | "min" | "max"
filters: [[{ column: "status", op: "eq", value: "fechado" }]], // opcional, mesma forma do gráfico
};
Quando existe um vínculo kpi pra um cartão, ele sobrescreve o
template livre de value inteiramente — o número agregado vira o
valor, title/subtitle não são afetados. Sem vínculo kpi, o
cartão se comporta exatamente como antes (value livre).
Edição em bloco na seleção múltipla
Selecionar vários cartões KPI juntos (Ctrl/Cmd+clique) libera
editar em bloco o Estilo compartilhado (cor, tamanhos de fonte,
ícone, arredondamento de borda — aplica em todos os selecionados de
uma vez); o conteúdo de Dados de cada cartão (título/valor/legenda)
fica travado pra evitar sobrescrever o texto próprio de cartões
diferentes, exceto numberFormat, que é compartilhado e continua
editável.