Суперадмин управляет дельта-подгрузкой МойСклад на стенд флагом в «Настройках
платформы» (по умолчанию ВЫКЛ), не трогая systemd-таймер руками.
- PlatformSettings: MoySkladDeltaSyncEnabled (bool, default false) + состояние
последнего прогона (startedAt/finishedAt/ok/migrated/error); миграция Phase46
(ADD COLUMN IF NOT EXISTS, идемпотентно).
- Super-admin API: GET/PUT /platform-settings/moysklad-delta — тоггл с reason,
пишется в SuperAdminAuditLog; GET отдаёт состояние прогона. Только SuperAdmin.
- Admin API (для скрипта, роль Admin): GET /admin/moysklad/delta-sync (флаг),
POST /admin/moysklad/delta-sync/report (итог прогона → PlatformSettings).
- Серверная защита: import-supplies при delta=true и выключенном флаге → 409
с понятной причиной. Ручной импорт из мастера (без delta=true) не затронут.
- delta_sync.py: сначала спрашивает флаг — при «Выкл» одна строка в лог и выход
без изменения lastSync (повторное включение догонит пропущенное); помечает
запросы delta=true; в конце репортит итог прогона суперадмину.
- SuperAdminPlatformSettingsPage: блок «Подгрузка из МойСклад» — тоггл Вкл/Выкл
с причиной, подпись, состояние последнего прогона.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- reconcile: выручка по документам (точно до копейки), plotseries как справка; чеки сходятся
- delta_sync: camelCase ключи job (created/skipped), повторный опрос, audit tolerant — дельта
подтверждена (новый чек из МС подтянут: created 1)
- НАЙДЕНО: 30000 строк stocks без движений (прежний прямой сид) → пересобрать из движений
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- StreamDocumentsAsync: Uri.EscapeDataString всего выражения updated>=<дата> (>= → %3E%3D),
не только даты — иначе часть форм 400/неоднозначна
- delta_sync: повторное чтение job после Succeeded (устранить гонку счётчиков), audit в try
- reconcile: розница демо/возвраты раздельно, URL-энкод фильтра чеков по месяцам
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- scripts/migration/delta_sync.py: раз в N мин updated>=lastSync по всем типам,
удаления через /audit, состояние в ~/.fm-watchdog, перекрытие окна 2 мин
- docs/migration-runbook.md: фазы A/B/C, откат на МойСклад, надёжность, ограничения токена
- reconcile.py: секции балансов счетов (report/money/byaccount) и долгов (403-ограничение)
- progress: Parts 5/6/7 закрыты
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>