Préstamos

Juan David Velásquez Henao
jdvelasq@unal.edu.co
Universidad Nacional de Colombia, Sede Medellín
Facultad de Minas
Medellín, Colombia


Haga click aquí para acceder a la última versión online.

Haga click aquí para ver la última versión online en nbviewer.


Preparación


In [1]:
# Importa la librería financiera.
# Solo es necesario ejecutar la importación una sola vez.
import cashflows as cf

 Bullet Loan

bullet_loan(amount, nrate, dispoints=0, orgpoints=0, prepmt=None)

En este tipo de préstamo se pagan únicamente intereses durante la vida del crédito; con la última cuota se paga el capital.

  • amount -- monto del crédito.
  • nrate -- tasa nominal de interés.
  • dispoints -- puntos (costo) de descuento como porcentaje de amount. Se consideran como intereses anticipados y son deducibles de impuestos.
  • orgpoints -- puntos (costo) de constitución como porcentaje de amount. Son costos no deducibles para el pago de impuestos.
  • prepmt -- flujo de efectivo que representa prepago de la deuda.

Ejemplo.- Modele un préstamo de $ 1000 a una tasa de interés del 10% y una duración de 10 años.


In [2]:
cf.bullet_loan(amount=1000, 
               nrate=cf.interest_rate(const_value=10, periods=11, start=2017, freq='A'), 
               dispoints=0, 
               orgpoints=0, 
               prepmt=None)


Out[2]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2017 0.0 10.0 0.0 0.0 0.0 1000.0
2018 1000.0 10.0 100.0 100.0 0.0 1000.0
2019 1000.0 10.0 100.0 100.0 0.0 1000.0
2020 1000.0 10.0 100.0 100.0 0.0 1000.0
2021 1000.0 10.0 100.0 100.0 0.0 1000.0
2022 1000.0 10.0 100.0 100.0 0.0 1000.0
2023 1000.0 10.0 100.0 100.0 0.0 1000.0
2024 1000.0 10.0 100.0 100.0 0.0 1000.0
2025 1000.0 10.0 100.0 100.0 0.0 1000.0
2026 1000.0 10.0 100.0 100.0 0.0 1000.0
2027 1000.0 10.0 1100.0 100.0 1000.0 0.0

In [3]:
## se puede asignar a una variable
x = cf.bullet_loan(amount=1000, 
                   nrate=cf.interest_rate(const_value=10, periods=11, start=2017, freq='A'), 
                   dispoints=0, 
                   orgpoints=0, 
                   prepmt=None)  
x


Out[3]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2017 0.0 10.0 0.0 0.0 0.0 1000.0
2018 1000.0 10.0 100.0 100.0 0.0 1000.0
2019 1000.0 10.0 100.0 100.0 0.0 1000.0
2020 1000.0 10.0 100.0 100.0 0.0 1000.0
2021 1000.0 10.0 100.0 100.0 0.0 1000.0
2022 1000.0 10.0 100.0 100.0 0.0 1000.0
2023 1000.0 10.0 100.0 100.0 0.0 1000.0
2024 1000.0 10.0 100.0 100.0 0.0 1000.0
2025 1000.0 10.0 100.0 100.0 0.0 1000.0
2026 1000.0 10.0 100.0 100.0 0.0 1000.0
2027 1000.0 10.0 1100.0 100.0 1000.0 0.0

In [4]:
## todos los tipos de créditos tiene funciones 
## para obtener las columnas de la tabla de 
## amortizacion como un flujo de efectivo
x.Int_Payment


Out[4]:
2017      0.0
2018    100.0
2019    100.0
2020    100.0
2021    100.0
2022    100.0
2023    100.0
2024    100.0
2025    100.0
2026    100.0
2027    100.0
Freq: A-DEC, Name: Int_Payment, dtype: float64

In [5]:
sum(x.Int_Payment)


Out[5]:
1000.0

In [6]:
x.Ppal_Payment  ## pagos a capital


