Created
November 29, 2017 15:40
-
-
Save felipecruz/43440a285016b598411431ce03ba4dfd to your computer and use it in GitHub Desktop.
IRPF
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from decimal import Decimal as D | |
MAX_TRIBUTAVEL = D("28559.70") | |
MAX_NAO_TRIBUTAVEL = D("40000.00") | |
def tabela_imposto(renda): | |
if renda < D('1903.98'): | |
aliquota = D('0.0') | |
if renda > D('1903.99') and renda < D('2826.65'): | |
aliquota = D('7.5') | |
deducao = D('142.80') | |
if renda > D('2826.66') and renda < D('3751.05'): | |
aliquota = D('15') | |
deducao = D('354.80') | |
if renda > D('3751.06') and renda < D('4664.68'): | |
aliquota = D('22.5') | |
deducao = D('636.13') | |
if renda > D('4664.68'): | |
aliquota = D('27.5') | |
deducao = D('869.36') | |
return aliquota, deducao | |
class DIRPF: | |
def __init__(self, cpf): | |
self.cpf = cpf | |
self.renda_tributavel = D('0.00') | |
self.renda_nao_tributavel = D('0.00') | |
self.pagamentos_declarados = D('0.00') | |
self.imposto_a_pagar = D('0.00') | |
self.abaixo_do_minimo = True | |
self.pagamentos = [] | |
self.rendas = [] | |
self.dependentes = [] | |
self.partner = [] | |
def adiciona_renda(self, renda): | |
self.rendas.append(renda) | |
def adiciona_pagamento(self, pagamento): | |
self.pagamentos.append(pagamento) | |
@property | |
def declaracao_obrigatoria(self): | |
pass | |
def calcular(self): | |
for renda in self.rendas: | |
if renda.tributavel(): | |
self.renda_tributavel += renda.value | |
else: | |
self.renda_nao_tributavel += renda.value | |
for pagamento in self.pagamentos: | |
self.pagamentos_declarados += pagamento.value | |
if self.renda_tributavel > MAX_TRIBUTAVEL: | |
self.abaixo_do_minimo = True | |
aliquota, deduction = tabela_imposto(self.renda_tributavel) | |
self.imposto_a_pagar = D('0.01') * aliquota * self.renda_tributavel | |
else: | |
pass | |
self.imposto_a_pagar = D('0.00') | |
def explicar(self): | |
msg1 = '''Sua renda tributável ({}) não excede o valor máximo\n | |
de {} | |
''' | |
if self.abaixo_do_minimo: | |
return msg1.format(self.renda_tributavel, MAX_TRIBUTAVEL) | |
def __repr__(self): | |
return ''' | |
IRPF Contribuinte: {} | |
============================================================= | |
===== Receitas ===== | |
Receitas tributáveis: {} | |
Receitas não tributáveis: {} | |
============================================================= | |
===== Pagamentos ===== | |
Pagamentos declarados: {} | |
============================================================= | |
===== Impostos ===== | |
{} | |
Imposto a pagar: {} | |
'''.format(self.cpf, | |
self.renda_tributavel, | |
self.renda_nao_tributavel, | |
self.pagamentos_declarados, | |
self.explicar(), | |
self.imposto_a_pagar) | |
class Renda: | |
def __init__(self, value, code=None, source=None): | |
self.code = code | |
self.value = D(value) | |
self.source = source | |
def tributavel(self): | |
raise Exception("Abstract") | |
class RendaTributavel(Renda): | |
def __init__(self, value, source): | |
super().__init__(value, source=source) | |
source = source | |
def tributavel(self): | |
return True | |
class RendaNaoTributavel(Renda): | |
def __init__(self, code, value, source): | |
super().__init__(value, code=code, source=source) | |
def tributavel(self): | |
return False | |
class Pagamento: | |
def __init__(self, code, value): | |
self.value = D(value) | |
self.code = code | |
renda1 = RendaNaoTributavel(13, "10000.00", source='00000000000') | |
renda2 = RendaTributavel("5000.00", source="00000000000") | |
pagamento1 = Pagamento(27, "10000.00") | |
taxes = DIRPF("000.000.000-00") | |
taxes.adiciona_renda(renda1) | |
taxes.adiciona_renda(renda2) | |
taxes.adiciona_pagamento(pagamento1) | |
taxes.calcular() | |
print(taxes) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment