Discussão sobre o TISSNet, Web Services e Ponto-a-ponto

Galera estarei postando aqui uma dúvida de uma pessoa que encontrou em contato comigo para falar do TISS (Troca de Informações em Saúde Suplementar).

Estarei postando neste post a Dúvida dessa pessoa e, logo abaixo, responderei a mesma.

Pergunta: ========================================

Gostei da idéia do TISS e acho muito boa a iniciativa de montarmos um grupo para quem está desenvolvendo isso, principalmente em Java. Na verdade nosso sistema que cuida desta parte é feito em Qt, mas estou pensando em implementar esta parte em Java mesmo, acho o suporte a XML melhor.

Bom, vamos às minhas dúvidas mais “críticas”:

  1. Vocês irão transmitir os dados para uma operadora, certo? O que será usado, comunicação ponto-a-ponto ou webservices? No caso da comunicação ponto-a-ponto, será utilizado o próprio Tissnet? E no caso de webservices, o que estarão utilizando? Tem como utilizar o Tissnet também ou precisaram criar uma solução própria? No caso de solução própria, reutilizaram as APIs da ANS?
  2. Não consegui entender direito como estarão distribuidas as guias dentro do arquivo. No nosso caso, a guia vem em branco para o nosso faturamento preencher manualmente (o papel tbm será obrigatório, certo?), mas nas nossas agências transfusionais (que ficam dentro de diversos hospitais) não há como preencher isso… O que acontece é que um determinado serviço ou produto derivado de sangue que seja necessário para um paciente, pode incluir implicitamente diversos outros exames e serviços, os quais devem ser cobrados também. Assim, nosso sistema relaciona apenas um único número de guia (no caso a SADT) a cada ficha de requisição de transfusão/exames. Devo ter um único arquivo XML para cada guia? Posso unificar o envio de diversos itens (relacionados a um mesmo paciente, mas distribuidos em varias guias) em um unico número e relacionar tudo dentro do XML? Isso porque existe também o problema da guia SADT ter espaço para apenas 5 procedimentos…
  3. Qual a estratégi que você utilizou para mapear os campos que vão para o xml? Os schemas são, digamos… GRANDES DEMAIS.

Sei que escrevi demais e tenho bastante dúvidas, mas se puder me ajudar (e quem sabe eu também ajudá-lo…) ficaria muito agradecido.

Mais uma vez obrigado pela força!

Abraço,

===============================================

Galera estarei agora respondendo às dúvidas postadas acima, enviadas a mim pelo companheiro Cássio. Onde em contato com ele, achamos melhor que fosse criado um tópico de discursão para que todos possamos nos ajudar.

Resposta: ========================================

Certo, iremos transmitir os dados para uma operadora.
Iremos usar Web Services, mas pelo padrão Tiss estaremos preparados para as duas formas de transmissão, ponto-a-ponto e Web Services.
Na comunicação ponto-a-ponto usaremos o TISSNet.
Na comunicação via Web Services pode-se usar o TISSNet sim, mas estaremos usando uma ‘solução própria’ em web Services. Onde estaremos usando a lib do Tiss, para que assim nao fujamos ao padrão da ANS. Como API estou usando também o AXIS para auxilio na criação dos clientes de Web Services, visto que, terei além de disponibilizar serviçoes para que as Operadoras consumam, irei criar clientes que consumam os serviços disponibilizados pelas Operadoras(por exemplo, quando for solicitar alguma prorrogação de procedimento).

Sobre as guias, você pode enviar um Lote de Guias. E não apenas um XML por vez.

  1. A estratégia que usamos para mapear os campos do XML, foi o de utilizar a própria estrutura do Tiss, usando sua lib e instanciando um objeto do tipo MensagemTISS você consegue obter todos os campos necessários no XML.

Para te ajudar nisso, vou te dar uma dica que me foi passada quando ingressei neste projeto.
Se já baixou o TISSNet no site da ANS (Agência Nacional de Saúde), dentro dele em docs tem um manual do TissNet 3.0. Este documento explica tudo que se deve fazer e dependendo do que for tem exemplos de como deve-se implementar.

===============================================

Cássio, espero ter ajudado com o pouco que sei.
Qualquer coisa que eu possa ajudar, sinta-se a vontade de perguntar.

Abração

Estarei divulgando também este post em meu blog pessoal

:slight_smile:

Olá Rafael,

Muito obrigado por suas respostas!

Você disse que no caso de webservices não utilizariam o Tissnet e sim uma solução própria. Poderia dizer porque? Também não entendi como o Tissnet poderia ser utilizado para enviar via web-service… mas tambem nao entendi como o Tissnet poderia ser utilizado para envio com webservice… entendi q ele seria apenas ponto a ponto…

