Business - Automação Comercial

SIntegra: Entendendo e implementando!

Creio que muitos de vocês leitores, assim como eu, venham sendo constantemente abordados por seus clientes a respeito da obrigatoriedade de seus respectivos sistemas satisfazerem à legislação do SIntegra.

por Victory Fernandes



Creio que muitos de vocês leitores, assim como eu, venham sendo constantemente abordados por seus clientes a respeito da obrigatoriedade de seus respectivos sistemas satisfazerem à legislação do SIntegra.

Assim como há algum tempo atrás houve uma onda acerca da obrigatoriedade dos emissores de cupom fiscal - ECF, existe uma tendência cada vez maior por parte da Federação em cobrar das empresas que as mesmas estejam adaptadas ao sistema do SIntegra.

Em amboso os casos, cabe a nós desenvolvedores, a compreensão e adaptação dos aplicativos de nossos clientes.

Tentando facilitar e agilizar este processo de implementação e adaptação, venho por meio deste artigo apresentar características gerais do SIntegra bem como uma solução de implementação rápida e segura do mesmo, a SIntegra32Dll.dll.

O que é o Sintegra?

O Sistema Integrado de Informações sobre Operações Interestaduais com Mercadorias e Serviços - SIntegra, foi criado visando o controle informatizado das operações de entrada e saída interestaduais realizadas pelos contribuintes do ICMS.

Sendo o SIntegra obrigatório a todos os contribuintes que emitam documento fiscal por processamento de dados (Notas Fiscais ou Cupons Fiscais) e/ou façam a escrituração de Livro Fiscal por processamento de dados, existe a necessidade da adaptação de grande parte dos softwares comerciais, para que atendam à nova legislação.

O SIntegra é descrito no Convênio ICMS 57/95, que define quem é considerado contribuinte usuário de sistema de processamento eletrônico de dados, disciplina as obrigações a serem cumpridas por estes contribuintes e estabelece o padrão de arquivo magnético para entrega ao Fisco.

Entendendo o Arquivo do SIntegra

Em termos práticos o arquivo do SIntegra pode ser resumido, do ponto de vista do desenvolvedor, como um arquivo de texto formatado segundo um padrão pre-definido, onde cada linha do arquivo corresponde a um Registro, que contém vários campos, também pre-definidos de acordo com o tipo de registro. Registros e campos estes oriundos das informações contidas nos documentos fiscais que devem ser validados pelo Programa Validador antes de serem entregues ao Fisco.

Existe uma série de registros disponíveis para serem adicionados no arquivo, sendo que cada um deles tem suas características, aplicações e requisitos. A exemplo:

REGISTRO 10:
"Mestre do Estabelecimento - Indentifição do Estabelecimento informante" é um registro obrigatório a todo e qualquer arquivo do SIntegra, e contém dados sobre a quem pertence aquele arquivo, como CGC, IE, e Endereço do estabelecimento informante.

REGISTRO 11:
"Dados complementares do informante" é um registro obrigatório a todo e qualquer arquivo do SIntegra, e contém dados complementares sobre a quem pertence aquele arquivo, como Telefone, Bairro, e CEP do estabelecimento informante

REGISTRO 50:
Este registro deverá ser composto por contribuinte do ICMS, obedecendo a sistemática semelhante à da escrituração dos livros Registro de Entradas e Registro de Saída

REGISTRO 51:
Este registro deverá ser composto somente por contribuintes do IPI, obedecendo a sistemática semelhante à da escrituração dos livros Registro de Entradas e Registro de Saídas

Estes são alguns exemplos de registros e suas aplicações, no entanto, é impressindível para a implementação do SIntegra, seja utilizando a SIntegra32Dll.dll ou não, que o desenvolvedor leia atentamente a documentação do Convênio ICMS 57/95 que dicerta sobre o SIntegra e toda sua sistemática.

