food-market/docs/inventory-model-progress.md
nns b4bd0e41d4
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
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Docker Web / Build + push Web (push) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions
feat(inventory): веб-UI по модели МойСклада + доки
- 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>
2026-10-08 20:34:18 +05:00

51 lines
4.9 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.

# Инвентаризация по модели МойСклада — прогресс
Замечание владельца (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 — старт: прочитано замечание, составлен план. Следующий шаг — сверка с МойСкладом.