Out[6]:
2017       0.0
2018       0.0
2019       0.0
2020       0.0
2021       0.0
2022       0.0
2023       0.0
2024       0.0
2025       0.0
2026       0.0
2027    1000.0
Freq: A-DEC, Name: Ppal_Payment, dtype: float64

In [7]:
x.Beg_Ppal_Amount ## balance inicial del período


Out[7]:
2017       0.0
2018    1000.0
2019    1000.0
2020    1000.0
2021    1000.0
2022    1000.0
2023    1000.0
2024    1000.0
2025    1000.0
2026    1000.0
2027    1000.0
Freq: A-DEC, Name: Beg_Ppal_Amount, dtype: float64

In [8]:
x.End_Ppal_Amount ## balance final del período


Out[8]:
2017    1000.0
2018    1000.0
2019    1000.0
2020    1000.0
2021    1000.0
2022    1000.0
2023    1000.0
2024    1000.0
2025    1000.0
2026    1000.0
2027       0.0
Freq: A-DEC, Name: End_Ppal_Amount, dtype: float64

Ejemplo.-- Para el crédito anterior, suponga que se hace un prepago de la deuda por $ 500 en t = 5.


In [9]:
## tasa de interés
nrate = cf.interest_rate(const_value=[10]*11, start=2018)

## prepago de duda
prepmt = cf.cashflow(const_value=[0]*11, start=2018)
prepmt[5] = 500

## crédito
cf.bullet_loan(amount=1000,
               nrate=nrate, 
               dispoints=0, 
               orgpoints=0, 
               prepmt=prepmt)


Out[9]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 0.0 10.0 0.0 0.0 0.0 1000.0
2019 1000.0 10.0 100.0 100.0 0.0 1000.0
2020 1000.0 10.0 100.0 100.0 0.0 1000.0
2021 1000.0 10.0 100.0 100.0 0.0 1000.0
2022 1000.0 10.0 100.0 100.0 0.0 1000.0
2023 1000.0 10.0 600.0 100.0 500.0 500.0
2024 500.0 10.0 50.0 50.0 0.0 500.0
2025 500.0 10.0 50.0 50.0 0.0 500.0
2026 500.0 10.0 50.0 50.0 0.0 500.0
2027 500.0 10.0 50.0 50.0 0.0 500.0
2028 500.0 10.0 550.0 50.0 500.0 0.0

In [10]:
## Si el prepago es mayor que la deuda, se ajusta el saldo.
prepmt = cf.cashflow(const_value=[0]*11, start=2018) 
prepmt[5] = 5000

cf.bullet_loan(amount=1000,
               nrate=nrate, 
               dispoints=0, 
               orgpoints=0, 
               prepmt=prepmt)


Out[10]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 0.0 10.0 0.0 0.0 0.0 1000.0
2019 1000.0 10.0 100.0 100.0 0.0 1000.0
2020 1000.0 10.0 100.0 100.0 0.0 1000.0
2021 1000.0 10.0 100.0 100.0 0.0 1000.0
2022 1000.0 10.0 100.0 100.0 0.0 1000.0
2023 1000.0 10.0 1100.0 100.0 1000.0 0.0
2024 0.0 10.0 0.0 0.0 0.0 0.0
2025 0.0 10.0 0.0 0.0 0.0 0.0
2026 0.0 10.0 0.0 0.0 0.0 0.0
2027 0.0 10.0 0.0 0.0 0.0 0.0
2028 0.0 10.0 0.0 0.0 0.0 0.0

Ejemplo.-- Modele el crédito anterior suponiendo que la tasa cambia al 8% a partir de t = 6.


In [11]:
nrate = cf.interest_rate(const_value=[10]*11, start=2018, chgpts={'2023':8}) 

cf.bullet_loan(amount=1000,
               nrate=nrate, 
               dispoints=0, 
               orgpoints=0, 
               prepmt=None)


