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