La mejor forma de trabajar
con normativa chilena
Pipeline ELT completo para descargar, procesar y almacenar normas legales chilenas desde los servicios web de la Biblioteca del Congreso Nacional. Pensado para investigadores, desarrolladores y organizaciones.
git clone https://github.com/AlexFT257/BCNExtractor.git Todo lo que necesitas
BCN Extractor cubre el pipeline completo: extracción, parseo XML, almacenamiento estructurado, versionado histórico y múltiples interfaces de uso.
Extracción Automatizada
Descarga normas desde los servicios web de la BCN de forma eficiente y resiliente. Incluye reintentos automáticos, rate limiting configurable, caché local para minimizar requests y detección de cambios via hash MD5 para evitar upserts innecesarios.
Almacenamiento Estructurado
PostgreSQL con FTS en español, índices GIN y tabla EAV de metadata (normas_metadata) con claves como materia, organismo y derogado.
Búsqueda Full-Text
Búsqueda en español sobre títulos y contenido de normas con ranking de relevancia. Búsqueda por clave de metadata (materia, organismo, derogado).
TUI Interactiva
Interfaz de terminal con Textual: navegación de normas, sync con barra de progreso, lector a pantalla completa y dashboard con estadísticas en tiempo real.
Scheduler Automático
Proceso independiente cross-platform para sincronización programada de instituciones. Configurable por hora, minuto, día de la semana y gap entre instituciones.
scheduler_jobs logs/scheduler.log Versionado Histórico Auditable
Cada vez que el sync detecta que el XML de una norma cambió (hash MD5 distinto), archiva el estado anterior en normas_versiones antes de sobreescribir. Permite auditar el contenido histórico de cualquier ley — los archivos anteriores se guardan como {id}_v{n}.xml.
Deploy con Docker
PostgreSQL + Python en contenedores. Credenciales del .env.example funcionan sin modificar en desarrollo local.
docker-compose up -d && pip install -r requirements.txt REST API con FastAPI
API REST modular con Swagger UI y ReDoc integrados. Endpoints para buscar, listar, filtrar por fecha/tipo/estado y consultar normas programáticamente. Paginación en todos los endpoints, CORS configurable y health check.
Análisis NLP de Normas
Pipeline NLP opcional que corre sobre el XML ya cacheado, sin tráfico adicional a la BCN. Extrae referencias normativas entre leyes, entidades nombradas (organismos, personas, lugares) y oraciones de obligación con su sujeto y plazo. Incluye un grafo inverso: dado cualquier decreto, muestra qué otras normas lo citan.
Detecta y vincula citas entre normas via EntityRuler. Las no resueltas se completan de forma diferida a medida que crecen las instituciones sincronizadas.
Entidades nombradas con es_core_news_lg (o Ollama/gemma4 en modo LLM). Obligaciones y plazos extraídos del árbol sintáctico de dependencias.
Análisis individual o en batch por institución. Borrado parcial o completo con nlp eliminar por tabla: referencias, entidades, obligaciones.
Arquitectura del sistema
Pipeline ELT modular con capas claramente separadas y múltiples interfaces de acceso.
BCN Client
HTTP, caché, reintentos automáticos y rate limiting configurable.
bcn_client.py XML Parser
lxml — extrae metadata, convierte a Markdown y detecta cambios via MD5.
utils/norm_parser.py Managers
Normas, Metadata EAV, Instituciones, Tipos, Versiones, Schedules y NLPManager.
managers/ PostgreSQL
FTS en español, índices GIN, tabla EAV de metadata y versionado histórico.
docker-compose.yml NLP Analyzer
Referencias, NER, obligaciones y grafo inverso — sobre el XML cacheado.
utils/nlp.py En marcha en minutos
Requiere Docker Desktop (o Docker Engine + Compose), Python 3.9+ y Git.
Clonar repositorio
git clone https://github.com/AlexFT257/BCNExtractor.git
cd BCNExtractor Configurar y levantar
cp .env.example .env
docker-compose up -d
pip install -r requirements.txt Inicializar base de datos
# Crea tablas y carga instituciones desde CSV
python bcn_cli.py init Sincronizar y explorar
# TUI interactiva
python bcn_tui.py
# O via CLI directamente
python bcn_cli.py normas sync 17 --limit 50
fastapi dev api/main.py
Las credenciales del .env.example coinciden
con el docker-compose.yml, por lo
que el proyecto funciona sin editar el .env en desarrollo local. FastAPI genera documentación en
localhost:8000/docs
y
localhost:8000/redoc.
Fase 1 — MVP v1.0
- ✓Extracción de instituciones
- ✓Descarga de normas por institución
- ✓Almacenamiento en PostgreSQL
- ✓CLI básica + Docker setup
Fase 2 — Optimización v1.1
- ✓Sistema de caché local
- ✓Rate limiting configurable
- ✓Reintentos automáticos
- ✓FTS español + detección MD5
Fase 3 — TUI v2 y CLI v2
- ✓TUI con Textual + progreso
- ✓Lector de normas a pantalla completa
- ✓CLI unificada con Typer y Rich
- ✓Tests de CLI con CliRunner
Fase 4 — API + Datos v3
- ✓REST API modular con FastAPI
- ✓Scheduler cross-platform
- ✓Metadata EAV + versionado histórico
- ✓Tests de integración
Fase 5 — Análisis NLP
- ✓Referencias normativas entre leyes
- ✓NER: organismos, personas, lugares
- ✓Obligaciones y plazos sintácticos
- ✓Grafo inverso + modo LLM (experimental)