Source.sync(ctx) -> SyncResult пишет только raw_* и возвращает курсор; локи, журнал, ошибки и продвижение курсора берёт на себя worker/runner. ZenMoney читается единственным доступным способом — POST /v8/diff/ по serverTimestamp; токен живёт сутки, поэтому worker ротирует refresh_token через source_credential. Маппер всегда пересобирает core из полных raw_*, так что удаление в ZenMoney исчезает и у нас. ЦБ ходит мимо прокси (trust_env=False) и отдаёт cp1251 с делением на Nominal. Курсы только по рабочим дням — протяжку по календарю делает аналитика. Планировщик — APScheduler в отдельном процессе, на источник advisory-лок sync:<name>, чтобы ручной запуск не пересёкся с плановым.
31 lines
652 B
JSON
31 lines
652 B
JSON
{
|
||
"serverTimestamp": 1750001000,
|
||
"account": [
|
||
{
|
||
"id": "aaaaaaaa-0000-0000-0000-000000000001",
|
||
"changed": 1750000900,
|
||
"user": 555,
|
||
"instrument": 2,
|
||
"type": "ccard",
|
||
"title": "Карта Т-Банк",
|
||
"syncID": ["4377"],
|
||
"balance": 24000.5,
|
||
"startBalance": 0,
|
||
"creditLimit": 100000,
|
||
"inBalance": true,
|
||
"savings": false,
|
||
"archive": false,
|
||
"enableCorrection": false,
|
||
"enableSMS": true
|
||
}
|
||
],
|
||
"deletion": [
|
||
{
|
||
"id": "dddddddd-0000-0000-0000-000000000006",
|
||
"object": "transaction",
|
||
"stamp": 1750000950,
|
||
"user": 555
|
||
}
|
||
]
|
||
}
|