1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datos
import funciones
class Irpf():
def __init__(self, variables, liquidacion, detalle, empleado):
"""Inicializar la clase"""
# Parametros
self.bcp = variables["bcp"]
# Variables expuestas
self.monto_gravado = detalle["nominal"] + detalle["aguinaldo"]
calculo_monto_a_deducir()
self.irpf = list()
self.tramos_irpf = list()
self.porcentajes_irpf = list()
self.escala_deducible = list()
self.monto_gravado_irpf = list()
self.monto_irpf = list()
self.monto_deducible = list()
llenar_escalas()
self.irpf_sobre_monto_gravado = 0
self.irpf_total = 0
self.deduccion_total = 0
def llenar_escalas(self):
"""Llenar escalas de deducible e IRPF"""
self.tramos_irpf = [7 * self.bcp, 10 * self.bcp, 15 * self.bcp,
50 * self.bcp, 100 * self.bcp]
if self.emnni != 0:
self.porcentajes_irpf = [10, 15, 20, 22, 25]
else:
self.porcentajes_irpf = [0, 10, 15, 20, 22, 25]
self.porcentajes_deducible = [10, 15, 22, 25]
self.tramos_deducible = [3 * bcp, 8 * bcp, 43 * bcp, 93 * bcp]
def llenar_irpf(self):
"""Llenar valores de IRPF"""
piso = 0
n = 0
monto = 0
for item in self.tramos_irpf:
if self.monto_gravado <= piso:
# si el monto es MENOR que el tramo anterior:
monto = 0
elif (self.monto_gravado > piso) and (self.monto_gravado <= item):
# si el monto esta DENTRO del tramo:
monto = self.monto_gravado - piso
else:
# si el monto supera al tramo:
monto = item
self.monto_gravado_irpf.append(monto)
monto_tramo_actual = self.monto_gravado * self.porcentajes_irpf[n]
self.monto_irpf.append(monto_tramo_actual)
self.irpf_total = self.irpf_total + monto_tramo_actual
n = n + 1
piso = item
piso = 0
n = 0
monto = 0
for item in self.tramos_deducible:
if self.monto_deducible <= piso:
# si el monto es MENOR que el tramo anterior
monto = 0
elif (self.monto_deducible > piso) and (self.monto_deducible <= item):
# si el monto esta DENTRO del tramo
monto = self.monto_deducible - piso
else:
# si el monto supera el tramo
monto = item
self.monto_a_deducir.append(monto)
monto_deduccion_actual = monto * self.porcentajes_deducible[n]
self.monto_deducido.append(monto_deduccion_actual)
self.deduccion_total = self.deduccion_total + monto_deduccion_actual
n = n + 1
piso = item
def calculo_monto_a_deducir(self):
"""Cálculo del monto a deducir"""
# Calculo cuota mutual
deducciones_por_hijos = self.empleado["hijos"] * 13 * self.variables["bcp"] / 12
self.monto_a_deducir = deducciones_por_hijos + self.detalle["cess"] + self.detalle["cjp"]
class Sueldos():
def __init__(self, variables, empleado, detalle):
"""Inicializar"""
# Variables expuestas
self.empleado = empleado
self.variables = variables
self.nominal = detalle["nominal"]
self.aguinaldo = detalle["aguinaldo"]
self.materia_gravada_cess
self.aporte_jubilatorio
self.fonasa
self.porcentaje_fonasa
self.frl
self.aporte_personal
self.monto_gravado_irpf
calculo_ss()
calculo_partidas_percibidas()
calculo_aportes_personales()
def calculo_partidas_percibidas(self):
"""Calculo de partidas percibidas"""
# cantidad_horas_semanales = detalle["horas_sem"] *
def calculo_aportes_personales(self):
"""Calculo de aportes personales"""
self.aporte_jubilatorio = self.materia_gravada_cess * 0.15
self.fonasa = self.materia_gravada_cess * self.porcentaje_fonasa
self.frl = self.materia_gravada_cess * 0.0125
self.monto_gravado_irpf = self.nominal + self.aguinaldo
def calculo_ss(self):
"""Calculo segun codigo de Seg Soc"""
# IMPORTANTE: no tengo idea como cambia con el cambio de decreto el 1/10/08 */
# diferentes posibilidades según el código de SS
# TODO: discriminar esto, que coño es.
porcentaje = 0
limite = nominal / self.variables['bcp']
# si el límite es <= 2.5 BCP y NO es vitalicio, el porcentaje es 3
if self.empleado['codigoss'] == 1:
if limite <= 2.5:
porcentaje = 3
else:
porcentaje = 6
elif self.empleado['codigoss'] == 2:
if limite <= 2.5:
porcentaje = 3
else:
porcentaje = 6
elif self.empleado['codigoss'] == 15:
if limite <= 2.5:
porcentaje = 3
else:
porcentaje = 4.5
elif self.empleado['codigoss'] == 21:
porcentaje = 3
elif self.empleado['codigoss'] == 28:
if limite <= 2.5:
porcentaje = 3
else:
porcentaje = 4.5
else:
porcentaje = 0
self.porcentaje_fonasa = porcentaje
|