File size: 3,806 Bytes
b60b332
7ac420f
b60b332
c7d2e82
b60b332
ba1a530
b60b332
355dbd3
7ac420f
 
 
 
 
 
 
 
7ad934a
7ac420f
 
 
7ad934a
7ac420f
 
 
 
 
047f76c
7ac420f
b82068f
6649697
 
b82068f
 
6649697
 
b82068f
 
b60b332
 
b82068f
 
 
b60b332
 
aba1b0b
b60b332
7ac420f
b82068f
 
 
 
7ac420f
9dde4e2
7ac420f
613165e
9dde4e2
b82068f
 
 
c7d2e82
6649697
 
 
b82068f
7ac420f
6649697
 
b60b332
 
7ac420f
6649697
 
7ad934a
b82068f
6649697
c3edc91
6649697
 
b82068f
 
 
6649697
c7d2e82
 
 
c3edc91
7ac420f
b82068f
 
 
ba1a530
f521194
b82068f
b60b332
 
 
 
 
 
 
7ac420f
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
from pathlib import Path
from types import SimpleNamespace
import streamlit as st
import pandas as pd

from impuestos import TRAMOS, TRAMOS_REFORMA, get_table, get_curve

TOPES = SimpleNamespace(arriendo=450000, cuidado=550000)


def aplicar_beneficios(sueldo_bruto):
    "Referencias de: https://chocale.cl/2022/07/reforma-tributaria-gobierno-claves-proyecto-impuestos/"
    sb = st.sidebar
    sb.header("Beneficios tributarios")
    arriendo = sb.number_input(
        "Gastos de arriendo",
        value=450000,
        min_value=0,
        help="Se creará una exención que permitirá deducir de la base imponible del Impuesto Global Complementario los gastos de arriendo, con un tope de $450.000 mensuales",
    )
    # creditos = sb.checkbox("Tienes créditos?", value=False)
    cuidado = sb.number_input(
        "Tienes gastos asociados al cuidado de un familiar?",
        min_value=0,
        help="Se podrá deducir de la base imponible del Impuesto Global Complementario aquellos gastos que estén relacionados al cuidado de personas menores de dos años, o de personas con grados de dependencia severa. El tope será de $550.000 al mes.",
    )
    return sueldo_bruto - min(arriendo, TOPES.arriendo) - min(cuidado, TOPES.cuidado)


def itanum(x):
    "Format number on roman style"
    return format(x, ",d").replace(",", ".")


def decimal(x):
    return format(x, ".2f").replace(".", ",")


def main() -> None:
    st.header(
        "Calcula tu impuesto a la renta :moneybag: :dollar: :bar_chart: con la Reforma Tributaria"
    )

    with st.expander("Como se usa esta cosa?"):
        st.write(Path("info.md").read_text())

    sueldo_bruto = st.number_input(
        "Sueldo Bruto Mensual",
        value=1500000,
        min_value=300000,
        format="%d",
    )

    # calcular nueva base imponible
    sueldo_bruto_reforma = aplicar_beneficios(sueldo_bruto)

    st.markdown(
        f"Tu sueldo imponible antes de impuestos con la reforma es: {sueldo_bruto_reforma} (incluye los descuentos asociados a los beneficios)"
    )

    # tabla de impuestos
    table_section = st.container()
    col1, col2 = table_section.columns((0.5, 0.5))

    col1.subheader("Tabla de Impuestos Actual")
    table, style = get_table(sueldo_bruto, TRAMOS)
    col1.dataframe(style)
    total = table["Impuesto"].sum()

    col2.subheader("Tabla de Impuestos Reforma")
    table, style = get_table(sueldo_bruto_reforma, TRAMOS_REFORMA)
    col2.dataframe(style)
    total_reforma = table["Impuesto"].sum()

    # Resultados
    st.markdown("---")
    results_section = st.container()
    col1, col2 = results_section.columns((0.5, 0.5))
    col1.markdown(
        f"### Total Impuesto: \nActualmente pagas **${itanum(total)}** que representa **({decimal(100*(total/sueldo_bruto))}\%)** de tasa efectiva"
    )
    explanation = f"### Total Impuesto con Reforma: \nPagarás **${itanum(total_reforma)}** que representa **({decimal(100*(total_reforma/sueldo_bruto))}\%)** de tasa efectiva"
    if total_reforma < total:
        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)"
    col2.markdown(explanation)
    st.markdown("---")

    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."
    )
    st.plotly_chart(get_curve(0), use_container_width=True)


if __name__ == "__main__":
    st.set_page_config(
        "Calculador de impuestos",
        "📊",
        initial_sidebar_state="expanded",
        layout="wide",
    )
    main()