AGENTS.md — индекс, команды и обязательные ограничения (Decimal для денег, не конвертировать валюту на записи, SDK T-Invest ровно в одном модуле, аналитика читает только confirmed). docs/ai/ — архитектура, соглашения, эксплуатация и полный план на шесть фаз с проверками для каждой.
3.9 KiB
3.9 KiB
Внешние API и референсы
| Что | Ссылка | Заметки |
|---|---|---|
| ZenMoney API | https://github.com/zenmoney/ZenPlugins/wiki/ZenMoney-API | только /v8/diff/ и /v8/suggest/; токен 24 ч + refresh |
| T-Invest API | https://developer.tbank.ru/invest/api | gRPC; лимиты Operations/Instruments 200/мин, MarketData 600/мин |
| T-Invest Python SDK | индекс https://opensource.tbank.ru/api/v4/projects/238/packages/pypi/simple |
пакет t-tech-investments |
| MOEX ISS | https://iss.moex.com/iss/reference/ | без ключа; history, dividends, bondization, индексы |
| ЦБ РФ курсы | https://www.cbr.ru/scripts/XML_dynamic.asp | cp1251, делить на Nominal |
| pyxirr | https://github.com/Anexen/pyxirr | XIRR/TWR |
| investbook | https://github.com/spacious-team/investbook | референс форматов отчётов Сбер/ВТБ (Java) |
| invest_toolkit | https://github.com/i-savelev/invest_toolkit | парсеры Сбер/ВТБ на Python |
| Соседние проекты | ../fin-dashboard, ../t_tech-gyro |
ZenMoney diff-цикл, CBR fx, T-Invest адаптер + CA-сертификаты |
Что выяснилось при реализации фазы 1 (источники)
ZenMoney /v8/diff/
- Тело запроса:
{"currentClientTimestamp": <unix now>, "serverTimestamp": <курсор|0>, "forceFetch": [типы]};forceFetchотправляем только при курсоре 0. Ответ — те же массивы сущностей (только изменённые),deletion: [{id, object, stamp, user}]и новыйserverTimestamp. - Типы сущностей:
instrument, company, user, account, tag, merchant, budget, reminder, reminderMarker, transaction.company,user,budget,reminder*храним только в raw — в core они пока не нужны. account.type = ccardмаппится вAccountKind.zm_card(в enum нетzm_ccard), остальные типы — буквальноzm_<type>.- Токен живёт 86400 с. Ротация:
POST https://api.zenmoney.ru/oauth2/token/, form-encodedgrant_type=refresh_token&refresh_token=…&client_id=…&client_secret=…, ответ{access_token, refresh_token, expires_in, token_type}. Пара лежит вsource_credential(source='zenmoney'), засеивается изZENMONEY_REFRESH_TOKEN. - Статический токен (zerro.app/token) при 401 нечем обновить — источник падает с
явным требованием обновить
ZENMONEY_TOKEN.
Прокси на хосте ada-x1
ALL_PROXY=socks5h://…, поэтомуhttpx.AsyncClient(trust_env=True)требует extrahttpx[socks](пакетsocksio) — он добавлен в зависимости, иначе клиент падает на конструировании ещё до запроса.- api.zenmoney.ru доступен через прокси (
trust_env=True, по умолчанию). cbr.ru через этот прокси роняет TLS → CBR-клиент строится сtrust_env=False.
ЦБ РФ
XML_daily.asp?date_req=DD/MM/YYYYнужен только ради картыCharCode -> ID(USD -> R01235,JPY -> R01820); на 17.09.2026 отдаёт 54 валюты.XML_dynamic.asp?date_req1=…&date_req2=…&VAL_NM_RQ=<ID>—<Record Date="dd.mm.yyyy">с<Nominal>и<Value>(запятая как разделитель). Кодировка windows-1251. Вraw_cbr_rateкладёмvalueиnominalкак напечатано; деление на номинал — вpricing/fx.py.- Крипта и металлы (XAU, BTC …) ЦБ не котирует — уходят в
warnings, не в ошибку.