会计引擎生成反写设计

会计引擎生成反写设计

商城已上线,快去看看吧!

前面我们用2篇文章把会计引擎的原理和凭证模板设计解释清楚了,今天一起来看下真正的流程,也就是会计引擎怎么驱动凭证生成、反写,日志怎么记录。

具体内容如下:

一、产品介绍

1.1 三个核心概念

首先,我们来搞清楚三个最基本的概念。它们是会计引擎最核心的三件事,理解了这三件事,后面所有的内容都会清晰很多。

图片[1]-会计引擎生成反写设计-寻找资源网

1、凭证生成

什么叫凭证生成?

简单说,就是把一笔业务变成一张会计凭证,自动写进财务账本。

举个最直观的例子:

采购部门今天入库了一批原材料,价值5万元。

这个时候,财务需要记一笔账:借方记原材料增加,贷方记应付账款增加。在没有会计引擎之前,这个动作需要财务人员手工操作;有了会计引擎,系统接收到采购入库这个事件后,自动匹配规则、生成借贷分录,写入总账,全程无需人工干预。

所以凭证生成的关键词是:自动触发、规则匹配、借贷计算、合规校验、自动过账。这五个词串联起来,就是凭证生成的完整链路。

2、凭证反写

第二个概念是凭证反写。

凭证生成之后,系统会把“这张凭证已经过账成功”这个状态,回写到原来的业务单据上。比如采购订单从“待付款”变成“已入账”,应付账款从“待核销”变成“已核销”;这个回写动作,就叫凭证反写。

为什么需要反写?

因为业务流程是闭环的。财务记了账,业务侧需要知道这笔单子的钱已经到账了,或者这张发票已经入账了,才能推进下一个环节,比如付款、交货、确认收入等等。

所以反写是连接财务与业务的重要纽带。

反写还包括另一种场景:当凭证被冲销的时候,原来的业务单据状态也要跟着回退,这个叫冲销反写,我们在后面会详细讲。

可以把凭证生成+反写比喻成一个收据的双向确认:我们去超市买东西,收银员给你开了收据,这是凭证生成;同时你的购物记录里也标记了已结账,这是凭证反写。

3、会计日志

第三个概念是会计日志。这个比较好理解,就是把整个凭证生成过程中发生的所有事情,原原本本地记录下来。

包括:

谁在什么时间做了什么操作(操作日志);

这条规则是怎么匹配上的(规则命中日志);

中间出了什么错(异常日志);

规则或者模板有没有改动过(变更日志)。

会计日志的价值在于:出了问题可以追溯,审计的时候可以举证,排查故障可以定位。可以说,会计日志是整个引擎的黑匣子。

1.2 三者的整体逻辑关系

我们来看凭证生成、反写、日志的整体逻辑:

图片[2]-会计引擎生成反写设计-寻找资源网

会计引擎处于业务系统和财务系统的中间地带。

资金系统、采购系统、销售系统、HR系统等业务系统层,每天产生大量业务事件,比如付款成功、发票确认、薪资发放等。

这些业务事件进入会计引擎之后,引擎做三件事:

第一,规则匹配,找到对应的凭证模板;

第二,借贷生成,完成平衡校验;

第三,过账、反写、记日志。

过账之后,凭证写入财务系统层,包括总账GL、应付账款、应收账款、报表BI;同时,通过红色虚线所示的反写机制,把凭证状态回写到业务单据;全程日志写入日志审计层。

可以看出,会计引擎是一个事件驱动、规则匹配、自动记账、闭环反写、全程留痕的中台系统。

1.3 业务范围边界

接下来我们划定一下这个系统的业务范围,这对产品同学和研发同学尤其重要,明确边界可以防止范围蔓延。

凭证生成的范围:

从业务事件接入开始,经过规则匹配、凭证生成、合规校验,到过账写入总账结束。

反写的范围:

凭证过账成功或失败或冲销之后,状态和金额同步回业务单据,并触发下游流程推进。

日志的范围:

全流程操作日志、规则命中日志、异常日志、变更日志,全量留存,不允许删除或修改。

会计引擎不负责总账本身的展现、不负责报表生成、也不负责业务系统的单据管理。这些是它的上下游系统的职责,大家在设计和开发的时候要注意这个边界。

1.4 典型凭证示例

最后我们来看几个具体的凭证例子,这样大家对凭证这个东西会有更直观的感受。

1、资金系统发起银行付款成功,凭证分录是

借:应付账款

贷:银行存款

反写内容是付款单状态变为已付款。

2、采购系统发票认证通过,凭证是

借:应付账款

