quinta-feira, 14 de julho de 2011

Bloco VII do PAF-ECF

Esse bloco serve para que seja identificado na visualização dos arquivos eletrônicos quais os registros que sofreram alterações que não foram feitas pelo PAF-ECF, ou seja, se algum registro for alterado via banco de dados ou por qualquer outro programa que não seja o PAF-ECF é para ser identificado com o caracter "?" conforme o requisito "b".

Abaixo irei mostrar como implementei esse requisito utilizando o ER-PAF-ECF versão 01.07:


BLOCO VII
DADOS TÉCNICOS PARA GERAÇÃO DA ASSINATURA DIGITAL DO
REGISTRO TIPO EAD
ANEXO VIII DO ATO COTEPE 06/08

REQUISITO – Observações – “b”

b) A alteração de dados no arquivo eletrônico assinado digitalmente deverá ser evidenciada,
apenas  nos  registros  alterados,  mediante  a  substituição  de  brancos  pelo  caractere  “?”  no
campo:
b.1) “Modelo do ECF” no caso do registro tipo D2 constante no Anexo III;
b.2) “Unidade” no caso do registro tipo E2 constante no Anexo IV;
b.3) “Unidade” no caso do registro tipo P2 constante no Anexo V;
b.4)  “Modelo  do  ECF”  no  caso  dos registros  tipo  R01,  R02, R03,  R04, R05,  R06  e  R07
constantes no Anexo VI;
b.5) “Tipo de documento” no caso do registro tipo T2 constante no Anexo VII.


Vou fazer um exemplo da geração do arquivo E2 (Estoque) para demostrar a lógica que utilizei:

No banco de dados do PAF-ECF criei um campo chamado "chave" no final de todas as tabelas envolvidas diretamente na construção dos arquivos eletrônicos do requisito "b". Esse campo "chave" guarda a combinação de todos os dados do registro criptografado (estou utilizando o algoritmo de criptografia do MD5, mas nesse caso pode utilizar qualquer algoritmo).

Vamos tomar como base a estrutura da tabela de produto abaixo:



Toda vez que inserir ou alterar os registros nessa tabela é feito a criptografia dos campos desse registro e o resultado é colocado no campo chave. Na prática, é gerar a criptografia da combinação dos campos (Codigo, Descricao, Unidade, Estoque e DataEstoque) e colocar o resultado no campo Chave, toda vez que incluir ou alterar o produto.

Incluimos o seguinte produto:



Na geração dos arquivos eletrônicos é feito uma validação desse campo chave para verificar se os dados criptografado batem com o dado do campo chave. Se não bater é porque o registro foi modificado fora do PAF-ECF, nesse caso irá ser colocado o caracter "?".

Quando geramos o arquivo eletrônico de estoque, sem modificar esse registro fora do PAF-ECF, ele irá ficar assim:

E21137675300011200000000001001Blusa                                             Un    +00000000020110518


Quando geramos o arquivo eletrônico de estoque modificando esse registro fora do PAF-ECF ele irá ficar assim:

E21137675300011200000000001001Blusa                                             ??????+00001000020110518

Nesse caso alterei o valor do estoque, via banco de dados, para 100.



E assim utilize essa lógica para as demais tabelas e os demais tipos de arquivos eletrônicos.

Boa Sorte !!


7 comentários:

  1. Ola! Guilherme, você poderia postar como eu implemento essas rotina de gravação e validação do MD5 no delphi.

    joaoagrainformatica@gmail.com

    ResponderExcluir
  2. João,

    Estou utilizando o aplicativo FSum.exe, que você pode encontrar juntamente com sua documentação no site: http://www.slavasoft.com/fsum.

    Basicamente é só utilizar o FSum passando seus parâmetros pela função Shellexecute do delphi.

    Mostro um exemplo no post: Requisito IX do PAF-ECF

    ResponderExcluir
  3. Entendi Guilherme, no entanto pelo o que eu interpretei as funções do Requisito IX do PAF-ECF estão atendendo a legislação perfeitamente. Só restou a seguinte consideração: no meu caso eu já consegui implementar a função para gravar no campo (chave) de cada tabela envolvida o MD5, qualquer alteração em algum campo da tabela envolvida é gerado um novo MD5 Referente a todos do campos da tabela inclusive os modificados e gravado esse MD5 no campo Chave; ate aqui tudo certo não tenho duvida. Agora vem a duvida qual rotina que devemos implementar para verificar as alterações comparando o MD5 no momento de gerar os arquivos textos do menu fiscal. Para isso, no momento de geração dos dados solicitados em cada anexo do ato cotepe 06/08 que se refere nos testes do roteiro, qual rotina devo utilizar para comparar se houve modificação no registro da tabela, por Ex. nos campos “Modelo do ECF” e ou “Unidade”,e automaticamente se houve modificação substituir pelo caractere (?)?

    ResponderExcluir
  4. João,

    Nesse caso no momento da geração dos arquivos eletrônicos, para cada registro da sua tabela que será incluído no arquivo eletrônico você gera novamente a criptografia dos campos e compara com o campo chave. Se o dado criptografado for diferente do campo chave então é porque o registro foi modificado fora do seu sistema, nesse caso você irá substituir o campo específico, dependendo do arquivo, pelos caracteres "????". Com essa verificação registro a registro a geração vai ficar mais lenta, no entanto ainda em um tempo aceitável pelo usuário. Essa criptografia não necessariamente tem que ser com o algoritmo do MD5. Você pode utilizar qualquer algoritmo para fazer essa criptografia, até porque ficaria melhor uma vez que para gerar o MD5 você precisará executar um aplicativo a parte.

    ResponderExcluir
  5. Ola Guilherme. Parabens pela iniciativa.

    Olha so, eu fiz a logica da mesma forma que voce, ou seja: calculando o hash da linha - no caso eu acrescentei uma palavra no inicio e uma no final (que funciona como uma senha), justamente para adicionar um nivel a mais de dificuldade.

    A dificuldade que estamos tendo agora eh exatamente no bloco VII, mas na questao da inclusao/exclusao de itens. Ate o presente momento estamos compelidos a utilizar uma tabela secundaria para fazer as checagens.... Voce poderia dar uma luz de como voce fez?

    Abraco.

    Ramon Lopes
    Londrina.PR

    ResponderExcluir
  6. Olá Ramon, Obrigado pelos parabéns.

    A alternativa que utilizei foi baseada também em tabelas secundárias, já que se trata de um registro que não existe mais. Já que outras pessoas me perguntaram também postei hoje um arquivo dando uma dica na lógica desse procedimento.

    http://guilhermebragaf1.blogspot.com/2011/08/exclusao-de-dados-do-bloco-vii-do-paf.html

    Abraço

    ResponderExcluir
  7. Cara, ajudou pra caramba, Vlw

    ResponderExcluir