Resolvendo o erro:

Error Code: 1415
Not allowed to return a result set from a function

Este erro ocorre devido a ausência do comando INTO

DELIMITER $$

CREATE
FUNCTION obter_nome_(cd_pessoa INT(11))
RETURNS VARCHAR(150) CHARSET latin1

DETERMINISTIC

BEGIN

DECLARE nm_pessoa_r VARCHAR(150);

IF (cd_pessoa_e IS NOT NULL) THEN

    SELECT
    p.nm_pessoa
    INTO
    nm_pessoa_r
    FROM
        pessoa p
    WHERE p.cd_pessoa = cd_pessoa_e
    ;
END IF;

RETURN  nm_pessoa_r;
END$$

DELIMITER ;

Neste artigo estarei demonstrando como instalar o Banco de Dados Oracle 12c no Windows, incluindo a criação de um banco padrão.

Antes de instalar o software, o OUI (Oracle Universal Installer), fará algumas verificações automatizadas para garantir que o computador atenda aos requisitos básicos de hardware e software para a instalação do banco de Dados Oracle. Caso o computador não atenda aos requisitos, uma mensagem será apresentada.

Alguns requisitos básicos são:

Mínimo de 2GB de memória física
Pelo menos 10 GB de espaço em disco

Para começar é necessário fazer o download do Oracle 12c pelo link https://www.oracle.com/database/technologies/oracle-database-software-downloads.html

Após o download você deve descompactar os arquivos baixados;


Neste seção, você iniciará a instalação do Banco de Dados Oracle, acesse a pasta database que você extraiu na etapa anterior e clique duas vezes sobre setup, pode ser necessário permitir a execução do arquivo na UAC.

Na janela que será aberta digite seu endereço de e-mail e a senha do login no site da oracle para receber as notificações dos problemas de segurança por e-mail. Se você não quiser as notificações por e-mail desmarque a opção e clique em próximo.
Nesta Janela selecione uma das opções, em nosso tutorial Criamos e configuramos um banco de dados, então marque a primeira opção.
Escolha a opção de acordo a arquitetura da instalação, sendo; Classe Desktop/Laptop ou servidor.
Neste tutorial utilizaremos a opção Classe Desktop.
Segu
indo a recomendação, iremos marcar a opção para a criar um novo usuário no Windows com apenas os privilégios necessários para a execução da instância do banco de dados.
Nesta janela é realizado a configuração do local de instalação, observe que por padrão é criado um banco de dados chamado pdborcl. Na minha instalação estou alterando para “bento”, você pode deixar com o padrão ou alterar.
Digite a senha para a administração do Banco de Dados Oracle. Essa senha será utilizados posteriormente para login de administrador SYS e SYSTEM.
O instalador fará as verificações de pré requisitos.
Após as verificações de pré-requisito a janela com o resumo será apresentada, revisa todas as configurações e clique em instalar.
A janela de status será exibida. Esta etapa leva cerca de 15 minutos dependendo da configuração do computador.

Em seguida será aberta a tela do Assistente de Configuração do Banco de Dados.

Ao chegar em 100% será exibida a janela abaixo informando que terminou, caso queira abrir o gerenciamento de senhas para desbloquear outras contas clique no botão.
Após a

Ao terminar você poderá abrir o gerenciador e navegar a partir do endereço https://localhost:5500/em com o usuário SYS.

Após concluir clique em “Fechar”

https://localhost:5500/em

Agora você poderá analisar e verificar a partir dos serviços do Windows a execução dos serviço do Banco de Dados Oracle.

Abra o executar no menu iniciar ou com a tela de atalho Windows + R, e digite Services.msc

Caso reinicie o computador e não consiga acessar o banco de dados, verifique se os serviços estão ativos e funcionando.

Caso queira acessar de outros computadores será necessário liberar a porta 1521 ou 1522 no firewall, instalar o client do Oracle no outro computador e configurar o arquivo TNSNAMES.ora, que normalmente fica localizado em C:\app\OracleHomeUser\product\12.1.0\dbhome_1\NETWORK\ADMIN
Este é o arquivo da instalação do servidor, nas estações de trabalho é necessário ajustar o nome do HOST com o IP ou nome do computador.

Estarei ensinando como conectar ao banco de dados MySQL a partir do seu computador utilizando um SGBD.

A maioria das hospagens disponibilizam o PhpMyAdmin, que auxilia na criação e manutenção do banco de dados.

Mas por ser on-line, acaba por não ser muito útil na criação de querys e rotinas devido as opções para salvar os arquivos, debug nas rotinas e principalmente os testes.

O Cpanel possui o recurso Remote MySQL que permite liberar a conexão remota de hosts(servidores e computadores) ao banco de dados.

Vamos lá!
1º Passo – Acessar o Cpanel

Após conectar ao Cpanel localize o recurso MySQL Remoto.

2º Passo – Adicionar o IP/Host para conexão.

No campo Host, digite o IP ou nome do servidor no qual irá conceder a permissão de acesso, mas é recomendado usar um endereço IP.

Exemplos:

IP: 127.0.0.1
Host/Server: server1.fabianobento.com.br

Também pode ser utilizado o caractere %(porcentagem), como coringa, para permitir o acesso de qualquer lugar e computador.
Para delimitar uma subnet, utilize parte do IP com o caractere %.

Exemplo: 127.0.0.%

3º Remover permissão de acesso

Para remover a permissão de acesso, basta clicar sobre a opção Excluir, do item a ser removido a permissão de acesso.

Validador TISS 03.04.00

http://fabianobento.com.br/validadortiss/

Software gratuito para validação e análise de arquivos no padrão TISS da ANS.

Você poderá validar gratuitamente seus arquivos XML no padrão TISS, sem a necessidade de instalar.

-Não é necessário instalar
-Padrão TISS
-Codificação TUSS
-Dados do Prestador
-Suporte a arquivos do monitoramento
-Informações das contas e valores
– Versão do arquivo
– Estrutura

Hoje mostrar como criar um dashboard no Grafana, através de uma consulta SQL no banco de dados.

Antes de avançarmos é necessário configurar o DATASOURCE para a conexão com o banco.

Clique no ícone lateral e selecione a opção (Data Sources).

Clique no botão Add data source Informe um nome para o data source, selecione o tipo e os dados para a conexão.
É importante que defina um nome que identifique a base de dados, pois será utilizado posteriormente.

No exemplo, estou usando conexão com o Banco MySQL.

Ao salvar, observe que o Grafana fará um teste de conexão, e vai exibir uma mensagem indicando que foi conectado com sucesso. Se a mensagem for de erro revise os dados de conexão.

Será listado todos os data sources configurados.

Vamos ao Dashboard!

Escolha o tipo de dashboard que deseja incluir, estou usando (Table)

Agora clique na opção ao lado do título e em Edit.Informe o título do Dashboard e descrição

Read More →

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/

 

 

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

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>