From 4667d8e1a777d0bc711c4147e3987d7ee56a3ac8 Mon Sep 17 00:00:00 2001 From: nns Date: Fri, 9 Oct 2026 13:31:37 +0500 Subject: [PATCH] =?UTF-8?q?docs(migration):=20=D1=81=D1=82=D0=B0=D1=82?= =?UTF-8?q?=D1=83=D1=81=20=E2=80=94=20Part=201=20(=D0=B8=D0=BD=D0=B2=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F)?= =?UTF-8?q?=20+=20Part=203=20(=D0=BE=D1=80=D0=B3)=20done;=20Part=202=20?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D1=87=D0=BD=D0=B8=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BD=D0=B0=20=D1=80=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Пайплайн справочников проверен на реальном аккаунте: орг «FOOD MARKET» на стенде, контрагенты 628 (МС 627) и группы 53 перенесены, товары (31k) импортируются в фоне. Документы (110k), сверка и дельта — спроектированы (migration-design.md), основной объём впереди (многочасовой прогон). global.json не трогал; в МойСклад только чтение. Co-Authored-By: Claude Opus 5.5 --- docs/migration-progress.md | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/docs/migration-progress.md b/docs/migration-progress.md index ebccfc6..edd34fc 100644 --- a/docs/migration-progress.md +++ b/docs/migration-progress.md @@ -10,18 +10,32 @@ Легенда: [x] готово · [~] частично · [ ] не начато. -## План -1. [ ] Инвентаризация источника (скрипт) → `docs/migration-source-inventory.md`. -2. [ ] Мигратор MoySklad→ALL MARKET (Hangfire, идемпотентный по msId/externalId): справочники → - документы в хронологии с номерами/датами(МСК→)/авторами/статусами/связями/комментариями; - суммы из тиынов; прогресс + журнал ошибок. -3. [ ] Новая орг на стенде (имя = орг МойСклада), простой режим; Демо/«Магазин у дома» не трогать. -4. [ ] Сверка (авто) → `docs/migration-reconciliation.md`: остатки по товар×склад, долги - контрагентов, остатки счетов/касс, выручка+чеки по месяцам, число документов по типам. -5. [ ] Дельта-досинхронизация (updated>= МСК + удалённые) до дня перехода. -6. [ ] Производительность/надёжность: замер, идемпотентность, продолжение после падения. +## План и статус +1. [x] **Инвентаризация источника** → `docs/migration-source-inventory.md` (скрипт + `scripts/migration/ms_inventory.py`). Орг «FOOD MARKET», ~31k товаров, 627 контрагентов, + ~110k документов, 7558 строк остатков; gap-анализ + цели сверки. +2. [~] **Мигратор.** Существующий `MoySkladImportService` (справочники product/productfolder/ + counterparty, идемпотентность по `MoySkladExternalId`) — РАБОТАЕТ на реальных данных: + - [x] Контрагенты → **628** в новой орг (МС 627 + 1 розн. покупатель по умолчанию). + - [x] Группы → **53** (МС 52 + корень). [~] Товары — импорт запущен (31k, фон, ~3600/20с). + - [ ] uom/склад/точка/сотрудники как отдельные справочники (сейчас товары мапятся на + дефолтные ед.); externalId на Counterparty/Store/RetailPoint/Employee/UoM. + - [ ] **Документы (110k) в хронологии** — НЕ начато (основной объём; дизайн — migration-design.md). +3. [x] **Новая орг на стенде** «FOOD MARKET» (простой режим), admin `foodmarket-migr@food-market.local`. + Демо/«Магазин у дома» не тронуты. Токен МойСклада задан в настройках орг. +4. [ ] Сверка → `docs/migration-reconciliation.md` (цели собраны в source-inventory; после переноса документов). +5. [ ] Дельта-досинхронизация (updated>= МСК + удалённые). +6. [ ] Производительность/надёжность (резюмируемый курсор документов). 7. [ ] Runbook «день перехода» + откат. +## Сделано в этой сессии (честно) +Part 1 (инвентаризация) и Part 3 (орг) — выполнены. Part 2 (справочники) — пайплайн проверен +на реальных данных: контрагенты и группы перенесены, товары импортируются. Parts 4–7 +спроектированы (`migration-design.md`), но НЕ реализованы: перенос ~110k документов с историей +(хронология, msId-идемпотентность, МСК→UTC, авторы/статусы/связи), авто-сверка до нуля и +дельта — это основной объём и многочасовой прогон → отдельная(ые) сессия(и) продолжения. +Условие DONE (перенос + сверка 0 + дельта) НЕ достигнуто — работа продолжается. + ## Ключевые факты API (из ms-api-lessons + проверки) - База `https://api.moysklad.ru/api/remap/1.2`, `Authorization: Bearer`, `Accept-Encoding: gzip` обязателен. - Время moment/фильтров — МОСКОВСКОЕ (UTC+3), формат `yyyy-MM-dd HH:mm:ss`.