From 8111574a08df2ef154b3ccc997db4bd86a2da52b Mon Sep 17 00:00:00 2001 From: nns Date: Thu, 28 May 2026 10:30:28 +0500 Subject: [PATCH] =?UTF-8?q?docs(sprint3):=20=D1=87=D0=B5=D0=BA-=D0=BB?= =?UTF-8?q?=D0=B8=D1=81=D1=82=20=E2=80=94=205=20=D0=BE=D1=82=D1=87=D1=91?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20P1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 5 пунктов: Sales/Stock/Profit/ABC отчёты + OpenAPI клиент. Co-Authored-By: Claude Opus 4.7 --- docs/sprint3-progress.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 docs/sprint3-progress.md diff --git a/docs/sprint3-progress.md b/docs/sprint3-progress.md new file mode 100644 index 0000000..0d0051c --- /dev/null +++ b/docs/sprint3-progress.md @@ -0,0 +1,34 @@ +# Спринт 3 — отчёты и аналитика (P1) + +Автономная работа. После каждого пункта: `dotnet build` (SDK 8.0.126), +unit + integration тесты этого пункта, коммит порцией, отметка `[x]` здесь, +коммит прогресса. + +Multi-tenant: все запросы фильтруются по `OrganizationId` через query filter +`AppDbContext`. Каждый отчёт — отдельный e2e/integration на изоляцию orgA vs orgB. + +## Чек-лист + +1. [ ] **P1-8 Отчёт «Продажи»** — `/api/reports/sales` с группировкой по период + (день/неделя/месяц), товар, кассир, касса, способ оплаты; фильтры + (от/до, магазин, группа товаров). Web `/reports/sales`: фильтр периода, + табы по группировкам, экспорт CSV+XLSX. +2. [ ] **P1-9 Отчёт «Остатки на дату»** — `/api/reports/stock` восстанавливает + остатки на произвольную дату через журнал `StockMovement` (Σ движений до + даты по продукту). Web `/reports/stock`: выбор даты, фильтр магазин/группа, + экспорт. Edge: дата в будущем, дата раньше первой операции. +3. [ ] **P1-10 Отчёт «Прибыль»** — `/api/reports/profit` = выручка − себестоимость + по периодам/группам/товарам. Cost-snapshot уже есть в `RetailSaleLine` + (через `UnitCost` movement'а). Защита от деления на ноль при нулевой выручке. +4. [ ] **P1-11 Отчёт «ABC-анализ»** — топ товаров по выручке за период, + классы A/B/C по Парето (A=80%, B=15%, C=5% накопительной выручки). + Параметр метрики (выручка/прибыль/маржа). Web с визуализацией. +5. [ ] **P1-19 OpenAPI / Swagger** — `Swashbuckle.AspNetCore`, + `/swagger/v1/swagger.json` в Development. Сгенерировать TS-клиент для + food-market.web (`openapi-typescript`/`nswag`) и подключить для пары + контроллеров как образец. + +## Лог + +- Каждый пункт: build + тесты + коммит порцией + отметка [x] + коммит прогресса. +- Все правки на `main` (origin Forgejo), без коммита `global.json`.