发票系统需求分析及领域设计

00:34

订单中心中的 PayItem 与发票中心息息相关。

因为很多商品是不支持开发票的。

02:58

现实中发票如何开出来。

去超市买东西,会有小票,小票具有以下内容:

  • 实际支付
  • 优惠
  • 可以开票的钱
  • 开票主体

小票可以开,也可以不开,也可以批量开。

小票开票主体可能有多个,衣服能开 A 公司,还是能开 B 公司,由路由策略决定。

下订单会生成订单项,订单项包含税务分类编码。

订单系统上要包含这些东西,是因为我们之后的发票要考虑到。一个系统的设计要把下游考虑到。

为什么用户要存一个账号/交易主体,这块涉及到一个分账问题。

发票最终要生成一个购方信息,购方信息就是自己填写的个人信息。

开票日期和税务编码属于发票对象。

发票系统从宏观上来讲,就是拿了一张小票,订单完成后会生成一张小票。

11:38

在订单上购买一件东西会有三种支付方式:

  • 优惠券
  • 积分
  • 银行卡
  • 微信

12:13

批量开这个 Case 就是发票系统中最难的一个 Case 了。

批量需要考虑:

  • 限额
  • 拆票

凭据自身有个行为叫开票,批量开还是一张一张的开,不过有路由规则(开到哪个公司名下),限额规则(每个公司有不同的限额)。

A 公司最多只能开 1000 元,可能会拆分出来再开一张票。

发票预览实际上和开票一样的,只不过没有走金税系统了。

开票动作要生成一个开票对象。

18:36

业务不同点主要集中在搜索这一块。

个人开了多少票,管联订单的维度不同,搜索条件也不同。

订单完成后就可以发一个 MQ 消息,发票系统监听把凭据绑定上。

20:18

回到领域对象里面。