docs(sprint3): P1-9 done

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
nns 2026-05-28 11:14:41 +05:00
parent 63c58ef6c1
commit 3ded4db73a

View file

@ -17,10 +17,14 @@ Multi-tenant: все запросы фильтруются по `OrganizationId`
(EF8 не переводит «distinct count» в group-проекции с nullable-ключами). (EF8 не переводит «distinct count» в group-проекции с nullable-ключами).
`CsvHelper` + `ClosedXML`. Bonus: исправлен баг `RetailSalesController.Update` `CsvHelper` + `ClosedXML`. Bonus: исправлен баг `RetailSalesController.Update`
(DbUpdateConcurrency на свеже-созданном возврате). 5 интеграционных тестов. (DbUpdateConcurrency на свеже-созданном возврате). 5 интеграционных тестов.
2. [ ] **P1-9 Отчёт «Остатки на дату»**`/api/reports/stock` восстанавливает 2. [x] **P1-9 Отчёт «Остатки на дату»**`/api/reports/stock` восстанавливает
остатки на произвольную дату через журнал `StockMovement` (Σ движений до остатки на произвольную дату через журнал `StockMovement` (Σ движений до
даты по продукту). Web `/reports/stock`: выбор даты, фильтр магазин/группа, даты по продукту). Web `/reports/stock`: выбор даты, фильтр магазин/группа,
экспорт. Edge: дата в будущем, дата раньше первой операции. экспорт. Edge: дата в будущем, дата раньше первой операции.
✅ Реконструкция через Σ `StockMovement.Quantity` где `OccurredAt ≤ date`.
Стоимость — последний `UnitCost` движения до даты + fallback на `Product.Cost`.
Edge'ы покрыты тестами: 5 интеграционных (today=current, before-first→empty,
future=current, future-supply исключается на «сегодня», tenant-изоляция).
3. [ ] **P1-10 Отчёт «Прибыль»**`/api/reports/profit` = выручка себестоимость 3. [ ] **P1-10 Отчёт «Прибыль»**`/api/reports/profit` = выручка себестоимость
по периодам/группам/товарам. Cost-snapshot уже есть в `RetailSaleLine` по периодам/группам/товарам. Cost-snapshot уже есть в `RetailSaleLine`
(через `UnitCost` movement'а). Защита от деления на ноль при нулевой выручке. (через `UnitCost` movement'а). Защита от деления на ноль при нулевой выручке.