HandyCafe Docs
owner

时段定价

HandyCafe 使用分段式定价引擎计算网吧或电竞馆的时段费用。引擎不是对整个时段使用单一固定费率,而是将每个时段分为多个分段,每个分段有自己的定价上下文。这确保了即使时段跨越多个时间档位、价格变更、暂停或断线时也能准确计费。

核心概念

术语 定义
基础小时费率 应用倍率前的每小时价格。在"设置 > 定价"中设置。
定价档位 具有特定倍率的命名时间段。共 8 个档位,每个带颜色编码。
倍率 应用于基础费率的系数。1.0 = 标准价,0.5 = 半价,2.0 = 双倍价。
分段 时段中定价上下文(档位、倍率、基础价格)保持不变的连续时间段。
结算 时段结束时确定顾客应付金额的最终计算。

基础小时费率

基础小时费率是所有定价计算的基础。在设置 > 定价中设置,代表 PC 使用的标准每小时价格。

所有内部计算使用货币最小单位(例如美元使用分,人民币使用分)。如果基础费率是每小时 3.00 元,内部值为 300。这消除了浮点舍入问题。

双货币支持

HandyCafe 支持基础货币和本地货币及汇率(FX rate)。如果您所在的国家国际定价与本地定价不同:

  • 基础货币。 内部定价计算使用的货币。
  • 本地货币。 向顾客显示并用于支付的货币。
  • 汇率。 基础货币与本地货币之间的转换系数。

如果两种货币相同,汇率视为 1.0,无影响。

定价档位

共有 8 个颜色编码的定价档位,每个代表不同的定价层级:

档位 颜色 典型用途
Blue 蓝色 标准费率
Orange 橙色 晚间或周末加价
Red 红色 高峰时段溢价
Green 绿色 低谷折扣
Teal 青色 学生或会员费率
Gray 灰色 节假日或特殊定价
Cyan 蓝绿色 夜间费率
Emerald 翡翠色 促销费率

每个档位有三个属性:

  1. 名称。 描述性标签(如"高峰时段"或"夜间折扣")。
  2. 倍率。 修改基础费率的小数值。常见值包括 1.0(标准)、0.5(半价)、1.5(加价 50%)、2.0(双倍)。
  3. 排期数据。 定义档位适用于哪些日期的哪些小时的内部表示。通过排期网格自动管理。

排期网格

定价排期是一个 7 天 x 24 小时的矩阵(共 168 个一小时块)。每个块分配给一个定价档位。排期决定了任何给定时刻适用哪个倍率。

设置 > 定价排期中配置。日期从周一到周日,小时从 00:00 到 23:00。

定价分段

分段是时段中定价上下文不变的连续时间段。当以下边界事件发生时,定价引擎创建新分段:

边界 触发
session_start 新时段开始
session_stop 时段结束
pause 收银员暂停时段
resume 收银员恢复时段
tick 时钟跨越小时边界进入不同的定价档位
disconnect 客户端 PC 丢失网络连接

每个分段记录会话 ID、开始时间、结束时间、定价档位 ID、倍率、基础价格快照和计算金额。

费用公式

单个分段的费用计算为:

amount = ceil( (base_price_snapshot * multiplier * duration_seconds) / 3600 )

引擎使用 128 位整数的定点算术,天花板除法确保结果始终向上取整到下一个最小单位。

时段总额计算

步骤 1:累加所有分段

raw_total = 所有已关闭分段金额之和 + 当前分段的部分金额

步骤 2:应用取整

rounded_total = round_up(raw_total, rounding_step)

取整始终向上(天花板)以保护收入。

步骤 3:应用起步费最低限额

final_total = max(rounded_total, startup_fee)

起步费是任何时段的最低收费,无论时长。

结算

结算是确定时段最终计费的过程。

开始结算(仅预付费)

预付费时段开始时,创建"开始"结算记录,捕获计算费用和实际收费金额。

结束结算

任何时段(预付费或后付费)结束时,创建"结束"结算记录,包含计算费用、实际收费金额、手动调整金额、手续费率、手续费金额、固定手续费和完整的定价时间线快照。

增值税

增值税在"设置 > 定价"中配置为百分比(0-100%)。应用于计算的时段金额之上:

增值税 = 收费金额 x (增值税率 / 100)

实际示例

示例 1:简单的后付费时段

  • 基础费率:3.00 元/小时(300 最小单位)
  • 排期:全天标准档位(倍率 1.0)
  • 时段:10:00 至 11:30(90 分钟)
  • 起步费:0.50 元

计算:

分段 1:(300 * 1.0 * 5400) / 3600 = 450 最小单位(4.50 元)
总计:max(4.50, 0.50) = 4.50 元

示例 2:跨越两个档位的时段

  • 基础费率:4.00 元/小时(400 最小单位)
  • 排期:标准(1.0)10:00-12:00,半价时段(0.5)12:00-14:00
  • 时段:11:00 至 13:00(120 分钟)

计算:

分段 1(11:00-12:00,标准):(400 * 1.0 * 3600) / 3600 = 400(4.00 元)
分段 2(12:00-13:00,半价):(400 * 0.5 * 3600) / 3600 = 200(2.00 元)
总计:4.00 + 2.00 = 6.00 元

示例 3:含暂停的时段

  • 基础费率:2.00 元/小时(200 最小单位)
  • 时段:10:00 开始,10:30 暂停,11:00 恢复,11:45 结束

计算:

分段 1(10:00-10:30,活跃):(200 * 1.0 * 1800) / 3600 = 100(1.00 元)
暂停期间(10:30-11:00):不收费
分段 2(11:00-11:45,活跃):(200 * 1.0 * 2700) / 3600 = 150(1.50 元)
总计:1.00 + 1.50 = 2.50 元

后续步骤