Skip to content

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:

  1. Buscar la institución por nombre

    Terminal window
    python institution_cli.py list --search "contraloria"

    Ejemplo de salida:

    ID Nombre
    ---- ------------------------------------------
    42 Contraloría General de la República
  2. Ver las normas disponibles sin descargar

    Terminal window
    python bcn_cli.py list 42 --limit 20
  3. Sincronizar un subset inicial

    Terminal window
    python bcn_cli.py sync 42 --limit 50
  4. Verificar con stats

    Terminal window
    python bcn_cli.py stats

La búsqueda usa PostgreSQL FTS con diccionario español, lo que significa que busca por raíces de palabras, no solo texto exacto.

Terminal window
# Busca "ambiental", "ambientales", "medioambiente", etc.
python bcn_cli.py search "medio ambiente"
# Limitar resultados
python bcn_cli.py search "decreto supremo" --limit 5
# Filtrar por institución específica
python bcn_cli.py search "salud pública" --institucion 17

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:

Terminal window
# Primera vez: descarga todo
python bcn_cli.py sync 42
# Segunda vez: solo actualiza lo que cambió (mucho más rápido)
python bcn_cli.py sync 42

Para forzar la re-descarga de todo aunque no haya cambios detectados:

Terminal window
python bcn_cli.py sync 42 --force

Por ahora no hay un comando batch nativo, pero puedes usar un script de shell:

Terminal window
# Sincronizar varias instituciones en secuencia
for id in 17 42 89 134; do
echo "Sincronizando institución $id..."
python bcn_cli.py sync $id
done

Levanta el servidor:

Terminal window
fastapi dev api/main.py
# o con uvicorn para producción:
uvicorn api.main:app --host 0.0.0.0 --port 8000

Luego puedes consultar la API directamente:

Terminal window
# Listar normas (paginado)
curl "http://localhost:8000/normas/?limit=10&offset=0"
# Buscar
curl "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 estado
curl "http://localhost:8000/normas/estado/vigente"
# Filtrar por rango de fechas
curl "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.

Cada descarga y sincronización queda registrada en la tabla descargas. Puedes consultarla directo en PostgreSQL:

-- Últimas 20 operaciones
SELECT id_norma, tipo_descarga, estado, fecha_intento, error_mensaje
FROM descargas
ORDER BY fecha_intento DESC
LIMIT 20;
-- Solo errores
SELECT * FROM descargas
WHERE estado = 'error'
ORDER BY fecha_intento DESC;

O conéctate con cualquier cliente PostgreSQL (TablePlus, DBeaver, psql) usando las credenciales de tu .env.

Las normas descargadas se guardan en disco además de en la base de datos:

TipoRuta
XML originaldata/xml/<id_norma>.xml
Markdown generadodata/md/<id_norma>.md
Logsdata/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.