Desenvolvido para empresas

Sistema de gestão fiscal e estoque

ÁreaGestão e integração
O que fazAntes, dois vendedores fechavam a mesma peça. Agora o sistema reserva o estoque e emite a nota fiscal.
FunçõesNota fiscal automática · Estoque em tempo real · Impostos calculados
HabilidadesLevantamento de processo · Design de telas · Integração com SEFAZ · Integração bancária
Como foi construídoLevantei o processo de venda, estoque e fechamento com quem emite nota e fecha o balanço. Desenhei as telas e o fluxo com o time, construí o sistema, testei a emissão no ambiente de testes da SEFAZ e implantei.

O que o sistema cobre.

Cobre a venda de ponta a ponta: pedido, reserva de estoque, cálculo de impostos, emissão da nota fiscal, baixa do estoque com custo médio, cobrança bancária e fechamento do mês com geração dos arquivos do SPED. Atende grupos com mais de uma empresa ou filial e serve às áreas comercial, estoque, fiscal e financeira em um único sistema.

Para quem

Comércio e indústria de médio porte, com mais de uma empresa ou filial, que emitem nota fiscal e apuram ICMS.

O que mudou na empresa

Ninguém mais vende sem saldo, a nota sai mesmo com a SEFAZ fora do ar, o retorno do banco baixa os títulos sozinho e o mês fechado não é mais refeito na mão.

Módulos e funções.

8 partes do sistema, cada uma com o que faz.

Pedido de venda

Confere preço, condição de pagamento e limite de crédito da filial antes de tocar no estoque.

Reserva de estoque

Segura o saldo por filial e depósito, com dono, prazo e motivo; vencida, devolve sozinha.

Cálculo de impostos

CFOP, ICMS-ST, alíquota e IBS/CBS por regime tributário, em cadastro com data de vigência.

Emissão de nota fiscal

Assina e envia a NF-e à SEFAZ; reenvio nunca gera nota duplicada.

Contingência da SEFAZ

SEFAZ fora do ar: a nota sai pela contingência e é transmitida quando o serviço volta.

Baixa e custo médio

A saída consome a reserva e recalcula o custo médio por empresa e filial, com histórico.

Cobrança e conciliação

Remessa ao banco e baixa dos títulos pelo retorno; o que não casa fica em exceção.

Fechamento e SPED

Mês fechado só aceita estorno com autor e motivo; gera EFD ICMS/IPI, Contribuições e ECD.

Três telas.

O design é meu. Cada legenda diz o que a tela faz.

Apuração de ICMS por operação e mês, pronta para o contador
Tela 1Apuração de ICMS por operação e mês, pronta para o contador
Estoque e reservas por depósito, custo médio por filial
Tela 2Estoque e reservas por depósito, custo médio por filial
Retorno do banco conciliado com os boletos, exceções em fila
Tela 3Retorno do banco conciliado com os boletos, exceções em fila

Como funciona por dentro.

Dois vendedores, a última peça, um clique cada. Quem leva decide o banco de dados, não a tela.

  1. Pedido de vendaValida preço, condição de pagamento e limite de crédito da filial. Nenhum saldo é tocado ainda.
  2. Reserva de saldoSELECT FOR UPDATE na linha de saldo por empresa, filial, depósito e SKU, sempre na mesma ordem de SKU. A reserva nasce com dono, prazo e motivo; expirou, um job devolve o saldo e registra o evento.
  3. Motor fiscalResolve CFOP, CST ou CSOSN por regime tributário, base de cálculo, ICMS-ST por MVA e os grupos de IBS e CBS da transição. Tudo por vigência.
  4. Emissão da NF-eXML assinado e evento no outbox, na mesma transação da venda. Envio assíncrono; o retorno grava pela chave de acesso e reenvio nunca gera segunda nota.
  5. ContingênciaSEFAZ origem fora do ar: SVC-AN ou SVC-RS conforme a UF, e a autorização na SVC já é definitiva. Sem SVC alcançável, EPEC: o DANFE sai e a fila transmite a nota quando o autorizador volta.
  6. Baixa e custoA saída consome a reserva na mesma transação. Custo médio móvel recalculado por empresa e filial (estabelecimento), com trilha do movimento.
  7. Financeiro e conciliaçãoTítulo vira remessa CNAB 240. O retorno concilia e baixa pelo nosso número; o que não casa fica em fila de exceção, não baixa no chute.
  8. Escrituração e SPEDCompetência fechada vira somente leitura. EFD ICMS/IPI, EFD Contribuições e ECD são montados a partir da partição fechada, validados por layout e assinados com o A1. Retificar é gerar arquivo novo.