贷:预付账款

发票状态变为已入账。

3、销售系统客户回款,凭证是

借:银行存款

贷:应收账款

合同状态变为已收款。

二、产品架构

2.1 使用角色

了解了产品是什么之后,我们来看产品架构,先看使用角色。

会计引擎的使用者不只是财务人员,它其实服务于六类角色:

第一类:会计规则配置员

这类同学负责维护会计规则库与凭证模板,配置科目映射和金额公式,测试新场景的规则匹配,管理会计期间和汇率参数。

简单说,就是把财务的记账规则翻译成系统能理解的配置。

第二类:财务会计

他们的日常工作是审核自动生成的凭证,处理异常凭证时进行人工干预,执行期末凭证汇总与过账,以及对账和凭证差异核查。

第三类:系统集成工程师

负责对接业务系统的消息接口,配置事件订阅与触发规则,处理跨系统数据格式转换,以及监控引擎的运行健康状况。

第四类:内审/合规审计员

他们需要查阅完整的会计日志,追溯凭证与原始单据的关联,核查规则变更历史记录,出具合规审计报告。

第五类:财务主管/CFO

他们关注的是审批重大规则变更,监控自动化记账率和异常率,决策月结关账时间节点,以及查看引擎产出的财务报表。

第六类:产品经理/实施顾问

负责设计引擎功能需求文档,与财务沟通规则落地方案,负责用户培训与系统上线,持续迭代优化规则配置。

不同角色使用的功能模块不同,这就引出了下一个话题:权限矩阵。

2.2 权限矩阵

权限矩阵是系统安全设计的核心。

图片[3]-会计引擎生成反写设计-寻找资源网

规则库维护:

规则配置员有读写权限,财务会计和集成工程师只能只读,内审员只读,财务主管有审批权。

这意味着规则的修改需要经过审批,防止随意改规则导致账务混乱。

凭证审核/过账:

只有财务会计和财务主管能操作,规则配置员和集成工程师无权审批凭证。

体现了业务操作和财务审计的职责分离。

手工冲销申请:

财务会计可以发起申请,财务主管审批,其他角色无权操作。

这是一个高风险操作,需要双人控制。

日志全量查询:

内审员拥有全量查询权限,其他角色只能查看部分日志。

这保障了审计的独立性和完整性。

接口配置:

仅集成工程师有权限,其他人均无法操作。

防止非技术人员误操作接口配置。

这个权限矩阵的设计体现了财务系统职责分离、最小权限的核心原则。大家在设计权限功能时,一定要把这个矩阵作为需求基线。

2.3 产品架构

接下来是本部分最重要的内容,产品架构图。这张图把整个会计引擎的技术架构分为五层,我们从上到下来看:

图片[4]-会计引擎生成反写设计-寻找资源网

第一层:事件接入层

这是整个引擎的入口。

业务事件可以通过四种方式进来:消息队列MQ、REST API、批量文件导入、定时任务触发、手工补录。

设计要点是:多种接入方式并存,适配不同业务系统的技术栈和场景需求。

第二层:规则引擎层

这是整个架构的大脑,包含四个核心模块:

规则库/模板库:

存储所有会计规则,支持规则配置、优先级设置、冲突检测、版本管理和测试沙箱。

事件解析器:

对接入的业务事件进行格式标准化,完成字段映射、幂等去重。

规则匹配引擎:

基于事件类型、组织、业务参数,进行条件匹配、策略路由、多规则优先级处理。

科目/金额计算:

执行公式计算,支持辅助核算、汇率折算、成本分摊。

第三层:凭证处理层

这一层负责凭证的生成和过账:

凭证生成与借贷校验、合规校验(期间/组织)、审核与自动过账、反写处理。

第四层:存储层

所有的数据都持久化在这一层,包括凭证主表/分录表、规则库/模板库、会计日志库、事件溯源记录和反写记录。

第五层:输出层

最终产出给下游系统:

总账GL、财务报表、业务单据状态、审计日志报告/BI看板。

整体来看,这五层是一个从事件输入到数据输出的完整管道。在做技术设计的时候,要注意每一层的职责边界不要越权,保持各层的低耦合高内聚。

2.4 架构设计六大原则

最后,分享一下我们在设计这套架构时遵循的六大原则,这些是业界成熟实践的总结:

图片[5]-会计引擎生成反写设计-寻找资源网

原则一:事件驱动。

采用异步订阅业务事件的方式,把业务系统和会计系统解耦。

这样任何一侧出现问题,不会直接拖垮另一侧,同时也提升了系统的吞吐量。

原则二:规则外置。