Out[11]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 0.0 10.0 0.0 0.0 0.0 1000.0
2019 1000.0 10.0 100.0 100.0 0.0 1000.0
2020 1000.0 10.0 100.0 100.0 0.0 1000.0
2021 1000.0 10.0 100.0 100.0 0.0 1000.0
2022 1000.0 10.0 100.0 100.0 0.0 1000.0
2023 1000.0 8.0 80.0 80.0 0.0 1000.0
2024 1000.0 8.0 80.0 80.0 0.0 1000.0
2025 1000.0 8.0 80.0 80.0 0.0 1000.0
2026 1000.0 8.0 80.0 80.0 0.0 1000.0
2027 1000.0 8.0 80.0 80.0 0.0 1000.0
2028 1000.0 8.0 1080.0 80.0 1000.0 0.0

Balloon loan / tasa fija

fixed_rate_loan(amount, nrate, life, start, pyr=1, grace=0, dispoints=0, orgpoints=0, prepmt=None, balloonpmt=None)

En este tipo de crédito la tasa permanece fija durante toda la vida de la deuda. El pago periodico (intereses + capital) es constante. Admite la especificación de cuotas extras (balloon payments) pactadas desde el principio del crédito que tienen como fin reducir el pago períodico.

  • amount -- monto del crédito.
  • nrate -- tasa nominal de interés.
  • life -- plazo del crédito.
  • start -- especificación del período de inicio del crédito.
  • pyr -- número de periodos de capitalización por año para la tasa.
  • grace -- número de períodos de gracia antes del pago del capital.
  • dispoints -- puntos (costo) de descuento como porcentaje de amount. Se consideran como intereses anticipados y son deducibles de impuestos.
  • orgpoints -- puntos (costo) de constitución como porcentaje de amount. Son costos no deducibles para el pago de impuestos.
  • prepmt -- flujo de efectivo que representa prepago de la deuda.
  • balloonpmt -- pagos extra al pago períodico especificados como un objeto cashflow.

Ejemplo.-- Modele un préstamo de $ 1000 a un plazo de 10 años, cuotas anuales y una tasa del 10%.


In [12]:
cf.fixed_rate_loan(amount=1000, # monto
                   nrate=10,    # tasa de interés
                   freq='A',
                   life=10,     # número de cuotas
                   start=2018,
                   grace=0,
                   dispoints=0,
                   orgpoints=0,
                   prepmt=None,
                   balloonpmt=None)


Out[12]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 1000.000000 10.0 0.000000 0.000000 0.000000 1.000000e+03
2019 1000.000000 10.0 162.745395 100.000000 62.745395 9.372546e+02
2020 937.254605 10.0 162.745395 93.725461 69.019934 8.682347e+02
2021 868.234671 10.0 162.745395 86.823467 75.921928 7.923127e+02
2022 792.312743 10.0 162.745395 79.231274 83.514121 7.087986e+02
2023 708.798622 10.0 162.745395 70.879862 91.865533 6.169331e+02
2024 616.933090 10.0 162.745395 61.693309 101.052086 5.158810e+02
2025 515.881004 10.0 162.745395 51.588100 111.157295 4.047237e+02
2026 404.723709 10.0 162.745395 40.472371 122.273024 2.824507e+02
2027 282.450685 10.0 162.745395 28.245069 134.500326 1.479504e+02
2028 147.950359 10.0 162.745395 14.795036 147.950359 1.108447e-12

Ejemplo.-- Considere el mismo crédito anterior. ¿Cómo se modifican los pagos períodicos, si se pacta un pago adicional de $ 200 en los períodos 5 y 10?.


In [13]:
balloonpmt = cf.cashflow(const_value=[0]*11, start=2018)
balloonpmt['2022'] = 200
balloonpmt['2028'] = 200

cf.fixed_rate_loan(amount=1000, # monto
                   nrate=10,    # tasa de interés por período
                   life=10,     # número de cuotas
                   start='2018',
                   grace=0,
                   dispoints=0,
                   orgpoints=0,
                   prepmt=None,
                   balloonpmt=balloonpmt)