No caso de agrupar as guisas em um lote, isso eu entendi. Mas o que perguntei foi sobre agrupar os itens de diversas guias em um único número, entende? Talvez fazer isso lhe soe estranho, mas há anos nosso sistema funciona assim e não acredito que a ANS tenha feito as coisas de forma que nosso sistema legado tenha que ser alterado neste nível para se adequar…

Mais uma vez obrigado pela ajuda!

Outra dúvida!

O elemento <epilogo> no fim do arquivo XMl contém o hash md5 certo? Mas o que exatamente eu devo considerar para calcular o hash, já que o resultado vai dentro do arquivo… não saquei isso!

Obrigado!

Sobre a dúvida que vc me deixou no msn:
Vc tem que usar a API JAXB da propria Sun ou a API XSTREAM da Apache que servem manipular XML.
Instanciando a classe Unmarshaller vc transforma um conteudo XML em objeto JAVA. E, instanciando a classe Marshaller vc faz o contrario de objeto JAVA para XML.

Quanto a mensagem q me deixou agora no GUJ, mais tarde olho direito como faço esta sendo feita essa parte, mas tem um setHash e setEpilogo.
que lhe ajudam nisso.

Bom, sou mais um sofredor do TISSNet…
Tenho meu webservice operadora rodando no glassfish certinho, acesso via HTTPS a pagina do schema https://localhost:8181/tissTransmiteMensagem/tissTransmiteMensagemV2_01_01?wsdl sem problemas com o certificado padrão do Java, primeiro pq não sei onde é o diretório que ele le no glassfish o tiss.ini, tentei o diretorio config mas me parece q nao deu certo.
O meu problema é na hora de enviar um arquivo como prestador, ele da erro na chave SSL, já tentei gerar uma chave própria sem sucesso nos testes.
Gostaria saber se alguem tem um webservice com glassfish ou jboss e como fizeram as configurações no tiss.ini e a parte de chaves keystore e trutstore, tentei por esses sites que validam temporariamente free mas nao deu certo, nao sei qual problema estou tendo.
Abraços

Buenas

Gostaria de saber como sera feita a troca de informações na parte de autorização de exames. Por exemplo usando o TISSNET a prestadora envia o pedido de autorização para a operadora e dae em diante como fica o processo???

Grato

[quote=blah]Bom, sou mais um sofredor do TISSNet…
Tenho meu webservice operadora rodando no glassfish certinho, acesso via HTTPS a pagina do schema https://localhost:8181/tissTransmiteMensagem/tissTransmiteMensagemV2_01_01?wsdl sem problemas com o certificado padrão do Java, primeiro pq não sei onde é o diretório que ele le no glassfish o tiss.ini, tentei o diretorio config mas me parece q nao deu certo.
O meu problema é na hora de enviar um arquivo como prestador, ele da erro na chave SSL, já tentei gerar uma chave própria sem sucesso nos testes.
Gostaria saber se alguem tem um webservice com glassfish ou jboss e como fizeram as configurações no tiss.ini e a parte de chaves keystore e trutstore, tentei por esses sites que validam temporariamente free mas nao deu certo, nao sei qual problema estou tendo.
Abraços[/quote]

blah…

cara tive o mesmo problema que voce anteriormente.
o que me explicaram aqui no GUJ mesmo é que o erro estava sendo gerado pelo fato de ser o certificado trial que eu estava usando. pois, assim ele nao existe num banco de dados de uma raiz certificadora e, assim, dava sempre erro na validaçao.
Ai tivemos que comprar um certificado digital valido mesmo.

estou com algumas duvidas ainda, pois estou terminando ainda o web services para tal.

vc ai vai usar a implementacao do TissNet mesmo nao é?

[quote=rbamartins]Galera estarei agora respondendo às dúvidas postadas acima, enviadas a mim pelo companheiro Cássio. Onde em contato com ele, achamos melhor que fosse criado um tópico de discursão para que todos possamos nos ajudar.

Resposta: ========================================

Certo, iremos transmitir os dados para uma operadora.
Iremos usar Web Services, mas pelo padrão Tiss estaremos preparados para as duas formas de transmissão, ponto-a-ponto e Web Services.
Na comunicação ponto-a-ponto usaremos o TISSNet.
Na comunicação via Web Services pode-se usar o TISSNet sim, mas estaremos usando uma ‘solução própria’ em web Services. Onde estaremos usando a lib do Tiss, para que assim nao fujamos ao padrão da ANS. Como API estou usando também o AXIS para auxilio na criação dos clientes de Web Services, visto que, terei além de disponibilizar serviçoes para que as Operadoras consumam, irei criar clientes que consumam os serviços disponibilizados pelas Operadoras(por exemplo, quando for solicitar alguma prorrogação de procedimento).

