En desarrollo activo Código abierto CC BY-NC-SA 4.0

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.

Python 3.9+ PostgreSQL 15+ FastAPI Docker lxml
git clone https://github.com/AlexFT257/BCNExtractor.git
+100
Instituciones BCN
Cache
Por defecto
FTS
Full-text search
REST
API con FastAPI

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.

HTTP Client XML Parser Retry logic

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.

GET /normas GET /normas/search GET /instituciones Swagger UI

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.

01

BCN Client

Módulo HTTP para interactuar con los servicios web de la BCN. Gestiona autenticación, reintentos y rate limiting.

bcn_client.py
02

XML Parser

Procesador con lxml que convierte documentos XML a Markdown y extrae metadatos estructurados.

utils/norm_parser.py
03

Managers

Capa de abstracción para operaciones de base de datos. Gestiona normas, instituciones y tipos de normas.

managers/
04

PostgreSQL

Base de datos con FTS en español, índices GIN para JSONB y detección de cambios via MD5.

docker-compose.yml
CLI — bcn_cli.py
TUI — bcn_tui.py
REST API — api/main.py

En marcha en minutos

Requiere Docker Desktop, Python 3.9+ y Git.

1

Clonar repositorio

git clone https://github.com/AlexFT257/BCNExtractor.git
        cd BCNExtractor
2

Levantar base de datos

docker-compose up -d
        pip install -r requirements.txt
3

Configurar variables de entorno

cp .env.example .env
        # Editar .env con tus credenciales PostgreSQL
4

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).

Roadmap

El proyecto sigue un plan de fases bien definido.

Visita el roadmap completo.
Completada

Fase 1 — MVP v1.0

  • Extracción de instituciones
  • Descarga de normas por institución
  • Almacenamiento en PostgreSQL
  • CLI básica
  • Docker setup
Completada

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
Completada

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
Completada

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
En desarrollo

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