GARANTIR DESCONTO

Fórum SNGPC A Promessa - de um sistema que algum dia irá funcionar #350237

07/12/2007

0

Depois de variados problemas com a finalização do inventário sem minha intervenção, já consegui enviar arquivos, só que eles (Anvisa) não validam os arquivos enviados. Retornam a mensagem que o arquivo é validado por volda de Meia-noite e se não for validado mande de novo o mesmo arquivo.
Só que eu mando de novo e novamente não é validado. Fica dificil testar o sistema desse jeito.

Alguém aí NÃO tem o mesmo problema ?


Claudiofsfs

Claudiofsfs

Responder

Posts

07/12/2007

Edilcimar

criei o xml, já efetuei o meu cadastro 3 vezes e até agora nem ao menos a senha recebi, e já tem 3 semanas (um cadastro por semana), fora email que enviei para eles


Responder

Gostei + 0

07/12/2007

Claudiofsfs

Edilcimar, acho que seus problemas estão só começando. Estou desde setembro esperando que validem o meu arquivo. o e-mail que eles divulgaram para solução de problemas não responde a esse questionamento, já mandei 2 vezes o mesmo e-mail e nada. Telefones não atendem. Estou no aguardo, vamos ver o que acontece...


Responder

Gostei + 0

07/12/2007

Edilcimar

Como já discuti aqui há muito tempo atrás, funcionário público é sanguessuga folgado, inútil e incompetente, só querem saber do dinheiro no fim do mes, mas trabalhar que é bom, isto nem pensar, afinal de contas se eles trabalhassem os órgãos públicos funcionariam!


Responder

Gostei + 0

07/12/2007

Aldus

Olá amigos,

Assim como vocês, sofri e muito com a inoperância desse ´Suporte ao Desenvolvedor SNGPC´. Por muitas e muitas vezes enviei e-mails, pois como disseram, telefone eles não atendem, eu cheguei a criar um programa e enviei cerca de 5000 e-mails, pra ver se eles se tocavam e notavam que havia aqui desenvolvedores que apenas querem fazer o eles criaram funcionar no usuário final. Recorri a amigos políticos, que tem grande contato com de´pu´tados federais e inclusive o prefeito da minha cidade, que é amigo da ideli salvati, senadora, a fim que pudessem intervir, pedindo que nos desse uma única atenção.

Eu estava quase ficando maluco, quando prorrogaram o prazo por 90 dias, por como sabem, inúmeros problemas no programa deles, foi como um calmante, pois ja estava quase pirando.

Depois dessa prorrogação, recebi um e-mail respondendo as minhas perguntas e finalmente hoje consegui validar o meu arquivo com sucesso.

Notei que o envio do arquivo via site, tem transmitir, depois validar.
Aí vc vai em relatórios e verifica status da transmissão e verifica as inconsistências, tive algumas e depois de corrigir ali apareceu Validação Executada ´Sim´ e Foi Aceito ´Sim´.

Finalmente consegui sucesso.
Apenas enviei um novo e-mail, perguntando se já posso instalar nos meus clientes para que eles possam transmitir ou se o sistema deles ainda está instável.

Se precisarem de ajuda, estou a disposição.

abraços

Mario


Responder

Gostei + 0

07/12/2007

Edilcimar

é claro que todo mundo que está fazendo isto está precisando de ajuda, a qual sempre será bem vinda, o grande problema é conseguir saber se o xml gerado está de acordo com a ´coisa´ que eles criaram!


Responder

Gostei + 0

07/12/2007

Claudiofsfs

Obrigado Mario pela sua postagem. É bom saber que alguém foi atendido por eles. Talzez um dia chegue a minha vez de ter o arquivo validado e também poder instalar o sistema nos meus clientes. Felizmente sou da Região Norte e o prazo aqui é até Abril. O que esses caras estão fazendo é tortura com o desenvolvedor que precisa implantar o sistema. Já pensei em mandar e-mail para o Presidente da Anvisa denunciando o setor de desenvolvimento deles.


