Статистический бюллетень Банка России (cbr.ru/statistics/bbs)
| Признак | Значение |
|---|---|
| Уровень и охват | Федеральный; официальные PDF-выпуски Банка России — сводные таблицы и обзоры по статистике регулятора и банковскому сектору; часть разделов и показателей полезна в связке с темой государственных финансов (рынок госдолга, макро- и денежно-кредитный контекст), без замены казначейского исполнения по КБК |
| Тип доступа | Файловый контур на HTML-каталоге выпусков: переход по году и номеру, скачивание PDF; отдельный блок — архив электронной версии «Бюллетеня банковской статистики. Регионального приложения» (PDF по годам до остановки отдельной квартальной линейки) |
| Основные форматы | PDF (основной носитель таблиц), HTML (оглавление и навигация по годам/номерам) |
| Оператор | Банк России |
| Режим доступа | Открытый для публичных материалов раздела |
Коротко: каталог PDF-выпусков на cbr.ru/statistics/bbs/ — «Статистический бюллетень Банка России» по календарю выпусков и архив «Бюллетеня банковской статистики. Регионального приложения»; удобен для офлайн-разбора таблиц и исторических рядов в форме печатного бюллетеня, а не как замена машиночитаемой базы показателей или открытых данных Минфина России.
Описание
Карточка описывает раздел Статистический бюллетень Банка России (/statistics/bbs/): навигация по годам и номерам выпусков «Статистического бюллетеня Банка России» со ссылками на PDF; ниже на той же странице — блок «Электронная версия „Бюллетеня банковской статистики. Регионального приложения“» с PDF по архивным годам.
По пояснению Банка России на странице раздела: с 2011 года издание «Бюллетень банковской статистики» дополнено региональным разделом, материалы которого обновляются ежемесячно; публикация ежеквартального издания «Бюллетень банковской статистики. Региональное приложение» прекращена (отдельная линейка PDF в архиве отражает прошлые выпуски).
В объём карточки не входят внутренние отчётные кабинеты кредитных организаций и закрытые контуры надзора.
Оператор
Банк России — каноническая витрина: https://cbr.ru/statistics/bbs/
- Карточка ИС: Сайт Банка России — портал-оператор; актуальность навигации по выпускам и дата обновления страницы — в подвале HTML-страницы раздела (при проверке 18.07.2026 указано обновление 14.07.2026).
URL и точки доступа
| Тип доступа | URL | Формат |
|---|---|---|
| Каталог выпусков (оглавление по годам и номерам) | https://cbr.ru/statistics/bbs/ | HTML со ссылками на PDF |
Официальный fallback каталога при HTTP 403 CDN | https://www.cbr.ru/statistics/bbs/ | Тот же HTML-каталог; PDF по выбранному году и номеру выпуска |
Прямые URL отдельных PDF нельзя хардкодить: числовой <id> в пути /Collection/Collection/File/<id>/...pdf меняется от выпуска к выпуску. На 18.07.2026 HTML-каталог показывает выпуск № 6 за 2026 год, опубликованный 14.07.2026, но его путь следует каждый раз получать из ссылки каталога, а не строить из номера или имени файла.
Структура файлов и состав данных
Ниже зафиксирована проверяемая редакция на 18.07.2026, а не обещание неизменности серии. HTML-каталог https://cbr.ru/statistics/bbs/ содержит все годы основного издания в разметке div.versions_items: атрибут data-versions-items хранит год, текст ссылки — номер, data-tooltip-content — дату публикации, а href — фактический PDF. В среде проверки основной домен иногда возвращал HTTP 403 от CDN; тот же официальный каталог по https://www.cbr.ru/statistics/bbs/ вернул тот же HTML. Пайплайну следует начать с канонического URL и явно обработать такой ответ, а не угадывать путь к файлу.
Проверенная основная редакция
- Выпуск: «Статистический бюллетень Банка России» № 6 (397), 2026, опубликован 14.07.2026. Номер и дата взяты из ссылки HTML-каталога; на титульных страницах PDF указаны № 6 (397) и 2026 год.
- PDF из ссылки каталога:
Bbs0626r.pdf; фактический URL при проверке содержал<id>62113(это не стабильный идентификатор для следующего номера). - HTTP:
Content-Type: application/pdf,Last-Modified: Tue, 14 Jul 2026 14:03:34 GMT,ETag: W/"00026120". - Файл: 1 637 909 байт,
SHA-2567be483d296388b72a0549393ac2a70741e10d05371b1a3ecd74f3d866508fca7, 252 страницы (A4, PDF 1.6). - Текстовый слой: есть.
pdfplumberизвлёк 53 символа с титульной страницы, 7 771 символ из первой страницы оглавления и таблицу 1.2 на PDF-странице 9 как матрицу 19 × 10 без OCR. Наличие текстового слоя не отменяет координатный разбор: иерархия строк, объединённые заголовки и сноски не превращаются автоматически в плоские поля.
Архивная отдельная линейка: «Региональное приложение»
Ниже основного каталога есть архив «Бюллетеня банковской статистики. Регионального приложения»: годы 2001–2010; для выбранного 2010 года доступны № 1–4. Страница ЦБ прямо сообщает, что отдельная ежеквартальная публикация прекращена, а с 2011 года региональный раздел включён в основное издание и его материалы обновляются ежемесячно. Это не текущая серия и не отдельный API.
Для воспроизводимой фиксации отдельно проверен последний показанный в каталоге выпуск этой архивной ветки — № 4 (40), 2010 (Bbsq1004r.pdf, ссылка HTML с <id> 7757): 924 090 байт, Last-Modified: Tue, 02 Nov 2021 09:42:41 GMT, SHA-256 63d83b4b07b5f1783fac48d8bc03784e978a1466a1b55effcc8946ee08982d83, 79 страниц, PDF 1.5. Текстовый слой присутствует, но в первой строке извлечения видна некорректная кодировка части кириллицы; для этой исторической ветки особенно нужны визуальная сверка и сохранение raw-текста.
Оглавление проверенного выпуска
Разделы идут в следующем порядке (оглавление — PDF-страницы 3–5, печатные страницы 1–3):
- Основные макроэкономические и денежно-кредитные показатели.
- Баланс Банка России. Инструменты денежно-кредитной политики.
- Финансовые рынки.
- Отдельные показатели деятельности финансовых организаций.
- Отдельные показатели, характеризующие состояние платежной системы Российской Федерации.
- Региональный раздел.
- Методологические комментарии к таблицам.
Для макро- и долгового контекста особенно полезен раздел 1. В нём есть платёжный баланс, внешний долг, международная инвестиционная позиция, внешняя торговля, международные резервы, денежные агрегаты и обзоры секторов. Таблицы 1.2–1.4 дают квартальные снимки на даты 01.01, 01.04, 01.07, 01.10 в млн долл. США: секторы, валюта, срок погашения и финансовый инструмент. В частности, таблица 1.2 содержит строки ОФЗ в иностранной и в российских рублях; это внешний долг в части обязательств перед нерезидентами, а не полный реестр выпусков ОФЗ и не кассовая статистика бюджета.
Из раздела 4 к тематике госфинансов относится таблица 4.2.1: ежемесячные остатки бюджетных средств на счетах в кредитных организациях в млн руб. с разрезом федерального бюджета, бюджетов субъектов и местных бюджетов, прочих бюджетных средств и внебюджетных фондов. В проверенном выпуске приведены 2025 год и январь–июнь 2026 года. Это баланс на дату, включая данные ВЭБ.РФ, а не исполнение бюджета за период.
Остальные разделы намеренно не следует выдавать за госфинансовый источник:
- Раздел 2 — баланс и операции Банка России, ключевая ставка, резервы, ликвидность и аукционы; это денежно-кредитная политика.
- Раздел 3 — межбанковские ставки и обороты, курсы валют, драгоценные металлы, биржевые торги и рынок акций; это рыночная, а не бюджетная статистика.
- Разделы 4–6 также содержат банковские, страховые, пенсионные, платёжные и региональные показатели; они полезны для финансового контекста, но не дают бюджетных строк по классификаторам.
Ключевые таблицы как объекты данных
| Таблица | Где в PDF и что является записью | Поля после извлечения | Период, единица и важное ограничение |
|---|---|---|---|
| 1.2 «Внешний долг Российской Федерации» | PDF-страницы 9–10 (печатные 7–8); первая страница даёт 19 × 10 ячеек, продолжение — 11 × 10. Одна логическая строка — показатель внутри иерархии «сектор → подcектор → инструмент/валюта»; один столбец — дата. | table_code (str), pdf_page/source_row (int), indicator_raw (str), period_raw (str), period (Timestamp), value_mln_usd (float64), value_raw (str). | Квартальные даты от 01.01.2024 до 01.01.2026, млн долл. США. Иерархия напечатана отступами: подпись ОФЗ встречается дважды, а смысл задаёт родитель — ценные бумаги в иностранной или в российских рублях. Не делайте indicator_raw ключом. Государственные бумаги отражены только в части задолженности перед нерезидентами и по номинальной стоимости. |
| 1.4 «Внешний долг Российской Федерации по срокам погашения и финансовым инструментам» | PDF-страницы 13–14 (печатные 11–12); основной срез — сектор, затем кратко-/долгосрочные обязательства и инструмент (долговые ценные бумаги, ссуды/займы и депозиты, прочие обязательства). | Те же технические поля; дополнительно после реконструкции отступов полезны sector, maturity, instrument (str). До реконструкции не удаляйте indicator_raw, source_row и координату x0 первого слова строки. | Те же квартальные даты и млн долл. США. Визуальная группировка не хранится в отдельной колонке PDF; продолжение таблицы содержит другие секторы и прямые инвестиции в долговые инструменты. |
| 4.2.1 «Остатки бюджетных средств на счетах, открытых в кредитных организациях…» | PDF-страница 103 (печатная 101), одна таблица 23 × 6. Запись — дата внутри группы года; строки 2025 год и 2026 год — заголовки, а не наблюдения. | period_raw (str), period (Timestamp), total_mln_rub, federal_budget_mln_rub, regional_local_budget_mln_rub, other_budget_mln_rub, extra_budget_funds_mln_rub (float64). | Месячные остатки на 01.MM, млн руб.. Год является отдельной объединённой строкой, поэтому 01.01 нельзя преобразовать в дату без состояния текущей группы года. Возможны расхождения суммы и частей из-за округления. |
Для всех трёх таблиц сначала сохраняйте raw-слой: страницу, номер строки, исходную подпись, координаты слов/ячеек, сноски и исходное значение. Затем создавайте нормализованный длинный слой. Вёрстка использует объединённые ячейки, переносы внутри подписи и символы —, –, …; звёздочка в названии таблицы отсылает к стандарту распространения данных МВФ, а не является частью имени показателя. Единого API или официального идентификатора строки таблицы нет.
Связи с другими наборами. С статистикой Банка России можно сопоставлять только через нормализованный период, название/смысл показателя, единицу и сверку методологии: PDF-бюллетень — печатный снимок, а страница статистики — машиночитаемые ряды и API. С Казначейством: статистикой государственных финансов РФ и открытыми данными Минфина России возможна аналитическая стыковка по дате и согласованному макропоказателю: например, внешнему долгу или агрегату федерального бюджета. Прямого строкового join нет: в бюллетене отсутствуют КБК, ОКТМО, ИНН, номера документов и операции исполнения. Не приравнивайте остатки средств в банках к кассовому исполнению и не выводите из внешнего долга состав бюджетных обязательств.
Объекты данных и показатели
- Выпуск бюллетеня — логическая единица: год, номер, PDF с набором таблиц (структура разделов задаётся редакцией ЦБ и меняется по темам выпуска).
- Таблица в PDF — как правило период (месяц, квартал, год), показатель, разбивка (сектор, инструмент, регион — в зависимости от выпуска); для сопоставления с бюджетом нужны координатное извлечение, ручная проверка и сверка методики с статистикой государственных финансов Казначейства, а не автоматическое сопоставление строк.
- Региональное приложение (архив) — исторические PDF региональных срезов банковской статистики; не путать с единой моделью КБК и отчётностью учреждений.
Пробелы: нет единого API по строкам таблиц; дублирование части показателей возможно в базе показателей и выгрузках статистики — для автоматизации рядов предпочтительнее машиночитаемые каналы.
Периодичность обновления
- «Статистический бюллетень Банка России» — выход номеров по календарю регулятора (типично ежемесячная серия с № 1–12 в полном году; фактический список номеров на текущий год см. на странице каталога).
- Региональный раздел в логике издания «Бюллетень банковской статистики» — по тексту на странице ЦБ: ежемесячное обновление материалов с 2011 года; отдельная ежеквартальная PDF-линейка «Региональное приложение» не издаётся (архив на странице — прошлые выпуски).
Ограничения и особенности
- Формат: основная ценность — PDF; пайплайны требуют извлечения таблиц; верстка и объединение ячеек могут усложнять парсинг.
- Содержание: акцент на статистике ЦБ и банковского сектора; блоки, близкие к госфинансам, нужно отбирать по оглавлению выпуска (ОФЗ, долговой рынок, макроагрегаты и т.п.), а не считать выпуск «бюджетной отчётностью».
- Условия использования: при переработке обычно требуется указание источника Банка России (формулировки — на сайте ЦБ в пользовательских документах и на страницах разделов).
Примеры доступа
Все примеры ниже проверены 18.07.2026 на выпуске № 6 (397), опубликованном 14.07.2026. Не переносите напечатанный в примерах <id> в production: переменная latest["url"] должна приходить из HTML-каталога на каждом цикле загрузки.
1. Найти PDF по году и номеру в HTML-каталоге. Код извлекает год из контейнера, номер из текста ссылки, дату публикации из tooltip и отбрасывает отдельную архивную ветку Bbsq… регионального приложения. Сначала запрашивается канонический адрес; официальный www-вариант — узкий fallback для HTTP 403 от CDN, зафиксированного при проверке.
Проверено 18.07.2026 на выпуске № 6 (397), опубликованном 14.07.2026.
from __future__ import annotations
import re
from urllib.parse import urljoin
import requests
from bs4 import BeautifulSoup
CATALOGS = (
"https://cbr.ru/statistics/bbs/",
"https://www.cbr.ru/statistics/bbs/", # тот же официальный каталог; fallback для CDN
)
TARGET_YEAR = 2026
HEADERS = {
"User-Agent": "Mozilla/5.0 (compatible; finguide-bbs-example/1.0)",
"Accept-Language": "ru-RU,ru;q=0.9",
}
session = requests.Session()
for catalog_url in CATALOGS:
response = session.get(catalog_url, headers=HEADERS, timeout=60)
if response.ok:
break
else:
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
issues = []
for block in soup.select("div.versions_items[data-versions-items]"):
match = re.search(r"\d{4}", block["data-versions-items"])
if not match:
continue
year = int(match.group())
for link in block.select('a.versions_item[href$=".pdf"]'):
pdf_url = urljoin(response.url, link["href"])
if "/Bbsq" in pdf_url: # архивное «Региональное приложение»
continue
number = re.search(r"№\s*(\d+)", link.get_text(" ", strip=True))
if number:
issues.append({
"year": year,
"number": int(number.group(1)),
"published_raw": link.get("data-tooltip-content"),
"url": pdf_url,
})
by_year = sorted(
(item for item in issues if item["year"] == TARGET_YEAR),
key=lambda item: item["number"],
reverse=True,
)
latest = by_year[0]
print("catalog_used:", response.url)
print(f"issues_{TARGET_YEAR}:", len(by_year))
print("latest:", latest)
Фактический вывод проверки:
catalog_used: https://www.cbr.ru/statistics/bbs/
issues_2026: 6
latest: {'year': 2026, 'number': 6, 'published_raw': 'Опубликовано 14 июля 2026', 'url': 'https://www.cbr.ru/Collection/Collection/File/62113/Bbs0626r.pdf'}
2. Скачать PDF и сохранить HTTP-метаданные и хеш. Этот фрагмент продолжает предыдущий: latest["url"] — найденная, а не сконструированная ссылка. В production вместо write_bytes для больших файлов можно писать поток в .part и атомарно переименовывать файл после вычисления хеша.
Проверено 18.07.2026 на выпуске № 6 (397), опубликованном 14.07.2026.
from __future__ import annotations
import hashlib
import json
from pathlib import Path
pdf_url = latest["url"]
cache_dir = Path("cache/cbr-bbs")
cache_dir.mkdir(parents=True, exist_ok=True)
pdf_path = cache_dir / "current.pdf"
meta_path = cache_dir / "current.headers.json"
pdf_response = session.get(pdf_url, headers=HEADERS, timeout=120)
pdf_response.raise_for_status()
pdf_path.write_bytes(pdf_response.content)
metadata = {
"url": pdf_response.url,
"status": pdf_response.status_code,
"last_modified": pdf_response.headers.get("Last-Modified"),
"etag": pdf_response.headers.get("ETag"),
"content_type": pdf_response.headers.get("Content-Type"),
"bytes": len(pdf_response.content),
"sha256": hashlib.sha256(pdf_response.content).hexdigest(),
}
meta_path.write_text(
json.dumps({"headers": dict(pdf_response.headers), **metadata}, ensure_ascii=False, indent=2) + "\n"
)
print(metadata)
Проверенный вывод:
{'url': 'https://www.cbr.ru/Collection/Collection/File/62113/Bbs0626r.pdf', 'status': 200, 'last_modified': 'Tue, 14 Jul 2026 14:03:34 GMT', 'etag': 'W/"00026120"', 'content_type': 'application/pdf', 'bytes': 1637909, 'sha256': '7be483d296388b72a0549393ac2a70741e10d05371b1a3ecd74f3d866508fca7'}
3. Не скачивать неизменившийся PDF. ЦБ в проверенном ответе дал Last-Modified и вернул HTTP 304 на условный запрос. Не считайте отсутствие Last-Modified в самом ответе 304 ошибкой: берите сохранённое значение из манифеста. Если сервер вернёт новый 200, пересчитывайте хеш и снова проверяйте оглавление, число страниц и структуру таблиц.
Проверено 18.07.2026 на выпуске № 6 (397), опубликованном 14.07.2026.
from __future__ import annotations
import json
from pathlib import Path
meta_path = Path("cache/cbr-bbs/current.headers.json")
old = json.loads(meta_path.read_text())
conditional_headers = {
**HEADERS,
"If-Modified-Since": old["last_modified"],
}
check = session.get(old["url"], headers=conditional_headers, timeout=120)
if check.status_code == 304:
print(f"unchanged: HTTP 304; body_bytes={len(check.content)}")
elif check.status_code == 200:
print(f"changed: HTTP 200; body_bytes={len(check.content)}")
else:
check.raise_for_status()
Повторный запрос на 18.07.2026 вывел unchanged: HTTP 304; body_bytes=0.
4. Извлечь текст, координатную таблицу и плоский raw-слой. В выпуске № 6 OCR не нужен: pdfplumber видит текст и линии таблицы. Ниже пример для таблицы 1.2, которая занимает две PDF-страницы. source_row обязателен: две разные строки с подписью «ОФЗ» нельзя различить только по тексту без родительской группы и координатного контекста.
Проверено 18.07.2026 на выпуске № 6 (397), опубликованном 14.07.2026.
from __future__ import annotations
from pathlib import Path
import pandas as pd
import pdfplumber
pdf_path = Path("cache/cbr-bbs/current.pdf")
def parse_number(value: str | None) -> float | None:
if value is None:
return None
cleaned = value.replace("\u00a0", " ").replace(" ", "").replace(",", ".").strip()
return None if cleaned in {"", "—", "–", "…"} else float(cleaned)
chunks = []
with pdfplumber.open(pdf_path) as pdf:
for pdf_page in (9, 10): # pdfplumber использует индекс pdf_page - 1
page = pdf.pages[pdf_page - 1]
text = page.extract_text() or ""
found = page.find_tables()
table = found[0].extract() # в проверенном выпуске на странице ровно одна таблица
print(f"page={pdf_page} text_chars={len(text)} tables={len(found)} shape={len(table)}x{len(table[0])}")
frame = pd.DataFrame(table[1:], columns=["indicator_raw", *table[0][1:]])
frame.insert(0, "source_row", range(1, len(frame) + 1))
frame.insert(0, "pdf_page", pdf_page)
chunks.append(frame)
wide = pd.concat(chunks, ignore_index=True)
long = wide.melt(
id_vars=["pdf_page", "source_row", "indicator_raw"],
var_name="period_raw",
value_name="value_raw",
)
long["period"] = pd.to_datetime(long["period_raw"], format="%d.%m.%Y", errors="coerce")
long["value_mln_usd"] = long["value_raw"].map(parse_number)
long = long.dropna(subset=["period", "value_mln_usd"])
print("wide_rows:", len(wide))
print("numeric_observations:", len(long))
Вывод проверки: page=9 text_chars=1488 tables=1 shape=19x10, page=10 text_chars=1629 tables=1 shape=11x10, wide_rows: 28, numeric_observations: 244. Чтобы восстановить путь сектор → инструмент, дополнительно сохраните page.extract_words() с x0, top, bottom и сопоставьте слова со строкой таблицы; не пытайтесь вывести родителя только из жирного начертания или пробелов в уже извлечённом тексте.
Для PDF с чёткой сеткой можно проверить результат camelot в режиме lattice; если линий нет, его stream или tabula требуют подобранной области страницы и особенно тщательной сверки объединённых заголовков. Это альтернативы, а не источник истины. OCR (ocrmypdf/Tesseract с отрисовкой около 300 dpi) нужен только когда extract_text() и extract_words() практически пусты или дают непригодный слой; тогда храните исходный PDF, OCR-версию и координаты/качество распознавания отдельно. Для № 6 эти условия не выполнены.
5. Нормализовать неполную подпись периода, не теряя raw. В таблице 4.2.1 дата напечатана как 01.06, а год вынесен в объединённую строку 2026 год; код ниже переносит год состояния в pandas.Timestamp и оставляет исходную составную подпись.
Проверено 18.07.2026 на выпуске № 6 (397), опубликованном 14.07.2026.
from __future__ import annotations
import re
from pathlib import Path
import pandas as pd
import pdfplumber
columns = [
"total_mln_rub",
"federal_budget_mln_rub",
"regional_local_budget_mln_rub",
"other_budget_mln_rub",
"extra_budget_funds_mln_rub",
]
def parse_mln_rub(value: str | None) -> float | None:
return None if value is None else float(value.replace("\u00a0", " ").replace(" ", ""))
records, year = [], None
with pdfplumber.open(Path("cache/cbr-bbs/current.pdf")) as pdf:
table = pdf.pages[102].extract_table() # PDF page 103, печатная страница 101
for row in table[3:]:
label = (row[0] or "").strip()
if re.fullmatch(r"\d{4} год", label):
year = int(label[:4])
elif year and re.fullmatch(r"\d{2}\.\d{2}", label):
day, month = map(int, label.split("."))
records.append({
"period_raw": f"{year} год / {label}",
"period": pd.Timestamp(year=year, month=month, day=day),
**dict(zip(columns, map(parse_mln_rub, row[1:]))),
})
df = pd.DataFrame(records)
print("rows:", len(df), "range:", df.period.min().date(), df.period.max().date())
print(df.tail(2)[["period_raw", "period", "total_mln_rub", "federal_budget_mln_rub"]])
Проверенный результат: 18 наблюдений от 2025-01-01 до 2026-06-01; последние две строки — 2026 год / 01.05 = 94 529,0 млн руб. всего и 20 914,0 млн руб. федерального бюджета, 2026 год / 01.06 = 85 250,0 и 10 764,0 млн руб. соответственно.
Связанные страницы wiki
- Сайт Банка России — портал, внутри которого размещён раздел бюллетеня; там же ограничения URL и смежные подсистемы.
- Статистика Банка России — временные ряды, база показателей и API; для регулярного обновления рядов предпочтительнее, чем разбор каждого PDF бюллетеня.
- Казначейство: статистика государственных финансов РФ — официальные своды по контуру бюджетной системы; бюллетень ЦБ даёт макро- и рыночный слой, а не те же таблицы исполнения по КБК.
- Открытые данные Минфина России — план и исполнение федерального бюджета в открытых наборах; сопоставление с таблицами ЦБ — на уровне аналитической модели и дат.
- Банк России — оператор публикации.
Не путать с
- Статистика Банка России — прежде всего машиночитаемые серии и сервисы; бюллетень — PDF-сборники с фиксированной вёрсткой выпуска.
- Вестник Банка России — нормативные и разъяснительные материалы регулятора; бюллетень — статистические таблицы и обзорные блоки по данным ЦБ.
Сводка для машинной обработки
primary_url: "https://cbr.ru/statistics/bbs/"
landing_page: "https://cbr.ru/statistics/bbs/"
formats: ["pdf", "html"]
update_cadence: "основной бюллетень — номера по календарю Банка России, обычно ежемесячно; региональное приложение — прекращённая архивная квартальная линейка 2001–2010"
url_stability: "URL каталога стабилен; URL PDF выпуска содержит изменяемый числовой id и должен извлекаться из HTML"
checked_at: "2026-07-18"
issue_checked: "№ 6 (397), 2026; опубликован 14.07.2026"
issue_last_modified: "Tue, 14 Jul 2026 14:03:34 GMT"
issue_bytes: 1637909
issue_sha256: "7be483d296388b72a0549393ac2a70741e10d05371b1a3ecd74f3d866508fca7"
issue_pages: 252
text_layer: true
table_extraction: ["pdfplumber", "camelot or tabula after visual validation", "ocr-fallback: OCRmyPDF/Tesseract only when text layer is absent or unusable"]
join_keys:
- "период (нормализованная дата) + показатель/сектор/инструмент + единица измерения"
- "соответствие отраслей, инструментов и агрегатов задаётся вручную и проверяется по методологии; КБК/ОКТМО/ИНН отсутствуют"
parse_notes:
- "Таблицы имеют печатную вёрстку: объединённые ячейки, переносы строк, сноски и неуникальные подписи; хранить pdf_page, source_row, raw-текст и координаты."
- "Период может быть неполным: в таблице 4.2.1 год задан отдельной строкой, а дата — 01.MM; сохранять period_raw вместе с Timestamp."
- "Таблица 1.2 охватывает две PDF-страницы; строки ОФЗ различаются только родительской группой валюты, а не текстом подписи."
- "При новом SHA-256 сравнивать ссылку каталога, дату публикации, оглавление, число страниц, текстовый слой, заголовки и размеры ключевых таблиц."
Частые вопросы
В: Чем бюллетень отличается от статистики Банка России?
О: Бюллетень — PDF-сборник с фиксированной на дату выпуска вёрсткой, оглавлением и методологическими комментариями. Страница статистики — канал машиночитаемых временных рядов и API; для регулярной загрузки одного показателя она обычно предпочтительнее. PDF нужен, когда важны состав таблицы, контекст выпуска или показатель, не найденный в готовом ряду.
В: Почему нельзя напрямую соединить таблицы бюллетеня с казначейским исполнением?
О: Бюллетень даёт макроэкономический и рыночный слой: внешний долг перед нерезидентами, денежные агрегаты, остатки средств в кредитных организациях. В нём нет КБК, ОКТМО, ИНН, платёжных документов и строк кассового исполнения. Сопоставление с статистикой государственных финансов Казначейства или наборами Минфина возможно только как явно описанная аналитическая связь по периоду, агрегату, единице и методологии.
В: Как автоматически заметить, что ЦБ изменил структуру выпуска?
О: После изменения SHA-256 снова парсите HTML-каталог, извлекайте оглавление и фиксируйте число страниц, наличие текстового слоя, заголовки и размеры ключевых таблиц. Сравнивайте их с предыдущим манифестом: так обнаруживаются новая нумерация, исчезнувшая таблица, сдвиг страниц, смена периодов или объединённых шапок, которые не поймает проверка одного URL.