Сводный отчёт systemic-2026-05-26.md + зелёные прогоны всех сценариев (82 шага, 0 падений). За сессию исправлено: refresh-rotation (TokenId + zero reuse-leeway), сериализуемое проведение приёмки против lost update, MoySklad BaseUrl в конфиг. Покрыты впервые: конкурентность приёмок, дашбордная выручка, импорт MoySklad (идемпотентность/маппинг). Зафиксированы gap'ы по нереализованным отчётам (профит/ABC/экспорт, ТЗ 2.12). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
3.3 KiB
3.3 KiB
E2E report: reports-stats
Запущен: 2026-05-26T06:28:57.128Z Длительность: 2.9с
Итог: 5 ✓ / 0 ✗ / 0 ⚠ / 0 ◯ (всего 5)
✓ Step step01_bootstrap: Орг A + товар + приёмка (остаток под продажи)
Длительность: 1462мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Орг A с товаром и остатком готова | ✓ 86c52764-ba04-43c5-b069-52ff3197e2b6 |
✓ Step step02_stats_reflect_posted_sales: stats: RevenueToday/Transactions/AvgTicket = сумме проведённых чеков, серия непрерывна
Длительность: 333мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Проведено 3 чека | ✓ totals=600,500,400 |
| api | GET stats → 200 | ✓ status=200 |
| api | RevenueToday == Σ проведённых чеков | ✓ today=1500 expected=1500 |
| api | TransactionsToday == 3 | ✓ tx=3 |
| api | RevenueThisMonth == RevenueToday (все чеки сегодня) | ✓ month=1500 |
| api | AvgTicketThisMonth == Revenue/Transactions | ✓ avg=500 expected=500.00 |
| api | Серия длиной 30 дней (default) | ✓ len=30 |
| api | Последний бакет серии (сегодня) == RevenueToday | ✓ last={rev:1500,tx:3} |
✓ Step step03_draft_sale_excluded: Черновик чека (не проведён) не попадает в stats
Длительность: 53мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Черновик чека создан (Status=Draft) | ✓ status=201 |
| api | RevenueToday не изменился (черновик исключён) | ✓ today=1500 expected=1500 |
| api | TransactionsToday остался 3 | ✓ tx=3 |
✓ Step step04_stats_tenant_isolated: stats орг A не видит продажи орг B и наоборот
Длительность: 1027мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Орг B готова | ✓ |
| api | В орг B проведён 1 чек | ✓ total=600 |
| api | stats орг A не включает продажу орг B | ✓ A.today=1500 A.tx=3 |
| api | stats орг B == только её 1 чек | ✓ B.today=600 B.tx=1 |
✓ Step step05_days_param_and_gaps: Параметр days меняет длину серии; профит/ABC-отчёты отсутствуют (gap)
Длительность: 25мс
| Тип | Проверка | Результат |
|---|---|---|
| api | days=7 → серия длиной 7 | ✓ len=7 |
| api | Отчётов /api/reports/* нет (ожидаемо 404) | ✓ profit=404 sales=404 |
Summary
- Passed: 5
- Failed: 0
- Warnings: 0
- Skipped: 0
Critical bugs
Нет.
Logic gaps
- ТЗ 2.12: отчёт «прибыль» (выручка − себестоимость по Cost-снимку RetailSaleLine) не реализован — RetailSaleLine не хранит снимок себестоимости, /stats отдаёт только валовую выручку.
- ТЗ 2.12: ABC-анализ, «остатки на дату» (SUM Movement до даты) и экспорт CSV/XLSX отсутствуют — отдельного ReportsController нет.