Mudando de assunto, Voce sabia que tem um web-service que faz a consulta se o arquivo foi validado ? Mas pra variar só tem a documentação, pois fiz a chamada a ele e retornou dizendo que estava indisponível, não existia ou algo parecido.

Claudio


Responder

Gostei + 0

07/12/2007

Aldus

Olá amigos,

tenho um programa que mostra os dados contidos num xml com schema, posso enviá-los juntamente com um arquivo válido meu, aí vocês confrontam com a estrutura do de vcs.

Aguardo


Responder

Gostei + 0

15/12/2007

Edilcimar

Aleluia!
Aleluia!
Aleluia!
Finalmente, depois de mais de um mesl, a anvisa forneceu-me uma senha para testar o programa, após alguns pequenos detalhes, a ´coisa´ funcionou!


Responder

Gostei + 0

16/12/2007

Edilcimar

Um detalhe que não estou entendendo, se envio o arquivo pelo site da anvisa, ele passa sem nenhum problema, mas se tento enviar diretamente de dentro do meu programa tenho o seguinte erro:

Validação da Senha
Resposta: Erro desconhecido na tentativa de efetuar o login
Consulta de Envio do Arquivo
Resposta: Erro desconhecido na tentativa de efetuar o login

A única coisa que descobri é que durante o envio do arquivo pelo site deles dá o seguinte hash: 3621ede55f4ffb26365dcdc366a0e4a1
e o meu programa gera este hash: e138db7d6fc9d9f28d12cb47e9944299

Estou usando md5 e fazendo o seguinte para enviar o arquivo:

