food-market/docs/money-module-progress.md
nns 659a749d7f
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
docs(money): пользовательская инструкция docs/money.md + финал прогресс-дока
docs/money.md — как открыть смену, оплатить приёмку, смотреть долги/остатки,
права ролей. Прогресс-док: пп.8–9 отмечены, журнал с тремя фиксами по ходу
e2e (back-fill прав, date-only→UTC, список счетов 500). Итог 10/10.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-07 22:49:21 +05:00

6.1 KiB
Raw Permalink Blame History

Модуль «Деньги» (простой режим) — прогресс

Старт: 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 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).
  • 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.