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
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.9 KiB
3.9 KiB
МойСклад — розничные деньги (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в деньги сразу (живой остаток в течение смены); у нас остаток кассы меняется при закрытии, но «живой» нал смены для контроля выплат считается на лету (размен + продажи − возвраты + внесения − выплаты).