# Prompt para Claude Code — Agregar comando /exp al bot ## Tarea Agregar la feature "detalle de expediente por número" al bot de Telegram. ## Contexto El reconocimiento del 22/05/2026 confirmó todos los endpoints necesarios. Ver `csj_client_nuevos_metodos.py` en la raíz del proyecto — tiene el código listo para integrar con documentación inline. ## Cambios requeridos ### 1. En `csj_client.py` a) Agregar después de la clase `NotificacionPendiente`: - Clase `CasoJudicial` (ver `csj_client_nuevos_metodos.py`) - Clase `ActuacionCaso` (ver `csj_client_nuevos_metodos.py`) b) Agregar dentro de la clase `CSJClient`: - Método `buscar_expedientes()` (ver `csj_client_nuevos_metodos.py`) - Método `listar_actuaciones()` (ver `csj_client_nuevos_metodos.py`) c) El import de `httpx` ya existe. No agregar dependencias nuevas. ### 2. En `telegram_bot.py` Agregar el comando `/exp` con este comportamiento: ``` /exp 198 → busca número 198 sin filtrar por año /exp 198/2026 → busca número 198, año 2026 /exp carlos → busca por carátula (texto, no número) ``` **Mensaje de respuesta cuando encuentra un expediente:** ``` 📂 Exp. {numero}/{anio} {caratula} {circunscripcion} | {estado} Últimas actuaciones: • {fecha} — {tipo}: {descripcion_actuacion} • {fecha} — {tipo}: {descripcion_actuacion} • {fecha} — {tipo}: {descripcion_actuacion} ({total} actuaciones en total) ``` Mostrar máximo 3 actuaciones más recientes (las primeras del response, que ya vienen ordenadas por fecha descendente). **Cuando encuentra múltiples expedientes** (búsqueda por carátula): ``` Se encontraron {N} expedientes para "{búsqueda}": 1. Exp. {numero}/{anio} — {caratula_truncada_50_chars} {circunscripcion} | {estado} 2. ... Para ver detalle: /exp {numero}/{anio} ``` Mostrar máximo 5 resultados. Si hay más, indicar cuántos hay en total. **Cuando no encuentra nada:** ``` No encontré expedientes para "{búsqueda}". Probá con la carátula o con número/año. ``` ### 3. En `CLAUDE.md` Agregar `/exp` a la lista de comandos de Telegram. ## Parsing del argumento del comando ```python def parsear_argumento_exp(arg: str) -> dict: """ Parsea el argumento del comando /exp. Retorna dict con claves posibles: - numero (int): número de expediente - anio (int): año del expediente - caratula (str): texto para buscar por carátula Ejemplos: "198" → {"numero": 198} "198/2026" → {"numero": 198, "anio": 2026} "carlos" → {"caratula": "carlos"} "198/26" → {"numero": 198, "anio": 2026} # año de 2 dígitos → 2000+anio """ ``` ## Notas importantes - Usar `scrub()` de `utils/sanitize.py` en cualquier log que incluya contenido de respuestas del PJ - El comando solo responde al `TELEGRAM_CHAT_ID` autorizado (igual que el resto) - Si `listar_actuaciones()` falla pero `buscar_expedientes()` tuvo éxito, mostrar igual los datos del caso sin actuaciones (degradación elegante) - `incluirNotificaciones=false` siempre (no mezclar con notificaciones) - Truncar carátulas largas a 60 caracteres con "..." en listados - Fechas en formato DD/MM/YYYY ## Qué NO hacer - No agregar paginación interactiva (botones "siguiente página") en esta versión - No agregar descarga de documentos en esta versión - No cambiar nada del flujo de notificaciones existente - No agregar dependencias nuevas ## Verificación Después de implementar, verificar: - [ ] `/exp 198` responde con el caso correcto - [ ] `/exp 198/2026` responde con el caso correcto - [ ] `/exp carlos` muestra lista de casos con "carlos" en carátula - [ ] `/exp 999999/1900` responde "No encontré expedientes" - [ ] Sin credenciales en logs (verificar con LOG_LEVEL=DEBUG) - [ ] Agrega `/exp` a la lista de comandos en CLAUDE.md