Antes de questionar como deve ser o arquivo final do SIntegra emitido por seu cliente, é necessário que você conheça bem todos os Registros possíveis de serem adicionados a um arquivo do SIntegra. Só assim você será capaz de traçar as necessidades do seu cliente e definir quais dos registros o arquivo dele deve conter.

Entendendo um Registro do SIntegra

Como forma de exemplificar a confecção do arquivo magnético como um todo, vamos agora analisar a implementação do Registro 50.

O Convênio ICMS 57/95 indica que registro 50 deve ser gerado para cada um dos seguintes tipos de documentos fiscais:

  • Nota Fiscal, Modelo 1 ou 1-A (código 01) - Quanto ao ICMS
  • Nota Fiscal / Conta de Energia Elétrica - Modelo 6 (código 06),
  • Nota Fiscal de Serviço de Comunicação - Modelo 21
  • Nota Fiscal de Serviços de Telecomunicações - Modelo 22 (código 22)
sendo formatado de acordo com a tabela abaixo:

Nesta tabela, percebemos a ordenação dos campos do registro 50, bem como a quantidade de dígitos de cada campo e seu tipo de formatação, "X" alfanumérico e "N" numérico.

Os campos de formatação tipo "X" alfanumérico devem ser preenchidos com espaços em branco a direita, caso seu conteúdo não tenha o número de dígitos do campo especifico.

Os campos de formatação tipo "N" numérico devem ser preenchidos com zeros a esquerda, caso seu conteúdo não tenha o número de dígitos do campo especifico.

Assim, o registro deve ser gerado como mostra a ilustração:

O que é a SIntegra32Dll.dll?

Como o SIntegra se baseia em uma série de informações entradas pelo usuário do sistema gerencial em questão. Como estas informações devem ser cuidadosamente tratadas antes de serem enviadas para o banco de dados do sistema e por fim utilizadas na geração do arquivo de texto, sob pena de recusa do arquivo gerado por parte do Programa Validador, foi desenvolvida a SIntegra32Dll.dll, como uma solução que visa facilitar e agilizar o processo de tratamento destas informações.

Uma dll que implementa boa parte dos tratamentos necessários para a geração do arquivo magnético e pode ser usada em conjunto com qualquer linguagem de programação.

Dentre as muitas vantagens da SIntegra32Dll.dll destacam-se:

  • Velocidade na implementação e adaptação do seu software à legislação do SIntegra

  • Validação e formatação automática dos campos de acordo com os padrões do SIntegra

  • Validação de informações como: Datas, CNJP, CPF, UF e CEP.

  • Validação de informações específicas do SIntegra como: CFOP, CIF/FOB, Código de Identificação do Convênio, Código de Finalidades da Apresentação do Arquivo Magnético, Código de Identificação da Natureza das Operações Informadas, Código de Modelo de Documentos Fiscais, Código de Posse das Mercadorias Inventariadas, Emitente de Nota Fiscal, Código da Situação Tributária.

  • Tratamento de Erros que retorna String indicando qual dos valores passados está incorreto.

Tudo isso torna a dll uma solução muito eficiente, pois é importante lembrar que o arquivo do sintegra será gerado referente a um período anterior, com base em informações que já foram adicionadas a um banco de dados e que devem ser coerentes com o sintegra.

Então, a dll deve ser usada na verdade em dois momentos, a exemplo:

  • Momento 1: Em um sistema de controle de Notas fiscais com Sintegra, a entrada e saída das notas deve ser feita levando em consideração que o banco de dados gerado será usado para geração do sintegra, assim, logo após o preenchimento de cada nota fiscal, o sistema antes de mandar as informações para o banco de dados, pode antes de tudo chamar a dll para os registros correspondentes e testar se houve erro, salvando as informações, caso nenhuma exceção seja encontrada.

  • Momento 2: No momento da geração do arquivo magnético propriamente dita, o sistema deve ler as informações do banco de dados e fazer as chamadas às funções da dll de acordo com o registros desejados.

A SIntegra32Dll.dll é composta por uma função Inicia_Sintegra, uma função Finaliza_Sintegra e mais uma função para cada um dos tipos de registros disponíveis nos padrões do SIntegra.

