 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
magnosystem Novato

Registrado: Sábado, 9 de Novembro de 2013 Mensagens: 5
|
Enviada: Qua Nov 13, 2013 7:36 pm Assunto: |
|
|
Pessoal, com o que o Cláudio postou eu consegui chegar no hash da ANVISA. O teste tem que ser feito em cima do arquivo zip gerado na hora do envio. Não adianta baixar o xml do site e zipar. O próprio arquivo zip já vai ter um hash diferente.
Hoje por acaso fiz um envio teste para a ANVISA e guardei o arquivo zip enviado. Fiz o teste com as funções abaixo e bateu perfeitamente com o hash gerado pela ANVISA. Segue abaixo a função usada:
Código: | Function EncodeBase64 (Arquivo : TFileStream) : String;
Var
Encoder64 : TIDEncoderMime;
Begin
Try
Encoder64 := TIDEncoderMime.Create (Nil);
Result := Encoder64.EncodeStream(Arquivo);
Finally
Encoder64.Free;
End;
End;
function MD5(const fileName : string) : string;
Var
idmd5 : TIdHashMessageDigest5;
fs : TFileStream;
begin
idmd5 := TIdHashMessageDigest5.Create;
fs := TFileStream.Create(FileName, fmOpenRead OR fmShareDenyWrite);
try
result := idmd5.HashStringAsHex(EncodeBase64(fs));
finally
fs.Free;
idmd5.Free;
end;
end; |
Segue abaixo também a função que eu uso para enviar o arquivo zip:
Código: | Function ZiptoByte(Arquivo: String): TByteDynArray;
Var
Arq : TFileStream;
aArray : TByteDynArray;
i: integer;
Begin
Try
Arq := TFileStream.Create(Arquivo, fmOpenRead OR fmShareDenyWrite);
SetLength(aArray, Arq.Size);
for i := 0 to Arq.Size do
Arq.Read(aArray[i], 1);
Result := aArray;
Finally
Arq.Free;
end;
end; |
|
|
Voltar ao Topo |
|
 |
claudio.ferreira Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013 Mensagens: 667
|
|
Voltar ao Topo |
|
 |
magnosystem Novato

Registrado: Sábado, 9 de Novembro de 2013 Mensagens: 5
|
Enviada: Qui Nov 14, 2013 8:12 am Assunto: |
|
|
A função ziptobyte é a função que gera o TByteDynArray enviado no método para o webservices.
Para dar certo você apenas tem que chamar a função MD5 em cima do arquivo zip gerado.
A encodebase64 é usada pela função MD5. Você não chama ela diretamente. |
|
Voltar ao Topo |
|
 |
EvertonLima Novato

Registrado: Quarta-Feira, 13 de Novembro de 2013 Mensagens: 2
|
Enviada: Qui Nov 14, 2013 8:26 am Assunto: |
|
|
Funcionou!
Apenas adicionei o Encode64.
Código: | meuHash := CalculaHashMD5Indy(meuArquivo);
[code]Function TForm1.CalculaHashMD5Indy(NomeArq : String) : String;
Var
idmd5 : TIdHashMessageDigest5;
Arq : String;
fs : TFileStream;
Begin
Arq := LoadFileToStr(NomeArq);
idmd5 := TIdHashMessageDigest5.Create;
try
result := idmd5.AsHex(idmd5.HashValue(EncodeBase64(Arq)));
finally
idmd5.Free;
end;
end;
function TForm1.LoadFileToStr(const FileName: TFileName): String;
var
FileStream : TFileStream;
begin
FileStream:= TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
if FileStream.Size>0 then
begin
SetLength(Result, FileStream.Size);
FileStream.Read(Pointer(Result)^, FileStream.Size);
end;
finally
FileStream.Free;
end;
end;
Function TForm1.EncodeBase64(Arquivo : String) : String;
Var
Encoder64 : TIDEncoderMime;
Begin
Try
Encoder64 := TIDEncoderMime.Create (Nil);
Result := Encoder64.EncodeString(Arquivo);
Finally
Encoder64.Free;
End;
End;[/code] |
|
|
Voltar ao Topo |
|
 |
claudio.ferreira Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013 Mensagens: 667
|
Enviada: Sex Nov 15, 2013 10:28 am Assunto: |
|
|
EvertonLima escreveu: | Funcionou!
Apenas adicionei o Encode64.
Código: | meuHash := CalculaHashMD5Indy(meuArquivo);
[code]Function TForm1.CalculaHashMD5Indy(NomeArq : String) : String;
Var
idmd5 : TIdHashMessageDigest5;
Arq : String;
fs : TFileStream;
Begin
Arq := LoadFileToStr(NomeArq);
idmd5 := TIdHashMessageDigest5.Create;
try
result := idmd5.AsHex(idmd5.HashValue(EncodeBase64(Arq)));
finally
idmd5.Free;
end;
end;
function TForm1.LoadFileToStr(const FileName: TFileName): String;
var
FileStream : TFileStream;
begin
FileStream:= TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
if FileStream.Size>0 then
begin
SetLength(Result, FileStream.Size);
FileStream.Read(Pointer(Result)^, FileStream.Size);
end;
finally
FileStream.Free;
end;
end;
Function TForm1.EncodeBase64(Arquivo : String) : String;
Var
Encoder64 : TIDEncoderMime;
Begin
Try
Encoder64 := TIDEncoderMime.Create (Nil);
Result := Encoder64.EncodeString(Arquivo);
Finally
Encoder64.Free;
End;
End;[/code] |
|
Prezado EvertonLima, postei uma mensagem para voce no private message. _________________ Sistema SNGPC para farmácias
http://www.cmasistemas.com.br
Rastreabilidade de Medicamentos
https://www.sncm.com.br
Soluções em Delphi
https://delphisolutions.wordpress.com/
.
"E não sabendo que era impossível, foi lá e fez"
Mark Twain |
|
Voltar ao Topo |
|
 |