会计规则以配置形式存储,不写死在代码里,财务人员可以自助维护。

这是非常重要的设计,新业务场景上线,不需要发版,配置完成后即可生效,极大降低了上线成本。

原则三:幂等性

同一个业务事件,不管因为网络重试还是消息重发,传进来多少次,只生成一张凭证,防止重复记账。

这是系统最核心的安全设计之一。

原则四:完整审计链路。

从原始事件→规则命中→凭证输出→反写状态,每一步都有不可篡改的日志。

这是合规要求,也是出问题时快速定位的关键。

原则五:多组织隔离。

按法人或业务单元隔离账套,支持集团管控与多主体独立核算。

特别是在跨境、跨法人的业务场景下,这个设计至关重要。

原则六:多币种支持。

本位币和外币并行,汇率自动换算,汇兑损益自动生成相应分录。

这对有境外业务或外币结算的公司来说是必备能力。

这六大原则,既是设计目标,也是评估会计引擎成熟度的六个维度。做产品规划和技术评审时,可以把它们作为检查清单。

三、产品设计深度解析

3.1 凭证生成反写全流程总述

进入产品设计部分,这是今天内容最密集的一块,我们花最多时间在这里。

先看一个完整的流程示例,以采购入库为例:

图片[6]-会计引擎生成反写设计-寻找资源网

业务事件:

事件类型是采购入库,金额5万元,华东分公司,2024年12月,来源单PO-20241201。

规则匹配:

命中规则RUL-001,规则内容是“采购入库→存货增加,借原材料贷应付账款”,优先级P1。

凭证输出:

生成凭证号2024-12-0088,借方1401原材料5万,贷方2202应付账款5万,借贷平衡校验通过,期间有效,摘要是PO-20241201入库。

过账写入GL:

状态POSTED,过账时间2024-12-01 10:02:34,操作人SYSTEM,GL写入成功。

反写业务单:

PO-20241201状态从“待付款”变为“已入账”,凭证号回填,反写成功。

这个流程是整个引擎的核心主线。

更详细来说,整个链路可以如下图所示,业务单据→会计事件→规则匹配→凭证草稿→正式凭证→总账过账,以及并行的幂等检查→主数据校验→会计校验。

图片[7]-会计引擎生成反写设计-寻找资源网

如果处理失败,进入失败队列,同时记录处理日志,再通过反写服务完成业务闭环。

注意:幂等检查必须在规则匹配之前完成,防止重复处理;主数据校验必须在凭证生成之前完成;任何一个节点失败,都不能静默丢弃,必须进失败队列,等待人工介入。

3.2 凭证生成模块详解

1、主流程七步

凭证生成的主流程分七步:

事件触发→事件解析→规则匹配→凭证生成→借贷平衡→审核/过账→写入GL。

图片[8]-会计引擎生成反写设计-寻找资源网

事件触发:

支持MQ消息、API调用、定时触发、手工操作四种方式,保证所有业务事件都能被接收。

事件解析:

做字段映射、格式校验、幂等去重。这一步失败不记凭证,记异常日志。

规则匹配:

按业务类型和组织找到最匹配的凭证模板。这是整个系统的智能核心。

凭证生成:

填充科目、金额、辅助核算信息,生成凭证草稿。

借贷平衡:

∑借=∑贷,期间有效,科目有效。这是会计恒等式,必须严格保证。

审核/过账:

可配置是否需要人工审核节点,通过后进入过账。

写入GL:

可以异步或同步写入总账,异步写入需要有补偿机制。

2、核心数据模型

凭证主表的关键字段如下表所示:

图片[9]-会计引擎生成反写设计-寻找资源网

其中,source_id是连接凭证和业务单据的关键字段,它让反写成为可能,让溯源成为可能,一定不能缺失。

页面示例如下:

图片[10]-会计引擎生成反写设计-寻找资源网

3、凭证分录模型

分录表记录每一条借贷明细,如下表所示:

图片[11]-会计引擎生成反写设计-寻找资源网

辅助核算维度的设计非常重要,它决定了财务系统能提供多细粒度的分析能力。在设计时,需要和财务确认清楚,哪些维度是必须的,哪些是可选的。

3.3 凭证反写模块详解

1、四种触发时机

凭证反写有四种触发场景:

图片[12]-会计引擎生成反写设计-寻找资源网

第一种:过账成功反写

这是最常见的场景,GL写入完成后,将业务单据状态更新为已记账,并把凭证号回填到业务单据。

第二种:冲销反写

红字凭证过账后,将业务单据状态回退到冲销前,并清空关联凭证号,仿佛那张凭证从来没有存在过。