Sobre as guias, você pode enviar um Lote de Guias. E não apenas um XML por vez.

  1. A estratégia que usamos para mapear os campos do XML, foi o de utilizar a própria estrutura do Tiss, usando sua lib e instanciando um objeto do tipo MensagemTISS você consegue obter todos os campos necessários no XML.

Para te ajudar nisso, vou te dar uma dica que me foi passada quando ingressei neste projeto.
Se já baixou o TISSNet no site da ANS (Agência Nacional de Saúde), dentro dele em docs tem um manual do TissNet 3.0. Este documento explica tudo que se deve fazer e dependendo do que for tem exemplos de como deve-se implementar.

===============================================

Cássio, espero ter ajudado com o pouco que sei.
Qualquer coisa que eu possa ajudar, sinta-se a vontade de perguntar.

Abração

Estarei divulgando também este post em meu blog pessoal

:)[/quote]

Rafael, Gostaria que vc explicasse melhor esta parte do WebService, como voce implementou de colocar a lib do tissnet dentro do projeto.seria esse arquivo? “appserv-ws.jar”
de preferencia colocando um codigo de exemplo de como vc recebeu uma guia via webservice.

Fico muito grato pela ajuda… uma abraco!!!

[quote]
Rafael, Gostaria que vc explicasse melhor esta parte do WebService, como voce implementou de colocar a lib do tissnet dentro do projeto.seria esse arquivo? “appserv-ws.jar”
de preferencia colocando um codigo de exemplo de como vc recebeu uma guia via webservice.

Fico muito grato pela ajuda… uma abraco!!![/quote]

Flavio (fhsantiago),

gerei um jar do tissnet e setei no classpath de meu projeto de WS.
As guias sao enviadas via XML. Quando vc envia algo via web services o conteudo dessa mensagem vai como XML e se quiser manipula-la deverá receber esse conteudo e transformar em objeto java.

aqui por exemplo eu serializo em XML:

[code]
JAXBContext jc = JAXBContext.newInstance( “br.scmba.tiss.schemas” );

Marshaller m = jc.createMarshaller();
m.setProperty( m.JAXB_ENCODING, “ISO-8859-1” );
m.setProperty( m.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );

unico = new java.util.Date().getTime();
random = ( int ) ( java.lang.Math.random() * 100 );

pXmlGerado = InformacoesAplicacao.getCaminhoAplicacao() + “/tiss/xml/mensagemTISS_” + String.valueOf( unico ) + String.valueOf( random ) + “.xml”;

m.marshal( pMensagem, new FileOutputStream(pXmlGerado) );

xmlGerado = new File(pathXmlGerado);[/code]

e aqui faço o inverso que é pegar um XML e transformar em objeto java:

JAXBContext jc = JAXBContext.newInstance( "br.scmba.tiss.schemas" );
			
MensagemTISS mensagem = null; // limpando objeto mensagem para ser tabalhado com o unmarshaller
/**
* o Unmarshaller é usado para transformar de XML para objeto JAVA
*/
Unmarshaller unmarshaller = jc.createUnmarshaller();
			
String arquivo = "c:/teste_envio/exemplo_operadora_resposta.xml";
			
File file = new File( arquivo );
			
mensagem = (MensagemTISS) unmarshaller.unmarshal(new FileInputStream(
		 file.getAbsolutePath()));
		
//setado como false para que o construtor de MensagemTiss ao invés de
 validar, calcule o hash para meu arquivo xml

 MensagemTiss mensagemTiss = new MensagemTiss(file.getAbsolutePath(), false);
		
//setando o hash no arquivo
mensagem.setEpilogo(new MensagemTISS.Epilogo());
mensagem.getEpilogo().setHash(mensagemTiss.calcularHash());

n sei se consegui te ajudar muito. mas pode perguntar mais se precisar.
to com algumas dúvidas aqui tb, qdo tiver mais elaborado vou postar aqui pra ver se alguem sabe como me ajudar.

blz
esse TissNet…

Rafael, veja se voce pode me ajudar, eu recebo um xml que pode ser de qualquer coisa(envio de lotes,solicitacao procedimento, etc). faco essa verificacao no cabechalho…

xml.loadXML(arquivo.getInputStream());
NodeList nodeList = xml.selectNodes(padraoAns + "cabechalho");
String tipoTransacao = (((Element) nodeList.item(0)).getElementsByTagName(padraoAns + "tipoTransacao").item(0).getFirstChild().getNodeValue());
if(tipoTransacao.equals("ENVIO_LOTE_GUIAS")){
	
	geraGuiasViaLote(xml);
}

so que no meu metodo geraGuiasViaLote eu preciso ainda saber de qual guia é o lote… consulta,internacao, etc… tem algum campo no cabechalo que indica isso:?
valeu

[quote=fhsantiago]Rafael, veja se voce pode me ajudar, eu recebo um xml que pode ser de qualquer coisa(envio de lotes,solicitacao procedimento, etc). faco essa verificacao no cabechalho…

