Primeiros passos após Instalação do Grafana (Configurações iniciais)

Após a instalação do Grafana, quando logamos é apresentado a seguinte tela, que mostra que ainda não foi configurado nenhum datasource, instalação de plugin, definido equipe ou criado algum dashboard.

Antes de prosseguir baixe os programas abaixo para auxiliar nas configurações.

Aplicativos úteis para manutenção do servidor Grafana em ambiente Linux

Putty.exe
WinSCP (aplicativo para transferência de arquivos entre Windows e Linux, além da possibilidade de editar arquivos do Linux a partir do Windows (caso não queira usar o editor *vi)

Comandos úteis:

sudo service grafana-server start
sudo service grafana-server stop

Porta de Acesso / Alterar Porta

A porta padrão de acesso ao Grafana é 3000 (http://localhost:3000), caso queira redirecionar a porta padrão no Linux execute o comando abaixo(permissão e redirecionamento),  para a porta 80.

1
2
sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/grafana-server
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000

 

Plugins

Alguns plugins são nativos do Grafana, ou seja, por padrão já é instalado.

Caso queira instalar novos Plugins, você pode feito de duas formas, o download do plugin no site oficial (https://grafana.com/plugins) e copiar para o diretório  /var/lib/grafana/plugins ou via linha de comando (imagem abaixo)


Lembre que após a instalação do Plugin será necessário reiniciar o Grafana Server

1
sudo service grafana-server stop
1
sudo service grafana-server start

Ou

1
sudo service grafana-server restart

Alguns Plugins são instalados via Git, para instalar o git execute o comando no CentOS

1
yum install -y git npm

Lista de Alguns Plugins
– WorldPing
O worldPing é um plug-in para o Grafana que testa, armazena e alerta continuamente o desempenho global e a disponibilidade de seus aplicativos da Internet, para que você possa identificar problemas.

Comando para instalar: grafana-cli plugins install raintank-worldping-app

– Zabbix
Visualize suas métricas do Zabbix com o software de código aberto líder para análise de séries temporais.

Comando para instalar: grafana-cli plugins install alexanderzobnin-zabbix-app

– Clock
O painel de relógio pode mostrar a hora atual ou uma contagem regressiva e atualiza a cada segundo.

Comando para instalar: grafana-cli plugins install grafana-clock-panel

– ntopng
O plug-in de fonte de dados oficial do Grafana permite que você navegue rapidamente por dados dentro dos belos painéis do Grafana.

Comando para instalar:  grafana-cli plugins install ntop-ntopng-datasource

 

Arquivo de Configuração:

No Linux Centos 7 o arquivo de configuração do Grafana fica localizado em: /etc/grafana/grafana.ini, mas atenção, este arquivo não deve ser editado.

Para incluir suas configurações, você deve criar um arquivo com o nome custom.ini no diretório /etc/grafana (conforme imagem abaixo), incluindo suas configurações personalizadas.

Todas as opções de configuração podem ser lidas no site oficial (http://docs.grafana.org/installation/configuration/)

Alterar a senha admin

Acesse no menu lateral as referencias do usuário, informe o nome, email e altera a senha de Admin.

Configurar data Source

Para incluir um novo datasource, selecione no menu lateral a opção e clique em Add Data Source

Como Exemplo incluindo um DataSource MySQL, observe que ao salvar será apresentado uma mensagem indicado que foi conectado com sucesso.

Configurar Plugin Zabbix

Post 1

http://blog.fabianobento.com.br/2018/05/preparacao-configuracao-ambiente-para-instalacao-grafana-linux-centos-7-redhat-fedora-opensuse/

Post 2

http://blog.fabianobento.com.br/2018/05/instalando-grafana-linux-centos-redhat-linux-fedora-opensuse/

Post 3

http://blog.fabianobento.com.br/2018/05/primeiros-passos-apos-instalacao-grafana/

 

 

Instalando Grafana no Linux CentOS/RedHat/Fedora/OpenSuse em 10 minutos

O Grafana é uma ferramenta que permite a criação de dashboards incríveis e permite a integração com outras ferramentas (Zabbix, MySQL, PostGree, entre outras)

Vou demonstrar como instalar o Grafana no Linux CentOS, e você pode aplicar os mesmos passos no RedHat ou Fedora.

É necessário ter conhecimentos básicos de rede e linux.

Estou usando uma máquina virtual com a seguinte configuração: 2 GB Ram, HD 50SSD, CentOS 7.4 x64
(Softwares para máquina virtual: Vmware, VirtualBox), ou contrate uma máquina nos sites; Linode.com, DigitalOcean, Atlantic.net)

 

Para preparar o ambiente e instalar o CentOS leia o post: http://blog.fabianobento.com.br/2018/05/preparacao-configuracao-ambiente-para-instalacao-grafana-linux-centos-7-redhat-fedora-opensuse/

http://blog.fabianobento.com.br/2018/05/preparacao-configuracao-ambiente-para-instalacao-grafana-linux-centos-7-redhat-fedora-opensuse/

Após a instalação do sistema operacional, execute o comando abaixo para atualizar (caso ainda não tenha feito)

1
# yum update -y

 

Instalando com base no RPM

A partir do arquivo diretamente no site

1
sudo yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.0-1.x86_64.rpm

Ou baixe e instale manualmente

Instale o pacote wget para conseguir baixar via linha de comando

1
yum install wget -y

Acesse o diretório tmp para fazer download

1
cd /tmp

Comando para baixar o arquivo RPM

1
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.0-1.x86_64.rpm

Aguarde o término do download

Execute o comando abaixo para instalar via RPM

1
2
sudo yum install initscripts fontconfig
sudo rpm -Uvh grafana-5.1.0-1.x86_64.rpm

Resumo dos comandos acima:

1
2
3
4
cd /tmp
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.0-1.x86_64.rpm
sudo yum install initscripts fontconfig
sudo rpm -Uvh grafana-5.1.0-1.x86_64.rpm

Pronto o Grafana foi instalado!

Execute os comandos abaixo para instalar bibliotecas de renderização para textos em imagens PNG

1
2
3
yum install -y fontconfig
yum install -y freetype*
yum install -y urw-fonts

Configure o Grafana para iniciar no boot

1
sudo /sbin/chkconfig --add grafana-server

Os logs gerados pelo Grafana ficam no diretório:

1
/var/log/grafana

Para iniciar o Grafana execute o comando:

1
sudo service grafana-server start

Agora você pode acessar pelo navegador usando o IP e a porta padrão 3000;

http://ip-computador:3000

Login: admin/admin

Caso não consiga acessar o Grafana pelo IP e porta libere no firewall usando o comando;

1
2
firewall-cmd --permanent --add-port=3000/tcp
firewall-cmd --reload

 

Tela inicial após efetuar Login

Leia o próximo post dos primeiros passos após a Instalação do Grafana

http://blog.fabianobento.com.br/2018/05/primeiros-passos-apos-instalacao-grafana/

Parte do material foi retirado do site oficial: Grafana.com

Preparação e Configuração do Ambiente para Instalação do Grafana no Linux CentOS 7/RedHat/Fedora/OpenSuse

É necessário ter conhecimentos básicos de rede e Linux.

Vamos criar uma máquina virtual com a seguinte configuração: 2 Processadores, 2 cores, 2 GB Ram, HD 50SSD com uma área (3 GB Swap)

Programas necessários:
VirtualBox – https://www.virtualbox.org/wiki/Downloads (Para criar máquina virtual)
Putty – https://www.putty.org/
WinSCP – https://winscp.net/eng/download.php
Sistema Operacional: CentOS 7.4 x64 – https://www.centos.org/download/

Após fazer o download e instalação do Virtual Box vamos criar a VM.

Para usar versão 64 bits no Oracle Virtual Box, é necessário habilitar na Bios do computador a opção da arquitetura (Intel Virtual = Enable), ou ative via prompt de comando (bcdedit /set hypervisorlauchetype off)

Na opção do armazenamento você pode usar a opção Dinamicamente alocado para que seja dimensionado conforme o uso, eu prefiro alocar o Tamanho Fixo do disco.

Para o tamanho do disco você pode dimensionar apenas 20GB  para a instalação do Grafana (comporta perfeitamente), como pretendo instalar outros serviços na mesma VM (Zabbix, banco PostGree, Oracle Express, irei dimensionar com 40GB/50GB)Como estou usando a opção para alocar tamanho fixo, leva alguns minutos.

Localize a ISO do CentOS 7 e inicie a VM

Idioma

Informe o disco de instalação

Configure o nome do host e ative a interface de rede (Defina um IP Fixo), clique em configurar.

-Lembrando que o IP deverá estar na mesma faixa/sub rede do seu computador/ambiente, desta forma será possível acessar na rede através de outros computadores.

Nesta etapa você pode habilita a instalação do ambiente gráfico no Linux, clicando em seleção de software e ativando a opção GNOME.

Clique em Iniciar Instalação

Defina a senha para o usuário ROOT e crie um usuário, como Exemplo (admin)

Aguarde o término da instalação e reinicie o host.

Aceite os termos de uso. (modo Gráfico)

Após aceitar e reiniciar o host está pronto para o uso.

Caso não tenha muita experiência com Linux, e não tenha instalado a ambiente gráfico(GNOME),  recomendo que instale, é bem simples.

Logue no host com o usuário: root e a senha que você definiu e digite os comandos abaixo:

1
yum grouplist


1
sudo yum groups install "GNOME Desktop"


1
systemctl set-default graphical.target


1
systemctl start graphical.target

Agora vamos atualizar o sistema. Abra o terminal ou logue com aplicativo Putty e digite:

1
yum update -y

Aqui termina os passos necessários para a configuração do ambiente. Abaixo são itens opcionais.

Instalação de recursos opcionais:

yum install -y net-tools
yum install -y httpd
yum install -y perl perl5
yum install -y zip unzip
yum install -y sshd
yum install -y wget

Leia o próximo post para fazer a instalação do Grafana:  http://blog.fabianobento.com.br/2018/05/instalando-grafana-linux-centos-redhat-linux-fedora-opensuse/

http://blog.fabianobento.com.br/2018/05/instalando-grafana-linux-centos-redhat-linux-fedora-opensuse/

Parte 3 – Primeiros passos após a instalação

http://blog.fabianobento.com.br/2018/05/primeiros-passos-apos-instalacao-grafana/

Instalação do Banco de Dados MySQL

yum install -y wget

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

yum -y update

sudo yum install mysql-server

A senha temporária fica no arquivo mysqld.log para obter execute o comando:

grep “temporary password” /var/log/mysqld.log

Caso retorne que não exista, execute o comando abaixo e quando pedir a senha deixe em branco e pressione a tecla ENTER.

sudo mysql_secure_installation

sudo systemctl start mysqld

sudo systemctl status mysqld

Para resetar a senta root

systemctl stop mysqld

killall mysqld

mysqld_safe –skip-grant-tables –skip-networking &

mysql -u root

update mysql.user set password=PASSWORD(‘fabianobento’) where user=’root’;

exit

systemctl stop mysqld

systemctl start mysqld

mysql -u root -p

Comando para liberar o acesso remoto/externo ao banco MySQL(fora do host 127.0.0.1)

mysql -uroot -p[senha]

GRANT ALL ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘senha’ WITH GRANT OPTION;

FLUSH PRIVILEGES;

Comando Parar liberar a porta para acesso ao banco MySQL

firewall-cmd –permanent –add-port=3106/tcp

firewall-cmd –reload

Para Instalar o phpMyAdmin no CentOS 7

yum -y install epel-release

yum -y update

yum -y install phpMyAdmin.noarch

Edite o arquivo /etc/httpd/conf.d/phpMyAdmin.conf

Require ip
Allow from

Require ip 127.0.0.1 192.168.0.0/24

Reinicie o Apache
systemctl restart httpd

http://ip-host/phpMyAdmin

Para instalar o Zabbix leia as instruções no site oficial:
https://www.zabbix.com/download?zabbix=3.4&os_distribution=centos&os_version=7&db=MySQL

Desativo o selinux: /etc/sysconfig/selinux

SELINUX=disable

PHP – Edite o arquivo /etc/php.ini

date.timezone = America/Sao_Paulo

1
2
3
rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
 
yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent

mysql -uroot -p
password
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@% identified by ‘fabianobento’;
mysql> quit;

1
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
1
2
systemctl restart zabbix-server zabbix-agent httpd
systemctl enable zabbix-server zabbix-agent httpd

http://server_ip_or_name/zabbix

Login e Senha: Admin / zabbix

OBS: Caso tenha problemas para iniciar o serviço do zabbiz verifique o arquivo de LOG /var/log/zabbix

Se for algum erro de conexão com o banco edite o arquivo /etc/zabbix/zabbix_server.conf, e acrescente as linhas abaixo

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=senha-banco

Para liberar a porta para acesso

firewall-cmd –permanent –add-port=80/tcp

firewall-cmd –reload

Para desativar o firewall

systemctl stop firewalld
systemctl disable firewalld

Instalando Grafana no Windows

Baixe o Grafana no link https://grafana.com/grafana/download?platform=windows

Crie a pasta (Grafana) na Raiz no disco, como exemplo: (C:), descompacte e copie os arquivos para a pasta.

O arquivo de configuração padrão do Grafana é o (defaults.ini), mas não altere este arquivo, para customizar as configurações do Grafana você deve editar o arquivo (custom.ini).

C:\Grafana\conf\custom.ini

Após copiar para a pasta já é possível rodar o Grafana com as configurações padrões.

Localize o arquivo grafana-server.exe que fica dentro do diretório BIN (bin\grafana-server.exe), e execute.

Abra o navegador e digite http://localhost:3000/login

Usuário e Senha: admin / admin

Para intalar novos Plugins baixe no site do Grafana copie para o diretório (data\plugins), será necessário reiniciar o Grafana (fechar e abrir novamente o grafana-server.exe)

 

POST Atualizado 09/2020


Vou fazer um artigo no qual recebo várias perguntas: Como gerar arquivos XML no padrão TISS da ANS.  Vou demonstrar usando PHP e API DOM nesta primeira parte e futuramente complementarei com dados a partir de banco de dados MySQL.

O padrão TISS é determinado pela ANS, você poderá consultar outras informações do padrão TISS no site da Agência Nacional de Saúde.

Para seguir, é necessário ter noções básicas da linguagem PHP.

Obs.: Não vou ensinar como desenvolver um sistema com a finalidade de faturamento, apenas o passo a passo da geração do XML no padrão TISS usando o PHP e a biblioteca DOM.

Basicamente o faturamento dos atendimentos/contas, consiste no atendimento do beneficiário pelo prestador(clínica, hospital, laboratório, banco de sangue, clínicas de imagem, entre outros), que é credenciado as operadoras de saúde (Bradesco Saúde, Unimed, Postal Saúde, Geap, Cassi, Capesp, Saúde Itaú, Sul América,…).

O envio do faturamento é feito por lotes(vários atendimentos no mesmo lote, geralmente até 100 atendimentos no mesmo lote) e pode ser via portal da Operadora por digitação das contas (quando a mesma oferece o recurso) ou a partir do envio de arquivos XML. E cada operadora permite e aceita o envio até uma data limite de cada mês(competência), por exemplo; a operadora XYZ aceita que o envio seja feito até o dia 20, e fará o pagamento até o dia 19 do mês subsequente(30 dias após o envio). Desta forma os prestadores precisam ficar atentos ao cumprimento de envio nas datas certas para receber no prazo, caso contrário o pagamento pela operadora é feito na próxima competência.

A geração do XML consiste em dados dos pilares: Operadora de Saúde <-> Prestador de Serviços <-> Beneficiários/Segurados,  ou seja, precisamos das informações de credenciamento do prestador de saúde,  dados do prestador e do segurado. Abaixo uma exemplificação dos dados;

Dados da operadora:
Registro ANS: 1111
Versão TISS: 03.03.03

Dados do Prestador:
Código de Credenciamento: 12345
CNPJ: 00.000.000/0000-0 (Fictício)

Dados de faturamento:
Número da remessa/fatura/Lote: 123

Dados do atendimento:
Data e Hora: 03/04/2018 22:15:00
Nome: Fulano de Tal
Carteira: 4444444444444444
Validade da carteira: 31/12/2030
Recém nascido: Não
Tipo de Atendimento: Ambulatorial
Caráter do atendimento: Eletivo
Guia/Senha: 1111/2222

Médico: Dr. Fabiano
CRM: 0000
CBOS:

Código da tabela: 22
Procedimento TUSS: 10101012
Descrição do Procedimento: Consulta em consultório
Valor unitário: 500,00
Valor Total:  500,00

<?php
#Definindo as variáveis

#Dados Operadora:
$_XML['versao_tiss']='030303';
$_XML['registro_ans'] = '1111';

#Dados Prestador:
$_XML['codigo_credenciamento'] = '12345';
$_XML['cnpj'] = '0000000000000';
$_XML['prestador'] = 'Hospital ABCD';

#Dados do atendimento e beneficiário
$_XML['data_hora'] = '03/04/2018 22:15:00';
$_XML['rn'] = 'N'; #Não
$_XML['tipo_atd'] = 'Ambulatorial';
$_XML['carater'] = 'E'; #Eletivo
$_XML['guia'] = '1111';
$_XML['senha'] = '2222';
$_XML['medico'] = 'Dr. Fabiano';
$_XML['crm'] = '0000';
$_XML['cbos'] = '';
#Dados do beneficiário
$_XML['nome'] = 'Fulano de Tal';
$_XML['dt_nascimento'] = '01/01/1980';
$_XML['carteira']  = '4444444444444444';
$_XML['validade'] = '31/12/2030';

#Dados da Fatura / Lote
$_XML['fatura_remessa'] = '123';

#Dados do procedimento realizado
$_XML['tabela'] = '22';
$_XML['procedimento_tuss'] = '10101012';
$_XML['descricao_proced'] = 'Consulta em consultório';
$_XML['valor_unitario'] = '500,00';
$_XML['qtde'] = '1';
$_XML['valor_total'] = '500,00';

$_XML['tipoTransacao'] = 'ENVIO_LOTE_GUIAS';
$_XML['sequencialTransacao'] = '6658';
$_XML['dataRegistroTransacao'] = '2018-01-18';
$_XML['horaRegistroTransacao'] = '10:00:00';

 # Utilize a variável $_XML['hash_dados'] para concatenar os dados e calcular o HASH antes do terceiro bloco
$_XML['hash_dados'] = '';

#A variável $_XML['hash'] está nula pois deve ser calculada com os dados dos elementos(tags) do XML
$_XML['hash'] = 'calculo do HASH';

//$_XML[''] = ''; // para criar novas variáveis apenas siga o padrão

Após a declaração das variáveis, vamos iniciar a geração da estrutura no nosso arquivo.

#versao XML e codificação
$xml = new DOMDocument("1.0", "ISO-8859-1");
//também poderia ser UTF-8
 
#remove os espacos em branco
$xml->preserveWhiteSpace = false;

#Realizar a quebra dos blocos do XML por linha
$xml->formatOutput = true;

		//Criação dos elementos do Namespace ans:mensagemTISS
		$xml->createAttributeNS( 'http://www.w3.org/2000/09/xmldsig#', 'ds:attr' );
		$xml->createAttributeNS( 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:attr' );
		$xml->createAttributeNS( 'http://www.ans.gov.br/padroes/tiss/schemas http://www.ans.gov.br/padroes/tiss/schemas/tissV3_03_01.xsd', 'schemaLocation:attr' );
		$xml->createAttributeNS( 'http://www.ans.gov.br/padroes/tiss/schemas', 'ans:attr' );


// Nó / Bloco Principal
// ans:mensagemTISS
$mensagemTISS = $xml->createElement("ans:mensagemTISS");
$xml->appendChild($mensagemTISS);

	/* primeiro bloco */
	// ans:mensagemTISS / ans:cabecalho
	$cabecalho = $xml->createElement("ans:cabecalho");
	$mensagemTISS->appendChild($cabecalho);


		// ans:mensagemTISS / ans:cabecalho / ans:identificacaoTransacao
		$identificacaoTransacao = $xml->createElement("ans:identificacaoTransacao");
		$cabecalho->appendChild($identificacaoTransacao);

				# ans:tipoTransacao
				$tipoTransacao = $xml->createElement("ans:tipoTransacao", $_XML['tipoTransacao']);
				$identificacaoTransacao->appendChild($tipoTransacao);

				#sequencialTransacao
				$sequencialTransacao = $xml->createElement("ans:sequencialTransacao", $_XML['sequencialTransacao']);
				$identificacaoTransacao->appendChild($sequencialTransacao);

				#dataRegistroTransacao
				$dataRegistroTransacao = $xml->createElement("ans:dataRegistroTransacao", $_XML['dataRegistroTransacao']);
				$identificacaoTransacao->appendChild($dataRegistroTransacao);

				#horaRegistroTransacao
				$horaRegistroTransacao = $xml->createElement("ans:horaRegistroTransacao", $_XML['horaRegistroTransacao']);
				$identificacaoTransacao->appendChild($horaRegistroTransacao);


		// ans:mensagemTISS / ans:cabecalho / ans:origem
		$origem = $xml->createElement("ans:origem");
		$cabecalho->appendChild($origem);

				// ans:mensagemTISS / ans:cabecalho / ans:origem / identificacaoPrestador
				$identificacaoPrestador = $xml->createElement("ans:identificacaoPrestador", $_XML['cnpj']);
				$origem->appendChild($identificacaoPrestador);


		// ans:mensagemTISS / ans:cabecalho / ans:destino
		$destino = $xml->createElement("ans:destino");
		$cabecalho->appendChild($destino);

				// ans:mensagemTISS / ans:cabecalho / ans:registroANS
				$registroANS = $xml->createElement("ans:registroANS", $_XML['registro_ans']);
				$destino->appendChild($registroANS);

		// ans:mensagemTISS / ans:cabecalho / ans:Padrao
		$Padrao = $xml->createElement("ans:Padrao", $_XML['padrao_tiss']);
		$cabecalho->appendChild($Padrao);


	/* segundo bloco */
	// ans:mensagemTISS / ans:prestadorParaOperadora
	$prestadorParaOperadora = $xml->createElement("ans:prestadorParaOperadora");
	$mensagemTISS->appendChild($prestadorParaOperadora);

		// ans:mensagemTISS / ans:prestadorParaOperadora / loteGuias
		$loteGuias = $xml->createElement("ans:loteGuias");
		$prestadorParaOperadora->appendChild($loteGuias);

			// ans:mensagemTISS / ans:prestadorParaOperadora / loteGuias / numeroLote
			$numeroLote = $xml->createElement("ans:numeroLote", $_XML['lote_remessa']);
			$loteGuias->appendChild($numeroLote);

 			// ans:mensagemTISS / ans:prestadorParaOperadora / loteGuias / guiasTISS
			$guiasTISS = $xml->createElement("ans:guiasTISS");
			$loteGuias->appendChild($guiasTISS);

// ans:mensagemTISS / ans:prestadorParaOperadora / loteGuias / guiaConsulta
$guiaConsulta = $xml->createElement("ans:guiaConsulta");
$loteGuias->appendChild($guiaConsulta);

// ans:mensagemTISS / ans:prestadorParaOperadora / loteGuias / cabecalhoConsulta
$cabecalhoConsulta = $xml->createElement("ans:cabecalhoConsulta");
$guiaConsulta->appendChild($cabecalhoConsulta);

$registroANS = $xml->createElement("ans:registroANS", '132'); //registroANS
$cabecalhoConsulta->appendChild($registroANS);

$registroANS = $xml->createElement("ans:numeroGuiaPrestador", '1111'); //numeroGuiaPrestador
$cabecalhoConsulta->appendChild($registroANS);

$numeroGuiaOperadora = $xml->createElement("ans:numeroGuiaOperadora", '2222'); //numeroGuiaOperadora
$guiaConsulta->appendChild($numeroGuiaOperadora);

$dadosBeneficiario = $xml->createElement("ans:dadosBeneficiario"); //dadosBeneficiario
$guiaConsulta->appendChild($dadosBeneficiario);

$numeroCarteira = $xml->createElement("ans:numeroCarteira", '1122334455'); //numeroCarteira
$dadosBeneficiario->appendChild($numeroCarteira);

$atendimentoRN = $xml->createElement("ans:atendimentoRN", 'N'); //atendimentoRN
$dadosBeneficiario->appendChild($atendimentoRN);

$nomeBeneficiario = $xml->createElement("ans:nomeBeneficiario", 'Fulano de Tal'); //nomeBeneficiario
$dadosBeneficiario->appendChild($nomeBeneficiario);

//contratadoExecutante
$contratadoExecutante = $xml->createElement("ans:contratadoExecutante");
$guiaConsulta->appendChild($contratadoExecutante);


$codigoPrestadorNaOperadora = $xml->createElement("ans:codigoPrestadorNaOperadora", '001'); //codigoPrestadorNaOperadora
$contratadoExecutante->appendChild($codigoPrestadorNaOperadora);

$nomeContratado = $xml->createElement("ans:nomeContratado", 'Hospital Teste'); //nomeContratado
$contratadoExecutante->appendChild($nomeContratado);

$CNES = $xml->createElement("ans:CNES", '9999'); //CNES
$contratadoExecutante->appendChild($CNES);

//profissionalExecutante
$profissionalExecutante = $xml->createElement("ans:profissionalExecutante"); //profissionalExecutante
$guiaConsulta->appendChild($profissionalExecutante);

$nomeProfissional = $xml->createElement("ans:nomeProfissional", 'Médico Teste'); //nomeProfissional
$profissionalExecutante->appendChild($nomeProfissional);

$conselhoProfissional = $xml->createElement("ans:conselhoProfissional", '02'); //conselhoProfissional
$profissionalExecutante->appendChild($conselhoProfissional);

$numeroConselhoProfissional = $xml->createElement("ans:numeroConselhoProfissional", '1234'); //numeroConselhoProfissional
$profissionalExecutante->appendChild($numeroConselhoProfissional);

$UF = $xml->createElement("ans:UF", 'SP'); //UF
$profissionalExecutante->appendChild($UF);

$CBOS = $xml->createElement("ans:CBOS", '201115'); //CBOS
$profissionalExecutante->appendChild($CBOS);

//dadosAtendimento
$dadosAtendimento = $xml->createElement("ans:dadosAtendimento"); //dadosAtendimento
$guiaConsulta->appendChild($dadosAtendimento);

$tipoAtendimento = $xml->createElement("ans:tipoAtendimento", '05'); //tipoAtendimento
$dadosAtendimento->appendChild($tipoAtendimento);

$indicacaoAcidente = $xml->createElement("ans:indicacaoAcidente", '9'); //indicacaoAcidente
$dadosAtendimento->appendChild($indicacaoAcidente);


// Calculo o Hash - Você poderia gerar os dados, usar um (replace do PHP) para substituir as tags, e pegar apenas os dados
$_XML['hash_dados'] = ''
$_XML['hash'] = md5($_XML['hash_dados']);

	/* terceiro bloco */
	// ans:mensagemTISS / ans:epilogo
	$epilogo = $xml->createElement("ans:epilogo");
	$mensagemTISS->appendChild($epilogo);

		// ans:mensagemTISS / ans:epilogo / ans:hash
		$hash = $xml->createElement("ans:hash", $_XML['hash']);
		$epilogo->appendChild($hash);

# Comando para salvar/gerar o arquivo XML TISS
# Geralmente o nome do arquivo é o HASH que foi calculado ou número do lote, pois são informações únicas.
# você pode usar as variáveis: $_XML['fatura_remessa'] . $_XML['hash']

$xml->save("xml_tiss.xml");


# Imprime / Gera o xml em tela
echo $xml->saveXML();
?>

Com o comando acima você terá o seguinte retorno: xml_tiss.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<ans:mensagemTISS xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:schemaLocation="http://www.ans.gov.br/padroes/tiss/schemas http://www.ans.gov.br/padroes/tiss/schemas/tissV3_03_01.xsd"
xmlns:ans="http://www.ans.gov.br/padroes/tiss/schemas">
 <ans:cabecalho>
 <ans:identificacaoTransacao>
 <ans:tipoTransacao>ENVIO_LOTE_GUIAS</ans:tipoTransacao>
 <ans:sequencialTransacao>6658</ans:sequencialTransacao>
 <ans:dataRegistroTransacao>2018-01-18</ans:dataRegistroTransacao>
 <ans:horaRegistroTransacao>10:00:00</ans:horaRegistroTransacao>
 </ans:identificacaoTransacao>
 <ans:origem>
 <ans:identificacaoPrestador>0000000000000</ans:identificacaoPrestador>
 </ans:origem>
 <ans:destino>
 <ans:registroANS>111111</ans:registroANS>
 </ans:destino>
 <ans:Padrao>03.03.03</ans:Padrao>
 </ans:cabecalho>
 <ans:prestadorParaOperadora>
 <ans:loteGuias>
 <ans:numeroLote>123</ans:numeroLote>
 <ans:guiasTISS/>
 </ans:loteGuias>
 </ans:prestadorParaOperadora>
 <ans:epilogo>
 <ans:hash>calculo do HASH</ans:hash>
 </ans:epilogo>
</ans:mensagemTISS>

Criando um Validador TISS usando PHP

Neste posto irei ensinar como criar um validador TISS de arquivos XML  no padrão TISS da ANS, usando o PHP e banco de dados MySQL. Com o validador será possível validar os arquivos TISS e arquivos do monitoramento TISS.

Obs.: Vou escrever um passo a passo, mas é necessário ter noções básicas da linguagem PHP e banco MySQL.

Vou dividir o post nas seguintes etapas;

1ª Etapa -Criar o formulário HTML para envio do arquivo e seleção da versão

2ª Etapa – Verificar a estrutura do arquivo (que é a comparação com o arquivo XSD da ANS)

3ª Etapa – Validação dos dados do arquivo conforme a codificação da TUSS (Apenas para arquivos TISS)

4ª Etapa – Disponibilização dos arquivos para download e dica de instalação

E é claro, você poderá personalizar conforme a sua necessidade.

Antes de começarmos baixe os arquivos do padrão TISS no site da ANS, usando o link http://www.ans.gov.br/prestadores/tiss-troca-de-informacao-de-saude-suplementar, conforme os prints abaixo, ou clique aqui para baixar o último arquivo disponível (Componente de Comunicação 03.03.03)

Obs.: baixe todas as versões que queira utilizar no seu validador.

Usaremos também o arquivo bootstrap.min.css do Bootstrap (framework web CSS/JavaScript), baixe também neste link (https://getbootstrap.com) (deixarei no final todos os arquivos para download)

Iniciando o projeto crie a estrutura de pastas abaixo.

As pastas devem ser criadas no seu servidor httpd(Apache/IIS), dentro do diretório (www).

-validador-tiss (pasta principal)
–css
–xml (diretório para upload dos arquivos xml enviados)
–tiss (diretório com os arquivos baixados no site da ANS para validação TISS)
–tiss/03_03_03
–tiss/03_03_01
–tiss/03_02_02
–tiss/03_02_01
–tiss/03_02_00

1ª Etapa

Agora vamos criar nosso formulário para envio do arquivo e salvar com o nome index.php

Arquivo index.php

Observe que action do formulário aponta para (validar_arquivo.php), e temos um select para as versões dos XML.

<head>
<meta charset=”UTF-8″>
<title>Validador TISS</title>
<link rel=”stylesheet” href=”css/bootstrap.min.css“>
</head>

<body>

<div class=”container”>

<h1 >Validador TISS</h1>
<a class=”btn btn-lg ” href=”#seu-site” role=”button”>Validador de arquivos XML no padrão TISS</a>
<br>
<form id=”upload” name=”upload” enctype=”multipart/form-data” method=”post” action=”validar_arquivo.php“>

<div class=”form-group”>
<label for=”versao” class=”control-label”>Selecione a versão:</label>

<select name=”versao” class=”form-control”>
<option value=”tissV3_03_03.xsd” selected>TISS – 03.03.03</option>
<option value=”tissV3_03_02.xsd” >TISS – 03.03.02</option>
<option value=”tissV3_03_01.xsd” >TISS – 03.03.01</option>
<option value=”tissV3_03_00.xsd” >TISS – 03.03.00</option>
<option value=”tissV3_02_02.xsd” >TISS – 03.02.02</option>
<option value=”tissV3_02_01.xsd” >TISS – 03.02.01</option>
<option value=”tissV3_02_00.xsd” >TISS – 03.02.00</option>
<option value=”tissMonitoramentoV3_03_03“>Monitoramento TISS – 03.03.03</option>
<option value=”tissMonitoramentoV3_03_02“>Monitoramento TISS – 03.03.02</option>
<option value=”tissMonitoramentoV3_03_01“>Monitoramento TISS – 03.03.01</option>
<option value=”tissMonitoramentoV3_03_00“>Monitoramento TISS – 03.03.00</option>
<option value=”tissMonitoramentoV3_02_02“>Monitoramento TISS – 03.02.02</option>
<option value=”tissMonitoramentoV3_02_01“>Monitoramento TISS – 03.02.01</option>
<option value=”tissMonitoramentoV3_02_00“>Monitoramento TISS – 03.02.00</option>

</select>
</label>
</div>

<div class=”form-group”>
<label for=”arquivo_xml” class=”control-label”>Selecione o arquivo (XML) para validação</label>
<input id=”arquivo_xml” name=”arquivo_xml” type=”file” class=”form-control-file” placeholder=”Selecione o arquivo XML para validaçaõ…” />
</div>

<button type=”submit” class=”btn btn-primary”>Validar Arquivo</button>
</form>

</div>
</body>

A página ficará com o layout abaixo;

Agora copie todos os arquivos que baixou no site da ANS e coloque dentro da pasta (tiss), ficando da seguinte forma:

tiss/03_03_03
tiss/03_03_02
tiss/03_03_01
tiss/03_03_00
tiss/03_02_02
tiss/03_02_01
tiss/03_02_00

Read More →

MySQL – SELECT COUNT() GROUP BY date (data_format)

Fazendo uma consulta com count em campo do tipo (date)

1
2
3
4
5
6
7
SELECT
COUNT(*) AS qt_acesso_dia
,DATE_FORMAT(a.DT_ACESSO,'%d/%m/%Y') AS dt_acesso
FROM
contador_acesso a
GROUP BY DATE_FORMAT(a.DT_ACESSO,'%d/%m/%Y')
ORDER BY 2

Resultado:

Fazendo uma consulta com count em campo do tipo (date)

1
 

Como resolver o Erro DataExchange.dll (Windows 10)

Como substituir manualmente um arquivo de sistema corrompido por uma cópia conhecida em bom estado

Olá, irei ensinar como resolver o erro DataExchange.dll que aparece no windows 10

Meu computador começou a apresentar este erro, de uma hora pra outra, e ficou quase 1 semana me atrapalhando(haha), até que algumas das funcionalidades do Windows pararam de funcionar, menu iniciar, minimizar as janelas, copiar atalhos, aumentar e diminuir o volume, abrir fotos, calculadora, notepad, mover arquivos arrastando e outros problemas relacionados. Pensei que teria que formatar meu computador, pois fiz alguns testes de correção com aplicativos de DLL e outros recursos (limpeza registro), e nada resolveu. Então comecei a pesquisar como funcionava o processo de reparação do Windows, eis que encontrei uma opção de solução no site da Microsoft e adaptei ao que precisava, substituir a DLL DataExchange.dll, causadora de problemas.

Obs.: Não consegui descobrir de fato a causa, mas suspeito que seja devido a atualização de algum drive(Vídeo/Áudio) e que também esteja relacionado ao direct-X, e aplicativo da AMD CCC.exe (AMD Catalyst) e ao framework da Microsoft visual c + + XXXX redistributable package x64, devido aos erros que ocorreram.

 

-Primeiramente eu removi o driver de vídeo e reinstalei, em seguida atualizei o programa (AMD Catalyst(CCC.exe)) para a versão mais recente, direto no site da AMD(http://support.amd.com/pt-br/download/auto-detect-tool)

Após a instalação pediu para reiniciar o computador, e quando liguei novamente o erro(CCC.exe / DataExchange.dll)  já diminuiu, mas não totalmente.

Vamos agora a solução que apliquei e foi definitiva;

-Antes de começar você irá precisar de acesso a outro computador com a mesma versão do Windows, no meu caso foi a versão (Windows 10 64 bits), pois irá copiar a nova DLL para substituir a anterior com problema.

Se você tentar usar os comandos de copiar e colar não irá funcionar, pois o Windows precisa da DLL para funcionar.

Então basicamente iremos atribuir permissão ao arquivo.

 

1º Passo – Abra o Command para atribuir permissão ao arquivo, e execute o comando abaixo

Read More →

1 passo é baixar o programa

https://www.r-project.org/
https://vps.fmvz.usp.br/CRAN/bin/windows/base/

Segue os links para download conforme o sistema operacional.

Após acessar o site e clicar em Download, selecione um servidor para download, em seguida, clique em base

Na sequencia faça o download.

A instalação é bem simples, Avançar, Aceitar os termos, Selecionar o diretório, Componentes e concluir.

Read More →

Obtendo endereço IP usando a consulta do MySQL

Para obter o IP através de uma consulta do MySQL, basta rodar o comando abaixo.

SELECT host
FROM information_schema.processlist
WHERE ID = connection_id( )
LIMIT 0 , 10

Executando a partir do PHP My Admin, provavelmente irá obter o resultado
como "Localhost", pois está executando diretamente no servidor.


Resultado a partir do meu computador, conectando remotamente no server.