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);	

// 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 →

Validador TISS – Validação de arquivos XML TISS 3.03.01 (ANS TISS)

O validador foi atualizado para a versão mais recente da ANS.

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

Aprenda a criar seu próprio validador: blog.fabianobento.com.br/2018/02/criando-um-validador-tiss-usando-php/

Post original: http://blog.fabianobento.com.br/2015/07/validador-tiss-validacao-de-arquivos-xml-tiss-3-02-00-ans-tiss/

Validador TISS – Validação de arquivos XML TISS 3.02.00 (ANS TISS)

Validador TISS – Validador de arquivo XML no padrão TISS

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

Clique no link ou imagem abaixo para abrir o validador de arquivo XML no padrão da TISS

VALIDADOR TISS  —>  http://fabianobento.com.br/validadortiss/

validador-tiss-ans

http://www.ans.gov.br/a-ans/sala-de-noticias-ans/operadoras-e-servicos-de-saude/2486-ans-disponibiliza-arquivos-da-versao-30200-do-padrao-tiss

RESOLUÇÃO NORMATIVA – RN Nº 376, DE 28 DE ABRIL DE 2015

Altera a Resolução Normativa – RN nº 295, de 9 de maio de 2012, que dispõe, em especial, sobre a geração, a transmissão e o controle de dados cadastrais de beneficiários do Sistema de Informações de Beneficiários da Agência Nacional de Saúde Suplementar – SIB/ANS; e  a RN nº 360, de 3 de dezembro de 2014, que estabelece o conteúdo mínimo obrigatório a ser observado pelas operadoras de planos privados de assistência à saúde para identificação unívoca de seus beneficiários, bem como sua disponibilização obrigatória de forma individualizada da Identificação Padrão da Saúde Suplementar.

A Diretoria Colegiada da Agência Nacional de Saúde Suplementar ANS, em vista do que dispõem os incisos XIX, XXXI e XXXVI do art. 4º e o inciso II do art.10, todos da Lei nº 9.961, de 28 de janeiro de 2000; o art. 20 da Lei nº 9.656, de 3 de junho de 1998; e a alínea “a” do inciso II do art. 86 da Resolução Normativa – RN nº 197, de 16 de julho de 2009, em reunião realizada em 22 de abril de 2015, adotou a seguinte Resolução Normativa e eu, Diretora Presidente-Substituta, determino a sua publicação.

Art. 1º  Esta Resolução altera a Resolução Normativa – RN nº 295, de 9 de maio de 2012, que dispõe, em especial, sobre a geração, a transmissão e o controle de dados cadastrais de beneficiários do Sistema de Informações de Beneficiários da Agência Nacional de Saúde Suplementar – SIB/ANS; e a RN nº 360, de 3 de dezembro de 2014 que estabelece o conteúdo mínimo obrigatório a ser observado pelas operadoras de planos privados de assistência à saúde para identificação unívoca de seus beneficiários, bem como sua disponibilização obrigatória de forma individualizada da Identificação Padrão da Saúde Suplementar.

 

Continue lendo em:  http://www.ans.gov.br/index.php?option=com_legislacao&view=legislacao&task=TextoLei&format=raw&id=2956

IV. Histórico de alterações na versão 3.02.00

5. As alterações do Padrão TISS em relação à versão 03.01.00 são:

Inclusões

5.1.No Componente de Comunicação, incluídos os campos dente, região e face
do dente no protocolo de recebimento de recurso de glosas no WebService
(protocoloRecebimentoRecursoWS);

5.2.No Componente de Comunicação e no Componente de Representação de
Conceitos em Saúde foram incluídos 30 termos na terminologia de
mensagens de retorno referentes a certificado e assinatura digitais e
referentes às criticas no envio de dados para a ANS (tissSimpleTypes);

5.3. No Componente de Representação de Conceitos em Saúde, na terminologia
de diárias, taxas e gases medicinais foram incluídos 44 termos.

5.4. No Componente de Representação de Conceitos em Saúde, na terminologia
de medicamentos foram incluídos 773 termos.

5.5. No Componente de Representação de Conceitos em Saúde, na terminologia
de procedimentos e eventos em saúde foram incluídos 10 termos.

5.6. No Componente de Representação de Conceitos em Saúde, na terminologia
de mensagens foram incluídos 30 termos.

5.7.No Componente Organizacional foi incluída a regra sobre o namespace
estabelecido nos schemas XSD e descritores WSDL.

5.8.No Componente Organizacional foram incluídas regras sobre assinatura
digital.

Alterações

5.9. Alterado neste componente, as regras sobre pacotes no envio de dados à
ANS;

5.10. Alteradas neste componente, as regras de nomenclatura dos arquivos
no envio de dados à ANS;

5.11. Alterada neste componente, a regra sobre os tipos de arquivos válidos
no envio de dados à ANS;

5.12. No Componente de Comunicação, na mensagem de recebimento de
anexo pela operadora, o campo diagnosticoHistopatologico teve sua
condição de preenchimento corrigida de obrigatório para opcional nos
anexos de quimioterapia e de radioterapia;

5.13. No Componente de Conteúdo e Estrutura e no Componente de
Comunicação, na mensagem de envio de dados para a ANS, os campos
quantidade informada e quantidade paga tiveram seus tamanhos corrigidos
para 4 inteiros e 4 decimais;

5.14. No Componente de Comunicação, o campo data de realização da guia
foi corrigido para preenchimento opcional na mensagem de
recebimentoLote e na mensagem situacaoProtocolo ;

5.15. No Componente de Comunicação foi alterado o tamanho do campo de
senha do prestador de 20 para 32 posições;

5.16. No Componente de Comunicação, foi colocada a possibilidade na
mensagem de recurso de glosa do prestador poder informar mais de um
código de glosa com sua justificativa;

5.17. No Componente de Comunicação, na mensagem de cobrança da guia de
odontologia, foi corrigida a condição de preenchimento dos campos: CBO do
profissional, CNES do profissional executante, quantidade de
procedimentos, valor do procedimento, tipo de atendimento, tipo de
faturamento, indicador de autorização e valor total de procedimentos para
obrigatório;

5.18. No Componente de Representação de Conceitos em Saúde, na
terminologia de medicamentos foram alterados 17 termos.

5.19. No Componente de Representação de Conceitos em Saúde, na
terminologia de diárias, taxas e gases medicinais foi alterado 1 termo.

5.20. No Componente de Representação de Conceitos em Saúde, na
terminologia de procedimentos e eventos em saúde foram alterados 4
termos.

5.21. No Componente de Representação de Conceitos em Saúde, na
terminologia de mensagens foram alterados 3 termos.

5.22. No Componente de Representação de Conceitos em Saúde, nas
terminologias de materiais e OPME, de medicamentos e de diárias, taxas e
gases medicinais a data de fim de implantação foi alterada para
30/11/2014 para todos os termos.

5.23. No Componente de Comunicação, na mensagem de demonstrativo de
pagamento de odontologia, foi alterada a tag de identificação do prestador
contratado para explicitar a informação de CPF ou CNPJ do contratado;
Exclusões

5.24. No Componente de Representação de Conceitos em Saúde, na
terminologia de diárias, taxas e gases medicinais foram inativados 2
termos.

5.25. No Componente de Representação de Conceitos em Saúde, na
terminologia de procedimentos e eventos em saúde foi inativado 1 termo.

5.26. No Componente de Representação de Conceitos em Saúde, na
terminologia de medicamentos foram inativados 18 termos.

5.27. No Componente de Representação de Conceitos em Saúde, na
terminologia de mensagens foram inativados 8 termos e inativados por
alteração 3 termos.