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.

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

$_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
$dom = new DOMDocument("1.0", "ISO-8859-1"); 
//também poderia ser UTF-8
 
#remove os espacos em branco
$dom->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);	
			
	/* 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
$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>

 

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 →

Linguagem de Programação Zebra – EPL

Como resolver impressão falhada/clara

No código de impressão EPL, existe uma linha que iniciar com a letra (D), que defini a temperatura da impressão. A numeração pode ser de 0 a 15.

Obs.: Normalmente este tipo de falha ocorre devido ao tipo de etiqueta(o papel que foi confeccionado)

Dn- Darkness defini a temperatura de impressão (0 -15)

Em etiquetas de poli(usar temperatura a partir de 9)

Exemplo: D10

Modelo Etiqueta 3 coluna

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
I8,A,001
 
 
Q184,024
q831
rN
S3
D10
ZT
JF
O
R0,0
f100
N
B268,167,2,1,2,6,40,N,"&cd_lote"
B536,167,2,1,2,6,40,N,"&cd_lote"
B808,168,2,1,2,6,40,N,"&cd_lote"
A260,24,2,1,1,1,N,"L: &cd_lote"
A273,86,2,4,1,1,N,"&ds_mat_continuacao"
A526,24,2,1,1,1,N,"L: &cd_lote"
A274,116,2,4,1,1,N,"&ds_material"
A540,86,2,4,1,1,N,"&ds_mat_continuacao"
A260,47,2,1,1,1,N,"Val: &dt_validade"
A795,24,2,1,1,1,N,"L: &cd_lote"
A540,116,2,4,1,1,N,"&ds_material"
A809,87,2,4,1,1,N,"&ds_mat_continuacao"
A526,47,2,1,1,1,N,"Val: &dt_validade"
A809,120,2,4,1,1,N,"&ds_material"
A795,47,2,1,1,1,N,"Val: &dt_validade"
P1

 

Olá, vou demonstrar como resolver o problema ao iniciar o banco de dados JavaDB no netbeans, o serviço fica carregando mas não inicia.

Após abrir o Netbeans, vá na guia serviços e abra a opção propriedades do banco.

O Java DB fica dentro da pasta do Glassfish (C:\Program Files\glassfish-4.1.1\javadb), mas o local apontado pelo netbeans está errado, então é necessário alterar informando o local correto.

Em seguida clique com o botão direito e selecione a opção Iniciar Banco de Dados

Pronto! você já poderá usar o banco de dados.

Estarei disponibilizando dois modelos de pulseiras desenvolvidas para a Zebra HC 100, sendo um para pulseira de adultos e outro modelo para crianças.

É necessário o desenvolvimento de dois códigos devido a forma de impressão e tamanho das pulseiras serem diferentes, ainda poderá existir um terceiro tamanho que é usado em bebês, mas com base nos exemplos abaixo ficará fácil ajustar. Tamanhos; Adulto: 27,9 cm e Infantil 17,8cm

 

Adulto (27,9 CM)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
^XA
^FO60,1200^BCN,100,N,N,N,N^FD&nr_atendimento^FS
^FO280,1600^A0R,20,30^FD** &ds_estab **^FS
^FO230,1400^A0R,30,30^FDMEDICO: &nm_medico^FS
^FO130,1400^A0R,70,60^FD&nm_paciente^FS
^FO80,1400^A0R,30,40^FDIDADE: &idade^FS
^FO40,1400^A0R,30,30^FDRESPONSÁVEL: &nm_responsavel^FS
^FO40,1700^A0R,30,40^FDNASC: &dt_nascimento^FS
^FO30,2225^A0R,30,40^FDPRONTUARIO: &nr_prontuario^FS
^FO60,2225^A0R,30,40^FDATENDIMENTO: &nr_atendimento^FS
^PRA
^PQ&nr_etiquetas
^FDvertical^FS
^XZ

pulseira-aduto_le

 

Infantil (17,8 CM)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
^XA
^FO70,480^BCN,100,N,N,N,N^FD&nr_atendimento^FS
^FO280,600^A0R,20,30^FD** &ds_estab **^FS
^FO230,600^A0R,30,30^FDMEDICO: &nm_medico^FS
^FO130,600^A0R,70,60^FD&nm_paciente^FS
^FO70,600^A0R,30,40^FDIDADE: &idade^FS
^FO100,600^A0R,30,35^FDRESPONSÁVEL: &nm_responsavel^FS
^FO40,600^A0R,30,40^FDNASC: &dt_nascimento^FS
^FO60,1100^A0R,30,40^FDATENDIMENTO: &nr_atendimento^FS
^FO30,1100^A0R,30,40^FDPRONTUARIO: &nr_prontuario^FS
^PRA
^PQ&nr_etiquetas
^FDvertical^FS
^XZ

pulseira_infantil_le

Para maiores informações, visite minha primeira postagem sobre programação ZPLII e o guia de programação em ZPLII

Guia de programação ZPL II

Manual da Impressora Zebra HC100

Leila mais clicando no link abaixo!

Programação ZPL II – Impressora de Pulseiras HC 100

Argox OS 214 – Progamação PPLA / Criar layout de etiquetas

 

Antes de iniciar a programação da etiqueta é importante saber qual o driver será utilizado, neste exemplo irei usar PPLA

argox-driver

Modelo 1 coluna (Para endereços)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
O0220
M3000
e
c0000
f330
L
H13
D11
SE
PD
z
 
 
131100001050030&ds_tratamento
131100000800030&ds_nome
121100000580030Endereco: &DS_ENDERECO, &nr_ENDERECO .&DS_COMPLEMENTO
121100000400030&DS_BAIRRO Cidade: &DS_CIDADE - &ds_ESTADO
121100000200030CEP:&ds_CEP
Q&NR_ETIQUETAS
E

Modelo 1 coluna (Pode ser usada para identificação pacientes)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
O0220
M3000
e
c0000
f330
L
H13
D11
SE
PD
z
 
150120000950010    A C O M P A N H A N T E - P.A.
131100000500020Paciente: &paciente
131000000200020Data: &entrada
131000000200160At: &ate
 
Q0001
E

 

 

Modelo 3 colunas

O0220

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
M3000
e
c0000
f330
L
H21
D11
SE
PD
R0000
z
 
191100000370010&ds_red_material
191100000300010Lote: &ds_lote
191100000300077V: &dt_validade
1D6202000010010&cd_barras
 
191100000370140&ds_red_material
191100000300140Lote: &ds_lote
191100000300207V: &dt_validade
1D6202000010140&cd_barras
 
191100000370270&ds_red_material
191100000300270Lote: &ds_lote
191100000300337V: &dt_validade
1D6202000010270&cd_barras
Q&nr_etiquetas
E
&nm_usuario_cor