Descrição completa do projeto "Calculo IRRF" — uma aplicação desktop (Windows Forms) em .NET 9 para cálculo do Imposto de Renda Retido na Fonte (IRRF), com suporte a tabelas locais e atualização online (scraping) das tabelas públicas.
Sumário
- Visão geral
- Principais funcionalidades
- Tecnologias e dependências
- Requisitos do sistema
- Estrutura do projeto
- Como compilar / executar (Visual Studio 2022 / dotnet)
- Banco de dados e migrações
- Como atualizar tabelas online (scraping)
- Testes e validação
- Contribuição e suporte
- Licença
Aplicação Windows Forms que calcula IRRF considerando:
- Cálculo normal (com dependentes e INSS)
- Cálculo simplificado (dedução fixa)
- Cálculo progressivo por faixas
- Comparação de vantagem (normal vs simplificado)
- Manutenção de parâmetros: valor por dependente, dedução simplificada, desconto mínimo, faixas de INSS/IRRF
- Atualização online das tabelas de IRRF via scraping (HtmlAgilityPack) a partir de páginas públicas (ex.: contabeis.com.br)
- Forms para manutenção de:
FrmDeducaoSimplificada— gerenciar valores de dedução simplificada por competênciaFrmDescontoMinimo— gerenciar valor mínimo para que haja desconto de IR- (Outros forms esperados no projeto para gerenciamento de faixas, dependentes, etc.)
- Serviços de cálculo no namespace
CalculoIRRF.Services.Calculo:IrrfCalculo— implementa regras de cálculo (Base normal, base simplificada, progressivo, descrições)- Serviços auxiliares para persistência e regras:
ISimplificadoServices,IDescontoMinimoServices,IIrrfServices,IDependenteServices, etc.
- Persistência com Entity Framework Core (SQLite):
- Migrations geradas em
CalculoIRRF\Migrations - Seed dos dados iniciais (dependente, dedução simplificada, faixas INSS/IRRF)
- Migrations geradas em
- Atualização online:
CalculoIRRF.Tributacao.IRRF.TributacaoRFBusaHtmlAgilityPackpara extrair faixas, deduções e valores de dependente de uma página pública- O resultado é persistido via serviços
IIrrfServices(métodoGravarRfb)
- .NET 9 (Target Framework — verificar no arquivo de projeto)
- C# 11 (construção com sintaxe de record-like DI em classes)
- Windows Forms (WinForms) — app desktop com atributo
[SupportedOSPlatform("windows")] - Entity Framework Core (provider SQLite)
Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.SqliteMicrosoft.EntityFrameworkCore.Designdotnet-ef(ferramenta CLI para migrations)
- HtmlAgilityPack — para scraping de tabelas online
- Ferramentas comuns: Visual Studio 2022 (recomendado) ou CLI
dotnet
- Windows 10/11 (aplicação WinForms)
- .NET 9 Runtime instalado
- Visual Studio 2022 com workload de .NET Desktop Development (se for abrir/compilar na IDE)
- Conexão com internet para usar a funcionalidade de atualização online (scraping)
CalculoIRRF/— projeto principalFrmDeducaoSimplificada.cs,FrmDescontoMinimo.cs— forms de manutençãoServices/— lógica de negócio e serviços (ex.:DescontoMinimoServices.cs,Calculo/IrrfCalculo.cs)Repository/Interface/— interfaces dos repositórios (ex.:IIrrfRepository.cs,IDependenteRepository.cs)Model/— entidades EF Core (ex.:Dependente.cs,DescontoMinimo.cs,Irrf.cs,IrrfRfb.cs,Simplificado.cs)Migrations/— migrations EF Core e snapshot (seed incluído)Tributacao/IRRF/— scraping e transformação (TributacaoRFB.cs,TributacaoRFBObj.cs)DataBase/— (esperado) contextoCalculoImpostoContext(usado pelo EF)Services/Validacao— helpers de validação/formatação (ex.:Validar)
Opção A — Visual Studio 2022 (recomendado)
- Abra a solução no Visual Studio 2022.
- Certifique-se de que o projeto de inicialização esteja correto (
CalculoIRRF). - Restaure os pacotes NuGet (Build > Restore NuGet Packages).
- Aplique as migrations (ver seção abaixo) ou deixe o projeto criar o banco ao iniciar, se implementado.
- Compile (Build > Build Solution).
- Execute (F5) — aplicativo será aberto como aplicação WinForms.
Opção B — CLI (.NET SDK)
- Abra terminal na pasta da solução.
- Restaurar pacotes:
dotnet restore
- (Instale a ferramenta EF Core se necessário)
dotnet tool install --global dotnet-ef(oudotnet tool update --global dotnet-ef)
- Compilar:
dotnet build
- Aplicar migrations (ver abaixo) e executar:
dotnet ef database update --project CalculoIRRF(ou use o PM> Console no Visual Studio)dotnet run --project CalculoIRRF
- Projeto já inclui migrations em
CalculoIRRF\Migrations(arquivoInitiale snapshot). - Provider usado nas migrations: SQLite (observe
annotation "Sqlite:Autoincrement"). - Seeds iniciais incluem valores para
Dependente,DescontoMinimo,Inss,IrrfeSimplificado. - Comando para aplicar migrations:
- CLI:
dotnet ef database update --project CalculoIRRF - Visual Studio Package Manager Console (PM>):
Update-Database -Project CalculoIRRF
- CLI:
- Se precisar criar nova migration:
dotnet ef migrations add NomeDaMigration --project CalculoIRRFdotnet ef database update --project CalculoIRRF
- A classe
TributacaoRFB(arquivoCalculoIRRF/Tributacao/IRRF/TributacaoRFB.cs) busca a tabela emhttps://www.contabeis.com.br/tabelas/imposto-renda/e tenta extrair:- vigência da tabela
- faixas (base, alíquota, dedução)
- valor por dependente e dedução simplificada (25% da primeira faixa)
- Requisitos:
- Dependência
HtmlAgilityPack - Mudanças no layout do site podem quebrar o parser; trate com logs e validações.
- Dependência
- A atualização verifica se já existe vigência gravada (
IIrrfServices.IsGov) e grava viaIIrrfServices.GravarRfb. - Segurança/ética: respeite o robots.txt e termos do site; este scraping é de exemplo para atualização automática — validar uso em produção.
IrrfCalculo— realiza cálculos do IRRF:BaseIrrfNormal(),BaseIrrfSimplificado()Normal(),Simplificado(),NormalProgressivo()- Métodos para gerar descrições detalhadas do cálculo (
DescricaoCalculoNormal, etc.)
DescontoMinimoServices— CRUD e leitura do valor mínimo para descontoTributacaoRFB— extrai e grava tabelas de IRRF obtidas online- Repositórios (
*Repository) — interface para persistência (CRUD + consultas específicas) - Models:
Dependente,DescontoMinimo,Inss,Irrf,IrrfRfb,Simplificado - Validação e formatação:
Validar(usado nas forms)
- Tratar all exceptions com logs adequados; evitar mostrar mensagens de erro técnicas ao usuário final.
- Ao usar scraping, incluir mecanismo de retry/backoff e validar conteúdo antes de gravar.
- Testar cálculos com valores conhecidos (unidades de teste ajudam a validar regressões).
- Separar responsabilidade: cálculo puro (unit testável) deve ser independente de UI e banco.
- Verifique formatação regional (pt-BR) ao parsear
MM/yyyye valores com,(vírgula) — o projeto mostra tratamentos usandoValidar.
- Recomenda-se criar testes unitários para:
- Regras de cálculo em
IrrfCalculo(normal, simplificado, progressivo) - Regras de formatação/validação em
Validar - Parsers da
TributacaoRFBusando HTML de exemplo (mocks)
- Regras de cálculo em
- Dados de seed nas migrations permitem testes manuais rápidos.
- Abra uma issue descrevendo o problema/feature.
- Crie uma branch com convenção
feature/oufix/. - Submeta PR com descrição clara do que foi alterado e por quê.
- Mantenha compatibilidade com .NET 9 e padrão de codificação do projeto.
- Se o app não iniciar: verifique se o runtime .NET 9 está instalado.
- Problemas com EF / migrations: execute
dotnet ef database updatee verifique se a cadeia de conexão SQLite (se presente) aponta para local gravável. - Erro ao usar atualização online: verifique se a página fonte mudou (HTML diferente). Consulte
CalculoIRRF/Tributacao/IRRF/TributacaoRFB.cspara adaptar os seletores XPath. - Mensagens de parsing de datas: confirme cultura/região ao converter
MM/yyyye outras datas.
- Restaurar:
dotnet restore
- Build:
dotnet build
- Aplicar migrations:
dotnet ef database update --project CalculoIRRF
- Executar:
dotnet run --project CalculoIRRF
- Projeto focado em ambiente Windows (WinForms) e usa EF Core + SQLite para persistência local.
- Seed inicial já incluiu tabelas e valores base; reveja
Migrationsse precisar atualizar valores. - Ao integrar scraping em produção, tratar limites, caches e validações para evitar gravação de dados corrompidos.
- Para dúvidas sobre implementação ou execução, abra uma issue no repositório.