Cambiaghi Novato

Registrado: Quinta-Feira, 21 de Fevereiro de 2013 Mensagens: 57
|
Enviada: Qua Nov 20, 2013 6:52 am Assunto: |
|
|
Bom dia Prezados.
Como não tenho recebido email de notificação de novas postagens ( não sei porque ), não tinha mais acessado achando que isso aqui estava parado, e fiquei surpreso ao acessar hoje.
Quanto ao HASH, que bom que conseguiram chegar ao cálculo correto.
Eu respondi a um email dias atrás de um colega dizendo que nem tento mais calcular o HASH, passo um argumento qualquer como valor de hash, e pego o retornado pelo SNGPC para armazenar na minha base de dados.
Como existe uma validação pelo SNGPC do XML recebido, o HASH é inútil no meu ponto de vista, sendo que não é necessário comparar o que estou enviando com o que estão devolvendo, já que se o XML chegar corrompido lá, haverá um erro de tags incompletas.
Parabéns a todos os colegas, e faço minhas as palavras do Cláudio, "tem quem saiba resolver os problemas, ou de tanto tentar acaba descobrindo como, mas só vem aqui fazer perguntas.".
Abraços,
Fernando Luís Cambiaghi. |
|
Voltar ao Topo |
|
 |
Cambiaghi Novato

Registrado: Quinta-Feira, 21 de Fevereiro de 2013 Mensagens: 57
|
Enviada: Seg Nov 25, 2013 1:39 pm Assunto: Programa Mais Médicos |
|
|
Boa tarde pessoal.
Gostaria de saber como vocês estão fazendo com os receituários prescritos pelos médicos do programa mais médicos?
Para o SNGPC, a princípio ainda não enviaremos essas prescrições ( de acordo com a própria coordenadora no dia do encontro de desenvolvedores ).
E quanto ao aceite de tais receituários? Eles podem prescrever psicotrópicos e antibióticos?
Se aceitamos o receituário, começamos e ter divergências entre o saldo da farmácia e o saldo constante no SNGPC, visto que não podemos enviar a prescrição para eles.
Se alguém puder compartilhar algum conhecimento sobre o assunto, poderá ajudar a muitos aqui.
Atenciosamente,
Fernando Luís Cambiaghi |
|
Voltar ao Topo |
|
 |
michelbreyer Novato

Registrado: Terça-Feira, 1 de Dezembro de 2009 Mensagens: 25
|
Enviada: Sex Dez 06, 2013 9:39 am Assunto: Schema Incorreto |
|
|
Bom dia,
O GGTIN divulgou uma nota técnica informando que alterou o schema para que o sistema não aceite quantidades negativas, porém assim que realizaram essa alteração ao enviar as movimentações está aparecendo a seguinte mensagem:
[EA]The 'urn:sngpc-schema:quantidadeDeInsumoPorUnidadeFarmacotecnica' element has an invalid value according to its data type..
Verificando os schemas no site verifiquei que retornaram para 4 casas decimais, sendo que em agosto foi alterado para 6. (conforme nota: http://www.anvisa.gov.br/sngpc/21082013.html)
Alguém está com o mesmo problema ? Já tem alguma solução ?
Att,
Michel |
|
Voltar ao Topo |
|
 |
claudio.ferreira Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013 Mensagens: 667
|
Enviada: Ter Mai 06, 2014 6:24 pm Assunto: |
|
|
Prezados boa tarde,
Gostaria de anunciar aqui, lançamento recente de programa para envio de arquivos XML para o SNGPC, indicado para aqueles que não desenvolveram em
seus sistemas de escrituração, a transmissão via web-service e que por esse motivo indicam o hot-site do SNGPC para os farmacêuticos transmitirem seus arquivos.
Sabendo-se que o hot-site do SNGPC sofre constantes instabilidades, congestionamentos e erros de todo tipo, quem sofre e se stressam bastante são os farmacêuticos que não conseguem realizar seu trabalho a contento.
Não são poucos os sistemas de farmácia que ainda se utilizam do site do SNGPC para transmitir e verificar o resultado da validação do arquivo.
Pensando numa solução para esses casos, desenvovemos o SNGPC Transmissor, programa que transmite o XML e recebe o resultado da validação. O programa tem login pelo farmacêutico, transmite XML e ZIP, histórico de transmissões realizadas e o mais importante é GRATUITO para quem transmite 1 vez por semana.
No primeiro mês de uso tem transmissões liberadas todos os dias. Download e maiores informações : www.sngpcsoft.com.br
PS : Aceitamos algum tipo de parceria para venda em conjunto com seu software de escrituração (sob consulta) _________________ Sistema SNGPC para farmácias
http://www.cmasistemas.com.br
Rastreabilidade de Medicamentos
https://www.sncm.com.br
Soluções em Delphi
https://delphisolutions.wordpress.com/
.
"E não sabendo que era impossível, foi lá e fez"
Mark Twain |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|