14. Painéis e construtor
Como montar consultas sem escrever código e colocá-las num painel.
O construtor tem quatro camadas, e a ordem importa.
O construtor, passo a passo
A tela (menu Análise ▸ Construtor) tem quatro abas: 1. Consultas, 2. Widgets, Itens lógicos e Atalho: perguntar. Montar exige painel:montar.
1. Consulta: aba 1. Consultas → Nova consulta → Sobre o quê? (a fonte) → Quais registros? (condições com E/OU, ou um item lógico salvo) → O que quero ver? (contar registros, somar, média, mínimo, máximo ou listar; agrupar é opcional) → Confira o resultado → Dê um nome e guarde (Código, Nome) → Salvar consulta.
2. Widget: aba 2. Widgets → Novo widget → os seis passos descritos em 4. Widget, abaixo → Criar widget.
3. Levar ao painel: em Painéis, colocar widget ou do banco de widgets.
4. Item lógico: aba Itens lógicos → Novo item lógico → código, nome, fonte, descrição e as condições → Salvar item.
5. Atalho: perguntar faz consulta, widget e bloco de uma vez, e guarda só se você quiser.
Nas listas, o lápis (ou Editar) abre para mudar, o ícone de cópia abre um duplicado para ajustar sem tocar no original — e o botão de gravar da cópia diz Criar cópia, porque grava um novo e deixa o original como está. A lixeira pergunta antes de apagar: a pergunta diz o que se perde, o que fica e o que a tela sabe que depende do item (a consulta desenhada por widgets, o item lógico citado por consultas), com o foco no Cancelar e o Esc para desistir; só Excluir apaga. Widget que está em algum painel não se apaga direto: a recusa aparece na própria pergunta, que passa a oferecer Retirar dos painéis e apagar. A fonte de um item lógico não se troca depois de criado, nem na cópia.
1. Condição
Compara um campo com um valor. O operador vem do tipo do campo: quem escolhe uma data recebe antes de, entre, nos últimos N dias; quem escolhe uma severidade recebe é, está entre. Comparação impossível não chega a ser oferecida.
2. Item lógico
Um conjunto de condições ligadas por E/OU, salvo com nome próprio. É a peça que justifica o resto.
Defina "achado crítico em aberto" uma vez e cite-o em quantos widgets precisar. No dia em que a organização mudar o que entende por crítico, você muda num lugar e todos os painéis acompanham. Copiado dentro de cada widget, o mesmo conceito envelheceria diferente em cada um, e dois widgets do mesmo painel passariam a dar respostas diferentes para a mesma pergunta.
Um item lógico pode citar outro, o que permite compor conceitos.
3. Consulta
Fonte, filtro e agregação — contar, somar, média, mínimo, máximo ou listar, com agrupamento opcional. A cadeia de E/OU faz parte da consulta: dentro dela você monta o grupo — todas as condições precisam ser verdadeiras, ao menos uma precisa ser verdadeira, inverter o grupo —, acrescenta subgrupos e cita itens lógicos salvos. A prévia mostra o resultado enquanto você monta.
A consulta se salva com nome e entra na lista, para ser escolhida depois em quantos widgets precisar. O item lógico e o filtro próprio da consulta valem juntos: assim você reaproveita o conceito e ainda restringe a um escopo sem duplicar a definição.
4. Widget
A consulta com uma forma de aparecer, e regras de cor. Em Construtor ▸ 2. Widgets ▸ Novo widget, em seis passos e na mesma ordem da consulta:
1. Qual consulta? — o dado já montado e salvo. O widget só o veste.
2. Como mostrar? — só os visuais que servem ao formato daquela consulta. Oferecer pizza para um valor único seria oferecer o que não desenha.
3. Como se lê, e o que obedece — prefixo, sufixo, casas decimais, faixa do medidor, e se o widget dispensa o filtro do painel.
4. Cores por faixa de valor — avaliadas de cima para baixo; a primeira que casar decide.
5. Confira como ficou — desenhado com o dado de verdade, e não com exemplo.
6. Dê um nome e guarde — código e nome por último, quando já se sabe o que o widget mostra.
A mesma consulta pode virar um número num painel e uma rosca em outro. O botão de duplicar no cartão do widget é o "salvar como" de quem quer o mesmo dado noutro visual.
Por que o nome vem no fim. Pedir código e nome antes de existir o que nomear obriga a pessoa a descrever algo que ela ainda não viu — e o que sai daí é W-1, W-2, W-3. Depois da prévia, o nome se escreve sozinho.
A consulta devolve | Visuais |
|---|---|
valor único | número, semáforo, medidor, medidor em arco, barra de progresso |
série agrupada | barras, horizontais, empilhadas, linha, área, pizza, rosca |
listagem | tabela, grade |
As regras de cor são avaliadas de cima para baixo e a primeira que casa decide. A ordem é sua: "acima de 10 é crítico, acima de 5 é alerta, o resto está bem" só funciona nessa sequência.
A cor é semântica — bem, atenção, alerta, crítico — e não uma cor escolhida à mão, para que o painel continue legível nos três temas.
Painéis, passo a passo
Os painéis aparecem como fichas no alto da tela; rascunho marca o que não foi publicado. Quem só lê vê apenas os publicados. Criar, montar e publicar exige painel:publicar.
1. Novo painel → código, Nome do painel, Descrição e ao menos um dos Blocos fixos (Indicadores, Por severidade, Por estado, Por escopo, Por norma, Auditorias) → Criar.
2. Em Widgets do painel: colocar widget → escolha um widget… → Colocar no fim; ou do banco de widgets, que abre o banco com este painel como destino. Arraste para posicionar; arrumar reflui tudo num modelo; o seletor ao lado define de quanto em quanto tempo o painel se refaz (só ao abrir até 15 min).
3. Publicar (ou Despublicar). Publicado, a caixa no menu e a pasta decidem onde ele aparece no grupo Gestão; + nova pasta… cria a pasta na hora.
4. Filtro do painel: 30 dias, 90 dias, 12 meses, ou De e Até, o Alvo e, quando algum quadro separa por auditoria, a Auditoria → aplicar; salvar como padrão fixa o filtro com que o painel abre; limpar desfaz. O quadro cuja fonte não separa por auditoria aparece em não respondem — ver por quê: ele soma todas.
5. A lixeira da barra remove o painel, depois de perguntar: a pergunta avisa se ele está publicado, quantos widgets mostra e de quantos murais é parada. Os widgets continuam no banco. A lixeira de um quadro dentro do painel também pergunta antes de tirá-lo — o widget fica no banco, mas a posição e o tamanho não voltam.
Clicar num número ou numa barra abre a gaveta com os registros por trás dele.
O painel
Grade de doze colunas. Cada painel declara de quanto em quanto tempo se refaz: painel pendurado na parede precisa se atualizar sozinho, painel de análise não.
A disposição é livre. Ao arrastar um widget, a grade mostra os destinos que existem:
Solte sobre | Acontece |
|---|---|
outro widget | os dois trocam de lugar |
um espaço vazio da linha | o widget ocupa aquele espaço |
a faixa tracejada entre linhas | abre uma linha nova e empurra o resto para baixo |
Só aparecem como destino os espaços que cabem o widget arrastado: oferecer um vão de três colunas a um widget de seis seria prometer uma posição que a grade recusa.
Largura e altura saem do menu do próprio widget, em frações que se entendem sem contar colunas. O botão arrumar reflui todos num modelo pronto, mantendo a ordem em que já estão.
Não existe campo de SQL em lugar nenhum, de propósito: quem monta painel não é quem administra o banco.
Painéis de fábrica
Toda instalação nasce com dois painéis publicados, entregues uma vez a cada tenant — o que o tenant editar ou apagar depois não volta:
Painel |
|
|---|---|
Painel de gestão (GESTAO) | os blocos fixos de partida: indicadores, achados por severidade e por estado, por escopo e por norma. Só nasce no tenant que ainda não tem painel nenhum |
Consolidação por área e equipe (P-CONSOLIDACAO) | uma auditoria de vários alvos lida por área (o alvo de cima) e por equipe: pontuação por área e por equipe, perguntas divergentes, a distribuição das respostas consolidadas e o mapa pergunta × equipe. Escolha a auditoria no filtro do painel |
Os quadros do P-CONSOLIDACAO são widgets comuns, sobre duas fontes do construtor — Respostas por área e equipe (uma linha por resposta, com a equipe, a área, a resposta e a pontuação que conta) e Perguntas consolidadas (uma linha por pergunta de cada auditoria, com a resposta consolidada pela regra da auditoria e a divergência). A regra e a divergência estão em Auditoria e ondas, em A resposta consolidada e a visão por pergunta.
Da gaveta para o registro
O número de um painel abre a lista que o produziu — mesma fonte, mesmo filtro, mesmo item lógico. Recalcular por outro caminho abriria a chance de divergirem, e um detalhe que não fecha com o total é pior do que nenhum detalhe.
A lista não é só leitura. Cada linha abre o registro onde ele é tratado: achado vai para Não conformidades, risco para Riscos, resposta para a auditoria dela. Antes disso, quem reconhecia o achado no painel tinha de sair, trocar de tela e procurar o mesmo código a mão — e a chance de tratar a coisa errada nasce aí.
A gaveta tem busca em todas as colunas e filtro por valor onde a coluna tem poucos valores distintos. Acima de doze valores o filtro deixa de ajudar e vira outra lista para procurar dentro, então só o campo de busca aparece. Exportar respeita o recorte da tela: quem filtrou e clicou em exportar quer aquilo, e receber a lista inteira faria o arquivo discordar do que acabou de ver.
Duas fontes que respondem perguntas que as outras não respondem
Alvos avaliados existe porque ausência de linha é informação. Contando achados, quem não tem achado nenhum não aparece — o painel mostrava onze não conformidades e não tinha como dizer que havia quinze processos, nem quais quatro estavam limpos. Nenhuma consulta sobre achados consegue expressar isso. Essa fonte traz também o campo Conformidade, que responde em uma palavra o que o score não responde.
Código do alvo existe em toda fonte que tem escopo, porque o nome serve para ler e o código serve para recortar. Montar um painel de uma área inteira listando o nome de cada alvo dela produz um painel que passa a mentir no dia em que alguém cria mais um processo e esquece de editá-lo. Com o código, "começa com PROC-N3-" continua verdadeiro sozinho.
Score vazio não é falta de avaliação
Instrumento de registro — o ROPA, por exemplo — não pontua. O ciclo aparecia com score vazio e parecia não avaliado, quando o que acontecera era o oposto: ele foi avaliado, por regra e não por nota. É para isso que serve o campo Conformidade: ele mostra a conclusão, e não a nota.
Perguntar: o caminho curto
Ver um número custava quatro objetos — item lógico, consulta, widget e bloco no painel — e quatro nomes antes de qualquer resposta aparecer. Nesta instalação isso virou vinte e oito consultas e quarenta widgets para seis painéis: quase quatro objetos por número exibido.
A aba Atalho: perguntar, no Construtor, inverte a ordem:
1. Sobre o quê? Escolhe-se o objeto — não conformidades, riscos, respostas, auditorias, ações, alvos.
2. Quais? Monta-se a condição com os campos daquele objeto. Sem condição nenhuma, são todos.
3. O que mostrar? Quantidade ou lista, separada por um campo ou não.
4. A resposta agora. O resultado aparece enquanto se monta, pelo mesmo caminho de execução que o bloco usará depois — prévia que calcula por outro caminho é prévia que pode mentir.
5. Guardar esta pergunta? Opcional — dá para só olhar e sair. Para guardar: Nome, Como mostrar e Em qual painel (ou nenhum, por enquanto) → Guardar.
Os quatro objetos continuam existindo e continuam valendo para quem reaproveita: um item lógico com nome próprio impede que "achado crítico em aberto" exista copiado em cada widget, e mudar o que a organização entende por crítico num lugar só. O que mudou é deixarem de ser obrigatórios para quem só quer uma resposta.
Quando se guarda, os três nascem numa transação. Três chamadas seguidas falhando no meio deixariam consulta sem widget e widget sem bloco: lixo que ninguém sabe que criou e que aparece meses depois numa lista.
Os valores vêm do próprio dado
Dos cinquenta e um campos do catálogo, onze declaram lista fechada. Nos outros quarenta havia uma caixa em branco, e quem montava o painel precisava adivinhar se escrevia ALTA, Alta ou alta. Errar não dava erro: dava um widget zerado, que parece defeito de cálculo e não filtro que não casou com nada.
Agora o campo oferece o que existe. Lista fechada responde a norma — inclusive valores que ainda não ocorreram. Campo livre lê do próprio dado, com busca, e pela mesma política de tenant que todas as outras leituras: o que aparece é do tenant e nunca do vizinho. Continua sendo campo de texto, porque valor que ainda não ocorreu precisa poder ser escrito — senão o filtro só enxerga o passado.
Data e número ficam de fora: a lista teria o tamanho da tabela, e o campo já é do tipo certo.
Comparar com outro campo
A condição compara com um valor ou com outro campo do mesmo objeto. Havia uma família inteira de perguntas que não cabia sem isso — "prazo anterior a hoje", "risco residual maior que o inerente", "encerrada antes de identificada" — e a única saída era digitar um número fixo que envelhece no dia seguinte.
Três travas, cada uma contra um jeito de a pergunta sair errada em silêncio. O campo comparado sai da mesma lista do catálogo. O operador precisa ser de ordem ou igualdade, porque "contém" entre dois campos produziria SQL válido respondendo a uma pergunta que ninguém fez. E os tipos precisam casar: data com número o banco recusa, mas texto com número ele converte sozinho e devolve uma ordem alfabética com cara de resultado.
Perguntar sobre o objeto vizinho
O seletor de campo mostra os campos deste objeto e, abaixo, os do objeto relacionado: Auditorias — da auditoria, Alvos avaliados — do alvo. Escolher "Situação" ali dentro pergunta sobre a auditoria do achado, e não sobre o achado.
Até aqui o vínculo entre entidades era simulado por subconsulta fixa que devolvia só o nome do relacionado: dava para exibir e não dava para filtrar. "Achados cujas auditorias estão em execução" era impossível de perguntar, e é das perguntas mais naturais que existem.
As relações são declaradas em código, não montadas na tela. O catálogo é a lista branca que o compilador consulta para saber que tabela e coluna podem entrar no SQL; um construtor de junções livres devolveria essa decisão a quem monta o painel, e nome de tabela não é dado — é código. Quem decide que caminhos existem continua sendo o código; a tela só oferece os que já estão escritos.
A condição vira EXISTS, e não junção no FROM. A diferença aparece no primeiro relacionamento de um para muitos: junção multiplica a linha de origem por quantas casarem do outro lado, e "achados de auditoria em execução" passaria a contar o mesmo achado várias vezes — um número errado que parece plausível, que é o pior tipo.
Uma limitação conhecida: comparar campo com campo ainda não atravessa relação. Dentro do EXISTS as duas fontes estão em escopo, e "outro campo" ficaria ambíguo — da origem ou do destino? Recusar com uma frase clara é melhor do que escolher por conta própria.
Banco de widgets: a pergunta já feita
O construtor pergunta tudo — fonte, campo, agregação, agrupamento, visual — e é a ferramenta certa para quem faz BI. Para quem só quer o painel da própria área, o Banco de widgets (menu Análise, ou o botão do banco de widgets dentro de um painel) traz a pergunta pronta: escolhe-se o widget, aplicam-se os filtros e coloca-se no painel.
São cerca de mil e novecentos modelos sobre todo o GRC — não conformidades, riscos, KRIs, eventos de perda, planos e ações, aceites de risco, auditorias, respostas, atribuições, evidências, controles, frameworks, requisitos, perguntas, integrações, eventos, achados de log da IA, pareceres da IA, continuidade (BIA), oportunidades, usuários e grupos. Navega-se por tema, por tipo (indicador, distribuição, ranking, tendência, cruzamento, comparação, relatório), por fonte ou pela busca. Essenciais de GRC mostra os sessenta e poucos modelos curados — "NCs vencidas", "Riscos acima do apetite", "Matriz de calor do risco residual", "Perda efetiva por mês", "Controles sem pergunta" — que trazem recorte próprio e regra de cor.
O banco é derivado do catálogo, e não uma segunda lista para manter. Toda lista fechada vira uma distribuição; todo par de listas, um mapa de calor; toda data, uma série mensal e trimestral; todo número, média, soma e máximo, por categoria e por mês; toda fonte, um relatório em grade. Campo novo no catálogo aparece no banco na subida seguinte.
Passo a passo:
1. Achar o modelo: a busca Procurar entre N widgets…, Todas as fontes, Essenciais de GRC, as fichas de tema (Todos e um por tema) e as de tipo. Mostrar mais traz os próximos. Clique no cartão para abrir.
2. Nome no painel: o título com que o widget vai aparecer.
3. Visual: só os que servem para a forma da pergunta.
4. Filtros: + adicionar filtro… oferece os campos da fonte — lista fechada e texto viram caixas de marcar com os valores que o dado tem; data vira "últimos N dias"; número, mín. e máx. Os filtros se somam ao recorte do modelo — "em aberto" continua valendo — e o filtro de período e alvo do painel continua valendo por cima.
5. Prévia: dados reais, com os filtros escolhidos, pelo mesmo caminho que o quadro usará.
6. Destino, no rodapé: No painel: … → Colocar no painel (entra numa faixa nova no fim do painel; Concluir fecha), ou Só criar o widget → Criar widget, que vai para o Construtor.
No menu, o banco aparece para quem tem painel:montar; dentro do painel, o botão do banco de widgets aparece para quem monta o painel.
O que nasce é uma consulta comum: aparece no construtor e se edita como qualquer outra. Ela não fica presa ao modelo — um widget que mudasse sozinho quando o banco mudasse trocaria a pergunta do painel de uma diretoria numa atualização da plataforma sem ninguém ter pedido.
Quem não tem a permissão do módulo de uma fonte (por exemplo, admin:usuarios para Usuários) não vê os modelos dela: o banco, a prévia, a lista de valores e a gaveta de registros exigem a mesma permissão que a tela daquele módulo. O quadro já publicado num painel continua visível a quem lê o painel — quem publicou decidiu mostrar aquele agregado.
Agrupar por período
O agrupamento aceita data por período: dia, semana, mês, trimestre ou ano. A série sai ordenada pelo tempo (e não pelo valor), e clicar num ponto abre a gaveta com os registros daquele período exato — do primeiro dia até antes do primeiro dia do período seguinte.
Grade de relatório
Os visuais Grade e Tabela viram uma grade de relatório dentro do painel e na gaveta: cada coluna se ordena e se filtra de forma independente (texto contém; lista com contagem; número por faixa; data por intervalo), a grade se agrupa por uma ou mais colunas com subtotais (soma, média, mínimo, máximo, contagem) e total geral, escolhem-se as colunas visíveis, e o que se vê — com os filtros, a ordem e os grupos — exporta para Excel (XLSX) e CSV e imprime como relatório, com título, filtros aplicados e data de emissão no cabeçalho.
A gaveta obedece ao filtro do painel
Clicar num quadro de um painel filtrado abre os registros com o mesmo filtro. Antes a gaveta pedia pelo widget solto: a barra dizia 4 e a lista trazia os 31 do ano, e um detalhe que não fecha com o número que se clicou é pior do que nenhum detalhe.