Out[13]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 1000.000000 10.0 0.000000 0.000000 0.000000 1.000000e+03
2019 1000.000000 10.0 127.964857 100.000000 27.964857 9.720351e+02
2020 972.035143 10.0 127.964857 97.203514 30.761343 9.412738e+02
2021 941.273800 10.0 127.964857 94.127380 33.837477 9.074363e+02
2022 907.436323 10.0 327.964857 90.743632 237.221225 6.702151e+02
2023 670.215099 10.0 127.964857 67.021510 60.943347 6.092718e+02
2024 609.271751 10.0 127.964857 60.927175 67.037682 5.422341e+02
2025 542.234070 10.0 127.964857 54.223407 73.741450 4.684926e+02
2026 468.492620 10.0 127.964857 46.849262 81.115595 3.873770e+02
2027 387.377025 10.0 127.964857 38.737702 89.227155 2.981499e+02
2028 298.149870 10.0 327.964857 29.814987 298.149870 9.094947e-13

Ejemplo.-- Considere el caso anterior y un prepago de la deuda de $ 100 en los períodos 3 y 7.


In [14]:
prepmt = cf.cashflow(const_value=[0]*11, start=2018)
prepmt['2021'] = 100
prepmt['2025'] = 100

cf.fixed_rate_loan(amount=1000, 
                   nrate=10,    
                   life=10,     
                   start=2018,
                   grace=0,
                   dispoints=0,
                   orgpoints=0,
                   prepmt=prepmt,
                   balloonpmt=balloonpmt)


Out[14]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 1000.000000 10.0 0.000000 0.000000 0.000000 1000.000000
2019 1000.000000 10.0 127.964857 100.000000 27.964857 972.035143
2020 972.035143 10.0 127.964857 97.203514 30.761343 941.273800
2021 941.273800 10.0 227.964857 94.127380 133.837477 807.436323
2022 807.436323 10.0 327.964857 80.743632 247.221225 560.215099
2023 560.215099 10.0 127.964857 56.021510 71.943347 488.271751
2024 488.271751 10.0 127.964857 48.827175 79.137682 409.134070
2025 409.134070 10.0 227.964857 40.913407 187.051450 222.082620
2026 222.082620 10.0 127.964857 22.208262 105.756595 116.326025
2027 116.326025 10.0 127.958627 11.632602 116.326025 0.000000
2028 0.000000 10.0 0.000000 0.000000 0.000000 0.000000

Ejemplo.-- Un crédito bullet puede modelarse como un crédito balloon usando un prepago al final igual al monto de la deuda.


In [15]:
balloonpmt = cf.cashflow(const_value=[0]*11, start=2018)
balloonpmt['2028'] = 1000

cf.fixed_rate_loan(amount=1000, 
                   nrate=10,    
                   life=10,     
                   start=2018,
                   grace=0,
                   dispoints=0,
                   orgpoints=0,
                   prepmt=None,
                   balloonpmt=balloonpmt)


Out[15]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 1000.0 10.0 0.0 0.0 0.000000e+00 1000.0
2019 1000.0 10.0 100.0 100.0 1.421085e-14 1000.0
2020 1000.0 10.0 100.0 100.0 1.421085e-14 1000.0
2021 1000.0 10.0 100.0 100.0 1.421085e-14 1000.0
2022 1000.0 10.0 100.0 100.0 1.421085e-14 1000.0
2023 1000.0 10.0 100.0 100.0 1.421085e-14 1000.0
2024 1000.0 10.0 100.0 100.0 1.421085e-14 1000.0
2025 1000.0 10.0 100.0 100.0 1.421085e-14 1000.0
2026 1000.0 10.0 100.0 100.0 1.421085e-14 1000.0
2027 1000.0 10.0 100.0 100.0 1.421085e-14 1000.0
2028 1000.0 10.0 1100.0 100.0 1.000000e+03 0.0

Abono constante a capital

fixed_ppal_loan(amount, nrate, grace=0, dispoints=0, orgpoints=0, prepmt=None, balloonpmt=None)

