Fix: mapeo de campos reales del PJ y PDF desde notificaciones

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 <noreply@anthropic.com>
This commit is contained in:
markosbenitez
2026-05-25 23:01:13 -03:00
parent 7865008618
commit d4e4328782
2 changed files with 18 additions and 5 deletions

View File

@@ -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()

View File

@@ -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: