---
title: 14. Painéis e construtor
slug: 14-paineis-e-construtor
docTags: 
createdAt: 2026-10-13T14:37:26.852Z
---

*Como montar consultas sem escrever código e colocá-las num painel.*

O construtor tem quatro camadas, e a ordem importa.

***

### <font color="#15803D">O construtor, passo a passo</font>

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.

***

### <font color="#15803D">1. Condição</font>

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.

***

### <font color="#15803D">2. Item lógico</font>

Um conjunto de condições ligadas por E/OU, **salvo com nome próprio**. É a peça que justifica o resto.

:::hint{type="info"}
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.

***

### <font color="#15803D">3. Consulta</font>

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.

***

### <font color="#15803D">4. Widget</font>

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.

:::hint{type="info"}
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.

***

### <font color="#15803D">Painéis, passo a passo</font>

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.

***

### <font color="#15803D">O painel</font>

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.

***

### <font color="#15803D">Painéis de fábrica</font>

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**                                          | ~~**O**~~**&#x20;que mostra**                                                                                                                                                                                                                    |
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **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*.

***

### <font color="#15803D">Da gaveta para o registro</font>

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.

***

### <font color="#15803D">Duas fontes que respondem perguntas que as outras não respondem</font>

**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.

***

### <font color="#15803D">Score vazio não é falta de avaliação</font>

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.

***

## <font color="#15803D">Perguntar: o caminho curto</font>

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.

***

## <font color="#15803D">Os valores vêm do próprio dado</font>

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.

***

## <font color="#15803D">Comparar com outro campo</font>

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.

***

## <font color="#15803D">Perguntar sobre o objeto vizinho</font>

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.

***

## <font color="#15803D">Banco de widgets: a pergunta já feita</font>

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.

***

## <font color="#15803D">Agrupar por período</font>

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.

***

## <font color="#15803D">Grade de relatório</font>

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.

***

## <font color="#15803D">A gaveta obedece ao filtro do painel</font>

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.
