HandyCafe Docs
owner cashier

Кошелек участника

Кошелек участника - система денежного баланса для предоплаты услуг кафе. Вместо оплаты наличными за каждую сессию участник может внести средства на кошелек, и система будет автоматически списывать из него при использовании ПК, консолей или заказе товаров.

Архитектура на основе кредитов

Кошелек использует систему кредитов, а не единый текущий баланс. При каждом добавлении средств система создает новый кредит кошелька. Каждый кредит - отдельная запись с собственным балансом, источником, сроком действия и ограничением по устройствам. Такая архитектура обеспечивает:

  • Полную прослеживаемость источника каждой единицы баланса.
  • Независимые сроки действия для каждого кредита.
  • Ограничения по устройствам (некоторые кредиты только для ПК, другие только для консолей).
  • Четкое разделение оплаченных средств и промо-бонусов.

Общий баланс кошелька участника - сумма остатков по всем активным кредитам.

Типы кредитов

Каждый кредит кошелька имеет тип, определяющий источник средств:

Тип кредита Описание
Оплаченный Участник оплатил средства (наличные, карта или другой способ оплаты). Создается при покупке денежного пакета акции.
Бонусный Промо-средства, предоставленные как часть покупки пакета.
Ручной Внесены кассиром или администратором вручную. Для поощрительных кредитов или специальных условий.
Корректировка Административная корректировка для исправления ошибки в балансе участника.
Миграция Средства, импортированные из предыдущей системы при миграции данных.
Отмененный возврат Средства, восстановленные при отмене ранее оформленного возврата.

Тип кредита задается при создании и не может быть изменен. Он служит постоянным аудиторским следом.

Статус кредита

Каждый кредит кошелька проходит жизненный цикл:

  • Активный: кредит имеет остаток средств и не истек. Средства могут расходоваться.
  • Истекший: дата истечения прошла. Оставшиеся средства недоступны.
  • Израсходованный: остаток кредита достиг нуля через нормальное потребление.
  • Отменен: кредит отменен администратором вручную, остаток аннулирован.

Расход кошелька

При списании с кошелька участника (за сессию, заказ или другое тарифицируемое событие) система создает запись расхода, связанную с конкретным кредитом.

Каждая запись расхода включает контекст, определяющий причину списания:

Контекст Описание
Использование сессии Средства списаны за время использования сессии.
Оплата кошельком Прямой платеж из кошелька (например, оплата заказа товаров).
Заказ Средства списаны за заказ товаров.
Возврат Отрицательная корректировка при обработке возврата.

Каждая запись расхода ссылается на конкретную сессию, заказ или транзакцию для полной аудиторской прослеживаемости.

Журнал баланса

Помимо записей расхода по кредитам, система ведет журнал баланса участника, фиксирующий каждое событие, изменяющее общий баланс кошелька:

Тип события Описание
load Средства добавлены на кошелек (создан или пополнен кредит).
spend Средства списаны с кошелька (оплата сессии, заказа).
refund Средства возвращены на кошелек (возврат заказа, сессии).
adjustment Административное изменение баланса (корректировка, списание).

Каждая запись фиксирует сумму изменения и итоговый баланс, позволяя восстановить баланс участника на любой момент времени.

Ограничение по устройствам

Каждый кредит кошелька имеет ограничение по устройствам:

Ограничение Значение
Клиент Используется на клиентских ПК. Также на консолях, если явно не ограничен.
Консоль Используется на игровых консолях. Также на ПК, если явно не ограничен.
Только ПК Только на клиентских ПК.
Только консоли Только на игровых консолях.
Оба На любом типе устройств. Значение по умолчанию.

При списании система фильтрует доступные кредиты по ограничению устройств, чтобы списывать только из подходящих кредитов.

Категория кошелька и межкатегорийный расход

Кредиты кошелька могут быть помечены категорией (например, "игровая" или "общая"). Это позволяет создавать изолированные пулы баланса для конкретных контекстов.

Параметр межкатегорийного расхода контролирует, могут ли средства кредита использоваться вне назначенной категории:

  • При отключении (по умолчанию) кредит может расходоваться только в своей категории.
  • При включении кредит может расходоваться и в других категориях.

Если категория не назначена, кредит является универсальным и может расходоваться любой транзакцией.

Способы пополнения

Средства на кошелек можно добавить несколькими способами:

  1. Покупка пакета акции: при покупке денежного пакета система автоматически создает кредиты кошелька. Одна покупка может создать несколько кредитов (оплаченная часть и бонусная).

  2. Ручное пополнение: кассир может вручную добавить средства из панели деталей участника. Создается кредит с типом "Ручной".

  3. Миграция: при настройке системы существующие балансы из предыдущей системы могут быть импортированы с типом "Миграция".

Расход кошелька в сессиях

Когда участник с балансом кошелька запускает сессию, система может автоматически оплачивать сессию из кошелька:

  1. Система тарификации рассчитывает стоимость в минуту на основе активного тарифного слота и применимых скидок уровня.
  2. По мере работы сессии система периодически списывает накопленную стоимость из подходящих кредитов кошелька.
  3. Кредиты расходуются в порядке даты истечения (сначала с ближайшим сроком) для минимизации потерь.
  4. Если баланс кошелька исчерпан до окончания сессии, оставшаяся стоимость взимается наличными при закрытии сессии.
  5. Каждое списание создает запись расхода, связанную с сессией как "Использование сессии".