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