第三种:审核拒绝反写

人工审核拒绝时,单据状态回退至待审核,并发送通知给业务操作人,提示需要修正后重新提交。

第四种:部分核销反写

支持分批核销,每次反写时更新已核销金额和未核销余额两个字段,这在应收应付的部分收款场景下非常常见。

2、反写流程

完整的反写流程是:凭证过账→通过source_id关联找到业务单据→更新状态→更新核销金额→通知下游业务系统→记反写日志。

图片[13]-会计引擎生成反写设计-寻找资源网

图片[14]-会计引擎生成反写设计-寻找资源网

重点讲一下反写设计原则:

反写必须用异步事件通知,不能用同步调用。

原因是如果是同步调用,业务系统出故障,会导致整个凭证过账流程挂起,这是不可接受的。

反写失败时,业务单据状态维持原状,不能因为反写失败就把已过账的凭证自动回滚。凭证一旦过账,就具有法律效力,不能轻易撤销。失败了进告警队列,人工处理。

3、反写数据模型

反写记录表记录以下内容:

图片[15]-会计引擎生成反写设计-寻找资源网

相同voucher_id和source_id组合,只执行一次状态变更。这防止了因为消息重发导致状态被错误地更改多次。

3.4 会计日志模块详解

1、六种日志类型

会计日志分六种类型,每种都有其特定的用途:

图片[16]-会计引擎生成反写设计-寻找资源网

操作日志:

记录所有人工操作,谁、何时、对哪张凭证、做了什么。

主要用于权限核查和行为审计,出了安全事件可以第一时间找到责任人。

规则命中日志:

记录每次生成的规则匹配过程,包括候选规则列表、最终命中规则、未命中原因。

这是排查【为什么这笔单子没有自动记账】或者【为什么记到了错误科目】的核心依据。

异常日志:

记录校验失败、规则未命中、过账失败、反写失败等异常,带错误码和处理建议。

这是运维人员和财务人员处理问题的工作台。

性能日志:

记录引擎处理耗时和批量吞吐量,用于性能优化和容量规划。

变更日志:

记录规则库修改、模板变更、科目调整的完整变更记录,包含变更前后对比。

这是合规审计最重要的日志之一。

反写日志:

记录每次反写的执行结果,与凭证日志形成完整的业务闭环轨迹。

2、页面设计要点

会计日志页面有四个关键设计要点:

多维筛选:

支持按时间范围、凭证号、业务单据号、操作人、日志类型、处理结果等多维度组合筛选,帮助用户快速定位目标日志。

关联穿透:

从凭证可以直接查看该凭证的全链路日志;从日志可以跳转到原始业务单据;用trace_id在分布式系统中串联同一事件的所有日志,实现端到端追踪。

异常工作台:

异常日志提供重试/忽略/手工补录三个操作入口,支持批量处理,让运维人员能够高效地处理异常队列。

日志导出:

按筛选条件导出CSV或Excel文件,用于外部审计提交或内部分析,这是很多企业内部审计和外部合规检查的标准诉求。

图片[17]-会计引擎生成反写设计-寻找资源网

3、日志数据模型

日志表的关键字段,如下图所示:

图片[18]-会计引擎生成反写设计-寻找资源网

在微服务架构下,一个业务事件可能经过多个服务处理,trace_id能把这些分散的日志全部串联起来,让你能看到完整的处理链路。这对排查问题极其重要。

3.5 规则引擎配置模块

规则引擎是整个会计引擎的大脑,它的配置能力直接决定了系统的适配范围和灵活性。

1、规则配置分层

规则配置分为五层:

事件规则:定义哪类业务事件触发哪类会计处理,比如销售发票确认→生成应收凭证。

科目规则:定义按产品类别、客户类型、业务类型如何映射到具体科目。

金额规则:定义如何计算金额,比如含税金额、不含税金额、税额、价税合计、汇率折算等。

维度规则:定义辅助核算维度,如部门、项目、成本中心、客户、供应商等。

汇总规则:定义多笔业务事件是否需要汇总成一张凭证,比如按法人+币种+税码汇总。

2、核心校验清单

每张凭证在过账前必须通过五项校验:

借贷平衡,借方合计=贷方合计。

期间状态,会计期间打开,过账日期有效。

主数据校验,科目、客户、供应商、成本中心都是有效的。

币种税码,汇率存在,税额与税率一致。

重复入账,同一业务事件不能重复生成有效凭证。

3、主要功能点

图片[19]-会计引擎生成反写设计-寻找资源网

页面示例如下:

