Skip to content

Instantly share code, notes, and snippets.

@elias19r
Last active April 18, 2024 16:47
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save elias19r/f2057620c647917657a5da41a43419bf to your computer and use it in GitHub Desktop.
Save elias19r/f2057620c647917657a5da41a43419bf to your computer and use it in GitHub Desktop.
# Informe aqui as receitas brutas mensais (faturamentos)
receitas_brutas_mensais = [
9_999.99,
]
cliente_reside_no_exterior = true
prolabore_atual = nil
# Salve e rode no terminal: ruby meus_impostos_pj.rb
# ==============================================================================
# Definições
# ==============================================================================
# Receita bruta no Período da Apuração (RPA) (ou seja, o faturamento atual)
rpa = receitas_brutas_mensais.last
# Receita Bruta nos últimos 12 meses anteriores (RBT12)
rbt12 = begin
lista = receitas_brutas_mensais.dup
case lista.length
when 0 then 0
when 1
lista.first * 12.0
when 2..12
lista.pop
(lista.sum / lista.length) * 12.0
else
lista = lista.last(13)
lista.pop
lista.sum
end
end.round(2)
salario_minimo = 1_412.00
# Tabela para cálculo do Imposto de Renda de Pessoa Física
# Ref: https://www.gov.br/receitafederal/pt-br/assuntos/meu-imposto-de-renda/tabelas/2023
tabela_irpf = [
# Salário Base Alíquota Dedução
[ 2_112.00, 0.0000, 0.00 ],
[ 2_826.65, 0.0750, 158.40 ],
[ 3_751.05, 0.1500, 370.40 ],
[ 4_664.68, 0.2250, 651.73 ],
[ Float::INFINITY, 0.2750, 884.96 ],
]
# Anexos do Simples Nacional
anexos = [
{
numero: 3, # Ref: https://www.qipu.com.br/simples-nacional/anexo-3/
prolabore: prolabore_atual || begin
valor = (0.28 * rpa).ceil # 28% do Faturamento Atual (RPA)
valor > salario_minimo ? valor : salario_minimo
end,
tabela: [
# RBT12 Limite Alíquota PD IRPJ CSLL COFINS PIS CPP ISS
[ 180_000.00, 0.060, 0.00, 0.0400, 0.0350, 0.1282, 0.0278, 0.4340, 0.3350 ],
[ 360_000.00, 0.112, 9_360.00, 0.0400, 0.0350, 0.1405, 0.0305, 0.4340, 0.3200 ],
[ 720_000.00, 0.135, 17_640.00, 0.0400, 0.0350, 0.1364, 0.0296, 0.4340, 0.3250 ],
[ 1_800_000.00, 0.160, 35_640.00, 0.0400, 0.0350, 0.1364, 0.0296, 0.4340, 0.3250 ],
]
},
{
numero: 5, # Ref: https://www.qipu.com.br/simples-nacional/anexo-5/
prolabore: prolabore_atual || salario_minimo,
tabela: [
# RBT12 Limite Alíquota PD IRPJ CSLL COFINS PIS CPP ISS
[ 180_000.00, 0.155, 0.00, 0.2500, 0.1500, 0.1410, 0.0305, 0.2885, 0.1400 ],
[ 360_000.00, 0.180, 4_500.00, 0.2300, 0.1500, 0.1410, 0.0305, 0.2785, 0.1700 ],
[ 720_000.00, 0.195, 9_900.00, 0.2400, 0.1500, 0.1492, 0.0323, 0.2385, 0.1900 ],
[ 1_800_000.00, 0.205, 17_100.00, 0.2100, 0.1500, 0.1574, 0.0341, 0.2385, 0.2100 ],
]
}
]
# ==============================================================================
# Cálculos
# ==============================================================================
puts "
=============================================================================
Receita bruta no Período da Apuração (RPA): #{rpa}
Receita Bruta nos últimos 12 meses anteriores (RBT12): #{rbt12}
=============================================================================
"
anexos.each do |anexo|
# Encontra faixa na tabela e pega valores
_, aliquota, parcela_deduzir, fator_irpj, fator_csll, fator_cofins, fator_pis, fator_cpp, fator_iss =
anexo[:tabela].find do |(rbt12_limite, _)|
rbt12 <= rbt12_limite
end
# Cálculo da Alíquota Efetiva
aliquota_efetiva = rbt12.zero? ? aliquota : aliquota - (parcela_deduzir / rbt12)
# Valor base do DAS (Documento de Arrecadação do Simples Nacional)
das_base = rpa * aliquota_efetiva
# Impostos do DAS
das_irpj = (das_base * fator_irpj).round(2)
das_csll = (das_base * fator_csll).round(2)
das_cofins = (das_base * fator_cofins).round(2)
das_pis = (das_base * fator_pis).round(2)
das_inss = (das_base * fator_cpp).round(2)
das_iss = (das_base * fator_iss).round(2)
if cliente_reside_no_exterior
das_cofins = 0.0
das_pis = 0.0
das_iss = 0.0
end
# Impostos sobre Pró-labore
# INSS. Ref: https://www.contabilizei.com.br/contabilidade-online/calcular-pro-labore/#quais-impostos-os-socios-pagam
prolabore_inss = (0.11 * anexo[:prolabore]).round(2)
# IRPF. Ref: https://fdr.com.br/artigos/salario-liquido-aprenda-a-calcular-os-descontos-do-ir-inss-e-vt-do-seu-salario/
prolabore_irpf = begin
base = anexo[:prolabore] - prolabore_inss
_, aliquota_irpf, deducao_irpf = tabela_irpf.find do |(salario_base, _)|
base <= salario_base
end
(base * aliquota_irpf - deducao_irpf).round(2)
end
total_das = (das_irpj + das_csll + das_cofins + das_pis + das_inss + das_iss).round(2)
total_prolabore = (prolabore_inss + prolabore_irpf).round(2)
total_impostos = (total_das + total_prolabore).round(2)
percentual_impostos_sobre_faturamento_atual = ((total_impostos / rpa) * 100.0).round(2)
puts "
=============================================================================
Anexo #{anexo[:numero]}
-----------------------------------------------------------------------------
- Alíquota: #{(aliquota * 100.0).round(2)}
- Alíquota Efetiva: #{(aliquota_efetiva * 100.0).round(2)}
-----------------------------------------------------------------------------
Impostos do DAS (Total #{total_das})
- IRPJ: #{das_irpj}
- CSLL: #{das_csll}
- COFINS: #{das_cofins}
- PIS: #{das_pis}
- INSS: #{das_inss}
- ISS: #{das_iss}
-----------------------------------------------------------------------------
Impostos sobre Pró-labore bruto de #{anexo[:prolabore]} (Total #{total_prolabore})
- INSS (GPS): #{prolabore_inss}
- IRPF (DARF): #{prolabore_irpf}
-----------------------------------------------------------------------------
Total de Impostos
#{total_impostos}
-----------------------------------------------------------------------------
Percentual de Impostos sobre Faturamento Atual (RPA)
#{percentual_impostos_sobre_faturamento_atual}%
=============================================================================
"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment