food-market/docs/migration-source-inventory.md
nns a2ee85bc12
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
docs(migration): инвентаризация источника МойСклад + дизайн мигратора (Part 1)
Решение владельца 09.10: полный перенос магазина из МойСклада в ALL MARKET с историей.
- scripts/migration/ms_inventory.py — read-only инвентаризация источника.
- docs/migration-source-inventory.md: орг «FOOD MARKET», ~31k товаров, 627 контрагентов,
  ~110k документов (97 707 чеков, 7 125 приёмок, 3 068 списаний…), 7 558 строк остатков,
  1 склад/точка/орг, касса наличных, 1 тип цены; gap-анализ модели + цели сверки.
- docs/migration-design.md: идемпотентность по msId, хронология документов, МСК→UTC,
  тиыны, резюмируемость, порядок этапов, сверка, дельта, runbook.
- docs/migration-progress.md: план Part 1–7.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 13:26:35 +05:00

99 lines
6.6 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.

# Инвентаризация источника МойСклад (FOOD MARKET)
_Сгенерировано 2026-10-09 13:21:46 (только чтение)._
## Сущности и документы
| Сущность | МойСклад entity | Кол-во |
|---|---|---|
| Товары | `product` | 30991 |
| Модификации | `variant` | 0 |
| Услуги | `service` | 0 |
| Комплекты | `bundle` | 0 |
| Группы товаров | `productfolder` | 52 |
| Единицы измерения | `uom` | 59 |
| Валюты | `currency` | 1 |
| Типы цен (в настройках) | `pricetype` | _спец, ниже_ |
| Штрихкоды | `barcodes` | _спец, ниже_ |
| Контрагенты | `counterparty` | 627 |
| Юрлица (организации) | `organization` | 1 |
| Склады | `store` | 1 |
| Точки продаж | `retailstore` | 1 |
| Сотрудники | `employee` | 3 |
| Счета организации | `orgaccounts` | _спец, ниже_ |
| Приёмки | `supply` | 7125 |
| Возвраты поставщикам | `purchasereturn` | 550 |
| Оприходования | `enter` | 72 |
| Списания | `loss` | 3068 |
| Инвентаризации | `inventory` | 70 |
| Перемещения | `move` | 0 |
| Розничные продажи (чеки) | `retaildemand` | 97707 |
| Розничные возвраты | `retailsalesreturn` | 438 |
| Смены | `retailshift` | 690 |
| Внесения в кассу | `retaildrawercashin` | 18 |
| Выплаты из кассы | `retaildrawercashout` | 623 |
| Отгрузки | `demand` | 0 |
| Возвраты покупателей | `salesreturn` | 2 |
| Заказы покупателей | `customerorder` | 0 |
| Заказы поставщикам | `purchaseorder` | 0 |
| Счета-фактуры вх. | `invoicein` | 0 |
| Счета покупателям | `invoiceout` | 0 |
| Входящие платежи | `paymentin` | 0 |
| Исходящие платежи | `paymentout` | 171 |
| Приходные ордера | `cashin` | 595 |
| Расходные ордера | `cashout` | 0 |
| Корректировки взаиморасчётов | `counterpartyadjustment` | 0 |
| Оприходование/списание денег | `none` | _спец, ниже_ |
## Остатки, деньги, взаиморасчёты (цели сверки)
| Показатель | Значение |
|---|---|
| Типы цен | 1 («Цена продажи») |
| Счета организации (банк) | 0 — магазин кассовый (наличные) |
| report/stock/all (строк товар×склад с остатком) | **7558** |
| Склад | «Склад FOOD MARKET» (`bb91971a-…`) |
| Точка продаж | «FOOD MARKET» (`bbad71b4-…`) |
| Юрлицо | «FOOD MARKET» (`bb8f74d4-…`) |
Деньги: банковских счетов нет → остаток кассы точки восстанавливается из чеков/внесений/
выплат/ордеров. report/money вернул пусто (уточнить формат при сверке Part 4).
## Итоги по объёму (для планирования)
- Справочники: ~31 000 товаров, 52 группы, 59 ед., 627 контрагентов, 3 сотрудника, 1 орг/склад/точка.
- Документы (всего ~**110 000**): чеки 97 707, приёмки 7 125, списания 3 068, выплаты 623,
приходные ордера 595, возвраты поставщикам 550, розн. возвраты 438, исх. платежи 171,
инвентаризации 70, оприходования 72, внесения 18, возвраты покупателей 2.
- Пусто (нет в этом магазине): модификации, услуги, комплекты, перемещения, отгрузки,
заказы, счета-фактуры/счета, входящие платежи, расходные ордера, корректировки взаиморасчётов.
## Соответствие модели ALL MARKET (gap-анализ)
| МойСклад | ALL MARKET | Решение |
|---|---|---|
| product | Product | прямое; хранить msId (externalId) |
| productfolder | ProductGroup (вложенность по pathName) | прямое |
| uom | UnitOfMeasure | по коду/имени; маппинг на наши ОКЕИ |
| pricetype «Цена продажи» | PriceType (системный) | прямое |
| barcodes (ean13/code128/…) | ProductBarcode | прямое, первый — primary |
| counterparty | Counterparty (поставщик/покупатель по флагам) | прямое |
| organization | Organization | новая орг = имя «FOOD MARKET» |
| store | Store | прямое |
| retailstore | RetailPoint (+ денежный счёт кассы) | прямое; касса наличных |
| employee | Employee/User | 3 сотрудника; кассиры чеков → owner |
| supply | Supply (приёмка) | прямое; номер/дата(МСК→UTC)/поставщик/позиции/цены(тиыны) |
| purchasereturn | SupplierReturn | прямое |
| enter | Enter (оприходование) | прямое |
| loss | Loss (списание) | причина → наш enum (маппинг/дефолт) |
| inventory | Inventory | прямое; факт-кол-во |
| retaildemand | RetailSale (чек) | прямое; оплата нал/безнал из cashSum/noCashSum; owner=кассир |
| retailsalesreturn | RetailSale(IsReturn) | привязка к исходному чеку |
| retailshift | CashShift (смена) | открытие/закрытие, точка, деньги |
| retaildrawercashin/out | MoneyTransaction (внесение/выплата) | в кассу точки |
| cashin (приходный ордер) | MoneyTransaction приход | счёт кассы |
| paymentout (исх. платёж) | MoneyTransaction расход | счёт |
| **Без прямого аналога** | | |
| Атрибуты/доп.поля товара (attributes) | — | перенести в Description/заметку или пропустить (решит Mac-Claude) |
| Корзина МойСклада (удалённые) | — | не переносим |
| Проекты/договоры (если есть) | — | проверить; при наличии — в заметку |
Решения по «без аналога» — см. migration-progress.md; Mac-Claude подтвердит.