估值表是一张快照,快照背后的会计事实是凭证——每一笔资金证券变动都对应一张借贷平衡的会计凭证。系统实现上,这一步是"业务语言翻译成会计语言"的映射工程,翻译规则错了,估值表再精致也是错的。
科目表设计
会计科目是复式记账的词汇表,编码通常按 4-2-2 层级:前四位大类(资产 1、负债 2、权益 3、损益 4),中间两位二级科目,末两位明细。基金会计的常用科目(示意):
| 编码 | 科目 | 方向 |
|---|---|---|
| 1102 | 股票投资(成本) | 借 |
| 1103 | 债券投资(成本) | 借 |
| 1105 | 股票投资(公允价值变动) | 借 |
| 1002 | 银行存款 | 借 |
| 1021 | 清算备付金 | 借 |
| 3001 | 实收基金(面值×份额) | 贷 |
| 3102 | 未分配利润 | 贷/借 |
| 4104 | 公允价值变动损益 | 贷/借 |
| 6405 | 管理人报酬(费用) | 借 |
两个设计要点。一是成本与公允价值变动分离:交易性金融资产设"成本"和"公允价值变动"两个明细科目,买入时进成本,估值日把市值与成本的差额记到公允价值变动科目——这样处置时能一眼看出"这笔投资收益里多少是价差、多少是持仓估值波动"。二是清算款做过渡科目(如"证券清算款"):T 日买入股票,钱还没真正划走,先挂清算款;T+1 交收完成,清算款转银行存款。T 日估值表上的资产包括已买未付的证券,也包括已付未收的清算款,恒等式才成立。
凭证生成的三类映射规则
业务流水进会计系统,按规则映射成分录。三类规则覆盖了 95% 的场景:
清算交收类——T 日买入 100 万元股票:
T 日(成交确认):
借:股票投资(成本) 1,000,000.00
贷:证券清算款 1,000,000.00
T+1 日(交收完成):
借:证券清算款 1,000,000.00
贷:银行存款 1,000,000.00
清算款科目在 T 和 T+1 之间形成一笔"在途",日终估值表上它挂在资产侧,这就是清算篇讲的"在途资金"的会计表达。
费用计提类——计提当日管理费(前日净值 8000 万 × 1.5% / 350):
借:管理人报酬 3,424.66
贷:应付管理人报酬 3,424.66
注意是计提不是实付:费用按日确认(权责发生制),钱可能在季末才划。负债侧"应付管理人报酬"因此每天滚存,估值表负债科目里它是常客。
估值调整类——估值日持仓市值上涨 5 万元:
借:股票投资(公允价值变动) 50,000.00
贷:公允价值变动损益 50,000.00
这类凭证每天批量生成,每个持仓科目对一遍"市值 vs 账面(成本+已确认变动)",差额出凭证。它是估值表和上一篇讲的尾差问题的交汇点:这批凭证全部正确的前提下,科目余额加总与资产净值的差才是"纯舍入尾差"。
硬校验:Σ借 = Σ贷
凭证入库前必须过一道机械校验:
$$ \sum \text{借方金额} \equiv \sum \text{贷方金额} $$
不平等的凭证直接拒绝入账,没有"先记账后调整"的选项。道理在《复式记账》篇讲过:复式记账的价值在于任何时点全科目余额的代数和恒等于零,恒等式一破,所有依赖它的勾稽(下一篇展开)全部失效。校验要在数据库约束层做,而不是应用层 try-catch——应用层会漏,约束层不会。
为什么业务流水不能直接出报表
很多系统想把这一步省掉:成交明细明明都在,报表直接 group by 不就行了?省不掉,因为会计口径 ≠ 业务口径:
- 业务流水记的是"实收实付",会计报表要"应计"——管理费没付钱也要计提;
- 业务流水按成交日,会计确认要按权责发生时点——T 日成交 T+1 交收,两天各有分录;
- 业务流水是过程明细,会计报表是科目余额——中间隔着凭证这层"正式的、借贷平衡的记录",审计认的是这层。
凭证表的设计也因此区别于业务流水表:一张凭证分凭证头(凭证号、日期、类型、摘要、制单人)和凭证明细(科目、方向、金额、辅助核算维度如产品/持仓类别),头和明细一对多;同时凭证与源业务流水建立多对一关联——一张清算确认流水可能生成一借一贷两条明细但同属一张凭证,多个产品的合并计提也可能一张凭证对应多条流水。这个关联字段平时没人看,出问题时("这笔分录为什么存在")是唯一线索。