68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
1 |
#!/usr/bin/env python
|
2 |
# -*- coding: utf-8 -*-
|
|
108
by Marcelo Escobal
Info sobre la base de datos |
3 |
"""Clases para liquidación de sueldos"""
|
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
4 |
import decimal |
5 |
class Irpf(): |
|
6 |
"""Clase para liquidar irpf"""
|
|
7 |
def __init__(self, variables, liquidacion, detalle, empleado): |
|
8 |
"""Inicializar la clase"""
|
|
9 |
# Parametros
|
|
10 |
self.detalle = detalle |
|
11 |
self.liquidacion = liquidacion |
|
12 |
self.variables = variables |
|
13 |
self.empleado = empleado |
|
14 |
self.bcp = variables["bcp"] |
|
15 |
# Variables expuestas
|
|
16 |
self.monto_gravado = detalle["nominal"] + detalle["aguinaldo"] |
|
17 |
self.monto_a_deducir = 0 |
|
18 |
self.calculo_monto_a_deducir() |
|
19 |
self.tramos_irpf = list() |
|
20 |
self.porcentajes_irpf = list() |
|
21 |
self.escala_deducible = list() |
|
22 |
self.porcentajes_deducible = list() |
|
23 |
self.tramos_deducible = list() |
|
24 |
self.monto_gravado_irpf = list() |
|
25 |
self.monto_irpf = list() |
|
26 |
self.monto_deducible = list() |
|
109
by Marcelo Escobal
Conversión cálculo aportes fonasa |
27 |
self.ded_por_hijos = 0 |
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
28 |
self.irpf_sobre_monto_gravado = 0 |
29 |
self.irpf_total = 0 |
|
30 |
self.deduccion_total = 0 |
|
31 |
self.cess = 0 |
|
32 |
self.llenar_escalas() |
|
33 |
def llenar_escalas(self): |
|
34 |
"""Llenar escalas de deducible e IRPF"""
|
|
35 |
self.tramos_irpf = [7 * self.bcp, 10 * self.bcp, 15 * self.bcp, |
|
36 |
50 * self.bcp, 100 * self.bcp] |
|
37 |
if self.empleado["emni"] != 0: |
|
38 |
self.porcentajes_irpf = [10, 15, 20, 22, 25] |
|
39 |
else: |
|
40 |
self.porcentajes_irpf = [0, 10, 15, 20, 22, 25] |
|
41 |
self.porcentajes_deducible = [10, 15, 22, 25] |
|
108
by Marcelo Escobal
Info sobre la base de datos |
42 |
self.tramos_deducible = [3 * self.bcp, 8 * self.bcp, |
43 |
43 * self.bcp, 93 * self.bcp] |
|
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
44 |
def llenar_irpf(self): |
45 |
"""Llenar valores de IRPF"""
|
|
109
by Marcelo Escobal
Conversión cálculo aportes fonasa |
46 |
for contador in range(0, 4): |
47 |
self.monto_irpf[contador] = 0 |
|
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
48 |
piso = 0 |
109
by Marcelo Escobal
Conversión cálculo aportes fonasa |
49 |
cont = 0 |
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
50 |
monto = 0 |
51 |
for item in self.tramos_irpf: |
|
52 |
if self.monto_gravado <= piso: |
|
53 |
# si el monto es MENOR que el tramo anterior:
|
|
54 |
monto = 0 |
|
55 |
elif (self.monto_gravado > piso) and (self.monto_gravado <= item): |
|
56 |
# si el monto esta DENTRO del tramo:
|
|
57 |
monto = self.monto_gravado - piso |
|
58 |
else: |
|
59 |
# si el monto supera al tramo:
|
|
60 |
monto = item |
|
61 |
self.monto_gravado_irpf.append(monto) |
|
109
by Marcelo Escobal
Conversión cálculo aportes fonasa |
62 |
monto_tramo_actual = self.monto_gravado * \ |
63 |
self.porcentajes_irpf[cont] |
|
64 |
self.monto_irpf[cont] = monto_tramo_actual |
|
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
65 |
self.irpf_total = self.irpf_total + monto_tramo_actual |
109
by Marcelo Escobal
Conversión cálculo aportes fonasa |
66 |
cont = cont + 1 |
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
67 |
piso = item |
68 |
piso = 0 |
|
109
by Marcelo Escobal
Conversión cálculo aportes fonasa |
69 |
contador = 0 |
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
70 |
monto = 0 |
71 |
for item in self.tramos_deducible: |
|
72 |
if self.monto_deducible <= piso: |
|
73 |
# si el monto es MENOR que el tramo anterior
|
|
74 |
monto = 0 |
|
108
by Marcelo Escobal
Info sobre la base de datos |
75 |
elif (self.monto_deducible > piso) and \ |
76 |
(self.monto_deducible <= item): |
|
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
77 |
# si el monto esta DENTRO del tramo
|
78 |
monto = self.monto_deducible - piso |
|
79 |
else: |
|
80 |
# si el monto supera el tramo
|
|
81 |
monto = item |
|
109
by Marcelo Escobal
Conversión cálculo aportes fonasa |
82 |
monto_deduccion_actual = monto * \ |
83 |
self.porcentajes_deducible[contador] |
|
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
84 |
self.monto_deducible.append(monto_deduccion_actual) |
85 |
self.deduccion_total = self.deduccion_total + monto_deduccion_actual |
|
109
by Marcelo Escobal
Conversión cálculo aportes fonasa |
86 |
contador = contador + 1 |
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
87 |
piso = item |
88 |
def calculo_monto_a_deducir(self): |
|
89 |
"""Cálculo del monto a deducir"""
|
|
90 |
# Calculo cuota mutual
|
|
109
by Marcelo Escobal
Conversión cálculo aportes fonasa |
91 |
self.ded_por_hijos = self.empleado["hijos"] * 13 * \ |
108
by Marcelo Escobal
Info sobre la base de datos |
92 |
self.variables["bcp"] / 12 |
93 |
self.cess = self.detalle["bps"] + self.detalle["disse"] + \ |
|
94 |
self.detalle["frl"] |
|
109
by Marcelo Escobal
Conversión cálculo aportes fonasa |
95 |
self.monto_a_deducir = decimal.Decimal(str(self.ded_por_hijos)) + \ |
108
by Marcelo Escobal
Info sobre la base de datos |
96 |
self.cess + self.detalle["cjp"] |
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
97 |
class Sueldos(): |
98 |
"""Clase para liquidar sueldos"""
|
|
99 |
def __init__(self, variables, empleado, detalle): |
|
100 |
"""Inicializar"""
|
|
101 |
# Variables expuestas
|
|
102 |
self.empleado = empleado |
|
103 |
self.variables = variables |
|
104 |
self.detalle = detalle |
|
105 |
self.aguinaldo = detalle["aguinaldo"] |
|
108
by Marcelo Escobal
Info sobre la base de datos |
106 |
self.cess = self.cess = self.detalle["bps"] + self.detalle["disse"] + \ |
107 |
self.detalle["frl"] |
|
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
108 |
self.aporte_jubilatorio = 0 |
109 |
self.fonasa = 0 |
|
81
by Marcelo escobal
Nuevo calculo de sueldos |
110 |
self.porcentaje_fonasa = decimal.Decimal("0") |
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
111 |
self.frl = 0 |
112 |
self.aporte_personal = 0 |
|
113 |
self.monto_gravado_irpf = 0 |
|
114 |
self.calculo_ss() |
|
115 |
self.calculo_partidas_percibidas() |
|
116 |
self.calculo_aportes_personales() |
|
117 |
def calculo_partidas_percibidas(self): |
|
118 |
"""Calculo de partidas percibidas"""
|
|
119 |
pass
|
|
120 |
def calculo_aportes_personales(self): |
|
121 |
"""Calculo de aportes personales"""
|
|
81
by Marcelo escobal
Nuevo calculo de sueldos |
122 |
self.aporte_jubilatorio = self.cess * decimal.Decimal("0.15") |
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
123 |
self.fonasa = self.cess * self.porcentaje_fonasa |
81
by Marcelo escobal
Nuevo calculo de sueldos |
124 |
self.frl = self.cess * decimal.Decimal("0.0125") |
108
by Marcelo Escobal
Info sobre la base de datos |
125 |
self.monto_gravado_irpf = self.detalle["nominal"] + \ |
126 |
self.detalle["aguinaldo"] |
|
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
127 |
def calculo_ss(self): |
128 |
"""Calculo segun codigo de Seg Soc"""
|
|
108
by Marcelo Escobal
Info sobre la base de datos |
129 |
# Cálculo de aportes a FONASA según categoría
|
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
130 |
porcentaje = 0 |
109
by Marcelo Escobal
Conversión cálculo aportes fonasa |
131 |
limite = self.detalle["nominal"] / \ |
132 |
decimal.Decimal(str(self.variables['bcp'])) |
|
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
133 |
# si el límite es <= 2.5 BCP y NO es vitalicio, el porcentaje es 3
|
109
by Marcelo Escobal
Conversión cálculo aportes fonasa |
134 |
css = self.empleado['codigoss'] |
135 |
porc = {1:[3, 6], 2:[3, 6], 5:[3, 6], |
|
136 |
15:[3, 4.5], 28:[3, 4.5], 25:[3, 4.5], |
|
137 |
17:[5, 6.5], 27:[5, 6.5], 30:[5, 6.5], |
|
138 |
16:[5, 8], 26:[5, 8], 29:[5, 8], |
|
139 |
22:[0, 0], 21:[3, 3], 24:[2, 2], 23:[5, 5]} |
|
140 |
if css in porc: |
|
141 |
if limite < 2.5: |
|
142 |
porcentaje = porc[css][0] |
|
143 |
else: |
|
144 |
porcentaje = porc[css][1] |
|
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
145 |
else: |
109
by Marcelo Escobal
Conversión cálculo aportes fonasa |
146 |
# Error silenciado explicitamente
|
147 |
# Debería ser atrapado con mensaje
|
|
148 |
# Tengo flojera
|
|
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
149 |
porcentaje = 0 |
81
by Marcelo escobal
Nuevo calculo de sueldos |
150 |
self.porcentaje_fonasa = decimal.Decimal(str(porcentaje)) |
68
by Marcelo escobal
Parte de nueva liquidacion de sueldos. Commit previo a viaje |
151 |
if __name__ == "__main__": |
81
by Marcelo escobal
Nuevo calculo de sueldos |
152 |
print("Es un módulo no ejecutable.") |