税票与发票开具

本文整理客户开票资料、税票列表、提交、银行支行查询,以及 TMS/外部系统发票状态同步。发票链路通常和客户资料、销售、收款、对账单关联,但本项目中入口相对独立。

业务目标

  • 维护客户开票资料。
  • 查询和提交税票信息。
  • 获取银行支行列表。
  • 查询和变更外部发票状态。
  • 支撑销售、收款、对账后的发票开具和状态追踪。

入口文件

  • 开票资料 PC:application/controllers/basedata/TaxInvoice.php
  • 开票资料服务:application/Services/TaxInvoice/TaxInvoiceSer.php
  • 内部发票状态:application/controllers/inner/Invoice.php

核心方法

TaxInvoice.php

  • getTaxInvoice:获取开票资料。
  • submit:提交开票资料。
  • getList:税票列表。
  • getBranchBankList:银行支行列表。

TaxInvoiceSer.php

  • getTaxInvoice:按参数查询开票资料。
  • submit:保存或更新开票资料。
  • getList:列表查询。
  • getBranchBankList:支行查询。

inner/Invoice.php

  • getInvoiceStatus:查询发票状态。
  • changeInvoiceStatus:变更发票状态。

核心表

发票资料可能分散在客户、联系人、税票资料模型中,排查时重点从下面这些表和模型找:

  • t_bs_contact
  • t_bs_contact_info
  • 客户开票资料相关模型。
  • 销售单、收款单、对账单中的发票关联字段。

主流程

flowchart TD
  A["客户/服务站维护开票资料"] --> B["保存税号、抬头、地址、电话、开户行"]
  B --> C["销售/收款/对账产生开票诉求"]
  C --> D["发票申请或状态查询"]
  D --> E["外部系统开票"]
  E --> F["回传或查询发票状态"]

字段口径

  • 发票抬头和税号必须和客户开票主体一致。
  • 开户行、银行账号、注册地址、注册电话通常作为开票资料的一部分。
  • 支行列表可能来自银行数据接口或本地缓存,不能随意写死。
  • 发票状态要区分“申请状态”和“外部开票状态”。

异常流程

  • 提交失败:查必填字段、税号格式、客户权限。
  • 支行查不到:查银行关键字、城市、外部接口或缓存。
  • 发票状态不更新:查 inner/Invoice.php 是否收到变更请求。
  • 销售/对账无法开票:查客户开票资料是否完整、业务单据是否满足状态。

常用排查命令

rg -n "class TaxInvoice|getTaxInvoice|submit|getBranchBankList" application/controllers/basedata application/Services/TaxInvoice
rg -n "getInvoiceStatus|changeInvoiceStatus|class Invoice" application/controllers/inner/Invoice.php
rg -n "tax|invoice|TaxInvoice|开票|发票" application/controllers application/Services application/models

改动风险和回归清单

  • 开票资料:新增、编辑、必填校验、历史客户兼容。
  • 支行查询:模糊查询、空结果、外部接口失败。
  • 发票状态:查询、变更、重复回调。
  • 业务联动:销售、收款、对账单是否正确读取最新开票资料。