<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://wiki.phsys.com.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin</id>
	<title>PHSYS - Wiki - Contribuições do(a) usuário(a) [pt-br]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.phsys.com.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin"/>
	<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php/Especial:Contribui%C3%A7%C3%B5es/Admin"/>
	<updated>2026-09-20T10:51:41Z</updated>
	<subtitle>Contribuições do(a) usuário(a)</subtitle>
	<generator>MediaWiki 1.31.10</generator>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Instala%C3%A7%C3%A3o_do_Servi%C3%A7o_PHSServer&amp;diff=7288</id>
		<title>Instalação do Serviço PHSServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Instala%C3%A7%C3%A3o_do_Servi%C3%A7o_PHSServer&amp;diff=7288"/>
		<updated>2026-09-14T22:30:02Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O PHSServer é o serviço da aplicação que fica junto ao servidor e é responsável pelo controle de acessos e execução das regras de negócio solicitadas via interfaces Desktop, Mobile ou Web.&lt;br /&gt;
&lt;br /&gt;
Para instalação, são necessários os seguintes arquivos:&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;PHServer.exe:&amp;#039;&amp;#039;&amp;#039; Arquivo de execução do serviço no Windows. Para criação do serviço junto aos serviços do Windows, deve executar o arquivo PHServer.exe com o parâmetro -install. Pode ser feito utilizando o CMD como administrador.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;PHServer.sqlite:&amp;#039;&amp;#039;&amp;#039; Necessário somente quando utilizado banco de dados SQLite para o PHServerConf.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;PHSys.Lic:&amp;#039;&amp;#039;&amp;#039; Arquivo de licenciamento, que contem as informações com módulos, segmentos e usuários contratos.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Pasta Certificados:&amp;#039;&amp;#039;&amp;#039; A pasta &amp;#039;&amp;#039;&amp;#039;Certificados&amp;#039;&amp;#039;&amp;#039;, deve estar presente no mesmo diretório de PHServer.exe, neste devem estar presentes os certificados digitais utilizado na emissão dos documentos eletrônicos.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Pasta Páginas:&amp;#039;&amp;#039;&amp;#039; Contém os arquivos utilizados pela interface web do PHServerConf.&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
! colspan = &amp;quot;2&amp;quot; | Estrutura de arquivos do ServerConfWeb&lt;br /&gt;
|-&lt;br /&gt;
|Arquivos Principais:&lt;br /&gt;
|-&lt;br /&gt;
|APIs - Contém todos as API&amp;#039;s utilizado na construção Web.&lt;br /&gt;
|-&lt;br /&gt;
|Boostrap - Framework para construção das telas.&lt;br /&gt;
|-&lt;br /&gt;
|DataTabels - Construção das Grids&lt;br /&gt;
|-&lt;br /&gt;
|Fontawesome - Ícones.&lt;br /&gt;
|-&lt;br /&gt;
|GoogleFont - Ícones.&lt;br /&gt;
|-&lt;br /&gt;
|jQuery - Extensão para utilização no JavaScript.&lt;br /&gt;
|-&lt;br /&gt;
|Selectize - Utilização de campos lista estilizados para utilização de Ajax para pesquisa.&lt;br /&gt;
|-&lt;br /&gt;
|SweetAlert2 - Mensagens estilizadas na tela.&lt;br /&gt;
|-&lt;br /&gt;
|Serverconf - Contém as páginas, arquivos css&amp;#039;s e javascripts necessários para abertura do serverconfweb.&lt;br /&gt;
|-&lt;br /&gt;
|CSS - Arquivos de estilização para o serverconfweb.&lt;br /&gt;
|-&lt;br /&gt;
|estilo.css - Estilização das telas.&lt;br /&gt;
|-&lt;br /&gt;
|estilologin.css - Estilização da tela de login.&lt;br /&gt;
|-&lt;br /&gt;
|Imagens - Contém os ícones do sistema utilizados nas páginas do serverconfweb.&lt;br /&gt;
|-&lt;br /&gt;
|JS - Arquivos js necessários.&lt;br /&gt;
|-&lt;br /&gt;
|PH_Script_ServerConf.js - Script para comunicação com o servidor e tratamentos dos campos.&lt;br /&gt;
|-&lt;br /&gt;
|PH_Script_ServerConf_Login.js - Script para criação da sessão e validação do login.&lt;br /&gt;
|-&lt;br /&gt;
|basedados.html - Tela de base de dados.&lt;br /&gt;
|-&lt;br /&gt;
|login.html - Tela de login.&lt;br /&gt;
|-&lt;br /&gt;
|servidores.html - Tela de servidores de banco.&lt;br /&gt;
|-&lt;br /&gt;
|usuarios.html - Tela de usuários do serverconf.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Parametros.ini:&amp;#039;&amp;#039;&amp;#039; Contém os parâmetros necessários para instalação e inicialização do serviço da aplicação. Estrutura padrão do arquivo ini:&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;[CONEXAO]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Servidor=LOCALHOST&lt;br /&gt;
 Porta=211&lt;br /&gt;
 SSLCERTFILE= &lt;br /&gt;
 SSLPRIVATEKEYFILE= &lt;br /&gt;
 SSLPRIVATEKEYPASSOWORD= &lt;br /&gt;
&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;[PARAMETROS]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 NomeServico=PHSServer&lt;br /&gt;
 DescricaoServico=PH Sys - Server&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;[CONEXAOBASESDADOS]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 TipoConexao=4&lt;br /&gt;
 Servidor=LOCALHOST&lt;br /&gt;
 Porta=5233&lt;br /&gt;
 DataBase=serverconf&lt;br /&gt;
 Usuario=usuario&lt;br /&gt;
 Senha=*****&lt;br /&gt;
&lt;br /&gt;
O &amp;#039;&amp;#039;&amp;#039;tipo de conexão&amp;#039;&amp;#039;&amp;#039; corresponde ao banco de dados utilizado, pode ser:&lt;br /&gt;
:0 - SQLite&lt;br /&gt;
:1 - SQLServer&lt;br /&gt;
:2 - Oracle&lt;br /&gt;
:3 - Firebird&lt;br /&gt;
:4 - PostGreSQL&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;DLL&amp;#039;s&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
*libcrypto-1_1.dll ou libcrypto-1_1-x64.dll&lt;br /&gt;
*libssl-1_1.dll ou libssl-1_1-x64.dll&lt;br /&gt;
*libexslt.dll&lt;br /&gt;
*libiconv.dll&lt;br /&gt;
*libssl-1_1.dll&lt;br /&gt;
*libxml2.dll&lt;br /&gt;
*libxslt.dll&lt;br /&gt;
&lt;br /&gt;
*Clientes que utilizam banco de dados &amp;#039;&amp;#039;&amp;#039;Firebird&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
**fbclient.dll&lt;br /&gt;
&lt;br /&gt;
*Clientes que utilizam banco de dados &amp;#039;&amp;#039;&amp;#039;PostGreSQL&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
**Lib\libcrypto-1_1-x64.dll&lt;br /&gt;
**Lib\libiconv-2.dll&lt;br /&gt;
**Lib\libintl-8.dll&lt;br /&gt;
**Lib\libpq.dll&lt;br /&gt;
**Lib\libssl-1_1-x64.dll&lt;br /&gt;
**Lib\ssleay32.dll&lt;br /&gt;
&lt;br /&gt;
*Clientes que utilizam agendamento de e-mails por &amp;#039;&amp;#039;&amp;#039;IMAP&amp;#039;&amp;#039;&amp;#039;, ou &amp;#039;&amp;#039;&amp;#039;SSL&amp;#039;&amp;#039;&amp;#039; em &amp;#039;&amp;#039;&amp;#039;x32&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
**dlls - Openssl - 32bits\libeay32.dll&lt;br /&gt;
**dlls - Openssl - 32bits\ssleay32.dll&lt;br /&gt;
**dlls - Openssl - 32bits\libcrypto-3.dll&lt;br /&gt;
**dlls - Openssl - 32bits\libssl-3.dll&lt;br /&gt;
&lt;br /&gt;
*Clientes que utilizam agendamento de e-mails por &amp;#039;&amp;#039;&amp;#039;IMAP&amp;#039;&amp;#039;&amp;#039;, ou &amp;#039;&amp;#039;&amp;#039;SSL&amp;#039;&amp;#039;&amp;#039; em &amp;#039;&amp;#039;&amp;#039;x64&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
**libeay32.dll&lt;br /&gt;
**ssleay32.dll&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Pastas de Schemas&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Para os clientes que realizam a geração de documentos eletrônicos como NF-e, CT-e, CFS-e ou MDF-e, são necessárias os arquivos disponibilizados nas pasta abaixo:&lt;br /&gt;
*Schemas_CTE&lt;br /&gt;
*Schemas_MDFE&lt;br /&gt;
*Schemas_NFE&lt;br /&gt;
*Schemas_NFSE&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Dashboards&amp;diff=7281</id>
		<title>Dashboards</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Dashboards&amp;diff=7281"/>
		<updated>2026-09-13T21:00:25Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Conclusão */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é a funcionalidade do sistema que reúne, em um único painel visual, indicadores e gráficos configuráveis, permitindo o acompanhamento rápido de informações relevantes do negócio sem a necessidade de gerar relatórios manualmente. Cada dashboard é composto por um conjunto de itens — cada um exibindo um Widget do tipo indicador numérico (card) ou gráfico (barra, linha ou pizza) — organizados em um layout de grade dentro da tela.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é uma tela de visualização somente leitura, formada por blocos (itens) distribuídos em grade. Cada item exibe o resultado de um Widget previamente configurado no sistema, que pode assumir dois tipos:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicador (card):&amp;#039;&amp;#039;&amp;#039; exibe um único valor em destaque, geralmente representando uma contagem, total.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Gráfico:&amp;#039;&amp;#039;&amp;#039; exibe uma série de dados no formato de barra, linha ou pizza.&lt;br /&gt;
&lt;br /&gt;
A montagem do dashboard (quais itens existem, em que ordem, com que tamanho e com que Widget) é feita previamente pelos cadastros de &amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Widget&amp;#039;&amp;#039;&amp;#039;. A tela do Dashboard em si apenas exibe o resultado já configurado — não é nela que se adiciona, remove ou redimensiona itens. Cada item é alimentado por uma consulta SQL própria (Expressão SQL), definida no cadastro do Widget correspondente. Opcionalmente, um Dashboard pode ter um Formulário vinculado, permitindo ao usuário filtrar os dados exibidos sem precisar de um novo cadastro.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do Dashboard, conseguimos acompanhar de forma visual e centralizada os principais números da operação, tomando decisões com mais agilidade e sem depender da geração manual de relatórios para obter uma visão geral da situação atual.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao concentrar as informações mais relevantes em um único painel visual, o usuário reduz o tempo gasto navegando por diferentes telas e relatórios para entender a situação do negócio. Isso favorece a identificação rápida de tendências, desvios e pontos de atenção, além de padronizar a forma como diferentes usuários enxergam os mesmos indicadores, evitando interpretações divergentes sobre os mesmos dados.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um dashboard pode reunir, por exemplo, um Widget indicador com o total de pedidos em aberto, um Widget gráfico de barras com o volume de vendas por período e um Widget gráfico de pizza com a participação de cada categoria de produto no faturamento. Dessa forma, em uma única tela, o usuário consegue visualizar tanto números pontuais quanto tendências ao longo do tempo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é composto por dois cadastros: o Dashboard propriamente dito e os Itens do Dashboard. Cada item, por sua vez, exibe um Widget já cadastrado (do tipo Gráfico ou Indicador) — o cadastro do Widget (onde entram título, cores, formato e a Expressão SQL) é tratado em página própria (veja Sugestão de Leitura).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do dashboard, utilizado também como identificador ao exportar/importar sua configuração.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Subtítulo/legenda exibida para o usuário.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formulário:&amp;#039;&amp;#039;&amp;#039; Formulário (tela de filtro) opcional vinculado ao dashboard. Quando informado, a tela de Dashboard passa a exibir o botão &amp;quot;Filtrar&amp;quot;, permitindo restringir os dados exibidos nos itens configurados com Filtros do Item (veja abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;É Sistema:&amp;#039;&amp;#039;&amp;#039; Indica se o dashboard é nativo do sistema (padrão) ou foi criado pelo usuário.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dashboard:&amp;#039;&amp;#039;&amp;#039; Dashboard ao qual o item pertence.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Posição/ordem do item dentro do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no topo do item. Quando deixado em branco, o item assume o título configurado no próprio Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Altura:&amp;#039;&amp;#039;&amp;#039; Altura do item na grade do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Largura:&amp;#039;&amp;#039;&amp;#039; Largura do item na grade do dashboard (a grade possui 16 unidades de largura por linha; itens são distribuídos lado a lado até completar esse limite, quebrando para a linha seguinte quando necessário).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Widget:&amp;#039;&amp;#039;&amp;#039; Widget já cadastrado (do tipo Gráfico ou Indicador) a ser exibido neste item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Filtros do Item:&amp;#039;&amp;#039;&amp;#039; Disponível apenas quando o Dashboard tem um Formulário vinculado. Mapeia cada campo do Formulário para um Campo já catalogado (via &amp;quot;Incluir Campos&amp;quot;) do Widget deste item, definindo a operação a aplicar (igual, diferente, maior ou igual, menor ou igual, contém, está na lista) quando o usuário preencher aquele campo no filtro. Um campo do Formulário sem mapeamento fica disponível para preenchimento, mas não afeta a consulta deste item específico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;É Sistema:&amp;#039;&amp;#039;&amp;#039; Indica se o item é nativo do sistema (padrão) ou foi criado pelo usuário.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Comportamentos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Atualizar:&amp;#039;&amp;#039;&amp;#039; Permite recarregar o dashboard por completo, buscando novamente a estrutura e os dados de todos os itens.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Carregamento por item:&amp;#039;&amp;#039;&amp;#039; Cada item do dashboard é carregado de forma independente: a estrutura visual (títulos, cores, formato) aparece imediatamente, enquanto os dados de cada item são buscados individualmente e exibidos em seguida, com uma animação de entrada.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicação de carregamento:&amp;#039;&amp;#039;&amp;#039; Enquanto os dados de um item ainda não retornaram, é exibido um indicador de carregamento (spinner) sobre o item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sem dados / Erro ao carregar:&amp;#039;&amp;#039;&amp;#039; Caso a consulta de um item não retorne dados, ou ocorra uma falha ao buscá-los, o item exibe uma mensagem informando a situação, sem impedir a exibição dos demais itens do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Distribuição em grade:&amp;#039;&amp;#039;&amp;#039; Os itens são organizados automaticamente em uma grade de 16 colunas, respeitando a largura e altura configuradas em cada item, se ajustando ao tamanho da tela.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Filtrar:&amp;#039;&amp;#039;&amp;#039; Quando o dashboard tem um Formulário vinculado, um botão &amp;quot;Filtrar&amp;quot; aparece no topo da tela, abrindo uma janela com os campos configurados. Ao confirmar, todos os itens com Filtros do Item configurados são recarregados considerando os valores informados.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Lembrar filtro:&amp;#039;&amp;#039;&amp;#039; Se o Formulário vinculado estiver marcado para &amp;quot;Salvar&amp;quot;, o último filtro confirmado pelo usuário é lembrado entre acessos, inclusive reabrindo o dashboard em outro momento. Se essa opção não estiver marcada, o filtro é considerado apenas enquanto a tela permanecer aberta — ao reabrir o dashboard, os campos voltam ao valor padrão configurado no Formulário.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Baixar/Copiar imagem:&amp;#039;&amp;#039;&amp;#039; Ao clicar com o botão direito sobre um Widget do tipo gráfico, é possível baixar a imagem gerada (PNG) ou copiá-la para a área de transferência, para uso em outros documentos ou apresentações.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Disponível no aplicativo:&amp;#039;&amp;#039;&amp;#039; Os dashboards liberados para o grupo do usuário também são exibidos no aplicativo, com a mesma configuração de itens e o mesmo resultado. A barra superior mostra o dashboard aberto e, havendo mais de um disponível, um botão ao lado permite escolher qual exibir.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exportar:&amp;#039;&amp;#039;&amp;#039; No cadastro de Dashboards, gera um arquivo com a configuração completa do dashboard: seus itens, os Widgets utilizados (com Campos, Colunas e configuração visual) e os Filtros do Item. O Formulário vinculado é referenciado pelo nome, mas não vai dentro do arquivo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Importar:&amp;#039;&amp;#039;&amp;#039; Lê um arquivo gerado pela exportação, no mesmo ambiente ou em outro. Os registros são identificados pelo Nome — dashboard, Widget e Campos — de modo que a importação cria o que ainda não existe e atualiza o que já existe, sem duplicar. Antes de gravar, o arquivo é validado por inteiro: havendo qualquer problema, nada é importado e é apresentada a lista completa das correções necessárias, indicando o item e o Widget de cada uma.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sem armazenamento temporário (cache):&amp;#039;&amp;#039;&amp;#039; Toda abertura ou atualização do dashboard executa novamente, em tempo real, a Expressão SQL de todos os seus itens — não há reaproveitamento de um resultado buscado anteriormente.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Dashboard&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume, o que precisa ser feito para configurar um dashboard.&lt;br /&gt;
&lt;br /&gt;
Cadastre primeiro o &amp;#039;&amp;#039;&amp;#039;Widget&amp;#039;&amp;#039;&amp;#039; (do tipo Gráfico ou Indicador) que você quer usar no dashboard — é lá que ficam o título, as cores, o formato e a Expressão SQL que busca os dados (veja a página de Widgets em Sugestão de Leitura).&lt;br /&gt;
Cadastre o &amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;, informando nome e legenda.&lt;br /&gt;
(Opcional) Para permitir que o usuário filtre os dados do dashboard, cadastre um &amp;#039;&amp;#039;&amp;#039;Formulário&amp;#039;&amp;#039;&amp;#039; com os campos desejados e vincule-o ao Dashboard.&lt;br /&gt;
Cadastre os &amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039;, vinculando cada item ao Dashboard criado e ao Widget já cadastrado, e definindo seu título, posição e tamanho na grade.&lt;br /&gt;
(Opcional) Se o Dashboard tiver um Formulário vinculado, configure em cada Item os &amp;#039;&amp;#039;&amp;#039;Filtros do Item&amp;#039;&amp;#039;&amp;#039; que devem respeitar o filtro, mapeando o campo do Formulário para o Campo correspondente do Widget.&lt;br /&gt;
Abra a tela de Dashboard apontando para o dashboard desejado — os itens cadastrados aparecem automaticamente, cada um já exibindo seu resultado.&lt;br /&gt;
&lt;br /&gt;
Se você recebeu um dashboard pronto em arquivo, todo esse roteiro pode ser substituído pelo botão &amp;#039;&amp;#039;&amp;#039;Importar&amp;#039;&amp;#039;&amp;#039; no cadastro de Dashboards: o dashboard, seus itens e os Widgets utilizados são criados de uma só vez.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Como a Expressão SQL é texto livre, o controle de quem pode ver informações sensíveis num dashboard depende de quem tem permissão para visualizar os Dashboard.&lt;br /&gt;
*Ao importar um dashboard que tenha Formulário vinculado, o Formulário precisa existir na base de destino antes da importação — cadastre-o ou importe-o primeiro, senão a importação é recusada informando qual Formulário está faltando.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é o recurso responsável por consolidar, em uma única tela, os principais indicadores e gráficos definidos para acompanhamento do negócio. Por ser inteiramente configurável através dos cadastros de Dashboard e Itens — que reaproveitam Widgets já cadastrados, permite que diferentes visões sejam montadas conforme a necessidade de cada área ou perfil de usuário, sem exigir alterações no sistema. Dessa forma, contribui para uma tomada de decisão mais ágil, baseada em informação centralizada e sempre atualizada.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Widgets]]&lt;br /&gt;
&lt;br /&gt;
[[Layout_Importação_Dashboards|Layout Importação Dashboards]]&lt;br /&gt;
&lt;br /&gt;
[[Criando Dashboards com IA]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Criando_Dashboards_com_IA&amp;diff=7280</id>
		<title>Criando Dashboards com IA</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Criando_Dashboards_com_IA&amp;diff=7280"/>
		<updated>2026-09-13T20:59:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Conclusão */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
É possível construir um dashboard pedindo a um agente de IA que gere o arquivo de importação. Você fornece o contexto do que quer acompanhar, a consulta SQL que traz os dados e o layout desejado; o agente devolve um arquivo compatível com o ERP, que é carregado pelo botão Importar do cadastro de Dashboards.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O dashboard e seus Widgets podem ser descritos inteiramente por um arquivo (formato JSON), o mesmo que o botão Exportar gera. Como esse arquivo é texto estruturado e tem regras conhecidas, um agente de IA consegue produzi-lo a partir de uma descrição em linguagem natural, sem que ninguém precise preencher os cadastros campo a campo.&lt;br /&gt;
&lt;br /&gt;
O agente não acessa o sistema: ele apenas escreve o arquivo. Quem cria, atualiza e valida os registros continua sendo o ERP, no momento da importação.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Serve para encurtar o caminho entre &amp;quot;eu preciso enxergar esse número&amp;quot; e um painel pronto. Em vez de cadastrar Widget, Campos, Colunas, Dashboard e Itens um a um, descreve-se o resultado esperado e revisa-se o que foi gerado.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Reduz o tempo de montagem de um painel novo e o conhecimento prévio exigido sobre a estrutura dos cadastros. Facilita a criação de modelos padronizados para distribuir a vários clientes, já que o mesmo arquivo pode ser importado em qualquer base. Também torna a manutenção mais simples: ajustes no painel são pedidos ao agente e reimportados, sem retrabalho manual nos cadastros.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que informar ao agente&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Contexto:&amp;#039;&amp;#039;&amp;#039; o que o painel precisa responder e para quem. Ex.: &amp;quot;acompanhamento mensal das receitas emitidas, para a diretoria&amp;quot;.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Expressão SQL:&amp;#039;&amp;#039;&amp;#039; a consulta que traz os dados, já validada no banco. Ela deve ser &amp;#039;&amp;#039;&amp;#039;crua&amp;#039;&amp;#039;&amp;#039;: sem soma, sem agrupamento e sem ordenação — o próprio sistema monta a agregação a partir dos campos escolhidos.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Colunas da consulta:&amp;#039;&amp;#039;&amp;#039; quais colunas ela devolve e o que cada uma representa (texto, data ou valor).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Layout:&amp;#039;&amp;#039;&amp;#039; quais itens o painel terá, em que ordem, e o tamanho de cada um na grade de 16 colunas. Ex.: &amp;quot;dois indicadores lado a lado no topo e, abaixo, um gráfico de colunas ocupando a largura toda&amp;quot;.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato do arquivo:&amp;#039;&amp;#039;&amp;#039; a especificação do arquivo de importação, que descreve as seções, os campos obrigatórios e os valores aceitos.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O ponto de partida é a consulta. O exemplo abaixo traz as receitas emitidas, uma linha por documento — sem soma e sem agrupamento, como a ferramenta espera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select TO_CHAR(a.dataemissao, &amp;#039;Mon&amp;#039;) as mes,&lt;br /&gt;
       EXTRACT(YEAR FROM a.dataemissao) || &amp;#039;/&amp;#039; ||&lt;br /&gt;
       LPAD(EXTRACT(MONTH FROM a.dataemissao)::text, 2, &amp;#039;0&amp;#039;) as ano_mes,&lt;br /&gt;
       a.valorliquido as valor,&lt;br /&gt;
       a.dataemissao&lt;br /&gt;
from documentos a&lt;br /&gt;
where a.tipomovimento = &amp;#039;S&amp;#039;&lt;br /&gt;
  and a.ehcre = &amp;#039;S&amp;#039;&lt;br /&gt;
  and a.ehaglutinador = &amp;#039;N&amp;#039;&lt;br /&gt;
  and a.situacaofinanceiro = &amp;#039;2&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ela devolve quatro colunas: &amp;#039;&amp;#039;&amp;#039;mes&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;ano_mes&amp;#039;&amp;#039;&amp;#039; (texto), &amp;#039;&amp;#039;&amp;#039;valor&amp;#039;&amp;#039;&amp;#039; (valor) e &amp;#039;&amp;#039;&amp;#039;dataemissao&amp;#039;&amp;#039;&amp;#039; (data). Repare que a soma por mês não está na consulta — quem agrupa e soma é o sistema, a partir do campo escolhido como categoria e da coluna de valor do Widget.&lt;br /&gt;
&lt;br /&gt;
Com isso em mãos, o pedido ao agente pode ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Monte um dashboard chamado &amp;quot;Receitas Emitidas&amp;quot; com esta consulta.&lt;br /&gt;
Quero, no topo, um indicador com o total emitido no período ocupando&lt;br /&gt;
metade da largura e, abaixo, um gráfico de colunas com a evolução&lt;br /&gt;
mensal usando o ano_mes como categoria, ordenado por ele.&lt;br /&gt;
Siga a especificação do formato de importação em anexo.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O agente devolve um único arquivo contendo o dashboard, os dois Widgets, o catálogo de Campos de cada um (com o tipo de cada coluna da consulta) e a Coluna de valor apontando para &amp;#039;&amp;#039;&amp;#039;valor&amp;#039;&amp;#039;&amp;#039;. Basta importar.&lt;br /&gt;
&lt;br /&gt;
Para acrescentar um indicador com a quantidade de documentos, sem mudar o painel, basta pedir uma coluna a mais na consulta — por exemplo &amp;#039;&amp;#039;&amp;#039;1 as quantidade&amp;#039;&amp;#039;&amp;#039; — e um indicador que some esse campo.&lt;br /&gt;
&lt;br /&gt;
Da mesma forma, a partir de uma consulta que devolve centro de custo, valor e data, pede-se um painel de participação: o agente monta um gráfico de pizza com o percentual de cada centro de custo e um gráfico de barras com o ranking em valor.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Utilizar&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume o que precisa ser feito para construir um dashboard com o apoio de um agente de IA.&lt;br /&gt;
&lt;br /&gt;
Escreva e teste a &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039; no banco, conferindo as colunas que ela devolve.&lt;br /&gt;
Reúna o &amp;#039;&amp;#039;&amp;#039;contexto&amp;#039;&amp;#039;&amp;#039; e o &amp;#039;&amp;#039;&amp;#039;[[Layout Importação Dashboards|layout]]&amp;#039;&amp;#039;&amp;#039; desejado, e entregue ao agente junto com a especificação do formato do arquivo.&lt;br /&gt;
Revise o arquivo devolvido, principalmente a consulta e os campos utilizados em cada Widget.&lt;br /&gt;
No cadastro de Dashboards, use o botão &amp;#039;&amp;#039;&amp;#039;Importar&amp;#039;&amp;#039;&amp;#039; e selecione o arquivo.&lt;br /&gt;
Se a importação apontar problemas, devolva a mensagem ao agente e peça a correção — ela indica exatamente o item, o Widget e o campo de cada pendência.&lt;br /&gt;
Abra o dashboard e confira os números antes de liberar para os usuários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Comportamentos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Validação antes de gravar:&amp;#039;&amp;#039;&amp;#039; a importação confere o arquivo inteiro antes de criar qualquer registro. Havendo problema, nada é importado e é apresentada a lista completa das correções necessárias, numerada e identificando o item e o Widget de cada uma.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Correção em ciclo:&amp;#039;&amp;#039;&amp;#039; as mensagens de erro são escritas para serem devolvidas ao agente — ele corrige o arquivo e a importação é repetida, até o painel entrar sem pendências.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cria ou atualiza:&amp;#039;&amp;#039;&amp;#039; os registros são identificados pelo Nome. Reimportar um arquivo corrigido atualiza o dashboard existente, sem duplicar itens nem Widgets.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Revise a consulta gerada.&amp;#039;&amp;#039;&amp;#039; A Expressão SQL roda no banco do cliente. Um agente pode propor junções ou filtros que não refletem a regra do seu negócio — a conferência de quem conhece a operação continua sendo necessária.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Confira os números.&amp;#039;&amp;#039;&amp;#039; Antes de publicar, compare o resultado do painel com um relatório já conhecido. O arquivo pode estar formalmente correto e ainda assim somar a coluna errada.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicador sempre soma.&amp;#039;&amp;#039;&amp;#039; Um indicador totaliza o campo escolhido. Média e maior valor não saem de um indicador — quando necessário, isso precisa vir resolvido dentro da própria consulta.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formulário de filtro.&amp;#039;&amp;#039;&amp;#039; Se o painel usar filtro, o Formulário vinculado precisa existir na base de destino antes da importação.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nomes são a chave.&amp;#039;&amp;#039;&amp;#039; Como a importação identifica os registros pelo Nome, escolha nomes estáveis e específicos para dashboards e Widgets, evitando que um modelo sobrescreva outro por coincidência de nome.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dados sensíveis.&amp;#039;&amp;#039;&amp;#039; Quem tem permissão para ver o dashboard vê o resultado da consulta. Isso não muda por o arquivo ter sido gerado por um agente.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A construção de dashboards com o apoio de um agente de IA aproveita o fato de o painel inteiro poder ser descrito por um arquivo de importação. O agente traduz contexto, consulta e layout nesse arquivo; o ERP valida e cria os registros. O ganho está na velocidade de montagem e na padronização dos modelos, mantendo com quem conhece o negócio a responsabilidade de revisar a consulta e conferir os números.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboards]]&lt;br /&gt;
&lt;br /&gt;
[[Widgets]]&lt;br /&gt;
&lt;br /&gt;
[[Layout_Importação_Dashboards|Layout Importação Dashboards]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Layout_Importa%C3%A7%C3%A3o_Dashboards&amp;diff=7279</id>
		<title>Layout Importação Dashboards</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Layout_Importa%C3%A7%C3%A3o_Dashboards&amp;diff=7279"/>
		<updated>2026-09-13T20:59:33Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Conclusão */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta página descreve o formato dos arquivos de exportação e importação de dashboards e widgets. Serve de referência para quem precisa gerar esses arquivos fora do sistema — inclusive para orientar um agente de IA (veja Assuntos Relacionados).&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Os arquivos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
São dois arquivos no formato JSON, ambos gravados em UTF-8, lidos pelos botões Importar dos respectivos cadastros.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Arquivo&lt;br /&gt;
!Extensão&lt;br /&gt;
!Cadastro&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|.phdashapp&lt;br /&gt;
|Dashboards&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Widget avulso&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|.phwidget&lt;br /&gt;
|Widgets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
O arquivo de dashboard já traz os widgets embutidos: importar um dashboard cria ou atualiza também os widgets que ele utiliza, o catálogo de Campos de cada um e os Filtros do Item.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Regras gerais&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Identificação pelo Nome:&amp;#039;&amp;#039;&amp;#039; a importação cria o que não existe e atualiza o que existe. O dashboard é identificado pelo &amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039;; o widget pelo &amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039; mais o &amp;#039;&amp;#039;&amp;#039;tipoWidget&amp;#039;&amp;#039;&amp;#039;; o item pela &amp;#039;&amp;#039;&amp;#039;sequencia&amp;#039;&amp;#039;&amp;#039; dentro do dashboard; a série pela &amp;#039;&amp;#039;&amp;#039;sequencia&amp;#039;&amp;#039;&amp;#039; dentro do widget. Reimportar o mesmo arquivo atualiza no lugar, sem duplicar.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Validação antes de gravar:&amp;#039;&amp;#039;&amp;#039; o arquivo é conferido por inteiro antes de qualquer gravação. Havendo problema, nada é importado e é devolvida a lista completa das correções, numerada e identificando o item e o widget de cada uma.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formulário:&amp;#039;&amp;#039;&amp;#039; quando o dashboard tem filtro, o Formulário é referenciado pelo nome e precisa já existir na base de destino — ele não vai dentro do arquivo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cores:&amp;#039;&amp;#039;&amp;#039; aceitam o formato #RRGGBB ou o número inteiro usado pelo sistema. Em branco, vale a cor padrão do tema.&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Campos omitidos&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
Campo que não for informado grava o padrão abaixo. Não é necessário repetir as opções que valem &amp;quot;não&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Padrão&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;tipoSerie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|F (série fixa). Somente D liga a série dinâmica.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;posicaoLegenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|D (direita).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;exibirTitulo&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;exibirValores&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;destacarDiferenca&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;exibirFundoBarra&amp;#039;&amp;#039;&amp;#039;, os quatro &amp;#039;&amp;#039;&amp;#039;arredondamento&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;exibirPercentual&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|N&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;ehSistema&amp;#039;&amp;#039;&amp;#039; (dashboard, item, widget, campo e filtro)&lt;br /&gt;
|N&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;titulo&amp;#039;&amp;#039;&amp;#039; do item&lt;br /&gt;
|O título do widget daquele item.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Arquivo de dashboard&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;versao&amp;quot;: 2,&lt;br /&gt;
  &amp;quot;nome&amp;quot;: &amp;quot;DASH_RECEITAS&amp;quot;,&lt;br /&gt;
  &amp;quot;legenda&amp;quot;: &amp;quot;Receitas&amp;quot;,&lt;br /&gt;
  &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
  &amp;quot;formulario&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;itens&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;sequencia&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;titulo&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;altura&amp;quot;: 7,&lt;br /&gt;
      &amp;quot;largura&amp;quot;: 16,&lt;br /&gt;
      &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
      &amp;quot;widget&amp;quot;: { },&lt;br /&gt;
      &amp;quot;filtros&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Regra&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatório. É a chave de importação.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;legenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatória. Texto exibido ao usuário.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;formulario&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Nome de um Formulário existente na base. Obrigatório quando algum item tiver filtros; em branco para dashboard sem filtro.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ao menos um item.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.sequencia&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Maior que zero e única dentro do dashboard.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.largura&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|De 1 a 16 colunas da grade.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.altura&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Maior que zero, em linhas da grade.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.titulo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Em branco assume o título do widget.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.widget&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|O widget completo, no mesmo formato do arquivo avulso.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Filtro do item&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
Liga um campo do Formulário do dashboard a um Campo do widget daquele item.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;formularioCampo&amp;quot;: &amp;quot;DATAINICIAL&amp;quot;, &amp;quot;widgetCampo&amp;quot;: &amp;quot;DATAEMISSAO&amp;quot;, &amp;quot;operacao&amp;quot;: 3, &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Operação&lt;br /&gt;
!Significado&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Igual&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Diferente&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Maior ou igual&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Menor ou igual&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Contém&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|Está na lista&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
O &amp;#039;&amp;#039;&amp;#039;formularioCampo&amp;#039;&amp;#039;&amp;#039; precisa existir no Formulário do dashboard, e o &amp;#039;&amp;#039;&amp;#039;widgetCampo&amp;#039;&amp;#039;&amp;#039; precisa estar em &amp;#039;&amp;#039;&amp;#039;campos&amp;#039;&amp;#039;&amp;#039; do widget daquele item.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Arquivo de widget&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;versao&amp;quot;: 2,&lt;br /&gt;
  &amp;quot;nome&amp;quot;: &amp;quot;REC_EVOLUCAO_MENSAL&amp;quot;,&lt;br /&gt;
  &amp;quot;tipoWidget&amp;quot;: 1,&lt;br /&gt;
  &amp;quot;titulo&amp;quot;: &amp;quot;Evolução Mensal das Receitas&amp;quot;,&lt;br /&gt;
  &amp;quot;exibirTitulo&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;tamanhoFonteTitulo&amp;quot;: 14,&lt;br /&gt;
  &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
  &amp;quot;expressaoSQL&amp;quot;: &amp;quot;select ... from documentos a where ...&amp;quot;,&lt;br /&gt;
  &amp;quot;campos&amp;quot;: [&lt;br /&gt;
    {&amp;quot;nome&amp;quot;: &amp;quot;ANO_MES&amp;quot;,     &amp;quot;tipoCampo&amp;quot;: 1, &amp;quot;formato&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;},&lt;br /&gt;
    {&amp;quot;nome&amp;quot;: &amp;quot;DATAEMISSAO&amp;quot;, &amp;quot;tipoCampo&amp;quot;: 2, &amp;quot;formato&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;},&lt;br /&gt;
    {&amp;quot;nome&amp;quot;: &amp;quot;VALOR&amp;quot;,       &amp;quot;tipoCampo&amp;quot;: 3, &amp;quot;formato&amp;quot;: &amp;quot;###,##0.00&amp;quot;, &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;grafico&amp;quot;: { }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Regra&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatório. Chave de importação junto com o tipoWidget.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;tipoWidget&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|1 para gráfico (preenche a seção grafico) ou 2 para indicador (preenche a seção indicador).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;expressaoSQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatória e crua: sem soma, sem agrupamento e sem ordenação. A agregação é montada pelo sistema a partir do campoX, do campoSerie e das colunas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campos&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Catálogo das colunas devolvidas pela consulta. Ao menos um, sem nomes repetidos. Todo campo citado em campoX, campoSerie, campoOrdenacao, colunas, indicador e nos filtros precisa estar aqui.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campos.tipoCampo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|1 texto, 2 data, 3 valor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campos.formato&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Máscara de exibição, como ###,##0.00. É ela que formata o rótulo do gráfico e o número do indicador.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Seção grafico&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;grafico&amp;quot;: {&lt;br /&gt;
  &amp;quot;tipoGrafico&amp;quot;: &amp;quot;BH&amp;quot;,&lt;br /&gt;
  &amp;quot;campoX&amp;quot;: &amp;quot;ANO_MES&amp;quot;,&lt;br /&gt;
  &amp;quot;campoSerie&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;campoOrdenacao&amp;quot;: &amp;quot;ANO_MES&amp;quot;,&lt;br /&gt;
  &amp;quot;tipoSerie&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;exibirValores&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;escala&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;destacarDiferenca&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
  &amp;quot;tamanhoFonteX&amp;quot;: 13,&lt;br /&gt;
  &amp;quot;posicaoLegenda&amp;quot;: &amp;quot;D&amp;quot;,&lt;br /&gt;
  &amp;quot;corBarra&amp;quot;: &amp;quot;#3E3E3E&amp;quot;,&lt;br /&gt;
  &amp;quot;corFundoBarra&amp;quot;: &amp;quot;#FBF1E6&amp;quot;,&lt;br /&gt;
  &amp;quot;exibirFundoBarra&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;arredondamentoInicial&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;arredondamentoFinal&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;arredondamentoFundoInicial&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
  &amp;quot;arredondamentoFundoFinal&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;colunas&amp;quot;: [&lt;br /&gt;
    {&amp;quot;sequencia&amp;quot;: 1, &amp;quot;legenda&amp;quot;: &amp;quot;Valor&amp;quot;, &amp;quot;campoValor&amp;quot;: &amp;quot;VALOR&amp;quot;,&lt;br /&gt;
     &amp;quot;corFonteValor&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;corFonteValor2&amp;quot;: &amp;quot;#FFFFFF&amp;quot;, &amp;quot;exibirPercentual&amp;quot;: &amp;quot;N&amp;quot;}&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Regra&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;tipoGrafico&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|BH para colunas verticais, BV para barras horizontais, LI para linhas e PI para pizza.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campoX&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatório. É a categoria do eixo.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campoSerie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Usado apenas com tipoSerie D: cada valor distinto do campo vira uma série.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campoOrdenacao&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ordena as categorias por este campo, em vez da ordem alfabética.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;tipoSerie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|D para série dinâmica, que exige o campoSerie. Em branco, as séries são as informadas em colunas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;exibirValores&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|S mostra o valor em cada ponto, E mostra a escala no eixo e N não mostra nenhum.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;posicaoLegenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|T, B, E, D ou I. Somente o gráfico de pizza desenha legenda.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;colunas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ao menos uma série. A sequencia é maior que zero e única, e o campoValor é obrigatório e precisa ser um campo do tipo valor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;colunas.exibirPercentual&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|S exibe o percentual sobre o total da série, em vez do valor.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Seção indicador&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;indicador&amp;quot;: {&lt;br /&gt;
  &amp;quot;campoValor&amp;quot;: &amp;quot;VALOR&amp;quot;,&lt;br /&gt;
  &amp;quot;corFundo&amp;quot;: &amp;quot;#D66815&amp;quot;,&lt;br /&gt;
  &amp;quot;corValor&amp;quot;: &amp;quot;#FFFFFF&amp;quot;,&lt;br /&gt;
  &amp;quot;corDestaque&amp;quot;: &amp;quot;#EFA55F&amp;quot;,&lt;br /&gt;
  &amp;quot;corIdentificacao&amp;quot;: &amp;quot;#FFFFFF&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O &amp;#039;&amp;#039;&amp;#039;campoValor&amp;#039;&amp;#039;&amp;#039; é obrigatório, precisa estar em &amp;#039;&amp;#039;&amp;#039;campos&amp;#039;&amp;#039;&amp;#039; e ser do tipo valor — é o campo somado no cartão. O formato exibido vem do formato desse campo.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Aplica-se a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;corFundo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Fundo do cartão.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;corValor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Número em destaque.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;corIdentificacao&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Rótulo acima do número.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;corDestaque&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Realce do cartão.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
O indicador sempre soma o campo escolhido. Média, contagem ou maior valor precisam vir resolvidos dentro da própria consulta — uma coluna 1 as quantidade, por exemplo, quando somada resulta na contagem de linhas.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Mensagens de erro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando o arquivo tem problemas, nada é importado e a mensagem traz todos de uma vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Não foi possível importar o dashboard. 3 problemas encontrados:&lt;br /&gt;
  1) item 1 (widget &amp;quot;REC_EVOLUCAO_MENSAL&amp;quot;): &amp;quot;grafico.campoX&amp;quot; &amp;quot;ANOMES&amp;quot; não está&lt;br /&gt;
     em &amp;quot;campos&amp;quot;. Todo campo usado precisa estar catalogado lá.&lt;br /&gt;
  2) item 2 (widget &amp;quot;REC_POR_CC&amp;quot;): &amp;quot;grafico.colunas[0].campoValor&amp;quot; &amp;quot;CENTROCUSTO&amp;quot;&lt;br /&gt;
     precisa ser do tipo valor (&amp;quot;tipoCampo&amp;quot;: 3) em &amp;quot;campos&amp;quot;, e está como 1.&lt;br /&gt;
  3) item 2 (widget &amp;quot;REC_POR_CC&amp;quot;): &amp;quot;sequencia&amp;quot; 1 já foi usada em outro item --&lt;br /&gt;
     ela identifica o item no dashboard.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O formato descreve o dashboard por inteiro: itens, widgets, catálogo de Campos, séries de valor e filtros. Por ser texto estruturado com regras conhecidas e validação completa na importação, o mesmo arquivo pode ser gerado fora do sistema, revisado e aplicado em qualquer base.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboards]]&lt;br /&gt;
&lt;br /&gt;
[[Widgets]]&lt;br /&gt;
&lt;br /&gt;
[[Criando_Dashboards_com_IA|Criando Dashboards com IA]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Layout_Importa%C3%A7%C3%A3o_Dashboards&amp;diff=7278</id>
		<title>Layout Importação Dashboards</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Layout_Importa%C3%A7%C3%A3o_Dashboards&amp;diff=7278"/>
		<updated>2026-09-13T20:59:07Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta página descreve o formato dos arquivos de exportação e importação de dashboards e widgets. Serve de referência para quem precisa gerar esses arquivos fora do sistema — inclusive para orientar um agente de IA (veja Assuntos Relacionados).&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Os arquivos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
São dois arquivos no formato JSON, ambos gravados em UTF-8, lidos pelos botões Importar dos respectivos cadastros.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Arquivo&lt;br /&gt;
!Extensão&lt;br /&gt;
!Cadastro&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|.phdashapp&lt;br /&gt;
|Dashboards&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Widget avulso&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|.phwidget&lt;br /&gt;
|Widgets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
O arquivo de dashboard já traz os widgets embutidos: importar um dashboard cria ou atualiza também os widgets que ele utiliza, o catálogo de Campos de cada um e os Filtros do Item.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Regras gerais&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Identificação pelo Nome:&amp;#039;&amp;#039;&amp;#039; a importação cria o que não existe e atualiza o que existe. O dashboard é identificado pelo &amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039;; o widget pelo &amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039; mais o &amp;#039;&amp;#039;&amp;#039;tipoWidget&amp;#039;&amp;#039;&amp;#039;; o item pela &amp;#039;&amp;#039;&amp;#039;sequencia&amp;#039;&amp;#039;&amp;#039; dentro do dashboard; a série pela &amp;#039;&amp;#039;&amp;#039;sequencia&amp;#039;&amp;#039;&amp;#039; dentro do widget. Reimportar o mesmo arquivo atualiza no lugar, sem duplicar.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Validação antes de gravar:&amp;#039;&amp;#039;&amp;#039; o arquivo é conferido por inteiro antes de qualquer gravação. Havendo problema, nada é importado e é devolvida a lista completa das correções, numerada e identificando o item e o widget de cada uma.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formulário:&amp;#039;&amp;#039;&amp;#039; quando o dashboard tem filtro, o Formulário é referenciado pelo nome e precisa já existir na base de destino — ele não vai dentro do arquivo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cores:&amp;#039;&amp;#039;&amp;#039; aceitam o formato #RRGGBB ou o número inteiro usado pelo sistema. Em branco, vale a cor padrão do tema.&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Campos omitidos&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
Campo que não for informado grava o padrão abaixo. Não é necessário repetir as opções que valem &amp;quot;não&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Padrão&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;tipoSerie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|F (série fixa). Somente D liga a série dinâmica.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;posicaoLegenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|D (direita).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;exibirTitulo&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;exibirValores&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;destacarDiferenca&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;exibirFundoBarra&amp;#039;&amp;#039;&amp;#039;, os quatro &amp;#039;&amp;#039;&amp;#039;arredondamento&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;exibirPercentual&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|N&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;ehSistema&amp;#039;&amp;#039;&amp;#039; (dashboard, item, widget, campo e filtro)&lt;br /&gt;
|N&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;titulo&amp;#039;&amp;#039;&amp;#039; do item&lt;br /&gt;
|O título do widget daquele item.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Arquivo de dashboard&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;versao&amp;quot;: 2,&lt;br /&gt;
  &amp;quot;nome&amp;quot;: &amp;quot;DASH_RECEITAS&amp;quot;,&lt;br /&gt;
  &amp;quot;legenda&amp;quot;: &amp;quot;Receitas&amp;quot;,&lt;br /&gt;
  &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
  &amp;quot;formulario&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;itens&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;sequencia&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;titulo&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;altura&amp;quot;: 7,&lt;br /&gt;
      &amp;quot;largura&amp;quot;: 16,&lt;br /&gt;
      &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
      &amp;quot;widget&amp;quot;: { },&lt;br /&gt;
      &amp;quot;filtros&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Regra&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatório. É a chave de importação.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;legenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatória. Texto exibido ao usuário.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;formulario&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Nome de um Formulário existente na base. Obrigatório quando algum item tiver filtros; em branco para dashboard sem filtro.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ao menos um item.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.sequencia&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Maior que zero e única dentro do dashboard.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.largura&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|De 1 a 16 colunas da grade.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.altura&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Maior que zero, em linhas da grade.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.titulo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Em branco assume o título do widget.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.widget&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|O widget completo, no mesmo formato do arquivo avulso.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Filtro do item&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
Liga um campo do Formulário do dashboard a um Campo do widget daquele item.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;formularioCampo&amp;quot;: &amp;quot;DATAINICIAL&amp;quot;, &amp;quot;widgetCampo&amp;quot;: &amp;quot;DATAEMISSAO&amp;quot;, &amp;quot;operacao&amp;quot;: 3, &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Operação&lt;br /&gt;
!Significado&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Igual&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Diferente&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Maior ou igual&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Menor ou igual&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Contém&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|Está na lista&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
O &amp;#039;&amp;#039;&amp;#039;formularioCampo&amp;#039;&amp;#039;&amp;#039; precisa existir no Formulário do dashboard, e o &amp;#039;&amp;#039;&amp;#039;widgetCampo&amp;#039;&amp;#039;&amp;#039; precisa estar em &amp;#039;&amp;#039;&amp;#039;campos&amp;#039;&amp;#039;&amp;#039; do widget daquele item.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Arquivo de widget&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;versao&amp;quot;: 2,&lt;br /&gt;
  &amp;quot;nome&amp;quot;: &amp;quot;REC_EVOLUCAO_MENSAL&amp;quot;,&lt;br /&gt;
  &amp;quot;tipoWidget&amp;quot;: 1,&lt;br /&gt;
  &amp;quot;titulo&amp;quot;: &amp;quot;Evolução Mensal das Receitas&amp;quot;,&lt;br /&gt;
  &amp;quot;exibirTitulo&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;tamanhoFonteTitulo&amp;quot;: 14,&lt;br /&gt;
  &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
  &amp;quot;expressaoSQL&amp;quot;: &amp;quot;select ... from documentos a where ...&amp;quot;,&lt;br /&gt;
  &amp;quot;campos&amp;quot;: [&lt;br /&gt;
    {&amp;quot;nome&amp;quot;: &amp;quot;ANO_MES&amp;quot;,     &amp;quot;tipoCampo&amp;quot;: 1, &amp;quot;formato&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;},&lt;br /&gt;
    {&amp;quot;nome&amp;quot;: &amp;quot;DATAEMISSAO&amp;quot;, &amp;quot;tipoCampo&amp;quot;: 2, &amp;quot;formato&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;},&lt;br /&gt;
    {&amp;quot;nome&amp;quot;: &amp;quot;VALOR&amp;quot;,       &amp;quot;tipoCampo&amp;quot;: 3, &amp;quot;formato&amp;quot;: &amp;quot;###,##0.00&amp;quot;, &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;grafico&amp;quot;: { }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Regra&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatório. Chave de importação junto com o tipoWidget.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;tipoWidget&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|1 para gráfico (preenche a seção grafico) ou 2 para indicador (preenche a seção indicador).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;expressaoSQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatória e crua: sem soma, sem agrupamento e sem ordenação. A agregação é montada pelo sistema a partir do campoX, do campoSerie e das colunas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campos&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Catálogo das colunas devolvidas pela consulta. Ao menos um, sem nomes repetidos. Todo campo citado em campoX, campoSerie, campoOrdenacao, colunas, indicador e nos filtros precisa estar aqui.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campos.tipoCampo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|1 texto, 2 data, 3 valor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campos.formato&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Máscara de exibição, como ###,##0.00. É ela que formata o rótulo do gráfico e o número do indicador.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Seção grafico&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;grafico&amp;quot;: {&lt;br /&gt;
  &amp;quot;tipoGrafico&amp;quot;: &amp;quot;BH&amp;quot;,&lt;br /&gt;
  &amp;quot;campoX&amp;quot;: &amp;quot;ANO_MES&amp;quot;,&lt;br /&gt;
  &amp;quot;campoSerie&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;campoOrdenacao&amp;quot;: &amp;quot;ANO_MES&amp;quot;,&lt;br /&gt;
  &amp;quot;tipoSerie&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;exibirValores&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;escala&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;destacarDiferenca&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
  &amp;quot;tamanhoFonteX&amp;quot;: 13,&lt;br /&gt;
  &amp;quot;posicaoLegenda&amp;quot;: &amp;quot;D&amp;quot;,&lt;br /&gt;
  &amp;quot;corBarra&amp;quot;: &amp;quot;#3E3E3E&amp;quot;,&lt;br /&gt;
  &amp;quot;corFundoBarra&amp;quot;: &amp;quot;#FBF1E6&amp;quot;,&lt;br /&gt;
  &amp;quot;exibirFundoBarra&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;arredondamentoInicial&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;arredondamentoFinal&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;arredondamentoFundoInicial&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
  &amp;quot;arredondamentoFundoFinal&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;colunas&amp;quot;: [&lt;br /&gt;
    {&amp;quot;sequencia&amp;quot;: 1, &amp;quot;legenda&amp;quot;: &amp;quot;Valor&amp;quot;, &amp;quot;campoValor&amp;quot;: &amp;quot;VALOR&amp;quot;,&lt;br /&gt;
     &amp;quot;corFonteValor&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;corFonteValor2&amp;quot;: &amp;quot;#FFFFFF&amp;quot;, &amp;quot;exibirPercentual&amp;quot;: &amp;quot;N&amp;quot;}&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Regra&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;tipoGrafico&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|BH para colunas verticais, BV para barras horizontais, LI para linhas e PI para pizza.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campoX&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatório. É a categoria do eixo.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campoSerie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Usado apenas com tipoSerie D: cada valor distinto do campo vira uma série.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campoOrdenacao&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ordena as categorias por este campo, em vez da ordem alfabética.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;tipoSerie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|D para série dinâmica, que exige o campoSerie. Em branco, as séries são as informadas em colunas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;exibirValores&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|S mostra o valor em cada ponto, E mostra a escala no eixo e N não mostra nenhum.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;posicaoLegenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|T, B, E, D ou I. Somente o gráfico de pizza desenha legenda.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;colunas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ao menos uma série. A sequencia é maior que zero e única, e o campoValor é obrigatório e precisa ser um campo do tipo valor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;colunas.exibirPercentual&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|S exibe o percentual sobre o total da série, em vez do valor.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Seção indicador&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;indicador&amp;quot;: {&lt;br /&gt;
  &amp;quot;campoValor&amp;quot;: &amp;quot;VALOR&amp;quot;,&lt;br /&gt;
  &amp;quot;corFundo&amp;quot;: &amp;quot;#D66815&amp;quot;,&lt;br /&gt;
  &amp;quot;corValor&amp;quot;: &amp;quot;#FFFFFF&amp;quot;,&lt;br /&gt;
  &amp;quot;corDestaque&amp;quot;: &amp;quot;#EFA55F&amp;quot;,&lt;br /&gt;
  &amp;quot;corIdentificacao&amp;quot;: &amp;quot;#FFFFFF&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O &amp;#039;&amp;#039;&amp;#039;campoValor&amp;#039;&amp;#039;&amp;#039; é obrigatório, precisa estar em &amp;#039;&amp;#039;&amp;#039;campos&amp;#039;&amp;#039;&amp;#039; e ser do tipo valor — é o campo somado no cartão. O formato exibido vem do formato desse campo.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Aplica-se a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;corFundo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Fundo do cartão.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;corValor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Número em destaque.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;corIdentificacao&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Rótulo acima do número.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;corDestaque&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Realce do cartão.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
O indicador sempre soma o campo escolhido. Média, contagem ou maior valor precisam vir resolvidos dentro da própria consulta — uma coluna 1 as quantidade, por exemplo, quando somada resulta na contagem de linhas.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Mensagens de erro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando o arquivo tem problemas, nada é importado e a mensagem traz todos de uma vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Não foi possível importar o dashboard. 3 problemas encontrados:&lt;br /&gt;
  1) item 1 (widget &amp;quot;REC_EVOLUCAO_MENSAL&amp;quot;): &amp;quot;grafico.campoX&amp;quot; &amp;quot;ANOMES&amp;quot; não está&lt;br /&gt;
     em &amp;quot;campos&amp;quot;. Todo campo usado precisa estar catalogado lá.&lt;br /&gt;
  2) item 2 (widget &amp;quot;REC_POR_CC&amp;quot;): &amp;quot;grafico.colunas[0].campoValor&amp;quot; &amp;quot;CENTROCUSTO&amp;quot;&lt;br /&gt;
     precisa ser do tipo valor (&amp;quot;tipoCampo&amp;quot;: 3) em &amp;quot;campos&amp;quot;, e está como 1.&lt;br /&gt;
  3) item 2 (widget &amp;quot;REC_POR_CC&amp;quot;): &amp;quot;sequencia&amp;quot; 1 já foi usada em outro item --&lt;br /&gt;
     ela identifica o item no dashboard.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O formato descreve o dashboard por inteiro: itens, widgets, catálogo de Campos, séries de valor e filtros. Por ser texto estruturado com regras conhecidas e validação completa na importação, o mesmo arquivo pode ser gerado fora do sistema, revisado e aplicado em qualquer base.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboards]]&lt;br /&gt;
&lt;br /&gt;
[[Widgets]]&lt;br /&gt;
&lt;br /&gt;
[[Criando_Dashboards_com_IA]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Layout_Importa%C3%A7%C3%A3o_Dashboards&amp;diff=7277</id>
		<title>Layout Importação Dashboards</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Layout_Importa%C3%A7%C3%A3o_Dashboards&amp;diff=7277"/>
		<updated>2026-09-13T20:58:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: Criou página com &amp;#039;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;=== Esta página descreve o formato dos arquivos de exportação e importação de dashboards e widgets. Serve de referência para quem precisa gerar esses ar...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta página descreve o formato dos arquivos de exportação e importação de dashboards e widgets. Serve de referência para quem precisa gerar esses arquivos fora do sistema — inclusive para orientar um agente de IA (veja Assuntos Relacionados).&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Os arquivos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
São dois arquivos no formato JSON, ambos gravados em UTF-8, lidos pelos botões Importar dos respectivos cadastros.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Arquivo&lt;br /&gt;
!Extensão&lt;br /&gt;
!Cadastro&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|.phdashapp&lt;br /&gt;
|Dashboards&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Widget avulso&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|.phwidget&lt;br /&gt;
|Widgets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
O arquivo de dashboard já traz os widgets embutidos: importar um dashboard cria ou atualiza também os widgets que ele utiliza, o catálogo de Campos de cada um e os Filtros do Item.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Regras gerais&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Identificação pelo Nome:&amp;#039;&amp;#039;&amp;#039; a importação cria o que não existe e atualiza o que existe. O dashboard é identificado pelo &amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039;; o widget pelo &amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039; mais o &amp;#039;&amp;#039;&amp;#039;tipoWidget&amp;#039;&amp;#039;&amp;#039;; o item pela &amp;#039;&amp;#039;&amp;#039;sequencia&amp;#039;&amp;#039;&amp;#039; dentro do dashboard; a série pela &amp;#039;&amp;#039;&amp;#039;sequencia&amp;#039;&amp;#039;&amp;#039; dentro do widget. Reimportar o mesmo arquivo atualiza no lugar, sem duplicar.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Validação antes de gravar:&amp;#039;&amp;#039;&amp;#039; o arquivo é conferido por inteiro antes de qualquer gravação. Havendo problema, nada é importado e é devolvida a lista completa das correções, numerada e identificando o item e o widget de cada uma.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formulário:&amp;#039;&amp;#039;&amp;#039; quando o dashboard tem filtro, o Formulário é referenciado pelo nome e precisa já existir na base de destino — ele não vai dentro do arquivo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cores:&amp;#039;&amp;#039;&amp;#039; aceitam o formato #RRGGBB ou o número inteiro usado pelo sistema. Em branco, vale a cor padrão do tema.&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Campos omitidos&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
Campo que não for informado grava o padrão abaixo. Não é necessário repetir as opções que valem &amp;quot;não&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Padrão&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;tipoSerie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|F (série fixa). Somente D liga a série dinâmica.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;posicaoLegenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|D (direita).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;exibirTitulo&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;exibirValores&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;destacarDiferenca&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;exibirFundoBarra&amp;#039;&amp;#039;&amp;#039;, os quatro &amp;#039;&amp;#039;&amp;#039;arredondamento&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;exibirPercentual&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|N&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;ehSistema&amp;#039;&amp;#039;&amp;#039; (dashboard, item, widget, campo e filtro)&lt;br /&gt;
|N&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;titulo&amp;#039;&amp;#039;&amp;#039; do item&lt;br /&gt;
|O título do widget daquele item.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Arquivo de dashboard&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;versao&amp;quot;: 2,&lt;br /&gt;
  &amp;quot;nome&amp;quot;: &amp;quot;DASH_RECEITAS&amp;quot;,&lt;br /&gt;
  &amp;quot;legenda&amp;quot;: &amp;quot;Receitas&amp;quot;,&lt;br /&gt;
  &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
  &amp;quot;formulario&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;itens&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;sequencia&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;titulo&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;altura&amp;quot;: 7,&lt;br /&gt;
      &amp;quot;largura&amp;quot;: 16,&lt;br /&gt;
      &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
      &amp;quot;widget&amp;quot;: { },&lt;br /&gt;
      &amp;quot;filtros&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Regra&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatório. É a chave de importação.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;legenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatória. Texto exibido ao usuário.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;formulario&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Nome de um Formulário existente na base. Obrigatório quando algum item tiver filtros; em branco para dashboard sem filtro.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ao menos um item.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.sequencia&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Maior que zero e única dentro do dashboard.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.largura&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|De 1 a 16 colunas da grade.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.altura&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Maior que zero, em linhas da grade.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.titulo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Em branco assume o título do widget.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;itens.widget&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|O widget completo, no mesmo formato do arquivo avulso.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Filtro do item&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
Liga um campo do Formulário do dashboard a um Campo do widget daquele item.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;formularioCampo&amp;quot;: &amp;quot;DATAINICIAL&amp;quot;, &amp;quot;widgetCampo&amp;quot;: &amp;quot;DATAEMISSAO&amp;quot;, &amp;quot;operacao&amp;quot;: 3, &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Operação&lt;br /&gt;
!Significado&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Igual&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Diferente&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Maior ou igual&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|Menor ou igual&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Contém&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|Está na lista&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
O &amp;#039;&amp;#039;&amp;#039;formularioCampo&amp;#039;&amp;#039;&amp;#039; precisa existir no Formulário do dashboard, e o &amp;#039;&amp;#039;&amp;#039;widgetCampo&amp;#039;&amp;#039;&amp;#039; precisa estar em &amp;#039;&amp;#039;&amp;#039;campos&amp;#039;&amp;#039;&amp;#039; do widget daquele item.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Arquivo de widget&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;versao&amp;quot;: 2,&lt;br /&gt;
  &amp;quot;nome&amp;quot;: &amp;quot;REC_EVOLUCAO_MENSAL&amp;quot;,&lt;br /&gt;
  &amp;quot;tipoWidget&amp;quot;: 1,&lt;br /&gt;
  &amp;quot;titulo&amp;quot;: &amp;quot;Evolução Mensal das Receitas&amp;quot;,&lt;br /&gt;
  &amp;quot;exibirTitulo&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;tamanhoFonteTitulo&amp;quot;: 14,&lt;br /&gt;
  &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
  &amp;quot;expressaoSQL&amp;quot;: &amp;quot;select ... from documentos a where ...&amp;quot;,&lt;br /&gt;
  &amp;quot;campos&amp;quot;: [&lt;br /&gt;
    {&amp;quot;nome&amp;quot;: &amp;quot;ANO_MES&amp;quot;,     &amp;quot;tipoCampo&amp;quot;: 1, &amp;quot;formato&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;},&lt;br /&gt;
    {&amp;quot;nome&amp;quot;: &amp;quot;DATAEMISSAO&amp;quot;, &amp;quot;tipoCampo&amp;quot;: 2, &amp;quot;formato&amp;quot;: &amp;quot;&amp;quot;,           &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;},&lt;br /&gt;
    {&amp;quot;nome&amp;quot;: &amp;quot;VALOR&amp;quot;,       &amp;quot;tipoCampo&amp;quot;: 3, &amp;quot;formato&amp;quot;: &amp;quot;###,##0.00&amp;quot;, &amp;quot;ehSistema&amp;quot;: &amp;quot;N&amp;quot;}&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;grafico&amp;quot;: { }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Regra&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatório. Chave de importação junto com o tipoWidget.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;tipoWidget&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|1 para gráfico (preenche a seção grafico) ou 2 para indicador (preenche a seção indicador).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;expressaoSQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatória e crua: sem soma, sem agrupamento e sem ordenação. A agregação é montada pelo sistema a partir do campoX, do campoSerie e das colunas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campos&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Catálogo das colunas devolvidas pela consulta. Ao menos um, sem nomes repetidos. Todo campo citado em campoX, campoSerie, campoOrdenacao, colunas, indicador e nos filtros precisa estar aqui.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campos.tipoCampo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|1 texto, 2 data, 3 valor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campos.formato&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Máscara de exibição, como ###,##0.00. É ela que formata o rótulo do gráfico e o número do indicador.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Seção grafico&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;grafico&amp;quot;: {&lt;br /&gt;
  &amp;quot;tipoGrafico&amp;quot;: &amp;quot;BH&amp;quot;,&lt;br /&gt;
  &amp;quot;campoX&amp;quot;: &amp;quot;ANO_MES&amp;quot;,&lt;br /&gt;
  &amp;quot;campoSerie&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;campoOrdenacao&amp;quot;: &amp;quot;ANO_MES&amp;quot;,&lt;br /&gt;
  &amp;quot;tipoSerie&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;exibirValores&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;escala&amp;quot;: 0,&lt;br /&gt;
  &amp;quot;destacarDiferenca&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
  &amp;quot;tamanhoFonteX&amp;quot;: 13,&lt;br /&gt;
  &amp;quot;posicaoLegenda&amp;quot;: &amp;quot;D&amp;quot;,&lt;br /&gt;
  &amp;quot;corBarra&amp;quot;: &amp;quot;#3E3E3E&amp;quot;,&lt;br /&gt;
  &amp;quot;corFundoBarra&amp;quot;: &amp;quot;#FBF1E6&amp;quot;,&lt;br /&gt;
  &amp;quot;exibirFundoBarra&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;arredondamentoInicial&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;arredondamentoFinal&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;arredondamentoFundoInicial&amp;quot;: &amp;quot;N&amp;quot;,&lt;br /&gt;
  &amp;quot;arredondamentoFundoFinal&amp;quot;: &amp;quot;S&amp;quot;,&lt;br /&gt;
  &amp;quot;colunas&amp;quot;: [&lt;br /&gt;
    {&amp;quot;sequencia&amp;quot;: 1, &amp;quot;legenda&amp;quot;: &amp;quot;Valor&amp;quot;, &amp;quot;campoValor&amp;quot;: &amp;quot;VALOR&amp;quot;,&lt;br /&gt;
     &amp;quot;corFonteValor&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;corFonteValor2&amp;quot;: &amp;quot;#FFFFFF&amp;quot;, &amp;quot;exibirPercentual&amp;quot;: &amp;quot;N&amp;quot;}&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Regra&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;tipoGrafico&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|BH para colunas verticais, BV para barras horizontais, LI para linhas e PI para pizza.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campoX&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Obrigatório. É a categoria do eixo.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campoSerie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Usado apenas com tipoSerie D: cada valor distinto do campo vira uma série.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;campoOrdenacao&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ordena as categorias por este campo, em vez da ordem alfabética.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;tipoSerie&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|D para série dinâmica, que exige o campoSerie. Em branco, as séries são as informadas em colunas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;exibirValores&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|S mostra o valor em cada ponto, E mostra a escala no eixo e N não mostra nenhum.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;posicaoLegenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|T, B, E, D ou I. Somente o gráfico de pizza desenha legenda.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;colunas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Ao menos uma série. A sequencia é maior que zero e única, e o campoValor é obrigatório e precisa ser um campo do tipo valor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;colunas.exibirPercentual&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|S exibe o percentual sobre o total da série, em vez do valor.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Seção indicador&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;indicador&amp;quot;: {&lt;br /&gt;
  &amp;quot;campoValor&amp;quot;: &amp;quot;VALOR&amp;quot;,&lt;br /&gt;
  &amp;quot;corFundo&amp;quot;: &amp;quot;#D66815&amp;quot;,&lt;br /&gt;
  &amp;quot;corValor&amp;quot;: &amp;quot;#FFFFFF&amp;quot;,&lt;br /&gt;
  &amp;quot;corDestaque&amp;quot;: &amp;quot;#EFA55F&amp;quot;,&lt;br /&gt;
  &amp;quot;corIdentificacao&amp;quot;: &amp;quot;#FFFFFF&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O &amp;#039;&amp;#039;&amp;#039;campoValor&amp;#039;&amp;#039;&amp;#039; é obrigatório, precisa estar em &amp;#039;&amp;#039;&amp;#039;campos&amp;#039;&amp;#039;&amp;#039; e ser do tipo valor — é o campo somado no cartão. O formato exibido vem do formato desse campo.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Aplica-se a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;corFundo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Fundo do cartão.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;corValor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Número em destaque.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;corIdentificacao&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Rótulo acima do número.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;corDestaque&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Realce do cartão.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
O indicador sempre soma o campo escolhido. Média, contagem ou maior valor precisam vir resolvidos dentro da própria consulta — uma coluna 1 as quantidade, por exemplo, quando somada resulta na contagem de linhas.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Mensagens de erro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando o arquivo tem problemas, nada é importado e a mensagem traz todos de uma vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Não foi possível importar o dashboard. 3 problemas encontrados:&lt;br /&gt;
  1) item 1 (widget &amp;quot;REC_EVOLUCAO_MENSAL&amp;quot;): &amp;quot;grafico.campoX&amp;quot; &amp;quot;ANOMES&amp;quot; não está&lt;br /&gt;
     em &amp;quot;campos&amp;quot;. Todo campo usado precisa estar catalogado lá.&lt;br /&gt;
  2) item 2 (widget &amp;quot;REC_POR_CC&amp;quot;): &amp;quot;grafico.colunas[0].campoValor&amp;quot; &amp;quot;CENTROCUSTO&amp;quot;&lt;br /&gt;
     precisa ser do tipo valor (&amp;quot;tipoCampo&amp;quot;: 3) em &amp;quot;campos&amp;quot;, e está como 1.&lt;br /&gt;
  3) item 2 (widget &amp;quot;REC_POR_CC&amp;quot;): &amp;quot;sequencia&amp;quot; 1 já foi usada em outro item --&lt;br /&gt;
     ela identifica o item no dashboard.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O formato descreve o dashboard por inteiro: itens, widgets, catálogo de Campos, séries de valor e filtros. Por ser texto estruturado com regras conhecidas e validação completa na importação, o mesmo arquivo pode ser gerado fora do sistema, revisado e aplicado em qualquer base.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboards]]&lt;br /&gt;
&lt;br /&gt;
[[Widgets]]&lt;br /&gt;
&lt;br /&gt;
[[Dashboards com IA]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Criando_Dashboards_com_IA&amp;diff=7276</id>
		<title>Criando Dashboards com IA</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Criando_Dashboards_com_IA&amp;diff=7276"/>
		<updated>2026-09-13T20:58:07Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Como Utilizar */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
É possível construir um dashboard pedindo a um agente de IA que gere o arquivo de importação. Você fornece o contexto do que quer acompanhar, a consulta SQL que traz os dados e o layout desejado; o agente devolve um arquivo compatível com o ERP, que é carregado pelo botão Importar do cadastro de Dashboards.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O dashboard e seus Widgets podem ser descritos inteiramente por um arquivo (formato JSON), o mesmo que o botão Exportar gera. Como esse arquivo é texto estruturado e tem regras conhecidas, um agente de IA consegue produzi-lo a partir de uma descrição em linguagem natural, sem que ninguém precise preencher os cadastros campo a campo.&lt;br /&gt;
&lt;br /&gt;
O agente não acessa o sistema: ele apenas escreve o arquivo. Quem cria, atualiza e valida os registros continua sendo o ERP, no momento da importação.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Serve para encurtar o caminho entre &amp;quot;eu preciso enxergar esse número&amp;quot; e um painel pronto. Em vez de cadastrar Widget, Campos, Colunas, Dashboard e Itens um a um, descreve-se o resultado esperado e revisa-se o que foi gerado.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Reduz o tempo de montagem de um painel novo e o conhecimento prévio exigido sobre a estrutura dos cadastros. Facilita a criação de modelos padronizados para distribuir a vários clientes, já que o mesmo arquivo pode ser importado em qualquer base. Também torna a manutenção mais simples: ajustes no painel são pedidos ao agente e reimportados, sem retrabalho manual nos cadastros.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que informar ao agente&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Contexto:&amp;#039;&amp;#039;&amp;#039; o que o painel precisa responder e para quem. Ex.: &amp;quot;acompanhamento mensal das receitas emitidas, para a diretoria&amp;quot;.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Expressão SQL:&amp;#039;&amp;#039;&amp;#039; a consulta que traz os dados, já validada no banco. Ela deve ser &amp;#039;&amp;#039;&amp;#039;crua&amp;#039;&amp;#039;&amp;#039;: sem soma, sem agrupamento e sem ordenação — o próprio sistema monta a agregação a partir dos campos escolhidos.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Colunas da consulta:&amp;#039;&amp;#039;&amp;#039; quais colunas ela devolve e o que cada uma representa (texto, data ou valor).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Layout:&amp;#039;&amp;#039;&amp;#039; quais itens o painel terá, em que ordem, e o tamanho de cada um na grade de 16 colunas. Ex.: &amp;quot;dois indicadores lado a lado no topo e, abaixo, um gráfico de colunas ocupando a largura toda&amp;quot;.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato do arquivo:&amp;#039;&amp;#039;&amp;#039; a especificação do arquivo de importação, que descreve as seções, os campos obrigatórios e os valores aceitos.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O ponto de partida é a consulta. O exemplo abaixo traz as receitas emitidas, uma linha por documento — sem soma e sem agrupamento, como a ferramenta espera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select TO_CHAR(a.dataemissao, &amp;#039;Mon&amp;#039;) as mes,&lt;br /&gt;
       EXTRACT(YEAR FROM a.dataemissao) || &amp;#039;/&amp;#039; ||&lt;br /&gt;
       LPAD(EXTRACT(MONTH FROM a.dataemissao)::text, 2, &amp;#039;0&amp;#039;) as ano_mes,&lt;br /&gt;
       a.valorliquido as valor,&lt;br /&gt;
       a.dataemissao&lt;br /&gt;
from documentos a&lt;br /&gt;
where a.tipomovimento = &amp;#039;S&amp;#039;&lt;br /&gt;
  and a.ehcre = &amp;#039;S&amp;#039;&lt;br /&gt;
  and a.ehaglutinador = &amp;#039;N&amp;#039;&lt;br /&gt;
  and a.situacaofinanceiro = &amp;#039;2&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ela devolve quatro colunas: &amp;#039;&amp;#039;&amp;#039;mes&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;ano_mes&amp;#039;&amp;#039;&amp;#039; (texto), &amp;#039;&amp;#039;&amp;#039;valor&amp;#039;&amp;#039;&amp;#039; (valor) e &amp;#039;&amp;#039;&amp;#039;dataemissao&amp;#039;&amp;#039;&amp;#039; (data). Repare que a soma por mês não está na consulta — quem agrupa e soma é o sistema, a partir do campo escolhido como categoria e da coluna de valor do Widget.&lt;br /&gt;
&lt;br /&gt;
Com isso em mãos, o pedido ao agente pode ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Monte um dashboard chamado &amp;quot;Receitas Emitidas&amp;quot; com esta consulta.&lt;br /&gt;
Quero, no topo, um indicador com o total emitido no período ocupando&lt;br /&gt;
metade da largura e, abaixo, um gráfico de colunas com a evolução&lt;br /&gt;
mensal usando o ano_mes como categoria, ordenado por ele.&lt;br /&gt;
Siga a especificação do formato de importação em anexo.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O agente devolve um único arquivo contendo o dashboard, os dois Widgets, o catálogo de Campos de cada um (com o tipo de cada coluna da consulta) e a Coluna de valor apontando para &amp;#039;&amp;#039;&amp;#039;valor&amp;#039;&amp;#039;&amp;#039;. Basta importar.&lt;br /&gt;
&lt;br /&gt;
Para acrescentar um indicador com a quantidade de documentos, sem mudar o painel, basta pedir uma coluna a mais na consulta — por exemplo &amp;#039;&amp;#039;&amp;#039;1 as quantidade&amp;#039;&amp;#039;&amp;#039; — e um indicador que some esse campo.&lt;br /&gt;
&lt;br /&gt;
Da mesma forma, a partir de uma consulta que devolve centro de custo, valor e data, pede-se um painel de participação: o agente monta um gráfico de pizza com o percentual de cada centro de custo e um gráfico de barras com o ranking em valor.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Utilizar&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume o que precisa ser feito para construir um dashboard com o apoio de um agente de IA.&lt;br /&gt;
&lt;br /&gt;
Escreva e teste a &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039; no banco, conferindo as colunas que ela devolve.&lt;br /&gt;
Reúna o &amp;#039;&amp;#039;&amp;#039;contexto&amp;#039;&amp;#039;&amp;#039; e o &amp;#039;&amp;#039;&amp;#039;[[Layout Importação Dashboards|layout]]&amp;#039;&amp;#039;&amp;#039; desejado, e entregue ao agente junto com a especificação do formato do arquivo.&lt;br /&gt;
Revise o arquivo devolvido, principalmente a consulta e os campos utilizados em cada Widget.&lt;br /&gt;
No cadastro de Dashboards, use o botão &amp;#039;&amp;#039;&amp;#039;Importar&amp;#039;&amp;#039;&amp;#039; e selecione o arquivo.&lt;br /&gt;
Se a importação apontar problemas, devolva a mensagem ao agente e peça a correção — ela indica exatamente o item, o Widget e o campo de cada pendência.&lt;br /&gt;
Abra o dashboard e confira os números antes de liberar para os usuários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Comportamentos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Validação antes de gravar:&amp;#039;&amp;#039;&amp;#039; a importação confere o arquivo inteiro antes de criar qualquer registro. Havendo problema, nada é importado e é apresentada a lista completa das correções necessárias, numerada e identificando o item e o Widget de cada uma.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Correção em ciclo:&amp;#039;&amp;#039;&amp;#039; as mensagens de erro são escritas para serem devolvidas ao agente — ele corrige o arquivo e a importação é repetida, até o painel entrar sem pendências.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cria ou atualiza:&amp;#039;&amp;#039;&amp;#039; os registros são identificados pelo Nome. Reimportar um arquivo corrigido atualiza o dashboard existente, sem duplicar itens nem Widgets.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Revise a consulta gerada.&amp;#039;&amp;#039;&amp;#039; A Expressão SQL roda no banco do cliente. Um agente pode propor junções ou filtros que não refletem a regra do seu negócio — a conferência de quem conhece a operação continua sendo necessária.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Confira os números.&amp;#039;&amp;#039;&amp;#039; Antes de publicar, compare o resultado do painel com um relatório já conhecido. O arquivo pode estar formalmente correto e ainda assim somar a coluna errada.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicador sempre soma.&amp;#039;&amp;#039;&amp;#039; Um indicador totaliza o campo escolhido. Média e maior valor não saem de um indicador — quando necessário, isso precisa vir resolvido dentro da própria consulta.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formulário de filtro.&amp;#039;&amp;#039;&amp;#039; Se o painel usar filtro, o Formulário vinculado precisa existir na base de destino antes da importação.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nomes são a chave.&amp;#039;&amp;#039;&amp;#039; Como a importação identifica os registros pelo Nome, escolha nomes estáveis e específicos para dashboards e Widgets, evitando que um modelo sobrescreva outro por coincidência de nome.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dados sensíveis.&amp;#039;&amp;#039;&amp;#039; Quem tem permissão para ver o dashboard vê o resultado da consulta. Isso não muda por o arquivo ter sido gerado por um agente.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A construção de dashboards com o apoio de um agente de IA aproveita o fato de o painel inteiro poder ser descrito por um arquivo de importação. O agente traduz contexto, consulta e layout nesse arquivo; o ERP valida e cria os registros. O ganho está na velocidade de montagem e na padronização dos modelos, mantendo com quem conhece o negócio a responsabilidade de revisar a consulta e conferir os números.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboards]]&lt;br /&gt;
&lt;br /&gt;
[[Widgets]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Criando_Dashboards_com_IA&amp;diff=7275</id>
		<title>Criando Dashboards com IA</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Criando_Dashboards_com_IA&amp;diff=7275"/>
		<updated>2026-09-13T20:56:07Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
É possível construir um dashboard pedindo a um agente de IA que gere o arquivo de importação. Você fornece o contexto do que quer acompanhar, a consulta SQL que traz os dados e o layout desejado; o agente devolve um arquivo compatível com o ERP, que é carregado pelo botão Importar do cadastro de Dashboards.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O dashboard e seus Widgets podem ser descritos inteiramente por um arquivo (formato JSON), o mesmo que o botão Exportar gera. Como esse arquivo é texto estruturado e tem regras conhecidas, um agente de IA consegue produzi-lo a partir de uma descrição em linguagem natural, sem que ninguém precise preencher os cadastros campo a campo.&lt;br /&gt;
&lt;br /&gt;
O agente não acessa o sistema: ele apenas escreve o arquivo. Quem cria, atualiza e valida os registros continua sendo o ERP, no momento da importação.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Serve para encurtar o caminho entre &amp;quot;eu preciso enxergar esse número&amp;quot; e um painel pronto. Em vez de cadastrar Widget, Campos, Colunas, Dashboard e Itens um a um, descreve-se o resultado esperado e revisa-se o que foi gerado.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Reduz o tempo de montagem de um painel novo e o conhecimento prévio exigido sobre a estrutura dos cadastros. Facilita a criação de modelos padronizados para distribuir a vários clientes, já que o mesmo arquivo pode ser importado em qualquer base. Também torna a manutenção mais simples: ajustes no painel são pedidos ao agente e reimportados, sem retrabalho manual nos cadastros.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que informar ao agente&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Contexto:&amp;#039;&amp;#039;&amp;#039; o que o painel precisa responder e para quem. Ex.: &amp;quot;acompanhamento mensal das receitas emitidas, para a diretoria&amp;quot;.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Expressão SQL:&amp;#039;&amp;#039;&amp;#039; a consulta que traz os dados, já validada no banco. Ela deve ser &amp;#039;&amp;#039;&amp;#039;crua&amp;#039;&amp;#039;&amp;#039;: sem soma, sem agrupamento e sem ordenação — o próprio sistema monta a agregação a partir dos campos escolhidos.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Colunas da consulta:&amp;#039;&amp;#039;&amp;#039; quais colunas ela devolve e o que cada uma representa (texto, data ou valor).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Layout:&amp;#039;&amp;#039;&amp;#039; quais itens o painel terá, em que ordem, e o tamanho de cada um na grade de 16 colunas. Ex.: &amp;quot;dois indicadores lado a lado no topo e, abaixo, um gráfico de colunas ocupando a largura toda&amp;quot;.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato do arquivo:&amp;#039;&amp;#039;&amp;#039; a especificação do arquivo de importação, que descreve as seções, os campos obrigatórios e os valores aceitos.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O ponto de partida é a consulta. O exemplo abaixo traz as receitas emitidas, uma linha por documento — sem soma e sem agrupamento, como a ferramenta espera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
select TO_CHAR(a.dataemissao, &amp;#039;Mon&amp;#039;) as mes,&lt;br /&gt;
       EXTRACT(YEAR FROM a.dataemissao) || &amp;#039;/&amp;#039; ||&lt;br /&gt;
       LPAD(EXTRACT(MONTH FROM a.dataemissao)::text, 2, &amp;#039;0&amp;#039;) as ano_mes,&lt;br /&gt;
       a.valorliquido as valor,&lt;br /&gt;
       a.dataemissao&lt;br /&gt;
from documentos a&lt;br /&gt;
where a.tipomovimento = &amp;#039;S&amp;#039;&lt;br /&gt;
  and a.ehcre = &amp;#039;S&amp;#039;&lt;br /&gt;
  and a.ehaglutinador = &amp;#039;N&amp;#039;&lt;br /&gt;
  and a.situacaofinanceiro = &amp;#039;2&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ela devolve quatro colunas: &amp;#039;&amp;#039;&amp;#039;mes&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;ano_mes&amp;#039;&amp;#039;&amp;#039; (texto), &amp;#039;&amp;#039;&amp;#039;valor&amp;#039;&amp;#039;&amp;#039; (valor) e &amp;#039;&amp;#039;&amp;#039;dataemissao&amp;#039;&amp;#039;&amp;#039; (data). Repare que a soma por mês não está na consulta — quem agrupa e soma é o sistema, a partir do campo escolhido como categoria e da coluna de valor do Widget.&lt;br /&gt;
&lt;br /&gt;
Com isso em mãos, o pedido ao agente pode ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Monte um dashboard chamado &amp;quot;Receitas Emitidas&amp;quot; com esta consulta.&lt;br /&gt;
Quero, no topo, um indicador com o total emitido no período ocupando&lt;br /&gt;
metade da largura e, abaixo, um gráfico de colunas com a evolução&lt;br /&gt;
mensal usando o ano_mes como categoria, ordenado por ele.&lt;br /&gt;
Siga a especificação do formato de importação em anexo.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O agente devolve um único arquivo contendo o dashboard, os dois Widgets, o catálogo de Campos de cada um (com o tipo de cada coluna da consulta) e a Coluna de valor apontando para &amp;#039;&amp;#039;&amp;#039;valor&amp;#039;&amp;#039;&amp;#039;. Basta importar.&lt;br /&gt;
&lt;br /&gt;
Para acrescentar um indicador com a quantidade de documentos, sem mudar o painel, basta pedir uma coluna a mais na consulta — por exemplo &amp;#039;&amp;#039;&amp;#039;1 as quantidade&amp;#039;&amp;#039;&amp;#039; — e um indicador que some esse campo.&lt;br /&gt;
&lt;br /&gt;
Da mesma forma, a partir de uma consulta que devolve centro de custo, valor e data, pede-se um painel de participação: o agente monta um gráfico de pizza com o percentual de cada centro de custo e um gráfico de barras com o ranking em valor.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Utilizar&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume o que precisa ser feito para construir um dashboard com o apoio de um agente de IA.&lt;br /&gt;
&lt;br /&gt;
Escreva e teste a &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039; no banco, conferindo as colunas que ela devolve.&lt;br /&gt;
Reúna o &amp;#039;&amp;#039;&amp;#039;contexto&amp;#039;&amp;#039;&amp;#039; e o &amp;#039;&amp;#039;&amp;#039;layout&amp;#039;&amp;#039;&amp;#039; desejado, e entregue ao agente junto com a especificação do formato do arquivo.&lt;br /&gt;
Revise o arquivo devolvido, principalmente a consulta e os campos utilizados em cada Widget.&lt;br /&gt;
No cadastro de Dashboards, use o botão &amp;#039;&amp;#039;&amp;#039;Importar&amp;#039;&amp;#039;&amp;#039; e selecione o arquivo.&lt;br /&gt;
Se a importação apontar problemas, devolva a mensagem ao agente e peça a correção — ela indica exatamente o item, o Widget e o campo de cada pendência.&lt;br /&gt;
Abra o dashboard e confira os números antes de liberar para os usuários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Comportamentos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Validação antes de gravar:&amp;#039;&amp;#039;&amp;#039; a importação confere o arquivo inteiro antes de criar qualquer registro. Havendo problema, nada é importado e é apresentada a lista completa das correções necessárias, numerada e identificando o item e o Widget de cada uma.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Correção em ciclo:&amp;#039;&amp;#039;&amp;#039; as mensagens de erro são escritas para serem devolvidas ao agente — ele corrige o arquivo e a importação é repetida, até o painel entrar sem pendências.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cria ou atualiza:&amp;#039;&amp;#039;&amp;#039; os registros são identificados pelo Nome. Reimportar um arquivo corrigido atualiza o dashboard existente, sem duplicar itens nem Widgets.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Revise a consulta gerada.&amp;#039;&amp;#039;&amp;#039; A Expressão SQL roda no banco do cliente. Um agente pode propor junções ou filtros que não refletem a regra do seu negócio — a conferência de quem conhece a operação continua sendo necessária.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Confira os números.&amp;#039;&amp;#039;&amp;#039; Antes de publicar, compare o resultado do painel com um relatório já conhecido. O arquivo pode estar formalmente correto e ainda assim somar a coluna errada.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicador sempre soma.&amp;#039;&amp;#039;&amp;#039; Um indicador totaliza o campo escolhido. Média e maior valor não saem de um indicador — quando necessário, isso precisa vir resolvido dentro da própria consulta.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formulário de filtro.&amp;#039;&amp;#039;&amp;#039; Se o painel usar filtro, o Formulário vinculado precisa existir na base de destino antes da importação.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nomes são a chave.&amp;#039;&amp;#039;&amp;#039; Como a importação identifica os registros pelo Nome, escolha nomes estáveis e específicos para dashboards e Widgets, evitando que um modelo sobrescreva outro por coincidência de nome.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dados sensíveis.&amp;#039;&amp;#039;&amp;#039; Quem tem permissão para ver o dashboard vê o resultado da consulta. Isso não muda por o arquivo ter sido gerado por um agente.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A construção de dashboards com o apoio de um agente de IA aproveita o fato de o painel inteiro poder ser descrito por um arquivo de importação. O agente traduz contexto, consulta e layout nesse arquivo; o ERP valida e cria os registros. O ganho está na velocidade de montagem e na padronização dos modelos, mantendo com quem conhece o negócio a responsabilidade de revisar a consulta e conferir os números.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboards]]&lt;br /&gt;
&lt;br /&gt;
[[Widgets]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Criando_Dashboards_com_IA&amp;diff=7274</id>
		<title>Criando Dashboards com IA</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Criando_Dashboards_com_IA&amp;diff=7274"/>
		<updated>2026-09-13T20:50:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: Criou página com &amp;#039;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;=== É possível construir um dashboard pedindo a um agente de IA que gere o arquivo de importação. Você fornece o contexto do que quer acompanhar, a consu...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
É possível construir um dashboard pedindo a um agente de IA que gere o arquivo de importação. Você fornece o contexto do que quer acompanhar, a consulta SQL que traz os dados e o layout desejado; o agente devolve um arquivo compatível com o ERP, que é carregado pelo botão Importar do cadastro de Dashboards.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O dashboard e seus Widgets podem ser descritos inteiramente por um arquivo (formato JSON), o mesmo que o botão Exportar gera. Como esse arquivo é texto estruturado e tem regras conhecidas, um agente de IA consegue produzi-lo a partir de uma descrição em linguagem natural, sem que ninguém precise preencher os cadastros campo a campo.&lt;br /&gt;
&lt;br /&gt;
O agente não acessa o sistema: ele apenas escreve o arquivo. Quem cria, atualiza e valida os registros continua sendo o ERP, no momento da importação.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Serve para encurtar o caminho entre &amp;quot;eu preciso enxergar esse número&amp;quot; e um painel pronto. Em vez de cadastrar Widget, Campos, Colunas, Dashboard e Itens um a um, descreve-se o resultado esperado e revisa-se o que foi gerado.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Reduz o tempo de montagem de um painel novo e o conhecimento prévio exigido sobre a estrutura dos cadastros. Facilita a criação de modelos padronizados para distribuir a vários clientes, já que o mesmo arquivo pode ser importado em qualquer base. Também torna a manutenção mais simples: ajustes no painel são pedidos ao agente e reimportados, sem retrabalho manual nos cadastros.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que informar ao agente&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Contexto:&amp;#039;&amp;#039;&amp;#039; o que o painel precisa responder e para quem. Ex.: &amp;quot;acompanhamento mensal das receitas emitidas, para a diretoria&amp;quot;.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Expressão SQL:&amp;#039;&amp;#039;&amp;#039; a consulta que traz os dados, já validada no banco. Ela deve ser &amp;#039;&amp;#039;&amp;#039;crua&amp;#039;&amp;#039;&amp;#039;: sem soma, sem agrupamento e sem ordenação — o próprio sistema monta a agregação a partir dos campos escolhidos.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Colunas da consulta:&amp;#039;&amp;#039;&amp;#039; quais colunas ela devolve e o que cada uma representa (texto, data ou valor).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Layout:&amp;#039;&amp;#039;&amp;#039; quais itens o painel terá, em que ordem, e o tamanho de cada um na grade de 16 colunas. Ex.: &amp;quot;dois indicadores lado a lado no topo e, abaixo, um gráfico de colunas ocupando a largura toda&amp;quot;.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato do arquivo:&amp;#039;&amp;#039;&amp;#039; a especificação do arquivo de importação, que descreve as seções, os campos obrigatórios e os valores aceitos.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A partir de uma consulta que devolve o mês, o valor e a data de emissão dos documentos, pede-se ao agente um painel com um indicador de total emitido no período e um gráfico de colunas com a evolução mensal. O agente devolve o arquivo com o dashboard, os dois Widgets, o catálogo de Campos de cada um e as Colunas de valor já configuradas; basta importar.&lt;br /&gt;
&lt;br /&gt;
Da mesma forma, a partir de uma consulta que devolve centro de custo, valor e data, pede-se um painel de participação: o agente monta um gráfico de pizza com o percentual de cada centro de custo e um gráfico de barras com o ranking em valor.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Utilizar&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume o que precisa ser feito para construir um dashboard com o apoio de um agente de IA.&lt;br /&gt;
&lt;br /&gt;
Escreva e teste a &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039; no banco, conferindo as colunas que ela devolve.&lt;br /&gt;
Reúna o &amp;#039;&amp;#039;&amp;#039;contexto&amp;#039;&amp;#039;&amp;#039; e o &amp;#039;&amp;#039;&amp;#039;layout&amp;#039;&amp;#039;&amp;#039; desejado, e entregue ao agente junto com a especificação do formato do arquivo.&lt;br /&gt;
Revise o arquivo devolvido, principalmente a consulta e os campos utilizados em cada Widget.&lt;br /&gt;
No cadastro de Dashboards, use o botão &amp;#039;&amp;#039;&amp;#039;Importar&amp;#039;&amp;#039;&amp;#039; e selecione o arquivo.&lt;br /&gt;
Se a importação apontar problemas, devolva a mensagem ao agente e peça a correção — ela indica exatamente o item, o Widget e o campo de cada pendência.&lt;br /&gt;
Abra o dashboard e confira os números antes de liberar para os usuários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Comportamentos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Validação antes de gravar:&amp;#039;&amp;#039;&amp;#039; a importação confere o arquivo inteiro antes de criar qualquer registro. Havendo problema, nada é importado e é apresentada a lista completa das correções necessárias, numerada e identificando o item e o Widget de cada uma.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Correção em ciclo:&amp;#039;&amp;#039;&amp;#039; as mensagens de erro são escritas para serem devolvidas ao agente — ele corrige o arquivo e a importação é repetida, até o painel entrar sem pendências.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cria ou atualiza:&amp;#039;&amp;#039;&amp;#039; os registros são identificados pelo Nome. Reimportar um arquivo corrigido atualiza o dashboard existente, sem duplicar itens nem Widgets.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Revise a consulta gerada.&amp;#039;&amp;#039;&amp;#039; A Expressão SQL roda no banco do cliente. Um agente pode propor junções ou filtros que não refletem a regra do seu negócio — a conferência de quem conhece a operação continua sendo necessária.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Confira os números.&amp;#039;&amp;#039;&amp;#039; Antes de publicar, compare o resultado do painel com um relatório já conhecido. O arquivo pode estar formalmente correto e ainda assim somar a coluna errada.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicador sempre soma.&amp;#039;&amp;#039;&amp;#039; Um indicador totaliza o campo escolhido. Média e maior valor não saem de um indicador — quando necessário, isso precisa vir resolvido dentro da própria consulta.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formulário de filtro.&amp;#039;&amp;#039;&amp;#039; Se o painel usar filtro, o Formulário vinculado precisa existir na base de destino antes da importação.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nomes são a chave.&amp;#039;&amp;#039;&amp;#039; Como a importação identifica os registros pelo Nome, escolha nomes estáveis e específicos para dashboards e Widgets, evitando que um modelo sobrescreva outro por coincidência de nome.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dados sensíveis.&amp;#039;&amp;#039;&amp;#039; Quem tem permissão para ver o dashboard vê o resultado da consulta. Isso não muda por o arquivo ter sido gerado por um agente.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A construção de dashboards com o apoio de um agente de IA aproveita o fato de o painel inteiro poder ser descrito por um arquivo de importação. O agente traduz contexto, consulta e layout nesse arquivo; o ERP valida e cria os registros. O ganho está na velocidade de montagem e na padronização dos modelos, mantendo com quem conhece o negócio a responsabilidade de revisar a consulta e conferir os números.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboards]]&lt;br /&gt;
&lt;br /&gt;
[[Widgets]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Dashboards&amp;diff=7273</id>
		<title>Dashboards</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Dashboards&amp;diff=7273"/>
		<updated>2026-09-13T20:50:40Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Conclusão */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é a funcionalidade do sistema que reúne, em um único painel visual, indicadores e gráficos configuráveis, permitindo o acompanhamento rápido de informações relevantes do negócio sem a necessidade de gerar relatórios manualmente. Cada dashboard é composto por um conjunto de itens — cada um exibindo um Widget do tipo indicador numérico (card) ou gráfico (barra, linha ou pizza) — organizados em um layout de grade dentro da tela.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é uma tela de visualização somente leitura, formada por blocos (itens) distribuídos em grade. Cada item exibe o resultado de um Widget previamente configurado no sistema, que pode assumir dois tipos:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicador (card):&amp;#039;&amp;#039;&amp;#039; exibe um único valor em destaque, geralmente representando uma contagem, total.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Gráfico:&amp;#039;&amp;#039;&amp;#039; exibe uma série de dados no formato de barra, linha ou pizza.&lt;br /&gt;
&lt;br /&gt;
A montagem do dashboard (quais itens existem, em que ordem, com que tamanho e com que Widget) é feita previamente pelos cadastros de &amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Widget&amp;#039;&amp;#039;&amp;#039;. A tela do Dashboard em si apenas exibe o resultado já configurado — não é nela que se adiciona, remove ou redimensiona itens. Cada item é alimentado por uma consulta SQL própria (Expressão SQL), definida no cadastro do Widget correspondente. Opcionalmente, um Dashboard pode ter um Formulário vinculado, permitindo ao usuário filtrar os dados exibidos sem precisar de um novo cadastro.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do Dashboard, conseguimos acompanhar de forma visual e centralizada os principais números da operação, tomando decisões com mais agilidade e sem depender da geração manual de relatórios para obter uma visão geral da situação atual.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao concentrar as informações mais relevantes em um único painel visual, o usuário reduz o tempo gasto navegando por diferentes telas e relatórios para entender a situação do negócio. Isso favorece a identificação rápida de tendências, desvios e pontos de atenção, além de padronizar a forma como diferentes usuários enxergam os mesmos indicadores, evitando interpretações divergentes sobre os mesmos dados.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um dashboard pode reunir, por exemplo, um Widget indicador com o total de pedidos em aberto, um Widget gráfico de barras com o volume de vendas por período e um Widget gráfico de pizza com a participação de cada categoria de produto no faturamento. Dessa forma, em uma única tela, o usuário consegue visualizar tanto números pontuais quanto tendências ao longo do tempo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é composto por dois cadastros: o Dashboard propriamente dito e os Itens do Dashboard. Cada item, por sua vez, exibe um Widget já cadastrado (do tipo Gráfico ou Indicador) — o cadastro do Widget (onde entram título, cores, formato e a Expressão SQL) é tratado em página própria (veja Sugestão de Leitura).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do dashboard, utilizado também como identificador ao exportar/importar sua configuração.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Subtítulo/legenda exibida para o usuário.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formulário:&amp;#039;&amp;#039;&amp;#039; Formulário (tela de filtro) opcional vinculado ao dashboard. Quando informado, a tela de Dashboard passa a exibir o botão &amp;quot;Filtrar&amp;quot;, permitindo restringir os dados exibidos nos itens configurados com Filtros do Item (veja abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;É Sistema:&amp;#039;&amp;#039;&amp;#039; Indica se o dashboard é nativo do sistema (padrão) ou foi criado pelo usuário.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dashboard:&amp;#039;&amp;#039;&amp;#039; Dashboard ao qual o item pertence.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Posição/ordem do item dentro do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no topo do item. Quando deixado em branco, o item assume o título configurado no próprio Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Altura:&amp;#039;&amp;#039;&amp;#039; Altura do item na grade do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Largura:&amp;#039;&amp;#039;&amp;#039; Largura do item na grade do dashboard (a grade possui 16 unidades de largura por linha; itens são distribuídos lado a lado até completar esse limite, quebrando para a linha seguinte quando necessário).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Widget:&amp;#039;&amp;#039;&amp;#039; Widget já cadastrado (do tipo Gráfico ou Indicador) a ser exibido neste item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Filtros do Item:&amp;#039;&amp;#039;&amp;#039; Disponível apenas quando o Dashboard tem um Formulário vinculado. Mapeia cada campo do Formulário para um Campo já catalogado (via &amp;quot;Incluir Campos&amp;quot;) do Widget deste item, definindo a operação a aplicar (igual, diferente, maior ou igual, menor ou igual, contém, está na lista) quando o usuário preencher aquele campo no filtro. Um campo do Formulário sem mapeamento fica disponível para preenchimento, mas não afeta a consulta deste item específico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;É Sistema:&amp;#039;&amp;#039;&amp;#039; Indica se o item é nativo do sistema (padrão) ou foi criado pelo usuário.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Comportamentos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Atualizar:&amp;#039;&amp;#039;&amp;#039; Permite recarregar o dashboard por completo, buscando novamente a estrutura e os dados de todos os itens.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Carregamento por item:&amp;#039;&amp;#039;&amp;#039; Cada item do dashboard é carregado de forma independente: a estrutura visual (títulos, cores, formato) aparece imediatamente, enquanto os dados de cada item são buscados individualmente e exibidos em seguida, com uma animação de entrada.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicação de carregamento:&amp;#039;&amp;#039;&amp;#039; Enquanto os dados de um item ainda não retornaram, é exibido um indicador de carregamento (spinner) sobre o item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sem dados / Erro ao carregar:&amp;#039;&amp;#039;&amp;#039; Caso a consulta de um item não retorne dados, ou ocorra uma falha ao buscá-los, o item exibe uma mensagem informando a situação, sem impedir a exibição dos demais itens do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Distribuição em grade:&amp;#039;&amp;#039;&amp;#039; Os itens são organizados automaticamente em uma grade de 16 colunas, respeitando a largura e altura configuradas em cada item, se ajustando ao tamanho da tela.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Filtrar:&amp;#039;&amp;#039;&amp;#039; Quando o dashboard tem um Formulário vinculado, um botão &amp;quot;Filtrar&amp;quot; aparece no topo da tela, abrindo uma janela com os campos configurados. Ao confirmar, todos os itens com Filtros do Item configurados são recarregados considerando os valores informados.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Lembrar filtro:&amp;#039;&amp;#039;&amp;#039; Se o Formulário vinculado estiver marcado para &amp;quot;Salvar&amp;quot;, o último filtro confirmado pelo usuário é lembrado entre acessos, inclusive reabrindo o dashboard em outro momento. Se essa opção não estiver marcada, o filtro é considerado apenas enquanto a tela permanecer aberta — ao reabrir o dashboard, os campos voltam ao valor padrão configurado no Formulário.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Baixar/Copiar imagem:&amp;#039;&amp;#039;&amp;#039; Ao clicar com o botão direito sobre um Widget do tipo gráfico, é possível baixar a imagem gerada (PNG) ou copiá-la para a área de transferência, para uso em outros documentos ou apresentações.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Disponível no aplicativo:&amp;#039;&amp;#039;&amp;#039; Os dashboards liberados para o grupo do usuário também são exibidos no aplicativo, com a mesma configuração de itens e o mesmo resultado. A barra superior mostra o dashboard aberto e, havendo mais de um disponível, um botão ao lado permite escolher qual exibir.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exportar:&amp;#039;&amp;#039;&amp;#039; No cadastro de Dashboards, gera um arquivo com a configuração completa do dashboard: seus itens, os Widgets utilizados (com Campos, Colunas e configuração visual) e os Filtros do Item. O Formulário vinculado é referenciado pelo nome, mas não vai dentro do arquivo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Importar:&amp;#039;&amp;#039;&amp;#039; Lê um arquivo gerado pela exportação, no mesmo ambiente ou em outro. Os registros são identificados pelo Nome — dashboard, Widget e Campos — de modo que a importação cria o que ainda não existe e atualiza o que já existe, sem duplicar. Antes de gravar, o arquivo é validado por inteiro: havendo qualquer problema, nada é importado e é apresentada a lista completa das correções necessárias, indicando o item e o Widget de cada uma.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sem armazenamento temporário (cache):&amp;#039;&amp;#039;&amp;#039; Toda abertura ou atualização do dashboard executa novamente, em tempo real, a Expressão SQL de todos os seus itens — não há reaproveitamento de um resultado buscado anteriormente.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Dashboard&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume, o que precisa ser feito para configurar um dashboard.&lt;br /&gt;
&lt;br /&gt;
Cadastre primeiro o &amp;#039;&amp;#039;&amp;#039;Widget&amp;#039;&amp;#039;&amp;#039; (do tipo Gráfico ou Indicador) que você quer usar no dashboard — é lá que ficam o título, as cores, o formato e a Expressão SQL que busca os dados (veja a página de Widgets em Sugestão de Leitura).&lt;br /&gt;
Cadastre o &amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;, informando nome e legenda.&lt;br /&gt;
(Opcional) Para permitir que o usuário filtre os dados do dashboard, cadastre um &amp;#039;&amp;#039;&amp;#039;Formulário&amp;#039;&amp;#039;&amp;#039; com os campos desejados e vincule-o ao Dashboard.&lt;br /&gt;
Cadastre os &amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039;, vinculando cada item ao Dashboard criado e ao Widget já cadastrado, e definindo seu título, posição e tamanho na grade.&lt;br /&gt;
(Opcional) Se o Dashboard tiver um Formulário vinculado, configure em cada Item os &amp;#039;&amp;#039;&amp;#039;Filtros do Item&amp;#039;&amp;#039;&amp;#039; que devem respeitar o filtro, mapeando o campo do Formulário para o Campo correspondente do Widget.&lt;br /&gt;
Abra a tela de Dashboard apontando para o dashboard desejado — os itens cadastrados aparecem automaticamente, cada um já exibindo seu resultado.&lt;br /&gt;
&lt;br /&gt;
Se você recebeu um dashboard pronto em arquivo, todo esse roteiro pode ser substituído pelo botão &amp;#039;&amp;#039;&amp;#039;Importar&amp;#039;&amp;#039;&amp;#039; no cadastro de Dashboards: o dashboard, seus itens e os Widgets utilizados são criados de uma só vez.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Como a Expressão SQL é texto livre, o controle de quem pode ver informações sensíveis num dashboard depende de quem tem permissão para visualizar os Dashboard.&lt;br /&gt;
*Ao importar um dashboard que tenha Formulário vinculado, o Formulário precisa existir na base de destino antes da importação — cadastre-o ou importe-o primeiro, senão a importação é recusada informando qual Formulário está faltando.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é o recurso responsável por consolidar, em uma única tela, os principais indicadores e gráficos definidos para acompanhamento do negócio. Por ser inteiramente configurável através dos cadastros de Dashboard e Itens — que reaproveitam Widgets já cadastrados, permite que diferentes visões sejam montadas conforme a necessidade de cada área ou perfil de usuário, sem exigir alterações no sistema. Dessa forma, contribui para uma tomada de decisão mais ágil, baseada em informação centralizada e sempre atualizada.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Widgets]]&lt;br /&gt;
&lt;br /&gt;
[[Criando Dashboards com IA]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Dashboards&amp;diff=7272</id>
		<title>Dashboards</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Dashboards&amp;diff=7272"/>
		<updated>2026-09-13T20:41:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é a funcionalidade do sistema que reúne, em um único painel visual, indicadores e gráficos configuráveis, permitindo o acompanhamento rápido de informações relevantes do negócio sem a necessidade de gerar relatórios manualmente. Cada dashboard é composto por um conjunto de itens — cada um exibindo um Widget do tipo indicador numérico (card) ou gráfico (barra, linha ou pizza) — organizados em um layout de grade dentro da tela.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é uma tela de visualização somente leitura, formada por blocos (itens) distribuídos em grade. Cada item exibe o resultado de um Widget previamente configurado no sistema, que pode assumir dois tipos:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicador (card):&amp;#039;&amp;#039;&amp;#039; exibe um único valor em destaque, geralmente representando uma contagem, total.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Gráfico:&amp;#039;&amp;#039;&amp;#039; exibe uma série de dados no formato de barra, linha ou pizza.&lt;br /&gt;
&lt;br /&gt;
A montagem do dashboard (quais itens existem, em que ordem, com que tamanho e com que Widget) é feita previamente pelos cadastros de &amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Widget&amp;#039;&amp;#039;&amp;#039;. A tela do Dashboard em si apenas exibe o resultado já configurado — não é nela que se adiciona, remove ou redimensiona itens. Cada item é alimentado por uma consulta SQL própria (Expressão SQL), definida no cadastro do Widget correspondente. Opcionalmente, um Dashboard pode ter um Formulário vinculado, permitindo ao usuário filtrar os dados exibidos sem precisar de um novo cadastro.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do Dashboard, conseguimos acompanhar de forma visual e centralizada os principais números da operação, tomando decisões com mais agilidade e sem depender da geração manual de relatórios para obter uma visão geral da situação atual.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao concentrar as informações mais relevantes em um único painel visual, o usuário reduz o tempo gasto navegando por diferentes telas e relatórios para entender a situação do negócio. Isso favorece a identificação rápida de tendências, desvios e pontos de atenção, além de padronizar a forma como diferentes usuários enxergam os mesmos indicadores, evitando interpretações divergentes sobre os mesmos dados.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um dashboard pode reunir, por exemplo, um Widget indicador com o total de pedidos em aberto, um Widget gráfico de barras com o volume de vendas por período e um Widget gráfico de pizza com a participação de cada categoria de produto no faturamento. Dessa forma, em uma única tela, o usuário consegue visualizar tanto números pontuais quanto tendências ao longo do tempo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é composto por dois cadastros: o Dashboard propriamente dito e os Itens do Dashboard. Cada item, por sua vez, exibe um Widget já cadastrado (do tipo Gráfico ou Indicador) — o cadastro do Widget (onde entram título, cores, formato e a Expressão SQL) é tratado em página própria (veja Sugestão de Leitura).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do dashboard, utilizado também como identificador ao exportar/importar sua configuração.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Subtítulo/legenda exibida para o usuário.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formulário:&amp;#039;&amp;#039;&amp;#039; Formulário (tela de filtro) opcional vinculado ao dashboard. Quando informado, a tela de Dashboard passa a exibir o botão &amp;quot;Filtrar&amp;quot;, permitindo restringir os dados exibidos nos itens configurados com Filtros do Item (veja abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;É Sistema:&amp;#039;&amp;#039;&amp;#039; Indica se o dashboard é nativo do sistema (padrão) ou foi criado pelo usuário.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dashboard:&amp;#039;&amp;#039;&amp;#039; Dashboard ao qual o item pertence.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Posição/ordem do item dentro do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no topo do item. Quando deixado em branco, o item assume o título configurado no próprio Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Altura:&amp;#039;&amp;#039;&amp;#039; Altura do item na grade do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Largura:&amp;#039;&amp;#039;&amp;#039; Largura do item na grade do dashboard (a grade possui 16 unidades de largura por linha; itens são distribuídos lado a lado até completar esse limite, quebrando para a linha seguinte quando necessário).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Widget:&amp;#039;&amp;#039;&amp;#039; Widget já cadastrado (do tipo Gráfico ou Indicador) a ser exibido neste item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Filtros do Item:&amp;#039;&amp;#039;&amp;#039; Disponível apenas quando o Dashboard tem um Formulário vinculado. Mapeia cada campo do Formulário para um Campo já catalogado (via &amp;quot;Incluir Campos&amp;quot;) do Widget deste item, definindo a operação a aplicar (igual, diferente, maior ou igual, menor ou igual, contém, está na lista) quando o usuário preencher aquele campo no filtro. Um campo do Formulário sem mapeamento fica disponível para preenchimento, mas não afeta a consulta deste item específico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;É Sistema:&amp;#039;&amp;#039;&amp;#039; Indica se o item é nativo do sistema (padrão) ou foi criado pelo usuário.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Comportamentos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Atualizar:&amp;#039;&amp;#039;&amp;#039; Permite recarregar o dashboard por completo, buscando novamente a estrutura e os dados de todos os itens.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Carregamento por item:&amp;#039;&amp;#039;&amp;#039; Cada item do dashboard é carregado de forma independente: a estrutura visual (títulos, cores, formato) aparece imediatamente, enquanto os dados de cada item são buscados individualmente e exibidos em seguida, com uma animação de entrada.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicação de carregamento:&amp;#039;&amp;#039;&amp;#039; Enquanto os dados de um item ainda não retornaram, é exibido um indicador de carregamento (spinner) sobre o item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sem dados / Erro ao carregar:&amp;#039;&amp;#039;&amp;#039; Caso a consulta de um item não retorne dados, ou ocorra uma falha ao buscá-los, o item exibe uma mensagem informando a situação, sem impedir a exibição dos demais itens do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Distribuição em grade:&amp;#039;&amp;#039;&amp;#039; Os itens são organizados automaticamente em uma grade de 16 colunas, respeitando a largura e altura configuradas em cada item, se ajustando ao tamanho da tela.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Filtrar:&amp;#039;&amp;#039;&amp;#039; Quando o dashboard tem um Formulário vinculado, um botão &amp;quot;Filtrar&amp;quot; aparece no topo da tela, abrindo uma janela com os campos configurados. Ao confirmar, todos os itens com Filtros do Item configurados são recarregados considerando os valores informados.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Lembrar filtro:&amp;#039;&amp;#039;&amp;#039; Se o Formulário vinculado estiver marcado para &amp;quot;Salvar&amp;quot;, o último filtro confirmado pelo usuário é lembrado entre acessos, inclusive reabrindo o dashboard em outro momento. Se essa opção não estiver marcada, o filtro é considerado apenas enquanto a tela permanecer aberta — ao reabrir o dashboard, os campos voltam ao valor padrão configurado no Formulário.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Baixar/Copiar imagem:&amp;#039;&amp;#039;&amp;#039; Ao clicar com o botão direito sobre um Widget do tipo gráfico, é possível baixar a imagem gerada (PNG) ou copiá-la para a área de transferência, para uso em outros documentos ou apresentações.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Disponível no aplicativo:&amp;#039;&amp;#039;&amp;#039; Os dashboards liberados para o grupo do usuário também são exibidos no aplicativo, com a mesma configuração de itens e o mesmo resultado. A barra superior mostra o dashboard aberto e, havendo mais de um disponível, um botão ao lado permite escolher qual exibir.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exportar:&amp;#039;&amp;#039;&amp;#039; No cadastro de Dashboards, gera um arquivo com a configuração completa do dashboard: seus itens, os Widgets utilizados (com Campos, Colunas e configuração visual) e os Filtros do Item. O Formulário vinculado é referenciado pelo nome, mas não vai dentro do arquivo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Importar:&amp;#039;&amp;#039;&amp;#039; Lê um arquivo gerado pela exportação, no mesmo ambiente ou em outro. Os registros são identificados pelo Nome — dashboard, Widget e Campos — de modo que a importação cria o que ainda não existe e atualiza o que já existe, sem duplicar. Antes de gravar, o arquivo é validado por inteiro: havendo qualquer problema, nada é importado e é apresentada a lista completa das correções necessárias, indicando o item e o Widget de cada uma.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sem armazenamento temporário (cache):&amp;#039;&amp;#039;&amp;#039; Toda abertura ou atualização do dashboard executa novamente, em tempo real, a Expressão SQL de todos os seus itens — não há reaproveitamento de um resultado buscado anteriormente.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Dashboard&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume, o que precisa ser feito para configurar um dashboard.&lt;br /&gt;
&lt;br /&gt;
Cadastre primeiro o &amp;#039;&amp;#039;&amp;#039;Widget&amp;#039;&amp;#039;&amp;#039; (do tipo Gráfico ou Indicador) que você quer usar no dashboard — é lá que ficam o título, as cores, o formato e a Expressão SQL que busca os dados (veja a página de Widgets em Sugestão de Leitura).&lt;br /&gt;
Cadastre o &amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;, informando nome e legenda.&lt;br /&gt;
(Opcional) Para permitir que o usuário filtre os dados do dashboard, cadastre um &amp;#039;&amp;#039;&amp;#039;Formulário&amp;#039;&amp;#039;&amp;#039; com os campos desejados e vincule-o ao Dashboard.&lt;br /&gt;
Cadastre os &amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039;, vinculando cada item ao Dashboard criado e ao Widget já cadastrado, e definindo seu título, posição e tamanho na grade.&lt;br /&gt;
(Opcional) Se o Dashboard tiver um Formulário vinculado, configure em cada Item os &amp;#039;&amp;#039;&amp;#039;Filtros do Item&amp;#039;&amp;#039;&amp;#039; que devem respeitar o filtro, mapeando o campo do Formulário para o Campo correspondente do Widget.&lt;br /&gt;
Abra a tela de Dashboard apontando para o dashboard desejado — os itens cadastrados aparecem automaticamente, cada um já exibindo seu resultado.&lt;br /&gt;
&lt;br /&gt;
Se você recebeu um dashboard pronto em arquivo, todo esse roteiro pode ser substituído pelo botão &amp;#039;&amp;#039;&amp;#039;Importar&amp;#039;&amp;#039;&amp;#039; no cadastro de Dashboards: o dashboard, seus itens e os Widgets utilizados são criados de uma só vez.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Como a Expressão SQL é texto livre, o controle de quem pode ver informações sensíveis num dashboard depende de quem tem permissão para visualizar os Dashboard.&lt;br /&gt;
*Ao importar um dashboard que tenha Formulário vinculado, o Formulário precisa existir na base de destino antes da importação — cadastre-o ou importe-o primeiro, senão a importação é recusada informando qual Formulário está faltando.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é o recurso responsável por consolidar, em uma única tela, os principais indicadores e gráficos definidos para acompanhamento do negócio. Por ser inteiramente configurável através dos cadastros de Dashboard e Itens — que reaproveitam Widgets já cadastrados, permite que diferentes visões sejam montadas conforme a necessidade de cada área ou perfil de usuário, sem exigir alterações no sistema. Dessa forma, contribui para uma tomada de decisão mais ágil, baseada em informação centralizada e sempre atualizada.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Widgets]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7271</id>
		<title>Sistema</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7271"/>
		<updated>2026-09-13T20:40:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;&amp;#039;&amp;#039;&amp;#039;Sistema&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Cadastros]]&lt;br /&gt;
:[[Tabelas]]&lt;br /&gt;
:[[Módulos]]&lt;br /&gt;
:[[Arquivos]]&lt;br /&gt;
:[[Filtros]]&lt;br /&gt;
:[[Formulários]]&lt;br /&gt;
:[[Icones]]&lt;br /&gt;
:[[View]]&lt;br /&gt;
:[[Listas de Opções]]&lt;br /&gt;
:[[Tablespaces]]&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Manutenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Ferramentas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Configuração das Agendas]]&lt;br /&gt;
:[[Widgets]]&lt;br /&gt;
:[[Dashboards]]&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Parâmetros&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Parâmetros Desenvolvimento|Desenvolvimento]]&lt;br /&gt;
:[[Parâmetros Firebase|Firebase]]&lt;br /&gt;
:[[Parâmetros da Agenda|Agenda]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7270</id>
		<title>Sistema</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7270"/>
		<updated>2026-09-13T20:40:00Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;&amp;#039;&amp;#039;&amp;#039;Sistema&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Cadastros]]&lt;br /&gt;
:[[Tabelas]]&lt;br /&gt;
:[[Módulos]]&lt;br /&gt;
:[[Arquivos]]&lt;br /&gt;
:[[Filtros]]&lt;br /&gt;
:[[Formulários]]&lt;br /&gt;
:[[Icones]]&lt;br /&gt;
:[[View]]&lt;br /&gt;
:[[Listas de Opções]]&lt;br /&gt;
:[[Tablespaces]]&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Manutenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Ferramentas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Configuração das Agendas]]&lt;br /&gt;
:[[Dashboards]]&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Parâmetros&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Parâmetros Desenvolvimento|Desenvolvimento]]&lt;br /&gt;
:[[Parâmetros Firebase|Firebase]]&lt;br /&gt;
:[[Parâmetros da Agenda|Agenda]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Configura%C3%A7%C3%A3o_das_Agendas&amp;diff=7269</id>
		<title>Configuração das Agendas</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Configura%C3%A7%C3%A3o_das_Agendas&amp;diff=7269"/>
		<updated>2026-09-13T20:37:42Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Este é o cadastro das diferentes informações que serão unificadas na exibição da Agenda. Cada registro representa uma origem de compromissos, e a tela da Agenda apresenta todas as origens juntas, no mesmo calendário, como se fossem uma coisa só.&lt;br /&gt;
&lt;br /&gt;
Cada registro aponta para um cadastro do sistema e ensina a Agenda a lê-lo como compromisso: qual campo guarda a data, quais guardam a hora de início e de fim, e qual guarda o recurso responsável. É o que permite informações de naturezas diferentes, lançadas em telas diferentes, dividirem a mesma visão de calendário.&lt;br /&gt;
&lt;br /&gt;
Os compromissos de todas as origens aparecem juntos, cada um com a sua cor, e o usuário decide pelo filtro quais deseja enxergar.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
É o cadastro que define uma origem de compromissos para a Agenda. Um registro aqui não guarda compromisso nenhum: ele descreve onde os compromissos estão e como devem ser exibidos.&lt;br /&gt;
&lt;br /&gt;
Por isso, incluir uma Agenda nova é trabalho de configuração, não de programação. Cadastros que hoje não aparecem na Agenda podem passar a aparecer desde que tenham data, hora e recurso.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Serve para dar ao usuário uma visão única da ocupação dos recursos, sem que ele precise abrir cada cadastro para descobrir o que está agendado. A partir dessa visão ele consegue:&lt;br /&gt;
&lt;br /&gt;
* enxergar a ocupação de um recurso por dia, semana ou mês, e comparar recursos lado a lado;&lt;br /&gt;
* localizar espaço livre antes de assumir um novo compromisso;&lt;br /&gt;
* abrir o registro de origem direto pelo compromisso, sem procurar na tela do cadastro;&lt;br /&gt;
* incluir um compromisso novo clicando no espaço vazio da agenda.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
O ganho principal é o compromisso deixar de existir só dentro do cadastro em que foi lançado e passar a disputar espaço na agenda do recurso junto com todos os demais. Quem marca passa a ver o que já está marcado, e a sobrecarga de um recurso fica visível antes de virar atraso.&lt;br /&gt;
&lt;br /&gt;
O segundo ganho é a regra de persistência. Um compromisso cuja situação ainda não foi resolvida continua aparecendo na data de hoje mesmo depois de a data original passar, em vez de ficar para trás no calendário. Ele só sai da frente do usuário quando a situação muda para uma que não persiste, o que transforma a agenda também em lista do que está pendente.&lt;br /&gt;
&lt;br /&gt;
O terceiro é a configuração ser por cadastro. Cada empresa decide o que vira compromisso, com que texto, com que cor e sob que condição, sem depender de versão nova do sistema.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Uma empresa de serviços usa duas Agendas. A primeira lê os apontamentos de ordem de serviço, para o técnico enxergar os atendimentos do dia. A segunda lê as anotações da agenda, usadas para lembretes e retornos a clientes.&lt;br /&gt;
&lt;br /&gt;
Nessa mesma empresa, o apontamento que já virou item de ordem de serviço aparece numa cor própria e não aceita ser arrastado, porque o trabalho já foi registrado. A anotação com situação de pendência continua aparecendo hoje até alguém trocá-la por uma situação concluída.&lt;br /&gt;
&lt;br /&gt;
Uma terceira Agenda pode ser criada para visitas comerciais, apontando para o cadastro de visitas, sem nenhuma alteração de programa.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Finalidade&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Nome&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Identificação da Agenda. É por ele que a Agenda é reconhecida ao exportar e importar a configuração entre ambientes.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Legenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Texto apresentado ao usuário, inclusive na lista de Agendas do filtro.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Cadastro de origem dos compromissos. Define a tabela que a Agenda lê e também qual tela é aberta quando o usuário clica em um compromisso.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Data&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna que guarda a data do compromisso. É por ela que a Agenda decide se o registro cai dentro do período exibido.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Hora Início&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna com a hora de início. Define onde o card começa na grade de horas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Hora Fim&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna com a hora de término. Define a altura do card na grade de horas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Recurso&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna que liga o compromisso ao recurso responsável. É ela que distribui os compromissos entre as colunas de recurso e que faz valer a permissão de enxergar a agenda de outro recurso.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Título&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Expressão que monta o texto principal do card.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Expressão que monta o texto complementar, exibido como segunda linha do card quando há espaço.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Condição SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Condição adicional aplicada à busca dos compromissos desta Agenda. Serve para restringir o que aparece, por exemplo ignorando registros cancelados.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão Cor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Expressão que devolve a cor do card. Em branco, o card assume a cor do recurso.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão Persistir&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Condição que, sendo verdadeira, mantém o compromisso visível na data de hoje depois de a data original passar. Em branco, o compromisso aparece apenas na data dele.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão Leitura&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Condição que, sendo verdadeira, trava o compromisso: ele não aceita ser arrastado nem redimensionado na agenda. Em branco, nada é travado.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Padrão&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Marca a Agenda usada quando o usuário pede um compromisso novo sem partir de um compromisso existente. Somente uma Agenda fica marcada: ao marcar uma, as demais são desmarcadas.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Sobre as expressões====&lt;br /&gt;
&lt;br /&gt;
As três expressões são escritas em SQL e valem sobre o registro do compromisso, que na consulta recebe o apelido &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;. Uma coluna do próprio cadastro é referenciada como &amp;#039;&amp;#039;A.NOMEDACOLUNA&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Quando a expressão precisa de informação de outra tabela, ela é escrita como subconsulta, e não como junção. Assim a expressão se basta e a Agenda não exige nenhuma configuração adicional de relacionamento.&lt;br /&gt;
&lt;br /&gt;
Funções de data e outras que mudam de nome conforme o banco de dados são escritas com os marcadores do sistema, como &amp;#039;&amp;#039;@DATA&amp;#039;&amp;#039;, que são substituídos no momento da consulta. Isso permite que a mesma expressão funcione em qualquer banco homologado.&lt;br /&gt;
&lt;br /&gt;
====Filtros====&lt;br /&gt;
&lt;br /&gt;
Cada Agenda aceita uma lista de filtros, que ligam um campo do formulário de filtro da Agenda a uma coluna do cadastro de origem, com o operador desejado. É assim que um campo novo no formulário passa a filtrar os compromissos, sem alteração de programa.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Finalidade&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Formulário Campo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Campo do formulário de filtro que fornece o valor informado pelo usuário.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Operação&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Forma de comparação entre o valor informado e a coluna: igual, diferente, maior ou igual, menor ou igual, contém ou em.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna do cadastro de origem que será comparada.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Campo do formulário deixado em branco pelo usuário não gera filtro, o que permite um formulário com vários campos sem obrigar o preenchimento de todos. Recurso, Agenda e situação das anotações são filtros próprios da tela e não precisam ser configurados aqui.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exportar e Importar&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
A tela permite levar a configuração de uma Agenda de um ambiente para outro: exportar gera um arquivo com tudo o que a Agenda precisa para funcionar, e importar grava esse arquivo no ambiente atual. É o caminho para publicar em produção uma Agenda montada em homologação, ou para repetir num cliente uma configuração já pronta na base modelo.&lt;br /&gt;
&lt;br /&gt;
O arquivo leva só a configuração. Nenhum compromisso é exportado, e nenhum é criado na importação.&lt;br /&gt;
&lt;br /&gt;
O &amp;#039;&amp;#039;&amp;#039;Nome&amp;#039;&amp;#039;&amp;#039; é a chave. Existindo uma Agenda com o mesmo nome no destino, ela é atualizada; não existindo, uma nova é criada. Importar o mesmo arquivo duas vezes, portanto, não duplica a Agenda.&lt;br /&gt;
&lt;br /&gt;
Tudo o que aponta para outro cadastro viaja pelo &amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039;, nunca pelo código interno, porque os códigos de um ambiente não significam nada no outro. Na importação cada nome é resolvido contra os cadastros do destino:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!O que viaja por nome&lt;br /&gt;
!O que precisa existir no destino&lt;br /&gt;
|-&lt;br /&gt;
|Cadastro de origem&lt;br /&gt;
|O cadastro, apontando para a mesma tabela&lt;br /&gt;
|-&lt;br /&gt;
|Campo Data, Campo Hora Início, Campo Hora Fim e Campo Recurso&lt;br /&gt;
|As colunas, na tabela do cadastro de origem&lt;br /&gt;
|-&lt;br /&gt;
|Formulário de filtro e o campo dele, em cada filtro&lt;br /&gt;
|O formulário e o campo, com os mesmos nomes&lt;br /&gt;
|-&lt;br /&gt;
|Campo comparado, em cada filtro&lt;br /&gt;
|A coluna, na tabela do cadastro de origem&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expressões — Título, Expressão, Condição SQL, Expressão Cor, Expressão Persistir e Expressão Leitura — vão como texto, sem tradução nenhuma. São SQL sobre a tabela do cadastro de origem, que é a mesma nos dois ambientes.&lt;br /&gt;
&lt;br /&gt;
A marca &amp;#039;&amp;#039;&amp;#039;Padrão&amp;#039;&amp;#039;&amp;#039; acompanha a Agenda. Importando uma que esteja marcada, as demais do destino são desmarcadas, do mesmo modo que aconteceria marcando pela tela.&lt;br /&gt;
&lt;br /&gt;
Os &amp;#039;&amp;#039;&amp;#039;filtros&amp;#039;&amp;#039;&amp;#039; são regravados por inteiro: a importação descarta a lista que a Agenda tiver no destino e grava a que veio no arquivo. Filtro cujo formulário, campo do formulário ou coluna não existam no destino fica de fora, e o restante da Agenda é gravado normalmente — por isso vale conferir a lista de filtros depois de importar para um ambiente que ainda não tenha o formulário correspondente.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Uma Agenda bem configurada resume-se a responder três perguntas: de onde vêm os compromissos, como eles se apresentam e sob que condição continuam exigindo atenção. As duas primeiras são atendidas pelos campos de cadastro e de texto; a terceira, pelas expressões.&lt;br /&gt;
&lt;br /&gt;
Vale rever a configuração sempre que o cadastro de origem ganhar um campo relevante, como uma situação nova, já que a cor e a persistência são consequência do que estiver escrito nas expressões.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Configura%C3%A7%C3%A3o_das_Agendas&amp;diff=7268</id>
		<title>Configuração das Agendas</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Configura%C3%A7%C3%A3o_das_Agendas&amp;diff=7268"/>
		<updated>2026-09-13T20:36:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Exportar e Importar&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
A tela permite levar a configuração de uma Agenda de um ambiente para outro: exportar gera um arquivo com tudo o que a Agenda precisa para funcionar, e importar grava esse arquivo no ambiente atual. É o caminho para publicar em produção uma Agenda montada em homologação, ou para repetir num cliente uma configuração já pronta na base modelo.&lt;br /&gt;
&lt;br /&gt;
O arquivo leva só a configuração. Nenhum compromisso é exportado, e nenhum é criado na importação.&lt;br /&gt;
&lt;br /&gt;
O &amp;#039;&amp;#039;&amp;#039;Nome&amp;#039;&amp;#039;&amp;#039; é a chave. Existindo uma Agenda com o mesmo nome no destino, ela é atualizada; não existindo, uma nova é criada. Importar o mesmo arquivo duas vezes, portanto, não duplica a Agenda.&lt;br /&gt;
&lt;br /&gt;
Tudo o que aponta para outro cadastro viaja pelo &amp;#039;&amp;#039;&amp;#039;nome&amp;#039;&amp;#039;&amp;#039;, nunca pelo código interno, porque os códigos de um ambiente não significam nada no outro. Na importação cada nome é resolvido contra os cadastros do destino:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!O que viaja por nome&lt;br /&gt;
!O que precisa existir no destino&lt;br /&gt;
|-&lt;br /&gt;
|Cadastro de origem&lt;br /&gt;
|O cadastro, apontando para a mesma tabela&lt;br /&gt;
|-&lt;br /&gt;
|Campo Data, Campo Hora Início, Campo Hora Fim e Campo Recurso&lt;br /&gt;
|As colunas, na tabela do cadastro de origem&lt;br /&gt;
|-&lt;br /&gt;
|Formulário de filtro e o campo dele, em cada filtro&lt;br /&gt;
|O formulário e o campo, com os mesmos nomes&lt;br /&gt;
|-&lt;br /&gt;
|Campo comparado, em cada filtro&lt;br /&gt;
|A coluna, na tabela do cadastro de origem&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As expressões — Título, Expressão, Condição SQL, Expressão Cor, Expressão Persistir e Expressão Leitura — vão como texto, sem tradução nenhuma. São SQL sobre a tabela do cadastro de origem, que é a mesma nos dois ambientes.&lt;br /&gt;
&lt;br /&gt;
A marca &amp;#039;&amp;#039;&amp;#039;Padrão&amp;#039;&amp;#039;&amp;#039; acompanha a Agenda. Importando uma que esteja marcada, as demais do destino são desmarcadas, do mesmo modo que aconteceria marcando pela tela.&lt;br /&gt;
&lt;br /&gt;
Os &amp;#039;&amp;#039;&amp;#039;filtros&amp;#039;&amp;#039;&amp;#039; são regravados por inteiro: a importação descarta a lista que a Agenda tiver no destino e grava a que veio no arquivo. Filtro cujo formulário, campo do formulário ou coluna não existam no destino fica de fora, e o restante da Agenda é gravado normalmente — por isso vale conferir a lista de filtros depois de importar para um ambiente que ainda não tenha o formulário correspondente.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Configura%C3%A7%C3%A3o_das_Agendas&amp;diff=7267</id>
		<title>Configuração das Agendas</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Configura%C3%A7%C3%A3o_das_Agendas&amp;diff=7267"/>
		<updated>2026-09-12T13:49:53Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Conceito */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Este é o cadastro das diferentes informações que serão unificadas na exibição da Agenda. Cada registro representa uma origem de compromissos, e a tela da Agenda apresenta todas as origens juntas, no mesmo calendário, como se fossem uma coisa só.&lt;br /&gt;
&lt;br /&gt;
Cada registro aponta para um cadastro do sistema e ensina a Agenda a lê-lo como compromisso: qual campo guarda a data, quais guardam a hora de início e de fim, e qual guarda o recurso responsável. É o que permite informações de naturezas diferentes, lançadas em telas diferentes, dividirem a mesma visão de calendário.&lt;br /&gt;
&lt;br /&gt;
Os compromissos de todas as origens aparecem juntos, cada um com a sua cor, e o usuário decide pelo filtro quais deseja enxergar.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
É o cadastro que define uma origem de compromissos para a Agenda. Um registro aqui não guarda compromisso nenhum: ele descreve onde os compromissos estão e como devem ser exibidos.&lt;br /&gt;
&lt;br /&gt;
Por isso, incluir uma Agenda nova é trabalho de configuração, não de programação. Cadastros que hoje não aparecem na Agenda podem passar a aparecer desde que tenham data, hora e recurso.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Serve para dar ao usuário uma visão única da ocupação dos recursos, sem que ele precise abrir cada cadastro para descobrir o que está agendado. A partir dessa visão ele consegue:&lt;br /&gt;
&lt;br /&gt;
* enxergar a ocupação de um recurso por dia, semana ou mês, e comparar recursos lado a lado;&lt;br /&gt;
* localizar espaço livre antes de assumir um novo compromisso;&lt;br /&gt;
* abrir o registro de origem direto pelo compromisso, sem procurar na tela do cadastro;&lt;br /&gt;
* incluir um compromisso novo clicando no espaço vazio da agenda.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
O ganho principal é o compromisso deixar de existir só dentro do cadastro em que foi lançado e passar a disputar espaço na agenda do recurso junto com todos os demais. Quem marca passa a ver o que já está marcado, e a sobrecarga de um recurso fica visível antes de virar atraso.&lt;br /&gt;
&lt;br /&gt;
O segundo ganho é a regra de persistência. Um compromisso cuja situação ainda não foi resolvida continua aparecendo na data de hoje mesmo depois de a data original passar, em vez de ficar para trás no calendário. Ele só sai da frente do usuário quando a situação muda para uma que não persiste, o que transforma a agenda também em lista do que está pendente.&lt;br /&gt;
&lt;br /&gt;
O terceiro é a configuração ser por cadastro. Cada empresa decide o que vira compromisso, com que texto, com que cor e sob que condição, sem depender de versão nova do sistema.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Uma empresa de serviços usa duas Agendas. A primeira lê os apontamentos de ordem de serviço, para o técnico enxergar os atendimentos do dia. A segunda lê as anotações da agenda, usadas para lembretes e retornos a clientes.&lt;br /&gt;
&lt;br /&gt;
Nessa mesma empresa, o apontamento que já virou item de ordem de serviço aparece numa cor própria e não aceita ser arrastado, porque o trabalho já foi registrado. A anotação com situação de pendência continua aparecendo hoje até alguém trocá-la por uma situação concluída.&lt;br /&gt;
&lt;br /&gt;
Uma terceira Agenda pode ser criada para visitas comerciais, apontando para o cadastro de visitas, sem nenhuma alteração de programa.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Finalidade&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Nome&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Identificação da Agenda. É por ele que a Agenda é reconhecida ao exportar e importar a configuração entre ambientes.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Legenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Texto apresentado ao usuário, inclusive na lista de Agendas do filtro.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Cadastro de origem dos compromissos. Define a tabela que a Agenda lê e também qual tela é aberta quando o usuário clica em um compromisso.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Data&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna que guarda a data do compromisso. É por ela que a Agenda decide se o registro cai dentro do período exibido.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Hora Início&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna com a hora de início. Define onde o card começa na grade de horas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Hora Fim&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna com a hora de término. Define a altura do card na grade de horas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Recurso&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna que liga o compromisso ao recurso responsável. É ela que distribui os compromissos entre as colunas de recurso e que faz valer a permissão de enxergar a agenda de outro recurso.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Título&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Expressão que monta o texto principal do card.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Expressão que monta o texto complementar, exibido como segunda linha do card quando há espaço.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Condição SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Condição adicional aplicada à busca dos compromissos desta Agenda. Serve para restringir o que aparece, por exemplo ignorando registros cancelados.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão Cor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Expressão que devolve a cor do card. Em branco, o card assume a cor do recurso.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão Persistir&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Condição que, sendo verdadeira, mantém o compromisso visível na data de hoje depois de a data original passar. Em branco, o compromisso aparece apenas na data dele.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão Leitura&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Condição que, sendo verdadeira, trava o compromisso: ele não aceita ser arrastado nem redimensionado na agenda. Em branco, nada é travado.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Margem Direita&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Espaço reservado à direita do card no aplicativo, útil quando o card precisa conviver com um ícone.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Máximo de Linhas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Quantidade máxima de linhas do texto complementar no card do aplicativo.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Padrão&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Marca a Agenda usada quando o usuário pede um compromisso novo sem partir de um compromisso existente. Somente uma Agenda fica marcada: ao marcar uma, as demais são desmarcadas.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Sobre as expressões====&lt;br /&gt;
&lt;br /&gt;
As três expressões são escritas em SQL e valem sobre o registro do compromisso, que na consulta recebe o apelido &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;. Uma coluna do próprio cadastro é referenciada como &amp;#039;&amp;#039;A.NOMEDACOLUNA&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Quando a expressão precisa de informação de outra tabela, ela é escrita como subconsulta, e não como junção. Assim a expressão se basta e a Agenda não exige nenhuma configuração adicional de relacionamento.&lt;br /&gt;
&lt;br /&gt;
Funções de data e outras que mudam de nome conforme o banco de dados são escritas com os marcadores do sistema, como &amp;#039;&amp;#039;@DATA&amp;#039;&amp;#039;, que são substituídos no momento da consulta. Isso permite que a mesma expressão funcione em qualquer banco homologado.&lt;br /&gt;
&lt;br /&gt;
====Filtros====&lt;br /&gt;
&lt;br /&gt;
Cada Agenda aceita uma lista de filtros, que ligam um campo do formulário de filtro da Agenda a uma coluna do cadastro de origem, com o operador desejado. É assim que um campo novo no formulário passa a filtrar os compromissos, sem alteração de programa.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Finalidade&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Formulário Campo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Campo do formulário de filtro que fornece o valor informado pelo usuário.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Operação&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Forma de comparação entre o valor informado e a coluna: igual, diferente, maior ou igual, menor ou igual, contém ou em.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna do cadastro de origem que será comparada.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Campo do formulário deixado em branco pelo usuário não gera filtro, o que permite um formulário com vários campos sem obrigar o preenchimento de todos. Recurso, Agenda e situação das anotações são filtros próprios da tela e não precisam ser configurados aqui.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Uma Agenda bem configurada resume-se a responder três perguntas: de onde vêm os compromissos, como eles se apresentam e sob que condição continuam exigindo atenção. As duas primeiras são atendidas pelos campos de cadastro e de texto; a terceira, pelas expressões.&lt;br /&gt;
&lt;br /&gt;
Vale rever a configuração sempre que o cadastro de origem ganhar um campo relevante, como uma situação nova, já que a cor e a persistência são consequência do que estiver escrito nas expressões.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Configura%C3%A7%C3%A3o_das_Agendas&amp;diff=7266</id>
		<title>Configuração das Agendas</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Configura%C3%A7%C3%A3o_das_Agendas&amp;diff=7266"/>
		<updated>2026-09-12T13:49:21Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Sugestão de Leitura */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
A Agenda é a tela que reúne, numa única visão de calendário, os compromissos de cada recurso da empresa. O que ela mostra não é fixo: cada &amp;#039;&amp;#039;&amp;#039;Agenda&amp;#039;&amp;#039;&amp;#039; cadastrada aponta para um cadastro do sistema e ensina a Agenda a ler aquele cadastro como se fosse um compromisso, dizendo qual campo guarda a data, quais guardam a hora de início e fim, e qual guarda o recurso responsável.&lt;br /&gt;
&lt;br /&gt;
Várias Agendas convivem ao mesmo tempo na mesma tela. Os compromissos de todas aparecem juntos, cada um com a sua cor, e o usuário decide quais quer enxergar pelo filtro.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
É o cadastro que define uma origem de compromissos para a Agenda. Um registro aqui não guarda compromisso nenhum: ele descreve onde os compromissos estão e como devem ser exibidos.&lt;br /&gt;
&lt;br /&gt;
Por isso, incluir uma Agenda nova é trabalho de configuração, não de programação. Cadastros que hoje não aparecem na Agenda podem passar a aparecer desde que tenham data, hora e recurso.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Serve para dar ao usuário uma visão única da ocupação dos recursos, sem que ele precise abrir cada cadastro para descobrir o que está agendado. A partir dessa visão ele consegue:&lt;br /&gt;
&lt;br /&gt;
* enxergar a ocupação de um recurso por dia, semana ou mês, e comparar recursos lado a lado;&lt;br /&gt;
* localizar espaço livre antes de assumir um novo compromisso;&lt;br /&gt;
* abrir o registro de origem direto pelo compromisso, sem procurar na tela do cadastro;&lt;br /&gt;
* incluir um compromisso novo clicando no espaço vazio da agenda.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
O ganho principal é o compromisso deixar de existir só dentro do cadastro em que foi lançado e passar a disputar espaço na agenda do recurso junto com todos os demais. Quem marca passa a ver o que já está marcado, e a sobrecarga de um recurso fica visível antes de virar atraso.&lt;br /&gt;
&lt;br /&gt;
O segundo ganho é a regra de persistência. Um compromisso cuja situação ainda não foi resolvida continua aparecendo na data de hoje mesmo depois de a data original passar, em vez de ficar para trás no calendário. Ele só sai da frente do usuário quando a situação muda para uma que não persiste, o que transforma a agenda também em lista do que está pendente.&lt;br /&gt;
&lt;br /&gt;
O terceiro é a configuração ser por cadastro. Cada empresa decide o que vira compromisso, com que texto, com que cor e sob que condição, sem depender de versão nova do sistema.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Uma empresa de serviços usa duas Agendas. A primeira lê os apontamentos de ordem de serviço, para o técnico enxergar os atendimentos do dia. A segunda lê as anotações da agenda, usadas para lembretes e retornos a clientes.&lt;br /&gt;
&lt;br /&gt;
Nessa mesma empresa, o apontamento que já virou item de ordem de serviço aparece numa cor própria e não aceita ser arrastado, porque o trabalho já foi registrado. A anotação com situação de pendência continua aparecendo hoje até alguém trocá-la por uma situação concluída.&lt;br /&gt;
&lt;br /&gt;
Uma terceira Agenda pode ser criada para visitas comerciais, apontando para o cadastro de visitas, sem nenhuma alteração de programa.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Finalidade&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Nome&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Identificação da Agenda. É por ele que a Agenda é reconhecida ao exportar e importar a configuração entre ambientes.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Legenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Texto apresentado ao usuário, inclusive na lista de Agendas do filtro.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Cadastro de origem dos compromissos. Define a tabela que a Agenda lê e também qual tela é aberta quando o usuário clica em um compromisso.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Data&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna que guarda a data do compromisso. É por ela que a Agenda decide se o registro cai dentro do período exibido.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Hora Início&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna com a hora de início. Define onde o card começa na grade de horas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Hora Fim&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna com a hora de término. Define a altura do card na grade de horas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Recurso&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna que liga o compromisso ao recurso responsável. É ela que distribui os compromissos entre as colunas de recurso e que faz valer a permissão de enxergar a agenda de outro recurso.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Título&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Expressão que monta o texto principal do card.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Expressão que monta o texto complementar, exibido como segunda linha do card quando há espaço.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Condição SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Condição adicional aplicada à busca dos compromissos desta Agenda. Serve para restringir o que aparece, por exemplo ignorando registros cancelados.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão Cor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Expressão que devolve a cor do card. Em branco, o card assume a cor do recurso.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão Persistir&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Condição que, sendo verdadeira, mantém o compromisso visível na data de hoje depois de a data original passar. Em branco, o compromisso aparece apenas na data dele.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão Leitura&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Condição que, sendo verdadeira, trava o compromisso: ele não aceita ser arrastado nem redimensionado na agenda. Em branco, nada é travado.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Margem Direita&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Espaço reservado à direita do card no aplicativo, útil quando o card precisa conviver com um ícone.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Máximo de Linhas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Quantidade máxima de linhas do texto complementar no card do aplicativo.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Padrão&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Marca a Agenda usada quando o usuário pede um compromisso novo sem partir de um compromisso existente. Somente uma Agenda fica marcada: ao marcar uma, as demais são desmarcadas.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Sobre as expressões====&lt;br /&gt;
&lt;br /&gt;
As três expressões são escritas em SQL e valem sobre o registro do compromisso, que na consulta recebe o apelido &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;. Uma coluna do próprio cadastro é referenciada como &amp;#039;&amp;#039;A.NOMEDACOLUNA&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Quando a expressão precisa de informação de outra tabela, ela é escrita como subconsulta, e não como junção. Assim a expressão se basta e a Agenda não exige nenhuma configuração adicional de relacionamento.&lt;br /&gt;
&lt;br /&gt;
Funções de data e outras que mudam de nome conforme o banco de dados são escritas com os marcadores do sistema, como &amp;#039;&amp;#039;@DATA&amp;#039;&amp;#039;, que são substituídos no momento da consulta. Isso permite que a mesma expressão funcione em qualquer banco homologado.&lt;br /&gt;
&lt;br /&gt;
====Filtros====&lt;br /&gt;
&lt;br /&gt;
Cada Agenda aceita uma lista de filtros, que ligam um campo do formulário de filtro da Agenda a uma coluna do cadastro de origem, com o operador desejado. É assim que um campo novo no formulário passa a filtrar os compromissos, sem alteração de programa.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Finalidade&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Formulário Campo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Campo do formulário de filtro que fornece o valor informado pelo usuário.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Operação&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Forma de comparação entre o valor informado e a coluna: igual, diferente, maior ou igual, menor ou igual, contém ou em.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna do cadastro de origem que será comparada.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Campo do formulário deixado em branco pelo usuário não gera filtro, o que permite um formulário com vários campos sem obrigar o preenchimento de todos. Recurso, Agenda e situação das anotações são filtros próprios da tela e não precisam ser configurados aqui.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Uma Agenda bem configurada resume-se a responder três perguntas: de onde vêm os compromissos, como eles se apresentam e sob que condição continuam exigindo atenção. As duas primeiras são atendidas pelos campos de cadastro e de texto; a terceira, pelas expressões.&lt;br /&gt;
&lt;br /&gt;
Vale rever a configuração sempre que o cadastro de origem ganhar um campo relevante, como uma situação nova, já que a cor e a persistência são consequência do que estiver escrito nas expressões.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Configura%C3%A7%C3%A3o_das_Agendas&amp;diff=7265</id>
		<title>Configuração das Agendas</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Configura%C3%A7%C3%A3o_das_Agendas&amp;diff=7265"/>
		<updated>2026-09-12T13:47:20Z</updated>

		<summary type="html">&lt;p&gt;Admin: Criou página com &amp;#039;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===  A Agenda é a tela que reúne, numa única visão de calendário, os compromissos de cada recurso da empresa. O que ela mostra não é fixo: cada &amp;#039;&amp;#039;&amp;#039;Agen...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
A Agenda é a tela que reúne, numa única visão de calendário, os compromissos de cada recurso da empresa. O que ela mostra não é fixo: cada &amp;#039;&amp;#039;&amp;#039;Agenda&amp;#039;&amp;#039;&amp;#039; cadastrada aponta para um cadastro do sistema e ensina a Agenda a ler aquele cadastro como se fosse um compromisso, dizendo qual campo guarda a data, quais guardam a hora de início e fim, e qual guarda o recurso responsável.&lt;br /&gt;
&lt;br /&gt;
Várias Agendas convivem ao mesmo tempo na mesma tela. Os compromissos de todas aparecem juntos, cada um com a sua cor, e o usuário decide quais quer enxergar pelo filtro.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
É o cadastro que define uma origem de compromissos para a Agenda. Um registro aqui não guarda compromisso nenhum: ele descreve onde os compromissos estão e como devem ser exibidos.&lt;br /&gt;
&lt;br /&gt;
Por isso, incluir uma Agenda nova é trabalho de configuração, não de programação. Cadastros que hoje não aparecem na Agenda podem passar a aparecer desde que tenham data, hora e recurso.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Serve para dar ao usuário uma visão única da ocupação dos recursos, sem que ele precise abrir cada cadastro para descobrir o que está agendado. A partir dessa visão ele consegue:&lt;br /&gt;
&lt;br /&gt;
* enxergar a ocupação de um recurso por dia, semana ou mês, e comparar recursos lado a lado;&lt;br /&gt;
* localizar espaço livre antes de assumir um novo compromisso;&lt;br /&gt;
* abrir o registro de origem direto pelo compromisso, sem procurar na tela do cadastro;&lt;br /&gt;
* incluir um compromisso novo clicando no espaço vazio da agenda.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
O ganho principal é o compromisso deixar de existir só dentro do cadastro em que foi lançado e passar a disputar espaço na agenda do recurso junto com todos os demais. Quem marca passa a ver o que já está marcado, e a sobrecarga de um recurso fica visível antes de virar atraso.&lt;br /&gt;
&lt;br /&gt;
O segundo ganho é a regra de persistência. Um compromisso cuja situação ainda não foi resolvida continua aparecendo na data de hoje mesmo depois de a data original passar, em vez de ficar para trás no calendário. Ele só sai da frente do usuário quando a situação muda para uma que não persiste, o que transforma a agenda também em lista do que está pendente.&lt;br /&gt;
&lt;br /&gt;
O terceiro é a configuração ser por cadastro. Cada empresa decide o que vira compromisso, com que texto, com que cor e sob que condição, sem depender de versão nova do sistema.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Uma empresa de serviços usa duas Agendas. A primeira lê os apontamentos de ordem de serviço, para o técnico enxergar os atendimentos do dia. A segunda lê as anotações da agenda, usadas para lembretes e retornos a clientes.&lt;br /&gt;
&lt;br /&gt;
Nessa mesma empresa, o apontamento que já virou item de ordem de serviço aparece numa cor própria e não aceita ser arrastado, porque o trabalho já foi registrado. A anotação com situação de pendência continua aparecendo hoje até alguém trocá-la por uma situação concluída.&lt;br /&gt;
&lt;br /&gt;
Uma terceira Agenda pode ser criada para visitas comerciais, apontando para o cadastro de visitas, sem nenhuma alteração de programa.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Finalidade&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Nome&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Identificação da Agenda. É por ele que a Agenda é reconhecida ao exportar e importar a configuração entre ambientes.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Legenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Texto apresentado ao usuário, inclusive na lista de Agendas do filtro.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Cadastro de origem dos compromissos. Define a tabela que a Agenda lê e também qual tela é aberta quando o usuário clica em um compromisso.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Data&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna que guarda a data do compromisso. É por ela que a Agenda decide se o registro cai dentro do período exibido.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Hora Início&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna com a hora de início. Define onde o card começa na grade de horas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Hora Fim&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna com a hora de término. Define a altura do card na grade de horas.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo Recurso&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna que liga o compromisso ao recurso responsável. É ela que distribui os compromissos entre as colunas de recurso e que faz valer a permissão de enxergar a agenda de outro recurso.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Título&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Expressão que monta o texto principal do card.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Expressão que monta o texto complementar, exibido como segunda linha do card quando há espaço.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Condição SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Condição adicional aplicada à busca dos compromissos desta Agenda. Serve para restringir o que aparece, por exemplo ignorando registros cancelados.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão Cor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Expressão que devolve a cor do card. Em branco, o card assume a cor do recurso.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão Persistir&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Condição que, sendo verdadeira, mantém o compromisso visível na data de hoje depois de a data original passar. Em branco, o compromisso aparece apenas na data dele.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Expressão Leitura&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Condição que, sendo verdadeira, trava o compromisso: ele não aceita ser arrastado nem redimensionado na agenda. Em branco, nada é travado.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Margem Direita&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Espaço reservado à direita do card no aplicativo, útil quando o card precisa conviver com um ícone.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Máximo de Linhas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Quantidade máxima de linhas do texto complementar no card do aplicativo.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Padrão&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Marca a Agenda usada quando o usuário pede um compromisso novo sem partir de um compromisso existente. Somente uma Agenda fica marcada: ao marcar uma, as demais são desmarcadas.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Sobre as expressões====&lt;br /&gt;
&lt;br /&gt;
As três expressões são escritas em SQL e valem sobre o registro do compromisso, que na consulta recebe o apelido &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;. Uma coluna do próprio cadastro é referenciada como &amp;#039;&amp;#039;A.NOMEDACOLUNA&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Quando a expressão precisa de informação de outra tabela, ela é escrita como subconsulta, e não como junção. Assim a expressão se basta e a Agenda não exige nenhuma configuração adicional de relacionamento.&lt;br /&gt;
&lt;br /&gt;
Funções de data e outras que mudam de nome conforme o banco de dados são escritas com os marcadores do sistema, como &amp;#039;&amp;#039;@DATA&amp;#039;&amp;#039;, que são substituídos no momento da consulta. Isso permite que a mesma expressão funcione em qualquer banco homologado.&lt;br /&gt;
&lt;br /&gt;
====Filtros====&lt;br /&gt;
&lt;br /&gt;
Cada Agenda aceita uma lista de filtros, que ligam um campo do formulário de filtro da Agenda a uma coluna do cadastro de origem, com o operador desejado. É assim que um campo novo no formulário passa a filtrar os compromissos, sem alteração de programa.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Campo&lt;br /&gt;
!Finalidade&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Formulário Campo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Campo do formulário de filtro que fornece o valor informado pelo usuário.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Operação&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Forma de comparação entre o valor informado e a coluna: igual, diferente, maior ou igual, menor ou igual, contém ou em.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Campo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Coluna do cadastro de origem que será comparada.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Campo do formulário deixado em branco pelo usuário não gera filtro, o que permite um formulário com vários campos sem obrigar o preenchimento de todos. Recurso, Agenda e situação das anotações são filtros próprios da tela e não precisam ser configurados aqui.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Uma Agenda bem configurada resume-se a responder três perguntas: de onde vêm os compromissos, como eles se apresentam e sob que condição continuam exigindo atenção. As duas primeiras são atendidas pelos campos de cadastro e de texto; a terceira, pelas expressões.&lt;br /&gt;
&lt;br /&gt;
Vale rever a configuração sempre que o cadastro de origem ganhar um campo relevante, como uma situação nova, já que a cor e a persistência são consequência do que estiver escrito nas expressões.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Sugestão de Leitura&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* Parâmetros da Agenda&lt;br /&gt;
* Recursos&lt;br /&gt;
* Formulários&lt;br /&gt;
* Permissões de Recurso&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7264</id>
		<title>Sistema</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7264"/>
		<updated>2026-09-12T13:47:07Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;&amp;#039;&amp;#039;&amp;#039;Sistema&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Cadastros]]&lt;br /&gt;
:[[Tabelas]]&lt;br /&gt;
:[[Módulos]]&lt;br /&gt;
:[[Arquivos]]&lt;br /&gt;
:[[Filtros]]&lt;br /&gt;
:[[Formulários]]&lt;br /&gt;
:[[Icones]]&lt;br /&gt;
:[[View]]&lt;br /&gt;
:[[Listas de Opções]]&lt;br /&gt;
:[[Tablespaces]]&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Manutenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Ferramentas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Configuração das Agendas]]&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Parâmetros&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Parâmetros Desenvolvimento|Desenvolvimento]]&lt;br /&gt;
:[[Parâmetros Firebase|Firebase]]&lt;br /&gt;
:[[Parâmetros da Agenda|Agenda]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7263</id>
		<title>Sistema</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7263"/>
		<updated>2026-09-12T13:46:56Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;&amp;#039;&amp;#039;&amp;#039;Sistema&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Cadastros]]&lt;br /&gt;
:[[Tabelas]]&lt;br /&gt;
:[[Módulos]]&lt;br /&gt;
:[[Arquivos]]&lt;br /&gt;
:[[Filtros]]&lt;br /&gt;
:[[Formulários]]&lt;br /&gt;
:[[Icones]]&lt;br /&gt;
:[[View]]&lt;br /&gt;
:[[Listas de Opções]]&lt;br /&gt;
:[[Tablespaces]]&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Manutenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Ferramentas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Configuração de Agendas]]&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Parâmetros&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Parâmetros Desenvolvimento|Desenvolvimento]]&lt;br /&gt;
:[[Parâmetros Firebase|Firebase]]&lt;br /&gt;
:[[Parâmetros da Agenda|Agenda]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7262</id>
		<title>Sistema</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7262"/>
		<updated>2026-09-12T13:46:44Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;&amp;#039;&amp;#039;&amp;#039;Sistema&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Cadastros]]&lt;br /&gt;
:[[Tabelas]]&lt;br /&gt;
:[[Módulos]]&lt;br /&gt;
:[[Arquivos]]&lt;br /&gt;
:[[Filtros]]&lt;br /&gt;
:[[Formulários]]&lt;br /&gt;
:[[Icones]]&lt;br /&gt;
:[[View]]&lt;br /&gt;
:[[Listas de Opções]]&lt;br /&gt;
:[[Tablespaces]]&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Manutenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Ferramentas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Configução de Agendas]]&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Parâmetros&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Parâmetros Desenvolvimento|Desenvolvimento]]&lt;br /&gt;
:[[Parâmetros Firebase|Firebase]]&lt;br /&gt;
:[[Parâmetros da Agenda|Agenda]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7261</id>
		<title>Sistema</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7261"/>
		<updated>2026-09-11T22:47:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;&amp;#039;&amp;#039;&amp;#039;Sistema&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Cadastros]]&lt;br /&gt;
:[[Tabelas]]&lt;br /&gt;
:[[Módulos]]&lt;br /&gt;
:[[Arquivos]]&lt;br /&gt;
:[[Filtros]]&lt;br /&gt;
:[[Formulários]]&lt;br /&gt;
:[[Icones]]&lt;br /&gt;
:[[View]]&lt;br /&gt;
:[[Listas de Opções]]&lt;br /&gt;
:[[Tablespaces]]&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Manutenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Parâmetros&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Parâmetros Desenvolvimento|Desenvolvimento]]&lt;br /&gt;
:[[Parâmetros Firebase|Firebase]]&lt;br /&gt;
:[[Parâmetros da Agenda|Agenda]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Par%C3%A2metros_de_Ordens_de_Servi%C3%A7o&amp;diff=7260</id>
		<title>Parâmetros de Ordens de Serviço</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Par%C3%A2metros_de_Ordens_de_Servi%C3%A7o&amp;diff=7260"/>
		<updated>2026-09-11T22:44:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Conceito */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Opções de parâmetros relacionados ao processo de geração das ordens de serviços gerais, de manutenção ou de veículos.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Filial:&amp;#039;&amp;#039;&amp;#039; Informar a filial. Preenchido automaticamente quando posicionado em uma única filial.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de O.S.:&amp;#039;&amp;#039;&amp;#039; [[Cadastro de Tipos de Ordem de Serviço|Tipo de ordem de serviço]] padrão. No cadastro da ordem de serviço, o tipo de ordem de serviço será preenchido automaticamente com o tipo informado aqui, após informar a filial.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Condição de Pagamento:&amp;#039;&amp;#039;&amp;#039; [[Cadastro_de_Condições_de_Pagamento|Condição de pagamento]] padrão. Quando não houver uma condição de pagamento informada no cliente e no [[Cadastro de Tipos de Ordem de Serviço|tipo de ordem de serviço]], será utilizada a condição informada aqui, após o preenchimento do cliente.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Forma de Cobrança:&amp;#039;&amp;#039;&amp;#039; [[Cadastro_de_Formas_de_Cobrança|Forma de cobrança]] padrão. Quando não houver uma forma de cobrança informada no cliente e no [[Cadastro de Tipos de Ordem de Serviço|tipo de ordem de serviço]], será utilizada a forma informada aqui, após o preenchimento do cliente.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tabela de Preço:&amp;#039;&amp;#039;&amp;#039; Quando o cliente não possuir tabela de preço, será considerada a tabela presente no tipo de O.S., senão estiver informada no tipo de O.S., será sugerida na ordem de serviço a [[Cadastro de Tabelas de Preço|tabelas de preço]] informa aqui.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dias para aviso de atraso:&amp;#039;&amp;#039;&amp;#039; Quantidade de dias para aviso de atraso. A mensagem de aviso é exibida após a gravação da ordem de serviço, quando localizada parcela em aberto a mais de x dias.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Perfil de Estoque de Manutenção:&amp;#039;&amp;#039;&amp;#039; Determina o perfil de estoque de manutenção utilizado nos processos de movimentações do item de manutenção.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Contador de Apontamentos:&amp;#039;&amp;#039;&amp;#039; Contador utilizado para o preenchimento automático do número do apontamento.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Atualiza validade na confirmação:&amp;#039;&amp;#039;&amp;#039; Determina se a data de validade junto aos itens da ordem de serviço, será atualizada na confirmação da ordem de serviço.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Atualiza garantia na confirmação:&amp;#039;&amp;#039;&amp;#039; Determina se a data de garantia junto aos itens da ordem de serviço, será atualizada na confirmação da confirmação da ordem de serviço.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Permitir o mesmo item para manutenção em diferentes O.S.:&amp;#039;&amp;#039;&amp;#039; Define se um item com o mesmo número de série poderá ser incluído em mais de uma Ordem de Serviço simultaneamente. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Cadastro de Ordens de Serviço|Ordens de Serviço]]&lt;br /&gt;
&lt;br /&gt;
[[Ordem de Serviço - Entrega de Materiais]]&lt;br /&gt;
&lt;br /&gt;
[[Ordem de Serviço - Entrega de Insumos]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Par%C3%A2metros_da_Agenda&amp;diff=7259</id>
		<title>Parâmetros da Agenda</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Par%C3%A2metros_da_Agenda&amp;diff=7259"/>
		<updated>2026-09-11T22:43:36Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Conceito */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Nos parâmetros da agenda, temos configurações relacionadas ao uso da tela da [[Agenda|agenda]].&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Recusros Visíveis:&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7258</id>
		<title>Sistema</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Sistema&amp;diff=7258"/>
		<updated>2026-09-11T22:43:14Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;&amp;#039;&amp;#039;&amp;#039;Sistema&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Cadastros]]&lt;br /&gt;
:[[Tabelas]]&lt;br /&gt;
:[[Módulos]]&lt;br /&gt;
:[[Arquivos]]&lt;br /&gt;
:[[Filtros]]&lt;br /&gt;
:[[Formulários]]&lt;br /&gt;
:[[Icones]]&lt;br /&gt;
:[[View]]&lt;br /&gt;
:[[Listas de Opções]]&lt;br /&gt;
:[[Tablespaces]]&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Manutenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
;&amp;#039;&amp;#039;&amp;#039;Parâmetros&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
:[[Parâmetros Desenvolvimento]]&lt;br /&gt;
:[[Parâmetros Firebase]]&lt;br /&gt;
:[[Parâmetros da Agenda|Agenda]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=M%C3%B3dulo_de_Vendas&amp;diff=7257</id>
		<title>Módulo de Vendas</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=M%C3%B3dulo_de_Vendas&amp;diff=7257"/>
		<updated>2026-09-11T22:42:34Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Parâmetros */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O módulo de vendas do PHERP permite a criação rápida de orçamentos, a geração de pedidos de venda, ordens de serviço, e a emissão de notas fiscais de produtos e serviços, permitindo a conformidade fiscal. Além disso, a agenda de apontamentos vinculada às ordens de serviço permite um acompanhamento detalhado das atividades. Com relatórios analíticos detalhados e integração perfeita com o estoque, o módulo oferece uma visão completa das operações de vendas, facilitando a tomada de decisões estratégicas e proporcionando uma experiência de usuário eficiente e personalizada. &lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Vendas&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
:;Orçamentos de Venda&lt;br /&gt;
::[[Orçamentos de Venda|Cadastro]]&lt;br /&gt;
:;Pedidos de Venda&lt;br /&gt;
::[[Cadastro Pedidos de Venda|Cadastro]]&lt;br /&gt;
::[[Atendimento de Pedidos|Atendimento]]&lt;br /&gt;
:;Pedidos de Representação&lt;br /&gt;
::[[Cadastro Pedido de Representação|Cadastro]]&lt;br /&gt;
:;Faturamento&lt;br /&gt;
::[[Cadastro Faturamento|Cadastro]]&lt;br /&gt;
::[[Emissão de Notas Fiscais|Emissão de Notas Fiscais]]&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Serviços&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
:[[Agenda]]&lt;br /&gt;
:#[[Cadastro de Anotações|Anotações]]&lt;br /&gt;
:#[[Cadastro de Apontamentos|Apontamentos]]&lt;br /&gt;
:#[[Cadastro de Apontamentos Despesas|Apontamentos Despesas]]&lt;br /&gt;
:[[Cadastro de Solicitações|Solicitações]] &lt;br /&gt;
:[[Cadastro de Ordens de Serviço|Ordens de Serviço]]&lt;br /&gt;
:#[[Atendimento de Ordens de Serviço]]&lt;br /&gt;
:#[[Geração de Ordens de Serviço]]&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Cadastros&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
:[[Cadastro de Metas de Venda|Metas de Venda]]&lt;br /&gt;
:[[Cadastro de Tabelas de Preço|Tabelas de Preço]]&lt;br /&gt;
:[[Cadastro de Veículos|Veículos]]&lt;br /&gt;
:[[Cadastro de Atividades|Atividades]]&lt;br /&gt;
:[[Cadastro de Projetos|Projetos]]&lt;br /&gt;
:[[Cadastro de Recursos|Recursos]]&lt;br /&gt;
:[[Situações de Anotações]]&lt;br /&gt;
:[[Questionários]]&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Processos&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
:[[Aprovações]]&lt;br /&gt;
&lt;br /&gt;
:;Comissões&lt;br /&gt;
::[[Apurações de Comissão|Apurações]]&lt;br /&gt;
::[[Cadastro de Perfis de Comissão|Perfis de Comissão]]&lt;br /&gt;
::[[Cadastro da Política de Comissões|Política de Comissões]]&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Parâmetros&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
:;Parâmetros&lt;br /&gt;
::[[Parâmetros de Venda|Venda]]&lt;br /&gt;
::[[Parâmetros de Orçamento|Orçamento de Venda]]&lt;br /&gt;
::[[Parâmetros de Pedidos de Venda|Pedidos de Venda]]&lt;br /&gt;
::[[Parâmetros do Faturamento|Faturamento]]&lt;br /&gt;
::[[Parâmetros de Comissões|Comissões]]&lt;br /&gt;
::[[Parâmetros de Assinatura|Assinatura]]&lt;br /&gt;
::[[Parâmetros de Ordens de Serviço|Ordens de Serviço]]&lt;br /&gt;
::[[Parâmetros de Solicitações|Solicitações]]&lt;br /&gt;
::[[Parâmetros_Nota_Fiscal_Eletrônica|Nota Fiscal Eletrônica]]&lt;br /&gt;
::[[Parâmetros Nota Fiscal Eletrônica de Serviço| Nota Fiscal Eletrônica de Serviço]]&lt;br /&gt;
::[[Utilitários NF-e]]&lt;br /&gt;
:[[Cadastro de Tipos de Documento|Tipos de Documento]]&lt;br /&gt;
:[[Cadastro de Tipos de Orçamento|Tipos de Orçamento]]&lt;br /&gt;
:[[Cadastro de Tipos de Ordem de Serviço|Tipos de Ordem de Serviço]]&lt;br /&gt;
:[[Cadastro de Tipos de Pedido|Tipos de Pedido]]&lt;br /&gt;
:[[Cadastro de Tipos de Solicitação|Tipos de Solicitação]]&lt;br /&gt;
:[[Cadastro de Tipos de Entrega|Tipos de Entregas]]&lt;br /&gt;
:[[Cadastro de Tipos de Manutenções Externas|Tipos de Manutenções Externas]]&lt;br /&gt;
:[[Tipos de Despesas]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Vendas_Processos|Processos]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Par%C3%A2metros_da_Agenda&amp;diff=7256</id>
		<title>Parâmetros da Agenda</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Par%C3%A2metros_da_Agenda&amp;diff=7256"/>
		<updated>2026-09-11T19:23:54Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Conceito */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Nos parâmetros da agenda, temos configurações relacionadas ao uso da tela da [[Agenda|agenda]].&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Recusros Visíveis:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Contador de Apontamentos:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Período de Apontamento:&amp;#039;&amp;#039;&amp;#039; Quando informado, só será possível incluir lançamentos na agenda dentro do período definido.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Cadastro_de_Formas_de_Cobran%C3%A7a&amp;diff=7233</id>
		<title>Cadastro de Formas de Cobrança</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Cadastro_de_Formas_de_Cobran%C3%A7a&amp;diff=7233"/>
		<updated>2026-09-02T21:55:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Geral */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A forma de cobrança é utilizada para registro da forma de recebimento acordada com o cliente. A forma de cobrança também pode estar vinculada ao banco, para que seja realizada geração de boleto bancário.&lt;br /&gt;
&lt;br /&gt;
===Geral===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Identificação da Forma de cobrança.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sigla:&amp;#039;&amp;#039;&amp;#039; Sigla para identificação da forma de cobrança. Além da pesquisa, a sigla é utilizada nos relatório, para que as colunas possam ter a largura padronizada.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Ativa:&amp;#039;&amp;#039;&amp;#039; Indica se a forma de cobrança está disponível para uso no sistema. Formas de cobrança inativas não poderão ser selecionadas em novos registros.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Meio de Pagamento:&amp;#039;&amp;#039;&amp;#039; Informar o meio de pagamento a ser utilizado, boleto, cartão de crédito, debito, dinheiro e etc.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Integração para Pagamento:&amp;#039;&amp;#039;&amp;#039; Tipo de Integração do processo de pagamento com o sistema de automação da empresa.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Bandeira da Operadora do Cartão:&amp;#039;&amp;#039;&amp;#039; Informar a bandeira do cartão associada à forma de cobrança, quando o meio de pagamento for cartão.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Instituição Financeira (Intermediador da Transação):&amp;#039;&amp;#039;&amp;#039; Intermediador da Transação. Tag CNPJReceb junto a NF-e.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dias Fluxo de Caixa: &amp;#039;&amp;#039;&amp;#039; O parâmetro Dias de Fluxo de Caixa representa o prazo adicional necessário para que um valor efetivamente impacte o caixa da empresa, considerando o tempo de processamento do meio de pagamento utilizado. Em meios de pagamento como boletos bancários, TED/DOC, cartões ou outros convênios bancários, o recebimento financeiro não ocorre na mesma data da movimentação ou do pagamento pelo cliente. Nesses casos, o banco pode levar N dias para processar e disponibilizar o valor. Quando esse parâmetro é informado com um valor maior que zero, a quantidade de dias configurada será acrescida à data da movimentação ou da data de recebimento informada no documento. Essa nova data passa a ser considerada como a data efetiva de entrada no fluxo de caixa, ou seja, o momento em que o valor realmente estará disponível para uso. Essa data será exibida nos relatórios de fluxo de caixa.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data / Hora: &amp;#039;&amp;#039;&amp;#039; Horário em que foi realizada a inclusão/alteração do registro da forma de cobrança.&lt;br /&gt;
&lt;br /&gt;
===Contábil===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Operação Contábil:&amp;#039;&amp;#039;&amp;#039; Corresponde a operação contábil associada a forma de cobrança.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Operação Contábil de Cancelamento:&amp;#039;&amp;#039;&amp;#039; Corresponde a operação contábil de cancelamento associada a forma de cobrança.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Manuten%C3%A7%C3%B5es_Preventivas&amp;diff=7232</id>
		<title>Manutenções Preventivas</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Manuten%C3%A7%C3%B5es_Preventivas&amp;diff=7232"/>
		<updated>2026-09-02T20:27:23Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Botões */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A manutenção preventiva foi disponibilizado com o objetivo de centralizar e facilitar o gerenciamento de todas as manutenções realizadas e futuras. &lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Filtros&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Na tela, é possível filtrar todas as manutenções cadastradas por status (Previsto, Confirmado). Também é possível filtrar o tipo de manutenção preventiva que deseja exibir, o veículo em que a manutenção foi registrada e, além disso, disponibilizamos a possibilidade de filtrar por marcadores de quilometragem.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Botões&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Confirmar: &amp;#039;&amp;#039;&amp;#039; Após validar e ajustar as informações da manutenção preventiva nas opções do cadastro do veículo, deve ser confirmada a manutenção preventiva para que ela seja vigente.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Retornar: &amp;#039;&amp;#039;&amp;#039; Retorna para o status cadastrado para poder realizar alterações e ajuste.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Na tela de Manutenção Preventiva você gerencia todas as manutenções criadas previamente de forma organizada.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Manuten%C3%A7%C3%B5es_Preventivas&amp;diff=7231</id>
		<title>Manutenções Preventivas</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Manuten%C3%A7%C3%B5es_Preventivas&amp;diff=7231"/>
		<updated>2026-09-02T20:12:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Botões */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A manutenção preventiva foi disponibilizado com o objetivo de centralizar e facilitar o gerenciamento de todas as manutenções realizadas e futuras. &lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Filtros&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Na tela, é possível filtrar todas as manutenções cadastradas por status (Previsto, Confirmado). Também é possível filtrar o tipo de manutenção preventiva que deseja exibir, o veículo em que a manutenção foi registrada e, além disso, disponibilizamos a possibilidade de filtrar por marcadores de quilometragem.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Botões&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Confirmar&amp;#039;&amp;#039;&amp;#039; Após validar e ajustar as informações da manutenção preventiva nas opções do cadastro do veículo, deve ser confirmada a manutenção preventiva para que ela seja vigente.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Retornar&amp;#039;&amp;#039;&amp;#039; Retorna para o status cadastrado para poder realizar alterações e ajuste.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Na tela de Manutenção Preventiva você gerencia todas as manutenções criadas previamente de forma organizada.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Cadastros&amp;diff=7230</id>
		<title>Cadastros</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Cadastros&amp;diff=7230"/>
		<updated>2026-09-01T22:39:12Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Conclusão */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
O cadastro de Cadastros é responsável por definir como as telas do PHERP serão construídas e como os registros serão manipulados pelo sistema. Nele são configuradas as informações necessárias para criação dinâmica das telas, definição da tabela utilizada, páginas, campos, botões, regras de negócio, permissões e demais recursos utilizados durante a execução do sistema.&lt;br /&gt;
&lt;br /&gt;
Para cada tela do sistema existe um registro de cadastro contendo as informações necessárias para criação do layout e do mecanismo de controle dos registros. O cadastro também prevê configurações de segurança e especifica as classes de negócio utilizadas tanto na interface do usuário quanto no servidor de aplicação.&lt;br /&gt;
&lt;br /&gt;
Em cada cadastro é informada a [[Tabelas|tabela]] correspondente no banco de dados. Como exemplo, o cadastro de Clientes utiliza a tabela &amp;#039;&amp;#039;&amp;#039;PESSOAS&amp;#039;&amp;#039;&amp;#039;. A partir dessa tabela, o sistema identifica os campos disponíveis e cria, em tempo de execução, toda a estrutura necessária para manipulação dos registros.&lt;br /&gt;
&lt;br /&gt;
Além disso, o cadastro disponibiliza diversos recursos que garantem a integridade das informações e automatizam parte dos processos, como:&lt;br /&gt;
&lt;br /&gt;
* Preenchimento automático de campos previamente configurados durante a inclusão de novos registros, incluindo controles internos como a geração da chave primária.&lt;br /&gt;
* Execução automática das regras de negócio implementadas nos scripts da tabela, como preenchimento de informações, validações e demais procedimentos personalizados.&lt;br /&gt;
* Validação dos campos obrigatórios durante a gravação do registro, além da execução do mecanismo de scripts responsável pelas regras de negócio.&lt;br /&gt;
&lt;br /&gt;
Nos cadastros que possuem registros relacionados, como por exemplo Documentos e Itens do Documento, são utilizados sub-cadastros, permitindo que os relacionamentos entre as informações sejam gerenciados automaticamente pelo sistema.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Funcionamento&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
O cadastro utiliza a estrutura definida na [[Tabelas|tabela]] relacionada para construir dinamicamente a interface de usuário. A partir dessa configuração, o sistema identifica os campos disponíveis, organiza-os em páginas, aplica regras de segurança, executa scripts e disponibiliza todos os recursos necessários para manipulação dos registros.&lt;br /&gt;
&lt;br /&gt;
Dessa forma, alterações realizadas na configuração do cadastro passam a refletir diretamente no comportamento da tela correspondente, reduzindo a necessidade de alterações no código da aplicação.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Registro do Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Configurações Gerais&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Corresponde à identificação única do cadastro e não pode conter caracteres especiais ou espaços. Após a gravação, o nome não poderá mais ser alterado, pois passa a ser a chave de identificação do cadastro. Nos cadastros personalizados pelo cliente, o sistema acrescenta automaticamente o prefixo &amp;#039;&amp;#039;&amp;#039;C_&amp;#039;&amp;#039;&amp;#039;, evitando conflitos com cadastros nativos.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Título apresentado ao usuário na parte superior da tela.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tabela:&amp;#039;&amp;#039;&amp;#039; [[Tabelas|Tabela]] do banco de dados utilizada pelo cadastro.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sem Vínculo:&amp;#039;&amp;#039;&amp;#039; Disponível apenas para sub-cadastros. Quando desmarcado, o sistema exige a configuração do campo &amp;#039;&amp;#039;&amp;#039;Parente&amp;#039;&amp;#039;&amp;#039; para controlar automaticamente o relacionamento entre cadastro pai e cadastro filho. Quando marcado, todos os registros da tabela poderão ser exibidos, podendo ser utilizados filtros SQL para restringir sua visualização.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Parente:&amp;#039;&amp;#039;&amp;#039; Disponível apenas para sub-cadastros. Define o campo responsável pelo relacionamento entre o cadastro pai e o cadastro filho.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Define a ordem de exibição dos sub-cadastros quando houver mais de um relacionado ao cadastro principal.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Classe no Cliente:&amp;#039;&amp;#039;&amp;#039; Classe de negócio utilizada pela aplicação Desktop.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Classe no Servidor:&amp;#039;&amp;#039;&amp;#039; Classe de negócio utilizada pelo servidor de aplicação.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Tipo de Cadastro&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&lt;br /&gt;
Determina o layout utilizado para construção da tela.&lt;br /&gt;
&lt;br /&gt;
=====&amp;#039;&amp;#039;&amp;#039;Grid&amp;#039;&amp;#039;&amp;#039;=====&lt;br /&gt;
&lt;br /&gt;
Constrói a tela utilizando um grid para pesquisa, seleção e edição dos registros.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tamanho Grid:&amp;#039;&amp;#039;&amp;#039; Define a largura do grid em pixels.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tipo de Exibição Grid:&amp;#039;&amp;#039;&amp;#039; Permite exibir o grid à esquerda, à direita ou maximizado.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Exibir Grupo:&amp;#039;&amp;#039;&amp;#039; Exibe a área de agrupamento de colunas no grid.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Vazio:&amp;#039;&amp;#039;&amp;#039; Quando marcado, nenhum registro será carregado automaticamente, sendo necessária uma pesquisa para exibição dos dados. Recomenda-se esta opção para tabelas com grande volume de registros.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Auto Exibir:&amp;#039;&amp;#039;&amp;#039; Após gravar um registro, retorna automaticamente para o grid.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Mult Select:&amp;#039;&amp;#039;&amp;#039; Permite selecionar vários registros simultaneamente.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ajustar Colunas:&amp;#039;&amp;#039;&amp;#039; Ajusta automaticamente a largura das colunas do grid.&lt;br /&gt;
&lt;br /&gt;
=====&amp;#039;&amp;#039;&amp;#039;Estrutura&amp;#039;&amp;#039;&amp;#039;=====&lt;br /&gt;
&lt;br /&gt;
Utilizado em cadastros hierárquicos, semelhantes a planos de contas ou árvores de classificação.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Registro Pai:&amp;#039;&amp;#039;&amp;#039; Campo correspondente ao registro pai.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Máscara:&amp;#039;&amp;#039;&amp;#039; Estrutura utilizada para formação da hierarquia. Exemplo: 9.99.999.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Estrutura:&amp;#039;&amp;#039;&amp;#039; Campo que armazenará a estrutura completa gerada pelo sistema.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Código Estrutura:&amp;#039;&amp;#039;&amp;#039; Campo responsável pelo código individual de cada nível.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tamanho Grid:&amp;#039;&amp;#039;&amp;#039; Define a largura do grid.&lt;br /&gt;
&lt;br /&gt;
=====&amp;#039;&amp;#039;&amp;#039;Um a Um&amp;#039;&amp;#039;&amp;#039;=====&lt;br /&gt;
&lt;br /&gt;
Constrói a tela sem utilização de grid, exibindo apenas um registro por vez.&lt;br /&gt;
&lt;br /&gt;
=====&amp;#039;&amp;#039;&amp;#039;Um Registro&amp;#039;&amp;#039;&amp;#039;=====&lt;br /&gt;
&lt;br /&gt;
Utilizado para cadastros que possuem apenas um registro, como parâmetros e configurações gerais do sistema.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Demais Configurações&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Maximizar:&amp;#039;&amp;#039;&amp;#039; Exibe o cadastro ocupando toda a área disponível da aplicação.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Data / Hora:&amp;#039;&amp;#039;&amp;#039; Preenchimento automático da data e hora da última alteração.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Pré-Criar:&amp;#039;&amp;#039;&amp;#039; Realiza previamente toda a criação da estrutura do cadastro.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ícone:&amp;#039;&amp;#039;&amp;#039; Ícone utilizado no título da tela.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Segmento:&amp;#039;&amp;#039;&amp;#039; Restringe a utilização do cadastro aos clientes que possuam o segmento correspondente em sua licença.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ajuda (Link Wiki):&amp;#039;&amp;#039;&amp;#039; Endereço da documentação correspondente na Wiki. Quando informado, o sistema disponibiliza automaticamente o botão de ajuda.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;É Sistema:&amp;#039;&amp;#039;&amp;#039; Indica que o cadastro pertence ao sistema padrão e não pode ser alterado diretamente.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Segurança&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&lt;br /&gt;
Define as permissões e comportamentos relacionados à manipulação dos registros.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Alterar:&amp;#039;&amp;#039;&amp;#039; Permite alteração dos registros.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Incluir:&amp;#039;&amp;#039;&amp;#039; Permite inclusão de novos registros.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Excluir:&amp;#039;&amp;#039;&amp;#039; Permite exclusão de registros.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Condição de Editabilidade:&amp;#039;&amp;#039;&amp;#039; Expressão SQL utilizada para determinar quando um registro poderá ser editado.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Auto Leitura:&amp;#039;&amp;#039;&amp;#039; Nos sub-cadastros, acompanha automaticamente o estado de leitura do cadastro pai.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Permite Script:&amp;#039;&amp;#039;&amp;#039; Habilita a utilização de scripts personalizados.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Visualizar Informações de Registro:&amp;#039;&amp;#039;&amp;#039; Disponibiliza o atalho para consulta das [[Informações_de_Registros|Informações de Registros]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Páginas&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&lt;br /&gt;
As páginas permitem organizar os campos do cadastro em abas, facilitando a navegação e melhorando a organização das informações.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Posição das Páginas:&amp;#039;&amp;#039;&amp;#039; Define onde as abas serão exibidas.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Rotação:&amp;#039;&amp;#039;&amp;#039; Altera a orientação do título das páginas.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Largura Tab:&amp;#039;&amp;#039;&amp;#039; Define uma largura fixa para todas as abas.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Páginas:&amp;#039;&amp;#039;&amp;#039; Relação das páginas pertencentes ao cadastro.&lt;br /&gt;
&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Ordem de exibição.&lt;br /&gt;
&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Identificador único da página.&lt;br /&gt;
&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Nome apresentado ao usuário.&lt;br /&gt;
&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Segmento:&amp;#039;&amp;#039;&amp;#039; Restringe a utilização da página por segmento.&lt;br /&gt;
&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Margens:&amp;#039;&amp;#039;&amp;#039; Cria automaticamente um espaçamento interno na página.&lt;br /&gt;
&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;É Sistema:&amp;#039;&amp;#039;&amp;#039; Indica que a página pertence ao sistema.&lt;br /&gt;
&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Data / Hora:&amp;#039;&amp;#039;&amp;#039; Data e hora da última alteração.&lt;br /&gt;
&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Botão Campos:&amp;#039;&amp;#039;&amp;#039; Permite configurar os campos exibidos na página e personalizar suas propriedades.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Botões do Cadastro&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&lt;br /&gt;
Permite criar botões personalizados que serão exibidos na barra superior da tela.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sequência&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Nome&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Legenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ícone&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Atalho&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Submenu Pai&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Condição de Editabilidade&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Condição de Visibilidade&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Descrição&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Exibir Legenda&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Segmento&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Grupo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=====&amp;#039;&amp;#039;&amp;#039;Tipo de Execução&amp;#039;&amp;#039;&amp;#039;=====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Padrão:&amp;#039;&amp;#039;&amp;#039; Executa procedimentos e scripts do servidor.&lt;br /&gt;
&lt;br /&gt;
** Procedimento&lt;br /&gt;
&lt;br /&gt;
** Script&lt;br /&gt;
&lt;br /&gt;
** Mensagem de Confirmação&lt;br /&gt;
&lt;br /&gt;
** Transação Automática&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cadastro:&amp;#039;&amp;#039;&amp;#039; Abre outro cadastro relacionado.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Formulário:&amp;#039;&amp;#039;&amp;#039; Executa um formulário personalizado.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Impressão:&amp;#039;&amp;#039;&amp;#039; Executa formatos de impressão.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;E-mail:&amp;#039;&amp;#039;&amp;#039; Executa formatos de impressão para envio por e-mail.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Data / Hora:&amp;#039;&amp;#039;&amp;#039; Data da última alteração.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Filtros&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&lt;br /&gt;
Permite configurar filtros padrões utilizados pelo cadastro.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Filtro:&amp;#039;&amp;#039;&amp;#039; Define o cadastro de filtro utilizado.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Estilo do Filtro:&amp;#039;&amp;#039;&amp;#039; Determina a forma de apresentação do filtro para o usuário.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Filtro SQL:&amp;#039;&amp;#039;&amp;#039; Permite informar uma expressão SQL utilizada para restringir os registros apresentados pelo cadastro.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
O cadastro de Cadastros é um dos principais componentes de configuração do PHERP, sendo responsável por definir a estrutura, comportamento e funcionamento das telas do sistema.&lt;br /&gt;
&lt;br /&gt;
Por meio dele é possível configurar a tabela utilizada, organizar os campos em páginas, criar botões personalizados, definir regras de segurança, condições de editabilidade e demais recursos necessários para a construção dinâmica dos cadastros.&lt;br /&gt;
&lt;br /&gt;
Sua utilização proporciona maior flexibilidade ao sistema, permitindo centralizar configurações e facilitar a manutenção, personalização e evolução das funcionalidades do ERP.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Tabelas]]&lt;br /&gt;
&lt;br /&gt;
[[Condição_de_Editabilidade|Condição de Editabilidade]]&lt;br /&gt;
&lt;br /&gt;
[[Informações_de_Registros|Informações de Registros]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Tabelas&amp;diff=7229</id>
		<title>Tabelas</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Tabelas&amp;diff=7229"/>
		<updated>2026-09-01T22:38:45Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Conclusão */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
As tabelas representam a estrutura responsável pelo armazenamento das informações do sistema. Cada tabela organiza um conjunto específico de dados relacionado a um determinado processo do sistema, como cadastros, documentos, movimentações financeiras, estoque, compras, vendas, parâmetros e demais funcionalidades.&lt;br /&gt;
&lt;br /&gt;
Além do armazenamento das informações, as tabelas constituem a base para o funcionamento dos diversos recursos do sistema. Cada [[Cadastros|cadastro]] está vinculado a uma tabela específica, utilizada para identificar os campos disponíveis, seus tipos de dados, relacionamentos, validações e regras de negócio aplicadas durante a manipulação dos registros.&lt;br /&gt;
&lt;br /&gt;
Por meio do cadastro de tabelas é possível consultar a estrutura utilizada pelo sistema, permitindo visualizar as tabelas existentes e suas respectivas configurações.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro da Tabela&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
O cadastro de tabelas permite consultar e administrar as estruturas de dados utilizadas pelo PHERP. Cada registro corresponde a uma tabela do banco de dados e reúne as informações necessárias para que o sistema realize a construção dinâmica dos cadastros, execute regras de negócio e mantenha a integridade das informações.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Identificador único da tabela no sistema, correspondendo ao nome físico existente no banco de dados.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Nome amigável utilizado para identificação da tabela nas telas do sistema.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Por Empresa:&amp;#039;&amp;#039;&amp;#039; Quando marcado, determina que os registros da tabela serão segregados por empresa, permitindo que cada empresa possua seus próprios dados.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Por Filial:&amp;#039;&amp;#039;&amp;#039; Quando marcado, determina que os registros também serão segregados por filial, restringindo a visualização e manipulação das informações conforme a filial selecionada.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data / Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última inclusão ou alteração realizada na configuração da tabela.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Organização das Tabelas&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
As tabelas são organizadas conforme os módulos do PHERP e possuem responsabilidades específicas de acordo com sua finalidade.&lt;br /&gt;
&lt;br /&gt;
Entre os principais grupos de tabelas encontram-se:&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cadastros:&amp;#039;&amp;#039;&amp;#039; Armazenam informações cadastrais, como clientes, fornecedores, produtos, representantes, filiais, transportadoras e demais entidades.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Movimentações:&amp;#039;&amp;#039;&amp;#039; Registram operações realizadas pelos usuários, como documentos fiscais, pedidos de venda, compras, movimentações de estoque, contas a pagar, contas a receber, entre outras.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Configurações:&amp;#039;&amp;#039;&amp;#039; Responsáveis pelo armazenamento de parâmetros, preferências e configurações utilizadas pelos diversos módulos do sistema.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Controle e Auditoria:&amp;#039;&amp;#039;&amp;#039; Utilizadas para registrar informações de auditoria, integrações, logs de processamento e controles internos do PHERP.&lt;br /&gt;
&lt;br /&gt;
Essa organização permite que os módulos compartilhem informações de forma estruturada, reduzindo redundâncias e facilitando a manutenção do banco de dados.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Relacionamento entre as Tabelas&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
As tabelas não funcionam de forma isolada. Elas se relacionam entre si por meio de identificadores (IDs), permitindo que diferentes módulos compartilhem informações sem redundância de dados.&lt;br /&gt;
&lt;br /&gt;
Por exemplo:&lt;br /&gt;
&lt;br /&gt;
* Um registro da tabela &amp;#039;&amp;#039;&amp;#039;DOCUMENTOS&amp;#039;&amp;#039;&amp;#039; referencia um cliente armazenado na tabela &amp;#039;&amp;#039;&amp;#039;PESSOAS&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* Os itens do documento são armazenados na tabela &amp;#039;&amp;#039;&amp;#039;ITENSDOCUMENTOS&amp;#039;&amp;#039;&amp;#039;, mantendo vínculo com o documento correspondente;&lt;br /&gt;
* Cada item referencia um produto cadastrado na tabela &amp;#039;&amp;#039;&amp;#039;PRODUTOS&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* Os lançamentos financeiros gerados pelos documentos são armazenados na tabela &amp;#039;&amp;#039;&amp;#039;LANCAMENTOSFINANCEIROS&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Essa estrutura garante a integridade referencial das informações, facilita consultas SQL e permite que os processos do sistema compartilhem dados de forma consistente.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Utilização&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
As tabelas são utilizadas por diversos recursos do PHERP, e servem como base para o funcionamento dos módulos do sistema.&lt;br /&gt;
&lt;br /&gt;
Entre os principais recursos que utilizam as tabelas estão:&lt;br /&gt;
&lt;br /&gt;
* [[Cadastros|Cadastros]];&lt;br /&gt;
* Campos;&lt;br /&gt;
* Scripts;&lt;br /&gt;
* Relatórios;&lt;br /&gt;
* Consultas SQL;&lt;br /&gt;
* APIs e integrações;&lt;br /&gt;
* Formulários;&lt;br /&gt;
* Processos automatizados.&lt;br /&gt;
&lt;br /&gt;
Sempre que um cadastro é aberto, o sistema consulta a tabela correspondente para identificar sua estrutura, os campos disponíveis, os relacionamentos existentes e as regras de negócio que deverão ser aplicadas durante a manipulação dos registros.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Scripts da Tabela&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Cada tabela pode possuir scripts responsáveis pela execução automática de regras de negócio durante a manipulação dos registros.&lt;br /&gt;
&lt;br /&gt;
Esses scripts podem ser executados em operações como:&lt;br /&gt;
&lt;br /&gt;
* Inclusão de registros;&lt;br /&gt;
* Alteração de informações;&lt;br /&gt;
* Exclusão de registros;&lt;br /&gt;
* Validação de campos;&lt;br /&gt;
* Preenchimento automático de valores;&lt;br /&gt;
* Atualização de registros relacionados;&lt;br /&gt;
* Execução de procedimentos específicos implementados pelo cliente.&lt;br /&gt;
&lt;br /&gt;
Como os scripts pertencem à própria tabela, qualquer cadastro que utilize essa estrutura executará automaticamente as mesmas regras de negócio, garantindo padronização do comportamento em todo o sistema.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
O cadastro de tabelas representa a base estrutural do PHERP, centralizando as definições utilizadas pelos diversos módulos do sistema.&lt;br /&gt;
&lt;br /&gt;
Além de armazenarem as informações, as tabelas definem a estrutura dos dados, seus relacionamentos e as regras de negócio aplicadas durante a manipulação dos registros, servindo como base para a construção dinâmica dos cadastros e demais recursos do sistema.&lt;br /&gt;
&lt;br /&gt;
O conhecimento da estrutura das tabelas facilita atividades de desenvolvimento, suporte, manutenção, integrações e consultas ao banco de dados, contribuindo para um ambiente mais organizado, consistente e de fácil evolução.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Cadastros]]&lt;br /&gt;
&lt;br /&gt;
[[Campos]]&lt;br /&gt;
&lt;br /&gt;
[[Scripts]]&lt;br /&gt;
&lt;br /&gt;
[[Condição_de_Editabilidade|Condição de Editabilidade]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Condi%C3%A7%C3%A3o_de_Editabilidade&amp;diff=7228</id>
		<title>Condição de Editabilidade</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Condi%C3%A7%C3%A3o_de_Editabilidade&amp;diff=7228"/>
		<updated>2026-09-01T22:38:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Para configurar padrões de comportamento e determinar quando determinados campos, cadastros ou botões estão habilitados para os usuários, é possível utilizar expressões SQL nas configurações de condição de editabilidade ou, em alguns casos, de visibilidade.&lt;br /&gt;
&lt;br /&gt;
Exemplo de expressão: VALOR &amp;gt; 0 AND PESSOA IS NOT NULL&lt;br /&gt;
Quando o resultado dessa expressão for verdadeiro, o objeto que foi aplicado estará disponível para alteração.&lt;br /&gt;
&lt;br /&gt;
Funções pré-definidas:&lt;br /&gt;
:*@MODOEDICAO Indicada que o cadastro relacionado, está sendo inserido ou alterado. Exemplo: @MODOEDICAO = &amp;#039;S&amp;#039;&lt;br /&gt;
:*@DEVSIS Indica que é desenvolvedor do sistema. Exemplo: @DEVSIS = &amp;#039;S&amp;#039;&lt;br /&gt;
:*@VAZIO Indicada que o cadastro relacionado, está vazio. Exemplo: @VAZIO = &amp;#039;S&amp;#039;&lt;br /&gt;
:*@MODOINSERCAO Indicada que o cadastro relacionado, está sendo inserido. Exemplo: @MODOINSERSAO = &amp;#039;S&amp;#039;&lt;br /&gt;
:*@LEITURA Indicada que o cadastro relacionado, está na condição de leitura. Exemplo: @LEITURA = &amp;#039;S&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O uso de expressões para configurar o comportamento de objetos relacionados à interface permite definir regras diretamente pelo sistema, sem necessidade de alterações no código-fonte do produto. Dessa forma, as configurações são automaticamente respeitadas tanto em interfaces mobile quanto em desktop.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Fun%C3%A7%C3%B5es_SQL&amp;diff=7227</id>
		<title>Funções SQL</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Fun%C3%A7%C3%B5es_SQL&amp;diff=7227"/>
		<updated>2026-09-01T22:30:49Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bem-vindo à nossa documentação de funções SQL. Este guia foi criado para auxiliar desenvolvedores e analistas a entender e utilizar eficientemente as diversas funções SQL disponíveis em nossa aplicação. Aqui você encontrará descrições detalhadas, exemplos de uso e melhores práticas para cada função.&lt;br /&gt;
&lt;br /&gt;
A documentação está detalhada por função SQL para facilitar a navegação e a consulta rápida. Nosso objetivo é fornecer um recurso claro e compreensível que possa servir como referência contínua durante o desenvolvimento e manutenção de projetos.&lt;br /&gt;
&lt;br /&gt;
Explore as seções abaixo para descobrir como nossas funções podem ajudá-lo a otimizar suas tarefas e projetos. Caso tenha dúvidas ou precise de mais informações, não hesite em consultar nossa equipe.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%; table-layout: fixed;&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 20%;&amp;quot; | Nome&lt;br /&gt;
! style=&amp;quot;width: 50%;&amp;quot; | Descrição&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @ANOMES|@ANOMES]]&lt;br /&gt;
|Retorna ano e mês para cada banco de dados.&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @DATAHORA|@DATAHORA]]&lt;br /&gt;
|Retorna a data e hora atual de acordo com o banco de dados.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @DATA|@DATA]]&lt;br /&gt;
|Retorna a data atual de acordo com o banco de dados.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @DAY|@DAY]]&lt;br /&gt;
|Retorna o dia para cada banco de dados.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @EXPRESSAODB|@EXPRESSAODB]]&lt;br /&gt;
|Permite definir uma expressão exclusiva para determinados bancos de dados.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @FORMATADATA|@FORMATADATA]]&lt;br /&gt;
|Permite definir um formato de data para o campo selecionado.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @LEN|@LEN]]&lt;br /&gt;
|Retorna tamanho da string para cada banco de dados.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @LIMIT|@LIMIT]]&lt;br /&gt;
|Tratar o uso da função limit para PostgreSQL&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @ISNULL|@ISNULL]]&lt;br /&gt;
|Retorna o primeiro valor que não for nulo.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @MONTH|@MONTH]]&lt;br /&gt;
|Retorna o mês para cada banco de dados.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @NUMERIC|@NUMERIC]]&lt;br /&gt;
|Trata o tipo numérico para cada banco dados.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @ROWNUM|@ROWNUM]]&lt;br /&gt;
|Função para limitar a quantidade registros que a consulta vai retornar para Oracle. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @TRIM|@TRIM]]&lt;br /&gt;
|Remove os espaços no começo e final da string para cada banco de dados.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @TOP|@TOP]]&lt;br /&gt;
|Função para limitar a quantidade registros que a consulta vai retornar para SQL Server. &lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @VAR CHAR|@VARCHAR]]&lt;br /&gt;
|Trata o tipo de campo varchar para cada banco de dados.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @YEAR|@YEAR]]&lt;br /&gt;
|Retorna o ano para cada banco de dados.&lt;br /&gt;
|-&lt;br /&gt;
|[[Função @SETDATA|@SETDATA]]&lt;br /&gt;
|Permite informar uma data fixa para o comanndo SQL, no formato DD/MM/YYYY que será convertida de acordo com o banco de dados utilizado.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Fun%C3%A7%C3%A3o_Tirar_acentos&amp;diff=7216</id>
		<title>Função Tirar acentos</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Fun%C3%A7%C3%A3o_Tirar_acentos&amp;diff=7216"/>
		<updated>2026-09-01T10:54:30Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Parâmetros */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A função &amp;#039;&amp;#039;&amp;#039;TirarAcentos&amp;#039;&amp;#039;&amp;#039; remove os acentos de uma string, substituindo caracteres acentuados por suas versões sem acento.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Sintaxe&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Function TirarAcentos(const S: string; SoLetras:Boolean): string;&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Parâmetros&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
! Nome &lt;br /&gt;
!Tipo&lt;br /&gt;
!Descrição&lt;br /&gt;
|-&lt;br /&gt;
|S&lt;br /&gt;
|String&lt;br /&gt;
|A string da qual os acentos serão removidos.&lt;br /&gt;
|-&lt;br /&gt;
|SoLetras&lt;br /&gt;
|Boolean&lt;br /&gt;
|Somente letras.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
 var&lt;br /&gt;
   textoOriginal, textoSemAcentos: string;&lt;br /&gt;
 begin&lt;br /&gt;
   textoOriginal := &amp;#039;Café com Açúcar&amp;#039;;      &lt;br /&gt;
   textoSemAcentos := TirarAcentos(textoOriginal,True);&lt;br /&gt;
   Informacao(&amp;#039;Texto sem acentos: &amp;#039; + textoSemAcentos);  // Exibe: &amp;#039;Texto sem acentos: Cafe com Acucar&amp;#039;&lt;br /&gt;
 end.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Fun%C3%A7%C3%A3o_Tirar_acentos&amp;diff=7215</id>
		<title>Função Tirar acentos</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Fun%C3%A7%C3%A3o_Tirar_acentos&amp;diff=7215"/>
		<updated>2026-09-01T03:08:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Parâmetros */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A função &amp;#039;&amp;#039;&amp;#039;TirarAcentos&amp;#039;&amp;#039;&amp;#039; remove os acentos de uma string, substituindo caracteres acentuados por suas versões sem acento.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Sintaxe&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Function TirarAcentos(const S: string; SoLetras:Boolean): string;&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Parâmetros&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
! Nome &lt;br /&gt;
!Tipo&lt;br /&gt;
!Descrição&lt;br /&gt;
|-&lt;br /&gt;
|S&lt;br /&gt;
|String&lt;br /&gt;
|A string da qual os acentos serão removidos.&lt;br /&gt;
|-&lt;br /&gt;
|S&lt;br /&gt;
|Boolean&lt;br /&gt;
|Somente letras.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
 var&lt;br /&gt;
   textoOriginal, textoSemAcentos: string;&lt;br /&gt;
 begin&lt;br /&gt;
   textoOriginal := &amp;#039;Café com Açúcar&amp;#039;;      &lt;br /&gt;
   textoSemAcentos := TirarAcentos(textoOriginal,True);&lt;br /&gt;
   Informacao(&amp;#039;Texto sem acentos: &amp;#039; + textoSemAcentos);  // Exibe: &amp;#039;Texto sem acentos: Cafe com Acucar&amp;#039;&lt;br /&gt;
 end.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Fun%C3%A7%C3%A3o_Tirar_acentos&amp;diff=7214</id>
		<title>Função Tirar acentos</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Fun%C3%A7%C3%A3o_Tirar_acentos&amp;diff=7214"/>
		<updated>2026-09-01T03:08:02Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Sintaxe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A função &amp;#039;&amp;#039;&amp;#039;TirarAcentos&amp;#039;&amp;#039;&amp;#039; remove os acentos de uma string, substituindo caracteres acentuados por suas versões sem acento.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Sintaxe&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Function TirarAcentos(const S: string; SoLetras:Boolean): string;&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Parâmetros&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
! Nome &lt;br /&gt;
!Tipo&lt;br /&gt;
!Descrição&lt;br /&gt;
|-&lt;br /&gt;
|S&lt;br /&gt;
|String&lt;br /&gt;
|A string da qual os acentos serão removidos.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
 var&lt;br /&gt;
   textoOriginal, textoSemAcentos: string;&lt;br /&gt;
 begin&lt;br /&gt;
   textoOriginal := &amp;#039;Café com Açúcar&amp;#039;;      &lt;br /&gt;
   textoSemAcentos := TirarAcentos(textoOriginal,True);&lt;br /&gt;
   Informacao(&amp;#039;Texto sem acentos: &amp;#039; + textoSemAcentos);  // Exibe: &amp;#039;Texto sem acentos: Cafe com Acucar&amp;#039;&lt;br /&gt;
 end.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7213</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7213"/>
		<updated>2026-08-31T15:04:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Cadastro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget define, de forma reutilizável, a fonte de dados e a aparência de um item que poderá ser exibido em um ou mais Dashboards. É neste cadastro que fica a Expressão SQL responsável por buscar os dados, além de todas as configurações visuais: tipo de exibição, cores, fontes, legendas e formatação dos valores. Um mesmo Widget pode ser configurado como &amp;#039;&amp;#039;&amp;#039;Gráfico&amp;#039;&amp;#039;&amp;#039; (barra, linha ou pizza) ou como &amp;#039;&amp;#039;&amp;#039;Indicador&amp;#039;&amp;#039;&amp;#039; (um único valor em destaque), conforme o Tipo de Widget escolhido.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A tela de cadastro de Widget é dividida em abas: &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;. As abas Campo X e Colunas só se aplicam quando o Tipo de Widget é Gráfico — quando é Indicador, o próprio Campo X passa a fornecer o valor único exibido no card, e a aba Colunas não é utilizada.&lt;br /&gt;
&lt;br /&gt;
A Expressão SQL deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY: quem agrupa pelo Campo X (e Campo Série, quando configurado) e soma cada Coluna de valor é o próprio Widget, automaticamente, na hora de montar o gráfico. Isso permite que qualquer campo retornado pela consulta — mesmo um usado só para calcular o Campo X, sem aparecer diretamente no gráfico — possa ser usado como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do cadastro de Widget, conseguimos criar visualizações próprias — tanto números em destaque quanto gráficos — para acompanhar qualquer informação do sistema, sem depender de um relatório específico, e reaproveitar essa mesma visualização em quantos dashboards forem necessários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao centralizar em um único cadastro a consulta e a aparência de um Widget, diferentes dashboards podem reaproveitar o mesmo sem retrabalho, garantindo que todos que o utilizam enxerguem a informação da mesma forma. Isso também facilita ajustes futuros: ao alterar o Widget uma única vez, a mudança se reflete em todos os dashboards que o utilizam.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um Widget do tipo Gráfico pode ser criado, por exemplo, para exibir em barras verticais o total vendido por vendedor, em linha a evolução de um valor ao longo de um período, ou em pizza a participação de cada categoria em um total. Um Widget do tipo Indicador pode destacar, por exemplo, o total de pedidos em aberto, o valor total de contas a receber vencidas, ou a quantidade de itens abaixo do estoque mínimo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é organizado nas abas &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho Fonte Título:&amp;#039;&amp;#039;&amp;#039; Tamanho da fonte utilizada no título.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Widget:&amp;#039;&amp;#039;&amp;#039; Define se este widget é um Gráfico ou um Indicador. Os campos abaixo marcados como &amp;quot;somente Gráfico&amp;quot; só têm efeito nesse tipo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Gráfico&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define o formato de exibição (veja tabela de tipos abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o Título:&amp;#039;&amp;#039;&amp;#039; Define se o título é exibido.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir valores&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se os valores são exibidos junto aos elementos do gráfico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:70%;&amp;quot;&lt;br /&gt;
! Tipo de Gráfico&lt;br /&gt;
! Descrição&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Barra Horizontal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas horizontalmente.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Barra Vertical&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas verticalmente (colunas).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Linha&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como uma série contínua, indicada para visualizar tendências ao longo de um período.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Pizza&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como percentual de participação em relação ao total.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo X:&amp;#039;&amp;#039;&amp;#039; Campo, catalogado a partir da Expressão SQL (veja Campos abaixo), utilizado como rótulo/categoria no Gráfico ou como valor exibido no Indicador.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho da Fonte&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Tamanho da fonte utilizado nos rótulos do eixo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Posição da Legenda&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define onde a legenda é exibida (Superior, Esquerda, Direita, Inferior ou Dentro do gráfico).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Barra ou Linha&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor do Valor&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor do Fundo da Barra&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor de Fundo do Card&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor de Identificação&amp;#039;&amp;#039;&amp;#039; (somente Indicador): Cor do texto de identificação/título do card.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Série / Campo Série&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): permite que uma mesma consulta gere várias séries lado a lado (ex.: uma barra por vendedor dentro de cada mês), a partir do valor de um campo adicional da Expressão SQL. Sem essa configuração, o gráfico exibe uma série única.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Ordenação&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): campo, catalogado a partir da Expressão SQL, usado para ordenar o gráfico quando o próprio Campo X não ordena da forma esperada (por exemplo, Campo X trazendo o nome do mês abreviado, que ordenaria em ordem alfabética em vez de cronológica). Sem essa configuração, a ordenação segue o próprio Campo X.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Destacar Diferença&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): em vez da barra partir sempre do zero, passa a partir de perto do menor valor da série — útil quando os valores são próximos entre si e distantes de zero, tornando a diferença entre eles mais visível.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento inicial da barra de fundo / Arredondamento inicial da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no início da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento final da barra de fundo / Arredondamento final da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no final da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o fundo da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se o fundo/trilho da barra é exibido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; (somente Gráfico)&lt;br /&gt;
Cada linha desta grade representa uma série de valores exibida no gráfico:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Ordem da coluna de valores.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Texto de legenda associado a essa série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Valor:&amp;#039;&amp;#039;&amp;#039; Campo, catalogado a partir da Expressão SQL, cujo valor será somado e exibido nesta série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir Percentual:&amp;#039;&amp;#039;&amp;#039; Quando marcado, será exibido o percentual em relação as demais colunas ao invés do valor.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Fonte do Valor / Cor da Fonte do Valor (alternativa):&amp;#039;&amp;#039;&amp;#039; Cores utilizadas no texto do valor, sendo a segunda aplicada quando o valor é exibido sobre um fundo colorido (dentro da barra ou fatia).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação numérica do valor (separador de milhar, casas decimais). Vem preenchida automaticamente conforme o tipo do campo ao catalogá-lo (veja Campos abaixo).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Grade com os campos catalogados a partir do resultado da Expressão SQL — é dessa lista que vêm as opções disponíveis para seleção em Campo X, Campo Série, Campo Ordenação (aba Campo X) e Campo Valor (aba Colunas).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome do campo, igual ao nome da coluna retornada pela Expressão SQL.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo:&amp;#039;&amp;#039;&amp;#039; Tipo do campo (texto, data ou valor), identificado automaticamente a partir do tipo de dado retornado pela consulta.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação, preenchida automaticamente para campos do tipo valor.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Incluir Campos:&amp;#039;&amp;#039;&amp;#039; Botão que executa a Expressão SQL e catalога nesta grade os campos do resultado que ainda não estiverem cadastrados.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Aba onde é escrita a consulta SQL responsável por buscar os dados do widget. A consulta deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY — não é ela quem soma ou agrupa os valores, isso é feito automaticamente a partir do que for configurado em Campo X/Campo Série/Colunas.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Widget&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume o que precisa ser feito para deixar um Widget pronto para uso em um Dashboard.&lt;br /&gt;
&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, escreva a consulta que retorna os dados desejados, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; agrupar ou somar nada — cada linha do resultado deve ser um registro de detalhe.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039;, clique em &amp;#039;&amp;#039;&amp;#039;&amp;quot;Incluir Campos&amp;quot;&amp;#039;&amp;#039;&amp;#039; para catalogar os campos retornados pela consulta.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, informe Nome, Título e escolha o Tipo de Widget (Gráfico ou Indicador) e, se Gráfico, o Tipo de Gráfico.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, selecione o Campo X (categoria, no Gráfico, ou o próprio valor, no Indicador) dentre os campos já catalogados, e configure a aparência (cores, arredondamento, fundo, legenda). Se precisar de séries lado a lado ou de uma ordenação diferente do Campo X, configure também Campo Série e Campo Ordenação.&lt;br /&gt;
Se o Tipo de Widget for Gráfico, na aba &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; cadastre uma ou mais colunas de valor, selecionando o Campo Valor já catalogado, a legenda e a cor.&lt;br /&gt;
Salve o cadastro. O Widget já pode ser selecionado no campo Widget de um Item do Dashboard.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*A Expressão SQL não deve conter GROUP BY — o próprio widget agrupa e soma os dados a partir do Campo X, Campo Série e das Colunas de valor configuradas.&lt;br /&gt;
*Campo X, Campo Série, Campo Ordenação e Campo Valor só oferecem para seleção os campos já catalogados na aba Campos (&amp;quot;Incluir Campos&amp;quot;) — se alterar a Expressão SQL depois, catalogue os campos novamente.&lt;br /&gt;
*Qualquer campo retornado pela Expressão SQL (mesmo que não usado em Campo X, Série ou Colunas) fica disponível para ser usado como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é o responsável por definir, em um único lugar, tanto a origem dos dados (a Expressão SQL) quanto a forma como eles são apresentados visualmente — seja como Gráfico ou como Indicador. Por ser independente do Dashboard em si, um mesmo Widget pode ser reaproveitado em diferentes dashboards, facilitando a manutenção e garantindo consistência visual entre eles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboards|Dashboards]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7212</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7212"/>
		<updated>2026-08-30T00:09:55Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Conclusão */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget define, de forma reutilizável, a fonte de dados e a aparência de um item que poderá ser exibido em um ou mais Dashboards. É neste cadastro que fica a Expressão SQL responsável por buscar os dados, além de todas as configurações visuais: tipo de exibição, cores, fontes, legendas e formatação dos valores. Um mesmo Widget pode ser configurado como &amp;#039;&amp;#039;&amp;#039;Gráfico&amp;#039;&amp;#039;&amp;#039; (barra, linha ou pizza) ou como &amp;#039;&amp;#039;&amp;#039;Indicador&amp;#039;&amp;#039;&amp;#039; (um único valor em destaque), conforme o Tipo de Widget escolhido.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A tela de cadastro de Widget é dividida em abas: &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;. As abas Campo X e Colunas só se aplicam quando o Tipo de Widget é Gráfico — quando é Indicador, o próprio Campo X passa a fornecer o valor único exibido no card, e a aba Colunas não é utilizada.&lt;br /&gt;
&lt;br /&gt;
A Expressão SQL deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY: quem agrupa pelo Campo X (e Campo Série, quando configurado) e soma cada Coluna de valor é o próprio Widget, automaticamente, na hora de montar o gráfico. Isso permite que qualquer campo retornado pela consulta — mesmo um usado só para calcular o Campo X, sem aparecer diretamente no gráfico — possa ser usado como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do cadastro de Widget, conseguimos criar visualizações próprias — tanto números em destaque quanto gráficos — para acompanhar qualquer informação do sistema, sem depender de um relatório específico, e reaproveitar essa mesma visualização em quantos dashboards forem necessários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao centralizar em um único cadastro a consulta e a aparência de um Widget, diferentes dashboards podem reaproveitar o mesmo sem retrabalho, garantindo que todos que o utilizam enxerguem a informação da mesma forma. Isso também facilita ajustes futuros: ao alterar o Widget uma única vez, a mudança se reflete em todos os dashboards que o utilizam.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um Widget do tipo Gráfico pode ser criado, por exemplo, para exibir em barras verticais o total vendido por vendedor, em linha a evolução de um valor ao longo de um período, ou em pizza a participação de cada categoria em um total. Um Widget do tipo Indicador pode destacar, por exemplo, o total de pedidos em aberto, o valor total de contas a receber vencidas, ou a quantidade de itens abaixo do estoque mínimo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é organizado nas abas &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho Fonte Título:&amp;#039;&amp;#039;&amp;#039; Tamanho da fonte utilizada no título.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Widget:&amp;#039;&amp;#039;&amp;#039; Define se este widget é um Gráfico ou um Indicador. Os campos abaixo marcados como &amp;quot;somente Gráfico&amp;quot; só têm efeito nesse tipo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Gráfico&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define o formato de exibição (veja tabela de tipos abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o Título:&amp;#039;&amp;#039;&amp;#039; Define se o título é exibido.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir valores&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se os valores são exibidos junto aos elementos do gráfico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:70%;&amp;quot;&lt;br /&gt;
! Tipo de Gráfico&lt;br /&gt;
! Descrição&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Barra Horizontal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas horizontalmente.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Barra Vertical&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas verticalmente (colunas).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Linha&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como uma série contínua, indicada para visualizar tendências ao longo de um período.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Pizza&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como percentual de participação em relação ao total.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo X:&amp;#039;&amp;#039;&amp;#039; Campo, catalogado a partir da Expressão SQL (veja Campos abaixo), utilizado como rótulo/categoria no Gráfico ou como valor exibido no Indicador.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho da Fonte&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Tamanho da fonte utilizado nos rótulos do eixo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Posição da Legenda&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define onde a legenda é exibida (Superior, Esquerda, Direita, Inferior ou Dentro do gráfico).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Barra ou Linha&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor do Valor&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor do Fundo da Barra&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor de Fundo do Card&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor de Identificação&amp;#039;&amp;#039;&amp;#039; (somente Indicador): Cor do texto de identificação/título do card.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Série / Campo Série&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): permite que uma mesma consulta gere várias séries lado a lado (ex.: uma barra por vendedor dentro de cada mês), a partir do valor de um campo adicional da Expressão SQL. Sem essa configuração, o gráfico exibe uma série única.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Ordenação&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): campo, catalogado a partir da Expressão SQL, usado para ordenar o gráfico quando o próprio Campo X não ordena da forma esperada (por exemplo, Campo X trazendo o nome do mês abreviado, que ordenaria em ordem alfabética em vez de cronológica). Sem essa configuração, a ordenação segue o próprio Campo X.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Destacar Diferença&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): em vez da barra partir sempre do zero, passa a partir de perto do menor valor da série — útil quando os valores são próximos entre si e distantes de zero, tornando a diferença entre eles mais visível.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento inicial da barra de fundo / Arredondamento inicial da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no início da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento final da barra de fundo / Arredondamento final da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no final da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o fundo da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se o fundo/trilho da barra é exibido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; (somente Gráfico)&lt;br /&gt;
Cada linha desta grade representa uma série de valores exibida no gráfico:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Ordem da coluna de valores.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Texto de legenda associado a essa série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Valor:&amp;#039;&amp;#039;&amp;#039; Campo, catalogado a partir da Expressão SQL, cujo valor será somado e exibido nesta série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Fonte do Valor / Cor da Fonte do Valor (alternativa):&amp;#039;&amp;#039;&amp;#039; Cores utilizadas no texto do valor, sendo a segunda aplicada quando o valor é exibido sobre um fundo colorido (dentro da barra ou fatia).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação numérica do valor (separador de milhar, casas decimais). Vem preenchida automaticamente conforme o tipo do campo ao catalogá-lo (veja Campos abaixo).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Grade com os campos catalogados a partir do resultado da Expressão SQL — é dessa lista que vêm as opções disponíveis para seleção em Campo X, Campo Série, Campo Ordenação (aba Campo X) e Campo Valor (aba Colunas).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome do campo, igual ao nome da coluna retornada pela Expressão SQL.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo:&amp;#039;&amp;#039;&amp;#039; Tipo do campo (texto, data ou valor), identificado automaticamente a partir do tipo de dado retornado pela consulta.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação, preenchida automaticamente para campos do tipo valor.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Incluir Campos:&amp;#039;&amp;#039;&amp;#039; Botão que executa a Expressão SQL e catalога nesta grade os campos do resultado que ainda não estiverem cadastrados.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Aba onde é escrita a consulta SQL responsável por buscar os dados do widget. A consulta deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY — não é ela quem soma ou agrupa os valores, isso é feito automaticamente a partir do que for configurado em Campo X/Campo Série/Colunas.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Widget&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume o que precisa ser feito para deixar um Widget pronto para uso em um Dashboard.&lt;br /&gt;
&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, escreva a consulta que retorna os dados desejados, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; agrupar ou somar nada — cada linha do resultado deve ser um registro de detalhe.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039;, clique em &amp;#039;&amp;#039;&amp;#039;&amp;quot;Incluir Campos&amp;quot;&amp;#039;&amp;#039;&amp;#039; para catalogar os campos retornados pela consulta.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, informe Nome, Título e escolha o Tipo de Widget (Gráfico ou Indicador) e, se Gráfico, o Tipo de Gráfico.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, selecione o Campo X (categoria, no Gráfico, ou o próprio valor, no Indicador) dentre os campos já catalogados, e configure a aparência (cores, arredondamento, fundo, legenda). Se precisar de séries lado a lado ou de uma ordenação diferente do Campo X, configure também Campo Série e Campo Ordenação.&lt;br /&gt;
Se o Tipo de Widget for Gráfico, na aba &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; cadastre uma ou mais colunas de valor, selecionando o Campo Valor já catalogado, a legenda e a cor.&lt;br /&gt;
Salve o cadastro. O Widget já pode ser selecionado no campo Widget de um Item do Dashboard.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*A Expressão SQL não deve conter GROUP BY — o próprio widget agrupa e soma os dados a partir do Campo X, Campo Série e das Colunas de valor configuradas.&lt;br /&gt;
*Campo X, Campo Série, Campo Ordenação e Campo Valor só oferecem para seleção os campos já catalogados na aba Campos (&amp;quot;Incluir Campos&amp;quot;) — se alterar a Expressão SQL depois, catalogue os campos novamente.&lt;br /&gt;
*Qualquer campo retornado pela Expressão SQL (mesmo que não usado em Campo X, Série ou Colunas) fica disponível para ser usado como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é o responsável por definir, em um único lugar, tanto a origem dos dados (a Expressão SQL) quanto a forma como eles são apresentados visualmente — seja como Gráfico ou como Indicador. Por ser independente do Dashboard em si, um mesmo Widget pode ser reaproveitado em diferentes dashboards, facilitando a manutenção e garantindo consistência visual entre eles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboards|Dashboards]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7211</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7211"/>
		<updated>2026-08-30T00:09:03Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Sugestão de Leitura */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget define, de forma reutilizável, a fonte de dados e a aparência de um item que poderá ser exibido em um ou mais Dashboards. É neste cadastro que fica a Expressão SQL responsável por buscar os dados, além de todas as configurações visuais: tipo de exibição, cores, fontes, legendas e formatação dos valores. Um mesmo Widget pode ser configurado como &amp;#039;&amp;#039;&amp;#039;Gráfico&amp;#039;&amp;#039;&amp;#039; (barra, linha ou pizza) ou como &amp;#039;&amp;#039;&amp;#039;Indicador&amp;#039;&amp;#039;&amp;#039; (um único valor em destaque), conforme o Tipo de Widget escolhido.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A tela de cadastro de Widget é dividida em abas: &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;. As abas Campo X e Colunas só se aplicam quando o Tipo de Widget é Gráfico — quando é Indicador, o próprio Campo X passa a fornecer o valor único exibido no card, e a aba Colunas não é utilizada.&lt;br /&gt;
&lt;br /&gt;
A Expressão SQL deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY: quem agrupa pelo Campo X (e Campo Série, quando configurado) e soma cada Coluna de valor é o próprio Widget, automaticamente, na hora de montar o gráfico. Isso permite que qualquer campo retornado pela consulta — mesmo um usado só para calcular o Campo X, sem aparecer diretamente no gráfico — possa ser usado como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do cadastro de Widget, conseguimos criar visualizações próprias — tanto números em destaque quanto gráficos — para acompanhar qualquer informação do sistema, sem depender de um relatório específico, e reaproveitar essa mesma visualização em quantos dashboards forem necessários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao centralizar em um único cadastro a consulta e a aparência de um Widget, diferentes dashboards podem reaproveitar o mesmo sem retrabalho, garantindo que todos que o utilizam enxerguem a informação da mesma forma. Isso também facilita ajustes futuros: ao alterar o Widget uma única vez, a mudança se reflete em todos os dashboards que o utilizam.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um Widget do tipo Gráfico pode ser criado, por exemplo, para exibir em barras verticais o total vendido por vendedor, em linha a evolução de um valor ao longo de um período, ou em pizza a participação de cada categoria em um total. Um Widget do tipo Indicador pode destacar, por exemplo, o total de pedidos em aberto, o valor total de contas a receber vencidas, ou a quantidade de itens abaixo do estoque mínimo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é organizado nas abas &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho Fonte Título:&amp;#039;&amp;#039;&amp;#039; Tamanho da fonte utilizada no título.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Widget:&amp;#039;&amp;#039;&amp;#039; Define se este widget é um Gráfico ou um Indicador. Os campos abaixo marcados como &amp;quot;somente Gráfico&amp;quot; só têm efeito nesse tipo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Gráfico&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define o formato de exibição (veja tabela de tipos abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o Título:&amp;#039;&amp;#039;&amp;#039; Define se o título é exibido.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir valores&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se os valores são exibidos junto aos elementos do gráfico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:70%;&amp;quot;&lt;br /&gt;
! Tipo de Gráfico&lt;br /&gt;
! Descrição&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Barra Horizontal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas horizontalmente.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Barra Vertical&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas verticalmente (colunas).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Linha&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como uma série contínua, indicada para visualizar tendências ao longo de um período.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Pizza&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como percentual de participação em relação ao total.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo X:&amp;#039;&amp;#039;&amp;#039; Campo, catalogado a partir da Expressão SQL (veja Campos abaixo), utilizado como rótulo/categoria no Gráfico ou como valor exibido no Indicador.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho da Fonte&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Tamanho da fonte utilizado nos rótulos do eixo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Posição da Legenda&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define onde a legenda é exibida (Superior, Esquerda, Direita, Inferior ou Dentro do gráfico).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Barra ou Linha&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor do Valor&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor do Fundo da Barra&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor de Fundo do Card&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor de Identificação&amp;#039;&amp;#039;&amp;#039; (somente Indicador): Cor do texto de identificação/título do card.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Série / Campo Série&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): permite que uma mesma consulta gere várias séries lado a lado (ex.: uma barra por vendedor dentro de cada mês), a partir do valor de um campo adicional da Expressão SQL. Sem essa configuração, o gráfico exibe uma série única.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Ordenação&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): campo, catalogado a partir da Expressão SQL, usado para ordenar o gráfico quando o próprio Campo X não ordena da forma esperada (por exemplo, Campo X trazendo o nome do mês abreviado, que ordenaria em ordem alfabética em vez de cronológica). Sem essa configuração, a ordenação segue o próprio Campo X.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Destacar Diferença&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): em vez da barra partir sempre do zero, passa a partir de perto do menor valor da série — útil quando os valores são próximos entre si e distantes de zero, tornando a diferença entre eles mais visível.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento inicial da barra de fundo / Arredondamento inicial da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no início da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento final da barra de fundo / Arredondamento final da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no final da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o fundo da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se o fundo/trilho da barra é exibido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; (somente Gráfico)&lt;br /&gt;
Cada linha desta grade representa uma série de valores exibida no gráfico:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Ordem da coluna de valores.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Texto de legenda associado a essa série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Valor:&amp;#039;&amp;#039;&amp;#039; Campo, catalogado a partir da Expressão SQL, cujo valor será somado e exibido nesta série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Fonte do Valor / Cor da Fonte do Valor (alternativa):&amp;#039;&amp;#039;&amp;#039; Cores utilizadas no texto do valor, sendo a segunda aplicada quando o valor é exibido sobre um fundo colorido (dentro da barra ou fatia).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação numérica do valor (separador de milhar, casas decimais). Vem preenchida automaticamente conforme o tipo do campo ao catalogá-lo (veja Campos abaixo).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Grade com os campos catalogados a partir do resultado da Expressão SQL — é dessa lista que vêm as opções disponíveis para seleção em Campo X, Campo Série, Campo Ordenação (aba Campo X) e Campo Valor (aba Colunas).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome do campo, igual ao nome da coluna retornada pela Expressão SQL.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo:&amp;#039;&amp;#039;&amp;#039; Tipo do campo (texto, data ou valor), identificado automaticamente a partir do tipo de dado retornado pela consulta.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação, preenchida automaticamente para campos do tipo valor.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Incluir Campos:&amp;#039;&amp;#039;&amp;#039; Botão que executa a Expressão SQL e catalога nesta grade os campos do resultado que ainda não estiverem cadastrados.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Aba onde é escrita a consulta SQL responsável por buscar os dados do widget. A consulta deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY — não é ela quem soma ou agrupa os valores, isso é feito automaticamente a partir do que for configurado em Campo X/Campo Série/Colunas.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Widget&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume o que precisa ser feito para deixar um Widget pronto para uso em um Dashboard.&lt;br /&gt;
&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, escreva a consulta que retorna os dados desejados, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; agrupar ou somar nada — cada linha do resultado deve ser um registro de detalhe.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039;, clique em &amp;#039;&amp;#039;&amp;#039;&amp;quot;Incluir Campos&amp;quot;&amp;#039;&amp;#039;&amp;#039; para catalogar os campos retornados pela consulta.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, informe Nome, Título e escolha o Tipo de Widget (Gráfico ou Indicador) e, se Gráfico, o Tipo de Gráfico.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, selecione o Campo X (categoria, no Gráfico, ou o próprio valor, no Indicador) dentre os campos já catalogados, e configure a aparência (cores, arredondamento, fundo, legenda). Se precisar de séries lado a lado ou de uma ordenação diferente do Campo X, configure também Campo Série e Campo Ordenação.&lt;br /&gt;
Se o Tipo de Widget for Gráfico, na aba &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; cadastre uma ou mais colunas de valor, selecionando o Campo Valor já catalogado, a legenda e a cor.&lt;br /&gt;
Salve o cadastro. O Widget já pode ser selecionado no campo Widget de um Item do Dashboard.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*A Expressão SQL não deve conter GROUP BY — o próprio widget agrupa e soma os dados a partir do Campo X, Campo Série e das Colunas de valor configuradas.&lt;br /&gt;
*Campo X, Campo Série, Campo Ordenação e Campo Valor só oferecem para seleção os campos já catalogados na aba Campos (&amp;quot;Incluir Campos&amp;quot;) — se alterar a Expressão SQL depois, catalogue os campos novamente.&lt;br /&gt;
*Qualquer campo retornado pela Expressão SQL (mesmo que não usado em Campo X, Série ou Colunas) fica disponível para ser usado como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é o responsável por definir, em um único lugar, tanto a origem dos dados (a Expressão SQL) quanto a forma como eles são apresentados visualmente — seja como Gráfico ou como Indicador. Por ser independente do Dashboard em si, um mesmo Widget pode ser reaproveitado em diferentes dashboards, facilitando a manutenção e garantindo consistência visual entre eles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboard|Dashboard]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7210</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7210"/>
		<updated>2026-08-30T00:08:22Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Cadastro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget define, de forma reutilizável, a fonte de dados e a aparência de um item que poderá ser exibido em um ou mais Dashboards. É neste cadastro que fica a Expressão SQL responsável por buscar os dados, além de todas as configurações visuais: tipo de exibição, cores, fontes, legendas e formatação dos valores. Um mesmo Widget pode ser configurado como &amp;#039;&amp;#039;&amp;#039;Gráfico&amp;#039;&amp;#039;&amp;#039; (barra, linha ou pizza) ou como &amp;#039;&amp;#039;&amp;#039;Indicador&amp;#039;&amp;#039;&amp;#039; (um único valor em destaque), conforme o Tipo de Widget escolhido.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A tela de cadastro de Widget é dividida em abas: &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;. As abas Campo X e Colunas só se aplicam quando o Tipo de Widget é Gráfico — quando é Indicador, o próprio Campo X passa a fornecer o valor único exibido no card, e a aba Colunas não é utilizada.&lt;br /&gt;
&lt;br /&gt;
A Expressão SQL deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY: quem agrupa pelo Campo X (e Campo Série, quando configurado) e soma cada Coluna de valor é o próprio Widget, automaticamente, na hora de montar o gráfico. Isso permite que qualquer campo retornado pela consulta — mesmo um usado só para calcular o Campo X, sem aparecer diretamente no gráfico — possa ser usado como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do cadastro de Widget, conseguimos criar visualizações próprias — tanto números em destaque quanto gráficos — para acompanhar qualquer informação do sistema, sem depender de um relatório específico, e reaproveitar essa mesma visualização em quantos dashboards forem necessários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao centralizar em um único cadastro a consulta e a aparência de um Widget, diferentes dashboards podem reaproveitar o mesmo sem retrabalho, garantindo que todos que o utilizam enxerguem a informação da mesma forma. Isso também facilita ajustes futuros: ao alterar o Widget uma única vez, a mudança se reflete em todos os dashboards que o utilizam.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um Widget do tipo Gráfico pode ser criado, por exemplo, para exibir em barras verticais o total vendido por vendedor, em linha a evolução de um valor ao longo de um período, ou em pizza a participação de cada categoria em um total. Um Widget do tipo Indicador pode destacar, por exemplo, o total de pedidos em aberto, o valor total de contas a receber vencidas, ou a quantidade de itens abaixo do estoque mínimo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é organizado nas abas &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho Fonte Título:&amp;#039;&amp;#039;&amp;#039; Tamanho da fonte utilizada no título.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Widget:&amp;#039;&amp;#039;&amp;#039; Define se este widget é um Gráfico ou um Indicador. Os campos abaixo marcados como &amp;quot;somente Gráfico&amp;quot; só têm efeito nesse tipo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Gráfico&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define o formato de exibição (veja tabela de tipos abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o Título:&amp;#039;&amp;#039;&amp;#039; Define se o título é exibido.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir valores&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se os valores são exibidos junto aos elementos do gráfico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:70%;&amp;quot;&lt;br /&gt;
! Tipo de Gráfico&lt;br /&gt;
! Descrição&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Barra Horizontal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas horizontalmente.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Barra Vertical&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas verticalmente (colunas).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Linha&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como uma série contínua, indicada para visualizar tendências ao longo de um período.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Pizza&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como percentual de participação em relação ao total.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo X:&amp;#039;&amp;#039;&amp;#039; Campo, catalogado a partir da Expressão SQL (veja Campos abaixo), utilizado como rótulo/categoria no Gráfico ou como valor exibido no Indicador.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho da Fonte&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Tamanho da fonte utilizado nos rótulos do eixo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Posição da Legenda&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define onde a legenda é exibida (Superior, Esquerda, Direita, Inferior ou Dentro do gráfico).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Barra ou Linha&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor do Valor&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor do Fundo da Barra&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor de Fundo do Card&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor de Identificação&amp;#039;&amp;#039;&amp;#039; (somente Indicador): Cor do texto de identificação/título do card.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Série / Campo Série&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): permite que uma mesma consulta gere várias séries lado a lado (ex.: uma barra por vendedor dentro de cada mês), a partir do valor de um campo adicional da Expressão SQL. Sem essa configuração, o gráfico exibe uma série única.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Ordenação&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): campo, catalogado a partir da Expressão SQL, usado para ordenar o gráfico quando o próprio Campo X não ordena da forma esperada (por exemplo, Campo X trazendo o nome do mês abreviado, que ordenaria em ordem alfabética em vez de cronológica). Sem essa configuração, a ordenação segue o próprio Campo X.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Destacar Diferença&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): em vez da barra partir sempre do zero, passa a partir de perto do menor valor da série — útil quando os valores são próximos entre si e distantes de zero, tornando a diferença entre eles mais visível.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento inicial da barra de fundo / Arredondamento inicial da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no início da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento final da barra de fundo / Arredondamento final da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no final da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o fundo da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se o fundo/trilho da barra é exibido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; (somente Gráfico)&lt;br /&gt;
Cada linha desta grade representa uma série de valores exibida no gráfico:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Ordem da coluna de valores.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Texto de legenda associado a essa série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Valor:&amp;#039;&amp;#039;&amp;#039; Campo, catalogado a partir da Expressão SQL, cujo valor será somado e exibido nesta série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Fonte do Valor / Cor da Fonte do Valor (alternativa):&amp;#039;&amp;#039;&amp;#039; Cores utilizadas no texto do valor, sendo a segunda aplicada quando o valor é exibido sobre um fundo colorido (dentro da barra ou fatia).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação numérica do valor (separador de milhar, casas decimais). Vem preenchida automaticamente conforme o tipo do campo ao catalogá-lo (veja Campos abaixo).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Grade com os campos catalogados a partir do resultado da Expressão SQL — é dessa lista que vêm as opções disponíveis para seleção em Campo X, Campo Série, Campo Ordenação (aba Campo X) e Campo Valor (aba Colunas).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome do campo, igual ao nome da coluna retornada pela Expressão SQL.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo:&amp;#039;&amp;#039;&amp;#039; Tipo do campo (texto, data ou valor), identificado automaticamente a partir do tipo de dado retornado pela consulta.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação, preenchida automaticamente para campos do tipo valor.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Incluir Campos:&amp;#039;&amp;#039;&amp;#039; Botão que executa a Expressão SQL e catalога nesta grade os campos do resultado que ainda não estiverem cadastrados.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Aba onde é escrita a consulta SQL responsável por buscar os dados do widget. A consulta deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY — não é ela quem soma ou agrupa os valores, isso é feito automaticamente a partir do que for configurado em Campo X/Campo Série/Colunas.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Widget&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume o que precisa ser feito para deixar um Widget pronto para uso em um Dashboard.&lt;br /&gt;
&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, escreva a consulta que retorna os dados desejados, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; agrupar ou somar nada — cada linha do resultado deve ser um registro de detalhe.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039;, clique em &amp;#039;&amp;#039;&amp;#039;&amp;quot;Incluir Campos&amp;quot;&amp;#039;&amp;#039;&amp;#039; para catalogar os campos retornados pela consulta.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, informe Nome, Título e escolha o Tipo de Widget (Gráfico ou Indicador) e, se Gráfico, o Tipo de Gráfico.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, selecione o Campo X (categoria, no Gráfico, ou o próprio valor, no Indicador) dentre os campos já catalogados, e configure a aparência (cores, arredondamento, fundo, legenda). Se precisar de séries lado a lado ou de uma ordenação diferente do Campo X, configure também Campo Série e Campo Ordenação.&lt;br /&gt;
Se o Tipo de Widget for Gráfico, na aba &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; cadastre uma ou mais colunas de valor, selecionando o Campo Valor já catalogado, a legenda e a cor.&lt;br /&gt;
Salve o cadastro. O Widget já pode ser selecionado no campo Widget de um Item do Dashboard.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*A Expressão SQL não deve conter GROUP BY — o próprio widget agrupa e soma os dados a partir do Campo X, Campo Série e das Colunas de valor configuradas.&lt;br /&gt;
*Campo X, Campo Série, Campo Ordenação e Campo Valor só oferecem para seleção os campos já catalogados na aba Campos (&amp;quot;Incluir Campos&amp;quot;) — se alterar a Expressão SQL depois, catalogue os campos novamente.&lt;br /&gt;
*Qualquer campo retornado pela Expressão SQL (mesmo que não usado em Campo X, Série ou Colunas) fica disponível para ser usado como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é o responsável por definir, em um único lugar, tanto a origem dos dados (a Expressão SQL) quanto a forma como eles são apresentados visualmente — seja como Gráfico ou como Indicador. Por ser independente do Dashboard em si, um mesmo Widget pode ser reaproveitado em diferentes dashboards, facilitando a manutenção e garantindo consistência visual entre eles.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Sugestão de Leitura&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboard|Dashboard]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7209</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7209"/>
		<updated>2026-08-30T00:06:59Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget define, de forma reutilizável, a fonte de dados e a aparência de um item que poderá ser exibido em um ou mais Dashboards. É neste cadastro que fica a Expressão SQL responsável por buscar os dados, além de todas as configurações visuais: tipo de exibição, cores, fontes, legendas e formatação dos valores. Um mesmo Widget pode ser configurado como &amp;#039;&amp;#039;&amp;#039;Gráfico&amp;#039;&amp;#039;&amp;#039; (barra, linha ou pizza) ou como &amp;#039;&amp;#039;&amp;#039;Indicador&amp;#039;&amp;#039;&amp;#039; (um único valor em destaque), conforme o Tipo de Widget escolhido.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A tela de cadastro de Widget é dividida em abas: &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;. As abas Campo X e Colunas só se aplicam quando o Tipo de Widget é Gráfico — quando é Indicador, o próprio Campo X passa a fornecer o valor único exibido no card, e a aba Colunas não é utilizada.&lt;br /&gt;
&lt;br /&gt;
A Expressão SQL deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY: quem agrupa pelo Campo X (e Campo Série, quando configurado) e soma cada Coluna de valor é o próprio Widget, automaticamente, na hora de montar o gráfico. Isso permite que qualquer campo retornado pela consulta — mesmo um usado só para calcular o Campo X, sem aparecer diretamente no gráfico — possa ser usado como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do cadastro de Widget, conseguimos criar visualizações próprias — tanto números em destaque quanto gráficos — para acompanhar qualquer informação do sistema, sem depender de um relatório específico, e reaproveitar essa mesma visualização em quantos dashboards forem necessários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao centralizar em um único cadastro a consulta e a aparência de um Widget, diferentes dashboards podem reaproveitar o mesmo sem retrabalho, garantindo que todos que o utilizam enxerguem a informação da mesma forma. Isso também facilita ajustes futuros: ao alterar o Widget uma única vez, a mudança se reflete em todos os dashboards que o utilizam.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um Widget do tipo Gráfico pode ser criado, por exemplo, para exibir em barras verticais o total vendido por vendedor, em linha a evolução de um valor ao longo de um período, ou em pizza a participação de cada categoria em um total. Um Widget do tipo Indicador pode destacar, por exemplo, o total de pedidos em aberto, o valor total de contas a receber vencidas, ou a quantidade de itens abaixo do estoque mínimo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é organizado nas abas &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho Fonte Título:&amp;#039;&amp;#039;&amp;#039; Tamanho da fonte utilizada no título.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Widget:&amp;#039;&amp;#039;&amp;#039; Define se este widget é um Gráfico ou um Indicador. Os campos abaixo marcados como &amp;quot;somente Gráfico&amp;quot; só têm efeito nesse tipo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Gráfico&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define o formato de exibição (veja tabela de tipos abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o Título:&amp;#039;&amp;#039;&amp;#039; Define se o título é exibido.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir valores&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se os valores são exibidos junto aos elementos do gráfico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:70%;&amp;quot;&lt;br /&gt;
! Tipo de Gráfico&lt;br /&gt;
! Descrição&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Barra Horizontal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Exibe os valores em barras dispostas horizontalmente.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Barra Vertical&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Exibe os valores em barras dispostas verticalmente (colunas).&lt;br /&gt;
-&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Linha&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Exibe os valores como uma série contínua, indicada para visualizar tendências ao longo de um período.&lt;br /&gt;
-&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pizza&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Exibe os valores como percentual de participação em relação ao total.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo X:&amp;#039;&amp;#039;&amp;#039; Campo, catalogado a partir da Expressão SQL (veja Campos abaixo), utilizado como rótulo/categoria no Gráfico ou como valor exibido no Indicador.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho da Fonte&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Tamanho da fonte utilizado nos rótulos do eixo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Posição da Legenda&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define onde a legenda é exibida (Superior, Esquerda, Direita, Inferior ou Dentro do gráfico).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Barra ou Linha&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor do Valor&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor do Fundo da Barra&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor de Fundo do Card&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor de Identificação&amp;#039;&amp;#039;&amp;#039; (somente Indicador): Cor do texto de identificação/título do card.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Série / Campo Série&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): permite que uma mesma consulta gere várias séries lado a lado (ex.: uma barra por vendedor dentro de cada mês), a partir do valor de um campo adicional da Expressão SQL. Sem essa configuração, o gráfico exibe uma série única.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Ordenação&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): campo, catalogado a partir da Expressão SQL, usado para ordenar o gráfico quando o próprio Campo X não ordena da forma esperada (por exemplo, Campo X trazendo o nome do mês abreviado, que ordenaria em ordem alfabética em vez de cronológica). Sem essa configuração, a ordenação segue o próprio Campo X.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Destacar Diferença&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): em vez da barra partir sempre do zero, passa a partir de perto do menor valor da série — útil quando os valores são próximos entre si e distantes de zero, tornando a diferença entre eles mais visível.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento inicial da barra de fundo / Arredondamento inicial da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no início da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento final da barra de fundo / Arredondamento final da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no final da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o fundo da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se o fundo/trilho da barra é exibido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; (somente Gráfico)&lt;br /&gt;
Cada linha desta grade representa uma série de valores exibida no gráfico:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Ordem da coluna de valores.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Texto de legenda associado a essa série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Valor:&amp;#039;&amp;#039;&amp;#039; Campo, catalogado a partir da Expressão SQL, cujo valor será somado e exibido nesta série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Fonte do Valor / Cor da Fonte do Valor (alternativa):&amp;#039;&amp;#039;&amp;#039; Cores utilizadas no texto do valor, sendo a segunda aplicada quando o valor é exibido sobre um fundo colorido (dentro da barra ou fatia).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação numérica do valor (separador de milhar, casas decimais). Vem preenchida automaticamente conforme o tipo do campo ao catalogá-lo (veja Campos abaixo).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Grade com os campos catalogados a partir do resultado da Expressão SQL — é dessa lista que vêm as opções disponíveis para seleção em Campo X, Campo Série, Campo Ordenação (aba Campo X) e Campo Valor (aba Colunas).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome do campo, igual ao nome da coluna retornada pela Expressão SQL.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo:&amp;#039;&amp;#039;&amp;#039; Tipo do campo (texto, data ou valor), identificado automaticamente a partir do tipo de dado retornado pela consulta.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação, preenchida automaticamente para campos do tipo valor.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Incluir Campos:&amp;#039;&amp;#039;&amp;#039; Botão que executa a Expressão SQL e catalога nesta grade os campos do resultado que ainda não estiverem cadastrados.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Aba onde é escrita a consulta SQL responsável por buscar os dados do widget. A consulta deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY — não é ela quem soma ou agrupa os valores, isso é feito automaticamente a partir do que for configurado em Campo X/Campo Série/Colunas.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Widget&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume o que precisa ser feito para deixar um Widget pronto para uso em um Dashboard.&lt;br /&gt;
&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, escreva a consulta que retorna os dados desejados, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; agrupar ou somar nada — cada linha do resultado deve ser um registro de detalhe.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campos&amp;#039;&amp;#039;&amp;#039;, clique em &amp;#039;&amp;#039;&amp;#039;&amp;quot;Incluir Campos&amp;quot;&amp;#039;&amp;#039;&amp;#039; para catalogar os campos retornados pela consulta.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, informe Nome, Título e escolha o Tipo de Widget (Gráfico ou Indicador) e, se Gráfico, o Tipo de Gráfico.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, selecione o Campo X (categoria, no Gráfico, ou o próprio valor, no Indicador) dentre os campos já catalogados, e configure a aparência (cores, arredondamento, fundo, legenda). Se precisar de séries lado a lado ou de uma ordenação diferente do Campo X, configure também Campo Série e Campo Ordenação.&lt;br /&gt;
Se o Tipo de Widget for Gráfico, na aba &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; cadastre uma ou mais colunas de valor, selecionando o Campo Valor já catalogado, a legenda e a cor.&lt;br /&gt;
Salve o cadastro. O Widget já pode ser selecionado no campo Widget de um Item do Dashboard.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*A Expressão SQL não deve conter GROUP BY — o próprio widget agrupa e soma os dados a partir do Campo X, Campo Série e das Colunas de valor configuradas.&lt;br /&gt;
*Campo X, Campo Série, Campo Ordenação e Campo Valor só oferecem para seleção os campos já catalogados na aba Campos (&amp;quot;Incluir Campos&amp;quot;) — se alterar a Expressão SQL depois, catalogue os campos novamente.&lt;br /&gt;
*Qualquer campo retornado pela Expressão SQL (mesmo que não usado em Campo X, Série ou Colunas) fica disponível para ser usado como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é o responsável por definir, em um único lugar, tanto a origem dos dados (a Expressão SQL) quanto a forma como eles são apresentados visualmente — seja como Gráfico ou como Indicador. Por ser independente do Dashboard em si, um mesmo Widget pode ser reaproveitado em diferentes dashboards, facilitando a manutenção e garantindo consistência visual entre eles.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Sugestão de Leitura&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboard|Dashboard]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7208</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7208"/>
		<updated>2026-08-29T23:58:15Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Cadastro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget define, de forma reutilizável, a fonte de dados e a aparência de um item que poderá ser exibido em um ou mais Dashboards. É neste cadastro que fica a Expressão SQL responsável por buscar os dados, além de todas as configurações visuais: tipo de exibição, cores, fontes, legendas e formatação dos valores. Um mesmo Widget pode ser configurado como &amp;#039;&amp;#039;&amp;#039;Gráfico&amp;#039;&amp;#039;&amp;#039; (barra, linha ou pizza) ou como &amp;#039;&amp;#039;&amp;#039;Indicador&amp;#039;&amp;#039;&amp;#039; (um único valor em destaque), conforme o Tipo de Widget escolhido.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A tela de cadastro de Widget é dividida em abas: &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;. As abas Campo X e Colunas só se aplicam quando o Tipo de Widget é Gráfico — quando é Indicador, o próprio Campo X passa a fornecer o valor único exibido no card, e a aba Colunas não é utilizada.&lt;br /&gt;
&lt;br /&gt;
A Expressão SQL deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY: quem agrupa pelo Campo X (e Campo Série, quando configurado) e soma cada Coluna de valor é o próprio Widget, automaticamente, na hora de montar o gráfico. Isso permite que qualquer coluna retornada pela consulta — mesmo uma usada só para calcular o Campo X, sem aparecer diretamente no gráfico — possa ser usada como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do cadastro de Widget, conseguimos criar visualizações próprias — tanto números em destaque quanto gráficos — para acompanhar qualquer informação do sistema, sem depender de um relatório específico, e reaproveitar essa mesma visualização em quantos dashboards forem necessários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao centralizar em um único cadastro a consulta e a aparência de um Widget, diferentes dashboards podem reaproveitar o mesmo sem retrabalho, garantindo que todos que o utilizam enxerguem a informação da mesma forma. Isso também facilita ajustes futuros: ao alterar o Widget uma única vez, a mudança se reflete em todos os dashboards que o utilizam.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um Widget do tipo Gráfico pode ser criado, por exemplo, para exibir em barras verticais o total vendido por vendedor, em linha a evolução de um valor ao longo de um período, ou em pizza a participação de cada categoria em um total. Um Widget do tipo Indicador pode destacar, por exemplo, o total de pedidos em aberto, o valor total de contas a receber vencidas, ou a quantidade de itens abaixo do estoque mínimo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é organizado nas abas &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho Fonte Título:&amp;#039;&amp;#039;&amp;#039; Tamanho da fonte utilizada no título.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Widget:&amp;#039;&amp;#039;&amp;#039; Define se este widget é um Gráfico ou um Indicador. Os campos abaixo marcados como &amp;quot;somente Gráfico&amp;quot; só têm efeito nesse tipo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Gráfico&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define o formato de exibição (veja tabela de tipos abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o Título:&amp;#039;&amp;#039;&amp;#039; Define se o título é exibido.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir valores&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se os valores são exibidos junto aos elementos do gráfico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:70%;&amp;quot;&lt;br /&gt;
! Tipo de Gráfico&lt;br /&gt;
! Descrição&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Barra Horizontal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas horizontalmente.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Barra Vertical&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas verticalmente (colunas).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Linha&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como uma série contínua, indicada para visualizar tendências ao longo de um período.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Pizza&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como percentual de participação em relação ao total.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo X:&amp;#039;&amp;#039;&amp;#039; Coluna, catalogada a partir da Expressão SQL (veja &amp;quot;Incluir Colunas&amp;quot; abaixo), utilizada como rótulo/categoria no Gráfico ou como valor exibido no Indicador.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho da Fonte&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Tamanho da fonte utilizado nos rótulos do eixo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Posição da Legenda&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define onde a legenda é exibida (Superior, Esquerda, Direita, Inferior ou Dentro do gráfico).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Barra ou Linha&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor do Valor&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor do Fundo da Barra&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor de Fundo do Card&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor de Identificação&amp;#039;&amp;#039;&amp;#039; (somente Indicador): Cor do texto de identificação/título do card.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Série / Campo Série&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): permite que uma mesma consulta gere várias séries lado a lado (ex.: uma barra por vendedor dentro de cada mês), a partir do valor de uma coluna adicional da Expressão SQL. Sem essa configuração, o gráfico exibe uma série única.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Ordenação&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): coluna, catalogada a partir da Expressão SQL, usada para ordenar o gráfico quando o próprio Campo X não ordena da forma esperada (por exemplo, Campo X trazendo o nome do mês abreviado, que ordenaria em ordem alfabética em vez de cronológica). Sem essa configuração, a ordenação segue o próprio Campo X.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Destacar Diferença&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): em vez da barra partir sempre do zero, passa a partir de perto do menor valor da série — útil quando os valores são próximos entre si e distantes de zero, tornando a diferença entre eles mais visível.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento inicial da barra de fundo / Arredondamento inicial da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no início da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento final da barra de fundo / Arredondamento final da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no final da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o fundo da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se o fundo/trilho da barra é exibido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; (somente Gráfico)&lt;br /&gt;
Cada linha desta grade representa uma série de valores exibida no gráfico:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Ordem da coluna de valores.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Texto de legenda associado a essa série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Valor:&amp;#039;&amp;#039;&amp;#039; Coluna, catalogada a partir da Expressão SQL, cujo valor será somado e exibido nesta série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Fonte do Valor / Cor da Fonte do Valor (alternativa):&amp;#039;&amp;#039;&amp;#039; Cores utilizadas no texto do valor, sendo a segunda aplicada quando o valor é exibido sobre um fundo colorido (dentro da barra ou fatia).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação numérica do valor (separador de milhar, casas decimais). Vem preenchida automaticamente conforme o tipo da coluna ao catalogá-la (veja &amp;quot;Incluir Colunas&amp;quot; abaixo).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Aba onde é escrita a consulta SQL responsável por buscar os dados do widget. A consulta deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY — não é ela quem soma ou agrupa os valores, isso é feito automaticamente a partir do que for configurado em Campo X/Campo Série/Colunas. Depois de escrita, use o botão &amp;#039;&amp;#039;&amp;#039;&amp;quot;Incluir Colunas&amp;quot;&amp;#039;&amp;#039;&amp;#039; para que o sistema execute a consulta e catalogue as colunas retornadas, disponibilizando-as para seleção em Campo X, Campo Série, Campo Ordenação e Campo Valor (nas Colunas) — não é necessário digitar o nome da coluna manualmente em nenhum desses campos.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Widget&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume o que precisa ser feito para deixar um Widget pronto para uso em um Dashboard.&lt;br /&gt;
&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, escreva a consulta que retorna os dados desejados, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; agrupar ou somar nada — cada linha do resultado deve ser um registro de detalhe.&lt;br /&gt;
Ainda na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, clique em &amp;#039;&amp;#039;&amp;#039;&amp;quot;Incluir Colunas&amp;quot;&amp;#039;&amp;#039;&amp;#039; para catalogar as colunas retornadas pela consulta.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, informe Nome, Título e escolha o Tipo de Widget (Gráfico ou Indicador) e, se Gráfico, o Tipo de Gráfico.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, selecione o Campo X (categoria, no Gráfico, ou o próprio valor, no Indicador) dentre as colunas já catalogadas, e configure a aparência (cores, arredondamento, fundo, legenda). Se precisar de séries lado a lado ou de uma ordenação diferente do Campo X, configure também Campo Série e Campo Ordenação.&lt;br /&gt;
Se o Tipo de Widget for Gráfico, na aba &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; cadastre uma ou mais colunas de valor, selecionando o Campo Valor já catalogado, a legenda e a cor.&lt;br /&gt;
Salve o cadastro. O Widget já pode ser selecionado no campo Widget de um Item do Dashboard.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*A Expressão SQL não deve conter GROUP BY — o próprio widget agrupa e soma os dados a partir do Campo X, Campo Série e das Colunas de valor configuradas.&lt;br /&gt;
*Campo X, Campo Série, Campo Ordenação e Campo Valor só oferecem para seleção as colunas já catalogadas por &amp;quot;Incluir Colunas&amp;quot; — se alterar a Expressão SQL depois, catalogue as colunas novamente.&lt;br /&gt;
*Qualquer coluna retornada pela Expressão SQL (mesmo que não usada em Campo X, Série ou Colunas) fica disponível para ser usada como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é o responsável por definir, em um único lugar, tanto a origem dos dados (a Expressão SQL) quanto a forma como eles são apresentados visualmente — seja como Gráfico ou como Indicador. Por ser independente do Dashboard em si, um mesmo Widget pode ser reaproveitado em diferentes dashboards, facilitando a manutenção e garantindo consistência visual entre eles.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Sugestão de Leitura&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboard|Dashboard]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7207</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7207"/>
		<updated>2026-08-29T23:57:46Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Cadastro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget define, de forma reutilizável, a fonte de dados e a aparência de um item que poderá ser exibido em um ou mais Dashboards. É neste cadastro que fica a Expressão SQL responsável por buscar os dados, além de todas as configurações visuais: tipo de exibição, cores, fontes, legendas e formatação dos valores. Um mesmo Widget pode ser configurado como &amp;#039;&amp;#039;&amp;#039;Gráfico&amp;#039;&amp;#039;&amp;#039; (barra, linha ou pizza) ou como &amp;#039;&amp;#039;&amp;#039;Indicador&amp;#039;&amp;#039;&amp;#039; (um único valor em destaque), conforme o Tipo de Widget escolhido.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A tela de cadastro de Widget é dividida em abas: &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;. As abas Campo X e Colunas só se aplicam quando o Tipo de Widget é Gráfico — quando é Indicador, o próprio Campo X passa a fornecer o valor único exibido no card, e a aba Colunas não é utilizada.&lt;br /&gt;
&lt;br /&gt;
A Expressão SQL deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY: quem agrupa pelo Campo X (e Campo Série, quando configurado) e soma cada Coluna de valor é o próprio Widget, automaticamente, na hora de montar o gráfico. Isso permite que qualquer coluna retornada pela consulta — mesmo uma usada só para calcular o Campo X, sem aparecer diretamente no gráfico — possa ser usada como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do cadastro de Widget, conseguimos criar visualizações próprias — tanto números em destaque quanto gráficos — para acompanhar qualquer informação do sistema, sem depender de um relatório específico, e reaproveitar essa mesma visualização em quantos dashboards forem necessários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao centralizar em um único cadastro a consulta e a aparência de um Widget, diferentes dashboards podem reaproveitar o mesmo sem retrabalho, garantindo que todos que o utilizam enxerguem a informação da mesma forma. Isso também facilita ajustes futuros: ao alterar o Widget uma única vez, a mudança se reflete em todos os dashboards que o utilizam.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um Widget do tipo Gráfico pode ser criado, por exemplo, para exibir em barras verticais o total vendido por vendedor, em linha a evolução de um valor ao longo de um período, ou em pizza a participação de cada categoria em um total. Um Widget do tipo Indicador pode destacar, por exemplo, o total de pedidos em aberto, o valor total de contas a receber vencidas, ou a quantidade de itens abaixo do estoque mínimo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é organizado nas abas &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho Fonte Título:&amp;#039;&amp;#039;&amp;#039; Tamanho da fonte utilizada no título.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Widget:&amp;#039;&amp;#039;&amp;#039; Define se este widget é um Gráfico ou um Indicador. Os campos abaixo marcados como &amp;quot;somente Gráfico&amp;quot; só têm efeito nesse tipo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Gráfico&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define o formato de exibição (veja tabela de tipos abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o Título:&amp;#039;&amp;#039;&amp;#039; Define se o título é exibido.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir valores&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se os valores são exibidos junto aos elementos do gráfico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:70%;&amp;quot;&lt;br /&gt;
! Tipo de Gráfico&lt;br /&gt;
! Descrição&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Barra Horizontal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas horizontalmente.&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Barra Vertical&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas verticalmente (colunas).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Linha&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como uma série contínua, indicada para visualizar tendências ao longo de um período.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Pizza&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como percentual de participação em relação ao total.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo X:&amp;#039;&amp;#039;&amp;#039; Coluna, catalogada a partir da Expressão SQL (veja &amp;quot;Incluir Colunas&amp;quot; abaixo), utilizada como rótulo/categoria no Gráfico ou como valor exibido no Indicador.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho da Fonte&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Tamanho da fonte utilizado nos rótulos do eixo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Posição da Legenda&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define onde a legenda é exibida (Superior, Esquerda, Direita, Inferior ou Dentro do gráfico).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Barra ou Linha&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor do Valor&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor do Fundo da Barra&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor de Fundo do Card&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor de Identificação&amp;#039;&amp;#039;&amp;#039; (somente Indicador): Cor do texto de identificação/título do card.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Série / Campo Série&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): permite que uma mesma consulta gere várias séries lado a lado (ex.: uma barra por vendedor dentro de cada mês), a partir do valor de uma coluna adicional da Expressão SQL. Sem essa configuração, o gráfico exibe uma série única.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Ordenação&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): coluna, catalogada a partir da Expressão SQL, usada para ordenar o gráfico quando o próprio Campo X não ordena da forma esperada (por exemplo, Campo X trazendo o nome do mês abreviado, que ordenaria em ordem alfabética em vez de cronológica). Sem essa configuração, a ordenação segue o próprio Campo X.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Destacar Diferença&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): em vez da barra partir sempre do zero, passa a partir de perto do menor valor da série — útil quando os valores são próximos entre si e distantes de zero, tornando a diferença entre eles mais visível.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento inicial da barra de fundo / Arredondamento inicial da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no início da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento final da barra de fundo / Arredondamento final da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no final da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o fundo da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se o fundo/trilho da barra é exibido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; (somente Gráfico)&lt;br /&gt;
Cada linha desta grade representa uma série de valores exibida no gráfico:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Ordem da coluna de valores.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Texto de legenda associado a essa série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Valor:&amp;#039;&amp;#039;&amp;#039; Coluna, catalogada a partir da Expressão SQL, cujo valor será somado e exibido nesta série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Fonte do Valor / Cor da Fonte do Valor (alternativa):&amp;#039;&amp;#039;&amp;#039; Cores utilizadas no texto do valor, sendo a segunda aplicada quando o valor é exibido sobre um fundo colorido (dentro da barra ou fatia).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação numérica do valor (separador de milhar, casas decimais). Vem preenchida automaticamente conforme o tipo da coluna ao catalogá-la (veja &amp;quot;Incluir Colunas&amp;quot; abaixo).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Aba onde é escrita a consulta SQL responsável por buscar os dados do widget. A consulta deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY — não é ela quem soma ou agrupa os valores, isso é feito automaticamente a partir do que for configurado em Campo X/Campo Série/Colunas. Depois de escrita, use o botão &amp;#039;&amp;#039;&amp;#039;&amp;quot;Incluir Colunas&amp;quot;&amp;#039;&amp;#039;&amp;#039; para que o sistema execute a consulta e catalogue as colunas retornadas, disponibilizando-as para seleção em Campo X, Campo Série, Campo Ordenação e Campo Valor (nas Colunas) — não é necessário digitar o nome da coluna manualmente em nenhum desses campos.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Widget&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume o que precisa ser feito para deixar um Widget pronto para uso em um Dashboard.&lt;br /&gt;
&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, escreva a consulta que retorna os dados desejados, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; agrupar ou somar nada — cada linha do resultado deve ser um registro de detalhe.&lt;br /&gt;
Ainda na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, clique em &amp;#039;&amp;#039;&amp;#039;&amp;quot;Incluir Colunas&amp;quot;&amp;#039;&amp;#039;&amp;#039; para catalogar as colunas retornadas pela consulta.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, informe Nome, Título e escolha o Tipo de Widget (Gráfico ou Indicador) e, se Gráfico, o Tipo de Gráfico.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, selecione o Campo X (categoria, no Gráfico, ou o próprio valor, no Indicador) dentre as colunas já catalogadas, e configure a aparência (cores, arredondamento, fundo, legenda). Se precisar de séries lado a lado ou de uma ordenação diferente do Campo X, configure também Campo Série e Campo Ordenação.&lt;br /&gt;
Se o Tipo de Widget for Gráfico, na aba &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; cadastre uma ou mais colunas de valor, selecionando o Campo Valor já catalogado, a legenda e a cor.&lt;br /&gt;
Salve o cadastro. O Widget já pode ser selecionado no campo Widget de um Item do Dashboard.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*A Expressão SQL não deve conter GROUP BY — o próprio widget agrupa e soma os dados a partir do Campo X, Campo Série e das Colunas de valor configuradas.&lt;br /&gt;
*Campo X, Campo Série, Campo Ordenação e Campo Valor só oferecem para seleção as colunas já catalogadas por &amp;quot;Incluir Colunas&amp;quot; — se alterar a Expressão SQL depois, catalogue as colunas novamente.&lt;br /&gt;
*Qualquer coluna retornada pela Expressão SQL (mesmo que não usada em Campo X, Série ou Colunas) fica disponível para ser usada como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é o responsável por definir, em um único lugar, tanto a origem dos dados (a Expressão SQL) quanto a forma como eles são apresentados visualmente — seja como Gráfico ou como Indicador. Por ser independente do Dashboard em si, um mesmo Widget pode ser reaproveitado em diferentes dashboards, facilitando a manutenção e garantindo consistência visual entre eles.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Sugestão de Leitura&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboard|Dashboard]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7206</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7206"/>
		<updated>2026-08-29T23:55:51Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Cadastro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget define, de forma reutilizável, a fonte de dados e a aparência de um item que poderá ser exibido em um ou mais Dashboards. É neste cadastro que fica a Expressão SQL responsável por buscar os dados, além de todas as configurações visuais: tipo de exibição, cores, fontes, legendas e formatação dos valores. Um mesmo Widget pode ser configurado como &amp;#039;&amp;#039;&amp;#039;Gráfico&amp;#039;&amp;#039;&amp;#039; (barra, linha ou pizza) ou como &amp;#039;&amp;#039;&amp;#039;Indicador&amp;#039;&amp;#039;&amp;#039; (um único valor em destaque), conforme o Tipo de Widget escolhido.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A tela de cadastro de Widget é dividida em abas: &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;. As abas Campo X e Colunas só se aplicam quando o Tipo de Widget é Gráfico — quando é Indicador, o próprio Campo X passa a fornecer o valor único exibido no card, e a aba Colunas não é utilizada.&lt;br /&gt;
&lt;br /&gt;
A Expressão SQL deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY: quem agrupa pelo Campo X (e Campo Série, quando configurado) e soma cada Coluna de valor é o próprio Widget, automaticamente, na hora de montar o gráfico. Isso permite que qualquer coluna retornada pela consulta — mesmo uma usada só para calcular o Campo X, sem aparecer diretamente no gráfico — possa ser usada como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do cadastro de Widget, conseguimos criar visualizações próprias — tanto números em destaque quanto gráficos — para acompanhar qualquer informação do sistema, sem depender de um relatório específico, e reaproveitar essa mesma visualização em quantos dashboards forem necessários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao centralizar em um único cadastro a consulta e a aparência de um Widget, diferentes dashboards podem reaproveitar o mesmo sem retrabalho, garantindo que todos que o utilizam enxerguem a informação da mesma forma. Isso também facilita ajustes futuros: ao alterar o Widget uma única vez, a mudança se reflete em todos os dashboards que o utilizam.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um Widget do tipo Gráfico pode ser criado, por exemplo, para exibir em barras verticais o total vendido por vendedor, em linha a evolução de um valor ao longo de um período, ou em pizza a participação de cada categoria em um total. Um Widget do tipo Indicador pode destacar, por exemplo, o total de pedidos em aberto, o valor total de contas a receber vencidas, ou a quantidade de itens abaixo do estoque mínimo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é organizado nas abas &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho Fonte Título:&amp;#039;&amp;#039;&amp;#039; Tamanho da fonte utilizada no título.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Widget:&amp;#039;&amp;#039;&amp;#039; Define se este widget é um Gráfico ou um Indicador. Os campos abaixo marcados como &amp;quot;somente Gráfico&amp;quot; só têm efeito nesse tipo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Gráfico&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define o formato de exibição (veja tabela de tipos abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o Título:&amp;#039;&amp;#039;&amp;#039; Define se o título é exibido.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir valores&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se os valores são exibidos junto aos elementos do gráfico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:70%;&amp;quot;&lt;br /&gt;
! Tipo de Gráfico&lt;br /&gt;
! Descrição&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Barra Horizontal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas horizontalmente.&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Barra Vertical&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores em barras dispostas verticalmente (colunas).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Linha&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como uma série contínua, indicada para visualizar tendências ao longo de um período.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Pizza&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|Exibe os valores como percentual de participação em relação ao total.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo X:&amp;#039;&amp;#039;&amp;#039; Coluna, catalogada a partir da Expressão SQL (veja &amp;quot;Incluir Colunas&amp;quot; abaixo), utilizada como rótulo/categoria no Gráfico ou como valor exibido no Indicador.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho da Fonte&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Tamanho da fonte utilizado nos rótulos do eixo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Posição da Legenda&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define onde a legenda é exibida (Superior, Esquerda, Direita, Inferior ou Dentro do gráfico).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Barra ou Linha&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor do Valor&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor do Fundo da Barra&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor de Fundo do Card&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor de Identificação&amp;#039;&amp;#039;&amp;#039; (somente Indicador): Cor do texto de identificação/título do card.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Série / Campo Série&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): permite que uma mesma consulta gere várias séries lado a lado (ex.: uma barra por vendedor dentro de cada mês), a partir do valor de uma coluna adicional da Expressão SQL. Sem essa configuração, o gráfico exibe uma série única.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Ordenação&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): coluna, catalogada a partir da Expressão SQL, usada para ordenar o gráfico quando o próprio Campo X não ordena da forma esperada (por exemplo, Campo X trazendo o nome do mês abreviado, que ordenaria em ordem alfabética em vez de cronológica). Sem essa configuração, a ordenação segue o próprio Campo X.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Destacar Diferença&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): em vez da barra partir sempre do zero, passa a partir de perto do menor valor da série — útil quando os valores são próximos entre si e distantes de zero, tornando a diferença entre eles mais visível.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento inicial da barra de fundo / Arredondamento inicial da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no início da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento final da barra de fundo / Arredondamento final da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no final da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o fundo da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se o fundo/trilho da barra é exibido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; (somente Gráfico)&lt;br /&gt;
Cada linha desta grade representa uma série de valores exibida no gráfico:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Ordem da coluna de valores.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Texto de legenda associado a essa série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Valor:&amp;#039;&amp;#039;&amp;#039; Coluna, catalogada a partir da Expressão SQL, cujo valor será somado e exibido nesta série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Fonte do Valor / Cor da Fonte do Valor (alternativa):&amp;#039;&amp;#039;&amp;#039; Cores utilizadas no texto do valor, sendo a segunda aplicada quando o valor é exibido sobre um fundo colorido (dentro da barra ou fatia).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação numérica do valor (separador de milhar, casas decimais). Vem preenchida automaticamente conforme o tipo da coluna ao catalogá-la (veja &amp;quot;Incluir Colunas&amp;quot; abaixo).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Aba onde é escrita a consulta SQL responsável por buscar os dados do widget. A consulta deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY — não é ela quem soma ou agrupa os valores, isso é feito automaticamente a partir do que for configurado em Campo X/Campo Série/Colunas. Depois de escrita, use o botão &amp;#039;&amp;#039;&amp;#039;&amp;quot;Incluir Colunas&amp;quot;&amp;#039;&amp;#039;&amp;#039; para que o sistema execute a consulta e catalogue as colunas retornadas, disponibilizando-as para seleção em Campo X, Campo Série, Campo Ordenação e Campo Valor (nas Colunas) — não é necessário digitar o nome da coluna manualmente em nenhum desses campos.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Widget&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume o que precisa ser feito para deixar um Widget pronto para uso em um Dashboard.&lt;br /&gt;
&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, escreva a consulta que retorna os dados desejados, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; agrupar ou somar nada — cada linha do resultado deve ser um registro de detalhe.&lt;br /&gt;
Ainda na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, clique em &amp;#039;&amp;#039;&amp;#039;&amp;quot;Incluir Colunas&amp;quot;&amp;#039;&amp;#039;&amp;#039; para catalogar as colunas retornadas pela consulta.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, informe Nome, Título e escolha o Tipo de Widget (Gráfico ou Indicador) e, se Gráfico, o Tipo de Gráfico.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, selecione o Campo X (categoria, no Gráfico, ou o próprio valor, no Indicador) dentre as colunas já catalogadas, e configure a aparência (cores, arredondamento, fundo, legenda). Se precisar de séries lado a lado ou de uma ordenação diferente do Campo X, configure também Campo Série e Campo Ordenação.&lt;br /&gt;
Se o Tipo de Widget for Gráfico, na aba &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; cadastre uma ou mais colunas de valor, selecionando o Campo Valor já catalogado, a legenda e a cor.&lt;br /&gt;
Salve o cadastro. O Widget já pode ser selecionado no campo Widget de um Item do Dashboard.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*A Expressão SQL não deve conter GROUP BY — o próprio widget agrupa e soma os dados a partir do Campo X, Campo Série e das Colunas de valor configuradas.&lt;br /&gt;
*Campo X, Campo Série, Campo Ordenação e Campo Valor só oferecem para seleção as colunas já catalogadas por &amp;quot;Incluir Colunas&amp;quot; — se alterar a Expressão SQL depois, catalogue as colunas novamente.&lt;br /&gt;
*Qualquer coluna retornada pela Expressão SQL (mesmo que não usada em Campo X, Série ou Colunas) fica disponível para ser usada como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é o responsável por definir, em um único lugar, tanto a origem dos dados (a Expressão SQL) quanto a forma como eles são apresentados visualmente — seja como Gráfico ou como Indicador. Por ser independente do Dashboard em si, um mesmo Widget pode ser reaproveitado em diferentes dashboards, facilitando a manutenção e garantindo consistência visual entre eles.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Sugestão de Leitura&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboard|Dashboard]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7205</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7205"/>
		<updated>2026-08-29T23:54:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget define, de forma reutilizável, a fonte de dados e a aparência de um item que poderá ser exibido em um ou mais Dashboards. É neste cadastro que fica a Expressão SQL responsável por buscar os dados, além de todas as configurações visuais: tipo de exibição, cores, fontes, legendas e formatação dos valores. Um mesmo Widget pode ser configurado como &amp;#039;&amp;#039;&amp;#039;Gráfico&amp;#039;&amp;#039;&amp;#039; (barra, linha ou pizza) ou como &amp;#039;&amp;#039;&amp;#039;Indicador&amp;#039;&amp;#039;&amp;#039; (um único valor em destaque), conforme o Tipo de Widget escolhido.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A tela de cadastro de Widget é dividida em abas: &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;. As abas Campo X e Colunas só se aplicam quando o Tipo de Widget é Gráfico — quando é Indicador, o próprio Campo X passa a fornecer o valor único exibido no card, e a aba Colunas não é utilizada.&lt;br /&gt;
&lt;br /&gt;
A Expressão SQL deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY: quem agrupa pelo Campo X (e Campo Série, quando configurado) e soma cada Coluna de valor é o próprio Widget, automaticamente, na hora de montar o gráfico. Isso permite que qualquer coluna retornada pela consulta — mesmo uma usada só para calcular o Campo X, sem aparecer diretamente no gráfico — possa ser usada como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do cadastro de Widget, conseguimos criar visualizações próprias — tanto números em destaque quanto gráficos — para acompanhar qualquer informação do sistema, sem depender de um relatório específico, e reaproveitar essa mesma visualização em quantos dashboards forem necessários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao centralizar em um único cadastro a consulta e a aparência de um Widget, diferentes dashboards podem reaproveitar o mesmo sem retrabalho, garantindo que todos que o utilizam enxerguem a informação da mesma forma. Isso também facilita ajustes futuros: ao alterar o Widget uma única vez, a mudança se reflete em todos os dashboards que o utilizam.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um Widget do tipo Gráfico pode ser criado, por exemplo, para exibir em barras verticais o total vendido por vendedor, em linha a evolução de um valor ao longo de um período, ou em pizza a participação de cada categoria em um total. Um Widget do tipo Indicador pode destacar, por exemplo, o total de pedidos em aberto, o valor total de contas a receber vencidas, ou a quantidade de itens abaixo do estoque mínimo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é organizado nas abas &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho Fonte Título:&amp;#039;&amp;#039;&amp;#039; Tamanho da fonte utilizada no título.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Widget:&amp;#039;&amp;#039;&amp;#039; Define se este widget é um Gráfico ou um Indicador. Os campos abaixo marcados como &amp;quot;somente Gráfico&amp;quot; só têm efeito nesse tipo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Gráfico&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define o formato de exibição (veja tabela de tipos abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o Título:&amp;#039;&amp;#039;&amp;#039; Define se o título é exibido.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir valores&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se os valores são exibidos junto aos elementos do gráfico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:70%;&amp;quot;&lt;br /&gt;
! Tipo de Gráfico&lt;br /&gt;
! Descrição&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Barra Horizontal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Exibe os valores em barras dispostas horizontalmente.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Barra Vertical&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Exibe os valores em barras dispostas verticalmente (colunas).&lt;br /&gt;
-&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Linha&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Exibe os valores como uma série contínua, indicada para visualizar tendências ao longo de um período.&lt;br /&gt;
-&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pizza&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Exibe os valores como percentual de participação em relação ao total.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo X:&amp;#039;&amp;#039;&amp;#039; Coluna, catalogada a partir da Expressão SQL (veja &amp;quot;Incluir Colunas&amp;quot; abaixo), utilizada como rótulo/categoria no Gráfico ou como valor exibido no Indicador.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho da Fonte&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Tamanho da fonte utilizado nos rótulos do eixo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Posição da Legenda&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define onde a legenda é exibida (Superior, Esquerda, Direita, Inferior ou Dentro do gráfico).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Barra ou Linha&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor do Valor&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor do Fundo da Barra&amp;#039;&amp;#039;&amp;#039; (Gráfico) / &amp;#039;&amp;#039;&amp;#039;Cor de Fundo do Card&amp;#039;&amp;#039;&amp;#039; (Indicador): mesmo campo, reaproveitado com papel diferente conforme o Tipo de Widget.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor de Identificação&amp;#039;&amp;#039;&amp;#039; (somente Indicador): Cor do texto de identificação/título do card.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Série / Campo Série&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): permite que uma mesma consulta gere várias séries lado a lado (ex.: uma barra por vendedor dentro de cada mês), a partir do valor de uma coluna adicional da Expressão SQL. Sem essa configuração, o gráfico exibe uma série única.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Ordenação&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): coluna, catalogada a partir da Expressão SQL, usada para ordenar o gráfico quando o próprio Campo X não ordena da forma esperada (por exemplo, Campo X trazendo o nome do mês abreviado, que ordenaria em ordem alfabética em vez de cronológica). Sem essa configuração, a ordenação segue o próprio Campo X.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Destacar Diferença&amp;#039;&amp;#039;&amp;#039; (somente Gráfico, opcional): em vez da barra partir sempre do zero, passa a partir de perto do menor valor da série — útil quando os valores são próximos entre si e distantes de zero, tornando a diferença entre eles mais visível.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento inicial da barra de fundo / Arredondamento inicial da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no início da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento final da barra de fundo / Arredondamento final da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Controlam o arredondamento no final da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o fundo da barra&amp;#039;&amp;#039;&amp;#039; (somente Gráfico): Define se o fundo/trilho da barra é exibido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; (somente Gráfico)&lt;br /&gt;
Cada linha desta grade representa uma série de valores exibida no gráfico:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Ordem da coluna de valores.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Texto de legenda associado a essa série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Valor:&amp;#039;&amp;#039;&amp;#039; Coluna, catalogada a partir da Expressão SQL, cujo valor será somado e exibido nesta série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Fonte do Valor / Cor da Fonte do Valor (alternativa):&amp;#039;&amp;#039;&amp;#039; Cores utilizadas no texto do valor, sendo a segunda aplicada quando o valor é exibido sobre um fundo colorido (dentro da barra ou fatia).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação numérica do valor (separador de milhar, casas decimais). Vem preenchida automaticamente conforme o tipo da coluna ao catalogá-la (veja &amp;quot;Incluir Colunas&amp;quot; abaixo).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Aba onde é escrita a consulta SQL responsável por buscar os dados do widget. A consulta deve retornar as linhas de detalhe, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; GROUP BY — não é ela quem soma ou agrupa os valores, isso é feito automaticamente a partir do que for configurado em Campo X/Campo Série/Colunas. Depois de escrita, use o botão &amp;#039;&amp;#039;&amp;#039;&amp;quot;Incluir Colunas&amp;quot;&amp;#039;&amp;#039;&amp;#039; para que o sistema execute a consulta e catalogue as colunas retornadas, disponibilizando-as para seleção em Campo X, Campo Série, Campo Ordenação e Campo Valor (nas Colunas) — não é necessário digitar o nome da coluna manualmente em nenhum desses campos.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Widget&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume o que precisa ser feito para deixar um Widget pronto para uso em um Dashboard.&lt;br /&gt;
&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, escreva a consulta que retorna os dados desejados, &amp;#039;&amp;#039;&amp;#039;sem&amp;#039;&amp;#039;&amp;#039; agrupar ou somar nada — cada linha do resultado deve ser um registro de detalhe.&lt;br /&gt;
Ainda na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, clique em &amp;#039;&amp;#039;&amp;#039;&amp;quot;Incluir Colunas&amp;quot;&amp;#039;&amp;#039;&amp;#039; para catalogar as colunas retornadas pela consulta.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, informe Nome, Título e escolha o Tipo de Widget (Gráfico ou Indicador) e, se Gráfico, o Tipo de Gráfico.&lt;br /&gt;
Na aba &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, selecione o Campo X (categoria, no Gráfico, ou o próprio valor, no Indicador) dentre as colunas já catalogadas, e configure a aparência (cores, arredondamento, fundo, legenda). Se precisar de séries lado a lado ou de uma ordenação diferente do Campo X, configure também Campo Série e Campo Ordenação.&lt;br /&gt;
Se o Tipo de Widget for Gráfico, na aba &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; cadastre uma ou mais colunas de valor, selecionando o Campo Valor já catalogado, a legenda e a cor.&lt;br /&gt;
Salve o cadastro. O Widget já pode ser selecionado no campo Widget de um Item do Dashboard.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*A Expressão SQL não deve conter GROUP BY — o próprio widget agrupa e soma os dados a partir do Campo X, Campo Série e das Colunas de valor configuradas.&lt;br /&gt;
*Campo X, Campo Série, Campo Ordenação e Campo Valor só oferecem para seleção as colunas já catalogadas por &amp;quot;Incluir Colunas&amp;quot; — se alterar a Expressão SQL depois, catalogue as colunas novamente.&lt;br /&gt;
*Qualquer coluna retornada pela Expressão SQL (mesmo que não usada em Campo X, Série ou Colunas) fica disponível para ser usada como Filtro do Item no Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Widget é o responsável por definir, em um único lugar, tanto a origem dos dados (a Expressão SQL) quanto a forma como eles são apresentados visualmente — seja como Gráfico ou como Indicador. Por ser independente do Dashboard em si, um mesmo Widget pode ser reaproveitado em diferentes dashboards, facilitando a manutenção e garantindo consistência visual entre eles.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Sugestão de Leitura&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboard|Dashboard]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Dashboards&amp;diff=7204</id>
		<title>Dashboards</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Dashboards&amp;diff=7204"/>
		<updated>2026-08-29T23:44:32Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é a funcionalidade do sistema que reúne, em um único painel visual, indicadores e gráficos configuráveis, permitindo o acompanhamento rápido de informações relevantes do negócio sem a necessidade de gerar relatórios manualmente. Cada dashboard é composto por um conjunto de itens — cada um exibindo um Widget do tipo indicador numérico (card) ou gráfico (barra, linha ou pizza) — organizados em um layout de grade dentro da tela.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é uma tela de visualização somente leitura, formada por blocos (itens) distribuídos em grade. Cada item exibe o resultado de um Widget previamente configurado no sistema, que pode assumir dois tipos:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicador (card):&amp;#039;&amp;#039;&amp;#039; exibe um único valor em destaque, geralmente representando uma contagem, total.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Gráfico:&amp;#039;&amp;#039;&amp;#039; exibe uma série de dados no formato de barra, linha ou pizza.&lt;br /&gt;
&lt;br /&gt;
A montagem do dashboard (quais itens existem, em que ordem, com que tamanho e com que Widget) é feita previamente pelos cadastros de &amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Widget&amp;#039;&amp;#039;&amp;#039;. A tela do Dashboard em si apenas exibe o resultado já configurado — não é nela que se adiciona, remove ou redimensiona itens. Cada item é alimentado por uma consulta SQL própria (Expressão SQL), definida no cadastro do Widget correspondente. Opcionalmente, um Dashboard pode ter um Formulário vinculado, permitindo ao usuário filtrar os dados exibidos sem precisar de um novo cadastro.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do Dashboard, conseguimos acompanhar de forma visual e centralizada os principais números da operação, tomando decisões com mais agilidade e sem depender da geração manual de relatórios para obter uma visão geral da situação atual.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao concentrar as informações mais relevantes em um único painel visual, o usuário reduz o tempo gasto navegando por diferentes telas e relatórios para entender a situação do negócio. Isso favorece a identificação rápida de tendências, desvios e pontos de atenção, além de padronizar a forma como diferentes usuários enxergam os mesmos indicadores, evitando interpretações divergentes sobre os mesmos dados.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um dashboard pode reunir, por exemplo, um Widget indicador com o total de pedidos em aberto, um Widget gráfico de barras com o volume de vendas por período e um Widget gráfico de pizza com a participação de cada categoria de produto no faturamento. Dessa forma, em uma única tela, o usuário consegue visualizar tanto números pontuais quanto tendências ao longo do tempo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é composto por dois cadastros: o Dashboard propriamente dito e os Itens do Dashboard. Cada item, por sua vez, exibe um Widget já cadastrado (do tipo Gráfico ou Indicador) — o cadastro do Widget (onde entram título, cores, formato e a Expressão SQL) é tratado em página própria (veja Sugestão de Leitura).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do dashboard, utilizado também como identificador ao exportar/importar sua configuração.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Subtítulo/legenda exibida para o usuário.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formulário:&amp;#039;&amp;#039;&amp;#039; Formulário (tela de filtro) opcional vinculado ao dashboard. Quando informado, a tela de Dashboard passa a exibir o botão &amp;quot;Filtrar&amp;quot;, permitindo restringir os dados exibidos nos itens configurados com Filtros do Item (veja abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;É Sistema:&amp;#039;&amp;#039;&amp;#039; Indica se o dashboard é nativo do sistema (padrão) ou foi criado pelo usuário.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dashboard:&amp;#039;&amp;#039;&amp;#039; Dashboard ao qual o item pertence.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Posição/ordem do item dentro do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no topo do item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Altura:&amp;#039;&amp;#039;&amp;#039; Altura do item na grade do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Largura:&amp;#039;&amp;#039;&amp;#039; Largura do item na grade do dashboard (a grade possui 16 unidades de largura por linha; itens são distribuídos lado a lado até completar esse limite, quebrando para a linha seguinte quando necessário).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Widget:&amp;#039;&amp;#039;&amp;#039; Widget já cadastrado (do tipo Gráfico ou Indicador) a ser exibido neste item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Filtros do Item:&amp;#039;&amp;#039;&amp;#039; Disponível apenas quando o Dashboard tem um Formulário vinculado. Mapeia cada campo do Formulário para uma coluna já catalogada (via &amp;quot;Incluir Colunas&amp;quot;) do Widget deste item, definindo a operação a aplicar (igual, diferente, maior ou igual, menor ou igual, contém, está na lista) quando o usuário preencher aquele campo no filtro. Um campo do Formulário sem mapeamento fica disponível para preenchimento, mas não afeta a consulta deste item específico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;É Sistema:&amp;#039;&amp;#039;&amp;#039; Indica se o item é nativo do sistema (padrão) ou foi criado pelo usuário.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Comportamentos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Atualizar:&amp;#039;&amp;#039;&amp;#039; Permite recarregar o dashboard por completo, buscando novamente a estrutura e os dados de todos os itens.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Carregamento por item:&amp;#039;&amp;#039;&amp;#039; Cada item do dashboard é carregado de forma independente: a estrutura visual (títulos, cores, formato) aparece imediatamente, enquanto os dados de cada item são buscados individualmente e exibidos em seguida, com uma animação de entrada.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicação de carregamento:&amp;#039;&amp;#039;&amp;#039; Enquanto os dados de um item ainda não retornaram, é exibido um indicador de carregamento (spinner) sobre o item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sem dados / Erro ao carregar:&amp;#039;&amp;#039;&amp;#039; Caso a consulta de um item não retorne dados, ou ocorra uma falha ao buscá-los, o item exibe uma mensagem informando a situação, sem impedir a exibição dos demais itens do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Distribuição em grade:&amp;#039;&amp;#039;&amp;#039; Os itens são organizados automaticamente em uma grade de 16 colunas, respeitando a largura e altura configuradas em cada item, se ajustando ao tamanho da tela.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Filtrar:&amp;#039;&amp;#039;&amp;#039; Quando o dashboard tem um Formulário vinculado, um botão &amp;quot;Filtrar&amp;quot; aparece no topo da tela, abrindo uma janela com os campos configurados. Ao confirmar, todos os itens com Filtros do Item configurados são recarregados considerando os valores informados.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Lembrar filtro:&amp;#039;&amp;#039;&amp;#039; Se o Formulário vinculado estiver marcado para &amp;quot;Salvar&amp;quot;, o último filtro confirmado pelo usuário é lembrado entre acessos, inclusive reabrindo o dashboard em outro momento. Se essa opção não estiver marcada, o filtro é considerado apenas enquanto a tela permanecer aberta — ao reabrir o dashboard, os campos voltam ao valor padrão configurado no Formulário.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Baixar/Copiar imagem:&amp;#039;&amp;#039;&amp;#039; Ao clicar com o botão direito sobre um Widget do tipo gráfico, é possível baixar a imagem gerada (PNG) ou copiá-la para a área de transferência, para uso em outros documentos ou apresentações.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exportar/Importar:&amp;#039;&amp;#039;&amp;#039; No cadastro de dashboards, é possível exportar a configuração de um dashboard (incluindo seus itens, Widgets e colunas) para um arquivo, e importá-la posteriormente, seja no mesmo ambiente ou em outro.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sem armazenamento temporário (cache):&amp;#039;&amp;#039;&amp;#039; Toda abertura ou atualização do dashboard executa novamente, em tempo real, a Expressão SQL de todos os seus itens — não há reaproveitamento de um resultado buscado anteriormente.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Dashboard&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume, o que precisa ser feito para configurar um dashboard.&lt;br /&gt;
&lt;br /&gt;
Cadastre primeiro o &amp;#039;&amp;#039;&amp;#039;Widget&amp;#039;&amp;#039;&amp;#039; (do tipo Gráfico ou Indicador) que você quer usar no dashboard — é lá que ficam o título, as cores, o formato e a Expressão SQL que busca os dados (veja a página de Widgets em Sugestão de Leitura).&lt;br /&gt;
Cadastre o &amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;, informando nome e legenda.&lt;br /&gt;
(Opcional) Para permitir que o usuário filtre os dados do dashboard, cadastre um &amp;#039;&amp;#039;&amp;#039;Formulário&amp;#039;&amp;#039;&amp;#039; com os campos desejados e vincule-o ao Dashboard.&lt;br /&gt;
Cadastre os &amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039;, vinculando cada item ao Dashboard criado e ao Widget já cadastrado, e definindo seu título, posição e tamanho na grade.&lt;br /&gt;
(Opcional) Se o Dashboard tiver um Formulário vinculado, configure em cada Item os &amp;#039;&amp;#039;&amp;#039;Filtros do Item&amp;#039;&amp;#039;&amp;#039; que devem respeitar o filtro, mapeando o campo do Formulário para a coluna correspondente do Widget.&lt;br /&gt;
Abra a tela de Dashboard apontando para o dashboard desejado — os itens cadastrados aparecem automaticamente, cada um já exibindo seu resultado.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Como a Expressão SQL é texto livre, o controle de quem pode ver informações sensíveis num dashboard depende de quem tem permissão para visualizar os Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é o recurso responsável por consolidar, em uma única tela, os principais indicadores e gráficos definidos para acompanhamento do negócio. Por ser inteiramente configurável através dos cadastros de Dashboard e Itens — que reaproveitam Widgets já cadastrados, permite que diferentes visões sejam montadas conforme a necessidade de cada área ou perfil de usuário, sem exigir alterações no sistema. Dessa forma, contribui para uma tomada de decisão mais ágil, baseada em informação centralizada e sempre atualizada.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Widgets]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7203</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Widgets&amp;diff=7203"/>
		<updated>2026-08-29T23:40:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: Admin moveu Gráficos para Widgets sem deixar um redirecionamento&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Gráfico define, de forma reutilizável, a fonte de dados e a aparência de um gráfico que poderá ser exibido em um ou mais itens de um Dashboard. É neste cadastro que fica a consulta SQL responsável por buscar os dados, além de todas as configurações visuais: tipo de gráfico, cores, fontes, legendas e formatação dos valores.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
A tela de cadastro de Gráfico é dividida em duas abas principais: &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;. Dentro da aba Geral existem ainda duas sub-abas: &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039; (aparência do eixo/rótulo e da barra ou linha) e &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; (os valores exibidos no gráfico). Um mesmo Gráfico, dependendo do Tipo escolhido, também pode ser exibido como um card de indicador em vez de um gráfico tradicional.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do cadastro de Gráfico, conseguimos criar visualizações próprias para acompanhar qualquer informação do sistema, sem depender de um relatório específico, e reaproveitar essa mesma visualização em quantos dashboards forem necessários.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao centralizar em um único cadastro a consulta e a aparência de um gráfico, diferentes dashboards podem reaproveitar a mesma visualização sem retrabalho, garantindo que todos que a utilizam enxerguem a informação da mesma forma. Isso também facilita ajustes futuros: ao alterar o gráfico uma única vez, a mudança se reflete em todos os dashboards que o utilizam.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um Gráfico pode ser criado, por exemplo, para exibir em barras verticais o total vendido por vendedor, em linha a evolução de um indicador ao longo de um período, ou em pizza a participação de cada categoria em um total. O mesmo cadastro, se configurado como Indicador, pode ser reaproveitado para mostrar apenas um número em destaque, como o total de pedidos em aberto.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Gráfico é organizado nas abas &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, conforme aparecem na tela.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do gráfico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no gráfico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho Fonte Título:&amp;#039;&amp;#039;&amp;#039; Tamanho da fonte utilizada no título.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tipo de Gráfico:&amp;#039;&amp;#039;&amp;#039; Define o formato de exibição (veja tabela de tipos abaixo).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o Título:&amp;#039;&amp;#039;&amp;#039; Define se o título do gráfico é exibido.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir valores:&amp;#039;&amp;#039;&amp;#039; Define se os valores são exibidos junto aos elementos do gráfico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:70%;&amp;quot;&lt;br /&gt;
! Tipo de Gráfico&lt;br /&gt;
! Descrição&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Barra Horizontal&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Exibe os valores em barras dispostas horizontalmente.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Barra Vertical&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Exibe os valores em barras dispostas verticalmente (colunas).&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Linha&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Exibe os valores como uma série contínua, indicada para visualizar tendências ao longo de um período.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Pizza&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Exibe os valores como percentual de participação em relação ao total.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo X:&amp;#039;&amp;#039;&amp;#039; Nome da coluna, retornada pela Expressão SQL, utilizada como rótulo/categoria (eixo horizontal).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Tamanho da Fonte:&amp;#039;&amp;#039;&amp;#039; Tamanho da fonte utilizado nos rótulos do eixo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Posição da Legenda:&amp;#039;&amp;#039;&amp;#039; Define onde a legenda é exibida (Superior, Esquerda, Direita, Inferior ou Dentro do gráfico).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Barra ou Linha:&amp;#039;&amp;#039;&amp;#039; Cor principal utilizada no gráfico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor do Fundo da Barra:&amp;#039;&amp;#039;&amp;#039; Cor de fundo (trilho) desenhada atrás da barra ou linha.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento inicial da barra de fundo / Arredondamento inicial da barra:&amp;#039;&amp;#039;&amp;#039; Controlam o arredondamento no início da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Arredondamento final da barra de fundo / Arredondamento final da barra:&amp;#039;&amp;#039;&amp;#039; Controlam o arredondamento no final da barra e do seu fundo.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exibir o fundo da barra:&amp;#039;&amp;#039;&amp;#039; Define se o fundo/trilho da barra é exibido.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Cada linha desta grade representa um valor exibido no gráfico:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Ordem da coluna de valores.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Texto de legenda associado a esse valor/série.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Campo Valor:&amp;#039;&amp;#039;&amp;#039; Nome da coluna, retornada pela Expressão SQL, utilizada como valor numérico.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Cor da Fonte do Valor / Cor da Fonte do Valor (alternativa):&amp;#039;&amp;#039;&amp;#039; Cores utilizadas no texto do valor, sendo a segunda aplicada quando o valor é exibido sobre um fundo colorido (dentro da barra ou fatia).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Formato:&amp;#039;&amp;#039;&amp;#039; Máscara de formatação numérica aplicada ao valor (ex.: separador de milhar, casas decimais).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Aba onde é escrita a consulta SQL responsável por buscar os dados do gráfico. O resultado dessa consulta deve conter uma coluna com o mesmo nome informado em Campo X (o rótulo) e uma coluna com o mesmo nome informado em Campo Valor, em Colunas.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Gráfico&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume, o que precisa ser feito para deixar um Gráfico pronto para uso em um Dashboard.&lt;br /&gt;
&lt;br /&gt;
# Na aba &amp;#039;&amp;#039;&amp;#039;Expressão SQL&amp;#039;&amp;#039;&amp;#039;, escreva a consulta que retorna os dados desejados. O resultado precisa ter uma coluna para servir de rótulo/categoria e uma coluna com o valor numérico.&lt;br /&gt;
# Na aba &amp;#039;&amp;#039;&amp;#039;Geral&amp;#039;&amp;#039;&amp;#039;, informe Nome, Título e escolha o Tipo de Gráfico.&lt;br /&gt;
# Na guia &amp;#039;&amp;#039;&amp;#039;Campo X&amp;#039;&amp;#039;&amp;#039;, informe o nome da coluna de rótulo (igual ao nome retornado pela consulta) e configure a aparência: cores, arredondamento, fundo e posição da legenda.&lt;br /&gt;
# Na guia &amp;#039;&amp;#039;&amp;#039;Colunas&amp;#039;&amp;#039;&amp;#039;, cadastre a coluna de valor, informando o nome da coluna de valor (igual ao retornado pela consulta), a legenda, a cor e o formato.&lt;br /&gt;
# Salve o cadastro. O Gráfico já pode ser selecionado no campo Gráfico de um Item do Dashboard.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ponto de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Os nomes informados em Campo X e em Campo Valor precisam ser exatamente iguais aos nomes das colunas retornadas pela Expressão SQL, ou o gráfico não exibirá dados.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O cadastro de Gráfico é o responsável por definir, em um único lugar, tanto a origem dos dados (a Expressão SQL) quanto a forma como eles são apresentados visualmente. Por ser independente do Dashboard em si, um mesmo Gráfico pode ser reaproveitado em diferentes dashboards, facilitando a manutenção e garantindo consistência visual entre eles.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Sugestão de Leitura&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboard|Dashboard]]&lt;br /&gt;
&lt;br /&gt;
[[Indicadores|Indicadores]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Dashboards&amp;diff=7202</id>
		<title>Dashboards</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Dashboards&amp;diff=7202"/>
		<updated>2026-08-29T23:39:54Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Conclusão */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;Conceito&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é a funcionalidade do sistema que reúne, em um único painel visual, indicadores e gráficos configuráveis, permitindo o acompanhamento rápido de informações relevantes do negócio sem a necessidade de gerar relatórios manualmente. Cada dashboard é composto por um conjunto de itens — indicadores numéricos (cards) ou gráficos (barra, linha ou pizza) — organizados em um layout de grade dentro da tela.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é uma tela de visualização somente leitura, formada por blocos (itens) distribuídos em grade. Cada item exibe o resultado de uma consulta previamente configurada no sistema, podendo assumir dois formatos:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicador (card):&amp;#039;&amp;#039;&amp;#039; exibe um único valor em destaque, geralmente representando uma contagem, total.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Gráfico:&amp;#039;&amp;#039;&amp;#039; exibe uma série de dados no formato de barra, linha ou pizza.&lt;br /&gt;
&lt;br /&gt;
A montagem do dashboard (quais itens existem, em que ordem, com que tamanho e com que consulta) é feita previamente pelos cadastros de &amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Gráfico&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;Indicador&amp;#039;&amp;#039;&amp;#039;. A tela do Dashboard em si apenas exibe o resultado já configurado — não é nela que se adiciona, remove ou redimensiona itens. Cada item é alimentado por uma consulta SQL própria (Expressão SQL), definida no cadastro do gráfico ou indicador correspondente.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Quando compreendemos a funcionalidade do Dashboard, conseguimos acompanhar de forma visual e centralizada os principais números da operação, tomando decisões com mais agilidade e sem depender da geração manual de relatórios para obter uma visão geral da situação atual.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Ao concentrar as informações mais relevantes em um único painel visual, o usuário reduz o tempo gasto navegando por diferentes telas e relatórios para entender a situação do negócio. Isso favorece a identificação rápida de tendências, desvios e pontos de atenção, além de padronizar a forma como diferentes usuários enxergam os mesmos indicadores, evitando interpretações divergentes sobre os mesmos dados.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Um dashboard pode reunir, por exemplo, um indicador com o total de pedidos em aberto, um gráfico de barras com o volume de vendas por período e um gráfico de pizza com a participação de cada categoria de produto no faturamento. Dessa forma, em uma única tela, o usuário consegue visualizar tanto números pontuais quanto tendências ao longo do tempo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é composto por dois cadastros: o Dashboard propriamente dito e os Itens do Dashboard. Cada item, por sua vez, exibe um Gráfico ou um Indicador já cadastrado — o cadastro desses dois (onde entram título, cores, formato e a Expressão SQL) é tratado em páginas próprias (veja Sugestão de Leitura).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do dashboard, utilizado também como identificador ao exportar/importar sua configuração.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Subtítulo/legenda exibida para o usuário.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;É Sistema:&amp;#039;&amp;#039;&amp;#039; Indica se o dashboard é nativo do sistema (padrão) ou foi criado pelo usuário.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Dashboard:&amp;#039;&amp;#039;&amp;#039; Dashboard ao qual o item pertence.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Posição/ordem do item dentro do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Nome interno do item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Título:&amp;#039;&amp;#039;&amp;#039; Título exibido no topo do item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Altura:&amp;#039;&amp;#039;&amp;#039; Altura do item na grade do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Largura:&amp;#039;&amp;#039;&amp;#039; Largura do item na grade do dashboard (a grade possui 16 unidades de largura por linha; itens são distribuídos lado a lado até completar esse limite, quebrando para a linha seguinte quando necessário).&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Gráfico:&amp;#039;&amp;#039;&amp;#039; Gráfico já cadastrado a ser exibido neste item, quando aplicável.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicador:&amp;#039;&amp;#039;&amp;#039; Indicador já cadastrado a ser exibido neste item, quando aplicável.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Data/Hora:&amp;#039;&amp;#039;&amp;#039; Data e horário da última alteração. Preenchido automaticamente pelo sistema.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;É Sistema:&amp;#039;&amp;#039;&amp;#039; Indica se o item é nativo do sistema (padrão) ou foi criado pelo usuário.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Observação: cada item deve estar associado a um Gráfico ou a um Indicador, nunca aos dois ao mesmo tempo.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Comportamentos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Atualizar:&amp;#039;&amp;#039;&amp;#039; Permite recarregar o dashboard por completo, buscando novamente a estrutura e os dados de todos os itens.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Carregamento por item:&amp;#039;&amp;#039;&amp;#039; Cada item do dashboard é carregado de forma independente: a estrutura visual (títulos, cores, formato) aparece imediatamente, enquanto os dados de cada item são buscados individualmente e exibidos em seguida, com uma animação de entrada.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Indicação de carregamento:&amp;#039;&amp;#039;&amp;#039; Enquanto os dados de um item ainda não retornaram, é exibido um indicador de carregamento (spinner) sobre o item.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sem dados / Erro ao carregar:&amp;#039;&amp;#039;&amp;#039; Caso a consulta de um item não retorne dados, ou ocorra uma falha ao buscá-los, o item exibe uma mensagem informando a situação, sem impedir a exibição dos demais itens do dashboard.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Distribuição em grade:&amp;#039;&amp;#039;&amp;#039; Os itens são organizados automaticamente em uma grade de 16 colunas, respeitando a largura e altura configuradas em cada item, se ajustando ao tamanho da tela.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Exportar/Importar:&amp;#039;&amp;#039;&amp;#039; No cadastro de dashboards, é possível exportar a configuração de um dashboard (incluindo seus itens, gráficos e colunas) para um arquivo, e importá-la posteriormente, seja no mesmo ambiente ou em outro.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Sem armazenamento temporário (cache):&amp;#039;&amp;#039;&amp;#039; Toda abertura ou atualização do dashboard executa novamente, em tempo real, a Expressão SQL de todos os seus itens — não há reaproveitamento de um resultado buscado anteriormente.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Como Configurar um Dashboard&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
Esta seção resume, o que precisa ser feito para configurar um dashboard.&lt;br /&gt;
&lt;br /&gt;
# Cadastre primeiro o &amp;#039;&amp;#039;&amp;#039;Gráfico&amp;#039;&amp;#039;&amp;#039; ou o &amp;#039;&amp;#039;&amp;#039;Indicador&amp;#039;&amp;#039;&amp;#039; que você quer usar no dashboard — é lá que ficam o título, as cores, o formato e a Expressão SQL que busca os dados (veja as páginas de Gráficos e Indicadores em Sugestão de Leitura).&lt;br /&gt;
# Cadastre o &amp;#039;&amp;#039;&amp;#039;Dashboard&amp;#039;&amp;#039;&amp;#039;, informando nome e legenda.&lt;br /&gt;
# Cadastre os &amp;#039;&amp;#039;&amp;#039;Itens do Dashboard&amp;#039;&amp;#039;&amp;#039;, vinculando cada item ao Dashboard criado e ao Gráfico ou Indicador já cadastrado, e definindo seu título, posição e tamanho na grade.&lt;br /&gt;
# Abra a tela de Dashboard apontando para o dashboard desejado — os itens cadastrados aparecem automaticamente, cada um já exibindo seu resultado.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Pontos de atenção&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Como a Expressão SQL é texto livre, o controle de quem pode ver informações sensíveis num dashboard depende de quem tem permissão para visualizar os Dashboard.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
O Dashboard é o recurso responsável por consolidar, em uma única tela, os principais indicadores e gráficos definidos para acompanhamento do negócio. Por ser inteiramente configurável através dos cadastros de Dashboard e Itens — que reaproveitam Gráficos e Indicadores já cadastrados, permite que diferentes visões sejam montadas conforme a necessidade de cada área ou perfil de usuário, sem exigir alterações no sistema. Dessa forma, contribui para uma tomada de decisão mais ágil, baseada em informação centralizada e sempre atualizada.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Gráficos|Widgets]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.phsys.com.br/index.php?title=Formul%C3%A1rios&amp;diff=7201</id>
		<title>Formulários</title>
		<link rel="alternate" type="text/html" href="http://wiki.phsys.com.br/index.php?title=Formul%C3%A1rios&amp;diff=7201"/>
		<updated>2026-08-29T20:03:08Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Quais os benefícios e/ou ganhos de uso */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===&amp;#039;&amp;#039;&amp;#039;O que é&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
O &amp;#039;&amp;#039;&amp;#039;Formulário&amp;#039;&amp;#039;&amp;#039; é uma tela dinâmica de coleta de informações, configurada inteiramente via cadastro (sem precisar de programação pra cada caso novo). Cada Formulário é composto por um cabeçalho (nome, legenda, tamanho) e uma lista de campos, onde cada campo é configurado como um registro próprio — com tipo, obrigatoriedade, valor padrão, etc.&lt;br /&gt;
&lt;br /&gt;
O mesmo motor de Formulário é reaproveitado em vários pontos do sistema, tanto no desktop quanto na web: não existe um &amp;quot;Formulário de relatório&amp;quot; e um &amp;quot;Formulário de dashboard&amp;quot; separados — é a mesma engine, o que muda é só onde ela é acionada e o que é feito com os valores preenchidos.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Para que serve&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
Hoje o Formulário é usado em quatro frentes:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Preenchimento de informações durante um processo:&amp;#039;&amp;#039;&amp;#039; Um botão de cadastro pode abrir um Formulário pra pedir dados antes de executar uma rotina (ex: confirmar um período, escolher uma opção, informar uma observação) antes de rodar o script/regra de negócio vinculada ao botão.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Filtro de relatório:&amp;#039;&amp;#039;&amp;#039; Um formato de relatório pode ter um Formulário vinculado; os valores preenchidos viram parâmetros disponíveis pra a consulta do relatório.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Filtro de dashboard:&amp;#039;&amp;#039;&amp;#039; Um dashboard pode ter um Formulário vinculado; cada campo do Formulário pode ser ligado a uma coluna catalogada de um widget do dashboard (cadastro &amp;#039;&amp;#039;&amp;#039;Filtro do Widget do Dashboard&amp;#039;&amp;#039;&amp;#039;), o que monta automaticamente a condição de filtro sem precisar mexer na consulta (EXPRESSAOSQL) do widget.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;(Em breve) Filtro de Kanban e de Agenda:&amp;#039;&amp;#039;&amp;#039; Mesmo mecanismo de filtro do dashboard, aplicado às próximas telas que vão passar a aceitar filtro por Formulário.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Quais os benefícios e/ou ganhos de uso&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* Um único motor atende as quatro frentes, quem aprende a montar um Formulário sabe montar pra qualquer um dos usos acima, sem curva de aprendizado nova a cada contexto.&lt;br /&gt;
* Campo, tipo, obrigatoriedade e valor padrão são &amp;#039;&amp;#039;&amp;#039;configuração&amp;#039;&amp;#039;&amp;#039;, não programação, reduz a dependência de desenvolvimento pra ajustes pontuais.&lt;br /&gt;
* O preenchimento automático de data (Valor Padrão dinâmico, ver Exemplos) evita que o usuário esqueça de ajustar o filtro e acabe analisando um período desatualizado sem perceber, o campo já abre certo, todo dia. Recurso valioso para os dashboards, na qual podemos definir comportamentos de filtro, se a necessidade de informar manualmente um período.&lt;br /&gt;
* Um Formulário marcado para &amp;quot;Salvar&amp;quot; o preenchimento evita que o usuário tenha que redigitar o mesmo filtro toda vez que reabre a tela.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Cadastro&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Formulário&amp;#039;&amp;#039;&amp;#039; (cabeçalho)&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Identificador único do Formulário, usado internamente pra vincular a um botão de cadastro, formato de relatório ou dashboard.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Título exibido no cabeçalho da tela/modal do Formulário.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Largura&amp;#039;&amp;#039;&amp;#039; / &amp;#039;&amp;#039;&amp;#039;Altura:&amp;#039;&amp;#039;&amp;#039; Tamanho da tela do Formulário no desktop.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Salvar:&amp;#039;&amp;#039;&amp;#039; Quando marcado, o sistema lembra o último valor preenchido por cada usuário em cada campo, e já abre o Formulário preenchido da próxima vez (útil pra filtros repetitivos, como os de relatório/dashboard).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ajuda:&amp;#039;&amp;#039;&amp;#039; Link relacionado à página de ajuda correspondente. Quando informado, é criado um botão de ajuda que serve de atalho para a respectiva página de ajuda.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Campo do Formulário&amp;#039;&amp;#039;&amp;#039; (um registro por campo)&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Nome:&amp;#039;&amp;#039;&amp;#039; Identificador do Formulário; é esse nome que aparece como parâmetro disponível pra quem consome o Formulário (relatório, dashboard, botões).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Legenda:&amp;#039;&amp;#039;&amp;#039; Rótulo exibido acima do campo pro usuário.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tipo de Campo:&amp;#039;&amp;#039;&amp;#039; Define o tipo de dado e o controle exibido. Principais tipos disponíveis: String, Inteiro, Valor (numérico com casas decimais), Data, Data/Hora, Hora, Lógico (sim/não), Lista de Opções, Radio, Tabela (busca/vínculo a um cadastro), Filtro, Diretório, Imagem.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sequência:&amp;#039;&amp;#039;&amp;#039; Ordem de exibição do campo na tela.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Nova Linha:&amp;#039;&amp;#039;&amp;#039; Força o campo a começar sozinho numa linha nova, mesmo sobrando espaço na linha anterior.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Opcional:&amp;#039;&amp;#039;&amp;#039; Quando marcado, o campo não é obrigatório pra confirmar o Formulário.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Leitura:&amp;#039;&amp;#039;&amp;#039; Torna o campo somente-leitura (exibe o valor mas não permite edição).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;É Senha:&amp;#039;&amp;#039;&amp;#039; Mascara o valor digitado (usado em campos de texto sensíveis).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Valor Padrão:&amp;#039;&amp;#039;&amp;#039; Valor com que o campo já abre preenchido. Além de um valor literal fixo, campos de Data/Data e Hora aceitam uma &amp;#039;&amp;#039;&amp;#039;expressão dinâmica&amp;#039;&amp;#039;&amp;#039; que é recalculada toda vez que o Formulário é aberto (ver Exemplos abaixo) — é a forma recomendada de propor um período relativo (últimos 30 dias, mês atual, ano atual, etc.) sem deixar uma data fixa &amp;quot;esquecida&amp;quot; na configuração.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Agora:&amp;#039;&amp;#039;&amp;#039; Quando marcado (só se aplica a campos de Data/Data e Hora), o campo sempre abre com a data do dia. Tem prioridade sobre o Valor Padrão.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Condição SQL:&amp;#039;&amp;#039;&amp;#039; Filtro adicional aplicado à busca de um campo do tipo Tabela/Lista de Opções (ex: restringir a busca a registros ativos, ou de uma filial específica).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tabela de Pesquisa&amp;#039;&amp;#039;&amp;#039; / &amp;#039;&amp;#039;&amp;#039;Campo Exibição&amp;#039;&amp;#039;&amp;#039; / &amp;#039;&amp;#039;&amp;#039;Campo Pai:&amp;#039;&amp;#039;&amp;#039; Usados no campo tipo Tabela, definem em qual cadastro buscar, qual coluna mostrar como resultado, e (se aplicável) qual campo pai relaciona a busca a um valor já preenchido em outro campo do mesmo Formulário.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Lista de Opções:&amp;#039;&amp;#039;&amp;#039; Grupo de opções (DB_LISTASOPCOES) usado nos tipos Lista de Opções e Radio.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Casas Decimais:&amp;#039;&amp;#039;&amp;#039; Quantidade de casas decimais exibidas no tipo Valor.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Mínimo:&amp;#039;&amp;#039;&amp;#039; Tamanho mínimo de caracteres aceito (tipo Texto) ou valor mínimo (conforme o tipo).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Vários Registros:&amp;#039;&amp;#039;&amp;#039; Permite selecionar mais de um valor no mesmo campo (tipos Tabela/Lista de Opções), tratados como uma lista na hora de aplicar o filtro.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Colunas:&amp;#039;&amp;#039;&amp;#039; Colunas exibidas na grade de busca do campo tipo Tabela.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Por padrão, não adicionamos imagens/figuras ao processo de documentação.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Exemplos&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Sintaxe dinâmica de data no Valor Padrão&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Um campo de Data ou Data/Hora aceita, no Valor Padrão, a expressão &amp;lt;code&amp;gt;[DATA;TIPO;VARIAÇÃO]&amp;lt;/code&amp;gt;, resolvida pra uma data real toda vez que o Formulário é aberto — o campo nunca fica &amp;quot;parado&amp;quot; numa data antiga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Tipo !! Significado !! Variação&lt;br /&gt;
|-&lt;br /&gt;
| D || Variação em dias || quantidade de dias a somar/subtrair de hoje&lt;br /&gt;
|-&lt;br /&gt;
| MP || Primeiro dia do mês, variando mês a mês || quantidade de meses a deslocar antes de tomar o 1º dia&lt;br /&gt;
|-&lt;br /&gt;
| MU || Último dia do mês, variando mês a mês || quantidade de meses a deslocar antes de tomar o último dia&lt;br /&gt;
|-&lt;br /&gt;
| AP || Primeiro dia do ano, variando ano a ano || quantidade de anos a deslocar antes de tomar o 1º dia&lt;br /&gt;
|-&lt;br /&gt;
| AU || Último dia do ano, variando ano a ano || quantidade de anos a deslocar antes de tomar o último dia&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exemplos de resultado (tomando &amp;quot;hoje&amp;quot; como uma data qualquer de referência):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[DATA;D;0]&amp;lt;/code&amp;gt; → hoje&lt;br /&gt;
* &amp;lt;code&amp;gt;[DATA;D;-30]&amp;lt;/code&amp;gt; → hoje menos 30 dias&lt;br /&gt;
* &amp;lt;code&amp;gt;[DATA;MP;0]&amp;lt;/code&amp;gt; → primeiro dia do mês atual&lt;br /&gt;
* &amp;lt;code&amp;gt;[DATA;MU;0]&amp;lt;/code&amp;gt; → último dia do mês atual&lt;br /&gt;
* &amp;lt;code&amp;gt;[DATA;MP;-1]&amp;lt;/code&amp;gt; → primeiro dia do mês passado&lt;br /&gt;
* &amp;lt;code&amp;gt;[DATA;AP;0]&amp;lt;/code&amp;gt; → primeiro dia do ano atual&lt;br /&gt;
* &amp;lt;code&amp;gt;[DATA;AU;0]&amp;lt;/code&amp;gt; → último dia do ano atual&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Formulário como filtro de período de um dashboard&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Um Formulário com dois campos de Data — &amp;quot;Data Inicial&amp;quot; (Valor Padrão &amp;lt;code&amp;gt;[DATA;D;-30]&amp;lt;/code&amp;gt;) e &amp;quot;Data Final&amp;quot; (Valor Padrão &amp;lt;code&amp;gt;[DATA;D;0]&amp;lt;/code&amp;gt;) — vinculado a um dashboard, sempre abre propondo &amp;quot;os últimos 30 dias até hoje&amp;quot;, sem que ninguém precise lembrar de ajustar manualmente. Cada um desses dois campos é então ligado, no cadastro de Filtro do Widget do Dashboard, à coluna do widget que representa a data (uma condição &amp;quot;maior ou igual&amp;quot; pra Data Inicial, &amp;quot;menor ou igual&amp;quot; pra Data Final) — um período é sempre modelado como duas condições simples, não como um único campo de intervalo.&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;Conclusão&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
O Formulário é a peça que conecta processos, relatórios e dashboards a uma tela de coleta configurável — sem depender de programação pra cada tela nova. Dominar a criação de um Formulário (tipos de campo, valor padrão, condição SQL) aproveita pras quatro frentes de uso atuais e futuras (processo, relatório, dashboard, e em breve Kanban/Agenda).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assuntos Relacionados&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Dashboards|Dashboards]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
</feed>