La mejor forma de extraer
con normativa chilena
Pipeline ELT 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: desde la extracción hasta el almacenamiento estructurado y búsqueda.
Extracción Automatizada
Descarga normas desde los servicios web de la BCN de forma eficiente y resiliente. Soporta reintentos automáticos, rate limiting configurable y caché para minimizar requests.
Almacenamiento Estructurado
PostgreSQL con esquema optimizado para normas legales. Relaciones many-to-many entre normas e instituciones, índices GIN para JSONB y full-text search en español.
Búsqueda Full-Text
Búsqueda en español sobre títulos y contenido de normas con ranking de relevancia.
REST API con FastAPI
API REST completa con Swagger UI y ReDoc integrados.
Endpoints para buscar, listar y consultar normas
programáticamente. Documentación OpenAPI autogenerada en /docs.
Deploy con Docker
PostgreSQL + aplicación Python en contenedores. Un solo docker-compose up -d y tienes todo el entorno corriendo. Volúmenes persistentes
para datos y backups XML.
docker-compose up -d && pip install -r
requirements.txt Detección de Cambios
Hash MD5 del XML para detectar normas modificadas y evitar upserts innecesarios.
Arquitectura del sistema
Pipeline ELT modular con capas claramente separadas.
BCN Client
Módulo HTTP para interactuar con los servicios web de la BCN. Gestiona autenticación, reintentos y rate limiting.
bcn_client.py XML Parser
Procesador con lxml que convierte documentos XML a Markdown y extrae metadatos estructurados.
utils/norm_parser.py Managers
Capa de abstracción para operaciones de base de datos. Gestiona normas, instituciones y tipos de normas.
managers/ PostgreSQL
Base de datos con FTS en español, índices GIN para JSONB y detección de cambios via MD5.
docker-compose.yml En marcha en minutos
Requiere Docker Desktop, Python 3.9+ y Git.
Clonar repositorio
git clone https://github.com/AlexFT257/BCNExtractor.git
cd BCNExtractor Levantar base de datos
docker-compose up -d
pip install -r requirements.txt Configurar variables de entorno
cp .env.example .env
# Editar .env con tus credenciales PostgreSQL Usar la CLI o la API
# Cargar instituciones
python institution_cli.py load data/instituciones.csv
# Sincronizar normas de una institución (id=17)
python bcn_cli.py sync 17 --limit 10
# Levantar la REST API
fastapi dev api/main.py FastAPI genera documentación automáticamente en localhost:8000/docs (Swagger UI) y localhost:8000/redoc (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é
- Rate limiting configurable
- Reintentos automáticos
- Búsqueda full-text (FTS español)
- Detección de cambios via MD5
Fase 3 — TUI v2 y CLI v2
- TUI con Textual y barra de progreso
- Lector de normas en pantalla completa
- CLI unificada con Typer y Rich
- Tests de CLI con CliRunner
Fase 4 — API v3.0
- REST API modular con FastAPI
- Paginación en todos los endpoints
- Búsqueda avanzada por fecha, tipo y estado
- Health check y CORS configurable
- Tests de integración
Fase 5 — Datos v3
- Actualización automática continua (cron)
- Actualización incremental de normas modificadas
- Soporte para versiones históricas
- Análisis de relaciones entre normas