tcapelle commited on
Commit
b82068f
1 Parent(s): 6649697
Files changed (2) hide show
  1. app.py +24 -11
  2. impuestos.py +29 -6
app.py CHANGED
@@ -26,33 +26,42 @@ def aplicar_beneficios(sueldo_bruto):
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")
 
 
38
 
39
  with st.expander("Como se usa esta cosa?"):
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)
@@ -62,20 +71,24 @@ def main() -> None:
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__":
80
  st.set_page_config(
81
  "Calculador de impuestos",
 
26
  )
27
  return sueldo_bruto - min(arriendo, TOPES.arriendo) - min(cuidado, TOPES.cuidado)
28
 
29
+
30
  def itanum(x):
31
  "Format number on roman style"
32
+ return format(x, ",d").replace(",", ".")
33
+
34
 
35
  def decimal(x):
36
+ return format(x, ".2f").replace(".", ",")
37
+
38
 
39
  def main() -> None:
40
+ st.header(
41
+ "Calcula tu impuesto a la renta :moneybag: :dollar: :bar_chart: con la Reforma Tributaria"
42
+ )
43
 
44
  with st.expander("Como se usa esta cosa?"):
45
  st.write(Path("info.md").read_text())
46
 
47
  sueldo_bruto = st.number_input(
48
+ "Sueldo Bruto Mensual",
49
+ value=1500000,
50
+ min_value=300000,
51
+ format="%d",
52
  )
53
 
54
  # calcular nueva base imponible
55
  sueldo_bruto_reforma = aplicar_beneficios(sueldo_bruto)
56
 
57
+ st.markdown(
58
+ f"Tu sueldo imponible antes de impuestos con la reforma es: {sueldo_bruto_reforma} (incluye los descuentos asociados a los beneficios)"
59
+ )
60
 
61
  # tabla de impuestos
62
  table_section = st.container()
63
  col1, col2 = table_section.columns((0.5, 0.5))
64
+
65
  col1.subheader("Tabla de Impuestos Actual")
66
  table, style = get_table(sueldo_bruto, TRAMOS)
67
  col1.dataframe(style)
 
71
  table, style = get_table(sueldo_bruto_reforma, TRAMOS_REFORMA)
72
  col2.dataframe(style)
73
  total_reforma = table["Impuesto"].sum()
74
+
75
  # Resultados
76
  results_section = st.container()
77
  col1, col2 = results_section.columns((0.5, 0.5))
78
+ col1.markdown(
79
+ f"### Total Impuesto: \nActualmente pagas **${itanum(total)}** que representa **({decimal(100*(total/sueldo_bruto))}\%)** de tasa efectiva"
80
+ )
81
  explanation = f"### Total Impuesto con Reforma: \nPagarás **${itanum(total_reforma)}** que representa **({decimal(100*(total_reforma/sueldo_bruto))}\%)** de tasa efectiva"
82
  if total_reforma < total:
83
  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)"
84
  col2.markdown(explanation)
85
 
86
+ st.markdown(
87
+ "### 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."
88
+ )
89
  st.plotly_chart(get_curve(0), use_container_width=True)
90
 
91
+
92
  if __name__ == "__main__":
93
  st.set_page_config(
94
  "Calculador de impuestos",
impuestos.py CHANGED
@@ -52,28 +52,51 @@ def get_table(sueldo_bruto, tramos=TRAMOS):
52
  _tramos[:-1],
53
  _tramos[1:],
54
  tasas,
55
- *descomponer_en_tramos(sueldo_bruto, tramos)
56
  )
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]
 
 
 
 
 
 
 
 
 
 
 
72
 
73
  def get_curve(descuentos):
74
  def beneficios(s):
75
  return max(s - descuentos, 0)
 
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")
 
 
 
 
 
 
 
52
  _tramos[:-1],
53
  _tramos[1:],
54
  tasas,
55
+ *descomponer_en_tramos(sueldo_bruto, tramos),
56
  )
57
  )
58
  df = pd.DataFrame(
59
  data=data,
60
  columns=["Desde", "Hasta", "Tasa", "Monto imponible", "Impuesto"],
61
  )
62
+ style = df.style.format(
63
+ {
64
  "Desde": "{:,d}",
65
  "Hasta": "{:,d}",
66
  "Tasa": "{:.2f}",
67
  "Monto imponible": "{:,d}",
68
+ "Impuesto": "{:,d}",
69
+ },
70
+ decimal=",",
71
+ thousands=".",
72
+ )
73
  return df, style
74
 
75
 
76
+ salarios = [
77
+ 450_000,
78
+ 1000_000,
79
+ 1_500_000,
80
+ 2_000_000,
81
+ 3_000_000,
82
+ 5_000_000,
83
+ 8_000_000,
84
+ 10_000_000,
85
+ 15_000_000,
86
+ ]
87
+
88
 
89
  def get_curve(descuentos):
90
  def beneficios(s):
91
  return max(s - descuentos, 0)
92
+
93
  DF_CURVA = pd.DataFrame(columns=["actual", "reforma"], index=salarios)
94
  DF_CURVA["actual"] = [sum(descomponer_en_tramos(s, TRAMOS)[1]) for s in salarios]
95
+ DF_CURVA["reforma"] = [
96
+ sum(descomponer_en_tramos(beneficios(s), TRAMOS_REFORMA)[1]) for s in salarios
97
+ ]
98
+ return px.line(
99
+ DF_CURVA,
100
+ title="Impuesto con respecto al salario",
101
+ labels={"value": "Impuesto a pagar", "index": "Renta mensual"},
102
+ )