孫鑫,張翼鶴
(湖北廣播電視研究所,湖北 武漢 430000)
隨著經濟迅速發展,企業需處理的報銷單據正在迅速增長[1]。費用報銷由業務部門報賬員發起報銷申請,業務部門領導和財務領導進行審批,會計校驗發票生成憑證、出納支付等工作流組成一個完整的報銷流程。在廣電企業中,由于業務部門人員外出特性和對報銷財務知識和規則不了解,頻道部門會設置專職報賬人職位以便集中處理部門報銷,但也存在報賬員工作量大、報銷時效性低、人力成本高問題。財務部門會計需要核對所有的發票信息是否符合企業報銷規定,去國家稅務總局全國增值稅發票平臺查驗發票真假性,判定重復發票,工作量大。
OCR(Optical Character Recognition) 字符識別技術是利用光學技術和計算機技術通過檢測字符每個像素的暗、亮模式確定其形狀,然后用字符識別方法將形狀翻譯成計算機文字的過程[2]。將OCR圖片識別技術應用于報銷系統的票據管理,通過識別的發票信息回寫單據填報和設置規則進行票據校驗,有效降低填報和審核工作難度。移動報銷是將報銷流程從傳統紙質或PC 轉移到移動終端,使得員工可以在任何地方、任何地點、任何時間進行報銷審批工作,解決了辦公地點和網絡限制,提高了報銷效率[3]。
本文采用Spring-Boot 框架實現后端服務,Flutter搭建跨平臺客戶端,OCR票據識別實現智能填報和票據自動化校驗,構建一套移動智能報銷App 系統,替代傳統的代報賬制度,實現企業員工自報賬,提高效率和實時性。同時與用友NC65 財務平臺打通,作為其中一環實現完整財務管理流程。
基于Spring-Boot 的移動智能報銷App 分成客戶端、代理層、服務層和存儲層,具體如圖1。

圖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]進行數據交換。服務層與財務管理平臺通過接口調用完成數據交互,云存儲則直接掛載到后端服務器上進行文件管理。
系統登錄在賬號密碼校驗的基礎上增加了雙因子驗證[6]。用戶在登錄時校驗賬號密碼,賬號密碼校驗通過后,檢測Redis 中是否存在當前設備唯一標識和用戶的關聯關系,若不存在則調用騰訊云短信發送接口發送短信驗證碼。短信驗證碼校驗通過后,在Redis中存儲設備唯一標識和用戶關聯關系及令牌token,返回token給客戶端完成登錄。用戶手動退出會刪除用戶和設備關聯關系。
智能填報分為新建單據、票據管理、智能回寫、用戶復核、單據校驗和單據提交六步順序依次完成。
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 單據提交
復核和校驗無誤后,用戶提交,啟動單據審批流程。單據提交會根據單據關聯票據數自動回寫附件張數。
移動審核是使用activiti流程引擎完成分層審批。管理員設定審批流程,單據根據類型關聯的審批流程完成審批。單個審批結點支持操作有批準、駁回、加簽、改派和收回。批準即同意,單據進入下一個審批結點。駁回是因為信息錯誤或缺少票據而移動至單據某個已審批過的結點,由結點操作人修改后再次進入流程。加簽時審批人無法確認單據是否符合要求,將對應的確認人加入審批中,由加簽人確認后審批人再進行審核。改派則將單據轉移到他人進行審批操作。收回是發現單據填寫或審批失誤時將單據收歸到自己名下,只有已審批或者報賬員在后續審批人員未進行審批操作的情況下可收回。
審核時支持用戶在線查看發票和附件信息,單據審批歷史結點和批語,提供完整的單據信息供審批人使用。
審批完成的單據會通過財務管理平臺設定的轉換關系自動進入財務管理平臺的支付系統和憑證模塊,進入到財務管理下一流程。
單據在審批流程發生狀態改變時拋出消息事件,消息通知服務通過監聽所有消息事件,由事件驅動向相關審批人發送消息通知,同時消息寫入消息表。客戶端可查看和查詢消息,查看消息會改變消息已讀/未讀狀態。
系統對未完成的報銷審批流程提供督辦功能。用戶在客戶端觸發流程督辦事件后,根據被督辦對象登錄時寫入的用戶和設備關聯關系向通知服務器發送通知,由通知服務器下發到客戶端,客戶端收到通知,彈出通知彈框提醒用戶審批單據。
通過springboot 的事件分發和監聽機制實現異步記錄業務操作日志,日志存儲于數據庫,提供查詢功能。
通過版本號實現客戶端自動更新,客戶端登錄時校驗客戶端當前版本號,版本號低于當前版本號且屬于強制更新時,客戶端將強制更新,避免客戶端版本導致的功能出錯。
本系統設計的數據表較多,本文列出票據OCR結構信息存儲表。

表1 (ocr_info)
移動智能報銷App 的填報功能實現如圖2、圖3、圖4。

圖2 報銷單據類型列表

圖3 填報頁面

圖4 票據導入
在大數據浪潮下,企業費用報銷開始轉向移動化、智能化、自動化方向發展。移動智能報銷App 利用移動端便捷性和人工智能的方法實現智能填報、移動審核、票據管理等功能,有效降低填報復雜度和財務工作量,縮短了審批周期,提高報銷信息的準確性和透明性,提高信息共享程度,為推廣個人報銷制度提供了基礎和條件,在湖北廣播電視臺投入使用后,極大地降低了工作量,將進一步推廣到臺集團下屬企業。