Lex MX: las 316 leyes federales mexicanas en Markdown, actualizadas solas
El derecho federal mexicano vive como 316 PDFs en el sitio de la Cámara de Diputados. Cambian cuando una ley se reforma, sin previo aviso. Yo quería tener todas esas leyes como un corpus en Markdown — versionado, diffable, citable — y que se quedara al día por su cuenta. No un scrape de un día que se pudre a la semana.
El enfoque ingenuo es obvio: descargas todos los PDFs, los pasas por pdftotext, escribes Markdown, commit, lo corres en un cron. Funciona una vez y después se envenena: cada corrida diaria reescribe los 316 archivos, así que cada commit toca todo el repo. El historial se vuelve inútil — no puedes ver qué ley cambió y nadie tiene señal de qué textos están frescos.
La decisión que arregló esto vino de leer bien la fuente. La tabla del índice de la Cámara ya publica una "última reforma" con fecha (DOF dd/mm/aaaa) por ley. Esa fecha es toda la señal de cambio que necesito. No hace falta diffear texto ni hashear PDFs. El scraper genera un catalog.json con esa fecha por ley, y el builder mantiene un state.json mapeando cada ley a la fecha desde la que se construyó. Si la fecha no cambió y el .md existe, se salta. Sólo se reprocesa lo que realmente se reformó.
El efecto compuesto es lo importante: los commits quedan atómicos — una ley, una reforma, un commit — y el historial de git se lee como un changelog legislativo, no como ruido. Un GitHub Action lo corre diario. En régimen, no hace casi nada y no commitea nada. Cuando se reforma una ley, cambia exactamente un archivo.
Lo hice público bajo mi nombre real, con licencia abierta, en github.com/ingteranalvarez/lex-mx. No es una herramienta para abogados — es infraestructura para quien quiera trabajar con leyes mexicanas como texto: búsquedas, citas, RAG, lo que sea. No la cobré, y no me arrepiento. Lo más útil que he construido este año son sistemas que corren solos.
Si te interesa el código, todo está abierto: el scraper del índice, el builder con la limpieza de cabeceras de pdftotext, el workflow del Action. Si lo usas para algo, escríbeme.
¿Tienes comentarios o quieres continuar la conversación? Escríbeme.