~marcelo-escobal/geined/Alianza

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