En este tipo de crédito el abono al capital es una cantidad fija durante todos los períodos, de tal forma que el pago total por período es variable (ya que incluye los intereses pagados sobre el saldo de la deuda).

  • amount -- monto del crédito.
  • nrate -- tasa nominal de interés.
  • grace -- número de períodos de gracia antes del pago del capital.
  • dispoints -- puntos (costo) de descuento como porcentaje de amount. Se consideran como intereses anticipados y son deducibles de impuestos.
  • orgpoints -- puntos (costo) de constitución como porcentaje de amount. Son costos no deducibles para el pago de impuestos.
  • prepmt -- flujo de efectivo que representa prepago de la deuda.
  • balloonpmt -- pagos extra al pago períodico especificados como un objeto cashflow.

Ejemplo.-- Modele un crédito por $ 1000 a 10 años y una tasa del 10%. Los pagos son anuales.


In [16]:
nrate = cf.interest_rate(const_value=[10]*11, start=2018)
cf.fixed_ppal_loan(amount=1000, 
                   nrate=nrate, 
                   grace=0, 
                   dispoints=0, 
                   orgpoints=0,
                   prepmt=None, 
                   balloonpmt=None)


Out[16]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 0.0 10.0 0.0 0.0 0.0 1000.0
2019 1000.0 10.0 200.0 100.0 100.0 900.0
2020 900.0 10.0 190.0 90.0 100.0 800.0
2021 800.0 10.0 180.0 80.0 100.0 700.0
2022 700.0 10.0 170.0 70.0 100.0 600.0
2023 600.0 10.0 160.0 60.0 100.0 500.0
2024 500.0 10.0 150.0 50.0 100.0 400.0
2025 400.0 10.0 140.0 40.0 100.0 300.0
2026 300.0 10.0 130.0 30.0 100.0 200.0
2027 200.0 10.0 120.0 20.0 100.0 100.0
2028 100.0 10.0 110.0 10.0 100.0 0.0

In [17]:
##
## período de gracia de 3
##
nrate = cf.interest_rate(const_value=[10]*11, start=2018)

cf.fixed_ppal_loan(amount=1000, 
                   nrate=nrate, 
                   grace=3, 
                   dispoints=0, 
                   orgpoints=0,
                   prepmt=None, 
                   balloonpmt=None)


Out[17]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 0.000000 10.0 0.000000 0.000000 0.000000 1000.000000
2019 1000.000000 10.0 100.000000 100.000000 0.000000 1000.000000
2020 1000.000000 10.0 100.000000 100.000000 0.000000 1000.000000
2021 1000.000000 10.0 100.000000 100.000000 0.000000 1000.000000
2022 1000.000000 10.0 242.857143 100.000000 142.857143 857.142857
2023 857.142857 10.0 228.571429 85.714286 142.857143 714.285714
2024 714.285714 10.0 214.285714 71.428571 142.857143 571.428571
2025 571.428571 10.0 200.000000 57.142857 142.857143 428.571429
2026 428.571429 10.0 185.714286 42.857143 142.857143 285.714286
2027 285.714286 10.0 171.428571 28.571429 142.857143 142.857143
2028 142.857143 10.0 157.142857 14.285714 142.857143 0.000000

In [18]:
##
## este tipo de crédito admite una tasa de interés variable
##
nrate = cf.interest_rate(const_value=[10]*11, start=2018, chgpts={'2024':8})

cf.fixed_ppal_loan(amount=1000, 
                   nrate=nrate, 
                   grace=0, 
                   dispoints=0, 
                   orgpoints=0,
                   prepmt=None, 
                   balloonpmt=None)


Out[18]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 0.0 10.0 0.0 0.0 0.0 1000.0
2019 1000.0 10.0 200.0 100.0 100.0 900.0
2020 900.0 10.0 190.0 90.0 100.0 800.0
2021 800.0 10.0 180.0 80.0 100.0 700.0
2022 700.0 10.0 170.0 70.0 100.0 600.0
2023 600.0 10.0 160.0 60.0 100.0 500.0
2024 500.0 8.0 140.0 40.0 100.0 400.0
2025 400.0 8.0 132.0 32.0 100.0 300.0
2026 300.0 8.0 124.0 24.0 100.0 200.0
2027 200.0 8.0 116.0 16.0 100.0 100.0
2028 100.0 8.0 108.0 8.0 100.0 0.0

