Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
docs/money.md — как открыть смену, оплатить приёмку, смотреть долги/остатки, права ролей. Прогресс-док: пп.8–9 отмечены, журнал с тремя фиксами по ходу e2e (back-fill прав, date-only→UTC, список счетов 500). Итог 10/10. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6.1 KiB
6.1 KiB
Модуль «Деньги» (простой режим) — прогресс
Старт: 2026-10-07. Решение владельца от 07.10.2026: собрать базовый финансовый контур в простом режиме (счета, кассовые/безналичные движения, оплата приёмок, долги поставщикам, смены кассы, отчёт «Деньги»).
Чек-лист
- 0. Сверка с МойСкладом →
docs/money-moysklad-reference.md - 1. Счета и кассы (тип: касса / сейф / банк, начальный остаток, магазин, активный флаг; поддержка нескольких банковских счетов на магазин; счёт эквайринга) — domain + миграция, сидер статей расходов
- 2. Денежные документы (PaymentIn/Out, CashIn/Out, Transfer между
своими счетами; статьи расходов; проведение/отмена; аудит) — MoneyService
с Serializable-транзакциями, controllers
MoneyTransactionsController+ExpenseItemsController - 3. Оплата поставщикам (платёж ↔ приёмки/возвраты с распределением,
payedSum на приёмке, статус оплаты, кнопка «Оплатить» из приёмки,
частичная оплата) — колонка
PayedSum,MoneyTransactionLink,SuppliesControllerотдаётPaymentStatus+ фильтр - 4. Взаиморасчёты (долги поставщикам) (отчёт, корректировки,
самая старая неоплаченная дата) —
CounterpartyAdjustmentsController,MoneyReportsController.SupplierDebts - 5. Смены кассы (open/close, внесения/выплаты, «должно быть ↔ по факту»,
Z-отчёт, запрет продажи без смены) —
CashShiftsController, Z-отчёт в/shifts/{id}/report, проверка вRetailSalesController.PostCoreAsync - 6. Отчёт «Деньги» (остатки по счетам, движение за период,
инвариант остатков) —
MoneyReportsController.Balances/Movement - 7. UI и меню (раздел «Деньги»: Отчёт/Счета/Платежи/Смены/Долги;
блок оплаты в приёмке
SupplyPaymentSection; колонка+фильтр оплаты в списке приёмок; mobile-first через ListPageShell/Modal; меню: админ — всё, кассир — только смены, кладовщик — ничего (оплаченность видит в приёмке).src/pages/money/*,src/lib/money.ts, роуты в App.tsx, i18n ru/en) - 8. Тесты — unit
MoneyMathTests25/25 (статус оплаты, ожидаемая наличность, разница смены, остаток счёта, долг поставщика, защита от переплаты, money-флаги ролей); integrationMoneyModuleTests8/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). - 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:
- back-fill money-прав кассиру и статей расходов для орг, созданных до
Sprint 33 (
EnsureMoneyDefaultsAsync) — иначе 403 на /money/shifts. - date-only даты (UI шлёт
YYYY-MM-DD) → Npgsql 500 на timestamptz →MoneyMath.AsUtcво всех money-контроллерах. - список счетов 500 на данных —
EF.Property(xmin)в памяти на AsNoTracking → перенесён в server-side Select. Все три закрыты регресс-тестами. menu-walk 3/3, реальные запросы на стенде ОК.
- back-fill money-прав кассиру и статей расходов для орг, созданных до
Sprint 33 (
- ИТОГ: 10/10 (п.0 + пп.1–9). Модуль «Деньги» готов на stage.