人力资源

Odoo 请假为什么不只是“申请几天假”:Allocation、Accrual 和剩余额度到底怎么算

很多人把 Odoo 请假理解成填一张申请单,但 Time Off 真正难的是额度来源、累计规则和审批边界。本文把 allocation 和 accrual 讲清楚。

Odoo 开发 人力资源
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 5 阅读

先说结论

Odoo 的 Time Off 不是“员工提一个请假申请,经理批一下”这么简单。

它真正要解决的是:

员工有没有资格请、额度从哪里来、额度是一次给还是按时间累计、审批该走到哪一层。

所以请假单只是表层,底层真正复杂的是 allocation 和 accrual。


Leave 和 Allocation 为什么必须分开理解

hr_holidays 里,至少有两类核心对象:

  • hr.leave:请假请求本身
  • hr.leave.allocation:额度分配

这两者不是一回事。

你可以把它理解成:

  • Leave = 我要用假
  • Allocation = 我是否先被发过假 / 累积出假

如果没有额度层,很多企业的人力规则就没法表达。


为什么 Allocation 不只是“手工发几天”

源码里 allocation_type 明确区分:

  • regular
  • accrual

也就是说,额度来源至少有两种脑回路:

Regular Allocation

一次性给定额度。

Accrual Allocation

按规则、按时间不断累积。

这就让 Odoo 可以同时表达:

  • 入职先给年假
  • 每月再累计半天
  • 到年底做结转或失效

Accrual Plan 真正难在哪里

hr.leave.accrual.plan 和 level 逻辑能看出,累计不是简单“每月 +1”。

它会牵涉:

  • 从什么时候开始累计
  • 以天/月/年为单位累计
  • 累计是在周期开始给还是结束给
  • 是否设上限
  • 年末没用完是失效、结转还是限制结转
  • 有效期多久

这说明 Odoo 处理的是制度规则,不是小算术。


为什么余额显示经常让人误会

因为你看到的剩余额度,往往不是单纯一列数字。

它可能同时受这些影响:

  • 已批准额度
  • 已请假但未完全消耗的部分
  • 虚拟剩余
  • 未来累计计划
  • 单位是天还是小时

所以很多实施里“余额不对”并不是算错,而是说话的人看的口径不一样。


审批边界为什么也在这个模型里

holiday_status_id 相关配置会影响:

  • 是否需要 allocation
  • allocation validation type
  • leave approval 层级

这说明 Odoo 把“额度规则”和“审批规则”放在同一整套 Time Off 语义里,而不是完全割裂。


一句话记忆法

请假单解决我要不要休,Allocation 解决我有没有资格休,Accrual 解决额度是不是会随着时间自己长出来。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。