docs(sprint3): P1-9 done
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
63c58ef6c1
commit
3ded4db73a
|
|
@ -17,10 +17,14 @@ Multi-tenant: все запросы фильтруются по `OrganizationId`
|
|||
(EF8 не переводит «distinct count» в group-проекции с nullable-ключами).
|
||||
`CsvHelper` + `ClosedXML`. Bonus: исправлен баг `RetailSalesController.Update`
|
||||
(DbUpdateConcurrency на свеже-созданном возврате). 5 интеграционных тестов.
|
||||
2. [ ] **P1-9 Отчёт «Остатки на дату»** — `/api/reports/stock` восстанавливает
|
||||
2. [x] **P1-9 Отчёт «Остатки на дату»** — `/api/reports/stock` восстанавливает
|
||||
остатки на произвольную дату через журнал `StockMovement` (Σ движений до
|
||||
даты по продукту). Web `/reports/stock`: выбор даты, фильтр магазин/группа,
|
||||
экспорт. 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` = выручка − себестоимость
|
||||
по периодам/группам/товарам. Cost-snapshot уже есть в `RetailSaleLine`
|
||||
(через `UnitCost` movement'а). Защита от деления на ноль при нулевой выручке.
|
||||
|
|
|
|||
Loading…
Reference in a new issue