docs(sprint2): P1-2 done

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
nns 2026-05-28 09:24:52 +05:00
parent 3172b0ea72
commit ab74d06706

View file

@ -16,9 +16,13 @@ query filter. Stock-инвариант: после каждого Post/Unpost
✅ Контроллер `api/inventory/enters`; миграция `Phase6a_Enters`; пункт «Оприходования»
в сайдбаре Admin/Storekeeper. Тесты: 4 интеграционных (post raise stock, unpost
откатывает, double post→409, tenant-изоляция, блокировка unpost при минусе).
2. [ ] **P1-2 Списание (Loss)** — Domain `Loss`+`LossLine` + enum `LossReason`
2. [x] **P1-2 Списание (Loss)** — Domain `Loss`+`LossLine` + enum `LossReason`
(Defect/Expired/Damage/Shortage/Other). EF, миграция, контроллер, Web,
`StockMovement` тип `WriteOff`.
✅ Контроллер `api/inventory/losses` (CRUD + Post/Unpost) с проверкой
«не списать сверх остатка» (409). Миграция `Phase6b_Losses`. Web с
фильтром по причине и колонкой stockAtStore. Тесты: 3 интеграционных
(post снижает stock, over-write-off → 409, tenant-изоляция).
3. [ ] **P1-3 Перемещение (Transfer)** — Domain `Transfer`+`TransferLine`
(FromStoreId → ToStoreId, обязательны и различны). Атомарная транзакция:
`TransferOut` из From + `TransferIn` в To. EF, миграция, контроллер + Post/Unpost,