| 123456789101112131415161718192021222324252627282930313233343536 |
- package service
- import (
- "yuansiwei/unified-backend/internal/academic/money"
- )
- // ---------------------------------------------------------------------------
- // dual-run harness 专用出口(AC-15 阶段 1)
- // ---------------------------------------------------------------------------
- //
- // 存在理由:`computeRecordReward` / `distributeAmount` 是**包内私有**,
- // 而双跑 harness 位于 `internal/academic/dualrun`,无法直接调用。
- //
- // 为什么不让 harness 自己再写一份公式:那会变成"用我们自己的第二份实现去校验第一份",
- // 一旦两份都错、错法一致,双跑会给出全绿结论——这正是 P0 里反复出现的"自证"陷阱。
- // 因此 harness 必须调到**生产代码本体**,这两个函数只做转发,不含任何逻辑。
- //
- // 约束:**只允许 dualrun 调用**。生产链路请直接用包内私有函数;
- // 若将来需要在仓库外暴露课酬计算,应设计正式 API 而不是复用这里。
- // ---------------------------------------------------------------------------
- // ComputeRecordRewardForDualRun 转发到 computeRecordReward(纯函数,无 DB 依赖)。
- //
- // 入参:q 命中规则;income 收入(分);studentCount 上课人数;rewardType 结算方式。
- // 出参:单节课课酬(分);错误语义与 computeRecordReward 完全一致。
- func ComputeRecordRewardForDualRun(q *PayrollQuote, income money.Amount, studentCount int32, rewardType int8) (money.Amount, error) {
- return computeRecordReward(q, income, studentCount, rewardType)
- }
- // DistributeRecordRewardForDualRun 转发到 distributeAmount(纯函数)。
- //
- // 入参:total 单节课课酬合计;n 参与分摊的人数(= count(type∈{1,2}))。
- // 出参:逐行课酬(分),长度 = n,余数补首行。
- func DistributeRecordRewardForDualRun(total money.Amount, n int) []money.Amount {
- return distributeAmount(total, n)
- }
|