# Модуль «Деньги» (простой режим) — прогресс **Старт:** 2026-10-07. **Решение владельца от 07.10.2026:** собрать базовый финансовый контур в простом режиме (счета, кассовые/безналичные движения, оплата приёмок, долги поставщикам, смены кассы, отчёт «Деньги»). ## Чек-лист - [x] **0. Сверка с МойСкладом** → `docs/money-moysklad-reference.md` - [x] **1. Счета и кассы** (тип: касса / сейф / банк, начальный остаток, магазин, активный флаг; поддержка нескольких банковских счетов на магазин; счёт эквайринга) — domain + миграция, сидер статей расходов - [x] **2. Денежные документы** (PaymentIn/Out, CashIn/Out, Transfer между своими счетами; статьи расходов; проведение/отмена; аудит) — MoneyService с Serializable-транзакциями, controllers `MoneyTransactionsController` + `ExpenseItemsController` - [x] **3. Оплата поставщикам** (платёж ↔ приёмки/возвраты с распределением, payedSum на приёмке, статус оплаты, кнопка «Оплатить» из приёмки, частичная оплата) — колонка `PayedSum`, `MoneyTransactionLink`, `SuppliesController` отдаёт `PaymentStatus` + фильтр - [x] **4. Взаиморасчёты (долги поставщикам)** (отчёт, корректировки, самая старая неоплаченная дата) — `CounterpartyAdjustmentsController`, `MoneyReportsController.SupplierDebts` - [x] **5. Смены кассы** (open/close, внесения/выплаты, «должно быть ↔ по факту», Z-отчёт, запрет продажи без смены) — `CashShiftsController`, Z-отчёт в `/shifts/{id}/report`, проверка в `RetailSalesController.PostCoreAsync` - [x] **6. Отчёт «Деньги»** (остатки по счетам, движение за период, инвариант остатков) — `MoneyReportsController.Balances`/`Movement` - [x] **7. UI и меню** (раздел «Деньги»: Отчёт/Счета/Платежи/Смены/Долги; блок оплаты в приёмке `SupplyPaymentSection`; колонка+фильтр оплаты в списке приёмок; mobile-first через ListPageShell/Modal; меню: админ — всё, кассир — только смены, кладовщик — ничего (оплаченность видит в приёмке). `src/pages/money/*`, `src/lib/money.ts`, роуты в App.tsx, i18n ru/en) - [x] **8. Тесты** — unit `MoneyMathTests` 25/25 (статус оплаты, ожидаемая наличность, разница смены, остаток счёта, долг поставщика, защита от переплаты, money-флаги ролей); integration `MoneyModuleTests` 8/8 на реальном Postgres (мультитенантность, инвариант остатка, частичная→полная оплата, переплата→409, долг поставщика, продажа без смены→409 + после open→ok, расчёт expected/difference, date-only openingDate + список с данными); e2e на стенде РЕАЛЬНЫМИ запросами (создание счёта date-only, CashIn→баланс 80000, open-shift→drawer→close expected=9000/diff=500) + menu-walk (quality-watchdog step 9) **3/3 зелёный** (admin 33 пункта вкл. 5 money- страниц, keeper 17 без денег, cashier 8 вкл. /money/shifts; 0 4xx/5xx/toast/ console.error). - [x] **9. Деплой + документация** — `~/deploy-stage.sh` (api+web на test.admin.food-market.kz, миграция Phase33a + back-fill применились на старте), `docs/money.md` (инструкция: счета, платежи, оплата приёмки, долги, смены, отчёт). ## Границы **НЕ в этом спринте:** банк-клиент / выгрузка платёжек, импорт выписок, валюты, зарплата, полный P&L. **Запрещено трогать:** прод, shared-postgres, `global.json`, gateway nginx, соседний проект `sklad`. ## Журнал ### 2026-10-07 - Старт. Создан этот прогресс-док. Готовлю `docs/money-moysklad-reference.md` через headless Playwright (SPA-рендер нужен). - Бэкенд пп.0–6 (домен/инфра/API/миграция/сидер) закоммичен, build зелёный. - UI п.7: раздел «Деньги» (5 страниц + блок оплаты приёмки + колонка/фильтр оплаты), роуты, меню (admin/cashier/keeper), i18n ru/en. tsc+eslint зелёные. - MoneyMath вынесен из сервиса/контроллеров → unit 25/25, integration 8/8. - Деплой на stage. Поймано и починено по ходу e2e/menu-walk: 1. **back-fill** money-прав кассиру и статей расходов для орг, созданных до Sprint 33 (`EnsureMoneyDefaultsAsync`) — иначе 403 на /money/shifts. 2. **date-only даты** (UI шлёт `YYYY-MM-DD`) → Npgsql 500 на timestamptz → `MoneyMath.AsUtc` во всех money-контроллерах. 3. **список счетов 500 на данных** — `EF.Property(xmin)` в памяти на AsNoTracking → перенесён в server-side Select. Все три закрыты регресс-тестами. menu-walk 3/3, реальные запросы на стенде ОК. - **ИТОГ: 10/10 (п.0 + пп.1–9). Модуль «Деньги» готов на stage.**