In [19]:
##
## este tipo de crédito admite pagos adicionales 
## programados como abono a la deuda
##
nrate      = cf.interest_rate(const_value=[10]*11, start=2018)
balloonpmt = cf.cashflow(const_value=[0]*11, start=2018)
balloonpmt['2023'] = 500

cf.fixed_ppal_loan(amount=1000, 
                   nrate=nrate, 
                   grace=0, 
                   dispoints=0, 
                   orgpoints=0,
                   prepmt=None, 
                   balloonpmt=balloonpmt)


Out[19]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 0.0 10.0 0.0 0.0 0.0 1000.0
2019 1000.0 10.0 150.0 100.0 50.0 950.0
2020 950.0 10.0 145.0 95.0 50.0 900.0
2021 900.0 10.0 140.0 90.0 50.0 850.0
2022 850.0 10.0 135.0 85.0 50.0 800.0
2023 800.0 10.0 630.0 80.0 550.0 250.0
2024 250.0 10.0 75.0 25.0 50.0 200.0
2025 200.0 10.0 70.0 20.0 50.0 150.0
2026 150.0 10.0 65.0 15.0 50.0 100.0
2027 100.0 10.0 60.0 10.0 50.0 50.0
2028 50.0 10.0 55.0 5.0 50.0 0.0

In [20]:
##
## este tipo de crédito admite 
## una tasa de interés variable
##
nrate = cf.interest_rate(const_value=[10]*11, start=2018, chgpts={'2024':8})
balloonpmt = cf.cashflow(const_value=[0]*11,  start=2018)
balloonpmt['2023'] = 500

cf.fixed_ppal_loan(amount=1000, 
                   nrate=nrate, 
                   grace=0, 
                   dispoints=0, 
                   orgpoints=0,
                   prepmt=None, 
                   balloonpmt=balloonpmt)


Out[20]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 0.0 10.0 0.0 0.0 0.0 1000.0
2019 1000.0 10.0 150.0 100.0 50.0 950.0
2020 950.0 10.0 145.0 95.0 50.0 900.0
2021 900.0 10.0 140.0 90.0 50.0 850.0
2022 850.0 10.0 135.0 85.0 50.0 800.0
2023 800.0 10.0 630.0 80.0 550.0 250.0
2024 250.0 8.0 70.0 20.0 50.0 200.0
2025 200.0 8.0 66.0 16.0 50.0 150.0
2026 150.0 8.0 62.0 12.0 50.0 100.0
2027 100.0 8.0 58.0 8.0 50.0 50.0
2028 50.0 8.0 54.0 4.0 50.0 0.0

In [21]:
##
## ejemplo anterior con período de gracia
##
nrate = cf.interest_rate(const_value=[10]*11, start=2018, chgpts={'2024':8}) 
balloonpmt = cf.cashflow(const_value=[0]*11,  start=2018)
balloonpmt['2023'] = 500

cf.fixed_ppal_loan(amount=1000, 
                   nrate=nrate, 
                   grace=5, 
                   dispoints=0, 
                   orgpoints=0,
                   prepmt=None, 
                   balloonpmt=balloonpmt)


Out[21]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 0.0 10.0 0.0 0.0 0.0 1000.0
2019 1000.0 10.0 100.0 100.0 0.0 1000.0
2020 1000.0 10.0 100.0 100.0 0.0 1000.0
2021 1000.0 10.0 100.0 100.0 0.0 1000.0
2022 1000.0 10.0 100.0 100.0 0.0 1000.0
2023 1000.0 10.0 600.0 100.0 500.0 500.0
2024 500.0 8.0 140.0 40.0 100.0 400.0
2025 400.0 8.0 132.0 32.0 100.0 300.0
2026 300.0 8.0 124.0 24.0 100.0 200.0
2027 200.0 8.0 116.0 16.0 100.0 100.0
2028 100.0 8.0 108.0 8.0 100.0 0.0

Buydown loan

buydown_loan(amount, nrate, grace=0, dispoints=0, orgpoints=0, prepmt=None)