O problema e a saída.

O problema

Vender parece simples até dois pedidos disputarem a última peça. O sistema promete estoque que não tem, a NF-e sai com CFOP errado, o retorno do banco não bate e alguém reprocessa o mês inteiro no braço para fechar o balanço.

A saída

Um núcleo transacional: reserva de saldo com lock de linha, emissão fiscal idempotente pela chave de acesso e competência que fecha e vira somente leitura. Depois do fechamento, correção é estorno com autor e motivo, e SPED retificador.

Tecnologias e o porquê.

CamadaEscolhaPor quê
Banco de dadosPostgreSQL 16, particionado por empresa e competênciaMovimento de estoque e razão crescem por mês e quase nunca são lidos fora da própria competência. Partição por empresa e competência deixa o índice quente pequeno, faz o fechamento e a montagem do SPED varrerem só a partição do período e transforma expurgo em DETACH em vez de DELETE em massa.
Numeração fiscalSequência por série em tabela, com lock de linhaSequence do Postgres não serve: ela avança fora da transação e deixa buraco na numeração, o que o fisco não aceita. A série tem linha própria e é travada no momento da emissão, serializa por série, não pelo banco inteiro.
AplicaçãoJava 21 e Spring Boot 3, transação curta e explícitaReserva, baixa e escrituração exigem controle fino de fronteira transacional e de nível de isolamento. Transação declarada no caso de uso, nunca no repositório, mantém o lock de saldo aberto por milissegundos e não pelo tempo de uma chamada externa.
Integração SEFAZCliente SOAP próprio, XMLDSig, certificado A1 em cofreLayout de NF-e muda por nota técnica e a transição IBS/CBS mexeu no XML inteiro. Cliente próprio deixa o schema versionado junto do código e testável contra homologação, com os endpoints de SVC-AN, SVC-RS e EPEC no mesmo cadastro. O A1 fica em cofre, assinatura sob demanda, sem certificado espalhado em servidor.
MensageriaRabbitMQ com padrão outbox transacional e DLQO evento de emissão é gravado na mesma transação do pedido e da baixa. O publicador lê o outbox depois. Se a SEFAZ demora ou o broker cai, nada se perde e nada duplica; o que estoura a política de retry cai na DLQ com o payload inteiro para reprocesso manual.
InterfaceReact e TypeScript, grid virtualizada e filtro indexadoO usuário de retaguarda vive em grid de milhares de linhas: monitor de NF-e, títulos em aberto, movimento de estoque. Virtualização segura o scroll sem paginar. Filtro salvo fixa um conjunto pequeno de predicados por usuário e filial, e é para eles que os índices dessas telas são projetados, em vez de para consulta livre.

Decisões de projeto.

Lock pessimista na reserva, não otimista

FOR UPDATE serializa a linha do saldo. Ninguém vende o que não existe. O preço é contenção no pico e deadlock em pedido multi-item, contornado travando os SKUs em ordem determinística.

Regra fiscal em tabela, não em código

MVA, alíquota, CFOP e CST por regime tributário viram cadastro versionado por vigência. O cadastro fica pesado e exige teste de regressão fiscal; em troca mudança de norma não vira deploy.

Período fechado só aceita estorno

Nada de UPDATE em movimento escriturado. O razão cresce e o relatório fica caro; em troca balancete e custo médio batem em qualquer data, e o SPED do período vira arquivo retificador.

Escopo.

O que o sistema cobre

  • O fluxo de 8 passos e as decisões acima.
  • As três telas desta página.

O que não está publicado

  • Nome da empresa e números de operação não são divulgados aqui.
  • O código não é público. O que dá para ver: o processo, as telas e as decisões.

Da mesma faixa.

Gestão e integração

Quer ver este sistema de perto?

Mostro o processo que mudou, os módulos, as telas e como foi construído.

Contato

Quer ver isso de perto?

Diegorafacarvalho@gmail.com +55 47 98801-8335

Santa Catarina, Brasil, remoto. Costumo responder no mesmo dia.

Sem formulário

  • Recrutador não preenche formulário, copia o e-mail. Ele está aí em cima.
  • A versão rápida é uma página só, imprime em A4 e serve para encaminhar ao tech lead.
  • Qualquer sistema daqui eu mostro em chamada: o processo que mudou, os módulos, as telas e como foi construído.
  • Os sistemas foram desenvolvidos para empresas e o código não é público. Este site também é meu, do motor de scroll ao design: veja como funciona.