THINK TANK / 方法 · V1.0

算分配之前,先把“按什么算”说清楚

同一句“按20%计算”,可以指本期交易金额的20%,也可以指某项收入的20%,还可以指已经划出的一笔预算的20%。这几种算法,得到的结果可能差很多。

讨论一套分配安排,大家往往先看比例。

分多少,谁多一点,谁少一点。比例商量好了,就开始做表、写规则、开发系统。

但有一个更基础的问题:这个百分比,乘的到底是哪个数?

同一句“按20%计算”,可以指本期交易金额的20%,也可以指某项收入的20%,还可以指已经划出的一笔预算的20%。这几种算法,得到的结果可能差很多。

我觉得,先把“按什么算”写清楚,后面的分配才有共同依据。否则,业务说的、财务核的、开发写进系统的,可能从一开始就不是同一件事。

一、每一个百分比,都要带着自己的基数

下面用一套专门编写的教学数字说明,不对应任何真实企业、项目或收益安排。比例只用于演算,不是分配建议。

假设某项协作奖励,已经明确本期符合条件的业务金额为1,000元。这里将它记作 B。

这个金额已经按本例约定的范围和统计期间核对,排除了不符合条件、已取消或已退款的部分。它只是本例的计算基数,不能据此认定企业有1,000元利润,或有1,000元可以拿来分配。

再假设规则提出,按B的20%计算本期拟安排的激励池,记作 P。

激励池 P=计算基数 B×提取比例 r

本例:1,000×20%=200元。

接下来,三类协作事项分别占激励池的50%、30%和20%。

注意,这三个比例乘的是 200元的激励池。

协作事项占激励池的比例计算金额
甲类50%200×50%100元
乙类30%200×30%60元
丙类20%200×20%40元
合计100%100+60+40200元

如果把这三个池内比例,直接乘前面的1,000元,就会变成500元、300元和200元,合计1,000元。

每一步乘法都可以算对,但它们已经用了错误的基数。原本拟安排200元,结果算出了1,000元,多了800元。

所以,光核对比例有没有加到100%,还不够。先看每个比例乘的是谁。

图一:从计算基数到激励池,再到池内分配的两层计算关系

图一中的金额、比例和协作分类全部为教学虚构。图中展示计算关系,资金来源、可用预算和支付条件仍需分别确认。

下载图一 SVG

二、两种写法可以等价,前提是换算清楚

前面的例子,也可以换一种写法:甲类占B的10%,乙类占B的6%,丙类占B的4%。

因为:

  • 20%×50%=10%;
  • 20%×30%=6%;
  • 20%×20%=4%。

直接按B计算,还是100元、60元和40元,合计200元。

这说明,使用“大基数的比例”或“池内比例”,都可以形成清楚的规则。需要避免的是,标题用一种说法,表格用另一种说法,公式又换了基数。

如果把10%、6%和4%写在“占激励池比例”下面,读者就会按200元计算,最后只算出40元。

我建议,表头就写完整:“占本期有效业务金额的比例”,或者 “占本期激励池的比例”。公式里的字段、配置表和界面提示,也跟着同一个定义走。

省掉几个字,可能留下整套系统都要反复解释的问题。

三、算出200元,还要问这200元从哪里来

B乘以20%,得到的是一个计算结果。这个公式没有替组织准备好支付资金,也没有完成预算批准。

来源是什么,哪些资金可以用于这项安排,由谁确认,是否还有条件,都需要另外说清楚。

本例再作一个假设:组织已经为这项奖励确认了200元可用预算,并具备相应支付条件。这样,算出的200元才与本例的预算和支付安排对得上。

如果实际只确认了180元预算,计算仍然得到200元,就出现了一个需要处理的差额。

系统应当把这个差额显示出来,交回相应负责人核对。需要减少池子、补足预算,还是修改本期安排,要按既定权限和约定处理,不能让系统悄悄改比例,也不能默认下一期总会有钱补上。

计算基数、拟安排的池子、可用预算和实际支付金额,分别代表不同的事情。

把它们分开,才容易看见哪一层出了问题。

四、时间也要对齐:发生、确认、支付分别记

一笔业务发生了,不一定已经满足进入本期计算的条件。金额已经确认,也不一定马上进入支付。

假设一项业务在本月发生,下个月才完成约定的核对。它应该进入哪一期?后来出现退款,影响原期还是下期?已经支付的部分怎样处理?

这些问题,应当在规则里有对应安排。

我倾向于至少保留三个时间:

时间回答什么需要留下什么
业务发生时间这件事什么时候发生原始业务记录与唯一编号
计算确认时间按什么条件、进入哪一期计算适用规则版本、确认依据和计算期间
实际支付时间什么时候、按什么条件支付支付状态、金额与对应记录