Este tipo de préstamo es similar a los préstamos de cuota fija (balloon loans) pero con tasa cambiante en el tiempo. No admiten cuotas adicionales para reducir el pago fijo períodico. Cuando hay un cambio en la tasa de interés, el pago períodico total se recalcula para reflejar el cambio de tasa de interés.

  • amount -- monto del crédito.
  • nrate -- tasa nominal de interés.
  • grace -- número de períodos de gracia antes del pago del capital.
  • dispoints -- puntos (costo) de descuento como porcentaje de amount. Se consideran como intereses anticipados y son deducibles de impuestos.
  • orgpoints -- puntos (costo) de constitución como porcentaje de amount. Son costos no deducibles para el pago de impuestos.
  • prepmt -- flujo de efectivo que representa prepago de la deuda.

In [22]:
##
## los resultados son iguales a un crédito balloon
##
nrate = cf.interest_rate(const_value=[10]*11, start=2018)

cf.buydown_loan(amount=1000, 
                nrate=nrate, 
                dispoints=0, 
                orgpoints=0, 
                prepmt=None)


Out[22]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 1000.000000 10.0 0.000000 0.000000 0.000000 1.000000e+03
2019 1000.000000 10.0 162.745395 100.000000 62.745395 9.372546e+02
2020 937.254605 10.0 162.745395 93.725461 69.019934 8.682347e+02
2021 868.234671 10.0 162.745395 86.823467 75.921928 7.923127e+02
2022 792.312743 10.0 162.745395 79.231274 83.514121 7.087986e+02
2023 708.798622 10.0 162.745395 70.879862 91.865533 6.169331e+02
2024 616.933090 10.0 162.745395 61.693309 101.052086 5.158810e+02
2025 515.881004 10.0 162.745395 51.588100 111.157295 4.047237e+02
2026 404.723709 10.0 162.745395 40.472371 122.273024 2.824507e+02
2027 282.450685 10.0 162.745395 28.245069 134.500326 1.479504e+02
2028 147.950359 10.0 162.745395 14.795036 147.950359 1.421085e-13

In [23]:
##
## cambios en la tasa de interés
##
nrate = cf.interest_rate(const_value=[10]*11, start=2018, chgpts={'2024':5}) 

cf.buydown_loan(amount=1000, 
                nrate=nrate, 
                dispoints=0, 
                orgpoints=0, 
                prepmt=None)


Out[23]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 1000.000000 10.0 0.000000 0.000000 0.000000 1.000000e+03
2019 1000.000000 10.0 162.745395 100.000000 62.745395 9.372546e+02
2020 937.254605 10.0 162.745395 93.725461 69.019934 8.682347e+02
2021 868.234671 10.0 162.745395 86.823467 75.921928 7.923127e+02
2022 792.312743 10.0 162.745395 79.231274 83.514121 7.087986e+02
2023 708.798622 10.0 162.745395 70.879862 91.865533 6.169331e+02
2024 616.933090 5.0 142.495996 30.846654 111.649341 5.052837e+02
2025 505.283748 5.0 142.495996 25.264187 117.231808 3.880519e+02
2026 388.051940 5.0 142.495996 19.402597 123.093399 2.649585e+02
2027 264.958541 5.0 142.495996 13.247927 129.248069 1.357105e+02
2028 135.710472 5.0 142.495996 6.785524 135.710472 1.136868e-13

In [24]:
##
## se introducen 2 prepagos por $ 100 cada uno
## en t = 3, 6
##
nrate = cf.interest_rate(const_value=[10]*11, start=2018) 

prepmt = cf.cashflow(const_value=[0]*11, start='2018')
prepmt['2021'] = 100
prepmt['2024'] = 100

cf.buydown_loan(amount=1000, 
                nrate=nrate, 
                dispoints=0, 
                orgpoints=0, 
                prepmt=prepmt)


