Módulo de python para calcular la actualización de rentas de alquiler en España por anualidades completas. Compatible con múltiples métodos, incluyendo:
- Porcentaje
- Cantidad fija
- Actualización basada en IPC (Índice de Precios al Consumo)
- Actualización basada en IPC y luego además un porcentaje
- IRAV (Índice de Rentas de Alquiler de Viviendas)
- Combinación mínima entre IPC y porcentaje
El cálculo usando el IPC (LAU), se basa según lo descrito en la página web del Instituto Nacional de Estadística (INE). Es equivalente a utilizar la calculadora publicada por el INE en el siguiente enlace Actualización de rentas con el IPC general (sistema IPC base 2025) para periodos anuales completos.
Este módulo es válido solamente:
- En España
- Actualización usando el IPC: Para los periodos comprendidos entre marzo de 1954 y el último mes con datos de IPC publicados por el INE.
- Actualización usando el IRAV: Para los periodos comprendidos entre noviembre de 2024 y el último mes con datos de IRAV publicados por el INE.
El modulo utiliza una arquitectura basada en clases con un patron Factory para la creacion dinamica de diferentes metodos de actualizacion:
-
RentUpdateMethod: Clase base abstracta que define la interfaz para las actualizaciones. -
RentUpdateFactory: Proporciona una forma dinamica de instanciar clases de actualizacion segun el tipo requerido. -
Estrategias:
PercentageUpdate(percentage)FixedAmountUpdate(fixed_amount)IpcUpdate(ipc)MinIpcOrPercentageUpdate(min_ipc_or_percentage)IpcThenPercentageUpdate(ipc_then_percentage)IravUpdate(irav)
-
IneClient: Clase que se conecta al INE para obtener los datos del IPC e IRAV.
Las estrategias viven en el paquete arrendatools.rent_update.strategies, y la factory carga las estrategias internas y las registradas via entry points (grupo arrendatools.rent_update).
Este módulo requiere Python 3.10 o superior.
La factory espera un RentUpdateInput y devuelve un RentUpdateResult.
Los parametros se proporcionan a traves de RentUpdateInput.
amount (Decimal): Obligatorio. La cantidad de la renta a actualizar.
month (int): Obligatorio para los tipos de actualizacion ipc, irav y min_ipc_or_percentage. El mes en que se quiere calcular la actualizacion de la renta (1 a 12).
year_start (int): Obligatorio para los tipos de actualizacion ipc, irav y min_ipc_or_percentage. El ano inicial de referencia para el calculo.
year_end (int): Obligatorio para los tipos de actualizacion ipc y min_ipc_or_percentage. El ano final de referencia para el calculo.
data (Decimal): Obligatorio para los tipos de actualizacion percentage, fixed_amount y min_ipc_or_percentage. Dato adicional para hacer los calculos, por ejemplo en la actualizacion por porcentaje es el porcentaje de actualizacion (-1 -> -100% y 1 -> 100%). En la actualizacion por cantidad fija es la cantidad a actualizar.
La funcion devuelve un RentUpdateResult (puedes usar as_dict() para obtener un diccionario) con los siguientes campos:
amount (Decimal): Obligatorio. La cantidad pasada inicialmente por el usuario.
updated_amount (Decimal): Obligatorio. La cantidad de la renta actualizada con el metodo escogido.
index_start (int): Opcional, solo se devuelve para la actualizacion por IPC o min_ipc_or_percentage. El indice del IPC del mes inicial.
index_end (int): Opcional, solo se devuelve para la actualizacion por IPC o min_ipc_or_percentage. El indice del IPC del mes final.
month (str): Opcional, solo se devuelve para la actualizacion por IPC, min_ipc_or_percentage o IRAV. El nombre del mes en que se calculo la actualizacion de la renta.
year_start (int): Opcional, solo se devuelve para la actualizacion por IPC, min_ipc_or_percentage o IRAV. El ano inicial de referencia para el calculo.
year_end (int): Opcional, solo se devuelve para la actualizacion por IPC o min_ipc_or_percentage. El ano final de referencia para el calculo.
variation_rate (Decimal): Opcional, solo se devuelve para la actualizacion por IPC, min_ipc_or_percentage, IRAV, percentage. La tasa de variacion utilizada en el calculo. Multiplicado por 100 es el porcentaje.
from decimal import Decimal
from arrendatools.rent_update.base import RentUpdateInput
from arrendatools.rent_update.factory import RentUpdateFactory
# Crear una instancia usando el Factory
actualizacion_renta = RentUpdateFactory.create("percentage")
# Calcular pasando los datos al método calcular
resultado = actualizacion_renta.calculate(
RentUpdateInput(
amount=Decimal("1000.00"),
data=Decimal("0.05"),
)
)
print(resultado.as_dict())Resultado:
{'amount': Decimal('1000.00'), 'data': Decimal('0.05'), 'updated_amount': Decimal('1050.00'), 'variation_rate': Decimal('0.05')}
Instala el paquete en modo editable y ejecuta los tests:
python -m pip install -e .
python -m pytestEsta version introduce cambios de entorno y tooling. Pasos recomendados:
-
Python minimo: actualiza tu runtime a Python 3.10 o superior.
-
Instalacion: reinstala el paquete en editable si trabajas en local.
python -m pip install -e . -
Tests: si tenias scripts con
unittest, migra apytest.python -m pytest
-
CI: si tu pipeline usaba
unittest, cambia atoxopytest.tox -e py310
-
Nuevas estrategias: se anade
ipc_then_percentageen la factory.from arrendatools.rent_update.factory import RentUpdateFactory strategy = RentUpdateFactory.create("ipc_then_percentage")
- Python minimo: se eleva a 3.10+ (antes 3.8+).
- Tests: se estandariza el uso de
pytestytoxen lugar deunittestdirecto. - Cobertura: se anade ejecucion con
pytest-coven CI. - Nueva estrategia:
ipc_then_percentagedisponible viaRentUpdateFactory. - Factory: las claves siguen normalizandose a minusculas; usa
RentUpdateFactory.create("ipc_then_percentage")para la nueva estrategia. - Input/Output: ahora
calculate()recibe unRentUpdateInput(dataclass) en lugar de parametros sueltos, y devuelve unRentUpdateResult(dataclass). Si necesitas undict, usaresult.as_dict().
Ejemplo v1 vs v2:
# v1 (parametros sueltos + dict)
resultado = actualizacion_renta.calculate(
amount=Decimal("1000.00"),
data=Decimal("0.05"),
)
print(resultado)
# v2 (dataclass + as_dict)
resultado = actualizacion_renta.calculate(
RentUpdateInput(
amount=Decimal("1000.00"),
data=Decimal("0.05"),
)
)
print(resultado.as_dict())Crea una clase que herede de RentUpdateMethod y reimplemente calculate() (y opcionalmente validate_inputs()):
from decimal import Decimal
from typing import Optional
from arrendatools.rent_update.base import (
RentUpdateInput,
RentUpdateMethod,
RentUpdateResult,
)
class CustomUpdate(RentUpdateMethod):
def calculate(self, inputs: RentUpdateInput) -> RentUpdateResult:
return RentUpdateResult(
amount=inputs.amount,
updated_amount=inputs.amount,
)En tu propio paquete, declara el entry point en pyproject.toml:
[project.entry-points."arrendatools.rent_update"]
custom = "mi_paquete.strategies.custom:CustomUpdate"Luego, en tiempo de ejecucion:
from arrendatools.rent_update.factory import RentUpdateFactory
custom_update = RentUpdateFactory.create("custom")Nota: las claves de estrategia son case-insensitive y se normalizan a snake_case en minusculas. Usa nombres claros y estables (por ejemplo, custom, ipc, min_ipc_or_percentage) para evitar colisiones.
Si no quieres entry points, puedes registrar la clase en runtime:
from arrendatools.rent_update.factory import RentUpdateFactory
from mi_paquete.strategies.custom import CustomUpdate
RentUpdateFactory.register("custom", CustomUpdate)
custom_update = RentUpdateFactory.create("custom")Este módulo proporciona una opción para actualizar una renta de alquiler en España por anualidades completas usando varios métodos como el IPC (LAU) o IRAV y realiza los cálculos necesarios conectándose a la página web del INE. Sin embargo, es importante tener en cuenta que este módulo no garantiza el cálculo correcto ni sirve como certificación oficial ante el arrendatario. El usuario es responsable de verificar la exactitud de los datos generados y de obtener el certificado correspondiente en la página web del INE si es necesario.
Es importante destacar que el autor de este módulo está exento de cualquier tipo de responsabilidad derivada del uso de la información generada por este módulo. La veracidad y exactitud de los datos generados son responsabilidad exclusiva del usuario. Cualquier sanción que pudiera derivarse del uso correcto, incorrecto o fraudulento de los datos generados por este módulo será responsabilidad exclusiva del usuario.
Por tanto, se recomienda al usuario revisar cuidadosamente la información generada antes de notificar al inquilino la actualización de la renta y asegurarse de que cumple con los requisitos y está libre de errores.