图片[20]-会计引擎生成反写设计-寻找资源网

3.6 冲销(红字)凭证设计

冲销凭证是财务系统中一个非常重要但也容易出问题的功能。

设计冲销凭证的核心原则是:

已过账凭证不得直接修改,只能通过生成红字冲销凭证的方式纠错。这是会计准则的基本要求,也是审计可追溯性的保证。

冲销流程六步

第一步:发起冲销申请

可以是人工申请,也可以是系统自动触发,比如发票被红冲后,系统自动触发凭证冲销申请。

第二步:原凭证锁定

系统立即将原凭证锁定,防止在冲销处理期间被并发修改。这是并发控制的关键。

第三步:审批流程

由财务主管或授权人审批冲销申请,确保重大操作有人把关。

第四步:生成红字凭证

生成与原凭证借贷方向完全相反、金额相同的冲销凭证。比如原凭证借原材料5万/贷应付账款5万,冲销凭证就是借应付账款5万/贷原材料5万。

第五步:过账冲销

红字凭证过账后,GL中相关科目余额相互抵消归零。

第六步:反写原单据

业务单据状态回退至冲销前,关联凭证号清空;日志全程记录,原凭证和冲销凭证建立关联关系,审计时可以追溯完整的纠错链条。

这里特别强调两点:

第一,冲销凭证不是删除原凭证,而是新增一张抵消凭证,两张凭证都保留在系统里;

第二,凭证关联关系(原凭证↔冲销凭证)必须建立,这是审计追踪的基础。

页面示例如下:

图片[21]-会计引擎生成反写设计-寻找资源网

3.7 引擎运行监控指标

最后讲一下引擎的运行监控。

一个生产级的会计引擎,必须有完善的监控体系,这四个指标是核心:

自动化记账率:

自动生成凭证数÷总凭证数。

目标值≥95%,低于阈值时自动触发告警。这个指标反映了引擎规则覆盖的完整性,如果这个值下降,说明有新的业务场景没有被规则覆盖,需要补充配置。

凭证生成时延:

从业务事件触发到凭证过账的耗时。P99目标<30秒。

如果时延升高,可能是规则匹配效率下降,或者GL写入出现瓶颈,需要及时排查。

异常凭证率:

生成失败或规则未命中的凭证占比。目标<1%,超标需要即时处理。

这个指标如果持续走高,通常意味着业务系统的数据质量出了问题,或者规则配置需要更新。

反写成功率:

反写成功次数÷反写总次数。目标≥99.5%,失败的进入补偿队列。

低于目标值说明业务系统接收反写的接口不稳定,需要联合排查。

这四个指标建议接入公司的监控大盘,配置相应的报警规则和处理SLA,确保引擎的健康运行。

四、案例分析

4.1 案例:发票红冲引发的凭证冲销与反写

理论讲完了,我们来用一个真实案例把所有知识点串联起来。这个案例非常典型,在实际业务中高频出现。

1、场景描述

采购部门之前对一张采购发票(金额80,000元)完成了入账,系统生成了凭证2024-12-0088:

借应付账款 8万

贷预付账款 8万

后来发现该发票开错了,需要红冲。

此时,财务需要冲销已生成的凭证,并将采购订单PO-20241201状态从“已入账”回退为“待确认”。

2、处理过程

第一步:

财务人员在系统中发起冲销申请,指定原凭证2024-12-0088。此时原凭证状态自动锁定为LOCKED,防止并发修改。

第二步:

财务主管在系统中审批通过该冲销申请。审批操作自动记录至操作日志,含审批人、时间、原因。

第三步:

引擎自动生成红字凭证2024-12-0089:

借:应付账款 8万

贷:原材料8万

 

与原凭证2024-12-0088方向完全相反。

第四步:

红字凭证2024-12-0089过账至GL,原材料和应付账款科目余额相互抵消归零。

第五步:

触发冲销反写。

采购订单PO-20241201状态从“已入账”回退为“待确认”,关联凭证号被清空。

第六步:

系统建立0088和0089两张凭证的关联关系,日志全程记录,审计时可以完整追溯这条纠错链条。

3、案例总结

这个案例综合体现了我们今天讲的所有知识点:

凭证生成(原凭证0088)→凭证冲销(红字凭证0089)→冲销反写(采购单状态回退)→日志全程记录(两张凭证关联,审计可追溯)。

整个流程有严格的操作控制,先锁定、再审批、再生成红字凭证、再过账、再反写,每一步都有日志,不允许绕过任何一个节点。这是会计系统安全性的体现。

看完不过瘾,那就自己发一篇吧!
© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容