Guía de uso
Esta guía cubre los flujos de trabajo más comunes. Si buscas la referencia completa de comandos ve a CLI Reference.
Flujo básico: descargar normas de una institución
Section titled “Flujo básico: descargar normas de una institución”El flujo estándar para empezar a trabajar con una institución nueva:
-
Buscar la institución por nombre
Terminal window python bcn_cli.py instituciones list --search "contraloria"Ejemplo de salida:
ID Nombre---- ------------------------------------------42 Contraloría General de la República -
Ver las normas disponibles sin descargar
Terminal window python bcn_cli.py normas list 42 --limit 20 -
Sincronizar un subset inicial
Terminal window python bcn_cli.py normas sync 42 --limit 50 -
Verificar con stats
Terminal window python bcn_cli.py stats
Búsqueda full-text
Section titled “Búsqueda full-text”La búsqueda usa PostgreSQL FTS con diccionario español, lo que significa que busca por raíces de palabras, no solo texto exacto.
# Busca "ambiental", "ambientales", "medioambiente", etc.python bcn_cli.py normas search "medio ambiente"
# Limitar resultadospython bcn_cli.py normas search "decreto supremo" --limit 5Sincronización incremental
Section titled “Sincronización incremental”BCN Extractor detecta cambios automáticamente via hash MD5. Si corres sync dos veces sobre la misma institución, la segunda vez solo actualiza las normas que cambiaron:
# Primera vez: descarga todopython bcn_cli.py normas sync 42
# Segunda vez: solo actualiza lo que cambió (mucho más rápido)python bcn_cli.py normas sync 42Para forzar la re-descarga de todo aunque no haya cambios detectados:
python bcn_cli.py normas sync 42 --forceSincronizar múltiples instituciones con el Scheduler
Section titled “Sincronizar múltiples instituciones con el Scheduler”El Scheduler permite programar la sincronización automática de cualquier conjunto de instituciones como un proceso independiente en background, sin bloquear la terminal.
# Iniciar el scheduler para las instituciones 17, 42 y 1041python bcn_cli.py scheduler start --inst 17,42,1041
# Con horario específico (2:00 AM UTC, solo días de semana)python bcn_cli.py scheduler start --inst 17,42 --hora 2 --minuto 0 --dia mon-fri
# Ver estadopython bcn_cli.py scheduler status
# Ver jobs y su último resultadopython bcn_cli.py scheduler list
# Agregar una institución sin reiniciar el schedulerpython bcn_cli.py scheduler add 89 --hora 3
# Detenerpython bcn_cli.py scheduler stopLos logs se escriben en logs/scheduler.log y el estado de cada ejecución queda en la tabla scheduler_jobs.
Análisis NLP
Section titled “Análisis NLP”El pipeline NLP es una etapa opcional que corre después del sync. Extrae referencias entre normas, entidades nombradas (organismos, personas, lugares) y obligaciones con sus plazos.
Analizar una institución completa
Section titled “Analizar una institución completa”# Analizar todas las normas ya sincronizadas de una instituciónpython bcn_cli.py nlp analizar-institucion 17
# Limitar el batch para empezarpython bcn_cli.py nlp analizar-institucion 17 --limit 50
# Re-analizar normas que ya tienen análisispython bcn_cli.py nlp analizar-institucion 17 --forzarConsultar los resultados
Section titled “Consultar los resultados”# Referencias normativas que cita la norma (y su estado de resolución)python bcn_cli.py nlp referencias 206396
# Grafo inverso: quién cita a esta norma# (disponible en la TUI, tab "Citado por")
# Entidades nombradas, filtradas por tipopython bcn_cli.py nlp entidades 206396 --tipo organismo
# Obligaciones detectadaspython bcn_cli.py nlp obligaciones 206396 --con-plazoResolver referencias pendientes
Section titled “Resolver referencias pendientes”A medida que sincronizas más instituciones, las referencias que apuntaban a normas aún no descargadas se pueden vincular:
python bcn_cli.py nlp resolverVer el análisis en la TUI
Section titled “Ver el análisis en la TUI”El tab NLP de la TUI muestra el análisis completo de la norma seleccionada, organizado en cuatro sub-tabs: Referencias, Citado por, Entidades y Obligaciones. Se actualiza automáticamente al cambiar de norma en el tab principal.
Usar la REST API
Section titled “Usar la REST API”Levanta el servidor:
fastapi dev api/main.py
# o con uvicorn para producción:uvicorn api.main:app --host 0.0.0.0 --port 8000Luego puedes consultar la API directamente:
# Listar normas (paginado)curl "http://localhost:8000/normas/?limit=10&offset=0"
# Buscarcurl "http://localhost:8000/normas/buscar/medio%20ambiente"
# Norma específica (live desde BCN)curl http://localhost:8000/normas/1234567
# Normas de una institución (desde DB)curl "http://localhost:8000/instituciones/17/normas?limit=20"
# Filtrar por estadocurl "http://localhost:8000/normas/estado/vigente"
# Filtrar por rango de fechascurl "http://localhost:8000/normas/rango?start_date=2023-01-01&end_date=2023-12-31"La documentación interactiva está en http://localhost:8000/docs.
Ver los logs de operaciones
Section titled “Ver los logs de operaciones”Cada descarga y sincronización queda registrada en la tabla descargas. Puedes consultarla directo en PostgreSQL:
-- Últimas 20 operacionesSELECT id_norma, tipo_descarga, estado, fecha_intento, error_mensajeFROM descargasORDER BY fecha_intento DESCLIMIT 20;
-- Solo erroresSELECT * FROM descargasWHERE estado = 'error'ORDER BY fecha_intento DESC;O conéctate con cualquier cliente PostgreSQL (TablePlus, DBeaver, psql) usando las credenciales de tu .env.
Acceder a los archivos XML y Markdown
Section titled “Acceder a los archivos XML y Markdown”Las normas descargadas se guardan en disco además de en la base de datos:
| Tipo | Ruta |
|---|---|
| XML original | data/xml/<id_norma>.xml |
| Markdown generado | data/md/<id_norma>.md |
| Logs | data/logs/ |
| Caché | data/cache/ |
Los archivos XML son el respaldo auditable — si el parser cambia en el futuro, puedes re-procesar sin volver a descargar desde la BCN.