Files
fin-tracker/docs/ai/links.md
T
Dmitry 220f027652 docs: контракт для агентов, архитектура и план фаз
AGENTS.md — индекс, команды и обязательные ограничения (Decimal для денег, не
конвертировать валюту на записи, SDK T-Invest ровно в одном модуле, аналитика
читает только confirmed). docs/ai/ — архитектура, соглашения, эксплуатация и
полный план на шесть фаз с проверками для каждой.
2026-09-18 13:43:31 +03:00

49 lines
3.9 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.
# Внешние 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-encoded `grant_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)` требует extra
`httpx[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`, не в ошибку.