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).
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
| Conceito | O 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. |
| Electron | Framework 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ária | Emenda 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ário | Classificaçã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íquota | O 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-builder | Ferramenta que empacota o app em instaladores nativos: .AppImage e .deb no Linux, NSIS (.exe) no Windows e .dmg no macOS. |
Stack
| 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) |
| 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 tributo | Nome completo | Esfera | Substitui | Alíquota estimada no app |
|---|---|---|---|---|
| CBS | Contribuição sobre Bens e Serviços | Federal | PIS + COFINS | 8,8% |
| IBS | Imposto sobre Bens e Serviços | Estadual + Municipal | ICMS + ISS | 17,7% |
| IS | Imposto Seletivo | Federal | Nada; é novo | 0% |
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

Formulário de edição da NF com comparação tributária

Prévia DANFE com comparação tributária

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.