# Инвентаризация по модели МойСклада — прогресс Замечание владельца (08.10.2026): «инвентаризация стоит в состоянии „проведено“, но без оприходования и списания — логика непонятная». **Сейчас (неправильно):** `InventoriesController.Post` сам применяет движения `MovementType.InventoryAdjustment` к остаткам и ставит `Status=Posted` — без создания Оприходования/Списания. Владелец видит «Проведено» без связанных документов; в отчётах непонятно, откуда изменения. **Как должно быть (по МойСкладу):** инвентаризация НЕ двигает остатки; она фиксирует расчётный/фактический/разницу, а движения создаются связанными документами Оприходование (излишки) и Списание (недостача). **ПОПРАВКА (Mac-Claude):** кнопку «Применить результаты» НЕ добавляем (не одобрено владельцем). Только две кнопки «Создать оприходование» / «Создать списание». Мобильный `post` — временная совместимость (в docs помечено). ## План / статус 0. [x] Сверка с МойСкладом → `docs/inventory-moysklad-reference.md` (API SPA — факты из справки + школы торговли; поля calculatedQuantity/correctionAmount/correctionSum, applicable, enter/loss «на основании»). 1. [x] Инвентаризация не двигает остатки; статусы `Draft`→`Completed` («Черновик»→«Завершена»). Эндпоинт `complete` замораживает строки без движений (`InventoriesController`). 2. [x] На завершённой — `create-enter` (излишки) / `create-loss` (недостача): создают черновики Оприходования/Списания со строками разницы + ссылка `InventoryDocId`. Повторно нельзя (409). Кнопки «Применить результаты» НЕТ (по поправке). 3. [x] Блок «Связанные документы» в карточке (web); колонка «Результат» в списке; «На основании инвентаризации №…» в Оприходовании/Списании (web + DTO). 4. [x] «Вернуть в черновик» (`unpost`) отменяет проведение и удаляет связанные документы (остатки возвращаются). Править завершённую нельзя (Update/AddLine требуют Draft). 5. [x] Миграция `Posted+InventoryAdjustment` → связанные проведённые Оприходование/Списание: `InventoryMigrationController` (dry-run/apply) переметка движений (не задваивает), остатки до/после проверяются (`stockUnchanged`). Backup — в `deploy/migrate-inventory-to-docs.sh`. 6. [x] Веб + мобильное API: `post`/`unpost` совместимость (post = завершить+создать&провести оба), помечено временным в `docs/mobile-api.md`. CSV-импорт инвентаризации — без изменений (работает). 7. [~] Тесты: unit (InventoryResult — разница/сумма/только посчитанные) ✓; integration/e2e/full-chain шаг 10 — ниже. 8. [x] `docs/supply-inventory.md` — «Как провести инвентаризацию» (5 шагов). 9. [~] deploy-stage + коммиты в main (Opus 5.5), global.json не коммитить, не мешать с rebrand — ниже. ### Домен/миграция - `InventoryStatus { Draft=0, Completed=1 }` (переименован Posted→Completed, значение то же). - `Enter.InventoryDocId` / `Loss.InventoryDocId` (nullable) + EF-миграция `Phase38_InventoryLinks`. - `InventoryResult` (application) — чистая разбивка diff→излишки/недостача (юнит-тесты). - Демо-сидеры: инвентаризации теперь `Completed` без прямых движений. ## Что НЕ трогаем Прод, shared-postgres, global.json, gateway nginx, sklad. ## Журнал - 08.10 — старт: прочитано замечание, составлен план. Следующий шаг — сверка с МойСкладом.