API de la BCN
BCN Extractor consume los servicios web públicos de la Biblioteca del Congreso Nacional de Chile (BCN). Esta página documenta cómo funcionan esos servicios para entender qué hace el extractor bajo el capó.
Servicio de normas por institución
Section titled “Servicio de normas por institución”El endpoint principal que usa BCN Extractor para obtener las normas de una institución:
GET https://www.bcn.cl/leychile/navegar?i={id_norma}&f=XMLEste servicio retorna el texto completo de una norma en formato XML.
Servicio de listado por institución
Section titled “Servicio de listado por institución”Para obtener qué normas tiene una institución:
GET https://www.bcn.cl/leychile/buscar?tipo_norma=&num_norma=&fecha_desde=&fecha_hasta=&id_organismo={id}&texto=&nro_boletin=&estado_dt=&promulgado=&exp_proy=&tipobusqueda=norm&sort_by=date_rank&asc_desc=descEl parámetro clave es id_organismo que corresponde al ID de la institución.
Estructura del XML de respuesta
Section titled “Estructura del XML de respuesta”Un documento XML típico de la BCN tiene esta estructura:
<?xml version="1.0" encoding="UTF-8"?><norma> <metadatos> <id>1234567</id> <tipo_norma> <nombre>Decreto Supremo</nombre> <abreviatura>DS</abreviatura> </tipo_norma> <numero>42</numero> <titulo>Decreto que aprueba reglamento...</titulo> <estado>Vigente</estado> <fecha_publicacion>15-MAY-2023</fecha_publicacion> <fecha_promulgacion>20-ABR-2023</fecha_promulgacion> <organismo>Ministerio de Salud</organismo> <materias> <materia>Salud pública</materia> <materia>Reglamentos</materia> </materias> </metadatos> <articulos> <articulo numero="1"> <texto>Apruébase el siguiente reglamento...</texto> </articulo> <!-- ... --> </articulos></norma>Qué hace el parser con el XML
Section titled “Qué hace el parser con el XML”El utils/norm_parser.py extrae de ese XML:
| Campo XML | Campo en DB | Descripción |
|---|---|---|
metadatos/id | normas.id | ID único de la norma |
metadatos/tipo_norma/nombre | tipos_normas.nombre | Tipo de norma |
metadatos/numero | normas.numero | Número de la norma |
metadatos/titulo | normas.titulo | Título completo |
metadatos/estado | normas.estado | vigente o derogada |
metadatos/fecha_publicacion | normas.fecha_publicacion | Fecha de publicación |
metadatos/organismo | normas.organismo | Organismo emisor |
metadatos/materias | normas.metadata_json | Lista de materias en JSONB |
articulos/* | normas.contenido_texto | Texto completo convertido a Markdown |
Rate limiting
Section titled “Rate limiting”La BCN no publica límites oficiales de su API, pero BCN Extractor implementa rate limiting conservador por defecto (BCN_RATE_LIMIT=1.0 segundo entre requests) para ser un buen ciudadano y evitar sobrecargar el servicio.
# En .env — ajustar con cuidadoBCN_RATE_LIMIT=1.0 # segundos entre requestsBCN_MAX_RETRIES=3 # reintentos en caso de errorSchema XML de la BCN
Section titled “Schema XML de la BCN”El repositorio incluye el schema XSD del XML de la BCN en data/bcn_schema.xml para referencia. También hay ejemplos de respuesta reales en data/sample/.