Files
docs/research/bond-credit-ratings.md
T

145 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Источники кредитных рейтингов облигаций
Проверено 10 сентября 2026 года. Исследование для страницы облигации
WealthLedger: рейтинг агентства, привязанный к конкретному ISIN, без доступа
пользователя к платным информационным системам. Это исследование источников,
а не описание уже реализованной интеграции.
## Вывод
Для первого подключения технически подходит публичный
[реестр рейтингов эмиссий НКР](https://ratings.ru/ratings/issues/): один обычный
GET без авторизации возвращает HTML-таблицу с ISIN, рейтингом, датой и ссылкой
на первоисточник. В проверенном ответе 157 уникальных ISIN, включая 36 записей
«рейтинг отозван». Это частичное покрытие одного агентства, а не рейтинг любой
облигации российского рынка.
У [Эксперт РА](https://raexpert.ru/ratings/debt_inst/) тоже есть открытые
рейтинги выпусков. Однако ISIN находится в отдельных карточках, а список
разбит на страницы. Подключение потребует дополнительных запросов и более
сложного обхода. Официальная структурированная выгрузка агентства оформлена
как [подписка](https://raexpert.ru/all-services/rating-export/).
Публичное чтение этих страниц проверено. Свободная лицензия на массовое
переиспользование не установлена: НКР и Эксперт РА отдельно ограничивают
распространение своей информации. Это не равнозначно техническому запрету
читать отдельный рейтинг в личном приложении. Перед публичным распространением
базы или коммерческим предоставлением данных нужно отдельно проверить
условия правообладателя. Публичный HTML не даёт контракт API или SLA.
## НКР: минимальная интеграция
Источник: <https://ratings.ru/ratings/issues/>.
В HTML есть `table#issues-table`, затем `tbody > tr`. В каждой проверенной
строке ровно шесть `td`:
| Индекс | Содержимое | Использование |
| --- | --- | --- |
| 0 | Рейтингуемое лицо, ссылка `/ratings/issuers/.../` | Контекст эмитента |
| 1 | Название эмиссии, ссылка `/ratings/issues/{id}/` | Ссылка на карточку выпуска |
| 2 | Рейтинг, например `AAA.ru`, или `рейтинг отозван` | Значение и статус |
| 3 | ISIN | Точное сопоставление с облигацией |
| 4 | Регистрационный номер | Дополнительный идентификатор |
| 5 | Дата `DD.MM.YYYY`, ссылка на пресс-релиз | Дата действия и источник |
Например, в ответе на дату проверки:
| ISIN | Рейтинг | Дата | Источник |
| --- | --- | --- | --- |
| RU000A10EW44 | AAA.ru | 17.04.2026 | [Полюс ПБО-05](https://ratings.ru/ratings/issues/3361/) |
| RU000A1065B1 | Рейтинг отозван | 24.04.2026 | [Реестр эмиссий](https://ratings.ru/ratings/issues/) |
Эти примеры нужны для проверки структуры, не для постоянного отображения
значений из документа. Прогноза в таблице эмиссий нет. Его нельзя брать из
случайного текста страницы или переносить с рейтинга эмитента.
Кнопка «Загрузить ещё» обслуживается клиентским DataTables:
[скрипт инициализации](https://ratings.ru/js/initDataTable.js) задаёт
`pageLength` и вызывает `table.page.loadMore()`, без `ajax` или `serverSide`.
В проверенном HTML уже присутствуют все 157 строк таблицы; дополнительные
запросы на каждую карточку для извлечения перечисленных полей не нужны.
Это наблюдение текущей версии сайта, не обещание неизменного формата.
Предлагаемый подход для личного приложения:
1. Загружать таблицу на backend с ограничением времени и размера ответа.
Объединять параллельные загрузки и кэшировать общий публичный справочник,
а не запрашивать сайт отдельно для каждого пользователя и ISIN.
2. Проверять заголовки и структуру таблицы; сопоставлять только точный ISIN.
Не угадывать рейтинги по названию, тикеру или группе компаний.
3. Показывать исходное обозначение `AAA.ru`, агентство «НКР», дату действия
и ссылку на карточку или пресс-релиз.
4. Отзыв показывать отдельным статусом. При отсутствии строки говорить
«Нет данных НКР», а не «Рейтинг отсутствует»: другие агентства могут
иметь действующий рейтинг.
5. Недоступность сайта или изменение HTML не должны ломать цену, купоны
и портфель. Время получения данных и дата рейтингового действия имеют
разный смысл; давнюю дату решения нельзя автоматически считать отзывом.
Это рекомендации реализации, вытекающие из проверенной структуры;
период кэша и обработка ошибок остаются решениями приложения.
В footer [сайта НКР](https://ratings.ru/ratings/issues/) указано:
«Не допускается распространение настоящей информации любым способом и в любой
форме без предварительного согласия со стороны ООО „НКР“ и ссылки на источник».
Разрешение на публичную перераздачу и стабильный машинный интерфейс этой
проверкой не получены. Авторизация или обход защиты для чтения таблицы
не использовались.
## Эксперт РА
В [таблице долговых инструментов](https://raexpert.ru/ratings/debt_inst/)
есть название выпуска, рейтинг, прогноз, дата обновления и ссылки на
пресс-релизы. В проверенном HTML списка ISIN нет. Переход по ссылке
[Россети 001Р-21R](https://raexpert.ru/database/securities/bonds/1000074695/)
даёт реквизит `ISIN = RU000A10G148` и таблицу `.object-rating-table`
с `ruAAA` от `09.09.2026`.
Список использует серверную пагинацию: `setRatingPageHash(...)` отправляет
запрос на `/ratings/index/ajax-set-rating-page-hash/`. Поэтому одного GET
списка недостаточно для полного справочника. Не следует строить массовый
сканер карточек только ради добавления второго агентства в первую версию.
Официальная [услуга выгрузки](https://raexpert.ru/all-services/rating-export/)
описывает SOAP, REST и Excel как виды подписки. REST использует уникальный
код доступа; документация содержит методы получения рейтинг-листа и
рейтинговых действий, параметры даты и отозванных рейтингов. Наличие кнопки
«Экспорт» на публичной странице не доказывает бесплатность выгрузки.
В footer агентство требует предварительное согласие и ссылку на источник
для распространения информации. Как и для НКР, возможность чтения карточки
не следует представлять как открытую лицензию на распространение базы.
## Другие проверенные варианты
| Источник | Проверенный результат | Вывод для первого подключения |
| --- | --- | --- |
| [MOEX ISS CCI](https://iss.moex.com/iss/reference/781) | Официально документирован список актуальных рейтингов выпусков. Проверенный анонимный запрос `/iss/cci/rating/securities.json?iss.meta=off` вернул пустое тело | Не считать пустое тело валидным отсутствием рейтингов; пригодный ответ и условия доступа не подтверждены |
| [MOEX CCI: выпуск компании](https://iss.moex.com/iss/reference/867) | Документирован путь с ID компании и ISIN, пример `1113/RU000A1051U1` | Документация существует, но рабочая бесплатная интеграция не доказана |
| [АКРА](https://www.acra-ratings.ru/ratings/) | `/ratings/`, `/ratings/issuers/` и главная страница вернули HTTP 403 в проверенной среде | Не обходить ограничение; доступный источник данных здесь не подтверждён |
| [НРА](https://www.ra-national.ru/ratings/) | Публичный HTML содержит реестр и названия облигационных выпусков, но точный ISIN в проверенном списке не обнаружен | Нужна отдельная проверка карточек и условий; сейчас менее прямой путь, чем НКР |
| [Cbonds API](https://cbonds.ru/api/) | Официальный продукт включает кредитные рейтинги, публичную демоверсию и индивидуальный доступ. Цена зависит от набора данных | Вариант структурированной интеграции после получения доступа; демо не означает бесплатную полную базу |
| [Интерфакс / RusBonds](https://www.rusbonds.ru/) | Запрос вернул страницу JavaScript challenge, а не данные облигаций | Рабочий анонимный источник рейтингов и условия API этой проверкой не установлены |
Наблюдаемый HTTP 403, challenge или пустой ответ не доказывают отсутствие
данных у провайдера. Это ограничения конкретной проверки; они не дают
основания выдумывать поля API, доступ или цены.
## Предметные границы
[Банк России](https://www.cbr.ru/finm_infrastructure/ra/) различает мнение
агентства о способности организации исполнять обязательства и оценку риска
отдельного финансового обязательства или инструмента. Поэтому рейтинг
эмитента не должен молча становиться рейтингом любой его облигации.
При добавлении других агентств следует сохранять агентство и исходную шкалу:
`ruAAA`, `AAA.ru` и `AAA(RU)` нельзя свести к одному безымянному `AAA`.
Банк России отдельно публикует
[сопоставление российских шкал](https://www.cbr.ru/press/pr/?file=638557747357168625INFR.htm),
что не отменяет необходимость показывать происхождение оценки.
Стабильный открытый API с проверенным полным покрытием всех агентств в рамках
этого исследования не найден. Публичный реестр НКР даёт практически полезное
начало без покупки доступа и без подмены рейтинга уровнем риска брокера.