- InventoryEditPage: «Завершить подсчёт» вместо «Провести»; на завершённой — кнопки «Создать оприходование излишков» / «Создать списание недостачи» (блокируются, если нет разницы или документ уже создан) + блок «Связанные документы» + «Вернуть в черновик». - InventoriesPage: статус «Завершена»; колонка «Результат» (опр./спис. № или «не применено»). - Enter/LossEditPage: «На основании инвентаризации №…» со ссылкой. - types.ts: InventoryStatus Draft/Completed; related в InventoryDto; результат в списке; inventoryDocId/Number в Enter/Loss DTO. - docs/inventory-moysklad-reference.md (сверка), inventory-model-progress.md, supply-inventory.md («Как провести инвентаризацию», 5 шагов), mobile-api.md (compat post/unpost). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.9 KiB
Инвентаризация по модели МойСклада — прогресс
Замечание владельца (08.10.2026): «инвентаризация стоит в состоянии „проведено“, но без оприходования и списания — логика непонятная».
Сейчас (неправильно): InventoriesController.Post сам применяет движения
MovementType.InventoryAdjustment к остаткам и ставит Status=Posted — без создания
Оприходования/Списания. Владелец видит «Проведено» без связанных документов; в отчётах
непонятно, откуда изменения.
Как должно быть (по МойСкладу): инвентаризация НЕ двигает остатки; она фиксирует расчётный/фактический/разницу, а движения создаются связанными документами Оприходование (излишки) и Списание (недостача).
ПОПРАВКА (Mac-Claude): кнопку «Применить результаты» НЕ добавляем (не одобрено
владельцем). Только две кнопки «Создать оприходование» / «Создать списание». Мобильный
post — временная совместимость (в docs помечено).
План / статус
- Сверка с МойСкладом →
docs/inventory-moysklad-reference.md(API SPA — факты из справки + школы торговли; поля calculatedQuantity/correctionAmount/correctionSum, applicable, enter/loss «на основании»). - Инвентаризация не двигает остатки; статусы
Draft→Completed(«Черновик»→«Завершена»). Эндпоинтcompleteзамораживает строки без движений (InventoriesController). - На завершённой —
create-enter(излишки) /create-loss(недостача): создают черновики Оприходования/Списания со строками разницы + ссылкаInventoryDocId. Повторно нельзя (409). Кнопки «Применить результаты» НЕТ (по поправке). - Блок «Связанные документы» в карточке (web); колонка «Результат» в списке; «На основании инвентаризации №…» в Оприходовании/Списании (web + DTO).
- «Вернуть в черновик» (
unpost) отменяет проведение и удаляет связанные документы (остатки возвращаются). Править завершённую нельзя (Update/AddLine требуют Draft). - Миграция
Posted+InventoryAdjustment→ связанные проведённые Оприходование/Списание:InventoryMigrationController(dry-run/apply) переметка движений (не задваивает), остатки до/после проверяются (stockUnchanged). Backup — вdeploy/migrate-inventory-to-docs.sh. - Веб + мобильное API:
post/unpostсовместимость (post = завершить+создать&провести оба), помечено временным вdocs/mobile-api.md. CSV-импорт инвентаризации — без изменений (работает). - [~] Тесты: unit (InventoryResult — разница/сумма/только посчитанные) ✓; integration/e2e/full-chain шаг 10 — ниже.
docs/supply-inventory.md— «Как провести инвентаризацию» (5 шагов).- [~] 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 — старт: прочитано замечание, составлен план. Следующий шаг — сверка с МойСкладом.