三、功能设计
1. 发票接入
1)企业资质和商品税率确定
- 谁开:开票人名称、纳税号、地址、电话、默认税率。
- 给谁开:收票人姓名/收票企业名称、税号。
- 什么时候开:订单出库/签收/入账,目前常见是入账确认后开票。
- 开什么:商品名称/类别、税收分类编码、税率。
2)接入注意
①负数发票
- 负数发票商品行,如果存在单价和数量,那么单价应为正,数量应为负。
- 开具负数发票,开票服务器系统自动在备注中注明“对应正数发票代码:XXXXXXXXXX号码:YYYYYYYY”字样,其中“X”为发票10位或12位代码,“Y”为8位号码。
②折扣(政策要求)
- 按规定不再需要计算折扣率。
- 折扣行只能对应一行正常行。
- 折扣行货物劳务名称以及商品编码和正常行一致。
- 冲红时,只需要将正常行和对应的折扣行金额相加取负即可。
- 商品编码和税率必须匹配。
③不含税单价、税额,不含税金额、税额等的计算校验
- 不含税金额=含税金额/(1 税率),并保留两位小数。
- 税额=含税金额-不含税金额,并保留两位小数。
- 价税合计=合计金额 合计税额。
注意:可能会因为软件运行环境的不同导致同一转换规则下出现结果精度不同的情况。
商品行最大允许误差:
- |单价×数量-金额|=0.01 元 此处单价和金额是否含税以传入组件接口的含税标志为准。
- |不含税金额×税率-税额|=0.06元。
- 单张发票允许最大误差:为1.27元,|所有商品行不含税金额之和*税率-所有商品行税额之和| =1.27。
- 最终的价税合计金额:以接口传入的价税合计金额为准,升级版企业端不做修改,也就是订单合计金额。
④金额、税额校验规则
- 正数发票合计金额0、负数发票合计金额0;
- 价税合计=合计金额 合计税额;
- 开票合计金额 与 明细行所有金额加起来要一致;
- 开票合计税额 与 明细行所有税额加起来要一致。
2. C端发起
1)申请发票:
- 用户可以在下单时,在确认订单页填写申请发票;
- 付款后90天内,用户可以再订单列表、订单详情基于订单申请发票。
- 前置需要商家有开票资质,一般Tmall商家都有,C端商家不一定。
2)申请发票信息:
- 发票类型:电子普票、纸质专票、纸质普票。
- 抬头:个人or企业,个人填写姓名、企业填写税号。
- 发票内容:选择大类or明细。
3)发票进度查询:
- 申请中:用户提交申请-商家同意前,支持用户撤销/修改发票内容。
- 开票中:商家同意后,进入该状态,不能再修改了,可联系商家后台撤销。
- 已开票:开票成功后,需要交易完成才能查看发票内容。