diff --git a/docs/sprint3-progress.md b/docs/sprint3-progress.md index ebbf088..33f95a3 100644 --- a/docs/sprint3-progress.md +++ b/docs/sprint3-progress.md @@ -25,9 +25,12 @@ Multi-tenant: все запросы фильтруются по `OrganizationId` Стоимость — последний `UnitCost` движения до даты + fallback на `Product.Cost`. Edge'ы покрыты тестами: 5 интеграционных (today=current, before-first→empty, future=current, future-supply исключается на «сегодня», tenant-изоляция). -3. [ ] **P1-10 Отчёт «Прибыль»** — `/api/reports/profit` = выручка − себестоимость +3. [x] **P1-10 Отчёт «Прибыль»** — `/api/reports/profit` = выручка − себестоимость по периодам/группам/товарам. Cost-snapshot уже есть в `RetailSaleLine` (через `UnitCost` movement'а). Защита от деления на ноль при нулевой выручке. + ✅ Cost-snapshot — `Product.Cost` (скользящее среднее; точный FIFO потребует + партий и вынесен из scope). Margin = profit/revenue·100, при revenue=0 + возвращаем 0. Возврат вычитает и выручку, и COGS симметрично. 3 интеграционных. 4. [ ] **P1-11 Отчёт «ABC-анализ»** — топ товаров по выручке за период, классы A/B/C по Парето (A=80%, B=15%, C=5% накопительной выручки). Параметр метрики (выручка/прибыль/маржа). Web с визуализацией.