Skip to content

CLI Reference

BCN Extractor incluye una CLI unificada en bcn_cli.py, organizada en grupos de comandos. Todos los subcomandos soportan --help.

Terminal window
python bcn_cli.py --help
python bcn_cli.py normas --help
python bcn_cli.py metadata --help
python bcn_cli.py instituciones --help
Terminal window
python bcn_cli.py --debug normas sync 17

Muestra los logs internos del cliente HTTP (requests, caché, reintentos). Sin el flag, solo se muestran warnings relevantes (como normas con ID inválido).


normas list — Listar normas de una institución

Section titled “normas list — Listar normas de una institución”
Terminal window
python bcn_cli.py normas list <id_institucion> [--limit N] [--verbose]

Lista las normas disponibles en la BCN para una institución específica. No descarga ni almacena nada, solo consulta el servicio web directamente.

ArgumentoTipoDescripción
id_institucionintID de la institución en la BCN
--limit, -nintMáximo de normas a mostrar
--output, -opathGuardar lista como JSON
--verbose, -vflagMostrar fecha de publicación
Terminal window
python bcn_cli.py normas list 17 --limit 20
python bcn_cli.py normas list 17 --output normas.json

normas get — Descargar una norma específica

Section titled “normas get — Descargar una norma específica”
Terminal window
python bcn_cli.py normas get <id> [--md PATH] [--xml PATH] [--full]

Descarga una norma específica desde la BCN.

ArgumentoTipoDescripción
idintID de la norma
--md, -mpathGuardar como Markdown en la ruta indicada
--xml, -xpathGuardar XML original en la ruta indicada
--full, -fflagDescargar texto completo (sin flag solo descarga metadatos)
Terminal window
python bcn_cli.py normas get 206396 --md salida.md
python bcn_cli.py normas get 206396 --full --xml backup.xml

normas sync — Sincronizar normas a la base de datos

Section titled “normas sync — Sincronizar normas a la base de datos”
Terminal window
python bcn_cli.py normas sync <id_institucion> [--limit N] [--force]

Descarga las normas de una institución y las sincroniza en PostgreSQL. Detecta cambios via hash MD5 para evitar upserts innecesarios. Cada vez que una norma cambia, la versión anterior queda archivada automáticamente en normas_versiones.

ArgumentoTipoDescripción
id_institucionintID de la institución
--limit, -nintMáximo de normas a procesar
--forceflagForzar re-descarga aunque no haya cambios
Terminal window
# Sincronizar las primeras 10 normas
python bcn_cli.py normas sync 17 --limit 10
# Forzar re-descarga completa
python bcn_cli.py normas sync 17 --force

Terminal window
python bcn_cli.py normas search "<query>" [--limit N]

Búsqueda full-text en español sobre los títulos y contenido de las normas almacenadas localmente.

ArgumentoTipoDescripción
querystrTexto a buscar
--limit, -nintMáximo de resultados (default: 20)
Terminal window
python bcn_cli.py normas search "medio ambiente"
python bcn_cli.py normas search "decreto supremo" --limit 5

normas metadata — Ver metadata de una norma

Section titled “normas metadata — Ver metadata de una norma”
Terminal window
python bcn_cli.py normas metadata <id>

Muestra la metadata estructurada de una norma específica: materias, organismos y flags como derogado o es_tratado. La metadata se almacena en la tabla EAV normas_metadata y se pobla automáticamente durante el sync.

ArgumentoTipoDescripción
idintID de la norma
Terminal window
python bcn_cli.py normas metadata 206396

normas by-metadata — Buscar normas por clave de metadata

Section titled “normas by-metadata — Buscar normas por clave de metadata”
Terminal window
python bcn_cli.py normas by-metadata <clave> <valor> [--limit N] [--offset N]

Filtra normas por una clave y valor de metadata. Usa los índices de normas_metadata para búsquedas eficientes.

ArgumentoTipoDescripción
clavestrClave de metadata (ej: materia, organismo)
valorstrValor a buscar (búsqueda parcial)
--limit, -nintMáximo de resultados (default: 20)
--offsetintDesplazamiento para paginación (default: 0)
Terminal window
python bcn_cli.py normas by-metadata materia "medio ambiente"
python bcn_cli.py normas by-metadata organismo "ministerio de salud" --limit 10
python bcn_cli.py normas by-metadata materia "transporte" --limit 20 --offset 20