Out[24]:
Beg_Ppal_Amount Nom_Rate Tot_Payment Int_Payment Ppal_Payment End_Ppal_Amount
2018 1000.000000 10.0 0.000000 0.000000 0.000000 1.000000e+03
2019 1000.000000 10.0 162.745395 100.000000 62.745395 9.372546e+02
2020 937.254605 10.0 162.745395 93.725461 69.019934 8.682347e+02
2021 868.234671 10.0 262.745395 86.823467 175.921928 6.923127e+02
2022 692.312743 10.0 142.204845 69.231274 72.973571 6.193392e+02
2023 619.339172 10.0 142.204845 61.933917 80.270928 5.390682e+02
2024 539.068245 10.0 242.204845 53.906824 188.298020 3.507702e+02
2025 350.770224 10.0 110.657765 35.077022 75.580742 2.751895e+02
2026 275.189482 10.0 110.657765 27.518948 83.138816 1.920507e+02
2027 192.050666 10.0 110.657765 19.205067 91.452698 1.005980e+02
2028 100.597968 10.0 110.657765 10.059797 100.597968 8.526513e-14

to_cashflow(tax_rate=0)

Convierte el crédito a un flujo de fondos equivalente.

  • tax_rate -- impuesto de renta. Se usa para tener en cuenta la reducción del pago por impuesto de renta debido a que los intereses son considerados como costo financiero deducible de impuestos.

In [25]:
nrate = cf.interest_rate(const_value=[10]*11, start=2018) 

prepmt = cf.cashflow(const_value=[0]*11, start='2018')
prepmt['2021'] = 100
prepmt['2024'] = 100

cf.buydown_loan(amount=1000, 
                nrate=nrate, 
                dispoints=0, 
                orgpoints=0, 
                prepmt=prepmt).tocashflow()


Out[25]:
2018    1000.000000
2019    -262.745395
2020    -256.470855
2021    -349.568862
2022    -211.436119
2023    -204.138762
2024    -296.111669
2025    -145.734787
2026    -138.176713
2027    -129.862831
2028    -120.717561
Freq: A-DEC, dtype: float64

true_rate(tax_rate=0)

Calcula la tasa real del interés del crédito. Permite la comparación de créditos. Para el cálculo, el préstamo es convertido al flujo de efectivo equivalente teniendo en cuenta lo siguiente:

  • Los puntos de causación son considerados como no deducibles y son ignorados en el cálculo del beneficio del impuesto de renta.

  • Los puntos de descuento son considerado como intereses prepagados y son deducibles de impuestos.

  • Si tax_rate es diferente de cero, la tasa de interés verdadera después de impuestos es calculada. Esto implica que en el cálculo solo la porción (1-tax_rate) de los intereses (incluyendo los puntos de descuento) es considerada en el cálculo.


In [26]:
nrate = cf.interest_rate(const_value=[10]*11, start=2018) 

prepmt = cf.cashflow(const_value=[0]*11, start='2018')
prepmt['2021'] = 100
prepmt['2024'] = 100

cf.buydown_loan(amount=1000, 
                nrate=nrate, 
                dispoints=0, 
                orgpoints=0, 
                prepmt=prepmt).true_rate()


Out[26]:
20.000000000000018

Ejercicio.-- Una empresa financiará la nueva construcción de una central de generación con los siguientes prestamos.

  • Un crédito con pagos fijos iguales por $ 800 a 72 meses con un desembolso único en 2018-06. La tasa nominal de interés es del 25% nominal. La tasa cambia al 20% en 2020-03.
  • Un crédito con abono fijo a capital por $ 700 a 80 meses con un desembolso único en 2018-09. La tasa nominal de interés es del 23% nominal. La tasa cambia al 19% en 2021-01.

Calcule y grafique los intereses pagados por trimestre.

Préstamos

Juan David Velásquez Henao
jdvelasq@unal.edu.co
Universidad Nacional de Colombia, Sede Medellín
Facultad de Minas
Medellín, Colombia


Haga click aquí para acceder a la última versión online.

Haga click aquí para ver la última versión online en nbviewer.


Bibliografía

  • [1] SAS/ETS 14.1 User's Guide, 2015.
  • [2] hp 12c platinum financial calculator. User's guide.
  • [3] HP Business Consultant II Owner's manual.
  • [4] C.S. Park and G.P. Sharp-Bette. Advanced Engineering Economics. John Wiley & Sons, Inc., 1990.