xml.loadXML(arquivo.getInputStream());
NodeList nodeList = xml.selectNodes(padraoAns + "cabechalho");
String tipoTransacao = (((Element) nodeList.item(0)).getElementsByTagName(padraoAns + "tipoTransacao").item(0).getFirstChild().getNodeValue());
if(tipoTransacao.equals("ENVIO_LOTE_GUIAS")){
	
	geraGuiasViaLote(xml);
}

so que no meu metodo geraGuiasViaLote eu preciso ainda saber de qual guia é o lote… consulta,internacao, etc… tem algum campo no cabechalo que indica isso:?
valeu[/quote]

Flavio,

ficaria muito mais fácil para você trabalhar da seguinte forma:

capture o arquivo xml e transforme ele em objeto java com a api JAXB usando a classe Unmarshaller

MensagemTiss mensagem = (MensagemTiss) unmarshaller.unmarshal(new FileInputStream(arquivoTemporario));

e se vc verificar no schema (no .xsd do Tiss) vai identificar que no cabeçalho tem isso tudo. verifique tb a classe CtCabecalhoTransacao.
entao assim vc pode fazer isso que coloco ai abaixo:

mensagemTISS.getCabecalho().getIdentificacaoTransacao().getTipoTransacao();

espero ter ajudado em algo…
abraços

Como devemos implementar um Web Service? Somos uma prestadora e nossas operadoras cadastradas encontraram inumeros modos de transferencia tais como: ftp, email, upload nos seus sites com uso de usuario e senha, tissnet, tissnet com usuario e senha…
Se nós criarmos um WS poderei manter conectividade automaticamente com quais por exemplo???
Já o nosso banco de dados faz o levantamento das informações e conseguimos já gerar o XML e largar prontinho em uma pasta com o codigo ou nome de cada prestadora. O fato é que ei terá que um usuario ir lá na tal pasta e pegar os arquivos para fazer os uploads ou mandar por ftp enfim tá uma porcaria mas ai insisto na perguntaanterios.
A ANS criou um padrao e dentro desse padra cada Operadora criou um padrao e ai como que ficaria meu WEB SERVICE supriria as necessidades de todas eu consiguiria adapta-lo a todas elas???
Grato

[quote=Tchê Bagual]Como devemos implementar um Web Service? Somos uma prestadora e nossas operadoras cadastradas encontraram inumeros modos de transferencia tais como: ftp, email, upload nos seus sites com uso de usuario e senha, tissnet, tissnet com usuario e senha…
Se nós criarmos um WS poderei manter conectividade automaticamente com quais por exemplo???
Já o nosso banco de dados faz o levantamento das informações e conseguimos já gerar o XML e largar prontinho em uma pasta com o codigo ou nome de cada prestadora. O fato é que ei terá que um usuario ir lá na tal pasta e pegar os arquivos para fazer os uploads ou mandar por ftp enfim tá uma porcaria mas ai insisto na perguntaanterios.
A ANS criou um padrao e dentro desse padra cada Operadora criou um padrao e ai como que ficaria meu WEB SERVICE supriria as necessidades de todas eu consiguiria adapta-lo a todas elas???
Grato[/quote]

oh… pra vc criar web services, vc terá q ter em algum lugar a url dos web services de cada operadora, onde vc ira selecionar pra qual vc deseja enviar. Cria um cliente padrao pra cada tipo de serviço(que sao sete) e só setará a url da operadora correspondente.

para seu web service, eu n sei muito bem se entendi sua pergunta… se vc puder mandar de novo mais detalhada…

abraços.
qq coisa me add no msn.

alguém ai ta fazendo tela de Upload pro TISS???

Bom dia pessoal … tb sou mais um sofredor do TISSNET … gostaria de saber como vcs fizeram p implementar o https no tissnet … :smiley: … alguem ai pode me dar uma luz ?

Bom dia pessoal … tb sou mais um sofredor do TISSNET … gostaria de saber como vcs fizeram p implementar o https no tissnet … … alguem ai pode me dar uma luz ?

[quote=cassio]Outra dúvida!

O elemento <epilogo> no fim do arquivo XMl contém o hash md5 certo? Mas o que exatamente eu devo considerar para calcular o hash, já que o resultado vai dentro do arquivo… não saquei isso!

Obrigado![/quote]

Fala Cassio,

Pelo que eu li em um outro fórum, o cálculo do hash é feito em cima dos valores, e apenas dos valores, dos nodos do arquivo XML.

http://forum.datasus.gov.br/viewtopic.php?t=8061

Cara, vc quer implementar https para o tissnet, ponto-a-ponto, é isso?

Eu implementei para WebServices.

se puder especificar mais sua dúvida. Gostaria de poder ajuda-lo se possivel, blz?.

abraços