food-market/docs/money-moysklad-reference.md
nns 0977c639cd
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
docs(money): модель «деньги смены → остатки» + МойСклад reference + прогресс
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 03:11:10 +05:00

40 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# МойСклад — розничные деньги (reference для модели смены)
Как в МойСклад розничные операции отражаются в деньгах (по
`https://dev.moysklad.ru/doc/api/remap/1.2/documents/` и известной семантике;
страница docs отдаётся JS-ом, поэтому ниже — сводка модели, а не дословная цитата).
## Сущности
- **Розничная смена** `retailshift` — контейнер смены на точке (ККМ). Хранит
начальный остаток (размен), суммы продаж нал/безнал, возвраты, внесения/изъятия,
итоговые суммы на закрытие.
- **Розничная продажа** `retaildemand` — чек. Внутри — оплата: `cashSum` (нал) и
`noCashSum`/`bankPercent` (безнал, эквайринг). Привязана к смене.
- **Розничный возврат** `retailsalesreturn` — возврат покупателю (нал/безнал).
- **Внесение/Изъятие** `retaildrawercashin` / `retaildrawercashout` — движение
наличных в кассе ККМ внутри смены (внесение разменом, изъятие инкассацией).
- **Приходный/расходный ордер** `cashin` / `cashout`, платёж `paymentin`/`paymentout`
— общие денежные документы (не розничные), влияют на остаток счёта/кассы.
## Как попадает в деньги
- Касса (денежный счёт типа «касса») = размен + Σ продаж нал − Σ возвратов нал +
Σ внесений − Σ изъятий. Безнал (карты) идёт на привязанный **расчётный счёт/
эквайринг**, отдельно от наличной кассы.
- Каждый `retaildemand`/`retailsalesreturn`/`drawercashin|out` — это движение по
счёту; в отчёте «Деньги» (движение ДС) они видны по типам.
- **Закрытие смены**: фиксируется фактический остаток наличных; **расхождение**
(факт − расчёт) оформляется как излишек/недостача — отдельное движение кассы.
- Размен (начальный остаток смены) — НЕ новое поступление: это те же деньги, что
уже в кассе; он не задваивается как приход.
## Наша адаптация (food-market, простой режим)
- Материализуем движения смены в `money_transactions` ПРИ ЗАКРЫТИИ (а не по каждому
чеку) — проще для простого магазина, остаток кассы/эквайринга становится верным
сразу после закрытия. Типы — `MoneyTransactionCategory` (RetailSalesCash/…/ShiftSurplus).
- Карта → отдельный счёт «Эквайринг» смены (как расчётный счёт в МойСклад).
- Размен не материализуем (деньги уже в кассе). Итог кассы после закрытия = факту
наличных, если по кассе не было других операций.
- Отличие: МойСклад проводит `retaildemand` в деньги сразу (живой остаток в течение
смены); у нас остаток кассы меняется при закрытии, но «живой» нал смены для
контроля выплат считается на лету (размен + продажи − возвраты + внесения − выплаты).