metadata claves — Listar claves disponibles

Section titled “metadata claves — Listar claves disponibles”
Terminal window
python bcn_cli.py metadata claves

Lista todas las claves de metadata registradas en normas_metadata. Útil para saber qué valores puedes usar con normas by-metadata.

Terminal window
python bcn_cli.py metadata claves

metadata stats — Estadísticas de metadata

Section titled “metadata stats — Estadísticas de metadata”
Terminal window
python bcn_cli.py metadata stats

Muestra el total de entradas en normas_metadata, cuántas normas tienen metadata registrada, y el desglose por clave.

Terminal window
python bcn_cli.py metadata stats

instituciones — Gestión de instituciones

Section titled “instituciones — Gestión de instituciones”

instituciones list — Listar instituciones

Section titled “instituciones list — Listar instituciones”
Terminal window
python bcn_cli.py instituciones list [--search TEXTO] [--limit N]
ArgumentoTipoDescripción
--search, -sstrFiltrar por nombre
--limit, -nintMáximo de resultados
Terminal window
python bcn_cli.py instituciones list
python bcn_cli.py instituciones list --search "ministerio"

instituciones get — Ver detalle de una institución

Section titled “instituciones get — Ver detalle de una institución”
Terminal window
python bcn_cli.py instituciones get <id>
Terminal window
python bcn_cli.py instituciones get 1041

Terminal window
python bcn_cli.py instituciones load <archivo.csv> [--mode update|append|replace]

Carga un CSV con instituciones en la base de datos. El repositorio incluye data/instituciones.csv con las 700+ instituciones de la BCN.

ArgumentoTipoDescripción
csv_pathpathRuta al archivo CSV
--mode, -mstrModo de carga: update (default), append, replace
Terminal window
python bcn_cli.py instituciones load data/instituciones.csv
python bcn_cli.py instituciones load data/instituciones.csv --mode replace

Terminal window
python bcn_cli.py init [--csv PATH]

Inicializa el esquema de la base de datos (incluyendo las tablas normas_metadata y normas_versiones) y carga instituciones desde el CSV incluido.

Terminal window
python bcn_cli.py init
python bcn_cli.py init --csv data/instituciones.csv

Terminal window
python bcn_cli.py stats [--errors]

Muestra un resumen del estado de la base de datos: normas por tipo y estado, instituciones, operaciones recientes y versiones archivadas.

ArgumentoTipoDescripción
--errors, -eflagIncluir errores recientes en el output
Terminal window
python bcn_cli.py stats
python bcn_cli.py stats --errors

cache stats / cache clear — Gestionar caché

Section titled “cache stats / cache clear — Gestionar caché”
Terminal window
python bcn_cli.py cache stats
python bcn_cli.py cache clear [--force]
Terminal window
# Ver info del caché
python bcn_cli.py cache stats
# Limpiar (pide confirmación)
python bcn_cli.py cache clear
# Limpiar sin confirmación
python bcn_cli.py cache clear --force

El grupo nlp ejecuta el pipeline de análisis sobre normas ya sincronizadas. Usa el XML en caché, por lo que no genera tráfico adicional a la BCN. Todos los resultados se almacenan en las tablas normas_referencias, normas_entidades y normas_obligaciones.

Terminal window
python bcn_cli.py nlp --help

Terminal window
python bcn_cli.py nlp analizar <id> [--forzar] [--llm]

Extrae referencias normativas, entidades nombradas y obligaciones de una norma específica.

ArgumentoTipoDescripción
idintID de la norma a analizar
--forzar, -fflagRe-analizar aunque ya exista análisis previo
--llmflagUsar Ollama/gemma4 para NER en lugar del modelo estadístico (experimental)
Terminal window
python bcn_cli.py nlp analizar 206396
python bcn_cli.py nlp analizar 206396 --forzar
python bcn_cli.py nlp analizar 206396 --llm

nlp analizar-institucion — Analizar en batch

Section titled “nlp analizar-institucion — Analizar en batch”
Terminal window
python bcn_cli.py nlp analizar-institucion <id_institucion> [--limit N] [--forzar] [--llm]

Analiza todas las normas sincronizadas de una institución. Las que ya tienen análisis se saltan automáticamente a menos que se use --forzar.

