有两个值决定可计费工作按什么定价:小时费率与开票货币。两者都可以在三个位置设置——项目上、客户上,以及作为品牌默认值——而且每一处都是选填。当某处需要费率或货币时,Ceum 会从最具体的一级向上依次查找这些位置,取第一个已设置的值。货币在这三级之下还有一层后备:你的账户货币。
解析顺序
| 值 | 顺序 |
|---|---|
| 小时费率 | 项目 → 客户 → 品牌默认值 → 无费率 |
| 开票货币 | 项目 → 客户 → 品牌 → 你的账户货币 |
两条链条在末端不同,而这个差别很重要。货币总能解析出一个真实的货币代码,因为账户货币是最后一步,而它永远不会为空。费率则可能什么都解析不出来:不存在账户级别的小时费率,所以当各层级都没有设置时,答案是“没有费率”,而不是某个数字。
值不会向下复制。没有自己费率的客户并不会持有品牌默认值的一份陈旧快照——它每次都会去读品牌默认值。更改品牌默认值,所有继承它的客户和项目都会随之改变。
留空表示继承;零不是
小时费率字段留空与开票货币保留自动,都表示“从上一层级继承”。它们不是值,而是值的缺失。
0 这个费率则不同。它是一个真实的、已设置的费率,含义是不按小时计费,并且会像 85 一样终止查找链条。设为 0 的客户按零计费,而不是按品牌默认值计费。这是有意为之——明确的“不收取小时费”是对这个问题的一个真实回答,如果继续向上落到某人几个月前设的费率上,就会悄悄对已经告知免费的工作收费。
反过来也一样。当各层级都没有设置费率时,由已记录工作生成的明细行会完全没有价格,而不是价格为零,数字由你自己填写。在那里写一个零,就把“费率未知”变成了“这项工作是免费的”。
各层级在哪里设置
- 品牌默认值——品牌与开票。默认小时费率是每个客户和项目的起始费率。开票货币是开具新发票所用的货币;保留自动即跟随你的账户货币,之后你更改它时也会继续跟随。
- 客户——客户表单内部信息部分中的小时费率与开票货币字段。
- 项目——项目表单上的同一对字段。
在客户与项目表单上,这两个字段都会写明它将继承的值以及来源,因此留空的字段绝不是靠猜的。费率字段的帮助文本会写“留空时从客户继承 85。”;货币选择器的继承选项会写“自动(EUR,来自品牌设置)”。层级会用文字点名——项目、客户、品牌设置、账户设置,或者当任何地方都没有设置费率时写明没有。
客户与项目的详情侧边栏会显示同一对值,但它们显示的是实际生效的值,而不是一个空字段,并附注说明来自哪一级。按继承费率计费的项目,不该看起来像一个没有费率的项目。
关联多个客户的项目
一个项目可以关联任意数量的客户,因此只有在恰好关联一个客户时,“这个项目之上的客户”才有明确定义。项目表单采用的正是这条规则:
- 恰好一个客户——项目继承该客户的费率与货币。
- 没有客户,或有多个客户——项目改为继承品牌默认值。
有两个客户时,没有诚实的答案可以显示:挑其中一个,就是摆出一个谁都没有选过的值;把两个费率取平均,则是凭空造出一个哪里都不存在的数字。所以表单会完全跳过客户这一级。
这只影响项目表单与侧边栏的显示。开票不受影响,因为一张发票只对应一个客户——所以在开票时,永远只有单一客户的覆盖值需要考虑。
账户货币不是开票货币
常规设置中的货币是你的账户显示货币:它决定金额在列表、表单、汇总与导出中如何格式化。参见货币格式。
它有意不是开票货币。它在货币链条中只承担一个角色——兜底,即当品牌、客户与项目都把货币保留为自动时所使用的值。如果你以一种货币思考、以另一种货币开票,请在品牌与开票中设置开票货币,账户货币保持不动。
解析出的费率如何进入发票明细行
从选中的任务或已记录时间创建发票时,每一行都经由同一条链条定价:
- 货币为整张发票解析一次,绝不逐行解析。一张发票以单一货币开具,因此不能允许各行不一致。只有当所有开具的明细行共用同一个项目时,项目这一级才会参与该解析。
- 每一行的费率各自解析,因此跨项目的发票可以带有两个不同的费率。为某一行提供费率的项目,是真正通向被开票客户的那个项目——一项任务若同时位于分属两个不同客户的两个项目中,它的费率取自本张发票这一侧的项目,另一个项目会被忽略。
- 小时数成为数量,四舍五入到两位小数;没有记录时间的任务从一个单位起算。
- 各层级都没有费率时,该行的单价与金额留空,由你填写。
手动添加明细行并把它关联到任务,定价方式相同,因此在编辑器里手敲的一行与从选中工作预填的一行是一致的——只有一处不同:只有当手动添加的一行还没有单价时,解析出的费率才会填进去。你亲手填的价格绝不会被这次关联覆盖。
两条路径都在建立关联的那一刻把费率捕获一次。从任务刷新会把任务当前的小时数取过来,却把已捕获的单价留在原处,因此在费率变更之后刷新发票,更新的是时间,不是价格。若你想要的正是改价,请自己重新填写单价。按固定金额计价的明细行则完全不使用这条链条。参见开票流程。
费率、货币与你的方案
在客户或项目上设置覆盖值属于 Plus 和 Pro 方案。此处其余内容在所有方案中都可用:品牌默认值、整条解析链,以及据此为发票明细行定价的方式。
限制的是更改覆盖值,而不是持有覆盖值。具体来说:
- 已保存的覆盖值在降级后继续生效。 它不会被丢弃、忽略,也不会从你看到的内容中剔除。保存为 95 的客户仍按 95 计费。
- 两个字段都留在屏幕上,继续显示已保存的值,因此你随时能看到某个客户或项目按什么计费。它们会变为不可操作,并附有工具提示说明哪个方案可以解锁。
- 清除覆盖值在任何方案下都被允许。 确实持有覆盖值的锁定字段旁边会出现一个重置控件,把该字段交回上一层级;从未覆盖过的字段没有可清除的东西,也就不会显示该控件。两个字段各自独立清除,因此你可以放弃货币覆盖值而保留费率。
- 保存无关的更改始终被允许。 重命名一个你无法编辑其费率的客户不会被拒绝——检查比较的是提交的内容与已存储的内容,因此未改动的值会原样通过。
只有当一次写入确实会把已存储的覆盖值改成另一个值时,它才会被拒绝。创建一个自带覆盖值的客户或项目属于同一种情况,会因同样的理由被拒绝。
提示与边界情况
- 清除字段和其他保存一样。 清空费率或把货币改回自动,只有在你保存表单时才会生效。
- 各层级费率全部留空是一种有效的配置。 明细行会以无价格的状态到达,由你填写;没有任何东西会被阻止。
- 预算跟随项目的货币。 项目的预算按其开票货币读取,继承时则按你的账户货币。参见项目。
- 单张发票仍可锁定货币。 发票表单的货币从自动起步,跟随你选择的客户或项目并说明跟随的是哪一个;你自己选定一个货币代码,就会为这张发票锁定它,不再受链条影响。
- 移动端设置的是同一批字段。 品牌界面、客户表单与项目表单都带有小时费率与开票货币,并经由同一条链条解析。有一处差别:移动端项目详情行只说明某个值是继承来的,而不点名层级,因为该行不持有项目的客户信息;项目表单会点名。