diff --git a/docs/sprint2-progress.md b/docs/sprint2-progress.md index 78cc507..7df4c34 100644 --- a/docs/sprint2-progress.md +++ b/docs/sprint2-progress.md @@ -23,10 +23,14 @@ query filter. Stock-инвариант: после каждого Post/Unpost «не списать сверх остатка» (409). Миграция `Phase6b_Losses`. Web с фильтром по причине и колонкой stockAtStore. Тесты: 3 интеграционных (post снижает stock, over-write-off → 409, tenant-изоляция). -3. [ ] **P1-3 Перемещение (Transfer)** — Domain `Transfer`+`TransferLine` +3. [x] **P1-3 Перемещение (Transfer)** — Domain `Transfer`+`TransferLine` (FromStoreId → ToStoreId, обязательны и различны). Атомарная транзакция: `TransferOut` из From + `TransferIn` в To. EF, миграция, контроллер + Post/Unpost, Web. Кейс: post→unpost не оставляет orphan-движений. + ✅ Пара движений (Out + In) в одной Serializable-транзакции; обратная пара + в Unpost. Проверка «not short» на FromStore при Post и ToStore при Unpost. + Permission `TransferEdit`. Тесты: 4 интеграционных, ключевой проверяет что + движений ровно 2 после Post и ровно 4 после Unpost (никаких orphan). 4. [ ] **P1-4 Инвентаризация (Inventory)** — Domain `Inventory`+`InventoryLine` (productId, bookQty, actualQty, diff). EF, миграция. Контроллер: создание подгружает текущие остатки; Post создаёт `InventoryAdjustment` на diff. Web: