O trabalho da TecnoSpeed no EFD-Reinf é com sua mensageria, realizando a geração do XML a partir do TX2 (nosso padrão de arquivos de integração) e facilitando na recepção do retorno dos eventos trazendo de uma forma mais clara (e parseada) o retorno da receita.
O Componente EFD-Reinf da Tecnospeed é uma biblioteca contendo todos os métodos necessários para emitir os eventos que a receita exige. É a escolha ideal para quem pode consumir OCX e prefere manter todo o processo de mensageria dentro do próprio ambiente. Para utilizar o Componente em seu software, basta instanciá-lo em seu projeto, implementar chamadas para cada um dos métodos e configurá-los de acordo com sua necessidade.
- Criando TecnoAccount
- Instalar Componente EFD Reinf
- Instanciar Componente - Delphi, C# e VB6
- Configurando as propriedades
- Entendendo o fluxo de emissão
- Gerar arquivo de Integração
- Gerar/Assinar XML
- Enviar Evento
- Consultar Eventos
- Verificar Ocorrências
- Migrar para versão 2.0
Criando Tecnoaccount
O primeiro passo, é realizar a criação da sua Conta TecnoSpeed. Ela permite gerenciar as configurações e ferramentas para acessar os nossos produtos e serviços em um único lugar, de forma simples e fácil.
Utilizando a conta
Após se cadastrar, você poderá visualizar o seu Token. Juntamente com o seu CNPJ ou CPF, este Token será utilizado para se autenticar na maioria de nossos serviços.
O Token juntamente com o CNPJ ou CPF será utilizado no método ConfigurarSoftwareHouse, onde você deve passar ambos como parâmetro, eles também servem para autenticar a requisição caso utilize nossa API para o envio das informações.
Acesse a sua Conta TecnoSpeed >
Instalação Componente EFD Reinf
Após aprovação do pedido de adesão, em até 24 horas úteis, nossa equipe financeira irá realizar o faturamento e disponibilizar o Componente EFD-Reinf para download na Central do Cliente. Você pode acessar a Central do Cliente com os dados de acesso que você preencheu no formulário de registro (aquele que você preencheu um pouco antes de assinar o contrato).
Com o Componente já disponível, na aba lateral Download, clique no botão Baixar. Caso o download não inicie, desabilite o bloqueador de pop-ups do seu navegador.
O arquivo identificado com o nome INSTALADOR deverá ser utilizado no ambiente de desenvolvimento, ele possui os arquivos necessários para chamar os métodos dentro da sua IDE/editor de códigos, além dos arquivos necessários para a geração dos XML.
Já o arquivo identificado com o nome DEPENDÊNCIAS é utilizado no ambiente do cliente, possuindo apenas a OCX de utilização do componente (e as dll's necessárias) além dos arquivos necessários para a geração dos XML!
No ambiente de desenvolvimento
Para realizar a instalação do componente na maquina do desenvolvimento, basta realizar o download do arquivos identificado com o nome INSTALADOR, em seguida você deverá executá-lo e seguir os passos a baixo:
A primeira tela, trará a versão do componente e algumas recomendações, após verifica-las, basta clicar em avançar. Após isso, seleciona onde quer que deseja que os arquivos sejam salvos. Recomendamos deixar no diretório padrão "C:\Program Files\TecnoSpeed\Reinf" porém, você pode alterá-lo para que se ajuste a sua demanda. Feito isso, clique em avançar novamente.
Após esse passo, caso você utiliza o Delphi, deverá escolher qual a versão do mesmo para que seja feita a instalação da BPL correta, caso seja qualquer outra linguagem com a utilização da OCX basta clicar em avançar.
Caso você escolhe uma versão do Delphi superior ao Delphi 7, pode selecionar que o instalador adicione os diretório do componente a library path do Delphi, após isso, clique em avançar.
Aguarde a finalização da instalação.
E você está pronto para começar a utilização de componente EFD-Reinf da TecnoSpeed!
No ambiente do cliente
No ambiente onde o sistema for ser executado, devemos instalar a versão Dependencies, que é a versão Full reduzida, com apenas as DLLs necessárias para o componente funcionar.
Para instalá-la, basta executar o instalador e seguir as instruções na tela.
Para evitar que o usuário precise realizar alguma interação, é possível incorporar um comando na sua aplicação ou instalador. Existem dois comandos disponíveis: Silent e VerySilent. O comando Silent irá exibir a interface de instalação, mas não permitirá que o usuário interaja com o instalador. Por outro lado, o comando VerySilent não exibirá nenhuma interface ao usuário, a instalação será executada em segundo plano.
prompt> instalador.exe /silent
prompt> Instalador.exe /verysilent
Incluindo os arquivos no próprio instalador
O instalador das dependências apenas adiciona as DLLs onde ele é instalado. Caso não desejar utilizar o instalador no cliente, é possível incorporar as DLLs ao instalador do seu próprio sistema. Basta copiar ou registrar na pasta System32, caso o sistema seja 64 bits, e na pasta SysWOW64 para a versão de 32 bits do Windows.
DLLs que devem ser registradas:
- ReinfClientX.ocx
- ReinfGovX.ocx
DLLs que devem ser apenas copiadas:
- ssleay32.dll
- stdvcl40.dll
- libeay32.dll
- midas.dll
- msxml6.dll
- msxml6r.dll
Instanciar o Componente
Após a instalação do componente, é necessário instanciar a classe no projeto para fazer as modificações necessárias em suas propriedades e também utilizar os seus métodos.
Aqui iremos te mostrar passo a passo como instanciar a classe em três das linguagens, Delphi, C# e VB6.
Delphi
No Delphi há duas formas de instanciar o componente. Você pode arrastar os ícones do componente na barra de ferramentas para dentro do seu unit ou fazê-lo de forma manual, adicionando no uses do projeto:
uses
ReinfClientX_TLB
Em seguida é necessário criar as variáveis das classes, como no exemplo a baixo.
type
TForm1 = class(TForm)
public
Reinf : TspdReinfClientX;
Independente da forma com que você trouxe as classes ao projeto, agora você deve criar o objeto e direcioná-lo a uma variável:
Reinf := TspdReinfClientX.Create(nil);
VB6
Primeiramente, declare o objeto pertencente à classe que faz interação com os servidores da Sefaz
Public Reinf As ReinfClientX.spdReinfClientX
Após isso, já na inicialização do Fom, instancie o objeto dentro de uma nova variável.
Set Reinf = New ReinfClientX.spdReinfClientX
C#
No início do seu projeto, junto com as bibliotecas importadas, adicione as OCX da Tecnospeed
using spdReinfClientX
Após isso, instancie o objeto dentro de uma nova variável
ReinfClientX.spdReinfClientX Reinf = new ReinfClientX.spdReinfClientX();
Configurar Propriedades
O componente EFD-Reinf possui algumas propriedades que precisam estar configuradas para que seja possível realizar sua utilização de forma correta.
Temos um lista de todas as propriedades do componente.
Algumas dessas propriedades são obrigatórias para que seja possível utilizar o componente. São elas:
- Ambiente
- CpfCnpjEmpregador
- DiretorioEsquemas
- DiretorioTemplates
- NomeCertificado ou CaminhoCertificado e SenhaCertificado
- VersaoManual
Lembrando que é necessário utilizar o método ConfigurarSoftwareHouse, onde você passa o CNPJ e Token cadastrados em nossa Conta TecnoSpeed.
Utilizando Proxy
Caso o seu cliente possua uma rede com proxy, ele pode adotar duas abordagens:
É possível adicionar a rota da TecnoSpeed (https://api.tecnospeed.com.br) dentro das urls que tem permissão ou configurar as propriedades: ProxyUsuario, ProxyServidor e ProxySenha para que o componente tenha permissão de enviar e receber informações.
Nome Certificado e Versão Manual
Ambas as propriedades recebem valores String, porém, o valor delas é retornando por um método do nosso componente, o qual você pode utilizar para facilitar a configuração do mesmo.
O método ListarCertificados retorna uma lista com o nome de todos os certificados instalados no usuário atual da maquina. É importante que a instalação tenha ocorrido corretamente (principalmente com certificado A3 [Smart card]) caso ocorra problemas com o certificado A3 ou com o A1 (arquivo .pfx), remova o certificado e instale novamente. Com essa lista você pode selecionar e configurar o certificado que desejar para a propriedade NomeCertificado.
No caso dos certificados A1, é possível configurar as propriedades CaminhoCertificado e SenhaCertificado, nesse caso não é necessária a instalação do certificado na maquina.
No caso da propriedade VersaoManual existe o método ListarVersaoManual, o qual retorna da nossa API as versão válidas que a receita está utilizando. Esse método também retorna uma lista de versões que facilita para a escolha e configuração da propriedade VersaoManual.
Fluxo ideal da emissão da EFD-Reinf
Para facilitar os retorno dos eventos já processados pela receita, a TecnoSpeed armazena as informações de envio e consulta em uma banco de dados para que seja possível o retorno mais rápido desses eventos.
Todo o processo de comunicação com a receita (envio e retorno dos eventos) é feito através da API da TecnoSpeed (exceto o evento R-2099, onde a comunicação é feita diretamente com a receita) para que consuma o minimo de recursos possíveis das maquinas de seus clientes.
O fluxo de emissão do EFD-Reinf é bem simples, após realizar toda a configuração do componente, você irá gerar o xml, assina-lo e envia-lo. Após o envio do lote, a TecnoSpeed retorna um ID de Lote que identifica seu lote em nosso servidor.
Feito isso, a receita irá fazer todas as validações necessárias no lote e nos eventos e após o fim da validação, retornar com o Recibo (em caso de autorização) ou com as ocorrências do lote/evento para que seja possível analisar e ajustar os erros.
É necessário enviar uma consulta do ID de Lote retornado no envio, para saber se o lote foi autorizado ou não. Somente com esta consulta você terá o resultado do processamento.
Todos esses passos são realizados através do nosso componente, e veremos tudo isso de forma mais detalhada.
Gerar Arquivo de Integração
Com o componente configurado é possível começar a geração dos eventos da receita.
A TecnoSpeed criou um arquivo único de integração (TX2), onde as mudanças de leiaute na receita influencia de forma menos impactante no momento do desenvolvimento, evitando retrabalho e agilizando as atualizações entre versões de leiaute da receita
Existem algumas boas praticas na geração do TX2 que a TecnoSpeed recomenda, para o EFD-Reinf e indispensável colocar todos os valores monetários separados apenas pelo decimal e com a virgula "," .
A geração do arquivo se torna bem simples, sendo necessário seguir as regras da receita e realizar o preenchimento com as informações dos clientes.
Dicionário de Dados
Para gerar o arquivo de integração utilizando um arquivo TX2, é necessário seguir o nosso Dicionário de Dados. Aqui nós veremos como ler as colunas deste dicionário, como iniciar e concluir um arquivo e como informar os grupos que podem se repetir.
O Dicionário de dados é uma tabela com os campos e algumas informações sobre cada campo. A tabela abaixo exemplifica o que significa cada coluna do dicionário.
Coluna | Função |
# | Identificador do campo, é utilizado na montagem do nome do campo no tx2. |
Registro/Campo | Nome do campo |
Registro Pai | Registro que identifica a hierarquia do campo em questão |
Tam | Tamanho máximo que o campo pode possuir |
Ocor | Ocorrência do campo/bloco, identifica os campos e blocos que são obrigatório ou não e quais podem ter múltiplas ocorrências. |
Desc | Descrição do campo e validação que pode ser aplicadas no mesmo. |
O nome do campo do Tx2 seria a junção do Registro/Campo_#, exemplo tpAmb_4.
Inicializando e finalizando um arquivo de integração
Para indicar o início e o fim dos dados da nota, é necessário utilizar a o comando INCLUIRRXXXX no começo e o comando SALVARRXXXX no final da inclusão dos campos. Entre estes comandos, os campos devem ser incluídos seguindo o formato exemplificado abaixo.
O XXXX é referente ao evento que está enviando, por exemplo, ao enviar o evento R-1000 você irá informar: INCLUIRR1000 e SALVARR1000
Exemplo da estrutura em TX2:
INCLUIRR1000
tpAmb_4=2
procEmi_5=1
verProc_6=1.0
tpInsc_8=1
...
SALVARR1000
Informando grupos que podem se repetir
Para indicar o início e o fim dos grupos que podem se repetir, é necessário utilizar a o comando INCLUIR(NOMEDOGRUPO) no começo e o comando SALVAR(NOMEDOGRUPO) no final do grupo. Entre estes comandos, os campos devem ser incluídos seguindo o formato exemplificado abaixo.
O (NOMEDOGRUPO) é referente ao grupo que vou repetir, por exemplo se terei varias ocorrencias do grupo SOFTHOUSE_27 eu colocarei: INCLUIRSOFTHOUSE_27 e SALVARSOFTHOUSE_27
Exemplo da estrutura em TX2:
INCLUIRSOFTHOUSE_27
cnpjSoftHouse_28=
nmRazao_29=
nmCont_30=
telefone_31=
email_32=
SALVARSOFTHOUSE_27
INCLUIRSOFTHOUSE_27
cnpjSoftHouse_28=
nmRazao_29=
nmCont_30=
telefone_31=
email_32=
SALVARSOFTHOUSE_27
Gerar/Assinar XML
Feito a geração do Tx2 agora precisamos gerar o XML, que será assinado e enviado para a receita!
A geração do XML é bem simples, basta passar ao método GerarXMLporTx2 o Tx2 como um parâmetro e ele irá retornar o XML gerado.
Para enviar um evento à Receita, é necessário realizar uma assinatura digital do XML. Esta assinatura é realizada utilizando um Certificado Digital.
Informando o nome do Certificado Digital
Para selecionar o Certificado Digital que será utilizado na assinatura, basta informar o nome do certificado (esta identificação que o método ListarCertificados retornou) na propriedade NomeCertificado.
Para configurar a propriedade, é possível utilizar um arquivo de configuração (.ini) ou configurar através do código fonte. O artigo Configurando as propriedades detalha o funcionamento das propriedades.
Realizando a assinatura do XML
Para assinar o XML de envio, é necessário utilizar o método AssinarEvento. Como parâmetro, é necessário informar o XML sem assinatura como string. O método retornará o mesmo XML passado como parâmetro na função, porém ele terá as tags de assinatura em seu conteúdo.
Enviar Evento
Para enviar um evento a Receita é necessário possuir o XML gerado e assinado, feitos na etapa anterior. Basta passar o xml para o método EnviaLoteEventos.
Feito isso você recebera o id de lote e poderá realizar a consulta do evento para obter o retorno da receita.
Consultar Eventos
Com a consulta dos eventos é possível verificar o retorno da receita bem como o XML enviado e o XML de retorno.
A forma mais comum de consultar os eventos é utilizando o Id de lote (que é retornado no envio do evento), também é possível consultar os eventos através do id do evento e do recibo. Veja a diferença deles em nosso post!
A consulta permite também que você verifique o retorno dos eventos totalizadores:
Para recepcionar os seus valores de forma mais fácil, a TecnoSpeed parseia os dados do evento, você pode verificar um exemplo da consulta em nossas demos disponibilizadas no GitHub.
Verificar Ocorrências
Quando você receber o retorno da consulta do lote é possível que ele tenha retornado com ocorrências, essas ocorrências, indicam erros no arquivo, tais erros podem ser corrigidos para que o lote seja enviado novamente.
Existem 2 tipos de ocorrências, as ocorrências do lote e do evento.
Ocorrência de Lote
É possível verificar se tiveram ocorrências no lote através do CountOcorrencias, ele retornará a quantidade de ocorrências no lote caso existe, é possível verificar um exemplo de uso em nosso post referente a consulta dos eventos.
Ocorrência de Evento
Também é possível verificar, nos casos de erros no evento, as ocorrências do evento. o Count dentro da classe IspdRetConsultarLoteItem possui a contagem de ocorrências caso existam, e através dela podemos fazer o laço para verificar todas as ocorrências geradas, temos um exemplo em código em nosso post de consulta dos eventos.
Correções de Informações
No EFD-Reinf é possível realizar a correção de informações já enviadas e a exclusão de eventos que foram enviados erroneamente. Para isso temos as alterações e exclusões dos eventos. Eles são diferentes para os eventos iniciais e de tabela para com os demais eventos.
Alteração Eventos R-1000 e R-1070
Para realizar uma retificação dos eventos R-1000 e R-1070 é necessário utilizar a Tag ALTERAR no lugar da Tag INCLUIR, conforme exemplo de ambos os eventos.
É importante lembrar que os campos de identificação devem ser enviado igual ao do evento que foi previamente autorizado. Os campos de identificação são os campos que não podem se repetir em mais de um evento, geralmente são os primeiros 3 grupo e estão identificados com as 3 tags, INCLUIR, ALTERAR e EXCLUIR.
Exemplo:
Para alterar a data de validade desses eventos é necessário informar os campos:
- R-1000
- iniValid_36
- fimValid_37
- R-1070
- iniValid_28
- fimValid_29
Exemplo
Se você enviar o seguinte arquivo:
INCLUIRR1000
tpAmb_4=2
procEmi_5=1
verProc_6=1.0
tpInsc_8=1
nrInsc_9=08187168
iniValid_13=2017-10
fimValid_14=
classTrib_16=01
indEscrituracao_17=0
indDesoneracao_18=1
indAcordoIsenMulta_19=0
indSitPJ_20=0
nmCtt_22=Nome do Contato Teste
cpfCtt_23=12345678909
foneFixo_24=1123452345
foneCel_25=
email_26=
ideEFR_34=
cnpjEFR_35=
INCLUIRSOFTHOUSE_27
cnpjSoftHouse_28=26764821000198
nmRazao_29=Nome Razao Teste
nmCont_30=Nome Teste
telefone_31=1234567897
email_32=email.teste@gmail.com
SALVARSOFTHOUSE_27
SALVARR1000
E precisar incluir ou alterar as datas de validade do mesmo, você irá enviar o arquivo:
ALTERARR1000
tpAmb_4=2
procEmi_5=1
verProc_6=1.0
tpInsc_8=1
nrInsc_9=08187168
iniValid_13=2017-10
fimValid_14=
classTrib_16=01
indEscrituracao_17=0
indDesoneracao_18=1
indAcordoIsenMulta_19=0
indSitPJ_20=0
nmCtt_22=Nome do Contato Teste
cpfCtt_23=12345678909
foneFixo_24=1123452345
foneCel_25=
email_26=
ideEFR_34=
cnpjEFR_35=
INCLUIRSOFTHOUSE_27
cnpjSoftHouse_28=26764821000198
nmRazao_29=Nome Razao Teste
nmCont_30=Nome Teste
telefone_31=1234567897
email_32=eamil.teste@gmail.com
SALVARSOFTHOUSE_27
iniValid_36=2017-09
fimValid_37=2017-11
SALVARR1000
*Neste exemplo os campos: tpAmb_4, procEmi_5, verProc_6, tpInsc_8, nrInsc_9, iniValid_13, fimValid_14 são utilizados para a identificação do evento pela receita, logo, devem ser iguais ao evento autorizado.
Caso precisa apenas alterar alguma informação, como o classTrib_16 você pode enviar o arquivo da seguinte forma:
ALTERARR1000
tpAmb_4=2
procEmi_5=1
verProc_6=1.0
tpInsc_8=1
nrInsc_9=08187168
iniValid_13=2017-10
fimValid_14=
classTrib_16=11
indEscrituracao_17=0
indDesoneracao_18=1
indAcordoIsenMulta_19=0
indSitPJ_20=0
nmCtt_22=Nome do Contato Teste
cpfCtt_23=12345678909
foneFixo_24=1123452345
foneCel_25=
email_26=
ideEFR_34=
cnpjEFR_35=
INCLUIRSOFTHOUSE_27
cnpjSoftHouse_28=26764821000198
nmRazao_29=Nome Razao Teste
nmCont_30=Nome Teste
telefone_31=1234567897
email_32=eamil.teste@gmail.com
SALVARSOFTHOUSE_27
SALVARR1000
Alteração Eventos R-2010 a R-2060 e R-3010
Para os eventos periódicos e não periódicos é necessário enviar um novo evento com as alterações preenchendo os campos indRetif_4 e nrRecibo_5.
O campo indRetif_4 deve ir com o valor 2, indicando ser uma retificação. O campo nrRecibo_5 deverá conter o número de recibo do evento autorizado que será retificado.
Exemplo
Regras a considerar para a geração do Tx2
INCLUIRR2040
indRetif_4=2
nrRecibo_5=127309-08-2010-1809-128409
perApur_6=2017-11
tpAmb_7=2
procEmi_8=1
verProc_9=1.0
tpInsc_11=1
nrInsc_12=08187168
tpInscEstab_14=1
nrInscEstab_15=08187168000160
INCLUIRRECURSOSREP_16
cnpjAssocDesp_17=26764821000198
vlrTotalRec_18=100,00
vlrTotalRet_19=50,00
vlrTotalNRet_20=
INCLUIRINFOPROC_31
tpProc_21=
nrProc_22=
codSusp_23=
vlrNRet_29=
SALVARINFOPROC_31
INCLUIRINFORECURSO_25
tpRepasse_26=5
vlrBruto_27=100,00
vlrRetApur_28=50,00
descRecurso_30=Teste Evento
SALVARINFORECURSO_25
SALVARRECURSOSREP_16
SALVARR2040
Exclusão Eventos R-1000 e R-1070
Para realizar uma exclusão dos eventos R-1000 e R-1070 é necessário utilizar a Tag EXCLUIR no lugar da Tag INCLUIR, conforme exemplo de ambos os eventos.
Exemplo
EXCLUIRR1000
tpAmb_4=2
procEmi_5=1
verProc_6=1.0
tpInsc_8=1
nrInsc_9=08187168
iniValid_13=2017-10
fimValid_14=
SALVARR1000
Onde você estará informando apenas os dados de localização do evento. Esses dados devem ser os mesmo do arquivo que foi autorizado.
Exclusão Eventos R-2010 a R-2060 e R-3010
Para os eventos periódicos e não periódicos é necessário enviar o evento R-9000 - Exclusão de Eventos.
Comentários
0 comentário
Por favor, entre para comentar.