/emissor-fiscal

Primary LanguageJavaMIT LicenseMIT

emissor-fiscal

Projeto criado para um analista fiscal, ser o responsável por manter as tributações estaduais e federais que serão usadas no cálculo, de documentos fiscais de saídas (emitidos), assim como a geração do arquivo SPED FISCAL (EFD ICMS IPI). Até o Momento funciona basicamente da seguinte forma:

1. BREVE RESUMO


  • Ao receber um DocumentoFiscal (de emissão própria, que geralmente é de saída), com as devidas tributações cadastradas, será calculado os impostos (que é retornado num JSON), caso não tenha a tributação para algum item do DocumentoFiscal, não será calculado NADA, e será apenas retornado uma mensagem avisando que falta X tributação para o NCM do item. (A intenção no futuro é fazer com que esse projeto também faça toda a parte de comunicação com a SEFAZ (geração do xml, envio, cancelamento, consulta etc....)

  • Ao receber um DocumentoFiscal (de devolução/remessa em garantia, que podem ser de entrada ou saída, mas que são sempre emitido pela autogeral), com a devida parametrização na tabela (trib_esta_devo), e o cadastro correto da operação (oper), indicando que a operação é de devolução OU remessa em garantia, será realizado o calculo do ICMS. Caso não esteja parametrizado para alguma operação provavelmente irá ocorrer algum NullPointerException.

  • Ao receber um DocumentoFiscal (de emissão de terceiros, que é de entrada), apenas será salvo na tabela docu_fisc. Exceto se for alguma NFE que seja de SC, ES, MG (nesses casos, será verificado na tabela trib_esta_guia, se para algum item dessa nota de entrada, teremos que recolher o ICMS ST pela Guia gare, caso sim será enviado um email para o setor fiscal, utilizando API do sendgrid com os devidos calculos e retornado um JSON com os valores desse calculo).

    • PS¹: Atualmente, toda a parte de calculo de impostos na entrada que teremos crédito é feita pelo ERPJ.
    • PS²: Não é feita nenhuma emissão de guia gare (das entrada de SC, ES e MG), pois não encontrei nenhuma forma de integração para fazer isso.
    • PS³: O calculo não é salvo em nenhuma tabela desse projeto, é apenas calculado e retornado em um JSON, que será salvo na tabela: calc_gare_compra_item, do ERPJ;
  • SPED FISCAL -> Parte que está atualmente em TESTE. Antes de começarmos a gerar os arquivos, é necessário que de fato todos os DocumentoFiscais sejam salvos nesse projeto (hoje em dia é a maioria). Ao menos nesse primeiro momento, a preocupação é fazer com que gere o arquivo corretamente igual é gerado hoje em dia utilizando o software de terceiros.
    A estrutura em si do Layout eu estava conseguindo gerar corretamente e iria começar a verificar se as partes referentes a valores estão sendo feita(calculadas) corretamente.(a melhor forma seria validar com todos os documentos), Porém dá para fazer isso com alguns registros especificos, Ex.: REGs: C197, D197, Bloco E etc... Pois são referentes a uma única NFE (basta verificar algumas de formas "amostral" e verificar se os valores desses registros estão iguais ao de terceiros);

TODO-> Integração para ser emitida as guias GNRE (Que é necessário quando vendemos para outro estado e a pessoa seja PF ou PJ não seja contribuinte de icms, ou seja, é quando tem o calculo de DIFAL na nota que emitimos)

2. Criando login

2.1. Properties necessárias (no ERP)

Antes de tudo. Para o ERP, ter "comunicação", ou seja, funcionar junto com o emissor-fiscal. É necessário ter as propriedades abaixo configuradas. Para isso abra o arquivo dbf.properties, que provavelmente esteja em: C:\DBF\dist. Caso tenha dúvida, peça a ajuda para alguém de T.I.

emissor-fiscal.ativo=true
emissor-fiscal.compra.ativo=true					(Até o momento somente é salvo, a compra no emissor-fiscal, não fazendo nenhum calculo (exceto as de SC que é feito da guia Gare))
operacoes.devolucao.pelo.emissor-fiscal=6,7,23,28,39,40,10,11,29,30,21,84,8,9		(As operações que tiverem nessa propertie são as de devoluções que serão calculadas pelo emissorfiscal )

emissor-fiscal.server=http://localhost:8080				(TROCAR essa URL(link), para a dá página inicial do EMISSOR-FISCAL) 
emissor-fiscal-homologacao.server=http://localhost:8080			(Caso a propertie de envio de NFE no ERP seja para homologação (**nfe.ambiente=2**), será usado a URL, que estiver nessa propertie para fazer requisições para o emissorfiscal)

2.2. Criando login atráves da tela de criação

Para criar o login, no ERP vá no menu: CONTABILIDADE>CRIAR USUARIO EMISSOR-FISCAL. (Somente será mostrado esse menu, caso as properties acima estejam configuradas). Na tela aberta teremos os seguintes botões:

  1. Cancelar - Fecha a tela aberta.
  2. Atualizar Usuário - Caso tenha feito, alguma alteração no usuário do ERP (EX.: de Senha) e queira que essas alterações tenham efeito no emissor-fiscal, clique nesse botão.
  3. Efetuar Cadastro - Irá criar um usuário no emissor-fiscal, com as mesmas informações do ERP.

2.3. Criando Login através do envio/exportação de um documento fiscal

Quando o usuário enviar/exportar uma NFE e estiver com as properties acima ativadas, também será criado um usuário (com o Perfil de API_ACESS),

2.4. Perfis

Perfil Permissões
ADMIN Acesso a tudo
WEB_ACESS Somente consulta nas páginas WEB
CONTADOR Consegue fazer alterações em tributações, operações etc.Nas telas WEB.
ESCRITURADOR Consegue gerar o arquivo do SPED FISCAL ICMS IPI
API_ACESS Acesso somente para consumir a parte de API desse projeto

veja os perfis no enum:

net.cartola.emissorfiscal.usuario.Perfil

3. Arquivos de configurações (application.properties)

Temos cincum (sim, sou flamenguista, como adivinhou!?) arquivos aplication.properties, sendo eles:

nome Usado em
application.properties Arquivo principal, todos os application dos perfis abaixo, herdarão o que estiver nesse
application-dev.properties Para rodar a aplicação no localhost (etapa de desenvolvimento)
application-homologacao.properties Para fazer o deploy no GAE. E conseguirmos testar a aplicação no mesmo ambiente do usuário
application-producao.properties Para fazer o deploy em produção no GAE
application-test.properties Para rodar os testes no localhost, usando o DB (emissorfiscal_teste)

PS: No application.properties, temos algumas propriedades, que são referente a "regras de negócios". Exemplos: codigos das origens dos produtos que são importados, email para quem é enviado os calculos das GUIA GARE (entradas de SC, MS e ES) etc...

3.1. pom.xml (usando maven profile para fazer deploy)

No trecho abaixo está o perfil, que é usado pela linha de comando (maven) para gerar o .WAR e fazer o deploy no GAE (Google App Engine)

   <profiles>
   	<profile>
   		<id>producao</id>
   			  	<dependencies>
      			.... 
             				 Dependências que irão entrar somente no perfil de produção (ou seja, quando estiverem fazendo o deploy no GAE 
      			....
   			</dependencies>
   	</profile>
   </profiles>

3.2. appengine-web.xml

Nesse arquivo estão as configurações referentes ao GAE. Além disso, indica qual o perfil do spring ("application.properties") que estará ativo para fazer deploy. Basicamente será um dos dois abaixo:

<property name="spring.profiles.active" value="producao"/>				-> Usado para fazer deploy em produção no projeto: **erpj-br**, do GCP.
<property name="spring.profiles.active" value="homologacao"/>				-> Para fazer deploy em homologação (testes no GCP), projeto: **erpj-dev**

4. Estrutura de pastas

De forma resumida temos basicamente essa estrutura de projeto
📦src
 ┣ 📂main
 ┃ ┣ 📂java
 ┃ ┃ ┗ 📂net
 ┃ ┃ ┃ ┗ 📂cartola
 ┃ ┃ ┃ ┃ ┗ 📂emissorfiscal -> Aqui estará todas as classes do projeto
 ┃ ┣ 📂resources
 ┃ ┃ ┣ 📂db
 ┃ ┃ ┃ ┗ 📂migration		-> E aqui todos os scripts das "migrations", no nosso caso estamos usando o flyway para isso
 ┃ ┃ ┃ ┃ ┗ 📂mysql
 ┃ ┃ ┃ ┃ ┃ ┣ 📂cadastro-tributacao-clientes-outras-ufs
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜OBS.txt
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00019__1_VENDA_PRODUTO_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00020__1_VENDA_PRODUTO_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00021__45_VENDA_FUTURA_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00022__45_VENDA_FUTURA_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00023__46_REMESSA_FUTURA_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00024__46_REMESSA_FUTURA_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00025__63_VENDA_DE_SUCATA_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00026__63_VENDA_DE_SUCATA_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00027__73_COMPRA_DE_SUCATA_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00028__73_COMPRA_DE_SUCATA_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00029__83_DISTRIBUICAO_GRATUITA_ITEM_ESTOQUE_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜V00030__83_DISTRIBUICAO_GRATUITA_ITEM_ESTOQUE_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┣ 📂cadastro-tributacao-interestadual
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00013__3_VENDA_INTERESTADUAL_FISICA_PRODUTO_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00014__3_VENDA_INTERESTADUAL_FISICA_PRODUTO_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00015__2_VENDA_INTERESTADUAL_JURIDICA_PRODUTO_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00016__2_VENDA_INTERESTADUAL_JURIDICA_PRODUTO_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜V00032__AquisicoesInterestaduaisEmitidasPelaAg.sql
 ┃ ┃ ┃ ┃ ┃ ┣ 📜NCMs - Validado pela Consulcamp.csv
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00002__inserindoNcmsValidadosPelaConsulcamp.sql
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00007__createNcmsMonofasicosEmissorFiscal.sql
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00008__insertIntoTribEstaGuiaGareCompraParaComercia.sql
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00009__insertTribEstaSaidaDentroEstado.sql
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00010__insertTribEstaSaidaDentroEstadoProdutoImportado.sql
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00011__correcaoIcms.sql
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00012__copiandoIcmsParaOsNcmsComVariasExcecoes.sql
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00017__insertTribFede.sql
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00018__insertTribFedeMonofasico.sql
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V0001__Init.sql
 ┃ ┃ ┃ ┃ ┃ ┗ 📜V00031__insertTribEstaDevo.sql
 ┃ ┃ ┣ 📂public
 ┃ ┃ ┃ ┗ 📂error
 ┃ ┃ ┃ ┃ ┣ 📜400.html
 ┃ ┃ ┣ 📂src
 ┃ ┃ ┃ ┗ 📂assets
 ┃ ┃ ┃ ┃ ┗ 📂scripts
 ┃ ┃ ┣ 📂static
 ┃ ┃ ┃ ┣ 📂assets
 ┃ ┃ ┃ ┃ ┗ 📂static
 ┃ ┃ ┃ ┃ ┃ ┣ 📂fonts
 ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂icons
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂fontawesome
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📂themify
 ┃ ┃ ┃ ┣ 📂css
 ┃ ┃ ┃ ┣ 📂fonts
 ┃ ┃ ┃ ┣ 📂img
 ┃ ┃ ┃ ┣ 📂js
 ┃ ┃ ┃ ┃ ┣ 📂ncm
 ┃ ┃ ┃ ┃ ┣ 📂tilt
 ┃ ┃ ┃ ┣ 📂src
 ┃ ┃ ┣ 📂templates
 ┃ ┃ ┃ ┣ 📜Htmls do projeto
 ┃ ┃ ┣ 📜application-dev.properties
 ┃ ┃ ┣ 📜application-homologacao.properties
 ┃ ┃ ┣ 📜application-producao.properties
 ┃ ┃ ┣ 📜application-test.properties
 ┃ ┃ ┗ 📜application.properties
 ┃ ┗ 📂webapp
 ┃ ┃ ┗ 📂WEB-INF
 ┃ ┃ ┃ ┣ 📜appengine-web.xml
 ┃ ┃ ┃ ┗ 📜logging.properties
 ┗ 📂test
 ┃ ┗ 📂java
 ┃ ┃ ┗ 📂net
 ┃ ┃ ┃ ┗ 📂cartola
 ┃ ┃ ┃ ┃ ┗ 📂emissorfiscal

4.1 Cadastrando as tributações federais (PIS/COFINS) e estaduais (ICMS), usando os scripts pelo flyway

Um ponto de extrema importância é a parte abaixo onde estão os scripts, que servem para cadastrar as tributações estaduais (venda, transferência, devoluções e outras operações que emitimos NFEs ou até mesmo para calcular o ICMS ST para as entradas de SC, ES e MS (temos que pagar a guia gare em alguns casos dessas UFs). E além disso a parametrização para o PIS/COFINS)

Scripts pelo flyway, para parametrizações nas tabelas: trib_esta, trib_esta_guia, trib_esta_devo e trib_fede
📦src
 ┣ 📂main
 ┃ ┣ 📂java
 ┃ ┃ ┗ 📂net
 ┃ ┃ ┃ ┗ 📂cartola
 ┃ ┣ 📂resources
 ┃ ┃ ┣ 📂db
 ┃ ┃ ┃ ┗ 📂migration
 ┃ ┃ ┃ ┃ ┗ 📂mysql
 ┃ ┃ ┃ ┃ ┃ ┣ 📂cadastro-tributacao-clientes-outras-ufs			->  tabela: **(trib_esta)**: Aqui está sendo parametrizado algumas operações que são usadas no "Balcão", mas o cliente possa ser de outro estado (Ex.: Estamos VENDENDO para um cliente na loja física, mas ele não é de SP, a parametrização estará dentro dessa pasta, CASO NÃO, esteja basta acrescentar outro script para a operação em especifíco, no mesmo padrão das já existentes)
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜OBS.txt
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00019__1_VENDA_PRODUTO_IMPORTADO.sql							
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00020__1_VENDA_PRODUTO_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00021__45_VENDA_FUTURA_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00022__45_VENDA_FUTURA_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00023__46_REMESSA_FUTURA_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00024__46_REMESSA_FUTURA_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00025__63_VENDA_DE_SUCATA_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00026__63_VENDA_DE_SUCATA_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00027__73_COMPRA_DE_SUCATA_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00028__73_COMPRA_DE_SUCATA_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00029__83_DISTRIBUICAO_GRATUITA_ITEM_ESTOQUE_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜V00030__83_DISTRIBUICAO_GRATUITA_ITEM_ESTOQUE_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┣ 📂cadastro-tributacao-interestadual			-> tabela: **(trib_esta)**: Aqui está sendo parametrizado, de fato as operações que são interestaduais, inclusive no caso das VENDAS INTERESTADUAIS é onde tem diferenças de aliquotas caso o produto SEJA IMPORTADO, diferente das outras situações que geralmente tem a tributação apenas para que o sistema encontre para quando for o produto for NACIONAL ou IMPORTADO, já que é usado a mesma query.
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00013__3_VENDA_INTERESTADUAL_FISICA_PRODUTO_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00014__3_VENDA_INTERESTADUAL_FISICA_PRODUTO_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00015__2_VENDA_INTERESTADUAL_JURIDICA_PRODUTO_IMPORTADO.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📜V00016__2_VENDA_INTERESTADUAL_JURIDICA_PRODUTO_NACIONAL.sql
 ┃ ┃ ┃ ┃ ┃ ┃ ┗ 📜V00032__AquisicoesInterestaduaisEmitidasPelaAg.sql
 ┃ ┃ ┃ ┃ ┃ ┣ 📜NCMs - Validado pela Consulcamp.csv			->.CSV, que criei para deixar os ncms validados pela consulcamp. Usei para inserir aqueles que ainda não estavam cadastrados no emissorfiscal, e sempre davam b.o para enviar o SAT.
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00001__Init.sql						-> Tem a estrutura básica do banco de dados. E a população de algumas tabelas no banco. Ex.: estado, trib_esta...
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00002__inserindoNcmsValidadosPelaConsulcamp.sql		-> Script que lê o .csv acima, pelo flyway não deu certo, portanto os ncms desse .csv estão nesse script, e insere na tabela: **(trib_esta)**, o icms de VENDA e TRANSFERÊNCIA. Foi importante colocar esse script aqui nessa ordem, para que o script **V00012__copiandoIcmsParaOsNcmsComVariasExcecoes.sql**, copie o icms desses ncms para as outras execeções deles caso eles tenham mais de uma. (Para o ICMS a tributação é a mesma para o ncm em todas as suas exceções)
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00007__createNcmsMonofasicosEmissorFiscal.sql		-> Cria a tabela de **ncms_monofasicos**, e insere nela todos os ncms monofásicos (aqui a exceção do ncm é de extrema importância). Essa tabela é para facilitar nos inserts das tributações federais (trib_fede), que estão um pouco mais abaixo. 
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00008__insertIntoTribEstaGuiaGareCompraParaComercia.sql		-> tabela: **(trib_esta_guia)**: Aqui está a parametrização dos calculos das "Guias Gare". São calculadas toda vez que dão entrada no ERPJ. Quando salvam uma compra cujo a UF seja diferente de SP, ou seja compra interestadual: (SC, MS, ES), será buscado a parametrização nessa tabela caso tenha para algum item, será calculado e enviado no email (grupo @fiscal) os calculos! PS: Os ncms nesse script a Gabi/fiscal foi me passando ao longo do tempo.
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00009__insertTribEstaSaidaDentroEstado.sql			->  tabela: **(trib_esta)**: Insert de icms, para outras operações que são de saídas. (Ou que ao menos a autogeral faça a emissão de NFe)
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00010__insertTribEstaSaidaDentroEstadoProdutoImportado.sql	->  tabela: **(trib_esta)**: Mesma coisa do script acima. PORÉM para os produtos que SÃO IMPORTADOS. Com o acréscimo que aqui tem o insert para VENDA e TRANSFERENCIA. Para essas duas operações quando é nacional eles estão no script **V0001__Init.sql**, ou no **V00002__inserindoNcmsValidadosPelaConsulcamp.sql**
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00011__correcaoIcms.sql					-> tabela: **(trib_esta)**:  É o script para corrigir a tributação de ICMS em (vendas/transferências/entrega futura/distribuicao de brindes, a maioria dos ncms que estão nesse script estavam cadastrados errado no emissorfiscal)
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00012__copiandoIcmsParaOsNcmsComVariasExcecoes.sql	-> tabela: **(trib_esta)**: Script que servirá para "copiar", a tributação do ICMS para as outras exceções do NCM. (Caso ele tenha mais de uma) 
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00017__insertTribFede.sql				-> tabela: **(trib_fede)**: Esse script depende do: **V00007__createNcmsMonofasicosEmissorFiscal.sql**, pois será inserido o PIS/COFINS para todos os NCMS que NÃO são monofásicos.
 ┃ ┃ ┃ ┃ ┃ ┣ 📜V00018__insertTribFedeMonofasico.sql			-> tabela: **(trib_fede)**: Já esse script será inserido para todos os NCMS MONOFÁSICOS, ou seja, para todos que estão no script: **V00007__createNcmsMonofasicosEmissorFiscal.sql**.
 ┃ ┃ ┃ ┃ ┃ ┗ 📜V00031__insertTribEstaDevo.sql				-> tabela: **(trib_esta_devo)**: Será inserido todas as parametrizações para as operações de: "Devoluções e Remessas em Garantias".

As tributações federais (PIS/COFINS), funcionam basicamente da seguinte forma (estamos considerando a operação 1 - VENDA), Se o NCM é:

 Monofásico - CST 04  (Sem tributação, Base de calculo, aliq, e valor imposto ZERADO)
 Se não é monofásico - CST 01 - Pis Aliq = 1,65% | Cofins Aliq = 7,60%

OBS: Dependendo da operação a CST poderá ser diferente (conforme está nos scripts), assim como não ocorrer a incidência de impostos. PORÉM, sempre que um NCM for monofásico essa será a regra que tem prevalência;

4.2. Funcionamento das VENDAS interestaduais (inserindo informações referente a Aliq de ICMS, CFOP, CEST COD ANP etc)

  • Interestadual Script com todas as tributações em VENDAS interestaduais de SP x Qualquer outra UF. No caso dessas operações foi feito o seguinte para saber se tem que calcular ou não difal/fcp. Equivalência de operações:
Operação Equivalente a
2 - VENDA INTERESTADUAL (JURIDICA) Pessoa contribuinte de icms, ou seja, quando usar as tributações dessa operação para fazer o calculo NUNCA será calculado o DIFAL e FCP
3 - VENDA INTERESTADUAL (FISICA) Pessoa não contribuinte, sempre será calculado o DIFAL, e o FCP para os estados que tiverem

Problemas que possamos ter ao utilizar essa abordagem: Nem todos os PJ, são contribuintes, ou seja, caso calcule, um DocumentoFiscal, cujo o destinatário seja Pessoa Jurídica, NÃO contribuinte, deverá ser calculado o DIFAL, mas não será.

PS: Isso será corrigido, no futuro da seguinte forma: Será enviado junto com o DocumentoFiscal, se a pessoa é ou não contribuinte de icms, para assim ser buscada a tributação correta.

5. DocumentoFiscal (package extremamente importante), breve explicação sobre as classes do projeto

  • 1 - O projeto é feito utilizando:
    • 1.1 - JPA/Hibernate
    • 1.2 - Spring boot, data, e security
    • 1.3 - Thymeleaf (Template engine, responsável por renderizar os .html)
  • 2 - Os pacotes do projeto, é separados por "módulos", exemplo na imagem cfop, contador e documento.
    • Podendo ter dentro do pacote todas as camadas (ApiController, Controller, Service, Repository, Model)

image

DocumentoFiscalApiController, é a classe utilizada para fazer integração com o ERP. Através dela terá mapeamentos de recursos para atualizar e ou salvar um DocumentoFiscal, seja de entrada ou de saída. Nela também é que está "integrado", a chamada dos métodos na service para calcular os impostos (que é necessários em todos os DocumentoFiscais, que emitimos); Além disso nela também está mapeado a rota que irá salvar uma Devolucao, e retornar um DocumentoFiscal, com os calculos dos tributos.

DocumentoFiscalService, classe onde tem as regras de negócio referente ao DocumentoFiscal;

CalculoFiscalEstadual, classe reponsável por fazer todo o cálculo de ICMS, para um DocumentoFiscal e todos os seus itens;

CalculoFiscalFederal, responsável por fazer todo o cálculo de PIS/COFINS, e IPI (esse último exclusivamente para devoluções/remessas em garantias);

CalculoGuiaEstadualService, responsável por fazer o cálculo das guia gare (ICMS ST), das entradas de comercialização que são de SC, ES e MS;

6. SpedFiscal (ICMS IPI)

  • Essa parte ainda está em desenvolvimento (fase de testes), porém os layout do arquivo foram criados da seguinte forma: cada bloco tem seu pacote com sua modelagem:

image

  • 1 - Cada registro tem sua classe (isso equivale a uma linha no arquivo txt);
  • 2 - Um registro de Nivel DOIS tem como um (objeto) "registro filho" que é de nivel 3, E o de nivel três terá o registro de Nivel QUATRO, como registro filho (essa informação de registros filhos etc é consultado na documentação do governo)...
  • 3 - Exemplo Registro C100 (RegC100.java), que além de seus campos, tem os registros filhos que podem ou não serem preenchidos, porém somente poderão caso tenha preenchido a linha do REG C100.

image

  • SpedFiscalArquivoController -> Classe que irá carregar a tela, para a geração do arquivo SPED e receber os parametros (data inicio, fim, loja, contador, se exportará ou não o inventário) para processar o arquivo.
  • SpedFiscalArquivoService -> As informações acima serão passadas para o método gerarAquivoSpedFiscal(...), da Service, que será responsável por buscar todas as informações fiscais do período, e popular um objeto do tipo MovimentoMensalIcmsIpi
  • SpedFiscalService -> Recebe um objeto do tipo MovimentoMensalIcmsIpi, e chama as services de cada bloco, para preencher os registros do SpedFiscal, que precisamos escriturar e devolve um objeto do tipo SpedFiscal que nada mais é do que a modelagem que citamos anteriormente (SpedFiscal -> Blocos do Sped -> Registros dos Blocos)
  • SpedFiscalArquivoService -> Com todos os registros necessários preenchidos/escriturados, ainda dentro do método gerarArquivoSpedFiscal(...), será chamado o método gerarArquivoSped(....), dentro dessa service, será "transformado" o objeto preenchido anteriormente, no arquivo .txt (utilzando a lib: coffeepot-bean-wr). E por fim o arquivo será salvo na tabela sped_fisc_aqu (SpedFiscalArquivo).
  • OBS: No futuro isso será mudado, para salvar somente o link do arquivo que está no bucket do GCP.

7. Começando

Clone esse projeto em um diretório de sua máquina

git clone https://github.com/cartola-erp/emissor-fiscal.git

7.1 - Pré requisitos

É Necessário estar configurado corretamente as variáveis de ambientes ! (JAVA e MAVEN)

7.2 - Rodando o projeto no ambiente de desenvolvimento

create database emissorfiscal;
create database emissorfiscal_teste;      (para ser usado em ambiente de teste)

8. Deployment

    1. Necessário deixar o perfil correto definido no arquivo appengine-web.xml (homologacao ou producao image
    1. Colocar a chave do Sendgrid, no application.properties. Propriedade: "spring.sendgrid.api-key="
    1. Ter instalado na máquina o SDK do GCP
    1. Pelo CMD:
    • 4.1 Se autentique no GCP, para isso digite -> gcloud auth list
    • 4.2 Verifique os projetos que você tem permissão -> gcloud projects list
    • 4.3 Defina um desses projetos (o que será feito o deploy da aplicação) -> gcloud config set project NOME__DO__PROJETO | (Atualmente erpj-dev é o de homologacao e o erpj-br o de producao).
    • 4.4 Rode o deploy.bat, que está na raiz da pasta do projeto! Ou os comandos abaixo:
      • 4.4.1 mvn clean install -Pproducao -DskipTests
      • 4.4.2 mvn package -Pproducao -DskipTests
      • 4.4.3 mvn appengine:deploy -Pproducao -DskipTests

PS: Clique aqui para ver sobre o man profile "-Pproducao"

Autores

  • Robson Henrique Ramalho Costa - Trabalho inicial (Desenvovimento dos calculos das operações das NFEs, Assim como todo o desenvolvimento da lógica do preenchimento dos registros referentes ao SPED FISCAL ICMS IPI) - robsonhenriq

Veja também a lista de contribuidores que participaram deste projeto.

License

This project is licensed under the MIT License - see the LICENSE.md file for details