Замечание владельца: инвентаризация стояла «Проведено» без оприходования/списания. Переделано по МойСкладу (docs/inventory-moysklad-reference.md): - InventoryStatus Draft→Completed (было Posted; значение 1 то же). Инвентаризация остатки НЕ двигает: endpoint complete замораживает строки без движений. - create-enter (излишки diff>0) / create-loss (недостача diff<0) — создают черновики Оприходования/Списания со строками разницы + ссылка InventoryDocId. Повторно нельзя (409). - Кнопки «Применить результаты» НЕТ (поправка Mac-Claude — не одобрено владельцем). - unpost («вернуть в черновик») отменяет проведение и удаляет связанные документы. - post/unpost — временная совместимость для мобильного «FM Склад» (post = завершить + создать и провести оба документа); помечено в docs/mobile-api.md. - Enter/Loss: поле InventoryDocId (+ миграция Phase38) + в DTO «на основании инвентаризации №…». - InventoryResult (application) — чистая разбивка diff→излишки/недостача (unit-тесты: разница/сумма/только посчитанные строки/округление). - InventoryMigrationController (dry-run/apply): старые Posted+InventoryAdjustment → связанные проведённые документы переметкой движений (не задваивает), с проверкой неизменности остатков. Скрипт deploy/migrate-inventory-to-docs.sh (backup + запуск). - Демо-сидеры: инвентаризации теперь Completed без прямых движений. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
35 lines
3.2 KiB
Markdown
35 lines
3.2 KiB
Markdown
# Инвентаризация по модели МойСклада — прогресс
|
||
|
||
Замечание владельца (08.10.2026): «инвентаризация стоит в состоянии „проведено“,
|
||
но без оприходования и списания — логика непонятная».
|
||
|
||
**Сейчас (неправильно):** `InventoriesController.Post` сам применяет движения
|
||
`MovementType.InventoryAdjustment` к остаткам и ставит `Status=Posted` — без создания
|
||
Оприходования/Списания. Владелец видит «Проведено» без связанных документов; в отчётах
|
||
непонятно, откуда изменения.
|
||
|
||
**Как должно быть (по МойСкладу):** инвентаризация НЕ двигает остатки; она фиксирует
|
||
расчётный/фактический/разницу, а движения создаются связанными документами
|
||
Оприходование (излишки) и Списание (недостача).
|
||
|
||
## План / статус
|
||
0. [ ] Сверка с МойСкладом (headless Playwright) → `docs/inventory-moysklad-reference.md`.
|
||
1. [ ] Инвентаризация не двигает остатки; статусы «Черновик» → «Завершена» (без «Проведено»).
|
||
2. [ ] На завершённой — кнопки «Создать оприходование излишков» / «Создать списание недостачи»
|
||
/ «Применить результаты» (обе). Документы со строками разницы + ссылка на инвентаризацию.
|
||
3. [ ] Блок «Связанные документы» в карточке; колонка «Результат» в списке; обратная ссылка в enter/loss.
|
||
4. [ ] Отмена проведения связанных — штатно; инвентаризацию нельзя вернуть в черновик при
|
||
проведённых связанных (понятный отказ).
|
||
5. [ ] Миграция Posted+InventoryAdjustment → связанные проведённые Оприходование/Списание
|
||
(движения перенести, не задвоить); статус → «Завершена». Остатки до/после совпадают. Backup stage.
|
||
6. [ ] Веб + мобильное API (post/unpost совместимо: post = завершить+применить) + CSV-импорт.
|
||
7. [ ] Тесты: unit / integration / e2e на стенде; full-chain шаг 10 + UAT.
|
||
8. [ ] docs/supply-inventory.md — инструкция «Как провести инвентаризацию».
|
||
9. [ ] deploy-stage; коммиты в main (Co-Authored-By: Claude Opus 5.5); global.json не коммитить; не мешать с rebrand.
|
||
|
||
## Что НЕ трогаем
|
||
Прод, shared-postgres, global.json, gateway nginx, sklad.
|
||
|
||
## Журнал
|
||
- 08.10 — старт: прочитано замечание, составлен план. Следующий шаг — сверка с МойСкладом.
|