tcapelle's picture
styling
c3edc91
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()