这样做,后续才容易追到同一笔事项。

例如,本例原先纳入计算的1,000元里,有200元在确认前完成退款。按本例约定,这部分应当排除,那么新的B就是800元,P就是160元;再按50%、30%、20%计算,分别是80元、48元、32元。

这是在说明一个明确条件下的重算。

如果退款发生在确认后,甚至发生在支付后,就不能直接照搬这一步。需要找到原事件、原计算记录和适用规则,按约定复核是否需要调整、怎样调整。调整应当留下原因和差额记录,避免直接删除原记录,让后面的人不知道发生过什么。

五、让业务、财务和开发核对同一份定义

在我看来,一项分配规则进入系统之前,至少需要有一份大家都能看懂的定义。

业务负责人解释哪些事项符合条件;财务或相应负责人核对来源、预算和金额口径;开发按照确认后的字段、公式和状态处理。哪些人有权确认和批准,也要对应具体组织的分工。

这份定义不一定很长,但下面几项要能找到:

定义项至少写清什么
来源与范围资金来源、适用业务、参与对象、明确排除的事项
基数B金额含义、单位、期间、纳入条件、退款与取消怎样影响基数
激励池P按什么比例或办法形成,受什么预算和授权边界约束
池内比例分别乘哪个数,是分完池子,还是允许按规则保留余额
确认与支付进入计算、确认结果、执行支付分别需要什么条件
异常处理重复记录、退款、撤销、超额、尾差怎样处理
规则版本谁确认,何时生效,适用哪些事项,修改怎样通知和保留记录

这里还有一个小问题:池内比例没有合计到100%,不一定就是算错了。

如果规则明确允许预留一部分,就把预留的用途、保管和后续处理写清楚。如果规则要求分完池子,就应当核对分配合计与池子是否相等。

有余额时,把它列出来。不能默认少分的部分已经自动归了某个人,也不能为了凑满100%就随意增加分配。

六、先用正常和异常例子,把规则跑一遍

规则写得通,还需要看看具体数据进去以后,会出来什么结果。

下面仍沿用教学例子。各项测试分别针对自己的输入条件,不代表它们同时发生。

测试输入或情境应当看到的结果
正常计算B=1,000;提取20%;池内50%、30%、20%P=200;分配100、60、40;合计200
基数误用错把池内比例乘B得到500、300、200;合计1,000;识别出超出池子800,不能作为正常结果通过
池内超额同一200元池子,比例改为50%、40%、20%得到100、80、40;合计220;显示超出池子20,退回核对
预算不足计算P=200,可用预算仅180显示差额20,暂不按原方案执行,交回有权负责人处理
确认前退款原B=1,000,其中200按本例规则需排除B=800;P=160;分配80、48、32;保留退款关联依据
重复记录同一符合条件的业务事件被再次提交识别同一事件,避免重复计入基数或重复支付;保留处理结果
撤销或后续调整原结果已确认,后来收到退款或取消信息定位原事件与规则,按约定复核调整,保留原记录与调整记录

还有一项很容易忽略:金额的舍入。

例如,一个0.03元的池子,按50%、30%、20%计算,分别是0.015元、0.009元、0.006元。若各自按四舍五入保留两位,就会变成0.02元、0.01元、0.01元,合计0.04元。

这时,问题出在“每项怎样取整、尾差怎样处理”。需要事先明确金额精度、舍入顺序和尾差安排,让分项与总额能够核对。具体采用什么办法,由对应规则确定,不能临时把差额塞给某一项。

测试的作用,是把含糊的定义和容易漏掉的情况提前找出来。

图二:从业务口径、演算与交叉校验,到版本确认、执行和异常处理的机制

图二是本次整理的工作建议。演算通过、预算可用、具备审批权限和满足支付条件,需要分别核对。

下载图二 SVG

七、最后再从结果往回核一遍

正着算完以后,我建议再反着问:

这笔金额来自哪个池子?这个池子按哪个基数形成?基数来自哪些业务记录?采用哪一版规则?是否符合本期条件?预算和支付记录能不能对应上?

沿着这些问题往回找,应当能够回到具体数据和确认依据。

有人提出不同意见时,也先看分歧发生在哪一层。是业务范围不同,基数不同,池内比例不同,还是计算期间、退款状态和规则版本不同?

把分歧落到具体字段和记录上,才容易知道下一步找谁、核什么。

结语

分配规则可以很简洁,但每个比例对应什么基数、每笔金额对应什么来源,都要讲得明白。

先用一套小数字,把正常情况、异常情况和调整情况走通,再进入系统。以后增加角色、业务和规则,也有一个能够核对的基础。

我觉得,一套安排真正让人放心的地方,就在这些具体问题上:算得清,查得到,发现问题以后知道怎样改。

SEARCH