ArgumentoTipoDescripción
id_institucionintID de la institución
--limit, -nintMáximo de normas a procesar
--forzar, -fflagRe-analizar normas que ya tienen análisis
--llmflagUsar Ollama/gemma4 para NER en todo el batch (experimental)
Terminal window
python bcn_cli.py nlp analizar-institucion 17
python bcn_cli.py nlp analizar-institucion 17 --limit 50
python bcn_cli.py nlp analizar-institucion 17 --forzar

nlp resolver — Resolver referencias pendientes

Section titled “nlp resolver — Resolver referencias pendientes”
Terminal window
python bcn_cli.py nlp resolver [id]

Intenta vincular referencias normativas marcadas como no resueltas (resolvida = false) contra las normas disponibles en la base de datos local. Las referencias que apuntan a normas de instituciones aún no sincronizadas quedan pendientes hasta que se sincronicen.

ArgumentoTipoDescripción
idint(Opcional) ID de norma específica. Sin argumento, procesa todas las pendientes.
Terminal window
# Resolver todas las pendientes
python bcn_cli.py nlp resolver
# Resolver solo las de una norma
python bcn_cli.py nlp resolver 206396

nlp referencias — Ver referencias extraídas

Section titled “nlp referencias — Ver referencias extraídas”
Terminal window
python bcn_cli.py nlp referencias <id> [--resueltas]

Muestra las referencias normativas salientes de una norma: qué otras leyes o decretos cita, con tipo, número, año, organismo y si la norma referenciada existe en la DB local.

ArgumentoTipoDescripción
idintID de la norma
--resueltas, -rflagMostrar solo las referencias resueltas contra la DB
Terminal window
python bcn_cli.py nlp referencias 206396
python bcn_cli.py nlp referencias 206396 --resueltas

Terminal window
python bcn_cli.py nlp entidades <id> [--tipo TIPO]

Lista las entidades nombradas detectadas por el modelo NER, agrupadas y deduplicadas por (texto, tipo). Ordenadas por frecuencia de mención.

ArgumentoTipoDescripción
idintID de la norma
--tipo, -tstrFiltrar por tipo: organismo, persona, lugar, fecha
Terminal window
python bcn_cli.py nlp entidades 206396
python bcn_cli.py nlp entidades 206396 --tipo organismo
python bcn_cli.py nlp entidades 206396 --tipo persona

nlp obligaciones — Ver obligaciones y plazos

Section titled “nlp obligaciones — Ver obligaciones y plazos”
Terminal window
python bcn_cli.py nlp obligaciones <id> [--con-plazo]

Muestra las oraciones con verbos de obligación o permisión detectadas en la norma (deberá, podrá, se prohíbe, etc.), con el sujeto gramatical y el plazo cuando están presentes.

ArgumentoTipoDescripción
idintID de la norma
--con-plazo, -pflagMostrar solo obligaciones que tienen plazo detectado
Terminal window
python bcn_cli.py nlp obligaciones 206396
python bcn_cli.py nlp obligaciones 206396 --con-plazo

Terminal window
python bcn_cli.py nlp eliminar <id> [--solo TABLA] [--si]

Elimina el análisis NLP de una norma, de forma completa o parcial por tabla. Muestra un resumen de cuántas filas se borrarán y pide confirmación antes de proceder.

ArgumentoTipoDescripción
idintID de la norma
--solo, -sstrTabla a borrar: referencias, entidades, obligaciones. Se puede repetir. Sin este flag se borra el análisis completo.
--si, -yflagConfirmar automáticamente sin preguntar
Terminal window
# Borrar análisis completo (pide confirmación)
python bcn_cli.py nlp eliminar 206396
# Borrar solo entidades
python bcn_cli.py nlp eliminar 206396 --solo entidades
# Borrar entidades y referencias a la vez
python bcn_cli.py nlp eliminar 206396 --solo entidades --solo referencias
# Sin confirmación interactiva
python bcn_cli.py nlp eliminar 206396 --si

Terminal window
python bcn_cli.py nlp stats

Muestra el total de normas analizadas, referencias extraídas (resueltas vs pendientes), entidades y obligaciones registradas en la base de datos.


Además de la CLI, puedes levantar la API REST:

Terminal window
fastapi dev api/main.py

La documentación interactiva estará disponible en:

  • Swagger UI: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc

Ver la referencia completa de la API para el detalle de los endpoints.