Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
54 lines
5.3 KiB
Markdown
54 lines
5.3 KiB
Markdown
# Перенос магазина МойСклад → ALL MARKET (с историей) — прогресс
|
||
|
||
Решение владельца 09.10: перенести ВСЁ из МойСклада с историей, перейти на ALL MARKET.
|
||
Фискализации нет и в МойСкладе (не блокер), маркировка не используется.
|
||
|
||
**Источник:** аккаунт МойСклад, орг **«FOOD MARKET»** (id `bb8f74d4-5eb6-11ef-0a80-106e00048af9`).
|
||
Токен — `~/.food-market-secrets/moysklad.env` (ТОЛЬКО ЧТЕНИЕ; в МойСклад ничего не писать).
|
||
Опыт API — `~/.fm-watchdog/ms-api-lessons.txt`; код-образцы — `~/ref/fm-server-moysklad`, `~/ref/sklad`.
|
||
Существующий импортёр (справочники) — `src/food-market.infrastructure/Integrations/MoySklad/`.
|
||
|
||
Легенда: [x] готово · [~] частично · [ ] не начато.
|
||
|
||
## План и статус
|
||
1. [x] **Инвентаризация источника** → `docs/migration-source-inventory.md` (скрипт
|
||
`scripts/migration/ms_inventory.py`). Орг «FOOD MARKET», ~31k товаров, 627 контрагентов,
|
||
~110k документов, 7558 строк остатков; gap-анализ + цели сверки.
|
||
2. [~] **Мигратор — работает на реальных данных.**
|
||
- [x] Справочники: товары **30 944**, контрагенты **628** (+externalId), группы **53**;
|
||
идемпотентность по `MoySkladExternalId`.
|
||
- [x] **Документный мигратор (сервер, фон, идемпотентный, резюмируемый)** — архитектура
|
||
проверена на ПРИЁМКАХ: `MoySkladDocumentImportService` + `StreamDocumentsAsync`
|
||
(хронология order=moment,asc, expand позиций, 429/повторы, таймаут 130с),
|
||
`Phase41` externalId на всех документах/справочниках. Приёмки переносятся ~10/с с
|
||
движениями остатков; moment МСК→UTC, суммы из тиынов, поставщик по externalId,
|
||
товары по externalId, агрегация позиций по товару, SaveChanges по документу.
|
||
Починены 3 бага: sum как decimal («900000.0»), тяжёлый expand, дубль stocks при батче.
|
||
- [ ] Остальные типы (retaildemand/loss/enter/inventory/supplier_returns/shifts/деньги) —
|
||
по ТОМУ ЖЕ проверенному шаблону (следующая итерация).
|
||
- [ ] uom/склад/точка/сотрудники как отдельные справочники с externalId (пока товары на
|
||
дефолтных ед.; склад — единственный склад орг).
|
||
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`.
|
||
- Суммы — в ТИЫНАХ (÷100). Лимит 45 запросов/3с; таймаут ≥120с; expand только при limit≤100.
|
||
- `report/stock/all` НЕ отдаёт нулевые остатки; номера документов повторяются по годам — ключ только id.
|
||
|
||
## Что НЕ трогаем
|
||
Прод, shared-postgres, global.json, gateway nginx, sklad. В МойСклад — только чтение.
|