Módulo Fiscal: mudanças entre as edições

De BIS Wiki
Ir para navegação Ir para pesquisar
 
(9 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
O módulo Fiscal do BISModules tem a finalidade de gerenciar e dar suporte para o tratamento de documentos fiscais. Como NFe, NFCe, Arquivos de PAF-ECF, e outros documentos eletrônicos obrigatórios pela legislação. O módulo Fiscal pode ser utilizado por outros módulos para gerar ou obter informações de documentos, por exemplo, o módulo de compras pode usar o módulo fiscal para obter dados da NFe sem que tenha que conhecer sobre XML da NFe, assim como o módulo de vendas, ou de PDV pode solicitar a emissão de um documento NFe ou NFCe sem ter de conhecer a integração com o SEFAZ ou trabalhar com os certificados digitais.
O módulo Fiscal do BIS tem a finalidade de gerenciar e dar suporte para o tratamento de documentos fiscais, como NFe e NFCe<ref>O suporte a PAF-ECF deve ser completamente removido do sistema, o suporta a SAT continuará por algum tempo por questões de reigstro legais, devendo ser removido depois do prazo legal de guarda desses documentos.</ref>.
 
 
O módulo Fiscal pode ser utilizado por outros módulos para gerar ou obter informações desses documentos, por exemplo, o módulo de compras pode usar o módulo fiscal para obter dados da NFe sem que tenha que conhecer sobre XML da NFe, assim como o módulo de vendas, ou de PDV pode solicitar a emissão de um cupom ou NFe sem ter de conhecer a integração com o SEFAZ ou trabalhar com os certificados digitais.
 
 
= Bibliografia e Referências =
 
* '''RFW.SEFAZ:''' https://wiki.rodrigogml.eng.br/index.php?title=P%C3%A1gina_principal#RFW_-_Sefaz
:* Projeto utilizado como base para comunicação com a SEFAZ, abstraíndo toda a comunicação e muita implementação relacionada a SEFAZ. A documentação sobre a SEFAZ deve ser feita apenas no projeto RFW.SEFAZ, aqui devem ser feitas apenas a documentação relacionada ao BIS e como ele trata os documentos internamente.
 
 
 
= Requisitos e Implementação =
 
O novo módulo fiscal, sendo implementado a partir da migração do SAT para o NFCe utiliza o <code>RFW.SEFAZ</code> como base para a comunicação com a SEFAZ e os objetos oferecidos <code>SEFAZ*VO</code> para armazenar os dados dos documentos fiscais. Por ser uma representação do XML da SEFAZ, esses objetos se assemelham em estrutura e formato de dados ao próprio XML do documento, com excessão de algumas otimizações para persistir no banco de dados.
 
 
Esses VOs do RFW.SEFAZ vêm com o schema padrão <code>_RFW.SEFA</code> e tabelas com o prefixo <code>sefaz_</code>. Os mesmos nomes de tabela sugeridos pelo módulo são utilizadas no BIS, já o Schema é corrigido através de um <code>DAOResolver</code>.
 
 
 
Uma vez que os VOs oferecidos por <code>RFW.SEFAZ</code> não podem ser alterados para inclusão de outros atirbutos e relacionamentos que atendam a lógica de funcionamento do ERP, uma estrutura 'paralela' foi desenvolvida para atender as necessidades de negócio, deixando os objetos ofercidos pelo módulo estritamente responsáveis por armazenas os documentos, eventos e resultado de comunicações.
 
 
Convenções importantes adotadas sobre os documentos fiscais:
* Todo documento fiscal do BIS será representado pelo <code>DocFiscal</code>. Este objeto representará todo e qualquer documento fiscal, servindo de raiz para todas as derivações de documento fiscais existentes. Este VO além de ter as informações principais do documento fiscal (comuns a qualquer documento emitido), e atributos de controle (incluindo subobjetos) pode ter a referência para o <code>SEFAZNFeVO</code> ou para o objeto/arquivo do SAT/ECF ou qualquer outro documento fiscal a ser implementado no futuro.
* <code>DocFiscal</code> concentrará todos os objetos relacionados ao documento fiscal, por exemplo, além de objetos de sua definição, pode conter objetos relacionado a entrada do documento no sistema, ou a lista de eventos e histórico do documento, outros objetos/documentos relacionados (como carta de correção, nota de cancelamento, etc.), vínculos entre o item do documentos e do cadastro do sistema em documentos emitidos, etc.
* Alguns relacionamentos do DocFiscal poderão ser Composição, outros Associação, conforme o caso e estratégia de implementação.
 
 
= DocFiscalVO =
 
O <code>DocFiscalVO</code> - e sua estrutura <code>DocFiscal*VO</code> - é utilizada para representa um documento fiscal qualquer dentro do sistema. Seja uma NFe, NFCe, CTe, etc..<br><Br>
 
O <code>DocFiscaoVO</code> apresenta uma enumeration (<code>DocFiscalStatus</code>)para definir seu estado, são eles:
* '''SELLING''' - Indica que o documento está em processo de venda, registro dos itens, rascunho. Esse status é utilizado, por exemplo, nos terminais quando a venda ainda está sendo montada.
* '''STORED''' - Indica que o conteúdo do documento fiscal iniciado (SELLING) foi desfeita porque a venda foi guardada em um token. Uma venda que foi guardada depois será contabilizada como cancelada ou finalizada em algum PDV. No entanto neste momento contabilizamos apenas que a venda foi 'guardada' para efeitos de controle da emrpesa.
* '''SOLD''' - Indica que a venda foi realizada e que o documento fiscal foi emitido com êxito.
* ''' CANCELLING''' - Estado que indica que o documento está em processo de cancelamento, porém ainda não foi completamente cancelado. O processo de cancelamento pode exigir uma coleção de estados próprios para o processo de cancelamento do documento, por exemplo: como o estorno/devolução de pagamentos em cartão, solicitação de cancelamento na SEFAZ, entre outros.
* '''CANCELED''' - Indica que a que a venda foi cancelada! Tendo ou não cupom já emitido. A difereça entre ter o documento já emitido ou não pode ser avaliada, por exemplo, pela presença dos XMLs ou de número/serie atribuídos ao objeto.
* '''SEFAZVALIDATING''' - Informa que a venda e pagamentos foram finalizados, e que o cupom foi enviado para a SEFAZ e estamos agora aguardando sua autorização ou negação.
* '''SEFAZPROBLEM''' - Informa que a venda foi enviada para a SEFAZ mas foi rejeitada.
* '''ERROR''' - Significa que o cupom terminou em erro e por algum motivo o sistema não conseguiu recuperar ou obter informações sobre essa venda. Em geral esse erro indica que nem a comunicação com a SEFAZ foi realizada.
* '''ERROR_SYNC''' - Finalizado com erro e falta de sincronia. Erro em que o sistema não tem certeza no que ocorreu com o DF se foi registrado ou não. Precisará de avaliação e correção Manual.
 
== Ciclo de Vida Documento Fiscal ==
 
O ciclo de vida do documento fiscal pode ser visualidado pela imagem a seguir:
 
 
[[Imagem:DocFiscal_Cicle.png|center]]
 
 
 
{{nota|Estados de Erros|Os estados de erros não foram representados abaixo pois eles podem ocorrer a partir de qualquer um dos estados.}}
 
 
<hr>
 
= !!!!!!DOCUMENTAÇÃO AGUARDANDO REVISÃO!!!!!! =


== Gerenciamento de NFe ==
== Gerenciamento de NFe ==
Linha 21: Linha 81:


{{nota|Alerta de alteração de custo|O sistema deve deixar o preço do item em modo de alerta, e alertar o usuário quando a alteração do preço for muito grande. Para definir o que é "muito grande" deve-se ter essa configuração na tela de configurações do módulo.}}
{{nota|Alerta de alteração de custo|O sistema deve deixar o preço do item em modo de alerta, e alertar o usuário quando a alteração do preço for muito grande. Para definir o que é "muito grande" deve-se ter essa configuração na tela de configurações do módulo.}}




Linha 32: Linha 94:
# <b>Busca pelo EAN Comercial (caso disponível na NFe)</b> - e tenta mapear no item do sistema.
# <b>Busca pelo EAN Comercial (caso disponível na NFe)</b> - e tenta mapear no item do sistema.


== Tabela do IBPT ==
== Dependência com Outros Módulos ==  
 
* [[BISModules Item|Item]]
A janela "Tabelas IBPT" deverá ser uma janela com o template de BISListWindow, e sua finalidade será permitir a visualização e atualização da tabela de razões do instituito IBPT, usada para cálculo do imposto direto cobrado sobre o cupom/NFe.
* Esta tela pertence ao módulo "Fiscal" do plugin BISModules.
* Espelha o objeto "FiscalIBPTRatioVO" e sua tabela.
* Deverá ter os seguintes filtros de busca:
** Código NCM
** Descrição
** Data de Vigência - ao definir esta data a tela deverá exibir apenas os registros que são vigentes nesta data.
* A tela não terá os botões incluir e alterar, nem tela de cadastro (por isso estende o template BISListWindow e não BISListAndManagerWindow).
* A tela deverá ter o botão excluir, permitindo a exclusão de múltiplos selecionados.
* A tela deverá ter o botão "Enviar Tabela", que será um botão de upload que permitirá o envio de um novo arquivo do IBPT para atualizações.
* O Panel em que a tabela de dados for inserida deve aceitar o "drag'n'drop" do arquivo vindo do desktop.
 
=== Importação do Arquivo IBPT ===
 
O arquivo do IBPT é um arquivo no formato CSV (Comma Separated Values). Com a primeira linha sendo um cabeçalho e as demais os dados a serem importados. Normalmente as tabelas tem validades de 6 meses, sendo 1 para o primeiro semestre do ano e outra para segundo. Novas tabelas são liberadas uns 15 dias antes do início do semestre.
 
Para evitar problemas como: alteração feitas pelo IBPT no layout do arquivo, ou arquivos errados sejam enviados por engano e permitir que o BIS estrague os dados, as seguintes validações devem ser feitas no arquivo e nos dados atualmente no banco:
* '''Ignorar a primeira linha pois é cabeçalho e as validações não se aplicam!'''
* Validar se a linha não é vazia, as próximas validações podem falhar caso no final ou no começo do arquivo tenha alguma linha em branco. Não se importar se a linha vazia está no meio, só ignorar a linha vazia.
* Validar linha a linha se a linha têm 13 parâmetros separados pelo token ";" '''[Abortar]'''
* Validar se o parâmetro 1 aceita o pattern "[0-9]{8}"
* Validar se os parâmetros 5, 6, 7 e 8 aceitam o pattern "[0-9]+\\.[0-9]{2}" '''[Abortar]'''
* Validar se os parâmetros 9 e 10 são datas válidas no formato "dd/MM/yyyy" '''[Abortar]'''
* Validar se o parâmetro 10 é uma data futura
* Validar se o parâmetro 3 é igual 0
* Verificar se o registro ainda não existe no banco considerando os parâmetros 1 (Código NCM), 2 (Ex - caso no arquivo esteja em branco considerar 0, no banco ele não pode ser nulo por conta da unique contraint), 9 (Início da Vigência) e UF (que não é parâmetro no arquivo, deve vir como parâmetro no método).


Caso o registro falhe em qualquer uma das validações acima ele deve ser ignorado. Caso as validações acima marcadas com '''[Abortar]''' falhe o método deve retornar em BISWarningException informando que o arquivo tem um formato inválido e não importar nada. Caso a validação não tenha a marca de '''[Abortar]''' simplesmente ignorar o registro.


O método de importação deve retornar o total de registros que foram importados do arquivo, apenas para caráter informativo do usuário.


=== Tarefa de Exclusão Automática ===
= Notas e Referências =
 
<references />
{{TODO|Definir programação da Tarefa}}
 
== Dependência com Outros Módulos ==  
* [[BISModules Item|Item]]

Edição atual tal como às 18h50min de 25 de novembro de 2025

O módulo Fiscal do BIS tem a finalidade de gerenciar e dar suporte para o tratamento de documentos fiscais, como NFe e NFCe[1].


O módulo Fiscal pode ser utilizado por outros módulos para gerar ou obter informações desses documentos, por exemplo, o módulo de compras pode usar o módulo fiscal para obter dados da NFe sem que tenha que conhecer sobre XML da NFe, assim como o módulo de vendas, ou de PDV pode solicitar a emissão de um cupom ou NFe sem ter de conhecer a integração com o SEFAZ ou trabalhar com os certificados digitais.


Bibliografia e Referências

  • Projeto utilizado como base para comunicação com a SEFAZ, abstraíndo toda a comunicação e muita implementação relacionada a SEFAZ. A documentação sobre a SEFAZ deve ser feita apenas no projeto RFW.SEFAZ, aqui devem ser feitas apenas a documentação relacionada ao BIS e como ele trata os documentos internamente.


Requisitos e Implementação

O novo módulo fiscal, sendo implementado a partir da migração do SAT para o NFCe utiliza o RFW.SEFAZ como base para a comunicação com a SEFAZ e os objetos oferecidos SEFAZ*VO para armazenar os dados dos documentos fiscais. Por ser uma representação do XML da SEFAZ, esses objetos se assemelham em estrutura e formato de dados ao próprio XML do documento, com excessão de algumas otimizações para persistir no banco de dados.


Esses VOs do RFW.SEFAZ vêm com o schema padrão _RFW.SEFA e tabelas com o prefixo sefaz_. Os mesmos nomes de tabela sugeridos pelo módulo são utilizadas no BIS, já o Schema é corrigido através de um DAOResolver.


Uma vez que os VOs oferecidos por RFW.SEFAZ não podem ser alterados para inclusão de outros atirbutos e relacionamentos que atendam a lógica de funcionamento do ERP, uma estrutura 'paralela' foi desenvolvida para atender as necessidades de negócio, deixando os objetos ofercidos pelo módulo estritamente responsáveis por armazenas os documentos, eventos e resultado de comunicações.


Convenções importantes adotadas sobre os documentos fiscais:

  • Todo documento fiscal do BIS será representado pelo DocFiscal. Este objeto representará todo e qualquer documento fiscal, servindo de raiz para todas as derivações de documento fiscais existentes. Este VO além de ter as informações principais do documento fiscal (comuns a qualquer documento emitido), e atributos de controle (incluindo subobjetos) pode ter a referência para o SEFAZNFeVO ou para o objeto/arquivo do SAT/ECF ou qualquer outro documento fiscal a ser implementado no futuro.
  • DocFiscal concentrará todos os objetos relacionados ao documento fiscal, por exemplo, além de objetos de sua definição, pode conter objetos relacionado a entrada do documento no sistema, ou a lista de eventos e histórico do documento, outros objetos/documentos relacionados (como carta de correção, nota de cancelamento, etc.), vínculos entre o item do documentos e do cadastro do sistema em documentos emitidos, etc.
  • Alguns relacionamentos do DocFiscal poderão ser Composição, outros Associação, conforme o caso e estratégia de implementação.


DocFiscalVO

O DocFiscalVO - e sua estrutura DocFiscal*VO - é utilizada para representa um documento fiscal qualquer dentro do sistema. Seja uma NFe, NFCe, CTe, etc..

O DocFiscaoVO apresenta uma enumeration (DocFiscalStatus)para definir seu estado, são eles:

  • SELLING - Indica que o documento está em processo de venda, registro dos itens, rascunho. Esse status é utilizado, por exemplo, nos terminais quando a venda ainda está sendo montada.
  • STORED - Indica que o conteúdo do documento fiscal iniciado (SELLING) foi desfeita porque a venda foi guardada em um token. Uma venda que foi guardada depois será contabilizada como cancelada ou finalizada em algum PDV. No entanto neste momento contabilizamos apenas que a venda foi 'guardada' para efeitos de controle da emrpesa.
  • SOLD - Indica que a venda foi realizada e que o documento fiscal foi emitido com êxito.
  • CANCELLING - Estado que indica que o documento está em processo de cancelamento, porém ainda não foi completamente cancelado. O processo de cancelamento pode exigir uma coleção de estados próprios para o processo de cancelamento do documento, por exemplo: como o estorno/devolução de pagamentos em cartão, solicitação de cancelamento na SEFAZ, entre outros.
  • CANCELED - Indica que a que a venda foi cancelada! Tendo ou não cupom já emitido. A difereça entre ter o documento já emitido ou não pode ser avaliada, por exemplo, pela presença dos XMLs ou de número/serie atribuídos ao objeto.
  • SEFAZVALIDATING - Informa que a venda e pagamentos foram finalizados, e que o cupom foi enviado para a SEFAZ e estamos agora aguardando sua autorização ou negação.
  • SEFAZPROBLEM - Informa que a venda foi enviada para a SEFAZ mas foi rejeitada.
  • ERROR - Significa que o cupom terminou em erro e por algum motivo o sistema não conseguiu recuperar ou obter informações sobre essa venda. Em geral esse erro indica que nem a comunicação com a SEFAZ foi realizada.
  • ERROR_SYNC - Finalizado com erro e falta de sincronia. Erro em que o sistema não tem certeza no que ocorreu com o DF se foi registrado ou não. Precisará de avaliação e correção Manual.

Ciclo de Vida Documento Fiscal

O ciclo de vida do documento fiscal pode ser visualidado pela imagem a seguir:



Estados de Erros
Os estados de erros não foram representados abaixo pois eles podem ocorrer a partir de qualquer um dos estados.



!!!!!!DOCUMENTAÇÃO AGUARDANDO REVISÃO!!!!!!

Gerenciamento de NFe

Um dos documentos fiscais gerenciado pelo módulo são as Notas Fiscais eletrônicas (NFe) recebidas de fornecedores, notas de compras. Tendo assim uma tela onde é possível enviar para o sistema arquivos .XML de notas para cadastra-las no sistema. Essa nota ficará armazenada no sistema por tempo indeterminado, e pode ser encontrada e visualizada sempre que necessário. O arquivamento feito no BIS pode ser utilizado para fins de arquivamento pelo prazo legal.

Importação de NFe a partir E-mail

Na tela de configurações do módulo deverá ser possível configurar se deseja que o módulo busque por NFe nos e-mails recebidos. A principio o módulo não fará distinção entre caixas de e-mail, se selecionado ele buscará em todas. No futuro pode-se estudar a funcionalidade, se necessário, de especificar as caixas de e-mail que quer que o sistema verifica a existência de NFes ou não.

Entrada de Custos a partir de NFe

Uma vez que as notas estiverem no sistema, o sistema será capaz de abrir e dar entrada dos custos dessas notas. A partir de qualquer nota que já esteja no sistema, o usuário poderá seleciona-la e forçar o sistema a dar entrada dessa NFe. A partir de critérios explicados mais a baixo o sistema mapeará os itens da NFe com os itens do sistema e deixará a entrada sugerida cadastrada no sistema. A partir de outra tela (de gerenciamento de entradas de custos) o usuário poderá confirmar, negar ou alterar as entradas sugeridas pelo sistema.

O sistema deve ter nas configurações do módulo dois campo em porcentagem. Neles o usuário poderá configurar qual a alteração mínima que um preço de venda deve ter para que o sistema sugira autera-lo. Caso o usuário dê a entrada do item e informe que não deve alterar o preço de venda, apenas o custo é alterado para questões de histórico custo deste item.

Nesta tela (de gerenciamento de entrada de custos) devem ser exibidos uma lista de todas as entradas realizadas, as com alterações sugeridas, com alterações negadas e as que não foram mapeadas. Abaixo os botões com as opções:

  • Confirmar Mapeados - tentará confirmar a entrada de todos os itens que estão pendentes e já foram mapeados. Os itens que não foram mapeados não serão confirmados.
  • Excluir Não Mapeados - Excluí todos os itens que não estão mapeados a nenhum item.
  • Excluir - Exclui os itens selecionados.

O sistema deve ter uma opção nas configurações que informe se o BIS deve efetuar entrada de notas das notas que chegarem automaticamente por e-mail.

Alerta de alteração de custo
O sistema deve deixar o preço do item em modo de alerta, e alertar o usuário quando a alteração do preço for muito grande. Para definir o que é "muito grande" deve-se ter essa configuração na tela de configurações do módulo.



Mapeamento dos Itens da NFe e os Itens do Sistema

Para tentar mapear os itens da NFe e do sistema o BIS usará as seguintes técnicas na ordem abaixo para sugerir o item certo:

Busca sempre pelo Emissor da NFe
Quando utilizamos a busca de histórico para associar um item da nota ao item do sistema, levamos sempre em consideração o emissor da nota. Pois para mesmo produto e diferentes emissores (fornecedores) as quantidades e consequentemente os valores calculados tendem a serem diferentes.
  1. Busca no histórico por Descrição da NFe e Unidade Comercial - Busca no histórico se há entrada de nota com a mesma descrição e unidade comercial. Leva em consideração ambos os argumentos pois o mesmo fornecedor pode usar a mesma descrição do item, mas vender uma caixa e/ou um fardo o que troca a quantidade de venda, e consequentemente o divisor do sistema.
  2. Busca no histórico pelo EAN Comercial (caso disponível na NFe) - Busca no histórico de entrada de notas se há alguma entrada do mesmo emissor da nota e mesmo código EAN escrito na nota. Se tiver um histórico verificamos qual foi o item associado na última entrada e utilizamos o mesmo divisor.
  3. Busca pelo EAN Comercial (caso disponível na NFe) - e tenta mapear no item do sistema.

Dependência com Outros Módulos


Notas e Referências

  1. O suporte a PAF-ECF deve ser completamente removido do sistema, o suporta a SAT continuará por algum tempo por questões de reigstro legais, devendo ser removido depois do prazo legal de guarda desses documentos.