docs(sprint2): P1-3 done

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
nns 2026-05-28 09:32:47 +05:00
parent fa1e123327
commit 6254b61caa

View file

@ -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: