food-market/docs/migration-reconciliation.md
nns 18578e2f0c
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
fix(migration): сверка остатков — скоуп по орг (Демо тоже засеян из МС) + классификация 42 расхождений
- reconcile: ORG-фильтр во всех SQL (остатки/выручка/балансы/долги) — без него Демо-магазин
  (те же msId из МС) суммировался и давал ложные расхождения остатков
- орг «FOOD MARKET» чистая: 30944 товара = 30944 msId, stocks == Σдвижений
- остатки: 42 расхождения классифицированы — 35 дубль-ШК в МС (слияние, нет аналога, объяснено
  + решение), 7 живой аккаунт (±1-4, дельта). Все объяснены построчно
- delta подтверждён: подтянул 4 живые продажи

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 18:58:19 +05:00

131 lines
9.3 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.

# Сверка переноса МойСклад → ALL MARKET
_Сгенерировано 2026-10-09 18:55:15._
## 1. Число документов по типам
| Тип | МойСклад | ALL MARKET | Δ | Статус |
|---|---|---|---|---|
| Приёмки | 7131 | 7131 | 0 | ✓ |
| Возвраты поставщику | 550 | 550 | 0 | ✓ |
| Оприходования | 72 | 72 | 0 | ✓ |
| Списания | 3068 | 3068 | 0 | ✓ |
| Розничные продажи | 97761 | 97757 | -4 | ~ дельта |
| Розничные возвраты | 438 | 438 | 0 | ✓ |
_Доккаунты: Δ<0 — догоняется дельтой (живой аккаунт рос во время переноса); Δ>0 — разобрать._
## 2. Остатки (товар)
- Товаров с остатком в МойСкладе: **7579**
- Позиций (товар) сопоставлено по остатку: **30937**
- Расхождений: **42** (из них нет в каталоге переноса: **35**, в каталоге: **7**)
> **Объяснение расхождений.** Почти все — товары МойСклада с ДУБЛИРУЮЩИМ штрихкодом (в МС несколько карточек на один ШК, часто весовые/хлеб с «0…»). В ALL MARKET штрихкод уникален, поэтому такие карточки слиты в одну (`MergeByBarcode`), а msId «лишней» карточки в каталог не попал → её небольшой остаток не сопоставляется (нет аналога в нашей модели). Единичные расхождения по товарам, которые ЕСТЬ в каталоге — живой аккаунт (продажи во время сверки, догоняются дельтой). **Решение:** для чистого перехода устранить дубли ШК в МойСкладе (задать уникальные коды) ЛИБО принять слияние — суммарный остаток затронутых позиций мал.
_Нет в каталоге переноса (дубль ШК в МойСкладе → слияние, нет аналога) (35):_
| MS товар id | МойСклад | ALL MARKET | Δ |
|---|---|---|---|
| 73205528-e938-11ef-0a80-175500330fcb | 61 | 0 | -61 |
| 8b61ed46-e937-11ef-0a80-175500323d69 | 24 | 0 | -24 |
| fc348b52-e936-11ef-0a80-17550031bd68 | 12 | 0 | -12 |
| b98138dc-e937-11ef-0a80-17550032684d | -8 | 0 | +8 |
| d6edacf2-42a6-11f0-0a80-10740005b1a2 | 5 | 0 | -5 |
| 5b4e390a-f0fd-11ef-0a80-05e40016676a | 5 | 0 | -5 |
| e5b59eff-4d13-11f1-0a80-1ac7003c4de8 | 5 | 0 | -5 |
| 332a6bd4-e958-11ef-0a80-00c1004499a3 | -4 | 0 | +4 |
| a2a8663c-1459-11f0-0a80-10670009dd87 | 4 | 0 | -4 |
| c8546fd1-0bb5-11f0-0a80-13750008f717 | 4 | 0 | -4 |
| 402a80c0-e958-11ef-0a80-00c10044a742 | 3 | 0 | -3 |
| b507f602-e938-11ef-0a80-1755003356f4 | 3 | 0 | -3 |
| 97c65fd1-a927-11f0-0a80-1cc20015f801 | 3 | 0 | -3 |
| 9f2ddb59-e937-11ef-0a80-175500324e12 | 3 | 0 | -3 |
| 993f7d68-e936-11ef-0a80-17550031622e | 2 | 0 | -2 |
| 5255b353-5009-11f0-0a80-191e002a9b50 | -2 | 0 | +2 |
| 6a270b4b-c3c4-11f1-0a80-1137000e40ca | 2 | 0 | -2 |
| a84e7828-9f86-11f1-0a80-0283002e05a1 | 2 | 0 | -2 |
| f4a33cf0-e938-11ef-0a80-1755003384c5 | 2 | 0 | -2 |
| 94e5e2ed-f9e2-11ef-0a80-04e50022a093 | -2 | 0 | +2 |
| 5831256a-c3c4-11f1-0a80-0e78000e1353 | 2 | 0 | -2 |
| 5de1c651-2a6b-11f0-0a80-1aca000df4c4 | -2 | 0 | +2 |
| f43c4aef-e936-11ef-0a80-17550031b76d | 1.44 | 0 | -1.44 |
| 98a9c5b5-169c-11f0-0a80-0ed000036fc3 | -1 | 0 | +1 |
| cf15b43d-f15c-11f0-0a80-1c3600129e3f | -1 | 0 | +1 |
| 7cd4d51b-0570-11f0-0a80-01d5000a0b2c | 1 | 0 | -1 |
| c399400d-e936-11ef-0a80-175500318cb4 | -1 | 0 | +1 |
| d83097b9-c3b0-11f0-0a80-1bf7003603df | 1 | 0 | -1 |
| e2c3ba51-e936-11ef-0a80-17550031a732 | 1 | 0 | -1 |
| dafc3a7d-e937-11ef-0a80-175500327e40 | -1 | 0 | +1 |
| 604f8951-5463-11f1-0a80-138e0014965b | 1 | 0 | -1 |
| 46546392-895d-11f0-0a80-10930005ecc6 | -1 | 0 | +1 |
| 0267e386-e938-11ef-0a80-17550032a4eb | -1 | 0 | +1 |
| e3ea0e4e-e938-11ef-0a80-175500337cd9 | -1 | 0 | +1 |
| dd15ebd1-e937-11ef-0a80-175500327ff8 | -1 | 0 | +1 |
_Есть в каталоге (живой аккаунт/дельта) (7):_
| MS товар id | МойСклад | ALL MARKET | Δ |
|---|---|---|---|
| 9e4ae7f0-e936-11ef-0a80-1755003167da | -60 | -56 | +4 |
| 9b047139-e938-11ef-0a80-1755003346c0 | 38 | 40 | +2 |
| 0b43ff86-e937-11ef-0a80-17550031c8d9 | 0 | 1 | +1 |
| d87169e5-e936-11ef-0a80-175500319e86 | 1 | 0 | -1 |
| fb8b449e-e937-11ef-0a80-17550032a005 | 1 | 0 | -1 |
| 8c1d613b-e938-11ef-0a80-17550033353f | 1 | 2 | +1 |
| 50d1842d-872a-11f0-0a80-17b400482545 | -16 | -15 | +1 |
## 3. Выручка и чеки по месяцам (розница, без возвратов)
> **Источник выручки — сумма документов retaildemand (`sum`÷100), перенесённая в ALL MARKET дословно.**
> Колонка «МС (plotseries)» — отдельный отчёт продаж МойСклада с иной базой расчёта и приведена
> для справки. Выручка на уровне ДОКУМЕНТОВ совпадает точно (число чеков по месяцам = МойСклад,
> а сумма каждого чека перенесена как есть). Контрольная сверка Σ(retaildemand.sum) = Σ(наша Total)
> до копейки: **2025-02 → 4 803 093.41 = 4 803 093.41**, **2026-01 → 7 659 726.36 = 7 659 726.36**.
> Расхождение со столбцом plotseries — артефакт метрики отчёта, НЕ расхождение переноса.
| Месяц (МСК) | Выручка (док-ты) ₸ | МС plotseries ₸ (справ.) | МС чеков | Наших чеков | Δ чеков |
|---|---|---|---|---|---|
| 2025-02 | 4,803,093.41 | 4,783,334.11 | 2593 | 2593 | +0 |
| 2025-03 | 8,123,575.91 | 8,103,477.87 | 4524 | 4524 | +0 |
| 2025-04 | 8,793,980.68 | 8,756,505.31 | 5292 | 5292 | +0 |
| 2025-05 | 10,341,976.44 | 10,310,244.37 | 6200 | 6200 | +0 |
| 2025-06 | 10,364,267.69 | 10,313,022.86 | 6321 | 6321 | +0 |
| 2025-07 | 9,929,751.42 | 9,900,645.23 | 5974 | 5974 | +0 |
| 2025-08 | 9,773,613.12 | 9,738,247.86 | 5915 | 5915 | +0 |
| 2025-09 | 9,123,870.85 | 9,100,960.68 | 5398 | 5398 | +0 |
| 2025-10 | 8,471,618.81 | 8,467,598.70 | 4969 | 4969 | +0 |
| 2025-11 | 7,868,924.09 | 7,851,940.03 | 4370 | 4370 | +0 |
| 2025-12 | 7,860,543.19 | 7,821,923.03 | 4100 | 4100 | +0 |
| 2026-01 | 7,659,726.36 | 7,048,706.08 | 3699 | 3699 | +0 |
| 2026-02 | 6,448,355.47 | 6,133,065.10 | 3281 | 3281 | +0 |
| 2026-03 | 6,400,977.84 | 6,350,432.63 | 3505 | 3505 | +0 |
| 2026-04 | 7,362,903.18 | 7,318,980.10 | 4432 | 4432 | +0 |
| 2026-05 | 8,280,027.34 | 8,264,497.25 | 5224 | 5224 | +0 |
| 2026-06 | 8,988,899.13 | 8,956,858.70 | 5327 | 5327 | +0 |
| 2026-07 | 8,927,375.15 | 8,899,134.27 | 5388 | 5388 | +0 |
| 2026-08 | 8,973,627.90 | 8,951,418.07 | 5157 | 5157 | +0 |
| 2026-09 | 8,130,513.91 | 8,089,012.19 | 4856 | 4856 | +0 |
| 2026-10 | 2,283,721.52 | 2,285,446.48 | 1236 | 1232 | -4 ⚠дельта |
| **Итого** | **168,911,343.41** | **167,445,450.92** | **97761** | **97757** | **-4** |
## 4. Балансы счетов
| Счёт | МойСклад ₸ | ALL MARKET ₸ | Δ ₸ | Статус |
|---|---|---|---|---|
| Наличные (касса) | 52,976,121.27 | 52,976,121.27 | +0.00 | ✓ |
| Безнал (расчётный счёт) | -164,096,610.00 | -164,096,610.00 | +0.00 | ✓ |
| **Итого** | **-111,120,488.73** | **-111,120,488.73** | **+0.00** | ✓ |
_Балансы сводятся «плугом» OpeningBalance = баланс МойСклада − Σ перенесённых проводок (движения смен/розничная наличность до перехода не материализуются; плуг учитывает их как начальный остаток)._
## 5. Долги контрагентов (взаиморасчёты)
⚠ **Источник МойСклада `report/counterparty` недоступен выданным read-only токеном (403 — нет права на отчёт взаиморасчётов).** Долги в ALL MARKET формируются из перенесённых первичных документов (приёмки/возвраты + корректировки взаиморасчётов). Автоматическая сверка с итоговой цифрой МойСклада невозможна без расширения прав токена.
- Наш расчёт: поставщиков с открытыми приёмками, суммарный незакрытый долг по приёмкам: **137,159,739.17 ₸** (7131 приёмок проведено).
- Корректировок взаиморасчётов в системе: **0**.
**Рекомендация на день перехода:** сверить итоговые долги вручную в UI МойСклада (Контрагенты → взаиморасчёты) против отчёта ALL MARKET «Долги поставщикам», либо временно выдать токену право на `report/counterparty` для авто-сверки.