Portfólio Blog Sobre

Simula Impostos

Primeiro projeto com Electron: app desktop multiplataforma que calcula e compara encargos tributários brasileiros lado a lado, regime atual versus Reforma Tributária (EC 132/2023).

Electron React 19 TypeScript Vite Tailwind CSS Zustand electron-builder IPC
Simula Impostos

O Simula Impostos é um projeto de estudos e meu primeiro app com Electron (framework que empacota aplicações web como executáveis nativos). O contador seleciona o regime tributário, preenche os dados da nota fiscal e vê os totais do regime atual e da Reforma Tributária (EC 132/2023) lado a lado, com uma prévia no formato DANFE (Documento Auxiliar da Nota Fiscal Eletrônica) pronta para impressão.

Conceitos fundamentais

ConceitoO que é
framework (plataforma)Base pronta sobre a qual se constrói uma aplicação. Ela já resolve o trabalho comum e define as regras que o seu código segue.
ElectronFramework que junta o Chromium (o motor do Google Chrome) e o Node.js num executável só, para uma aplicação web rodar como programa instalado no Windows, no Linux e no macOS.
main process (processo principal)O ponto de entrada do app, um por aplicação. Roda em Node.js, então alcança o sistema inteiro: abre as janelas, lê e grava arquivos e chama as APIs do sistema operacional.
renderer process (processo de renderização)Um por janela aberta. É uma página web comum: roda HTML, CSS e JavaScript sob as mesmas regras de um site no navegador, e por isso não alcança o Node.js nem o disco. É onde a interface React deste app é desenhada.
preload script (script de pré-carregamento)Arquivo que roda no renderer antes da página carregar, e o único ali que recebe acesso às APIs do Node.js. É onde se decide o que o renderer vai poder fazer.
context bridge (ponte de contexto)API do Electron usada dentro do preload para publicar funções escolhidas a dedo no window do renderer. A interface chama essas funções e nada além delas.
IPC (Inter-Process Communication, Comunicação entre Processos)Canal de mensagens entre renderer e main process. O renderer pede, o main process executa e responde. É por aí que salvar uma nota chega ao disco.
Reforma TributáriaEmenda constitucional EC 132/2023 que substitui ICMS, ISS, IPI, PIS e COFINS por três novos tributos: CBS, IBS e IS. A transição ocorre entre 2026 e 2033.
NF-e (Nota Fiscal Eletrônica)Documento fiscal digital que o contribuinte emite para registrar uma venda de bem ou uma prestação de serviço.
regime tributárioClassificação legal da empresa que define quais impostos incidem e em quais alíquotas. O app cobre quatro: Simples Nacional, MEI, Lucro Presumido e Lucro Real.
CFOP (Código Fiscal de Operações e Prestações)Código que identifica a natureza da operação: venda, devolução, transferência e assim por diante.
NCM (Nomenclatura Comum do Mercosul)Código de 8 dígitos que classifica a mercadoria e determina quais alíquotas incidem sobre ela.
alíquotaO percentual que se aplica sobre a base de cálculo para chegar ao valor do imposto.
DANFE (Documento Auxiliar da Nota Fiscal Eletrônica)Documento impresso que acompanha a NF-e. O app gera uma prévia com controles de zoom e os dois blocos de cálculo tributário lado a lado.
electron-builderFerramenta que empacota o app em instaladores nativos: .AppImage e .deb no Linux, NSIS (.exe) no Windows e .dmg no macOS.

Stack

Backend
Tecnologia Papel
Electron 34 Main process: ciclo de vida, janela, IPC handlers
Node.js 24 Runtime do main process e scripts de build
electron-vite 2 Servidor de desenvolvimento que recarrega main e renderer a cada alteração
electron-builder 25 Empacotamento multiplataforma (Linux, Windows, macOS)
Frontend
Tecnologia Papel
React 19 & TypeScript 5.8 UI do renderer process
Vite 5 Bundler do renderer
Tailwind CSS 4 Estilização
Zustand 5 Estado global da nota fiscal
Lucide React Iconografia

Arquitetura e engenharia

Padrão Descrição Detalhes
Isolamento de processos Main e renderer em processos separados Toda leitura e escrita em disco passa pelo main via IPC; o renderer não acessa o sistema de arquivos
Ponte de contexto API segura exposta ao renderer via preload O renderer não recebe acesso livre ao Node.js; acessa só o que foi exposto de propósito
Handlers de IPC invoice.ipc.ts e print.ipc.ts no main process Persistência de NF e exportação PDF em handlers dedicados por domínio
Comparação tributária tax.calculate.ts com tabelas de alíquotas Regime atual (ICMS, ISS, IPI, PIS, COFINS, IRPJ, CSLL) vs pós-reforma (CBS 8,8%, IBS 17,7%, IS 0%)
Build multiplataforma Um código-fonte, três plataformas GitHub Actions detecta a tag de versão e publica AppImage, .deb, NSIS e DMG

O que a reforma troca pelo quê

A comparação lado a lado do app existe porque cinco tributos viram três. É essa correspondência que o tax.calculate.ts implementa:

Novo tributoNome completoEsferaSubstituiAlíquota estimada no app
CBSContribuição sobre Bens e ServiçosFederalPIS + COFINS8,8%
IBSImposto sobre Bens e ServiçosEstadual + MunicipalICMS + ISS17,7%
ISImposto SeletivoFederalNada; é novo0%

O IS não substitui nada: incide sobre bens considerados prejudiciais à saúde ou ao meio ambiente, como tabaco, bebida alcoólica, armas e veículos poluentes. Fica em 0% no app porque a regulamentação das alíquotas não estava fechada.

Do lado atual, o app calcula ICMS (estadual), ISS (municipal), IPI, PIS, COFINS, IRPJ e CSLL (federais). Os dois últimos incidem sobre o lucro, não sobre a nota, e por isso seguem fora do que a reforma reorganiza.

Destaques

A lista de notas exibe os totais dos dois regimes calculados em tempo real. O formulário reúne dados de emitente, destinatário e itens em uma tela única, com os blocos de impostos do regime atual e do pós-reforma visíveis na base. A prévia DANFE reproduz a estrutura visual de uma NF-e impressa com a comparação tributária lado a lado.

Lista de notas fiscais
Lista de Notas Fiscais
Formulário de edição da NF com comparação tributária
Formulário de edição com blocos de imposto regime atual e pós-reforma
Prévia DANFE com comparação tributária
Prévia DANFE

Dados fictícios e simulados. Os cálculos usam alíquotas estimadas e não têm validade fiscal, contábil ou jurídica. Projeto exclusivamente para fins de estudo.