food-market/src
nns 63c58ef6c1 feat(reports): отчёт «Остатки на дату» с реконструкцией (P1-9)
GET /api/reports/stock?date=… — восстанавливает остатки (Product, Store)
агрегацией журнала StockMovement до указанной даты. На «сейчас» совпадает
с материализованным Stock (инвариант учёта); на прошлую дату — реальная
реконструкция через Σ движений.

Edge-cases:
• дата в будущем → текущий остаток (движений из будущего нет);
• дата раньше первой операции → пусто (пара не существовала);
• операция с future-датой исключена снимком на «сегодня».

Стоимость: последний UnitCost движения до даты на пару (Product, Store);
fallback на Product.Cost если в журнале не было ни одной партии. Это
приближённая оценка — точный FIFO требует партий.

Параметры: storeId, productGroupId, includeZero (вернуть и нулевые
позиции). Export CSV/XLSX через тот же ReportExport.

Web: /reports/stock — дата, фильтры, экспорт, итоговая стоимость.

Тесты: 5 интеграционных (today=current, before-first-mov→empty, future=current,
date-before-op-excludes-it, tenant-изоляция).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 11:14:24 +05:00
..
food-market.api feat(reports): отчёт «Остатки на дату» с реконструкцией (P1-9) 2026-05-28 11:14:24 +05:00
food-market.application test(unit): xUnit-проект food-market.UnitTests, 23 теста (P1-20) 2026-05-27 03:01:56 +05:00
food-market.domain feat(supplier-returns): возврат поставщику (P1-7) 2026-05-28 09:58:29 +05:00
food-market.infrastructure feat(supplier-returns): возврат поставщику (P1-7) 2026-05-28 09:58:29 +05:00
food-market.pos Phase 0: project scaffolding and end-to-end auth 2026-04-21 13:59:13 +05:00
food-market.pos.core Phase 0: project scaffolding and end-to-end auth 2026-04-21 13:59:13 +05:00
food-market.public fix(validation): validatePassword проверяет заглавную и цифру (соответствует хинту) 2026-05-18 12:52:59 +05:00
food-market.shared Phase 0: project scaffolding and end-to-end auth 2026-04-21 13:59:13 +05:00
food-market.web feat(reports): отчёт «Остатки на дату» с реконструкцией (P1-9) 2026-05-28 11:14:24 +05:00