A função Inicia_Sintegra indica à Dll que o uso da mesma será iniciado, o que faz com que todos os seus contadores sejam zerados e a dll esteja pronta para ser usada. Esta função deve ser chamada antes de serem chamadas as funções que irão gerar os registros do SIntegra.

A função Finaliza_Sintegra indica à Dll que o uso da mesma será finalizado.

As funções de Registro, são as funções principais da Dll. Elas recebem os parâmetros necessários para a criação do registro, retornando uma String contendo o registro completamente formatado ou retornando uma String de erro, caso algum parâmetro esteja incorreto.

Assim, para implementar a linha do Registro 50 descrito anteriormente, a chamada à função da dll seria feita da seguinte forma:

var
Form1: TForm1;

implementation
Function Registro50(CNPJ, Insc_Est, Data_Emissao_Recebimento, UF, Modelo, Serie,
                    Nro, CFOP, Emitente, Valor_Total, Base_ICMS, Valor_ICMS, Isenta, Outras,
                    Aliquota, Situacao: ShortString): ShortString; stdcall; external 
                    "SIntegra32Dll.DLL";
  
procedure TForm1.Button3Click(Sender: TObject);
var
 TempStr: String;
begin
//Registro50 - Registro de Total de Nota Fiscal
TempStr := Registro50("23.859.507/0001-09",       //CNPJ
                      "7.075.793.310.062",        //Insc_Est
                      "21/06/95",                 //Data_Emissao_Recebimento
                      "BA",                       //UF,
                      "1",                        //Modelo
                      "1",                        //Serie
                      "501306",                   //Nro
                      "5111",                     //CFOP
                      "P",                        //Emitente
                      "518,19",                   //Valor_Total
                      "518,19",                   //Base_ICMS
                      "36,27",                    //Valor_ICMS
                      "",                         //Isenta
                      "0,00",                     //Outras
                      "7,00",                     //Aliquota
                      "N"                         //Situacao
                     );
                 
 if TempStr[1] <> "-" then
  Memo1.Lines.Add(TempStr)	//Adiciona no Memo o Registro 50 formatado
 else
  ShowMessage(Copy(TempStr, 6, Length(TempStr)));	//Mostra a mensagem de erro recebida
end;
A SIntegra32dll.dll vem acompanhada da documentação completa sobre como utilizar suas funções e quais os tipos de erros retornados por cada função. Há ainda um demo completo em Delphi que mostra como conectar a dll ao seu programa e testar a saída da mesma.

Para obter uma cópia e maiores informações sobre a SIntegra32Dll.dll visite os sites:

http://www.delphibr.com.br/vendas.php
http://www.victory.hpg.ig.com.br/

Conclusão

Com este artigo, espero ter esclarecido alguns questionamentos básicos sobre a sistemática do SIntegra, bem como ter trazido ao seu conhecimento a SIntegra32Dll.dll, uma solução única no mercado para este tipo de implementação.

Abaixo estão alguns links relacionados ao assunto abordado neste artigo:

Site Oficial do Sintegra - http://www.sintegra.gov.br/

Ministério da Fazenda - http://www.fazenda.gov.br/

Conheça a Nomenclatura Comum do Mercosul - http://www2.ciesp.org.br/oportunidades/ncm.asp

Victory Fernandes é desenvolvedor sócio da TKS Software - Soluções de Automação Comercial e Softwares Dedicados. Pode ser contactado em victory@igara.com.br, ou através dos sites www.victory.hpg.com.br - www.igara.com.br - www.enge.cjb.net.

Victory Fernandes

Victory Fernandes - Professor do Departamento de Engenharia da Faculdade Area1, Engenheiro Eletricista, Pós-Graduado em Docência, e desenvolvedor sócio da TKS Software - Soluções de Automação e Softwares Dedicados. Pode ser contatado em victory@igara.com.br, ou através dos sites www.igara.com.br - www.tkssoftware.com/victory