Saltar a contenido

API — Excepciones

rutificador.exceptions

Jerarquía de excepciones personalizadas para Rutificador.

ErrorRut

Bases: Exception

Excepción base para todos los errores relacionados con RUT.

Source code in rutificador/exceptions.py
class ErrorRut(Exception):
    """Excepción base para todos los errores relacionados con RUT."""

    def __init__(
        self, mensaje: str, codigo_error: str | None = None, **kwargs: Any
    ) -> None:
        mensaje_sanitizado = _sanitizar_mensaje(mensaje)
        super().__init__(mensaje_sanitizado)
        self.mensaje = mensaje
        self.codigo_error = codigo_error
        # Sanitizar valores PII (RUT) de los metadatos antes de loguear
        self.contexto = {
            k: ("********" if "rut" in k.lower() else v) for k, v in kwargs.items()
        }
        # Evitar registrar valores completos de RUT en logs por defecto.
        logger.error(
            "Error de RUT [%s] — %s",
            codigo_error,
            mensaje_sanitizado,
            extra=self.contexto,
        )

ErrorValidacionRut

Bases: ErrorRut

Excepción base para errores relacionados con la validación.

Source code in rutificador/exceptions.py
class ErrorValidacionRut(ErrorRut):
    """Excepción base para errores relacionados con la validación."""

ErrorFormatoRut

Bases: ErrorValidacionRut

Se lanza cuando el formato del RUT es inválido.

Source code in rutificador/exceptions.py
class ErrorFormatoRut(ErrorValidacionRut):
    """Se lanza cuando el formato del RUT es inválido."""

    def __init__(self, valor_rut: str, formato_esperado: str) -> None:
        super().__init__(
            f"Formato de RUT inválido: '{valor_rut}'. "
            f"Formato esperado: {formato_esperado}",
            codigo_error="CARACTERES_INVALIDOS",
            valor_rut=valor_rut,
            formato_esperado=formato_esperado,
        )

ErrorDigitoRut

Bases: ErrorValidacionRut

Se lanza cuando el dígito verificador es incorrecto.

Source code in rutificador/exceptions.py
class ErrorDigitoRut(ErrorValidacionRut):
    """Se lanza cuando el dígito verificador es incorrecto."""

    def __init__(self, digito_entregado: str, digito_calculado: str) -> None:
        super().__init__(
            f"Dígito verificador no coincide: se entregó '{digito_entregado}', "
            f"se calculó '{digito_calculado}'",
            codigo_error="DV_DISCORDANTE",
            digito_entregado=digito_entregado,
            digito_calculado=digito_calculado,
        )

ErrorLongitudRut

Bases: ErrorValidacionRut

Se lanza cuando la longitud del RUT es inválida.

Source code in rutificador/exceptions.py
class ErrorLongitudRut(ErrorValidacionRut):
    """Se lanza cuando la longitud del RUT es inválida."""

    def __init__(
        self,
        valor_rut: str,
        longitud: int,
        limite: int,
        minimo: bool = False,
    ) -> None:
        if minimo:
            mensaje = (
                f"El RUT '{valor_rut}' es menor a la longitud mínima: "
                f"{longitud} < {limite}"
            )
            contexto = {"longitud_min": limite}
        else:
            mensaje = (
                f"El RUT '{valor_rut}' excede la longitud máxima: {longitud} > {limite}"
            )
            contexto = {"longitud_max": limite}

        super().__init__(
            mensaje,
            codigo_error="LONGITUD_MINIMA" if minimo else "LONGITUD_MAXIMA",
            valor_rut=valor_rut,
            longitud=longitud,
            **contexto,
        )

ErrorProcesamientoRut

Bases: ErrorRut

Se lanza durante operaciones de procesamiento por lotes.

Source code in rutificador/exceptions.py
class ErrorProcesamientoRut(ErrorRut):
    """Se lanza durante operaciones de procesamiento por lotes."""