一張圖,搞懂“發(fā)票系統(tǒng)”
很多場景下,都需要開發(fā)票。日常的我們所接觸都是作為需求方,那作為發(fā)票平臺方,我們如何實現(xiàn)對用戶的開票和發(fā)票提供呢?本文將會帶您了解“發(fā)票系統(tǒng)”,一起看看吧!
很多場景下,我們會要求對方開發(fā)票,住酒店時,購買某種服務或者商品時,用于后續(xù)的報稅或者報銷。
這是我們作為發(fā)票需求方,而如果我們作為平臺方,如何實現(xiàn)對用戶的開票和發(fā)票提供呢?比如你是一家外賣公司,要給平臺商家提供某項費用的增值稅發(fā)票。
一、先認清要開的“票”
廣義上去看,“票”的種類很多,不止是增值稅專票或者普票,我們可以將一種“憑證”都可以認為是一種“票”,比如電子回單、消費小票等等。
他們實現(xiàn)的底層邏輯和方法是類似,可以共用一個抽象模型。
在要實現(xiàn)自主開票之前,我們要先確定這是一個什么“票”。
這張票的樣子,也就是板式,票上需要展示的數(shù)據(jù),這些數(shù)據(jù)來自哪里,是業(yè)務系統(tǒng)里還是從用戶那采集得到。
如下圖這張增值稅普通發(fā)票,其中的納稅人識別號就需要從用戶那里采集得到,在開通獲得發(fā)票以后,又可以得到發(fā)票代碼等數(shù)據(jù)。
因此,先分析你要實現(xiàn)的發(fā)票版式和數(shù)據(jù)參數(shù),以及數(shù)據(jù)獲取方式。
二、把握發(fā)票系統(tǒng)的框架
要實現(xiàn)一個開票系統(tǒng),怎么做,要先“心中有框架”。
先把大的邏輯和結構搞清楚,再去分塊去實現(xiàn),從宏觀到微觀的過程,如下圖框架。
首先就是“數(shù)據(jù)準備”。
要明確開的各個票種的源數(shù)據(jù)是什么,從哪里獲取,是賬務數(shù)據(jù)、賬單數(shù)據(jù)、還是稅單數(shù)據(jù)。
并且,該票種所需要的開票數(shù)據(jù)也不一定從一個地方就能完全獲得,可能是一個字段來自一個地方,比如稅號來自用戶中心,從客戶端采集的,而開票金額字段從賬務中心獲得。
因此,源數(shù)據(jù)是要“拼出來”。
然后就是開票的模式、發(fā)票的模版等基礎配置,不同的開票模式流程不同,例如你要開“消費小票”那么就不需要發(fā)票服務商,完全可以自主閉環(huán)開出來,而要開正規(guī)的增值稅發(fā)票,就需要依賴外部服務商。
所以,發(fā)票模式跟支付模式類似,對私和對公有區(qū)別,快捷支付和網(wǎng)關支付也有區(qū)別。
接下來就是開票主流程,所有票種的開具都可以通過這個流程實現(xiàn),三大步:開票規(guī)則解析、開票數(shù)據(jù)封裝、提交開票申請。
其中提交開票申請,類似提交支付申請,可能不同國家、不同票種要提交給不同的發(fā)票服務商。
三、數(shù)據(jù)、狀態(tài)、能力、歷史
發(fā)票系統(tǒng)要重點想明白和管理好4個核心。
發(fā)票的數(shù)據(jù),就是最原始的發(fā)票單據(jù),可能每個商家每個結算周期一條數(shù)據(jù),這條數(shù)據(jù)記錄了開什么票、開票金額是多少、商家的稅號等信息。
開票的狀態(tài),每條數(shù)據(jù)的開票狀態(tài)是什么,是待開、開票中、沖銷了、還是已開票。
開票的能力,不同的票種或者接的不同服務商所需要的開票能力不同,首次開票、沖銷能力、重開能力、下載發(fā)票能力、開票調整能力,這些能力的接入和實現(xiàn)依賴實際的需求。
最后就是開票歷史,每一章開好的票以某種形式存儲在數(shù)據(jù)庫中,方便用戶或者后臺管理人員查看,pdf形式、xml形式或者是圖片形式。
四、選服務商、接所需能力
如果某票種需要接入發(fā)票服務商,那么就需選擇一個適合自己的服務商,不同國家、不同票種可能適合的服務商不同。
但是,無論什么服務商,其服務接入邏輯是類似的,提供的能力也是類似的。
這一點跟接入支付渠道商差不多。
無論是接入哪家開票服務商,其實現(xiàn)的邏輯都如下圖類似,下圖以Gosocket為例,而且這家服務商是全球性質的,比如你接入了墨西哥這個國家,那么在另一個國家也有可能不需要重復接入,只需要修改幾個傳參、語種即可。
整個邏輯流程圖里要搞清楚這幾個主要問題。
開票的能力,圖中包含了“申請開票”“下載發(fā)票”“沖銷發(fā)票”三個主要能力。
然后就是通過開票結果對發(fā)票源數(shù)據(jù)的“開票狀態(tài)”的更新,開票成功則更新為已開票、開票失敗則保持“待開票”的狀態(tài),沖銷成功以后將“已開票”狀態(tài)更新為“待開票”。
針對不同的開票狀態(tài),可以進行不同的操作,例如自動開票、沖銷發(fā)票、手動開票等。
然后就是下載獲得了發(fā)票以后,將發(fā)票進行存儲,提供給后臺和用戶查看和下載,或者郵件自動發(fā)送給用戶。
比如我們在滴滴App內選擇“開票”,勾選對應訂單以后申請開票,就需要填寫一個收票“郵箱”。
該郵箱,就會存儲到發(fā)票系統(tǒng)的“用戶郵箱”中,用于向用戶主動發(fā)送電子發(fā)票。
五、想好怎么給用戶
好了,通過上面的努力,我們終于可以實現(xiàn)自動開票了。
最后一步就是想明白你要如何將發(fā)票提供給需要的用戶。
比較常見的就是發(fā)送用戶指定的郵箱。
同樣,對于商家來說也可以在其后臺提供發(fā)票自主下載的能力。
以上就是如何實現(xiàn)一個發(fā)票管理系統(tǒng)的方法論。
專欄作家
陳天宇宙,微信公眾號:陳天宇宙,人人都是產品經理專欄作家。多平臺支付領域專欄作者,十年資深產品;專注為10萬支付產品經理和支付機構以及企業(yè)提供深度支付內容和服務!
本文原創(chuàng)發(fā)布于人人都是產品經理,未經許可,禁止轉載。
題圖來自 Unsplash,基于 CC0 協(xié)議。
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。
非常體系化的介紹了“發(fā)票系統(tǒng)”