CN110473029A - 超限额发票的拆分方法、装置、计算机设备和存储介质 - Google Patents
超限额发票的拆分方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN110473029A CN110473029A CN201910591853.XA CN201910591853A CN110473029A CN 110473029 A CN110473029 A CN 110473029A CN 201910591853 A CN201910591853 A CN 201910591853A CN 110473029 A CN110473029 A CN 110473029A
- Authority
- CN
- China
- Prior art keywords
- invoice
- amount
- ticket
- money
- making out
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/04—Billing or invoicing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/10—Tax strategies
Landscapes
- Business, Economics & Management (AREA)
- Development Economics (AREA)
- Accounting & Taxation (AREA)
- Engineering & Computer Science (AREA)
- Finance (AREA)
- Strategic Management (AREA)
- Marketing (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Economics (AREA)
- Theoretical Computer Science (AREA)
- Technology Law (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
- Cash Registers Or Receiving Machines (AREA)
Abstract
本申请涉及一种超限额发票的拆分方法、装置、计算机设备和存储介质。所述方法包括:判断待开发票的开票金额是否超过预设开票限额以及开票行数是否超过预设上限行数;若开票金额未超过预设开票限额且开票行数超过预设上限行数,根据预设上限行数将该开票行数进行拆分以得到多张子发票;若开票金额超过预设开票限额且开票行数未超过预设上限行数,根据预设开票限额将开票金额进行拆分,得到多张子发票;若开票金额超过预设开票限额且开票行数超过预设上限行数,根据预设上限行数以及预设开票限额将开票金额以及开票行数进行拆分以得到多张子发票。因此自动化对超限额发票进行拆分处理,避免发票开具效率低的问题。
Description
技术领域
本申请涉及企业应用中税务管理技术领域,特别是涉及一种超限额发票的拆分方法、装置、计算机设备和存储介质。
背景技术
目前包括电子发票、增值税发票以及普通发票等在内的多种发票基本实现了自动收集和开票,但是对于超限额的发票还需要线下人工开具或是在业务系统里面手工拆分处理后再开具。线下人工开具和人为手工拆分降低了开票时效性和用户体验,准确性得不到保证,也增加了客户开票的复杂度。
发明内容
基于此,有必要针对上述技术问题,提供一种能够自动化拆分发票的超额发票的拆分方法、装置、计算机设备和存储介质,以自动化对超限额的发票进行拆分处理,避免人工拆分发票引起的发票开具效率低的问题。
一种超限额发票的拆分方法,所述方法包括:判断待开发票的开票金额是否超过预设开票限额,以及待开发票的开票行数是否超过预设上限行数;若所述待开发票的开票金额未超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数将所述待开发票的开票行数进行拆分,得到多张子发票;若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额将所述待开发票的开票金额进行拆分,得到多张子发票;若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数以及所述预设开票限额将所述待开发票的开票金额以及开票行数进行拆分,得到多张子发票。
一种超限额发票的拆分装置,所述装置包括:判断模块,用于判断待开发票的开票金额是否超过预设开票限额,以及待开发票的开票行数是否超过预设上限行数;第一拆分模块,用于若所述待开发票的开票金额未超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数将所述待开发票的开票行数进行拆分,得到多张子发票;第二拆分模块,用于若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额将所述待开发票的开票金额进行拆分,得到多张子发票;第三拆分模块,用于若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数以及所述预设开票限额将所述待开发票的开票金额以及开票行数进行拆分,得到多张子发票。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:判断待开发票的开票金额是否超过预设开票限额,以及待开发票的开票行数是否超过预设上限行数;若所述待开发票的开票金额未超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数将所述待开发票的开票行数进行拆分,得到多张子发票;若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额将所述待开发票的开票金额进行拆分,得到多张子发票;若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数以及所述预设开票限额将所述待开发票的开票金额以及开票行数进行拆分,得到多张子发票。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:判断待开发票的开票金额是否超过预设开票限额,以及待开发票的开票行数是否超过预设上限行数;若所述待开发票的开票金额未超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数将所述待开发票的开票行数进行拆分,得到多张子发票;若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额将所述待开发票的开票金额进行拆分,得到多张子发票;若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数以及所述预设开票限额将所述待开发票的开票金额以及开票行数进行拆分,得到多张子发票。
上述超额发票的拆分方法、装置、计算机设备和存储介质,在接收到待开发票的开具申请时,对待开发票的开票金额以及开票行数进行判断。判断待开发票的开票金额是否超过预设开票限额,以及待开发票的开票行数是否超过预设上限行数。若待开发票的开票金额未超过预设开票限额,且待开发票的开票行数超过预设上限行数,根据预设上限行数将待开发票的开票行数进行拆分,得到多张子发票。若待开发票的开票金额超过预设开票限额,且待开发票的开票行数未超过预设上限行数,根据预设开票限额将待开发票的开票金额进行拆分,得到多张子发票;若待开发票的开票金额超过预设开票限额,且待开发票的开票行数超过预设上限行数,根据预设上限行数以及预设开票限额将待开发票的开票金额以及开票行数进行拆分,得到多张子发票。因此,可以基于超限额发票中开票行数超限、开票金额超限以及两者都超限的三种超限情况,自动化拆分超限额发票,生成满足发票开具要求的多张子发票,提高了发票开具的时效性。
附图说明
图1为一个实施例中的一种超额发票的拆分方法的应用环境图;
图2为一个实施例中的一种超额发票的拆分方法的流程示意图;
图3为一个实施例中S200步骤的流程示意图;
图4为S200步骤的一个实施场景中的拆分示意图;
图5为一个实施例中S300步骤的流程示意图;
图6为另一个实施例中S300步骤的流程示意图;
图7为一个实施例中一种超额发票的拆分方法中商品分组逻辑示意图;
图8为一个实施例中一种超额发票的拆分方法的开票系统架构示意图;
图9为一个实施例中一种超额发票的拆分方法的拆分流程图;
图10为一个实施例中一种超额发票的拆分装置的结构框图;
图11为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的一种超限额发票的拆分方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104通过网络进行通信。终端102向服务器104发送发票的开票申请请求。服务器104读取到终端 102的开票申请请求以及请求中的开票数据,根据开票数据对超限额发票进行拆分处理,得到多张满足开票要求的子发票。开票要求中对于开票超限的限定一般分为商品行数超限、开票金额超限和两者都超限。开票限额与商户资质有关,有千元版、万元版、十万元版等。超过上述限额,服务器104将终端102提交请求中的原发票拆分之后再开具满足开票要求的多张发票。另外受开票端限制,单张发票最大支持开票商品行数也有限制,超过限制时服务器104也需将发票中的商品行拆分成不同的分组后生成多张子发票。本申请中的服务器104,通过对终端102提交的发票开票申请,判断待开发票是否属于超限额发票。若是,则将待开发票进行拆分处理后,生成多张满足发票开具要求的子发票。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种超限额发票的拆分方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
S100,判断待开发票的开票金额是否超过预设开票限额,以及待开发票的开票行数是否超过预设上限行数。
在本实施例中,服务器接收到终端发送的开具待开发票的请求,并从该请求中读取出待开发票中的开票数据。开票数据中包括待开发票的开票金额以及待开发票的开票行数。其中,服务器根据发票开具的要求,提前设置有预设开票限额和预设上限行数。预设开票限额和预设上限行数可随时灵活配置。进一步地,服务器对开票数据进行校验,包括待开发票的开票金额和商品行金额是否匹配、商品行数量乘以单价是否与商品行金额匹配等,将满足条件的数据进行后续处理。校验完毕之后,服务器判断待开发票的开票金额是否超过系统中预设开票限额,以及待开发票的开票行数是否超过系统中预设上限行数。根据判断结果执行下述步骤S200或步骤 S300或步骤S400。
S200,若所述待开发票的开票金额未超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数将所述待开发票的开票行数进行拆分,得到多张子发票。
在本实施例中,服务器判断的结果为,待开发票的开票金额未超过预设开票限额且待开发票的开票行数超过预设上限行数,此时服务器根据预设上限行数将待开发票的开票行数进行拆分,得到多张子发票。
在该实施例的一个实施方式中,步骤S200中“根据所述预设上限行数将所述待开发票的开票行数进行拆分,得到多张子发票”,包括:根据所述待开发票的开票行数和所述预设上限行数,对所述待开发票待开发票的开票行数进行拆分,得到Roundup(S)张子发票,S为所述待开发票的开票行数和所述预设上限行数的商值,Roundup(S)表示对S向上取整。具体地,如图3所示,在该实施方式的一个实施过程中,该步骤包括:
S210,将所述待开发票的开票行数除以所述预设上限行数,得到商值 N和余数n。
S230,当所述余数n为零时,将所述待开发票拆分成N张子发票,控制每张所述子发票的开票行数为所述预设上限行数,生成所述N张子发票。
S250,当所述余数n不为零时,将所述待开发票拆分成N+1张子发票,控制N张子发票中每张发票的开票行数为所述预设上限行数,剩余子发票的开票行数为n行,生成所述N+1张子发票。
具体地,在该场景中,待开发票中的商品行数大于最大开票行数,但是待开发票中的开票金额没有超限,此时服务器只需要将待开发票中的商品行分组处理即可。例如,如图4所示,预设上限行数为99行,服务器将待开发票中的商品行数除以99后得到商值N和余数n。N张子发票中每张子发票的商品行数为99,剩余一张子发票的商品行数为n。因此,通过该实施方式,控制拆分后大多数子发票的商品行数为预设上限行数,可减少开具的子发票的数量,节能环保,为用户提供更好的体验和服务。
S300,若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额将所述待开发票的开票金额进行拆分,得到多张子发票。
在本实施例中,服务器判断的结果为,待开发票的开票金额超过预设开票限额且待开发票的开票行数未超过预设上限行数,此时服务器根据预设开票限额将待开发票的开票金额进行拆分,得到多张子发票。具体可以是,按照开票金额最大化原则将待开发票的开票金额进行拆分,根据拆分结果生成多张子发票。其中,开票金额最大化原则为控制每张子发票的金额尽可能最大化。该场景下,待开发票的商品行数在最大开票行数内,但是开票金额超过最大开票金额。此时,开票金额超过最大开票金额具体分为单商品开票金额超限和多商品开票金额超限。其中,单商品开票金额超限又分为商品单价金额超限和商品单价金额未超限。
在该实施例的一个实施方式中,所述待开发票的开票金额包括单行商品金额和商品单价金额,所述预设开票限额包括单行商品限额和商品单价限额。此时,步骤S300,包括:若满足第一条件且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额通过第一拆分方式将所述待开发票的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额。其中,所述第一条件为:所述单行商品金额超过所述单行商品限额以及所述商品单价金额超过所述商品单价限额。如图5所示,所述第一拆分方式包括如下步骤:
S301,根据预设开票最大限额、所述待开发票中的开票金额、商品单价和商品数量获取所述多张子发票中第一子发票中的开票金额、商品数量和商品金额,以及所述第一子发票的数量值。
具体地,根据开票最大限额获取第一子发票的开票金额。根据所述第一子发票的开票金额、所述待开发票的开票金额和所述待开发票的商品数量获取所述第一子发票中的商品数量。根据所述第一子发票中的商品数量和所述待开发票中的商品单价获取所述第一子发票的商品金额。根据所述待开发票的开票金额和所述第一子发票的开票金额获取所述多张子发票中所述第一子发票的数量值。
S303,根据所述待开发票的开票金额、所述第一子发票的开票金额以及数量值、所述第一子发票中的商品数量以及所述数量值,获取所述多张子发票中第二子发票的开票金额、商品数量和商品金额。
具体地,根据所述待开发票的开票金额、所述第一子发票的开票金额和所述数量值获取第二子发票的开票金额;根据所述待开发票的商品数量、所述第一子发票中的商品数量以及所述数量值获取第二子发票中的商品数量。根据所述第二子发票中的商品数量以及所述待开发票中的商品单价获取所述第二子发票的商品金额。
该场景下的实施例中,生成的多张子发票包括L张第一子发票和1张第二子发票;L表示所述数量值。
此外,在该实施方式中,所述方法还包括:通过以下方式得到所述第一拆分方式中第一子发票中的运费和折扣,以及所述第二子发票中的运费和折扣:
根据所述第一子发票的开票金额和商品金额、所述待开发票的开票金额以及预设基础运费获取所述第一子发票中的运费和折扣;根据所述预设基础运费、所述第一子发票中的运费和所述数量值、所述第二子发票的开票金额和商品金额,获取所述第二子发票中的运费和折扣。
具体地,根据所述第一子发票的开票金额、所述待开发票的开票金额以及预设基础运费获取所述第一子发票中的运费;根据所述第一子发票的商品金额、所述第一子发票中的运费以及所述第一子发票的开票金额获取所述第一子发票中的折扣;根据所述预设基础运费、所述第一子发票中的运费以及所述第一子发票的数量值获取所述第二子发票中的运费;根据所述第二子发票的商品金额、所述第二子发票中的运费以及所述第二子发票的开票金额获取所述第二子发票中的折扣。
为了进一步说明上述场景下的实施例,以下给出一具体实施方式:
按照开票金额最大化原则进行拆分,先计算拆分后开票金额(最大限额M减去1元),再计算出拆分数量,拆分数量*单价(拆分前后商品单价保持不变)得到商品金额。若包含运费再按比例折算出拆分运费,最后根据拆分金额、商品金额、运费算出折扣,规则如下:
K1=M–1;
S1=ROUNDDOWN(K1/K0*S0);
J1=S1*P;
Num=INT(K0/K1);
Kn=K0-k1*Num
Sn=S0–S1*Num
Jn=Sn*P
其中,M为开票最大限额,K1为第一子发票的开票金额,K0为所述待开发票的开票金额,S0为所述待开发票的商品数量,S1为第一子发票中的商品数量,J1为第一子发票的商品金额,P为商品单价;Num为可拆分金额为K1的第一子发票张数,Kn为第二子发票的开票金额,Sn为第二子发票的商品数量,Jn为第二子发票的商品金额;所述多张子发票包括 NuL张第一子发票和一张第二子发票。
此时,运费和折扣的计算方式如下:
第一子发票的运费计算为:T1=ROUNDDOWN(K1/K0*T0)。
若运费为0,此处运费计算可忽略。
第一子发票的折扣计算为:D1=J1+T1-K1。
若折扣为0,此处折扣计算可忽略。
考虑D1可能为负数,此时需要重计算开票金额和折扣:
第二子发票的运费计算为:Tn=T0–T1*Num
若运费为0,此处运费计算可忽略。
第二子发票的折扣计算为:Dn=Jn+Tn-Kn
同上面折扣处理,D1可能为负数,此时需要重计算开票金额和折扣:
T0为基础运费,T1为第一子发票的运费,Tn为第二子发票的运费, D0为基础折扣,D1为第二子发票的折扣,Dn为第二子发票的折扣。
在该实施例的另一个实施方式中,步骤S300,还包括:若满足第二条件且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额通过第二拆分方式将所述待开发票的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额。其中,所述第二条件为:所述单行商品金额超过所述单行商品限额,以及所述商品单价金额未超过所述商品单价限额。如图6所示,所述第二拆分方式包括如下步骤:
S305,根据预设开票最大限额、所述待开发票中的商品单价以及商品数量、预设基础运费和预设基础折扣获取所述多张子发票中的第一子发票中的开票金额、商品数量、商品金额、运费、折扣以及所述数量值。
S307,根据所述待开发票的开票金额、所述第一子发票的开票金额以及所述数量值、所述第一子发票中的商品数量以及所述数量值,获取所述多张子发票中第二子发票的开票金额、商品数量和商品金额、运费以及折扣。
具体地,根据开票最大限额、所述待开发票中的商品单价、所述预设基础运费、所述待开发票的商品数量以及预设基础折扣获取所述第一子发票中的商品数量;根据所述第一子发票中的商品数量以及所述待开发票中的商品单价获取所述第一子发票的商品金额;根据所述第一子发票中的商品数量、所述待开发票的商品数量以及所述预设基础运费获取所述第一子发票中的运费;根据所述第一子发票中的商品数量、所述待开发票的商品数量以及所述预设基础折扣获取所述第一子发票中的折扣;根据所述第一子发票的商品金额、所述第一子发票中的运费以及所述第一子发票中的折扣获取所述第一子发票的开票金额;根据所述待开发票的开票金额和所述第一子发票的开票金额获取所述多张子发票中所述第一子发票的数量值;根据所述待开发票的开票金额、所述第一子发票的开票金额和所述数量值获取第二子发票的开票金额;根据所述待开发票的商品数量、所述第一子发票中的商品数量以及所述数量值获取第二子发票中的商品数量;根据所述第二子发票中的商品数量以及所述待开发票中的商品单价获取所述第二子发票的商品金额;其中,所述多张子发票包括L张第一子发票和1张第二子发票,L表示所述数量值。
为了进一步说明上述场景下的实施例,以下给出一具体实施方式:
该场景参见规则如下:
S1=INT((M–1)/(P+(T0–D0/S0));
J1=S1*P;
T1=ROUNDDOWN(S1/S0*T0);
D1=ROUNDDOWN(S1/S0*D0);
K1=J1+T1–D1;
Num=INT(K0/K1);
Kn=K0-k1*Num;
Sn=S0–S1*Num;
Jn=Sn*P;
Tn=T0–T1*Num;
若运费为0,此处运费计算可忽略。
第二子发票的折扣计算为:Dn=Jn+Tn-Kn
同上面折扣处理,D1可能为负数,此时需要重计算开票金额和折扣:
其中,M为开票最大限额,K1为第一子发票的开票金额,K0为所述待开发票的开票金额,S0为所述待开发票的商品数量,S1为第一子发票中的商品数量,J1为第一子发票的商品金额,P为商品单价;Num为可拆分金额为K1的第一子发票张数,Kn为第二子发票的开票金额,Sn为第二子发票的商品数量,Jn为第二子发票的商品金额;T0为基础运费,T1为第一子发票的运费,Tn为第二子发票的运费,D0为基础折扣,D1为第二子发票的折扣,Dn为第二子发票的折扣。所述多张子发票包括NuL张第一子发票和一张第二子发票。
在该实施例的一个实施方式中,所述待开发票的开票金额还包括多行商品金额和多行商品单价金额。此时,步骤S300,还包括:根据所述多行商品金额和多行商品单价金额,通过第一处理方式、第二处理方式和第三处理方式生成所述多张子发票。其中,所述第一处理方式为:若满足所述第一条件,通过所述第一拆分方式将所述待开发票中满足所述第一条件的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额。所述第二处理方式为:若满足所述第二条件,通过所述第二拆分方式将所述待开发票中满足所述第二条件的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额。所述第三处理方式为:若所述待开发票的开票金额中满足所述单行商品金额未超过所述单行商品限额的条件,根据满足该条件的开票金额生成对应的子发票。
在该实施方式中,待开发票的开票金额还包括多行商品金额和多行商品单价金额。在该场景下,根据商品单行金额是否超过预设开票限额,将待开发票的开票金额分为以下三组情况:
①单行商品金额超限且商品单价金额超限
②单行商品金额超限且商品单价金额未超限
③单行商品金额未超限
其中,①组情况满足所述第一条件,通过所述第一拆分方式将所述待开发票中满足所述第一条件的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额。
②组情况满足所述第二条件,通过所述第二拆分方式将所述待开发票中满足所述第二条件的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额。
③组情况由于商品行数未超限,并且单行商品金额未超限,根据满足该条件的开票金额生成对应的子发票,直接将满足该条件的开票金额组合后请求开票。
需要说明的是,此处的第一条件、第二条件、第一拆分方式以及第二拆分方式,在以上实施例中已解释说明,此处不再详述。
S400,若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数以及所述预设开票限额将所述待开发票的开票金额以及开票行数进行拆分,得到多张子发票。
在本实施例中,所述待开发票的开票金额还包括多行商品金额和多行商品单价金额,并且所述待开发票的开票行数超过所述预设上限行数以及所述待开发票的开票金额超过所述预设开票限额。也即是,待开发票中商品的开票行数超过最大允许行数且开票金额也超过最大限额,此时,根据所述预设上限行数以及所述预设开票限额将所述待开发票的开票金额以及开票行数进行拆分,得到多张子发票。
具体地,根据所述多行商品金额和多行商品单价金额,通过所述第一处理方式、所述第二处理方式和第四处理方式生成所述多张子发票。其中,所述第四处理方式为:所述待开发票的开票金额满足所述单行商品金额未超过所述单行商品限额的条件时,采用最优组合拆分法生成所述子发票。所述最优组合拆分法如下:
按照单行商品金额从大到小将所述待开发票的商品进行排序,得到商品集合;
执行累加步骤;所述累加步骤包括:依序将商品集合中多项商品的商品金额进行累加,直至累加和最接近所述预设开票限额或累加的行数等于所述预设上限行数时,根据该进行累加的多项商品的信息得到子发票;
将所述累加步骤中的多项商品从所述商品集合中剔除,对剔除后的所述商品集合中的商品执行所述累加步骤,直至所述商品集合中不包含商品为止。
在该实施例中,第一处理方式和第二处理方式,如以上实施例所述。以上实施例中给出了两者对于待开发票的开票金额中商品金额以及商品单价的判断条件,及其对应的拆分处理方式。此处不再详述。对于第四处理方式,根据开票最大商品行数和最大商品金额限额组合出最优的方案。具体使用贪婪算法,使重新组合的开票金额越接近开票限额即可使拆分的票数最小,也即是所述最优组合拆分法。
在最优组合拆分法中,首先按照单行商品金额从大到小将所述待开发票的商品进行排序,得到商品集合。进一步地,执行累加步骤。累加步骤中,包括:依序将商品集合中多项商品的商品金额进行累加,直至累加和最接近所述预设开票限额或累加的行数等于所述预设上限行数时,根据该进行累加的多项商品的信息生成子发票。每次执行累加步骤后,从商品集合中将参与累加步骤的多项商品从所述商品集合中剔除,得到剔除后的商品集合。进一步地,在对剔除后的商品集合执行所述累加步骤。依次类推,直至所述商品集合中不包含商品为止。
对于该实施例,以下给出一具体实施场景:
该场景较为复杂,待开发票中的商品行数超过最大允许行数且商品的开票金额也超过最大限额,对商品行进行分组,具体可参照图7所示的分组逻辑。
因此,可将待开发票分为以下三组情况:
④单行商品金额超限且商品单价金额超限
⑤单行商品金额超限且商品单价金额未超限
⑥单行商品金额未超限
针对不同的分组采用对应的处理方法:
其中,④组情况采用第一处理方式。⑤组情况采用第二处理方式。具体处理方式参见以上第一处理方式和第二处理方式的说明,此处不再详述。⑥组情况单行商品金额未超限,以最大开票限额进行组合。组合参看“最优组合拆分逻辑”部分,使分组达到最少。最优组合拆分逻辑如下所示:
(1)先将开票金额按照从大到小依次排序;
{Arrays.sort(array[],Collections.reverseOrder());
(2)从第一位开始和后面的数据依次相加直到结束,如果各商品行的和将要大于等于最大开票限额或相加的商品行数将要大于等于最大开票行数时停止,本次相加的所有商品行即为一个拆分开票分组;
(3)剩下的元素重复步骤2直到没有元素剩下;
执行完该最优组合拆分逻辑后,可得到最优拆分组合。
上述实施例所述的超限额发票的拆分方法,服务器通过判断待开发票的开票金额是否超过预设开票限额以及待开发票的开票行数是否超过预设上限行数。根据三种判断结果,对每种判断结果给出对应的拆分方式,自动完成超限发票的拆分处理,无需人员手动介入,省时高效,准确方便。另外,该方法普遍适用于电子发票、增值税发票、普通发票等多类票据,适用范围广。该方法中实现了智能拆分组合算法,使拆分达到最优组合,开票张数最少,既最大的提升效率同时又节能环保。
为了进一步详述上述实施例所述的超限额发票的拆分方法,以下结合开具电子发票的架构系统,给出一具体的实施方式:
该架构系统包括交易系统和开票前置系统交互图,如图8所示。多个线上交易系统向服务器后端提交交易信息。服务器后端包括开票前置模块和开票系统。开票前置模块对线上交易系统提交的交易信息进行验证以及拆分,并输出拆分结果等。其中,交易信息中包含待开发票的开票数据。开票数据包括开票金额和开票行数。线上交易系统输出拆分结果后,向开票系统发送开票请求,开票系统根据拆分结果进行自动化开票。其中,开票前置模块基于线上交易系统提交的交易信息进行开票拆分的拆分流程图如图9所示。
因此,随着电子发票的全业态覆盖,无纸化自动开票普及到各个业态。使用本申请的超限额发票的拆分方法自动化开具电子发票,电子发票的业务系统改动很小,无需再重复开发,且该方法提供了最优的拆分逻辑,计算高效。同时提供标准SDK,支持快速接入,输出标准拆分结果。业务系统可以无缝集成,无需在重复设计开发,提高了效率。
应该理解的是,虽然说明书附图的各个流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,各个流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图10所示,提供了一种超限额发票的拆分装置。该拆分装置包括:判断模块100、第一拆分模块200、第二拆分模块 300和第三拆分模块400,其中:
判断模块100,用于判断待开发票的开票金额是否超过预设开票限额,以及待开发票的开票行数是否超过预设上限行数。
在本实施例中,服务器接收到终端发送的开具待开发票的请求,并从该请求中读取出待开发票中的开票数据。开票数据中包括待开发票的开票金额以及待开发票的开票行数。其中,服务器根据发票开具的要求,提前设置有预设开票限额和预设上限行数。预设开票限额和预设上限行数可随时灵活配置。进一步地,服务器对开票数据进行校验,包括待开发票的开票金额和商品行金额是否匹配、商品行数量乘以单价是否与商品行金额匹配等,将满足条件的数据进行后续处理。校验完毕之后,服务器判断待开发票的开票金额是否超过系统中预设开票限额,以及待开发票的开票行数是否超过系统中预设上限行数。根据判断结果选择第一拆分模块200、第二拆分模块300或第三拆分模块400,由选择的拆分模块进行后续的开票拆分处理。
第一拆分模块200,用于若所述待开发票的开票金额未超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数将所述待开发票的开票行数进行拆分,得到多张子发票。
在本实施例中,服务器判断的结果为,待开发票的开票金额未超过预设开票限额且待开发票的开票行数超过预设上限行数,此时服务器根据预设上限行数将待开发票的开票行数进行拆分,得到多张子发票。
在一实施方式中,第一拆分模块200还用于根据所述待开发票的开票行数和所述预设上限行数,对所述待开发票待开发票的开票行数进行拆分,得到Roundup(S)张子发票,S为所述待开发票的开票行数和所述预设上限行数的商值,Roundup(S)表示对S向上取整。在一具体实施方式中,第一拆分模块200包括计算单元210、第一拆分单元220、第二拆分单元230。其中,计算单元210用于将所述待开发票的开票行数除以所述预设上限行数,得到商值N和余数n。第一拆分单元220用于当所述余数n为零时,将所述待开发票拆分成N张子发票,控制每张所述子发票的开票行数为所述预设上限行数,生成所述N张子发票。第二拆分单元230 用于当所述余数n不为零时,将所述待开发票拆分成N+1张子发票,控制 N张子发票中每张发票的开票行数为所述预设上限行数,剩余子发票的开票行数为n行,生成所述N+1张子发票。
具体地,在该场景中,待开发票中的商品行数大于最大开票行数,但是待开发票中的开票金额没有超限,此时服务器只需要将待开发票中的商品行分组处理即可。例如,如图4所示,预设上限行数为99行,服务器将待开发票中的商品行数除以99后得到商值N和余数n。N张子发票中每张子发票的商品行数为99,剩余一张子发票的商品行数为n。因此,通过该实施方式,控制拆分后大多数子发票的商品行数为预设上限行数,可减少开具的子发票的数量,节能环保,为用户提供更好的体验和服务。
第二拆分模块300,用于若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额将所述待开发票的开票金额进行拆分,得到多张子发票。
在本实施例中,服务器判断的结果为,待开发票的开票金额超过预设开票限额且待开发票的开票行数未超过预设上限行数,此时服务器根据预设开票限额将待开发票的开票金额进行拆分,得到多张子发票。具体可以是,按照开票金额最大化原则将待开发票的开票金额进行拆分,根据拆分结果生成多张子发票。其中,开票金额最大化原则为控制每张子发票的金额尽可能最大化。该场景下,待开发票的商品行数在最大开票行数内,但是开票金额超过最大开票金额。此时,开票金额超过最大开票金额具体分为单商品开票金额超限和多商品开票金额超限。其中,单商品开票金额超限又分为商品单价金额超限和商品单价金额未超限。
在一实施方式中,所述待开发票的开票金额包括单行商品金额和商品单价金额,所述预设开票限额包括单行商品限额和商品单价限额。此时,第二拆分模块300包括第三拆分单元310。第三拆分单元310用于若满足第一条件且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额通过第一拆分方式将所述待开发票的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额。其中,所述第一条件为:所述单行商品金额超过所述单行商品限额以及所述商品单价金额超过所述商品单价限额。所述第一拆分方式包括如下步骤:根据预设开票最大限额、所述待开发票中的开票金额、商品单价和商品数量获取所述多张子发票中第一子发票中的开票金额、商品数量和商品金额,以及所述第一子发票的数量值。根据所述待开发票的开票金额、所述第一子发票的开票金额以及数量值、所述第一子发票中的商品数量以及所述数量值,获取所述多张子发票中第二子发票的开票金额、商品数量和商品金额。
具体地,根据开票最大限额获取第一子发票的开票金额。根据所述第一子发票的开票金额、所述待开发票的开票金额和所述待开发票的商品数量获取所述第一子发票中的商品数量。根据所述第一子发票中的商品数量和所述待开发票中的商品单价获取所述第一子发票的商品金额。根据所述待开发票的开票金额和所述第一子发票的开票金额获取所述多张子发票中所述第一子发票的数量值。
根据所述待开发票的开票金额、所述第一子发票的开票金额和所述数量值获取第二子发票的开票金额;根据所述待开发票的商品数量、所述第一子发票中的商品数量以及所述数量值获取第二子发票中的商品数量。根据所述第二子发票中的商品数量以及所述待开发票中的商品单价获取所述第二子发票的商品金额。该场景下的实施例中,生成的多张子发票包括L 张第一子发票和1张第二子发票。
此外,在该实施方式中,还包括:通过以下方式得到所述第一拆分方式中第一子发票中的运费和折扣,以及所述第二子发票中的运费和折扣:
根据所述第一子发票的开票金额和商品金额、所述待开发票的开票金额以及预设基础运费获取所述第一子发票中的运费和折扣;根据所述预设基础运费、所述第一子发票中的运费和所述数量值、所述第二子发票的开票金额和商品金额,获取所述第二子发票中的运费和折扣。
具体地,根据所述第一子发票的开票金额、所述待开发票的开票金额以及预设基础运费获取所述第一子发票中的运费;根据所述第一子发票的商品金额、所述第一子发票中的运费以及所述第一子发票的开票金额获取所述第一子发票中的折扣;根据所述预设基础运费、所述第一子发票中的运费以及所述第一子发票的数量值获取所述第二子发票中的运费;根据所述第二子发票的商品金额、所述第二子发票中的运费以及所述第二子发票的开票金额获取所述第二子发票中的折扣。
为了进一步说明上述场景下的实施例,以下给出一具体实施方式:
按照开票金额最大化原则进行拆分,先计算拆分后开票金额(最大限额M减去1元),再计算出拆分数量,拆分数量*单价(拆分前后商品单价保持不变)得到商品金额。若包含运费再按比例折算出拆分运费,最后根据拆分金额、商品金额、运费算出折扣,规则如下:
K1=M–1;
S1=ROUNDDOWN(K1/K0*S0);
J1=S1*P;
Num=INT(K0/K1);
Kn=K0-k1*Num
Sn=S0–S1*Num
Jn=Sn*P
其中,M为开票最大限额,K1为第一子发票的开票金额,K0为所述待开发票的开票金额,S0为所述待开发票的商品数量,S1为第一子发票中的商品数量,J1为第一子发票的商品金额,P为商品单价;Num为可拆分金额为K1的第一子发票张数,Kn为第二子发票的开票金额,Sn为第二子发票的商品数量,Jn为第二子发票的商品金额;所述多张子发票包括 NuL张第一子发票和一张第二子发票。
此时,运费和折扣的计算方式如下:
第一子发票的运费计算为:T1=ROUNDDOWN(K1/K0*T0)。
若运费为0,此处运费计算可忽略。
第一子发票的折扣计算为:D1=J1+T1-K1。
若折扣为0,此处折扣计算可忽略。
考虑D1可能为负数,此时需要重计算开票金额和折扣:
第二子发票的运费计算为:Tn=T0–T1*Num
若运费为0,此处运费计算可忽略。
第二子发票的折扣计算为:Dn=Jn+Tn-Kn
同上面折扣处理,D1可能为负数,此时需要重计算开票金额和折扣:
T0为基础运费,T1为第一子发票的运费,Tn为第二子发票的运费, D0为基础折扣,D1为第二子发票的折扣,Dn为第二子发票的折扣。
在另一个实施方式中,第二拆分模块300包括第四拆分单元320。第四拆分单元320用于若满足第二条件且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额通过第二拆分方式将所述待开发票的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额。其中,所述第二条件为:所述单行商品金额超过所述单行商品限额,以及所述商品单价金额未超过所述商品单价限额。所述第二拆分方式包括如下步骤:
根据预设开票最大限额、所述待开发票中的商品单价以及商品数量、预设基础运费和预设基础折扣获取所述多张子发票中的第一子发票中的开票金额、商品数量、商品金额、运费、折扣以及所述数量值。根据所述待开发票的开票金额、所述第一子发票的开票金额以及所述数量值、所述第一子发票中的商品数量以及所述数量值,获取所述多张子发票中第二子发票的开票金额、商品数量和商品金额、运费以及折扣。
具体地,根据开票最大限额、所述待开发票中的商品单价、所述预设基础运费、所述待开发票的商品数量以及预设基础折扣获取所述第一子发票中的商品数量;根据所述第一子发票中的商品数量以及所述待开发票中的商品单价获取所述第一子发票的商品金额;根据所述第一子发票中的商品数量、所述待开发票的商品数量以及所述预设基础运费获取所述第一子发票中的运费;根据所述第一子发票中的商品数量、所述待开发票的商品数量以及所述预设基础折扣获取所述第一子发票中的折扣;根据所述第一子发票的商品金额、所述第一子发票中的运费以及所述第一子发票中的折扣获取所述第一子发票的开票金额;根据所述待开发票的开票金额和所述第一子发票的开票金额获取所述多张子发票中所述第一子发票的数量值;根据所述待开发票的开票金额、所述第一子发票的开票金额和所述数量值获取第二子发票的开票金额;根据所述待开发票的商品数量、所述第一子发票中的商品数量以及所述数量值获取第二子发票中的商品数量;根据所述第二子发票中的商品数量以及所述待开发票中的商品单价获取所述第二子发票的商品金额;其中,所述多张子发票包括L张第一子发票和1张第二子发票,L表示所述数量值。。
为了进一步说明上述场景下的实施例,以下给出一具体实施方式:
该场景参见规则如下:
S1=INT((M–1)/(P+(T0–D0/S0));
J1=S1*P;
T1=ROUNDDOWN(S1/S0*T0);
D1=ROUNDDOWN(S1/S0*D0);
K1=J1+T1–D1;
Num=INT(K0/K1);
Kn=K0-k1*Num;
Sn=S0–S1*Num;
Jn=Sn*P;
Tn=T0–T1*Num;
若运费为0,此处运费计算可忽略。
第二子发票的折扣计算为:Dn=Jn+Tn-Kn
同上面折扣处理,D1可能为负数,此时需要重计算开票金额和折扣:
其中,M为开票最大限额,K1为第一子发票的开票金额,K0为所述待开发票的开票金额,S0为所述待开发票的商品数量,S1为第一子发票中的商品数量,J1为第一子发票的商品金额,P为商品单价;Num为可拆分金额为K1的第一子发票张数,Kn为第二子发票的开票金额,Sn为第二子发票的商品数量,Jn为第二子发票的商品金额;T0为基础运费,T1为第一子发票的运费,Tn为第二子发票的运费,D0为基础折扣,D1为第二子发票的折扣,Dn为第二子发票的折扣。所述多张子发票包括NuL张第一子发票和一张第二子发票。
在另一个实施方式中,所述待开发票的开票金额还包括多行商品金额和多行商品单价金额。第二拆分模块300包括第五拆分单元330。第五拆分单元330用于根据所述多行商品金额和多行商品单价金额,通过第一处理方式、第二处理方式和第三处理方式生成所述多张子发票。其中,所述第一处理方式为:若满足所述第一条件,通过所述第一拆分方式将所述待开发票中满足所述第一条件的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额。所述第二处理方式为:若满足所述第二条件,通过所述第二拆分方式将所述待开发票中满足所述第二条件的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额。所述第三处理方式为:若所述待开发票的开票金额中满足所述单行商品金额未超过所述单行商品限额的条件,根据满足该条件的开票金额生成对应的子发票。
在该实施方式中,待开发票的开票金额还包括多行商品金额和多行商品单价金额。在该场景下,根据商品单行金额是否超过预设开票限额,将待开发票的开票金额分为以下三组情况:
①单行商品金额超限且商品单价金额超限
②单行商品金额超限且商品单价金额未超限
③单行商品金额未超限
其中,①组情况满足所述第一条件,通过所述第一拆分方式将所述待开发票中满足所述第一条件的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额。
②组情况满足所述第二条件,通过所述第二拆分方式将所述待开发票中满足所述第二条件的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额。
③组情况由于商品行数未超限,并且单行商品金额未超限,根据满足该条件的开票金额生成对应的子发票,直接将满足该条件的开票金额组合后请求开票。
需要说明的是,此处的第一条件、第二条件、第一拆分方式以及第二拆分方式,在以上实施例中已解释说明,此处不再详述。
第三拆分模块400,用于若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数以及所述预设开票限额将所述待开发票的开票金额以及开票行数进行拆分,得到多张子发票。
在本实施例中,所述待开发票的开票金额还包括多行商品金额和多行商品单价金额,并且所述待开发票的开票行数超过所述预设上限行数以及所述待开发票的开票金额超过所述预设开票限额。也即是,待开发票中商品的开票行数超过最大允许行数且开票金额也超过最大限额,此时,根据所述预设上限行数以及所述预设开票限额将所述待开发票的开票金额以及开票行数进行拆分,得到多张子发票。
在一实施方式中,第三拆分模块400包括第六拆分单元410。第六拆分单元410用于根据所述多行商品金额和多行商品单价金额,通过所述第一处理方式、所述第二处理方式和第四处理方式生成所述多张子发票。其中,所述第四处理方式为:所述待开发票的开票金额满足所述单行商品金额未超过所述单行商品限额的条件时,采用最优组合拆分法生成所述子发票。所述最优组合拆分法如下:
按照单行商品金额从大到小将所述待开发票的商品进行排序,得到商品集合;
执行累加步骤;所述累加步骤包括:依序将商品集合中多项商品的商品金额进行累加,直至累加和最接近所述预设开票限额或累加的行数等于所述预设上限行数时,根据该进行累加的多项商品的信息得到子发票;
将所述累加步骤中的多项商品从所述商品集合中剔除,对剔除后的所述商品集合中的商品执行所述累加步骤,直至所述商品集合中不包含商品为止。
在该实施例中,第一处理方式和第二处理方式,如以上实施例所述。以上实施例中给出了两者对于待开发票的开票金额中商品金额以及商品单价的判断条件,及其对应的拆分处理方式。此处不再详述。对于第四处理方式,根据开票最大商品行数和最大商品金额限额组合出最优的方案。具体使用贪婪算法,使重新组合的开票金额越接近开票限额即可使拆分的票数最小,也即是所述最优组合拆分法。
在最优组合拆分法中,首先按照单行商品金额从大到小将所述待开发票的商品进行排序,得到商品集合。进一步地,执行累加步骤。累加步骤中,包括:依序将商品集合中多项商品的商品金额进行累加,直至累加和最接近所述预设开票限额或累加的行数等于所述预设上限行数时,根据该进行累加的多项商品的信息生成子发票。每次执行累加步骤后,从商品集合中将参与累加步骤的多项商品从所述商品集合中剔除,得到剔除后的商品集合。进一步地,在对剔除后的商品集合执行所述累加步骤。依次类推,直至所述商品集合中不包含商品为止。
对于该实施例,以下给出一具体实施场景:
该场景较为复杂,待开发票中的商品行数超过最大允许行数且商品的开票金额也超过最大限额,对商品行进行分组,具体可参照图7所示的分组逻辑。
因此,可将待开发票分为以下三组情况:
④单行商品金额超限且商品单价金额超限
⑤单行商品金额超限且商品单价金额未超限
⑥单行商品金额未超限
针对不同的分组采用对应的处理方法:
其中,④组情况采用第一处理方式。⑤组情况采用第二处理方式。具体处理方式参见以上第一处理方式和第二处理方式的说明,此处不再详述。⑥组情况单行商品金额未超限,以最大开票限额进行组合。组合参看“最优组合拆分逻辑”部分,使分组达到最少。最优组合拆分逻辑如下所示:
(1)先将开票金额按照从大到小依次排序;
{Arrays.sort(array[],Collections.reverseOrder());
(2)从第一位开始和后面的数据依次相加直到结束,如果各商品行的和将要大于等于最大开票限额或相加的商品行数将要大于等于最大开票行数时停止,本次相加的所有商品行即为一个拆分开票分组;
(3)剩下的元素重复步骤2直到没有元素剩下;
执行完该最优组合拆分逻辑后,可得到最优拆分组合。
关于上述超限额发票的拆分装置的具体限定可以参见上文中对于超限额发票的拆分方法的限定,在此不再赘述。上述超限额发票的拆分装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图11所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储开票数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现上述任一实施例所述的超限额发票的拆分方法。
本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
判断待开发票的开票金额是否超过预设开票限额,以及待开发票的开票行数是否超过预设上限行数;若所述待开发票的开票金额未超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数将所述待开发票的开票行数进行拆分,得到多张子发票;若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额将所述待开发票的开票金额进行拆分,得到多张子发票;若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数以及所述预设开票限额将所述待开发票的开票金额以及开票行数进行拆分,得到多张子发票。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一实施例所述的超限额发票的拆分方法。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
判断待开发票的开票金额是否超过预设开票限额,以及待开发票的开票行数是否超过预设上限行数;若所述待开发票的开票金额未超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数将所述待开发票的开票行数进行拆分,得到多张子发票;若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额将所述待开发票的开票金额进行拆分,得到多张子发票;若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数以及所述预设开票限额将所述待开发票的开票金额以及开票行数进行拆分,得到多张子发票。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM (EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态 RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM (DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM (SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种超限额发票的拆分方法,所述方法包括:
判断待开发票的开票金额是否超过预设开票限额,以及待开发票的开票行数是否超过预设上限行数;
若所述待开发票的开票金额未超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数将所述待开发票的开票行数进行拆分,得到多张子发票;
若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额将所述待开发票的开票金额进行拆分,得到多张子发票;
若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数以及所述预设开票限额将所述待开发票的开票金额以及开票行数进行拆分,得到多张子发票。
2.根据权利要求1所述的方法,其特征在于,所述根据所述预设上限行数将所述待开发票的开票行数进行拆分,得到多张子发票,包括:
根据所述待开发票的开票行数和所述预设上限行数,对所述待开发票待开发票的开票行数进行拆分,得到Roundup(S)张子发票,S为所述待开发票的开票行数和所述预设上限行数的商值,Roundup(S)表示对S向上取整。
3.根据权利要求1所述的方法,其特征在于,所述待开发票的开票金额包括单行商品金额和商品单价金额,所述预设开票限额包括单行商品限额和商品单价限额;所述根据所述预设开票限额将所述待开发票的开票金额进行拆分,得到多张子发票,包括:
若满足第一条件且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额通过第一拆分方式将所述待开发票的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额;其中,所述第一条件为:所述单行商品金额超过所述单行商品限额以及所述商品单价金额超过所述商品单价限额;所述第一拆分方式如下所示:
根据预设开票最大限额、所述待开发票中的开票金额、商品单价和商品数量获取所述多张子发票中第一子发票中的开票金额、商品数量和商品金额,以及所述第一子发票的数量值;
根据所述待开发票的开票金额、所述第一子发票的开票金额以及数量值、所述第一子发票中的商品数量以及所述数量值,获取所述多张子发票中第二子发票的开票金额、商品数量和商品金额;
所述多张子发票包括L张第一子发票和1张第二子发票,L表示所述数量值。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:通过以下方式得到所述第一拆分方式中第一子发票中的运费和折扣,以及所述第二子发票中的运费和折扣:
根据所述第一子发票的开票金额和商品金额、所述待开发票的开票金额以及预设基础运费获取所述第一子发票中的运费和折扣;
根据所述预设基础运费、所述第一子发票中的运费和所述数量值、所述第二子发票的开票金额和商品金额,获取所述第二子发票中的运费和折扣。
5.根据权利要求3所述的方法,其特征在于,所述根据所述预设开票限额将所述待开发票的开票金额进行拆分,得到多张子发票,还包括:若满足第二条件且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额通过第二拆分方式将所述待开发票的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额;其中,所述第二条件为:所述单行商品金额超过所述单行商品限额,以及所述商品单价金额未超过所述商品单价限额;所述第二拆分方式如下所示:
根据预设开票最大限额、所述待开发票中的商品单价以及商品数量、预设基础运费和预设基础折扣获取所述多张子发票中的第一子发票中的开票金额、商品数量、商品金额、运费、折扣以及所述数量值;
根据所述待开发票的开票金额、所述第一子发票的开票金额以及所述数量值、所述第一子发票中的商品数量以及所述数量值,获取所述多张子发票中第二子发票的开票金额、商品数量和商品金额、运费以及折扣;
所述多张子发票包括L张第一子发票和1张第二子发票。
6.根据权利要求5所述的方法,其特征在于,所述待开发票的开票金额还包括多行商品金额和多行商品单价金额;所述根据所述预设开票限额将所述待开发票的开票金额进行拆分,得到多张子发票,还包括:
根据所述多行商品金额和多行商品单价金额,通过第一处理方式、第二处理方式和第三处理方式生成所述多张子发票;其中,所述第一处理方式为:若满足所述第一条件,通过所述第一拆分方式将所述待开发票中满足所述第一条件的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额;所述第二处理方式为:若满足所述第二条件,通过所述第二拆分方式将所述待开发票中满足所述第二条件的开票金额进行拆分,得到多张子发票的开票金额、商品数量以及商品金额;
所述第三处理方式为:若所述待开发票的开票金额中满足所述单行商品金额未超过所述单行商品限额的条件,根据满足该条件的开票金额生成对应的子发票。
7.根据权利要求6所述的方法,其特征在于,所述待开发票的开票金额还包括多行商品金额和多行商品单价金额;所述若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数以及所述预设开票限额将所述待开发票的开票金额以及开票行数进行拆分,得到多张子发票,包括:
根据所述多行商品金额和多行商品单价金额,通过所述第一处理方式、所述第二处理方式和第四处理方式生成所述多张子发票;其中,所述第四处理方式为:所述待开发票的开票金额满足所述单行商品金额未超过所述单行商品限额的条件时,采用最优组合拆分法生成所述子发票;所述最优组合拆分法如下:
按照单行商品金额从大到小将所述待开发票的商品进行排序,得到商品集合;
执行累加步骤;所述累加步骤包括:依序将商品集合中多项商品的商品金额进行累加,直至累加和最接近所述预设开票限额或累加的行数等于所述预设上限行数时,根据该进行累加的多项商品的信息得到子发票;
将所述累加步骤中的多项商品从所述商品集合中剔除,对剔除后的所述商品集合中的商品执行所述累加步骤,直至所述商品集合中不包含商品为止。
8.一种超限额发票的拆分装置,所述装置包括:
判断模块,用于判断待开发票的开票金额是否超过预设开票限额,以及待开发票的开票行数是否超过预设上限行数;
第一拆分模块,用于若所述待开发票的开票金额未超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数将所述待开发票的开票行数进行拆分,得到多张子发票;
第二拆分模块,用于若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数未超过所述预设上限行数,根据所述预设开票限额将所述待开发票的开票金额进行拆分,得到多张子发票;
第三拆分模块,用于若所述待开发票的开票金额超过所述预设开票限额,且所述待开发票的开票行数超过所述预设上限行数,根据所述预设上限行数以及所述预设开票限额将所述待开发票的开票金额以及开票行数进行拆分,得到多张子发票。
9.一种服务器,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910591853.XA CN110473029A (zh) | 2019-07-01 | 2019-07-01 | 超限额发票的拆分方法、装置、计算机设备和存储介质 |
CA3150967A CA3150967A1 (en) | 2019-07-01 | 2020-06-24 | Method of and device for splitting over-limit invoice, computer equipment and storage medium |
PCT/CN2020/097963 WO2021000773A1 (zh) | 2019-07-01 | 2020-06-24 | 超限额发票的拆分方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910591853.XA CN110473029A (zh) | 2019-07-01 | 2019-07-01 | 超限额发票的拆分方法、装置、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110473029A true CN110473029A (zh) | 2019-11-19 |
Family
ID=68507046
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910591853.XA Pending CN110473029A (zh) | 2019-07-01 | 2019-07-01 | 超限额发票的拆分方法、装置、计算机设备和存储介质 |
Country Status (3)
Country | Link |
---|---|
CN (1) | CN110473029A (zh) |
CA (1) | CA3150967A1 (zh) |
WO (1) | WO2021000773A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111815379A (zh) * | 2020-07-08 | 2020-10-23 | 远光软件股份有限公司 | 一种智能调节发票尾差的方法、装置、终端及存储介质 |
WO2021000773A1 (zh) * | 2019-07-01 | 2021-01-07 | 苏宁云计算有限公司 | 超限额发票的拆分方法、装置、计算机设备和存储介质 |
CN113657950A (zh) * | 2021-09-02 | 2021-11-16 | 中国银行股份有限公司 | 一种基于区块链的银行发票数据的处理方法及系统 |
CN115018488A (zh) * | 2022-06-07 | 2022-09-06 | 广东企企通科技有限公司 | 一种对账单拆分开票处理方法、装置及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106980994A (zh) * | 2016-01-15 | 2017-07-25 | 航天信息股份有限公司 | 一种开票申请单据的拆分方法 |
US20170270500A1 (en) * | 2012-12-12 | 2017-09-21 | Capital One Services, Llc | Systems and methods for splitting a bill associated with a receipt |
CN107833081A (zh) * | 2017-09-30 | 2018-03-23 | 平安科技(深圳)有限公司 | 一种发票金额的自动拆分方法、装置、终端设备及存储介质 |
CN109829001A (zh) * | 2017-11-22 | 2019-05-31 | 航天信息股份有限公司 | 用于生成发票数据的方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106204177A (zh) * | 2015-05-08 | 2016-12-07 | 航天信息股份有限公司 | 为不含税额销售单开具单税率增值税发票的方法和系统 |
CN110473029A (zh) * | 2019-07-01 | 2019-11-19 | 苏宁云计算有限公司 | 超限额发票的拆分方法、装置、计算机设备和存储介质 |
-
2019
- 2019-07-01 CN CN201910591853.XA patent/CN110473029A/zh active Pending
-
2020
- 2020-06-24 CA CA3150967A patent/CA3150967A1/en active Pending
- 2020-06-24 WO PCT/CN2020/097963 patent/WO2021000773A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170270500A1 (en) * | 2012-12-12 | 2017-09-21 | Capital One Services, Llc | Systems and methods for splitting a bill associated with a receipt |
CN106980994A (zh) * | 2016-01-15 | 2017-07-25 | 航天信息股份有限公司 | 一种开票申请单据的拆分方法 |
CN107833081A (zh) * | 2017-09-30 | 2018-03-23 | 平安科技(深圳)有限公司 | 一种发票金额的自动拆分方法、装置、终端设备及存储介质 |
CN109829001A (zh) * | 2017-11-22 | 2019-05-31 | 航天信息股份有限公司 | 用于生成发票数据的方法及装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021000773A1 (zh) * | 2019-07-01 | 2021-01-07 | 苏宁云计算有限公司 | 超限额发票的拆分方法、装置、计算机设备和存储介质 |
CN111815379A (zh) * | 2020-07-08 | 2020-10-23 | 远光软件股份有限公司 | 一种智能调节发票尾差的方法、装置、终端及存储介质 |
CN113657950A (zh) * | 2021-09-02 | 2021-11-16 | 中国银行股份有限公司 | 一种基于区块链的银行发票数据的处理方法及系统 |
CN115018488A (zh) * | 2022-06-07 | 2022-09-06 | 广东企企通科技有限公司 | 一种对账单拆分开票处理方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CA3150967A1 (en) | 2021-01-07 |
WO2021000773A1 (zh) | 2021-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110473029A (zh) | 超限额发票的拆分方法、装置、计算机设备和存储介质 | |
US5724584A (en) | Method and apparatus for processing discrete billing events | |
Hsiao et al. | A new approach for optimal VAR sources planning in large scale electric power systems | |
CN109493201A (zh) | 对账方法、装置、计算机设备和存储介质 | |
CN107818509A (zh) | 业务数据校验方法、装置、存储介质及电子设备 | |
CN110782240A (zh) | 业务数据处理方法、装置、计算机设备和存储介质 | |
CN108876201A (zh) | 快速交付的开发方法、平台及系统 | |
US6889243B1 (en) | Job scheduling analysis method and system using historical job execution data | |
CN110134516A (zh) | 金融数据处理方法、装置、设备及计算机可读存储介质 | |
Quadt et al. | Capacitated lot‐sizing and scheduling with parallel machines, back‐orders, and setup carry‐over | |
CN108921680A (zh) | 财务数据制证方法、装置、计算机设备和存储介质 | |
CN112100219A (zh) | 基于数据库查询处理的报表生成方法、装置、设备和介质 | |
Tayur | Properties of serial kanban systems | |
Borgs et al. | The optimal admission threshold in observable queues with state dependent pricing | |
CN109992506A (zh) | 调度测试方法、装置、计算机设备和存储介质 | |
CN109034610A (zh) | 基于不同时段不同分配机制的软件开发云平台 | |
CN114595919A (zh) | 业务流程编排方法、装置、计算机设备和存储介质 | |
CN109144480A (zh) | 快速交付的平台工作方法、平台及系统 | |
CN109034611A (zh) | 快速交付的后端软件开发方法、平台及系统 | |
Soyster et al. | Some comparative & design aspects of fixed cycle production systems | |
CN109785047A (zh) | 金融产品的订单推送方法、装置、计算机设备和存储介质 | |
US6708226B2 (en) | Multithreaded batch processing system | |
CN112396480A (zh) | 订单业务数据的处理方法、系统、计算机设备和存储介质 | |
CN112712236A (zh) | 一种造船企业线表负荷评估软件设计方法 | |
CN107844496A (zh) | 统计信息输出方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191119 |
|
RJ01 | Rejection of invention patent application after publication |