移动智能报销App设计与实现
作者: 孙鑫 张翼鹤
摘要:湖北广电费用报销方面由于报销种类多、发票量大、人工审核时间长、报销操作复杂,且存在网络和设备限制,一直是集中报销模式。为解决集中报销导致人员利用率低、报销不及时、工作量大等问题,文章设计实现了一款移动智能报销App,引入移动办公和集成VPN解决网络和设备限制,OCR票据识别实现发票自动校验和智能填报,activiti流程管理引擎实现逐层审核,与现有用友NC65财务管理平台完成数据交互,为湖北广电集团实现从集中报账到个人自报账制度转换提供了基础和工具。
关键词:移动智能报销;移动办公;OCR票据识别;智能填报;移动审核
中图分类号:TP311 文献标识码:A文章编号:1009-3044(2023)16-0051-04
0 引言
随着经济迅速发展,企业需处理的报销单据正在迅速增长[1]。费用报销由业务部门报账员发起报销申请,业务部门领导和财务领导进行审批,会计校验发票生成凭证、出纳支付等工作流组成一个完整的报销流程。在广电企业中,由于业务部门人员外出特性和对报销财务知识和规则不了解,频道部门会设置专职报账人职位以便集中处理部门报销,但也存在报账员工作量大、报销时效性低、人力成本高问题。财务部门会计需要核对所有的发票信息是否符合企业报销规定,去国家税务总局全国增值税发票平台查验发票真假性,判定重复发票,工作量大。
OCR(Optical Character Recognition) 字符识别技术是利用光学技术和计算机技术通过检测字符每个像素的暗、亮模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程[2]。将OCR图片识别技术应用于报销系统的票据管理,通过识别的发票信息回写单据填报和设置规则进行票据校验,有效降低填报和审核工作难度。移动报销是将报销流程从传统纸质或PC转移到移动终端,使得员工可以在任何地方、任何地点、任何时间进行报销审批工作,解决了办公地点和网络限制,提高了报销效率[3]。
本文采用Spring-Boot框架实现后端服务,Flutter搭建跨平台客户端,OCR票据识别实现智能填报和票据自动化校验,构建一套移动智能报销App系统,替代传统的代报账制度,实现企业员工自报账,提高效率和实时性。同时与用友NC65财务平台打通,作为其中一环实现完整财务管理流程。
1 系统架构
基于Spring-Boot的移动智能报销App分成客户端、代理层、服务层和存储层,具体如图1。
1) 客户端基于Flutter框架和ant Design组件库实现。Flutter是一种google公司在2018年发布跨平台移动UI框架 [4],可同时生成iOS和Android两个高性能应用程序,实现移动端跨平台要求。
2) 代理层采用nginx和keep-alive实现系统的代理和高可用。后端部署两套系统,采用keep-alive绑定一个浮动IP到后端入口,nginx代理控制外网可接触的接口,减小数据暴露面。
3) 后端服务层基于SpringBoot框架,与OCR票据识别引擎、国家税务总局全国增值税发票查验平台、通知服务第三方服务平台交互,实现用户登录、智能填报、移动审批、消息通知管理、日志管理、版本更新、流程管理等功能。
4) 存储分为数据存储和文件存储。报销单据、票据信息等结构化数据存储在Oracle,设备和用户关系、短信验证码等临时信息存储Redis,文件存储在NAS云存储。
客户端与服务端之间是通信通过集成VPN完成,采用轻量级数据交换格式JSON[5]进行数据交换。服务层与财务管理平台通过接口调用完成数据交互,云存储则直接挂载到后端服务器上进行文件管理。
2 App 设计与实现
2.1 用户登录
系统登录在账号密码校验的基础上增加了双因子验证[6]。用户在登录时校验账号密码,账号密码校验通过后,检测Redis中是否存在当前设备唯一标识和用户的关联关系,若不存在则调用腾讯云短信发送接口发送短信验证码。短信验证码校验通过后,在Redis中存储设备唯一标识和用户关联关系及令牌to⁃ken,返回token给客户端完成登录。用户手动退出会删除用户和设备关联关系。
2.2 智能填报
智能填报分为新建单据、票据管理、智能回写、用户复核、单据校验和单据提交六步顺序依次完成。
2.2.1 新建单据
用户登录移动智能报账App后,进入单据填报模块,选择需要报销的单据类型,新建报销单。新建单据时,会根据当前登录人信息自动填写单据主体的财务组织、单据时间、费用报销单位、费用报销部门、报销人单位、报销人部门、报销人、收款对象、收款人、收款银行账号等基本信息,减少用户填写字段。
2.2.2 票据管理
票据管理分为发票影像上传和普通资料上传。
普通资料上传后,文件直接保存到对应的文件夹位置,文件信息写入数据库。发票影像上传后,会调用OCR票据识别引擎进行票据识别,获得的结构化票据信息存储在数据库。OCR票据识别类型包括增值税专票、增值税普票、卷票、电子发票、定额发票、火车票、飞机票、汽车票、出租车发票和过路费发票等,对于其他无法识别的票据,支持人工录入票据信息。
基于识别的结构化发票数据,根据会计校验发票规则,移动智能报销App实现自动化校验。根据发票代码、发票号码、开票日期、开具金额和校验码调用国家税务总局增值税发票查验平台接口实现近五年增值税发票真假查验;通过设置允许的发票抬头实现鉴别增值税发票是否符合企业报销购买方校验规则;根据发票代码和发票号码在数据库中的信息查询实现查重校验实现发票不能重复报销校验;根据发票代码、发票号码和单据编号进行发票连号校验。发票校验失败的单据无法进入审批流程,有效避免无效发票进入报销系统,提高数据准确性。
2.2.3 智能回写
根据上一步进行的票据识别信息,选择票据后将会自动根据票据信息生成报销明细和部分表头信息。
自动生成支持逐行和合并生成两种方式,逐行生成则是每个单据都会生成一行报销明细,合并生成是将所有票据信息合并生成一行报销信息,适用于不同的报销情况。
根据单据类型和发票类型,自动生成规则都不一样。以票据和使用最多的差旅费报销单逐行生成报销明细为例,差旅费报销单自动生成规则如下:
1) 飞机票。设置收支项目为差旅费,出发日期和到达日期等于飞机票的出发日期,出发地点为飞机票出发站,到达地点为飞机票到达站,出差人数为1,交通工具设置为飞机,交通金额为飞机票金额,交通费不计税金额是民航发展基金和其他税费金额总和,客运服务计算抵扣税额等于(交通费金额-交通费不计算金额)×0.09,报销金额等于交通金额。
2) 火车票。收支项目设置为差旅费,出发日期和到达日期等于火车票的出发日期,出发地点为起点站,到达地点为终点站,出差人数为1,交通工具设置为火车,交通金额为火车金额,交通费不计税金额为0,客运服务计算抵扣税额等于交通费金额×0.09,报销金额等于交通金额。
3) 汽车票。收支项目设置为差旅费,出发日期和到达日期等于火车票的出发日期,出发地点为始发地,到达地点为目的地,出差人数为1,交通工具设置为汽车,交通金额为汽车票金额,交通费不计税金额为0,客运服务计算抵扣税额等于交通费金额×0.03,报销金额等于交通金额。
4) 出租车发票。收支项目设置为差旅费,出发日期和到达日期等于出租车票的开票时间,出发地和到达地都为出租车发票地点,交通工具设置为出租车,交通金额为出租车金额,交通费不计税金额为0,客运服务计算抵扣税额等于0,报销金额等于交通金额。
5) 过路费发票。收支项目设置为差旅费,出发日期和到达日期等于过路费时间,出发地为高速起始收费站,到达地为高速终止收费站,交通工具设置为自驾车,交通金额为过路费金额,交通费不计税金额为0,客运服务计算抵扣税额等于0,报销金额等于交通金额。
6) 定额发票。选中的所有定额发票金额合计累加到生成的第一行报销明细的其他费用中。
7) 增值税专票。发票用途是住宿,则将该增值税专票金额累加到生成的第一行明细的住宿费用字段;发票用途是会议或会展,收支项目设置为会议费,出发日期和到达日期为开票时间,会议费为发票金额,专票进项税额等于专票税额,报销金额等于会议费;发票用途包含运输认为是网约车票据,收支项目为差旅费,出发日期和到达日期为开票时间,交通工具是网约车,交通费金额为发票金额,专票进项税额等于专票税额,报销金额等于交通费金额;其他的增值税发票则累加到生成的第一行报销明细的其他费用中。
8) 增值税普票和卷票:累加到生成的第一行报销明细的其他费用。
9) 更新报销主体的报销金额等于所有报销明细的总金额。
2.2.4 用户复核
填报人员进入单据填报页面确认单据填报信息,主要包括以下方面:一是查看自动生成的单据信息,确认其与票据信息是否存在差异;二是若存在无法从票据获取的字段,则人工补充;三是确认单据票据和附件已正确关联;四是若存在借款单关联和金额分摊情况,填写冲借款信息和分摊信息。
2.2.5 单据校验
单据校验是根据设置的公式或者内部数据关系进行单据校验,主要包括系统非空字段检查、预算控制检查、报销标准校验等。非空校验单据字段信息是否完整。预算控制检查与NC65财务平台的预算中心进行数据交互,确认部门年度和月度报销金额是否超过预算。报销标准校验与NC65财务平台的报销标准中心进行数据交互,确认是否满足企业设定的报销标准。
2.2.6 单据提交复核和校验无误后,用户提交,启动单据审批流程。单据提交会根据单据关联票据数自动回写附件张数。
2.3 移动审核移动审核是使用activiti流程引擎完成分层审批。
管理员设定审批流程,单据根据类型关联的审批流程完成审批。单个审批结点支持操作有批准、驳回、加签、改派和收回。批准即同意,单据进入下一个审批结点。驳回是因为信息错误或缺少票据而移动至单据某个已审批过的结点,由结点操作人修改后再次进入流程。加签时审批人无法确认单据是否符合要求,将对应的确认人加入审批中,由加签人确认后审批人再进行审核。改派则将单据转移到他人进行审批操作。收回是发现单据填写或审批失误时将单据收归到自己名下,只有已审批或者报账员在后续审批人员未进行审批操作的情况下可收回。
审核时支持用户在线查看发票和附件信息,单据审批历史结点和批语,提供完整的单据信息供审批人使用。
审批完成的单据会通过财务管理平台设定的转换关系自动进入财务管理平台的支付系统和凭证模块,进入到财务管理下一流程。
2.4 消息通知管理
单据在审批流程发生状态改变时抛出消息事件,消息通知服务通过监听所有消息事件,由事件驱动向相关审批人发送消息通知,同时消息写入消息表。客户端可查看和查询消息,查看消息会改变消息已读/未读状态。
系统对未完成的报销审批流程提供督办功能。
用户在客户端触发流程督办事件后,根据被督办对象登录时写入的用户和设备关联关系向通知服务器发送通知,由通知服务器下发到客户端,客户端收到通知,弹出通知弹框提醒用户审批单据。
2.5 日志管理
通过springboot的事件分发和监听机制实现异步记录业务操作日志,日志存储于数据库,提供查询功能。
2.6 版本更新
通过版本号实现客户端自动更新,客户端登录时校验客户端当前版本号,版本号低于当前版本号且属于强制更新时,客户端将强制更新,避免客户端版本导致的功能出错。
2.7 数据库设计
本系统设计的数据表较多,本文列出票据OCR结构信息存储表。
3 系统实现
移动智能报销App 的填报功能实现如图2、图3、图4。
4 结束语
在大数据浪潮下,企业费用报销开始转向移动化、智能化、自动化方向发展。移动智能报销App利用移动端便捷性和人工智能的方法实现智能填报、移动审核、票据管理等功能,有效降低填报复杂度和财务工作量,缩短了审批周期,提高报销信息的准确性和透明性,提高信息共享程度,为推广个人报销制度提供了基础和条件,在湖北广播电视台投入使用后,极大地降低了工作量,将进一步推广到台集团下属企业。
参考文献:
[1] 李春亭,连志刚,李国明.基于票据自动识别的财务管理系统[J].上海电机学院学报,2019,22(4):227-232.
[2] 张婷婷,马明栋,王得玉.OCR文字识别技术的研究[J].计算机技术与发展,2020,30(4):85-88.
[3] 黄叶青.财务移动报销方式在公立医院科研管理中的应用[J].海峡科学,2022(5):96-99.
[4] 胡湛晗.基于Flutter的移动应用跨平台开发的研究[J].北华航天工业学院学报,2022,32(3):17-19.
[5] 黄嘉辉.Java网络程序设计[M].北京:清华大学出版社,2002.
[6] 陈恳.基于ECC的一次性口令身份认证方案设计与实现[D].成都:西南交通大学,2005.
【通联编辑:梁书】