Spaces:
Runtime error
Runtime error
| 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() | |