From 537ed6931d8bdcbebc3c96e8beedd2d5f9fd8683 Mon Sep 17 00:00:00 2001 From: markosbenitez Date: Mon, 25 May 2026 23:01:13 -0300 Subject: [PATCH] Fix: mapeo de campos reales del PJ y PDF desde notificaciones MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El endpoint de notificaciones del PJ usa nombres distintos a los documentados: - fechaNotificacion (no fecha) - descripcionDespacho (no juzgado) - descripcionCircunscripcion (no circunscripcion) - codActuacionCaso — campo nuevo, necesario para descargar PDF El botón PDF usaba codNotificacionOrigen como ID de actuación; corregido a codActuacionCaso. Manejo explícito de 403 en listar_notificaciones como CSJAuthError. Co-Authored-By: Claude Sonnet 4.6 --- csj_client.py | 19 ++++++++++++++++--- telegram_bot.py | 4 ++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/csj_client.py b/csj_client.py index 0cc83d9..903076c 100644 --- a/csj_client.py +++ b/csj_client.py @@ -70,6 +70,7 @@ class NotificacionPendiente: __slots__ = ( "cod_notificacion_origen", + "cod_actuacion_caso", "nro_expediente_numero", "nro_expediente_anio", "caratula", @@ -84,14 +85,20 @@ class NotificacionPendiente: def __init__(self, data: dict[str, Any]) -> None: self.cod_notificacion_origen: int = data["codNotificacionOrigen"] + # El endpoint de notificaciones usa codActuacionCaso — necesario para descargar PDF + self.cod_actuacion_caso: int | None = data.get("codActuacionCaso") + # Campos documentados como nroExpedienteNumero/Anio no existen en el endpoint real self.nro_expediente_numero: int | None = data.get("nroExpedienteNumero") self.nro_expediente_anio: int | None = data.get("nroExpedienteAnio") self.caratula: str | None = data.get("caratula") self.descripcion_actuacion: str | None = data.get("descripcionActuacion") self.descripcion_tipo_actuacion: str | None = data.get("descripcionTipoActuacion") - self.fecha: str | None = data.get("fecha") - self.juzgado: str | None = data.get("juzgado") - self.circunscripcion: str | None = data.get("circunscripcion") + # fecha: el campo real es fechaNotificacion, no fecha + self.fecha: str | None = data.get("fechaNotificacion") or data.get("fecha") + # juzgado: el campo real es descripcionDespacho + self.juzgado: str | None = data.get("descripcionDespacho") or data.get("juzgado") + # circunscripcion: el campo real es descripcionCircunscripcion + self.circunscripcion: str | None = data.get("descripcionCircunscripcion") or data.get("circunscripcion") self.cod_caso_judicial: int | None = data.get("codCasoJudicial") self.origen: int | None = data.get("origen") @@ -471,6 +478,12 @@ class CSJClient: headers=session.auth_headers(), ) + if r.status_code == 403: + raise CSJAuthError( + "Acceso denegado al listado de notificaciones (403). " + "La cuenta puede no tener el rol de abogado habilitado en el PJ." + ) + r.raise_for_status() data = r.json() diff --git a/telegram_bot.py b/telegram_bot.py index 7349d0e..a665430 100644 --- a/telegram_bot.py +++ b/telegram_bot.py @@ -735,8 +735,8 @@ class PedritoBot: cod_caso = notif.cod_caso_judicial origen = notif.origen - cod_notif = notif.cod_notificacion_origen - pdf_cb = f"pdf:{cod_caso}:{origen}:{cod_notif}" if (cod_caso and origen is not None) else None + cod_actuacion = notif.cod_actuacion_caso + pdf_cb = f"pdf:{cod_caso}:{origen}:{cod_actuacion}" if (cod_caso and origen is not None and cod_actuacion) else None botones = [] if pdf_cb: