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>
78 lines
6.1 KiB
Markdown
78 lines
6.1 KiB
Markdown
# Модуль «Деньги» (простой режим) — прогресс
|
||
|
||
**Старт:** 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.**
|