HashIdentificacao := MD5Print(MD5File(Cgc + ´.xml´));
Memo2.Lines.Clear;
Ws := GetsngpcSoap;
Memo2.Lines.Add(´Validação da Senha´);
Memo2.Lines.Add(´Hash: ´ + HashIdentificacao);
Try
...Comp := Ws.ValidarUsuario(Email, Senha);
Except
...Comp := ´Erro´;
End;
Memo2.Lines.Add(´Resposta: ´ + Comp);
Memo2.Lines.Add(#13 + 10 + 13 + 10);
Memo2.Lines.Add(´Consulta de Envio do Arquivo´);
Try
...Comp := Ws.EnviaArquivoSNGPC(Email, Senha, CGC + ´.xml´,HashIdentificacao);
Except
...Comp := ´Erro´;
End;
Memo2.Lines.Add(´Resposta: ´ + Comp);
Memo2.Lines.Add(13 + 10 + 13 + 10);
Memo2.Lines.Add(´F I M´);

O sistema de criação do hash eu copiei de um site e é o seguinte:

uses
Producao;
var
PADDING: MD5Buffer = (
$80, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00, $00, $00, $00, $00
);


{$R *.dfm}


function F(x, y, z: DWORD): DWORD;
begin
Result := (x and y) or ((not x) and z);
end;

function G(x, y, z: DWORD): DWORD;
begin
Result := (x and z) or (y and (not z));
end;

function H(x, y, z: DWORD): DWORD;
begin
Result := x xor y xor z;
end;

function I(x, y, z: DWORD): DWORD;
begin
Result := y xor (x or (not z));
end;

procedure rot(var x: DWORD; n: BYTE);
begin
x := (x shl n) or (x shr (32 - n));
end;

procedure FF(var a: DWORD; b, c, d, x: DWORD; s: BYTE; ac: DWORD);
begin
inc(a, F(b, c, d) + x + ac);
rot(a, s);
inc(a, b);
end;

procedure GG(var a: DWORD; b, c, d, x: DWORD; s: BYTE; ac: DWORD);
begin
inc(a, G(b, c, d) + x + ac);
rot(a, s);
inc(a, b);
end;

procedure HH(var a: DWORD; b, c, d, x: DWORD; s: BYTE; ac: DWORD);
begin
inc(a, H(b, c, d) + x + ac);
rot(a, s);
inc(a, b);
end;

procedure II(var a: DWORD; b, c, d, x: DWORD; s: BYTE; ac: DWORD);
begin
inc(a, I(b, c, d) + x + ac);
rot(a, s);
inc(a, b);
end;

// -----------------------------------------------------------------------------------------------

// Encode Count bytes at Source into (Count / 4) DWORDs at Target
procedure Encode(Source, Target: pointer; Count: longword);
var
S: PByte;
T: PDWORD;
I: longword;
begin
S := Source;
T := Target;
for I := 1 to Count div 4 do begin
T^ := S^;
inc(S);
T^ := T^ or (S^ shl 8);
inc(S);
T^ := T^ or (S^ shl 16);
inc(S);
T^ := T^ or (S^ shl 24);
inc(S);
inc(T);
end;
end;

// Decode Count DWORDs at Source into (Count * 4) Bytes at Target
procedure Decode(Source, Target: pointer; Count: longword);
var
S: PDWORD;
T: PByte;
I: longword;
begin
S := Source;
T := Target;
for I := 1 to Count do begin
T^ := S^ and $ff;
inc(T);
T^ := (S^ shr 8) and $ff;
inc(T);
T^ := (S^ shr 16) and $ff;
inc(T);
T^ := (S^ shr 24) and $ff;
inc(T);
inc(S);
end;
end;

// Transform State according to first 64 bytes at Buffer
procedure Transform(Buffer: pointer; var State: MD5State);
var
a, b, c, d: DWORD;
Block: MD5Block;
begin
Encode(Buffer, @Block, 64);
a := State[0];
b := State[1];
c := State[2];
d := State[3];
FF (a, b, c, d, Block[ 0], 7, $d76aa478);
FF (d, a, b, c, Block[ 1], 12, $e8c7b756);
FF (c, d, a, b, Block[ 2], 17, $242070db);
FF (b, c, d, a, Block[ 3], 22, $c1bdceee);
FF (a, b, c, d, Block[ 4], 7, $f57c0faf);
FF (d, a, b, c, Block[ 5], 12, $4787c62a);
FF (c, d, a, b, Block[ 6], 17, $a8304613);
FF (b, c, d, a, Block[ 7], 22, $fd469501);
FF (a, b, c, d, Block[ 8], 7, $698098d8);
FF (d, a, b, c, Block[ 9], 12, $8b44f7af);
FF (c, d, a, b, Block[10], 17, $ffff5bb1);
FF (b, c, d, a, Block[11], 22, $895cd7be);
FF (a, b, c, d, Block[12], 7, $6b901122);
FF (d, a, b, c, Block[13], 12, $fd987193);
FF (c, d, a, b, Block[14], 17, $a679438e);
FF (b, c, d, a, Block[15], 22, $49b40821);
GG (a, b, c, d, Block[ 1], 5, $f61e2562);
GG (d, a, b, c, Block[ 6], 9, $c040b340);
GG (c, d, a, b, Block[11], 14, $265e5a51);
GG (b, c, d, a, Block[ 0], 20, $e9b6c7aa);
GG (a, b, c, d, Block[ 5], 5, $d62f105d);
GG (d, a, b, c, Block[10], 9, $2441453);
GG (c, d, a, b, Block[15], 14, $d8a1e681);
GG (b, c, d, a, Block[ 4], 20, $e7d3fbc8);
GG (a, b, c, d, Block[ 9], 5, $21e1cde6);
GG (d, a, b, c, Block[14], 9, $c33707d6);
GG (c, d, a, b, Block[ 3], 14, $f4d50d87);
GG (b, c, d, a, Block[ 8], 20, $455a14ed);
GG (a, b, c, d, Block[13], 5, $a9e3e905);
GG (d, a, b, c, Block[ 2], 9, $fcefa3f8);
GG (c, d, a, b, Block[ 7], 14, $676f02d9);
GG (b, c, d, a, Block[12], 20, $8d2a4c8a);
HH (a, b, c, d, Block[ 5], 4, $fffa3942);
HH (d, a, b, c, Block[ 8], 11, $8771f681);
HH (c, d, a, b, Block[11], 16, $6d9d6122);
HH (b, c, d, a, Block[14], 23, $fde5380c);
HH (a, b, c, d, Block[ 1], 4, $a4beea44);
HH (d, a, b, c, Block[ 4], 11, $4bdecfa9);
HH (c, d, a, b, Block[ 7], 16, $f6bb4b60);
HH (b, c, d, a, Block[10], 23, $bebfbc70);
HH (a, b, c, d, Block[13], 4, $289b7ec6);
HH (d, a, b, c, Block[ 0], 11, $eaa127fa);
HH (c, d, a, b, Block[ 3], 16, $d4ef3085);
HH (b, c, d, a, Block[ 6], 23, $4881d05);
HH (a, b, c, d, Block[ 9], 4, $d9d4d039);
HH (d, a, b, c, Block[12], 11, $e6db99e5);
HH (c, d, a, b, Block[15], 16, $1fa27cf8);
HH (b, c, d, a, Block[ 2], 23, $c4ac5665);
II (a, b, c, d, Block[ 0], 6, $f4292244);
II (d, a, b, c, Block[ 7], 10, $432aff97);
II (c, d, a, b, Block[14], 15, $ab9423a7);
II (b, c, d, a, Block[ 5], 21, $fc93a039);
II (a, b, c, d, Block[12], 6, $655b59c3);
II (d, a, b, c, Block[ 3], 10, $8f0ccc92);
II (c, d, a, b, Block[10], 15, $ffeff47d);
II (b, c, d, a, Block[ 1], 21, $85845dd1);
II (a, b, c, d, Block[ 8], 6, $6fa87e4f);
II (d, a, b, c, Block[15], 10, $fe2ce6e0);
II (c, d, a, b, Block[ 6], 15, $a3014314);
II (b, c, d, a, Block[13], 21, $4e0811a1);
II (a, b, c, d, Block[ 4], 6, $f7537e82);
II (d, a, b, c, Block[11], 10, $bd3af235);
II (c, d, a, b, Block[ 2], 15, $2ad7d2bb);
II (b, c, d, a, Block[ 9], 21, $eb86d391);
inc(State[0], a);
inc(State[1], b);
inc(State[2], c);
inc(State[3], d);
end;

// -----------------------------------------------------------------------------------------------

// Initialize given Context
procedure MD5Init(var Context: MD5Context);
begin
with Context do begin
State[0] := $67452301;
State[1] := $efcdab89;
State[2] := $98badcfe;
State[3] := $10325476;
Count[0] := 0;
Count[1] := 0;
ZeroMemory(@Buffer, SizeOf(MD5Buffer));
end;
end;

// Update given Context to include Length bytes of Input
procedure MD5Update(var Context: MD5Context; Input: pChar; Length: longword);
var
Index: longword;
PartLen: longword;
I: longword;
begin
with Context do begin
Index := (Count[0] shr 3) and $3f;
inc(Count[0], Length shl 3);
if Count[0] < (Length shl 3) then inc(Count[1]);
inc(Count[1], Length shr 29);
end;
PartLen := 64 - Index;
if Length >= PartLen then begin
CopyMemory(@Context.Buffer[Index], Input, PartLen);
Transform(@Context.Buffer, Context.State);
I := PartLen;
while I + 63 < Length do begin
Transform(@Input[I], Context.State);
inc(I, 64);
end;
Index := 0;
end else I := 0;
CopyMemory(@Context.Buffer[Index], @Input[I], Length - I);
end;

// Finalize given Context, create Digest and zeroize Context
procedure MD5Final(var Context: MD5Context; var Digest: MD5Digest);
var
Bits: MD5CBits;
Index: longword;
PadLen: longword;
begin
Decode(@Context.Count, @Bits, 2);
Index := (Context.Count[0] shr 3) and $3f;
if Index < 56 then PadLen := 56 - Index else PadLen := 120 - Index;
MD5Update(Context, @PADDING, PadLen);
MD5Update(Context, @Bits, 8);
Decode(@Context.State, @Digest, 4);
ZeroMemory(@Context, SizeOf(MD5Context));
end;

// -----------------------------------------------------------------------------------------------

// Create digest of given Message
function MD5String(M: string): MD5Digest;
var
Context: MD5Context;
begin
MD5Init(Context);
MD5Update(Context, pChar(M), length(M));
MD5Final(Context, Result);
end;

// Create digest of file with given Name
function MD5File(N: string): MD5Digest;
var
FileHandle: THandle;
MapHandle: THandle;
ViewPointer: pointer;
Context: MD5Context;
begin
MD5Init(Context);
FileHandle := CreateFile(pChar(N), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN, 0);
if FileHandle <> INVALID_HANDLE_VALUE then try
MapHandle := CreateFileMapping(FileHandle, nil, PAGE_READONLY, 0, 0, nil);
if MapHandle <> 0 then try
ViewPointer := MapViewOfFile(MapHandle, FILE_MAP_READ, 0, 0, 0);
if ViewPointer <> nil then try
MD5Update(Context, ViewPointer, GetFileSize(FileHandle, nil));
finally
UnmapViewOfFile(ViewPointer);
end;
finally
CloseHandle(MapHandle);
end;
finally
CloseHandle(FileHandle);
end;
MD5Final(Context, Result);
end;

// Create hex representation of given Digest
function MD5Print(D: MD5Digest): string;
var
I: byte;
const
Digits: array[0..15] of char =
(´0´, ´1´, ´2´, ´3´, ´4´, ´5´, ´6´, ´7´, ´8´, ´9´, ´a´, ´b´, ´c´, ´d´, ´e´, ´f´);
begin
Result := ´´;
for I := 0 to 15 do Result := Result + Digits[(D[I] shr 4) and $0f] + Digits[D[I] and $0f];
end;

// -----------------------------------------------------------------------------------------------

// Compare two Digests
function MD5Match(D1, D2: MD5Digest): boolean;
var
I: byte;
begin
I := 0;
Result := TRUE;
while Result and (I < 16) do begin
Result := D1[I] = D2[I];
inc(I);
end;
end;

Alguém sabe explicar o porquê deste erro?


Responder

Gostei + 0

19/12/2007

Edilcimar

sobe


Responder

Gostei + 0

21/12/2007

Edilcimar

ninguém conhece um outro meio de fazer md5 para que o meu hash e o da anvisa fiquem iguais?


Responder

Gostei + 0

21/12/2007

Claudiofsfs

Eu tenho esse mesmo codigo de Hash MD5 que voce tem e no meu sistema funcionou. Veja se por acaso tem (ou não tem) um caracter de final de arquivo no fim da string que quando comparado ao deles pode dar diferença.

Claudio


Responder

Gostei + 0

21/12/2007

Edilcimar

Este caracter de fim de arquivo está no fim de qual string?
Eu testei com outros geradores de hash e o número bate com o meu!
O meu envio de arquivo é:
HashIdentificacao := MD5Print(MD5File(ArqPedido));
onde ArqPedido é
ArqPedido := ´Xml\´ + IntToStr(Ano) + IntToStr(Mes) + IntToStr(Dia) + ´.xml´;


Responder

Gostei + 0

23/12/2007

Bebeketo

Puxa que sorte voces estao tendo... Comecei a desenvolver o programa aqui para o Goias e sabe o que aconteceu? Um FDP vendeu seu programa para uma grande distribuidora de medicamentos e esta por sua vez...tchan, tchan, tchan...está distribuindo gratuitamente para as drogarias!!


Responder

Gostei + 0

23/12/2007

Edilcimar

EMS!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar