Spaces:
Runtime error
Runtime error
add comma sep for thousands
Browse files- app.py +23 -16
- impuestos.py +9 -3
app.py
CHANGED
@@ -26,6 +26,12 @@ def aplicar_beneficios(sueldo_bruto):
|
|
26 |
)
|
27 |
return sueldo_bruto - min(arriendo, TOPES.arriendo) - min(cuidado, TOPES.cuidado)
|
28 |
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
def main() -> None:
|
31 |
st.header("Calcula tu impuesto a la renta :moneybag: :dollar: :bar_chart: con la Reforma Tributaria")
|
@@ -34,39 +40,40 @@ def main() -> None:
|
|
34 |
st.write(Path("info.md").read_text())
|
35 |
|
36 |
sueldo_bruto = st.number_input(
|
37 |
-
"Sueldo Bruto Mensual", value=1500000, min_value=300000
|
38 |
)
|
39 |
|
40 |
# calcular nueva base imponible
|
41 |
sueldo_bruto_reforma = aplicar_beneficios(sueldo_bruto)
|
42 |
|
43 |
-
st.
|
44 |
|
45 |
|
|
|
|
|
|
|
46 |
|
47 |
-
|
48 |
-
col1, col2 = st.columns((0.5, 0.5))
|
49 |
col1.subheader("Tabla de Impuestos Actual")
|
50 |
-
table = get_table(sueldo_bruto, TRAMOS)
|
51 |
-
col1.dataframe(
|
52 |
total = table["Impuesto"].sum()
|
53 |
-
col1.markdown(f"### Total Impuesto: \nActualmente pagas **${total}** que representa **({100*(total/sueldo_bruto):.2f}\%)** de tasa efectiva")
|
54 |
|
55 |
col2.subheader("Tabla de Impuestos Reforma")
|
56 |
-
table = get_table(sueldo_bruto_reforma, TRAMOS_REFORMA)
|
57 |
-
col2.dataframe(
|
58 |
total_reforma = table["Impuesto"].sum()
|
59 |
-
|
|
|
|
|
|
|
|
|
|
|
60 |
if total_reforma < total:
|
61 |
explanation += " (Pagas menos que antes dado que estas beneficiando del descuento propocinado por los beneficios tributarios de arriendo y/o cuidado. Tu monto imponible es mas bajo que antes)"
|
62 |
col2.markdown(explanation)
|
63 |
|
64 |
-
|
65 |
-
|
66 |
-
# results_df["reforma"] = [total_reforma, 100*(total_reforma/sueldo_bruto)]
|
67 |
-
# st.dataframe(results_df.style.highlight_max(axis=1))
|
68 |
-
|
69 |
-
st.markdown("### Objectivo de la reforma \nEn el siguiente grafico se ve claramente que la reforma empieza a tener efecto a partir de los 4 millones (pero muy lentamente 😱). Por ejemplo con 8 millones mensuales la diferencia es solo de 200000 mensual.")
|
70 |
st.plotly_chart(get_curve(0), use_container_width=True)
|
71 |
|
72 |
if __name__ == "__main__":
|
|
|
26 |
)
|
27 |
return sueldo_bruto - min(arriendo, TOPES.arriendo) - min(cuidado, TOPES.cuidado)
|
28 |
|
29 |
+
def itanum(x):
|
30 |
+
"Format number on roman style"
|
31 |
+
return format(x,',d').replace(",",".")
|
32 |
+
|
33 |
+
def decimal(x):
|
34 |
+
return format(x, '.2f').replace(".",",")
|
35 |
|
36 |
def main() -> None:
|
37 |
st.header("Calcula tu impuesto a la renta :moneybag: :dollar: :bar_chart: con la Reforma Tributaria")
|
|
|
40 |
st.write(Path("info.md").read_text())
|
41 |
|
42 |
sueldo_bruto = st.number_input(
|
43 |
+
"Sueldo Bruto Mensual", value=1500000, min_value=300000, format="%d",
|
44 |
)
|
45 |
|
46 |
# calcular nueva base imponible
|
47 |
sueldo_bruto_reforma = aplicar_beneficios(sueldo_bruto)
|
48 |
|
49 |
+
st.markdown(f"Tu sueldo imponible antes de impuestos con la reforma es: {sueldo_bruto_reforma} (incluye los descuentos asociados a los beneficios)")
|
50 |
|
51 |
|
52 |
+
# tabla de impuestos
|
53 |
+
table_section = st.container()
|
54 |
+
col1, col2 = table_section.columns((0.5, 0.5))
|
55 |
|
|
|
|
|
56 |
col1.subheader("Tabla de Impuestos Actual")
|
57 |
+
table, style = get_table(sueldo_bruto, TRAMOS)
|
58 |
+
col1.dataframe(style)
|
59 |
total = table["Impuesto"].sum()
|
|
|
60 |
|
61 |
col2.subheader("Tabla de Impuestos Reforma")
|
62 |
+
table, style = get_table(sueldo_bruto_reforma, TRAMOS_REFORMA)
|
63 |
+
col2.dataframe(style)
|
64 |
total_reforma = table["Impuesto"].sum()
|
65 |
+
|
66 |
+
# Resultados
|
67 |
+
results_section = st.container()
|
68 |
+
col1, col2 = results_section.columns((0.5, 0.5))
|
69 |
+
col1.markdown(f"### Total Impuesto: \nActualmente pagas **${itanum(total)}** que representa **({decimal(100*(total/sueldo_bruto))}\%)** de tasa efectiva")
|
70 |
+
explanation = f"### Total Impuesto con Reforma: \nPagarás **${itanum(total_reforma)}** que representa **({decimal(100*(total_reforma/sueldo_bruto))}\%)** de tasa efectiva"
|
71 |
if total_reforma < total:
|
72 |
explanation += " (Pagas menos que antes dado que estas beneficiando del descuento propocinado por los beneficios tributarios de arriendo y/o cuidado. Tu monto imponible es mas bajo que antes)"
|
73 |
col2.markdown(explanation)
|
74 |
|
75 |
+
|
76 |
+
st.markdown("### Objectivo de la reforma \nEn el siguiente grafico se ve claramente que la reforma empieza a tener efecto a partir de los 4 millones (pero muy lentamente 😱). Por ejemplo con 8 millones mensuales la diferencia es solo de $200.000 mensual.")
|
|
|
|
|
|
|
|
|
77 |
st.plotly_chart(get_curve(0), use_container_width=True)
|
78 |
|
79 |
if __name__ == "__main__":
|
impuestos.py
CHANGED
@@ -57,9 +57,15 @@ def get_table(sueldo_bruto, tramos=TRAMOS):
|
|
57 |
)
|
58 |
df = pd.DataFrame(
|
59 |
data=data,
|
60 |
-
columns=["Desde", "Hasta", "Tasa", "Monto
|
61 |
)
|
62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
|
64 |
|
65 |
salarios = [450_000, 1000_000, 1_500_000, 2_000_000, 3_000_000, 5_000_000, 8_000_000, 10_000_000, 15_000_000]
|
@@ -70,4 +76,4 @@ def get_curve(descuentos):
|
|
70 |
DF_CURVA = pd.DataFrame(columns=["actual", "reforma"], index=salarios)
|
71 |
DF_CURVA["actual"] = [sum(descomponer_en_tramos(s, TRAMOS)[1]) for s in salarios]
|
72 |
DF_CURVA["reforma"] = [sum(descomponer_en_tramos(beneficios(s) , TRAMOS_REFORMA)[1]) for s in salarios]
|
73 |
-
return px.line(DF_CURVA)
|
|
|
57 |
)
|
58 |
df = pd.DataFrame(
|
59 |
data=data,
|
60 |
+
columns=["Desde", "Hasta", "Tasa", "Monto imponible", "Impuesto"],
|
61 |
)
|
62 |
+
style = df.style.format({
|
63 |
+
"Desde": "{:,d}",
|
64 |
+
"Hasta": "{:,d}",
|
65 |
+
"Tasa": "{:.2f}",
|
66 |
+
"Monto imponible": "{:,d}",
|
67 |
+
"Impuesto": "{:,d}"}, decimal=',', thousands='.')
|
68 |
+
return df, style
|
69 |
|
70 |
|
71 |
salarios = [450_000, 1000_000, 1_500_000, 2_000_000, 3_000_000, 5_000_000, 8_000_000, 10_000_000, 15_000_000]
|
|
|
76 |
DF_CURVA = pd.DataFrame(columns=["actual", "reforma"], index=salarios)
|
77 |
DF_CURVA["actual"] = [sum(descomponer_en_tramos(s, TRAMOS)[1]) for s in salarios]
|
78 |
DF_CURVA["reforma"] = [sum(descomponer_en_tramos(beneficios(s) , TRAMOS_REFORMA)[1]) for s in salarios]
|
79 |
+
return px.line(DF_CURVA, title="Impuesto con respecto al salario")
|