Hoja de ruta y estado de verificación¶
Versionado¶
SemVer. La versión mayor es 0, y eso significa que la API
pública puede cambiar sin aviso entre versiones menores.
Hay una razón adicional para no apurar el 1.0.0: este software depende del HTML de un
tercero que puede cambiar cualquier día. Prometer estabilidad de interfaz sería prometer algo
que no controlamos.
Condiciones para llegar a 1.0.0¶
Las tres, no dos de tres:
Más de una competencia verificada contra el sistema real, con fixtures propias. Cumplida desde la 0.4.0: son seis, y el detalle se lee en cinco.
Esquema de salida estable, sin cambios de campos por al menos dos versiones menores. El contador va en cero, y se reinició cinco veces seguidas: la 0.10.0 agregó
anexo_ruta,anexo_referenciayaudio_referencia; la 0.11.0,diligencias,escritos_pendientesycausa_de_origen; la 0.12.0,causas_agregadas; la 0.13.0,desplazamientoy los campos nuevos del PDF. Cada canal nuevo que se abre lo reinicia, y eso es esperable mientras queden canales sin leer.Seis meses sin que un cambio de la plataforma rompa el parser, o con al menos un cambio detectado y corregido dentro de la semana.
Hoja de ruta¶
0.2: paginación y varias causas — hecho¶
Los controles de paginación se parsean, el listado se recorre entero y existen las búsquedas
por nombre y por RUT de persona jurídica. El recorrido levanta ResultadosTruncados al llegar
al tope en vez de devolver una lista recortada.
Quedó decidido lo que estaba en duda: no se encadenan las actuaciones de todas las causas de un listado. Doce causas son unas sesenta peticiones, y bajo el régimen sostenido de una cada 5 segundos eso son unos cinco minutos: la ráfaga alcanza para la primera causa y no cambia el total. La respuesta correcta es devolver el listado para que el usuario elija cuál abrir.
0.3: jurisprudencia — hecho¶
buscar_jurisprudencia anda contra siete de los diez buscadores: Corte Suprema, Cortes de
Apelaciones, Laborales, Civiles, Cobranza, Familia y Salud CS. El de Penales está medido y no se
expone, por decisión y por lo mismo que el detalle de las causas penales. Con la paginación
medida, una búsqueda ya no se corta en la coincidencia 250.
Los tres que quedan fuera están medidos, así que ninguno espera trabajo: penales y el compendio de extranjería publican un dato de una persona en cada fila, y líneas jurisprudenciales no entrega fallos sino temas. La sección de jurisprudencia, más abajo, lo detalla.
0.4: las seis competencias buscables — hecho¶
Las cuatro búsquedas (consultaRit*, consultaNombre*, consultaJuridica* y
consultaFecha*) están verificadas en las seis competencias que el servidor expone, cada una
con su fixture real anonimizada.
Lo que las bloqueaba resultó ser un solo campo, y conviene dejar escrito el diagnóstico
equivocado porque era plausible y costó dos intentos: se creyó que sobraban los campos que el
sitio deshabilita (conTipoCausa, conCorte, conTribunal), y que faltaba un código de libro
en conTipoCausa. Las dos cosas eran falsas. El combo de libros existe
(json/cmbTipos.php) y devuelve cero bytes para suprema, y la búsqueda anda igual con o sin
los campos deshabilitados. Faltaba radio-group, el radio RIT/RUC del formulario, en el que su
PHP se ramifica para saber por cuál de los dos se busca.
Se encontró bisectando desde el juego de campos que fallaba, no leyendo más JavaScript.
Y el arreglo salió incompleto, que es la parte que conviene no olvidar. radio-group
desbloqueó a suprema y apelaciones, pero penal tiene su propio radio (radio-groupPenal) y
siguió rota; las tres se declararon verificadas y se publicaron así en la 0.2.0. La causa es
una sola: se midieron con peticiones armadas a mano y los tests usan dobles, así que nada
ejercitó buscar_por_rit contra la plataforma. Verificar la petición no es verificar el
cliente. Los campos propios de cada competencia salen ahora de la tabla, con un test que
compara el formulario enviado contra lo que ella declara.
Lo que sigue pendiente es lo que da valor, y es más chico de lo que parecía:
diligenciaCob: cobranza tiene ministro de fe y sus diligencias viven en un panel aparte, con estructura propia (Estado Diligencia,Tipo Diligencia,Destinatario,Responsable). Su Historia sí nombra algunas: tres filas dicenActuacion - Receptor, sin tilde y con guion, y ninguna trae fecha de diligencia. Por esoactuaciones_receptorrechaza cobranza: no se sabe si esas tres son todas, y entregarlas se leería como el total.El panel se lee, y no entrega actuaciones. El detalle de causa lo trae en
diligencias: qué diligencia hay, en qué estado, a quién se dirige y quién figura a cargo. Lo que no trae es la fecha en que se practicó: la columna publica31/12/1969, el epoch, o sea el valor cero renderizado, y ese cero se entrega en nulo en vez de como fecha. Informarlo como31/12/1969haría computar un plazo desde 1969, que es peor que no informarlo.Lo que sigue pendiente es más chico que antes: encontrar una causa donde ese panel sí publique fechas. Hasta entonces, la fecha que corre los plazos en cobranza no está en ninguna parte de la respuesta, y decirlo es lo único cierto que se puede decir.
Las notificaciones son otra fuente de fechas, y no son uniformes. Buscando lo anterior apareció que cobranza publica
notificacionCobcon DOS columnas de fecha,Fec.Not.yFec.Tram., que difieren: las notificaciones por correo electrónico coinciden y las por carta van con un día de diferencia. Civil publica otra cosa: el panel se llamanotificacionesCiv, tiene ocho columnas y una sola fecha.Es la lección de cobranza repetida: mismo concepto, estructura distinta por competencia. Resuelto en la 0.4.0, cuando apareció una causa civil con tres notificaciones reales y se pudo medir en vez de adivinar: los dos paneles se leen, cada uno con sus columnas, y
fecha_notificacionva nula donde la competencia no la publica en vez de copiar la de trámite.Laboral, penal, suprema y apelaciones no tienen receptor. En todo el sitio sólo existen
receptorCivilyreceptorCobranza. Queda declarado en la tabla y se rechaza antes de gastar una petición.
0.5: el resto del detalle de causa — hecho parcialmente¶
webscrapthings cubre esto desde 2025 y un abogado lo espera. Se divide en dos, porque el
costo no es el mismo:
Sin peticiones nuevas. Ya vienen en la respuesta del detalle que el cliente pide, y ése
era el punto: obtener_detalle_causa los lee todos de una sola cadena. Preguntar las cuatro
cosas de una causa con dos cuadernos costaba dieciséis peticiones y ahora cuesta cuatro.
La cadena entera, medida en vivo con C-1156-2026 el 20 de agosto de 2026. Las dos primeras abren la sesión, y por eso el total es seis y no cuatro:
graph LR
S1["1· sesion-consultaunificada.php"] --> S2["2· consultaUnificada.php<br/><i>de acá salen el prefijo y el token</i>"]
S2 --> B["3· consultaRit<br/><i>encuentra la causa</i>"]
B --> D["4· detalle<br/><i>trae la lista de cuadernos</i>"]
D --> C1["5· cuaderno Principal"]
D --> C2["6· cuaderno Apremio"]
C1 --> R["una respuesta"]
C2 --> R
Los paneles que NO son la historia se deduplican por contenido: no llevan el cuaderno en la fila, así que si el sitio los repite en cada uno llegarían dos veces.
litigantesCiv: quiénes son parte y con qué calidad. Hecho, en las cinco competencias con detalle mapeadonotificacionesCiv: con su propio estado y su propia fecha de trámite. HecholiquidacionCobymateriasLab: cuánto se debe, y qué se litiga. HechoescritosCiv: hecho, y resultó ser otra cosa de la que esta página suponía. No es el listado de los escritos presentados: el sitio rotula la pestaña «Escritos por Resolver», o sea es la COLA de lo que espera proveído. Por eso las causas viejas lo traen vacío con escritos de sobra en su Historia, y una causa de esta semana trae dosexhortosCiv: el exhorto visto desde el tribunal de origen. HechopiezasExhortoCiv: el exhorto visto desde el otro lado. Hecho, con un campo aparte que dice si la causa es un exhorto. Ver abajo
La respuesta del detalle sigue sin ser el expediente completo, y su contrato lo dice desde la 0.10.0: quedan paneles sin leer y son distintos en cada competencia. Que el de escritos ya esté no cambia esa advertencia, la acorta.
Los dos lados del exhorto están medidos y la tabla vive en Qué está verificado.
exhortosCiv se lee desde el origen y piezasExhortoCiv desde el destino: los dos están
cubiertos. Mapear el segundo tenía una decisión de contrato antes que de código, porque en
DetalleCausa el None ya significaba «esta COMPETENCIA no publica el panel» y acá hacía
falta decir «esta CAUSA no es un exhorto», que no es lo mismo. Sobrecargar None con los dos
sentidos es exactamente la distinción que este proyecto existe para no borrar.
Se resolvió con la cabecera de la causa, que hasta entonces no se leía de ninguna
competencia: el rótulo Proc. dice Exhorto cuando la causa lo es, y de ahí sale la respuesta
sin inferirla de qué paneles llegaron. Al lado de piezas_exhorto viaja causa_es_exhorto,
con el mismo oficio que causa_encontrada: nombrar cuál de los dos silencios es éste.
Las dos lecturas se contrastan y una contradicción levanta, porque las dos salidas silenciosas
pierden datos. Si el sitio renombra el id del panel, creerle al panel diría «esta causa no es
un exhorto» y las piezas desaparecerían sin error; al revés, un panel que llegue en una causa
que la cabecera no declara exhorto no se descarta por la cabecera.
Una petición cada uno, con su intervalo. Son modales que la plataforma carga aparte, y hay que contarlos en el tiempo total:
modal/detalleExhortos.php, que la fila del exhorto invoca con su propia referenciamodal/causaOrigenCivil.php
0.6: Programación de Sala — medido, y no es lo que esta página decía¶
Acá había un mapeo listo para implementar, sacado de leer automatizador-legal: progComp,
progCorte, progRolCausa, progEraCausa, progTipoCausa, btnProgConsulta y
dtaTableDetalleProgSala. Ninguno de los siete existe. Medido el 20 de agosto de 2026:
cero ocurrencias en consultaUnificada.php y cero en la página real.
Tres cosas resultaron distintas de lo que decía:
Está en otro host. https://salas.pjud.cl/monitor/monitor.php, no en la Oficina Judicial
Virtual. Se llega desde la portada, que lo enlaza.
No comparte cortafuegos con los otros dos. OJV y juris.pjud.cl responden con la cookie
TS<hex> de F5 BIG-IP, y por eso la detención total es del proceso y no del host. salas
responde Server: Apache, sin esa cookie y sin Via. Es una diferencia medida, no una
suposición, y habría que decidirla antes de consultarlo desde acá: el motivo de la detención
total no es técnico, es no escalar contra la institución, y eso no cambia con el host.
Y no es una consulta por causa. Se llama «Monitor de Salas» y pide «Seleccione Corte y
Sala que desea visualizar»: dos desplegables, corte (que viaja como cod_corte) y sala,
que se llena con controlador/listaSalaPorCorte.php. No recibe un rol. Es un tablero de
qué se está viendo ahora en una sala, no la respuesta a «¿cuándo me ven?».
Un detalle más que conviene tener anotado: los valores del desplegable de corte vienen
cifrados (t+r7m+HbenMm8+DvHDPmhBvuw50npbnCNFmLW+Sp4RM=), no son los códigos numéricos que
usa la Oficina Judicial Virtual. Son dos sistemas con dos vocabularios.
Queda como pregunta abierta y no como tarea: si lo que se quería era «¿cuándo me ven?», esto no lo responde, y dónde vive esa consulta, o si existe, no está medido.
0.7: documentos — hecho parcialmente¶
No es una ruta, son siete en civil y veintisiete contando las cinco competencias. Todas son
GET con un solo parámetro oculto que lleva una referencia opaca, igual que el resto del sitio,
y todas salen del action de un formulario de la respuesta.
Siete se han ejecutado de verdad, una por competencia como mínimo; las veinte que faltan esperan una causa que ofrezca la fila que las entrega. La tabla, con lo que midió cada una, está en Qué está verificado.
Y hasta ahora la respuesta no decía cuál documento. tiene_documento era un booleano: la
actuación informaba que HAY documento y no CUÁL, y con eso no se puede pedir. La referencia
estaba en la misma celda, en el campo dtaDoc del formulario, y se descartaba. Corregido: cada
actuación trae su documento_referencia, que es lo único que permite pedir el archivo sin
volver a consultar el detalle entero.
Cómo se devuelve un documento sin reventar el contexto¶
El ebook es el expediente completo. Meterlo en la respuesta de una herramienta, aunque sea en base64, gasta el contexto del modelo en algo que probablemente no necesita leer entero, y el costo lo paga la conversación del abogado.
La especificación del protocolo tiene la pieza para esto y no hace falta inventarla. En la
revisión 2026-07-28 una herramienta puede devolver:
Forma |
Qué es |
Cuándo |
|---|---|---|
|
Un puntero con |
El ebook y cualquier documento largo. El cliente lo lee con |
|
El contenido en base64, dentro de la respuesta |
Un documento chico que el modelo sí tiene que leer ahora |
ResourceLink trae size, así que el cliente puede decidir antes de gastar el contexto.
Ésa es la diferencia con devolver el PDF y esperar que a nadie le explote la ventana.
Extraer texto: qué biblioteca, y por qué la licencia decide¶
Lo medido por terceros y publicado, no por este proyecto:
Biblioteca |
Licencia |
Velocidad |
Nota |
|---|---|---|---|
PyMuPDF |
AGPL-3.0 |
8 a 12 veces más rápida |
Trae OCR y detección de tablas |
pdfplumber |
MIT |
La más lenta de las tres |
Mejor en tablas de documentos financieros |
pypdf |
BSD-3 |
Intermedia |
Python puro, sin dependencias binarias |
La velocidad no decide acá, la licencia sí. Este proyecto se distribuye bajo PolyForm Strict, y publicar una rueda que enlaza código AGPL pone las dos licencias en conflicto. Con eso PyMuPDF queda fuera aunque sea la más rápida, y quedan pypdf y pdfplumber.
Un PDF sin capa de texto es un escaneo, y ahí NO se transcribe¶
Detectarlo es barato: si no se extrae texto, es una imagen. Lo que no corresponde es pasarle OCR y entregar el resultado como el texto del documento.
Una transcripción automática de una resolución judicial se ve idéntica a la resolución y no lo es. Es peor que la lista vacía de la regla 4: la lista vacía se nota, un texto plausible con una palabra cambiada no. Lo correcto es decir que el documento es un escaneo y entregar el documento, no una versión de él.
Y la parte que no es técnica¶
Traer un PDF a disco cambia el perfil de retención del proyecto y entra de lleno en la Ley 21.719. La regla 5 dice que no se persisten datos de terceros, así que si un documento se guarda, lo guarda quien llama y no este servidor: ruta elegida por el usuario, consentimiento explícito por llamada, y nada escrito por defecto.
0.7a: los códigos de tribunal — hecho¶
Era el muro de entrada del proyecto. Para buscar una causa en primera instancia hay que
pasar tribunal=162, y ese número no aparecía en ninguna parte de la respuesta ni de esta
documentación: quien no lo supiera no podía usar el servidor. Lo resuelven listar_cortes y
listar_tribunales.
Las rutas y lo que devuelven están en Qué está verificado.
Y es lo que hace seguible la arista del exhorto. El detalle entrega el tribunal de destino por su nombre («1º Juzgado Civil de Chillán») y la búsqueda exige un entero, así que son tres llamadas: ubicar la corte, sacar el código del tribunal, y buscar la causa por su rol.
El exhorto trae además su propia referencia, que es como la plataforma abre su detalle. Se
guarda sin usarla: detalleExhortos.php sigue mapeado y sin ejecutar, y cuando se mida el dato
ya está. No sirve como identidad: el mismo exhorto llega con una referencia distinta en
cada cuaderno, así que la deduplicación las ignora a propósito.
0.7b: la georreferencia — hecha¶
Hoy la Historia sólo dice si una actuación tiene georreferencia. Detrás del modal hay más de lo que esta página suponía. Lo medido está en Qué está verificado.
Y trae fotos y videos. El modal tiene tres pestañas: mapasGeoRef, imagenesGeoRef y
videosGeoRef. Las seis actuaciones medidas traen las dos últimas vacías, así que no hay
ni una imagen observada todavía.
Se anotó una vez que había que decidir si entregarlas, y esa duda estaba mal planteada: el proyecto ya entrega RUT de personas naturales, que identifica más que una fotografía, y lo justifica porque es lo que la plataforma publica y lo que identifica a una parte sin ambigüedad. Entregar lo que el Poder Judicial publica es lo que este servidor hace; la regla 5 prohíbe persistirlo, que es otra cosa.
Lo que sí sigue en pie, y es la regla 6: si alguna vez se guarda una respuesta con imágenes como fixture, esa fixture hay que anonimizarla igual que las demás.
Cuesta una petición por actuación, con su intervalo. Para las ocho de receptor de E-468-2026 serían ocho peticiones más, así que va a pedido de una actuación concreta y nunca de barrido.
0.8: el detalle de las competencias ya buscables — hecho, salvo penal¶
Las cuatro se pidieron y se midieron sobre una causa real. Tres quedaron mapeadas y expuestas
por obtener_detalle_causa; penal no, y la razón es la de siempre.
Competencia |
Panel |
Qué la distingue |
|---|---|---|
|
|
Como civil, con |
|
|
Sin |
|
|
Llama |
|
|
Cero filas, y la razón no era la que decía acá |
El detalle de penal está medido y no se expone. Lo que esta página afirmaba, que la
causa medida no traía filas, era cierto y el diagnóstico era falso: se estaba pidiendo la ruta
equivocada. Las causas penales no se abren por penal/. Cada fila del listado llama a
detalleCausaPenalUnificado, que va a unificado/modal/causaUnificado.php, y ésa responde con
la cabecera llena y los paneles con filas. Medido el 22 de agosto de 2026 sobre nueve causas de
2024 y 2026; la tabla de paneles y columnas está en Qué está verificado.
La ruta que lleva el nombre de la competencia devuelve 200 con los cuatro paneles, sus encabezados y cero filas: la forma exacta de «esta causa penal no tiene nada».
Y la decisión está tomada: penal queda fuera de alcance. El titular la tomó el 22 de agosto de 2026, al terminar la medición y no antes: primero se midió para poder decidir con datos, y lo medido queda escrito en Qué está verificado para quien evalúe esto de nuevo.
No es un pendiente ni una limitación técnica. La respuesta se lee, y aun así no se expone: un expediente penal nombra imputados y víctimas, y el criterio que sostiene al resto del proyecto, devolver lo que la plataforma publica sin identificarse, no se traslada solo a ese contenido. Queda junto a familia, por una razón distinta: familia no se puede leer, penal sí y no se quiere.
Lo que NO cambia: penal sigue siendo buscable, como desde la 0.2.0. Buscar una causa devuelve rol, tribunal, RUC, caratulado y estado, que es lo mismo que el listado público de la plataforma muestra. Lo que queda fuera es el detalle: la historia, las partes y el panel de relaciones con el delito.
Y el rechazo del detalle deja de explicarse como falta de medición. Es una decisión.
Ninguna de las cuatro tiene receptor. La palabra no aparece ni una vez en las tres respuestas mapeadas, y ninguna fila trae la fecha doble. Por eso la historia se lee aparte de las actuaciones del receptor: en esas competencias la pregunta que origina el proyecto no tiene respuesta, y sin ella lo único disponible ahí era la búsqueda.
Un detalle del recorrido que conviene no perder: el nombre del panel se guarda completo y no
como sufijo. Antes el código anteponía historia, lo que funcionaba con dos competencias que se
llamaban así y no generaliza: dos de las nuevas van en plural (movimientos…) y una en singular
(movimiento…).
0.9: familia¶
La única competencia que no se expone, y no por falta de medición: la propia plataforma responde que las causas de familia son reservadas y sólo se llega a ellas por Clave Única, desde «Mis Causas». Queda fuera de alcance mientras eso siga así.
Esto es la competencia de la Oficina Judicial Virtual, o sea las causas en tramitación. El buscador de fallos de Familia es otra cosa y sí se expone desde la 0.13.0: publica sentencias ya dictadas, con el caratulado anonimizado por la propia plataforma.
0.10: los otros dos canales del folio — hecho parcialmente¶
La Historia publica más de un canal por folio y hasta la 0.9.0 se leía uno solo.
Anexos: cuatro paneles ofrecidos de ocho medidos. La columna Anexo es un segundo canal de
documentos, distinto de Doc.: ahí va la resolución o el escrito, y acá los papeles que se
acompañaron, o sea donde suele estar la prueba documental. Lo que hacía invisible la falta es
que el folio SÍ entregaba un documento por el otro canal, así que la respuesta parecía completa.
Cada actuación trae ahora anexo_ruta y anexo_referencia. Van las dos porque una competencia
tiene varios paneles: civil abre dos desde la misma columna, con parámetros distintos.
De las dieciocho rutas que el sitio nombra hay siete medidas, más la de suprema, que el sitio llama «Escrito». Se ofrecen cuatro: las que una fila puede entregar, tres desde un folio de la Historia y una desde un escrito por resolver. Las otras cuatro respondieron con filas y no se ofrecen porque su referencia no cuelga de ninguna fila que este servidor lea, o sea no habría de dónde sacar el parámetro. Las once que faltan siguen sin ejecutarse: se abrieron sesenta y una causas buscándolas y ninguna las ofrecía. La tabla está en Qué está verificado.
Audios de audiencia: hecho, y a propósito sin descargar. listar_audios_audiencia dice qué
hay y con qué enlace se baja cada archivo. No trae los archivos, y eso no es una limitación
técnica: un audio de audiencia son las voces de las partes, los testigos y el tribunal, una
transcripción automática no reemplaza oírlo, y no siempre se puede transcribir.
Es el primer canal de la plataforma que no entrega PDF, y viene troceado por acto procesal: once archivos para una sola audiencia preparatoria. Sólo laboral está medida.
Por lo mismo siguen sin medir, deliberadamente, cuánto pesa un archivo y si el endpoint de descarga responde a una consulta anónima: ninguna de las dos hace falta para entregar el enlace.
0.11: los paneles que quedaban del detalle — hecho¶
Cuatro paneles que la respuesta ya traía y este servidor tiraba.
Los escritos por resolver de civil resultaron ser otra cosa de la que esta página suponía: no son los escritos presentados sino la COLA de lo que espera proveído, que es lo que el sitio rotula en la pestaña. Por eso las causas viejas lo traen vacío con escritos de sobra en su Historia. Responden una pregunta que la Historia no responde, porque ahí el escrito aparece cuando YA fue resuelto.
Las diligencias del ministro de fe, en cobranza y en laboral, cada una con su forma. En
cobranza la fecha viene nula cuando el sitio imprime el epoch 31/12/1969, que es el valor cero
y no una diligencia de 1969. En laboral, que una diligencia no traiga el oficio de vuelta es el
dato de que todavía no vuelve.
La causa de origen de suprema cierra hacia abajo la misma arista que los exhortos cierran hacia el lado: de qué causa de apelaciones subió el recurso. Su panel falta en tres de dieciséis causas, porque no todas suben desde una corte, y eso vuelve nulo y no error.
Y una fuga que había que retirar de lo publicado: tres nombres reales de personas seguían en las fixtures versionadas, invisibles para los cuatro guardias porque venían en mayúscula y minúscula o con un sufijo entre paréntesis.
0.12: los tres paneles sin una fila vista — hecho¶
Los escritos pendientes y la liquidación de laboral, y las causas agregadas de suprema. De los tres se midieron los ENCABEZADOS y de ninguno se vio una fila: sesenta y una causas abiertas en cinco barridos, cero filas.
La distinción con el resto no vive en un comentario: SIN_FILAS_OBSERVADAS los nombra, la
referencia lo advierte y un guardia compara esa lista contra las fixtures en las dos
direcciones. Se leen igual para que el día que una causa los traiga la respuesta los incluya, en
vez de descartarlos en silencio.
Quedan dos paneles sin mapear, los de apelaciones, y ahí no hay qué mapear: su tabla son dos columnas, la primera en blanco y la segunda con el rótulo, y en la mitad de los detalles el panel ni siquiera aparece.
0.13: el buscador de fallos deja de ser una sola página — hecho¶
La paginación existía desde siempre y el tope lo poníamos nosotros. El cuerpo de la
búsqueda mandaba offset_paginacion en "0" literal, así que la coincidencia 251 no existía
para este servidor. Medido el 22 de agosto de 2026 sobre una búsqueda de 59.819 visibles, con
desplazamientos 0, 10 y 250: tres páginas distintas, cero solapamiento. Más allá del final la
plataforma responde 200 con la lista vacía, no un error, y eso es lo que el esquema
advierte.
Cuatro buscadores más, con lo que diez de los diez están medidos y siete se exponen: Civiles,
Cobranza, Familia y Salud CS. El de penales queda medido y fuera, por lo mismo que el detalle
de las causas penales: sus caratulados traen el nombre del imputado. Los dos que faltan no
tienen medición y no es lo mismo: el Compendio de Extranjería no tiene ruta conocida y Líneas
Jurisprudenciales responde con otra forma, sin response.numFound.
Una ruta de buscador que no existe devolvía la página de OTRO buscador, con su
identificador y sus campos, y las búsquedas contestaban ese corpus sin que nada fallara. Es la
misma forma del falso negativo que ya apareció con los audios, con los anexos y con penal, y
por eso ahora se compara el id_buscador de la página contra el que se midió.
El PDF ya se leía entero y se tiraba casi todo. obtener_documento extraía el texto de
cada página para quedarse con un conteo; ahora dice CUÁLES páginas lo traen, por tramos, más
los marcadores del archivo y cuánto mide su página. No cuesta una consulta más. Un PDF cifrado
dejó de informarse con el mismo mensaje que uno truncado.
Siete de las veintisiete rutas de documento se pidieron de verdad, en las cinco
competencias, y antes era una sola: las demás se habían leído del action de un formulario.
Las veinte que faltan esperan una causa que las ofrezca.
Y dos guardias que faltaban, los dos sobre lo mismo: que una afirmación no se quede vieja
donde nadie la mira. Doce de los veintitrés paneles del detalle no pasaban por el arnés que
comprueba el mapeo posicional, y las dos cuentas de buscadores estaban viejas en cinco lugares,
entre ellos AGENTS.md, que es lo que otro agente lee como instrucción.
0.14: lo que el servidor dice de sí mismo — hecho¶
Esta versión no agrega una sola capacidad. Corrige lo que el servidor le cuenta al modelo sobre las que ya tenía, que es lo que decide si el dato llega bien o llega de otra causa.
El primer uso real produjo la primera evidencia, y no se parecía a lo que la suite miraba.
Tres sesiones lo conectaron a un cliente de escritorio el 23 de agosto de 2026. Ningún hallazgo
fue un error de cálculo: todos fueron de contrato. Uno costó datos. La descripción decía que en
la búsqueda por rol omitir tribunal «AMPLÍA los resultados», que es literalmente cierto y
prácticamente engañoso, porque el rol se numera por juzgado: una sesión lo omitió por eso y
recibió 43 causas de 43 personas distintas por preguntar por una.
Y dos pérdidas que ninguna sesión pudo ver, porque no dejan rastro. El catálogo pesaba 104.475 caracteres y el cliente difiere las definiciones sobre el 10% de su ventana: una sesión cargó diez de las catorce sin señal de que le faltaban cuatro. Las instrucciones del servidor pesaban 3.770 bytes contra un corte de 2.048, así que 1.722 no llegaban, y lo que caía del otro lado eran tres reglas de las que evitan afirmar de más.
medido antes |
tope, y hoy cabe |
|
|---|---|---|
|
104.475 caracteres |
60.000, presupuesto propio: el cliente no corta, difiere sobre el 10% de su ventana |
|
3.770 bytes |
2.048 bytes, que es donde el cliente corta |
descripción mayor |
2.390 bytes |
2.048 bytes, el mismo corte |
La columna de la derecha son los topes y no lo que pesa hoy, a propósito: lo de hoy cambia con cada descripción que se toca, y una cifra escrita así queda vieja al cambio siguiente. Los topes salen del código y hay guardias que los comparan contra esta página.
Los esquemas de salida viajan sin la descripción de cada campo, que se publica en la referencia,
y obtener_detalle_causa dejó de anunciar esquema: medido, el bloque de texto que el modelo lee
es idéntico con y sin él.
tribunal y corte hacen tres cosas distintas y las seis herramientas compartían una sola
descripción, la de las búsquedas de nombre. Ahora hay una por papel: acotar una búsqueda, buscar
por rol, o identificar la única causa que la herramienta devuelve.
Y una instantánea del contrato, con el catálogo entero como viaja y en su orden. Las reglas dicen por qué algo tiene que ser así; la instantánea dice qué es, y atrapa el cambio que no viola ninguna regla.
0.15: lo que el servidor deja ver mientras trabaja — hecho¶
La 0.14 arregló lo que el servidor DICE de sí mismo. Ésta cierra lo otro: lo que deja ver mientras trabaja, y las piezas de la revisión vigente que no se usaban.
Lo disparó una sesión real, la primera que consultó de verdad. Reportó dos cuelgues de
cuatro minutos en listar_cortes y lo dijo mejor de lo que lo tenía escrito el proyecto:
Los tres cuelgues devolvieron «no result received». Nada distingue «no respondió» de «no existe». Un lector apurado reporta que la causa no existe.
Es la regla 4 (fallo ruidoso, nunca lista vacía) reapareciendo en el transporte, después de haber reaparecido en el protocolo. Cuatro excepciones salían crudas, y las cuatro eran del mismo eje: la plataforma lenta o rota, que es el modo de falla más frecuente de un portal público, llegaba peor contado que el más raro.
Y la misma regla estaba rota en la herramienta que da sentido al proyecto.
obtener_actuaciones_receptor devolvía [] cuando la búsqueda no encontraba la causa, que es
el mismo valor que una causa encontrada sin actuaciones de receptor: un rol mal escrito se leía
como una causa revisada sin diligencias, y sobre eso se computa un plazo que no existe.
Una petición de cada causa sobraba. El recorrido volvía a pedir el cuaderno que la respuesta del detalle ya traía desplegado: seis peticiones donde la ráfaga está dimensionada para una cadena de cinco. El régimen sostenido nunca se rompió, porque esa petición pasaba por el mismo balde que todas; lo que agregaba era carga evitable contra la plataforma, y la cláusula CUARTA prohíbe sobrecargar. Tres lugares de la documentación afirmaban que la cadena eran cinco.
La bitácora existía y no la veía nadie. Era una lista de instancia, y el servidor abre un cliente por llamada de herramienta: nacía y moría sin que nadie la mirara. Sale por el error estándar, con lo que tardó la plataforma y lo que esperamos nosotros por separado, que es lo que distingue un portal lento de un freno propio.
antes |
ahora |
|
|---|---|---|
un timeout |
|
dice los segundos, que la petición salió, y que esperar no prueba una ausencia |
el techo de espera |
240 s, contra su propio comentario que pedía el doble de 177 |
360 s, con un test que fija la regla |
una cadena de minutos |
silencio |
un aviso de progreso por petición, que deja al cliente sostener su reloj |
la bitácora |
inalcanzable |
por el error estándar, sin la referencia de ningún documento |
Y de la revisión vigente, que ya se hablaba por stdio sin saberlo: el catálogo viaja con
pista de frescura en vez de declararse rancio al instante, el servidor se presenta con icono, y
el argumento competencia de la plantilla de documento se completa. Más tres plantillas que la
persona invoca, que repiten por construcción las distinciones que un resumen borra.
0.16: lo que decía estar puesto y estaba puesto a medias — hecho¶
Ninguno de los tres cambios agrega superficie nueva de lectura: los tres son cosas que el proyecto daba por hechas y estaban a medias, y ninguna se veía desde afuera.
El desplegable de cuadernos se llama distinto en cobranza. El lector buscaba
selCuaderno y ahí el sitio emite selCuadernoCob, así que devolvía lista vacía, que es
exactamente lo que devuelve una causa de un solo cuaderno. Toda causa de cobranza se leía como
si tuviera uno, y la de dos venía a medias con cara de completa. Es la regla 4 en la competencia
donde viven el requerimiento de pago y el embargo.
Ningún test lo veía, y no por descuido: la única causa de cobranza medida tiene un cuaderno, así que el doble con el que se prueba no puede distinguir «uno» de «no encontré ninguno».
Pedir un cuaderno reusa el endpoint del detalle cambiándole la referencia, y que ese endpoint la atienda está medido en civil y no en cobranza. En vez de suponerlo, la lectura comprueba que la página que llegó traiga desplegado el cuaderno que se pidió:
la primera página |
la respuesta del cuaderno |
qué pasa |
|---|---|---|
marca |
marca el pedido |
sigue |
marca |
marca otro, ninguno, o dos |
se levanta |
no marca ninguno |
no marca ninguno |
sigue: no hay con qué comprobar |
La pista de frescura iba en un catálogo de cinco. tools/list salía con una hora y los
otros cuatro con ttlMs: 0, o sea «vuelve a traerlo siempre», aunque cambian por lo mismo y con
la misma frecuencia. El conjunto ahora se deriva del Literal del protocolo menos lo que se
excluye a mano, así que un método cacheable nuevo entra solo y hay que decidirlo.
resources/read es el único excluido: guardar una copia de un documento de un tercero es la
regla 5, y servirla vieja como si fuera la de ahora es la regla 4 aplicada a un archivo.
Y el completado atendía un argumento de cuatro. competencia y buscador de las tres
plantillas quedaron completables, cada una con SU conjunto y no con la unión: las competencias
que publican al ministro de fe no son las mismas que tienen panel del detalle. tipo queda
fuera a propósito, porque sus valores dependen de la competencia y la única lista honesta se
arma con ella ya elegida.
Esto último es lo único que se ve desde afuera hoy, y por eso la versión es menor y no de
parche: completion/complete existe desde 2024-11-05, así que llega por el saludo que negocian
los clientes de verdad. Todo lo demás de la revisión vigente que quedaba sin adoptar es
invisible para cualquier cliente que hoy se conecte, y qué es y por qué no se adopta está más
abajo, con guardias que lo atan a sus fuentes.
0.17: lo que cuatro sesiones de uso real encontraron — hecho¶
La 0.16 arregló lo que el proyecto daba por hecho y estaba a medias. Ésta sale de que el servidor se usara de verdad: cuatro sesiones lo probaron contra causas reales y reportaron qué entendieron con lo que recibieron. Casi todo lo de acá lo encontraron ellas o el repaso que dispararon.
Tres cosas devolvían menos de lo que decían. Una búsqueda cuya segunda página repetía la primera llegaba al total que la plataforma declara y se daba por completa, con la mitad de las filas sin pedir. Una que respondía «no hay resultados» a mitad del recorrido devolvía lo acumulado callando. Y el listado por nombre entregaba una fila por litigante que coincide, todas idénticas: quien contara filas se equivocaba por el número de partes que calzan.
El tribunal ausente viajaba como el texto None en tres de las cuatro búsquedas, donde el
sitio manda un cero. La plataforma no da error con eso: devuelve un listado vacío, que se lee
como que la causa no existe.
Y la prosa afirmaba lo contrario que su fuente, en varios sitios a la vez: que sólo
cobranza publica las liquidaciones y las diligencias cuando laboral también, que en cobranza
hay fecha_diligencia cuando la plataforma no la publica, y que en penal se busca por el
nombre del libro cuando exige el código. Cada una mandaba a concluir que algo no existe.
antes |
ahora |
|
|---|---|---|
una sentencia con dos versiones |
se entregaba una en silencio |
se enumeran y hay que elegir con |
|
|
nulo |
el desglose por condición de publicación |
contaba el corpus en cinco buscadores |
nulo donde no es de la consulta |
la Historia de cobranza |
80 filas para 71 folios |
una por folio |
Lo que hizo posible encontrarlo fue medir contra la plataforma en vez de razonar: los duplicados, el desglose, las letras de rol de cobranza y laboral, y la duración de los tres tokens (media hora la del listado, una hora las del detalle) salieron de peticiones reales. Con eso la hoja de ruta se queda sin ninguna fila esperando medición nuestra.
Y una lección del proceso, porque se repitió más de lo cómodo: varios guardias escritos en esta versión empezaron verdes. Uno buscaba una letra suelta en una descripción llena de mayúsculas, otro leía la descripción de una plantilla en vez del texto que devuelve, otro excluía por la forma del retorno y no por dónde estaba. Ninguno lo habría notado la suite: los encontró romper a propósito lo que cada uno decía cuidar.
0.18: la prosa que más se cuidó era la única que no viajaba — hecho¶
La 0.17 salió de que cuatro sesiones usaran el servidor de verdad. Ésta sale de la misma tanda, pero de una pregunta que sólo aparece cuando varias sesiones se equivocan igual: si la documentación está escrita y es correcta, por qué la ignoran las cuatro.
Porque no les llega. El esquema de salida viaja sin las descripciones de campo, por una
decisión medida y documentada: el catálogo pesaba 104.475 caracteres y el cliente difería las
definiciones. La consecuencia no se había mirado. La descripción de discrepancia_fechas, que
dice con todas sus letras que NO compara contra fecha_registro, no llegó nunca a ningún
modelo: tres sesiones seguidas la adivinaron. Lo que sí llega es la descripción de la
herramienta, así que ahí se mudó lo que carga peso.
Y dos defectos que no eran de prosa. El lector de sentencias devolvía la cadena vacía por
un campo que el buscador no publica, o sea la ausencia disfrazada de dato. El peor era
ministros: llegaba como lista VACÍA, que en el contrato de este servidor significa que no
firmó nadie. Arreglarlo por el mapa de cada buscador no bastó, y medirlo lo mostró: en suprema,
que SÍ declara el campo, el rol 1933-2025 lo trae vacío con redactor y sala llenos. La
cadena vacía no es respuesta por ninguna de las dos vías.
medición |
resultado |
|---|---|
el mismo apellido con y sin tilde, un tribunal |
5 causas contra 25, y mezclando las grafías cero |
|
vacío, con |
el mensaje que pide elegir, en apelaciones |
ofrecía «None palabras» |
el panel de notificaciones de C-1156-2026 |
encabezados y |
El acento se midió porque la sesión que lo reportó cambió dos variables a la vez y lo dijo. Aislada una sola, la conclusión salió al revés de la suya: la plataforma calza el acento literal y campo por campo, y guarda el mismo apellido de las dos formas. Ninguna de las dos grafías devuelve todo, así que acertarla tampoco da un total. No se corrige consultando las dos, y la razón no es la carga (la segunda petición pesa lo mismo la haga quien la haga) sino cuándo hace falta: en el cliente se gastaría siempre, incluso en un apellido sin una letra acentuable.
Lo que este trabajo deja escrito para el próximo: un guardia que existe para un defecto puede
estar verde sobre él. El aviso decía «los escritos no están medidos» mientras el parser los
leía donde la plataforma los publica, y el guardia buscaba el identificador escritos_pendientes mientras
la prosa nombraba el panel en palabras. Se encontró leyendo la prosa, no corriendo la suite.
0.19: acotar una búsqueda de fallos, con la clave que la plataforma declara — hecho¶
Dos sesiones reportaron lo mismo: el rol de una Corte de Apelaciones no es único a nivel
nacional. Medido, 2476-2023 devuelve trece sentencias de cinco cortes distintas, y con
cuarenta y dos sin entregar la cita que se fue a verificar puede quedar fuera de alcance.
En la 0.18 esto quedó fuera por una razón que dejó de valer: hacía falta la clave del
formulario, y adivinarla es lo que AGENTS.md prohíbe. No hubo que adivinarla.
parametros_buscador, que cada página del buscador publica, trae campos_facetas, y su propio
JavaScript arma el envío con facetas_seleccionadas: [{nombre, valores}]. Medido en los siete,
y difieren tanto que una lista escrita a mano habría sido la misma clase de defecto que la 0.18
vino a cerrar: cobranza declara tres facetas y suprema diez.
Lo que hizo que esto no se pudiera exponer tal cual. Un valor de faceta que no calza no da
error: la búsqueda vuelve con cero resultados, indistinguible de que la cita no exista, en la
herramienta cuyo trabajo es probar que existe. Y no calzar es lo normal, porque la plataforma
publica su propia ortografía: en la misma respuesta conviven C.A. de Valparaiso sin tilde y un
libro escrito PROTECCIN.
el desglose viene en el resultado |
de ahí se copia el valor exacto, en vez de teclearlo |
una faceta que el buscador no declara |
falla antes de consultar |
una búsqueda con facetas que vuelve vacía |
se detiene en vez de entregar la lista vacía |
y si además hay reservadas |
se dice que la cita existe y no se publica, que es otra cosa |
Dos facetas que la plataforma declara y este servidor no expone: enfermedad y medicamento, del buscador de salud. Un desglose acotado a un rol publica de qué está enferma y qué toma la persona que recurrió, que es el mismo criterio por el que no se ofrecen los buscadores penales ni el compendio de extranjería.
Lo que este trabajo deja para el próximo, además de lo de siempre: cuatro guardias de este lote empezaron verdes y los cuatro se vieron. Uno buscaba una faceta prohibida en un tramo donde el párrafo que dice que NO se expone contiene la palabra; otro comprobaba el nombre nuestro cuando el defecto deja el de Solr; otro miraba la tabla entera, así que mover una faceta de un buscador a otro no lo movía; y ninguno probaba que un filtro válido llegara a la petición, o sea borrar el envío entero los dejaba a todos verdes.
Y una deuda anotada con su motivo: exigir el desglose también cuando NO se filtra pone 44 tests en rojo, porque las fixtures guardadas son copias podadas sin ese bloque y recapturarlas pide el mapeo de anonimización, que no se versiona a propósito.
0.20: lo que el documento decía por dentro y no salía, y un buscador que perdía la mitad — hecho¶
El SDK dejó de propagar el motivo de un fallo, y la garantía central se vació una capa más
arriba del parser. mcp 2.1 decide por el TIPO de la excepción si su mensaje viaja: sólo
ToolError y ResourceError llegan con su texto, el resto como «Error executing tool». Este
servidor levanta siete clases propias y unas cuarenta veces ValueError, ninguna de esas dos,
así que con el SDK nuevo el modelo dejaba de distinguir «la plataforma cambió» de «no hay
actuaciones»: la regla 4, reaparecida donde el parser no llega. Se envuelve cada herramienta y
cada recurso en el registro, no sitio por sitio, porque un decorador que hay que acordarse de
poner algún día falta. Seis tests de protocolo lo anticipaban en su propio docstring.
El texto del documento se leía entero y se tiraba. El recorrido que describe el PDF extrae
el texto de cada página para contar cuáles traen capa, y devolvía el conteo y un puntero al
archivo, que se lee en base64 y no es texto. Ahora el texto viaja, por página y por tramos con
desde_pagina, respetando la disposición de la hoja: medido contra documentos reales, eso hace
que el encabezado tabular de un acta de audiencia (quién es denunciante, quién denunciado) se
lea correcto en vez de con las columnas mezcladas. De la misma lectura salen la fecha de la
metadata, como proxy de la firma y no como fecha oficial, y la separación entre una página
escaneada y una en blanco, que antes se marcaban igual.
El buscador por nombre distingue tildes, y buscar una grafía perdía la otra en silencio.
Medido en vivo: MARTINEZ MARTINEZ da 71 causas y MARTÍNEZ MARTÍNEZ da 88, con una sola en
común. Un abogado que teclea sin tilde recibía una lista que se ve completa y omite casi todo,
que es el falso negativo de la regla 4 en el corazón del buscador. Ahora consulta las dos
grafías y fusiona, con un fold que conserva la ñ, porque la plataforma es insensible a ella
(MUÑOZ y MUNOZ dan lo mismo) pero no a la tilde. Reversa una decisión deliberada del
proyecto, a conciencia: la vieja dejaba la corrección al modelo, y esta misma sesión midió que
eso falla, porque el modelo buscó sin tilde y no encontró la causa que estaba con tilde.
Y el aviso que faltó: un job canario corre el suite contra el mcp más reciente a diario, así
un release que rompa algo se pone rojo el día que sale y no siete días después, como pasó con
2.1.
Lo que queda de este servidor¶
La superficie no cambia: leer la Oficina Judicial Virtual y el buscador de fallos. Con eso dicho, lo que falta no espera trabajo, espera datos.
Qué falta |
Por qué no avanza |
|---|---|
Veinte de las veintisiete rutas de documento |
ninguna de las sesenta y una causas abiertas ofrece la fila que las entrega |
Once rutas de anexo |
ídem: el sitio las nombra y ninguna causa medida las ofrece |
La fecha de las diligencias de cobranza |
la plataforma publica el epoch |
|
no hay qué mapear: dos columnas, la primera en blanco, y el panel falta en la mitad de los detalles |
Buscar más causas al azar ya se agotó como método: son paneles de etapa o de cola transitoria, y aparecerán en una consulta real de alguien que los tenga.
Y lo que está cerrado por decisión, para que no se relea como pendiente: el detalle de las causas penales, el buscador de penales, el compendio de extranjería, las líneas jurisprudenciales y la competencia de familia. Cada uno con su razón en Qué está verificado, y ninguno por falta de medición.
De la revisión 2026-07-28, lo que no se adopta¶
Medido contra el ejecutable el 24 de agosto de 2026, para que la próxima revisión no lo vuelva a medir. Lo que sí se usa vive en Referencia de herramientas.
Pieza |
Por qué no |
|---|---|
Iconos por herramienta |
el catálogo ya se recorta para caber; el del servidor viaja en el saludo y es el que se ve |
|
pedirle un dato a la persona en vez de fallar. La regla 4 ya da un error que nombra qué herramienta resuelve el dato que falta, y esto sólo existe en el carril moderno |
Sampling, roots, elicitación |
la revisión no define peticiones del servidor al cliente: no hay nada que adoptar |
|
ausente del mapa de métodos del SDK |
|
es un registro de extensiones propias, y este servidor no define ninguna |
|
en el carril moderno los deriva el SDK de servir |
Esquema de salida en |
apagado a propósito: uno por presupuesto del catálogo, el otro porque devuelve bloques del protocolo y no un modelo |
Otro objetivo: lo que sale de este servidor¶
Todo lo de acá está medido y ninguno tiene número de versión, a propósito: no es que falte tiempo, es que sería otro proyecto o le cambiaría el perfil a éste. Se dejan escritos con su medición para que la próxima persona no tenga que descubrirlos de nuevo.
Qué |
Dónde vive |
Qué obligaría a decidir |
|---|---|---|
Monitor de Salas |
|
consultar un tercer host, y aun así no responde «¿cuándo me ven?»: es un tablero de qué se ve ahora en una sala |
Calendario de días hábiles, UTM y UF |
la API de Boostr, un tercero |
depender de un servicio ajeno para un cómputo que hoy este servidor no hace |
Detección de cambios y alertas |
acá mismo, pero guardando lo consultado |
persistir datos de terceros, o sea otro perfil bajo la Ley 21.719. Descartada el 17 de agosto de 2026 |
Cartera por identificador de abogado |
acá mismo, con el campo |
es construir el perfil de una persona, que está en los usos que el proyecto rechaza |
Ver más sentencias con una cuenta |
el mismo buscador, autenticado |
dejaría de ser consulta pública: identificarse como funcionario es otra cosa |
Jurisprudencia: qué hay mapeado y qué falta¶
El Buscador Unificado de Fallos no es una aplicación de una sola página como se creyó al principio: es PHP con Laravel y componentes Vue encima, y su búsqueda devuelve JSON de Apache Solr. Eso lo hace bastante más fácil de consumir que la consulta de causas, que entrega HTML.
Lo que el buscador no muestra, y que es el hallazgo que importa¶
Una consulta anónima recibe bastante menos de lo que hay indexado. Medido el 16 de agosto de 2026 sobre Corte Suprema, sin filtros:
Visibles para una consulta anónima |
300.005 |
Coincidencias que declara, antes de su filtro de publicación |
1.223.925 |
La propia respuesta desglosa todas las coincidencias por condición de publicación
(Excluido salud 829.079, Publicable 232.021, Anonimizadas 20.924, Reservado restringido 6.677, entre otras), y ese desglose suma el total, no la diferencia. O sea
incluye a las visibles: no dice cuáles faltan, porque el buscador no publica su regla de
visibilidad.
Lo notable es que el sitio dejó de decirlo. Los dos mensajes que avisaban de esa diferencia siguen en su JavaScript, comentados: uno agregaba «sentencias ocultas por limitaciones de visualización del perfil de usuario» y el otro decía «sus permisos de usuario no permiten la visualización de esta(s) sentencia(s)».
Esa segunda cifra no es el tamaño del índice: el Poder Judicial habla públicamente de más de un millón y medio de sentencias, y la diferencia no está explicada. Se registra como lo que es, una cifra medida en una respuesta, y no como el universo.
Por eso buscar_jurisprudencia no devuelve una lista pelada sino un resultado con ocultas y
condiciones_de_publicacion como campos. Un listado que no diga cuánto falta se lee como el universo
completo, que es el mismo defecto que el ebook de la Oficina Judicial Virtual y la razón de ser
del proyecto entero.
Lo que falta decidir¶
Texto completo: hecho, con la forma que la decisión exigía. Está en
obtener_texto_sentencia, aparte de la búsqueda y de a una sentencia por llamada. La razón es medible: una sentencia de trece páginas son 25.473 caracteres, así que devolver diez con cada búsqueda serían más de 250.000. La búsqueda entregatexto_previewy la extensión en palabras y páginas, que suele bastar para decidir si vale pedir el resto.Sobre los datos personales: la respuesta declara
anonimizadayfuente, o sea si lo entregado es la versión con los datos suprimidos por el tribunal y de cuál de los dos campos salió. Y si la sentencia existe pero está reservada, se levanta en vez de devolver un texto vacío que se leería como una sentencia sin contenido.Paginación: hecha, y el diagnóstico anterior era nuestro. Acá decía que no existe, leído de la petición:
offset_paginacioniba fijo en0, así que la coincidencia 251 era inalcanzable. Medido el 22 de agosto de 2026 contra el buscador de Corte Suprema, la plataforma sí la soporta: con desplazamiento 0, 10 y 250 devuelve tres páginas sin una sola sentencia repetida. El límite lo ponía este cliente, no el sitio.Entra
desplazamientoenbuscar_jurisprudencia, yno_entregadaspasa a contar lo que queda DESPUÉS de esta página: sin descontarlo, la segunda página declaraba como no entregado justo lo que la primera ya había traído. Pedir más allá devisiblesdevuelve una lista vacía con 200, no un error.Una cuenta. Con credenciales del Poder Judicial se verían más sentencias. Queda fuera: este proyecto consulta lo que es público sin identificarse como funcionario.
Herramientas de descubrimiento que no existen¶
Verificado el 17 de agosto de 2026, en los dos hosts:
Ruta |
|
|
|---|---|---|
|
404 |
404 |
|
404 |
500 |
|
|
404, no publica |
Cómo se mapearon los endpoints, y cuántos son, está en Qué está verificado.
La ausencia de security.txt refuerza lo que ya dice la política de seguridad: no hay canal
publicado de divulgación de vulnerabilidades, así que va directo a la Corporación
Administrativa.
Lo que se va a romper¶
No es pesimismo, es planificación:
La plataforma va a cambiar. El prefijo de rutas y el token ya se derivan en caliente por esto. Cuando cambie la estructura de tablas, el parser falla ruidosamente y hay que arreglarlo.
Pueden activar la validación del captcha. Hoy la consulta funciona sin ella. Si se activa, la cadena se cae entera y no se va a evadir: el proyecto se detiene y se busca la vía institucional.
Esto no es una hipótesis. Tras el colapso de julio de 2026, el Comité de Jueces Civiles pidió a la Corte Suprema, por escrito, «medidas tecnológicas adecuadas y urgentes para evitar el ingreso masivo de escritos (tales como el uso de un Captcha) y la extracción masiva de datos». Lo segundo nombra directamente a herramientas de esta clase.
Vale la pena decir en qué se distingue este proyecto de lo que esa frase describe: un régimen sostenido de una petición cada 5 segundos con una ráfaga acotada a 4, una causa a la vez, sin persistencia y sin barrido. No es extracción masiva por diseño, y las dos constantes del ritmo están verificadas por un job de CI. Si aun así la institución decide cerrar la consulta automatizada, la respuesta es acatar.
Puede publicarse la Política de IA del Poder Judicial. Si define algo incompatible, este proyecto se ajusta o se retira.
Cómo influir en esto¶
La hoja de ruta la mueve el uso real, no la lista de deseos del autor. Lo más útil:
Reportar un dato incorrecto (máxima prioridad de todas)
Reportar que la plataforma cambió
Pedir una competencia con una causa pública que sirva de fixture
Contar en Discusiones qué te falta para poder usarlo
Dónde se fue lo que estaba acá¶
Esta página tenía 1.159 líneas y era seis documentos. Los anclajes de abajo se conservan
porque un enlace publicado a roadmap.html#... seguiría existiendo y llevaría al inicio de la
página sin avisar, que es peor que un 404: un enlace roto se nota y uno que va al lugar
equivocado, no.
Son objetivos explícitos y no encabezados: un encabezado por cada sección movida rearmaría el
archivo que este corte vino a deshacer, y además docutils le pone un id a toda sección,
así que también hacían falta los de nivel 4.
Se fueron a Qué está verificado¶
Endpoints del buscador, mapeados y sin ejecutar
Los diez buscadores
Los dos lados del exhorto, medidos
Mapeado pero nunca ejecutado
Sin cubrir del todo
Verificado contra el sistema real
Verificado sólo contra fixtures
Se fueron a Qué más existe¶
API de Boostr
CausAlerta
Competencias
Del mismo catálogo: qué más sirve y qué se rechaza
Detección de cambios: el diseño que ya existe
El calendario de días hábiles: la pieza que falta para cerrar el círculo
El contexto gremial
El diseño de su documentación, y qué se copió
Herramientas chilenas que tocan lo mismo
Jurisprudencia: lo que queda del buscador
Las diligencias de cobranza no publican fecha
Las diligencias de cobranza viven en su propio panel
Lo que falta, medido
Los paneles del detalle que ya llegan y se tiran
Modales de la Oficina Judicial Virtual sin usar
Programación de Sala
Qué se toma de cada una
Servidores MCP jurídicos
automatizador-legalwebscrapthings
Se fueron a Cumplimiento¶
Sobre
CII-Best-PracticesSobre
Fuzzing