---
title: "03_Interface_Design"
author: "系统设计团队"
date: "2024年12月19日"
documentclass: article
geometry: margin=1in
fontsize: 11pt
mainfont: "PingFang SC"
CJKmainfont: "PingFang SC"
---
---
doc_id: TC-03-INTERFACE
doc_role: master_document
authority: primary
scope: 接口设计
source_of_truth: true
last_reviewed: 2026-03-12
retrieval_priority: P0
---
# 福建水务营收系统接口设计文档
## 文档信息
| 项目信息 | 详情 |
|---------|------|
| **项目名称** | 福建水务营收系统 |
| **文档类型** | 接口设计文档 |
| **技术框架** | Spring Cloud Alibaba + RuoYi-Vue-Pro + yudao-ui-admin-vue3 |
| **文档版本** | v1.0 |
| **编写日期** | 2026-03-11 |
| **文档状态** | ✅ 已完成(按版本迭代) |
## 章节导航(精简)
- [接口设计范围](#sec-scope)
- [设计原则与统一约束](#sec-principles)
- [SYS-002 接口视图](#sec-rev-interface-view)
- [外部接口设计](#sec-external-interface)
- [内部接口设计](#sec-internal-interface)
- [数据对象与表口径](#sec-data-object)
- [接口安全与异常处理](#sec-security-exception)
- [历史查询与迁移校验接口口径](#sec-migration-readonly)
- [实现状态说明](#sec-status)
## 接口设计范围
本文档用于描述福建水务营收系统的接口边界、调用方式、核心接口清单以及与外围子系统的协同关系,重点统一 `SYS-002` 营收业务系统的接口口径。
本次接口整编遵循以下事实来源:
- `docs/design/02_Detailed_Design/01_Detailed_Design.md`
- `docs/design/03_Technical_Design/01_Database_Design.md`
- `docs/guides/BACKEND_CURRENT_STATUS.md`
- `docs/guides/BACKEND_TABLE_MAPPING.md`
- `output/preview/福建水务营收系统整体架构图.html`
> 说明:本文档优先描述正式设计边界与业务接口职责,不将 backend 中尚未明确识别的内部实现细节误写为既有接口事实。对于历史资料中存在、但当前 backend 未完全确认的接口对象,统一按“文档先行”处理。
## 设计原则与统一约束
### 接口设计原则
- **统一编号**:接口编号统一采用 `IF-UP-*`、`IF-REV-*`、`IF-CS-*`、`IF-METER-*`、`IF-INST-*`、`IF-EXT-*` 规则。
- **统一边界**:`SYS-002` 负责营收业务主流程,发票、支付结算、消息触达分别通过 `SYS-008`、`SYS-009`、`SYS-010` 协同完成。
- **统一数据口径**:接口数据对象优先对齐真实 `biz_*` 与 `bk_*` 表,不再沿用旧稿中的 `customer_*`、`billing_*`、`thirdpay_*`、`service_*` 等历史命名。
- **统一协议风格**:内部管理接口以 HTTPS REST 为主,跨系统集成根据场景采用 REST、文件交换、消息队列等方式。
- **统一安全机制**:内部接口采用统一认证鉴权,外部接口按渠道要求实施签名、回调校验、白名单和审计留痕。
### 通用响应格式
内部 REST 接口统一采用如下响应模型:
```json
{
"code": 0,
"data": {},
"msg": "success"
}
```
分页响应统一采用:
```json
{
"code": 0,
"data": {
"list": [],
"total": 0,
"pageNo": 1,
"pageSize": 10
},
"msg": "success"
}
```
## SYS-002 接口视图
### 模块分组
#### 营收核心模块群
| 模块编号 | 模块名称 | 接口职责定位 |
|---------|----------|-------------|
| REV-001 | 客户资料管理 | 客户、账户、联系人、水表绑定等主数据查询与维护 |
| REV-002 | 抄表开账 | 抄表任务、抄表数据、校验、开账触发 |
| REV-003 | 营业收费 | 收费受理、账单核销、柜台与渠道收款状态回写 |
| REV-004 | 账务处理 | 调整、退款、冲正、坏账等账务处理申请与结果回写 |
| REV-005 | 发票管理 | 发票申请、开票结果回写、票据状态查询 |
| REV-006 | 催缴管理 | 催缴名单生成、催缴任务下发、通知结果回写 |
| REV-007 | 统计分析 | 营收、抄表、收费、客户、渠道统计查询 |
| REV-008 | 代收业务 | 银行代收、代扣、送盘、回盘、对账、结算协同 |
| REV-009 | 业务参数配置 | 水价、费用组成、业务参数、页面参数等配置接口 |
#### 客户服务模块群
| 模块编号 | 模块名称 | 接口职责定位 |
|---------|----------|-------------|
| CS-001 | 账户绑定管理 | 客户绑定、解绑、默认客户切换 |
| CS-002 | 信息查询服务 | 账单、欠费、用水、缴费、停水公告等查询 |
| CS-003 | 在线缴费服务 | 创建线上支付订单、支付状态查询 |
| CS-004 | 电子发票服务 | 发票申请、发票列表、下载与推送 |
| CS-005 | 营业网点服务 | 网点查询、预约、导航、业务事项查询 |
| CS-006 | 业务办理服务 | 更名、过户、低保、换表、自主抄表等线上办理 |
| CS-007 | 柜面扫码支付 | 柜台二维码收款、订单生成、支付结果回写 |
### 跨系统协同边界
| 协同子系统 | 协同内容 | SYS-002 职责 | 对方职责 |
|-----------|----------|--------------|----------|
| SYS-008 发票服务 | 发票开具、作废、红冲、票据查询 | 提供业务上下文、账单信息、客户开票信息,接收结果回写 | 承接税控与电子发票能力 |
| SYS-009 支付与银行结算 | 微信/支付宝支付、银行实时收费、代扣、对账、结算 | 发起订单、接收支付结果、维护账单核销状态 | 承接支付渠道、交易流水、回调、对账与结算 |
| SYS-010 消息服务 | 催缴通知、缴费结果通知、办理进度通知 | 生成待通知业务事件与目标用户 | 承接短信、微信公众号、站内信等触达能力 |
## 外部接口设计
## 外部接口分类
| 接口分类 | 主要对接方 | 典型协议 | 说明 |
|---------|------------|----------|------|
| 银行代收/代扣接口 | 银行、银联、托收平台 | 文件交换 / HTTPS REST | 主要服务 REV-008 |
| 聚合支付接口 | 微信支付、支付宝等 | HTTPS REST + 回调 | 主要服务 REV-003、CS-003、CS-007 |
| 发票协同接口 | 税控/电子发票平台 | HTTPS REST | 主要服务 REV-005、CS-004 |
| 消息通知接口 | 短信平台、消息网关 | HTTPS REST / MQ | 主要服务 REV-006、CS-006 |
| 物联网集抄接口 | 集抄平台、IoT 平台 | HTTPS REST / MQ | 主要服务 REV-002 |
### IF-EXT-001 银行代扣批次下发接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-EXT-001 |
| 接口名称 | 银行代扣批次下发接口 |
| 归属模块 | REV-008 |
| 调用方向 | SYS-002 → SYS-009 / 银行渠道 |
| 接口方式 | 文件交换或 HTTPS REST |
| 业务说明 | 按账期生成待代扣账单批次,交由银行渠道执行代扣 |
| 核心数据支撑 | `biz_withholding`、`bk_withholding_batch`、`bk_withholding_item` |
关键报文信息包括:客户号、签约号、扣款金额、账期、渠道编码、批次号等。
边界约束:
- 当前正式设计包含代扣送盘、回盘与对账的目标边界;其中 `BankWithholding` 已具备送盘、送盘状态查询、取消送盘等六条银行入口的最小实现态闭环证据。
- 正式文档可将 `BankWithholding` 六条银行入口写为“已实现”,但需同时注明真实银行文件解析、SFTP/文件通道联调与运行态样本仍待补证。
- 涉及批量文件交互时,正式口径保留 `HTTP/REST/SFTP` 与文件命名、批次号约束,不下沉到特定银行私有报文字段。
- 运行时文件传输配置统一由解析器输出 `protocol/resolvedDir/resolvedPath/fileName/sourceScope`;优先级固定为 `TENANT_CHANNEL > TENANT > CHANNEL > DEFAULT`,高优先级仅覆盖部分字段时按字段级回退。
- 命中协议缺少 `host/port/username/credentialRef`、阶段目录为空或模板变量非法时,接口必须立即返回配置错误,不得回退到错误租户或错误通道。
### IF-EXT-002 银行代扣回盘接收接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-EXT-002 |
| 接口名称 | 银行代扣回盘接收接口 |
| 归属模块 | REV-008 |
| 调用方向 | 银行渠道 / SYS-009 → SYS-002 |
| 接口方式 | 文件交换或 HTTPS REST |
| 业务说明 | 接收代扣成功、失败、退票等结果并回写业务状态 |
| 核心数据支撑 | `bk_withholding_batch`、`bk_withholding_item`、`bk_transaction`、`bk_transaction_exception` |
边界约束:
- 回盘处理、回盘状态查询、差异核对和结算确认属于同一能力簇;其中 `BankWithholding` 的回盘与回盘状态查询已具备最小实现态闭环证据,但完整差异核对、异常补偿和结算确认仍属后续完善项。
- 当前正式文档允许保留回盘文件名、批次号、回盘日期、结果状态等正式字段约束,但不得把未落地的真实文件解析、异常补偿和结算闭环写成既成事实。
### IF-EXT-003 银行实时收费接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-EXT-003 |
| 接口名称 | 银行实时收费接口 |
| 归属模块 | REV-003 / REV-008 |
| 调用方向 | 银行渠道 / SYS-009 ↔ SYS-002 |
| 接口方式 | HTTPS REST |
| 业务说明 | 支撑柜台、网银、手机银行实时查询应收并完成缴费 |
| 核心数据支撑 | `biz_charge`、`biz_charge_detail`、`bk_transaction`、`bk_transaction_callback` |
边界约束:
- 当前 backend 已确认欠费查询与缴费处理具备实现证据,可作为正式文档中的已落地基础能力。
- 代理收费对账、汇总对账和当日未对账红冲等扩展能力当前仍未形成完整实现闭环,正式文档须标注为后续完善项。
### 银行签约、状态查询与批次控制扩展接口
| 接口动作 | 推荐归属 | 当前代码路径 | 当前状态 | 正式口径 |
|---------|----------|-------------|----------|----------|
| 代扣签约 | REV-008 / SYS-009 | `BankWithholdingController#signing` | 已实现 | 可作为正式接口能力写入 |
| 代扣解约 | REV-008 / SYS-009 | `BankWithholdingController#termination` | 已实现 | 可作为正式接口能力写入 |
| 托收签约 | REV-008 / SYS-009 | `BankCollectionController#signing` | 已实现 | 可作为正式接口能力写入 |
| 托收解约 | REV-008 / SYS-009 | `BankCollectionController#termination` | 已实现 | 可作为正式接口能力写入 |
| 客户状态查询 | REV-008 / SYS-009 | `BankWithholdingController#customerCheck` / `BankCollectionController#customerCheck` | 代扣已实现;托收部分实现 | 代扣可作为正式接口能力写入;托收仅保留正式契约边界与结果状态 |
| 送盘 | REV-008 / SYS-009 | `BankWithholdingController#sendDisc` / `BankCollectionController#sendDisc` | 代扣已实现;托收部分实现 | 代扣可作为正式接口能力写入;托收仅保留正式契约边界与批次发送语义 |
| 送盘状态查询 | REV-008 / SYS-009 | `BankWithholdingController#sendDiscCheck` / `BankCollectionController#sendDiscCheck` | 代扣已实现;托收部分实现 | 代扣可作为正式接口能力写入;托收仅保留正式契约边界与批次状态语义 |
| 取消送盘 | REV-008 / SYS-009 | `BankWithholdingController#cancelDisc` / `BankCollectionController#cancelDisc` | 代扣已实现;托收部分实现 | 代扣可作为正式接口能力写入;托收仅保留正式契约边界与可取消条件 |
| 回盘 | REV-008 / SYS-009 | `BankWithholdingController#backDisc` / `BankCollectionController#backDisc` | 代扣已实现;托收部分实现 | 代扣可作为正式接口能力写入;托收仅保留正式契约边界与回盘处理语义 |
| 回盘状态查询 | REV-008 / SYS-009 | `BankWithholdingController#backDiscCheck` / `BankCollectionController#backDiscCheck` | 代扣已实现;托收部分实现 | 代扣可作为正式接口能力写入;托收仅保留正式契约边界与回盘状态语义 |
### IF-EXT-004 聚合支付下单接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-EXT-004 |
| 接口名称 | 聚合支付下单接口 |
| 归属模块 | REV-003 / CS-003 / CS-007 |
| 调用方向 | SYS-002 → SYS-009 |
| 接口方式 | HTTPS REST |
| 业务说明 | 创建微信、支付宝等支付订单,返回二维码、收银参数或支付跳转信息 |
| 核心数据支撑 | `biz_charge`、`biz_collection`、`bk_transaction` |
### IF-EXT-005 聚合支付结果回调接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-EXT-005 |
| 接口名称 | 聚合支付结果回调接口 |
| 归属模块 | REV-003 / CS-003 / CS-007 |
| 调用方向 | SYS-009 → SYS-002 |
| 接口方式 | HTTPS REST + 签名校验 |
| 业务说明 | 接收支付成功、失败、关闭、退款等异步事件,并更新收费状态 |
| 核心数据支撑 | `bk_transaction_callback`、`biz_collection`、`biz_charge` |
### IF-EXT-006 发票开具协同接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-EXT-006 |
| 接口名称 | 发票开具协同接口 |
| 归属模块 | REV-005 / CS-004 |
| 调用方向 | SYS-002 → SYS-008 |
| 接口方式 | HTTPS REST |
| 业务说明 | 传递账单、客户、抬头、税率等信息,由 SYS-008 承接开票 |
| 核心数据支撑 | `biz_invoice`、`biz_invoice_taxrate`、`biz_cust_invoice` |
### IF-EXT-007 发票结果回写接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-EXT-007 |
| 接口名称 | 发票结果回写接口 |
| 归属模块 | REV-005 / CS-004 |
| 调用方向 | SYS-008 → SYS-002 |
| 接口方式 | HTTPS REST |
| 业务说明 | 回写开票状态、票据编号、下载地址、作废/红冲结果 |
| 核心数据支撑 | `biz_invoice`、`biz_process_invoice_modifys` |
### IF-EXT-008 消息触达接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-EXT-008 |
| 接口名称 | 消息触达接口 |
| 归属模块 | REV-006 / CS-006 |
| 调用方向 | SYS-002 → SYS-010 |
| 接口方式 | HTTPS REST 或 MQ |
| 业务说明 | 承接催缴通知、办理进度通知、缴费结果通知等消息事件,返回受理结果并回传执行结果 |
| 核心数据支撑 | `biz_charge`、`biz_process`、`biz_operat_log` |
边界约束:
- `IF-EXT-008` 只负责渠道触达执行与回执回传,不负责催缴候选对象筛选、任务生成或业务状态主控。
- `SYS-010` 回传的渠道执行结果需由 `SYS-002` 映射为 `PENDING`、`SUCCESS`、`FAIL`、`MANUAL_VERIFIED` 四态业务状态。
- 当仅返回受理成功但未返回终态时,`SYS-002` 维持 `PENDING`;若长期无终态且人工核查确认,可转 `MANUAL_VERIFIED`。
- 消息模板、供应商协议和重试细节由 `SYS-010` 管理,不在 `IF-EXT-008` 展开实现细节。
### IF-EXT-009 集抄数据接入接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-EXT-009 |
| 接口名称 | 集抄数据接入接口 |
| 归属模块 | REV-002 |
| 调用方向 | IoT 平台 / 集抄平台 → SYS-002 |
| 接口方式 | HTTPS REST / MQ |
| 业务说明 | 接收远传读数、设备状态、异常告警,触发抄表校验与开账准备 |
| 核心数据支撑 | `biz_meter_read`、`biz_reading_data`、`biz_last_reading` |
## 内部接口设计
## SYS-002 内部接口清单
### REV 接口清单
| 接口编号 | 接口名称 | 归属模块 | 主要用途 | 主要数据对象 |
|---------|----------|----------|----------|-------------|
| IF-REV-001 | 客户信息查询接口 | REV-001 | 查询客户档案、联系人、账户、水表绑定关系 | `biz_cust`、`biz_account`、`biz_cust_contact`、`biz_cust_meter` |
| IF-REV-002 | 客户主数据维护接口 | REV-001 | 新增、变更客户档案及开票/托收/代扣关系 | `biz_cust`、`biz_cust_invoice`、`biz_cust_collection_rel`、`biz_cust_withholding_rel` |
| IF-REV-003 | 抄表任务下发接口 | REV-002 | 按册本、片区、抄表周期生成抄表任务 | `biz_meter_book`、`biz_meter_read` |
| IF-REV-004 | 抄表数据提交接口 | REV-002 | 提交抄表数据、图片、异常标记并触发校验 | `biz_reading_data`、`biz_reading_logs`、`biz_last_reading` |
| IF-REV-005 | 账单生成接口 | REV-002 | 根据抄表结果、价格模板和费用组成生成账单 | `biz_charge`、`biz_charge_detail`、`biz_price_template`、`biz_cost_component` |
| IF-REV-006 | 缴费处理接口 | REV-003 | 创建收费记录、核销账单、回写收款结果 | `biz_collection`、`biz_charge`、`bk_transaction` |
| IF-REV-007 | 账务调整接口 | REV-004 | 发起金额调整、退款、冲正、坏账等业务处理 | `biz_charge`、`biz_charge_detail`、`biz_operat_log` |
| IF-REV-008 | 发票申请接口 | REV-005 | 后台发起单笔/批量开票申请并生成受理主键 | `biz_invoice`、`biz_invoice_taxrate`、`biz_cust_invoice` |
| IF-REV-009 | 发票结果查询接口 | REV-005 | 按申请单号/受理号查询开票结果并执行补偿查询 | `biz_invoice`、`biz_operat_log` |
| IF-REV-013 | 催缴任务生成与结果承接接口 | REV-006 | 生成催缴任务、查询任务结果并承接四态状态回写 | `biz_charge`、`biz_operat_log`、历史催缴查询口径 |
| IF-REV-010 | 统计查询接口 | REV-007 | 查询营收、收费、欠费、渠道、客户统计结果 | 聚合视图 / 统计结果集 |
| IF-REV-011 | 银行代收协同接口 | REV-008 | 发起代扣、回盘、对账、结算协同 | `biz_withholding`、`bk_reconcile_batch`、`bk_settlement_batch` |
| IF-REV-012 | 业务参数配置接口 | REV-009 | 查询和维护价格模板、优惠方案、业务参数配置 | `biz_parameter_settings`、`biz_price_*`、`biz_page_settings*` |
### CS 接口清单
| 接口编号 | 接口名称 | 归属模块 | 主要用途 | 主要数据对象 |
|---------|----------|----------|----------|-------------|
| IF-CS-001 | 账户绑定接口 | CS-001 | 绑定、解绑、切换默认客户 | `biz_cust_app_binds`、`biz_cust` |
| IF-CS-002 | 历史账单查询接口 | CS-002 | 查询账单、欠费、用水历史、缴费记录 | `biz_charge`、`biz_charge_detail`、`biz_reading_data` |
| IF-CS-003 | 在线支付下单接口 | CS-003 | 创建微信/支付宝线上支付订单 | `biz_charge`、`biz_collection`、`bk_transaction` |
| IF-CS-004 | 电子发票消费接口 | CS-004 | 查询、下载、推送本人已开具电子发票 | `biz_invoice`、`biz_cust_invoice` |
| IF-CS-005 | 网点与业务办理接口 | CS-005 | 查询营业网点、预约信息、可办事项 | `biz_outlets`、`biz_business_types` |
| IF-CS-006 | 业务办理进度接口 | CS-006 | 提交业务申请、查询办理进度与附件 | `biz_process`、`biz_process_transfer`、`biz_content_attach` |
| IF-CS-007 | 柜面扫码支付接口 | CS-007 | 创建柜面扫码支付订单并回写结果 | `biz_collection`、`bk_transaction`、`biz_charge` |
### UP 接口清单
| 接口编号 | 接口名称 | 归属模块 | 主要用途 | 主要数据对象 |
|---------|----------|----------|----------|-------------|
| IF-UP-001 | 用户登录接口 | UP-001 | 用户登录并获取访问令牌 | `system_users`、`system_oauth2_access_token`、`system_login_log` |
| IF-UP-002 | 用户信息接口 | UP-001 | 查询当前登录用户上下文信息 | `system_users`、`system_dept` |
| IF-UP-003 | 权限校验接口 | UP-002 | 校验菜单、按钮、数据权限 | `system_role`、`system_role_menu`、`system_user_role` |
| IF-UP-004 | 参数字典接口 | UP-003 | 查询字典、参数、配置项 | `system_dict_type`、`system_dict_data`、`biz_parameter_settings` |
### METER 接口清单
| 接口编号 | 接口名称 | 归属模块 | 主要用途 | 主要数据对象 |
|---------|----------|----------|----------|-------------|
| IF-METER-001 | 水表档案查询接口 | METER-001 | 查询水表档案、状态与生命周期信息 | `biz_meter`、`biz_meter_model`、`biz_meter_caliber`、`biz_meter_range` |
| IF-METER-002 | 表务工单处理接口 | METER-003 | 提交换表、移表、校表、维修等工单处理结果 | `biz_meter_log`、`biz_process`、`biz_process_transfer` |
| IF-METER-003 | 库存出入库接口 | METER-002 | 处理领用、退库、报废等库存动作 | `biz_meter_in_out`、`biz_meter_in_out_rel` |
| IF-METER-004 | 集抄数据接收接口 | METER-003 | 接收远传抄表、异常告警并同步状态 | `biz_reading_data`、`biz_meter_read`、`biz_last_reading` |
### INST 接口清单
| 接口编号 | 接口名称 | 归属模块 | 主要用途 | 主要数据对象 |
|---------|----------|----------|----------|-------------|
| IF-INST-001 | 报装申请提交接口 | INST-001 | 提交报装申请、附件与基础资料 | `biz_process`、`biz_content`、`biz_content_attach` |
| IF-INST-002 | 踏勘结果回填接口 | INST-001 | 回填现场踏勘、方案与审核结果 | `biz_process_transfer`、`biz_business_datas` |
| IF-INST-003 | 合同签署发起接口 | INST-002 | 发起电子签章任务并传输合同信息 | `installation_contract`、`installation_signature` |
| IF-INST-004 | 签章回执接口 | INST-002 | 回写签章结果、时间戳和存证信息 | `installation_signature`、`installation_evidence` |
| IF-INST-005 | 报装归档接口 | INST-003 | 归档申请、合同、验收与签章回执资料 | `biz_content_attach`、`installation_evidence` |
## 关键内部接口说明
### IF-UP-001 用户登录接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-UP-001 |
| 归属模块 | UP-001 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/system/auth/login` |
| 功能描述 | 统一认证入口,签发访问令牌并输出用户上下文 |
| 核心表 | `system_users`、`system_oauth2_access_token`、`system_login_log` |
### IF-REV-001 客户信息查询接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-REV-001 |
| 归属模块 | REV-001 |
| 请求方式 | GET |
| 请求路径 | `/admin-api/revenue/customer/{id}` |
| 功能描述 | 查询客户主档、账户状态、联系人、水表绑定及开票资料 |
| 核心表 | `biz_cust`、`biz_account`、`biz_cust_contact`、`biz_cust_meter`、`biz_cust_invoice` |
响应结果以客户主档为中心,组合返回账户余额、欠费金额、联系人列表、水表列表与开票资料摘要。
### IF-REV-004 抄表数据提交接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-REV-004 |
| 归属模块 | REV-002 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/revenue/reading-data/create` |
| 功能描述 | 接收人工或远传抄表数据,执行校验、估抄判断、异常标记 |
| 核心表 | `biz_meter_read`、`biz_reading_data`、`biz_last_reading`、`biz_reading_logs` |
典型请求体:
```json
{
"meterReadId": 1001,
"meterId": 2001,
"readTime": "2026-03-11 09:30:00",
"currentReading": 156.32,
"readType": "MANUAL",
"photoList": [
"file-001",
"file-002"
],
"gps": "119.2965,26.0745",
"remark": "现场抄表正常"
}
```
### IF-REV-005 账单生成接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-REV-005 |
| 归属模块 | REV-002 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/revenue/charge/generate` |
| 功能描述 | 基于抄表结果、水价模板、阶梯规则、费用组成生成账单,并返回成功清单、失败清单与生成汇总 |
| 核心表 | `biz_charge`、`biz_charge_detail`、`biz_price_template`、`biz_price_tier_adjustment`、`biz_cost_component` |
边界约束:
- 本接口只负责抄表校验完成后的账单生成,不直接承接收费核销、发票申请、催缴执行或统计汇总。
- 正式请求范围可按抄表批次、客户集合或抄表任务集合组织;当前 backend 已实现入口为 `/business/charge/charge-batch` 与 `/business/charge/check-charge-batch`,请求体仅接受 `readingDataIds`。
- 价格模板、费用组成、阶梯规则、计划用水方案等任一关键规则缺失时,应阻断生成并返回失败原因,而不是生成不完整账单。
- 特殊开账、无码客户开账、罚款类开账等非标准来源仍沿用同一 `biz_charge` / `biz_charge_detail` 承接口径,不单设平行在线账表。
- 当前实现仅支持 `SettleTypeEnum.ACTUAL_USAGE`;固定水量、按人口数、最低消费等结算方式暂未纳入现有开账链路。
当前 backend 证据与契约缺口:
- `ChargeServiceImpl.generateCheckChargeBatch` 已支持“批量复核 + 批量开账”,并通过 `generateSingleChargeWithCache` 写入 `biz_charge`、`biz_charge_detail`,说明主明细承接路径已存在。
- 返回值当前为 `CommonResult`,仅表达“本次复核成功X条 / 本次开账成功Y条”,尚未提供正式契约要求的成功清单、失败清单、生成汇总和主明细结果对象。
- 单条失败当前主要以 `log.warn` + `false` 跳过处理,尚未形成可直接对外返回的结构化阻断码、失败原因集合与对象范围。
### IF-REV-006 缴费处理接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-REV-006 |
| 归属模块 | REV-003 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/revenue/collection/create` |
| 功能描述 | 处理柜台收费、预存抵扣、渠道收款确认与账单核销 |
| 核心表 | `biz_collection`、`biz_charge`、`bk_transaction` |
### IF-REV-007 账务调整接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-REV-007 |
| 归属模块 | REV-004 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/revenue/accounting/adjust` |
| 功能描述 | 发起水量调整、金额调整、退款、冲正、坏账申请五类账务处理,并统一返回处理结果、审批边界与账单回写状态 |
| 核心表 | `biz_charge`、`biz_charge_detail`、`biz_operat_log`、`bk_transaction*` |
边界约束:
- 一期仅覆盖 `USAGE`、`AMOUNT`、`REFUND`、`REVERSE`、`BAD_DEBT` 五类 `adjustType`。
- 退款、冲正必须提供 `sourceTradeNo` 并完成原交易校验;其他场景不得误用支付流水替代业务依据。
- 审批相关内容仅保留 `approvalRequired`、`PENDING_APPROVAL` 与边界说明,不展开 BPM 节点与审批回写实现细节。
- `resultStatus` 与 `writeBackStatus` 必须分离表达,前者表示处理结论,后者表示账单状态回写结论。
### IF-REV-008 发票申请接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-REV-008 |
| 归属模块 | REV-005 |
| 请求方式 | POST |
| 请求路径 | `/business/invoice/apply` |
| 功能描述 | 后台对已收费未开票账单发起单笔/批量开票申请,并在同一管理域内受理作废/红冲后处理入口 |
| 核心表 | `biz_invoice`、`biz_invoice_taxrate`、`biz_cust_invoice` |
边界约束:
- 一期仅支持后台营业收费员/财务人员发起申请,客户侧不直接调用本接口。
- 发票开具、作废、红冲能力均由 `SYS-008` 统一承接税控侧处理,`SYS-002` 负责业务单据归集、申请发起、后台作废/红冲触发、查询补偿与结果落账。
- 后台发票后处理沿同一管理域补充 `/business/invoice/invalidate` 与 `/business/invoice/red-ink` 两个入口,分别承接作废与红冲动作;处理结果继续通过 `IF-REV-009` 或 `IF-EXT-007` 统一收口。
- 原始单账单不支持直接任意部分金额开票;如需多张发票,应基于拆账/分账后的账单集合申请。
### IF-REV-009 发票结果查询接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-REV-009 |
| 归属模块 | REV-005 |
| 请求方式 | POST |
| 请求路径 | `/business/invoice/query`(补偿查询:`/business/invoice/query/compensate`) |
| 功能描述 | 后台按申请单号/受理号查询开票、作废或红冲结果,并支持系统补偿查询兜底 |
| 核心表 | `biz_invoice`、`biz_operat_log` |
### IF-REV-013 催缴任务生成与结果承接接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-REV-013 |
| 归属模块 | REV-006 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/revenue/reminder/task`(查询:`/admin-api/revenue/reminder/task/query`,人工核查:`/admin-api/revenue/reminder/task/manual-verify`) |
| 功能描述 | 基于欠费账单、催缴策略和渠道偏好生成催缴任务,查询任务状态,并承接业务侧四态结果与处置引用 |
| 核心表 | `biz_charge`、`biz_charge_detail`、`biz_operat_log`、历史催缴查询口径 |
边界约束:
- `IF-REV-013` 是 `REV-006` 的正式业务接口编号,不再复用 `IF-REV-009`。
- `SYS-002` 负责催缴对象筛选、任务生成、业务事件号维护、四态状态承接和历史查询;`SYS-010` 只负责触达执行与结果回传。
- 接口状态固定为 `PENDING`、`SUCCESS`、`FAIL`、`MANUAL_VERIFIED` 四态,不在本轮扩展“已阅读”“已补发”等细粒度业务状态。
- 停复水仅作为联动边界与处置引用承接项,不在本接口中展开停复水内部流程。
### IF-REV-010 统计查询接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-REV-010 |
| 归属模块 | REV-007 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/revenue/statistics/query`(导出:`/admin-api/revenue/statistics/export`) |
| 功能描述 | 面向营收经营分析场景查询统计主题、维度汇总和指标结果,并在权限范围内支持导出 |
| 核心表 | `biz_charge`、`biz_charge_detail`、`biz_collection`、`bk_transaction`、`biz_cust`、`biz_account`、`biz_meter_book`、`biz_reading_data` |
边界约束:
- `IF-REV-010` 只承接经营统计查询,不扩展到预测分析、BI 专题大屏或独立数仓查询。
- 统计口径按“主题 + 维度 + 指标”组织,避免仅以报表名称表达接口范围。
- 导出属于查询扩展能力,必须受数据权限和导出权限控制。
- 没有明确实现证据的独立统计表、专题分析表或离线汇总表不得写成既成事实。
### IF-REV-011 银行代收协同接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-REV-011 |
| 归属模块 | REV-008 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/revenue/bank/withholding/batch` |
| 功能描述 | 创建代扣批次、发起对账、接收结算回写 |
| 核心表 | `biz_withholding`、`bk_withholding_batch`、`bk_reconcile_batch`、`bk_settlement_batch` |
边界约束:
- `IF-REV-011` 在当前阶段主要承接正式业务协同边界,不等同于送盘、回盘、对账、结算全部已闭环。
- 已确认的后台管理入口可证明批次、差异、结算台账对象存在,但不能替代银行 app 协同接口的完成度判断。
### IF-REV-012 业务参数配置接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-REV-012 |
| 归属模块 | REV-009 |
| 请求方式 | GET / POST |
| 请求路径 | `/admin-api/revenue/parameter/config` |
| 功能描述 | 查询与维护价格模板、业务参数、页面参数与规则配置 |
| 核心表 | `biz_parameter_settings`、`biz_price_*`、`biz_page_settings*` |
### IF-CS-001 账户绑定接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-CS-001 |
| 归属模块 | CS-001 |
| 请求方式 | POST |
| 请求路径 | `/app-api/customer/account/bind` |
| 功能描述 | 绑定、解绑、切换默认客户账户,并校验渠道身份与客户关系 |
| 核心表 | `biz_cust_app_binds`、`biz_cust`、`biz_account` |
### IF-CS-002 历史账单查询接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-CS-002 |
| 归属模块 | CS-002 |
| 请求方式 | GET |
| 请求路径 | `/app-api/customer/bill/history` |
| 功能描述 | 查询账单、欠费、缴费、用水历史及发票摘要 |
| 核心表 | `biz_charge`、`biz_charge_detail`、`biz_reading_data`、`biz_invoice` |
### IF-CS-003 在线支付下单接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-CS-003 |
| 归属模块 | CS-003 |
| 请求方式 | POST |
| 请求路径 | `/app-api/customer/payment/order` |
| 功能描述 | 面向微网厅、微信、支付宝等客户渠道创建支付订单 |
| 核心表 | `biz_charge`、`biz_collection`、`bk_transaction` |
边界约束:
- 支付通道、支付回调、对账流水由 `SYS-009` 负责。
- `SYS-002` 负责校验待缴账单、生成业务订单、更新核销结果。
### IF-CS-004 电子发票消费接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-CS-004 |
| 归属模块 | CS-004 |
| 请求方式 | POST |
| 请求路径 | `/business/invoice/customer/query`、`/business/invoice/customer/download`、`/business/invoice/customer/push` |
| 功能描述 | 面向客户渠道查询、下载、推送本人已开具电子发票 |
| 核心表 | `biz_invoice`、`biz_cust_invoice`、`biz_invoice_taxrate` |
边界约束:
- 一期客户侧仅消费已形成 `SUCCESS` 终态且具备票据地址的电子发票结果,不直接发起开票申请。
- 发票作废、红冲仍由 `SYS-008` 统一承接税控侧处理;`IF-CS-004` 仅消费当前仍可展示、下载、推送的有效电子发票结果,不开放客户侧直接发起作废或红冲。
### IF-CS-006 业务办理进度接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-CS-006 |
| 归属模块 | CS-006 |
| 请求方式 | GET / POST |
| 请求路径 | `/app-api/customer/process` |
| 功能描述 | 提交业务办理申请、查询办理进度、补充附件资料 |
| 核心表 | `biz_process`、`biz_process_transfer`、`biz_business_datas`、`biz_content_attach` |
### IF-CS-007 柜面扫码支付接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-CS-007 |
| 归属模块 | CS-007 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/counter/scan-pay/create` |
| 功能描述 | 柜台生成扫码订单,接收支付结果并回写收费状态 |
| 核心表 | `biz_collection`、`bk_transaction`、`biz_charge` |
### IF-METER-001 水表档案查询接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-METER-001 |
| 归属模块 | METER-001 |
| 请求方式 | GET |
| 请求路径 | `/admin-api/meter/archive/{id}` |
| 功能描述 | 查询水表档案、状态、参数与生命周期信息 |
| 核心表 | `biz_meter`、`biz_meter_model`、`biz_meter_caliber`、`biz_meter_range` |
### IF-METER-002 表务工单处理接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-METER-002 |
| 归属模块 | METER-003 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/meter/work-order/handle` |
| 功能描述 | 提交换表、移表、校表、维修等工单处理结果并回写设备状态 |
| 核心表 | `biz_meter_log`、`biz_process`、`biz_process_transfer` |
### IF-METER-003 库存出入库接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-METER-003 |
| 归属模块 | METER-002 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/meter/stock/in-out` |
| 功能描述 | 处理领用、退库、报废等库存动作并更新生命周期状态 |
| 核心表 | `biz_meter_in_out`、`biz_meter_in_out_rel`、`biz_meter` |
### IF-METER-004 集抄数据接收接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-METER-004 |
| 归属模块 | METER-003 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/meter/iot/reading/receive` |
| 功能描述 | 接收远传抄表、设备状态和异常告警并同步读数状态 |
| 核心表 | `biz_reading_data`、`biz_meter_read`、`biz_last_reading` |
### IF-INST-001 报装申请提交接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-INST-001 |
| 归属模块 | INST-001 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/installation/apply/create` |
| 功能描述 | 提交报装申请、基础资料与附件,并创建流程实例 |
| 核心表 | `biz_process`、`biz_content`、`biz_content_attach` |
### IF-INST-002 踏勘结果回填接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-INST-002 |
| 归属模块 | INST-001 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/installation/survey/result` |
| 功能描述 | 回填现场踏勘结果、方案版本和审核结论 |
| 核心表 | `biz_process_transfer`、`biz_business_datas` |
### IF-INST-003 合同签署发起接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-INST-003 |
| 归属模块 | INST-002 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/installation/contract/sign/initiate` |
| 功能描述 | 发起报装合同签署流程,并与 CA 系统协同处理签章、时间戳和存证 |
| 核心表 | `installation_contract`、`installation_signature`、`installation_evidence` |
### IF-INST-004 签章回执接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-INST-004 |
| 归属模块 | INST-002 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/installation/contract/sign/callback` |
| 功能描述 | 回写签章结果、时间戳、存证回执与签章文件地址 |
| 核心表 | `installation_signature`、`installation_evidence` |
### IF-INST-005 报装归档接口
| 项目 | 说明 |
|------|------|
| 接口编号 | IF-INST-005 |
| 归属模块 | INST-003 |
| 请求方式 | POST |
| 请求路径 | `/admin-api/installation/archive/submit` |
| 功能描述 | 归档申请资料、验收附件、合同文件与签章回执 |
| 核心表 | `biz_content_attach`、`installation_evidence`、`biz_process` |
## 字段级请求与响应定义
> 说明:以下字段级定义服务于接口设计说明,重点体现业务含义、来源对象与跨系统协同所需关键字段,不等同于数据库表的完整字段清单。
### IF-REV-001 客户信息查询接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源 |
|------|------|------|------|----------|
| id | Long | 否 | 客户主键 ID,与 `code` 二选一 | `biz_cust.id` |
| code | String | 否 | 客户编号,与 `id` 二选一 | `biz_cust.code` |
| mobile | String | 否 | 客户手机号,支持模糊校验查询 | `biz_cust.mobile` / `biz_cust_contact.mobile` |
| queryType | String | 否 | 查询类型:`base`、`account`、`meter`、`invoice`、`all` | 查询控制参数 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| id | Long | 客户主键 ID | `biz_cust.id` |
| code | String | 客户编号 | `biz_cust.code` |
| name | String | 客户名称 | `biz_cust.name` |
| custType | String | 客户类型 | `biz_cust.cust_type` |
| mobile | String | 主要联系电话 | `biz_cust.mobile` |
| address | String | 客户地址 | `biz_cust.address` |
| accountInfo | Object | 账户信息对象 | `biz_account` |
| accountInfo.balance | Decimal | 账户余额 | `biz_account.balance` |
| accountInfo.arrearsAmount | Decimal | 欠费金额 | `biz_account.arrears_amount` |
| accountInfo.status | String | 账户状态 | `biz_account.status` |
| contactList | Array | 联系人列表 | `biz_cust_contact` |
| meterList | Array | 绑定水表列表 | `biz_cust_meter`、`biz_meter` |
| invoiceInfo | Object | 开票信息摘要 | `biz_cust_invoice` |
### IF-REV-004 抄表数据提交接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| meterReadId | Long | 是 | 抄表任务 ID | `biz_meter_read.id` |
| meterId | Long | 是 | 水表 ID | `biz_meter.id` |
| readTime | Datetime | 是 | 抄表时间 | `biz_reading_data.read_time` |
| currentReading | Decimal | 是 | 本次读数 | `biz_reading_data.current_reading` |
| readType | String | 是 | 抄表方式:`MANUAL`、`IOT`、`IMPORT` | `biz_reading_data.read_type` |
| usageAmount | Decimal | 否 | 本次用量,可由系统自动计算 | `biz_reading_data.usage_amount` |
| photoList | Array | 否 | 表盘照片或现场图片文件标识 | 附件系统 / 文件服务 |
| gps | String | 否 | 现场坐标 | 扩展信息 |
| remark | String | 否 | 异常说明或现场备注 | `biz_reading_logs.remark` |
| abnormalFlag | Boolean | 否 | 是否标记异常 | 过程状态 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| readingId | Long | 抄表数据主键 | `biz_reading_data.id` |
| meterReadId | Long | 抄表任务 ID | `biz_meter_read.id` |
| validateStatus | String | 校验状态:`PASS`、`WARN`、`REJECT` | 校验结果 |
| abnormalFlag | Boolean | 是否识别为异常 | 过程判断 |
| nextAction | String | 后续动作:`BILLING`、`RECHECK`、`MANUAL_REVIEW` | 流程控制 |
| msg | String | 处理说明 | 返回消息 |
### IF-REV-005 账单生成接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| billPeriod | String | 是 | 账期,如 `2026-03` | 开账批次参数 |
| readingBatchNo | String | 否 | 抄表批次号 | 抄表批次 |
| customerIds | Array | 否 | 指定客户范围 | `biz_cust.id` |
| meterReadIds | Array | 否 | 指定抄表任务范围 | `biz_meter_read.id` |
| dueDate | Date | 是 | 应收截止日期 | `biz_charge.due_date` |
| operatorId | Long | 否 | 发起操作人 | 操作上下文 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| generateCount | Integer | 成功生成账单数量 | 汇总信息 |
| successList | Array | 成功明细列表 | `biz_charge` |
| successList[].chargeId | Long | 账单主键 | `biz_charge.id` |
| successList[].chargeCode | String | 账单编号 | `biz_charge.code` |
| successList[].custId | Long | 客户 ID | `biz_charge.cust_id` |
| successList[].totalAmount | Decimal | 账单总金额 | `biz_charge.total_amount` |
| failureList | Array | 失败明细列表 | 处理结果 |
| failureList[].reason | String | 失败原因 | 异常信息 |
### IF-REV-006 缴费处理接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| custId | Long | 是 | 客户 ID | `biz_charge.cust_id` |
| chargeIds | Array | 是 | 待核销账单 ID 列表 | `biz_charge.id` |
| paymentChannel | String | 是 | 支付渠道:`CASH`、`WECHAT`、`ALIPAY`、`BANK`、`PREPAY` | 渠道参数 |
| paymentAmount | Decimal | 是 | 本次支付金额 | `biz_collection.amount` |
| actualAmount | Decimal | 否 | 实收金额,柜台收费场景使用 | 柜台收费扩展 |
| tradeNo | String | 否 | 外部交易流水号 | `bk_transaction.trade_no` |
| outletCode | String | 否 | 柜台或网点编号 | `biz_outlets.code` |
| remark | String | 否 | 收费备注 | `biz_collection.remark` |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| collectionId | Long | 收费记录 ID | `biz_collection.id` |
| collectionCode | String | 收费业务编号 | `biz_collection.code` |
| writeOffStatus | String | 核销状态:`SUCCESS`、`PARTIAL`、`PENDING` | 业务状态 |
| paidAmount | Decimal | 已支付金额 | 汇总结果 |
| remainAmount | Decimal | 剩余待支付金额 | 汇总结果 |
| tradeNo | String | 渠道交易流水号 | `bk_transaction.trade_no` |
| invoiceAvailable | Boolean | 是否可发起开票 | 业务判断 |
### IF-REV-007 账务调整接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| chargeId | Long | 是 | 目标账单 ID | `biz_charge.id` |
| adjustType | String | 是 | 调整类型:`USAGE`、`AMOUNT`、`REFUND`、`REVERSE`、`BAD_DEBT` | 业务类型 |
| adjustAmount | Decimal | 否 | 调整金额 | `biz_charge_detail` / 业务计算 |
| adjustUsage | Decimal | 否 | 调整水量 | 业务计算 |
| sourceTradeNo | String | 否 | 原交易流水号,退款/冲正场景使用 | `bk_transaction.trade_no` |
| reasonCode | String | 是 | 调整原因编码 | 业务字典 |
| remark | String | 否 | 调整说明 | `biz_operat_log.remark` |
| attachmentList | Array | 否 | 依据附件 | 附件系统 |
| operatorId | Long | 是 | 操作人 ID | 操作上下文 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| adjustmentNo | String | 调整业务编号 | 业务流水 |
| chargeId | Long | 目标账单 ID | `biz_charge.id` |
| resultStatus | String | 处理状态:`SUCCESS`、`PENDING_APPROVAL`、`FAIL` | 业务状态 |
| writeBackStatus | String | 账单回写状态 | 业务状态 |
| approvalRequired | Boolean | 是否进入审批 | 流程判断 |
| msg | String | 处理说明 | 返回消息 |
### IF-REV-008 发票申请接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| applicationNo | String | 否 | 发票申请单号 | 服务端生成,作为幂等主键之一 |
| custId | Long | 是 | 客户 ID | `biz_invoice.cust_id` |
| chargeIds | Array | 是 | 开票关联账单 ID 列表 | 业务单据关联 |
| invoiceType | String | 是 | 发票类型:`ELECTRONIC`、`PAPER` | `biz_invoice.invoice_type` |
| invoiceTitle | String | 是 | 发票抬头 | `biz_cust_invoice.invoice_title` |
| taxNo | String | 否 | 税号 | `biz_cust_invoice.tax_no` |
| email | String | 否 | 电子发票接收邮箱 | `biz_cust_invoice.email` |
| mobile | String | 否 | 接收手机号 | `biz_cust_invoice.mobile` |
| sourceChannel | String | 是 | 来源渠道:`COUNTER`、`FINANCE_BACKOFFICE` | 业务来源 |
| remark | String | 否 | 申请备注 | 操作留痕 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| invoiceId | Long | 发票申请记录 ID | `biz_invoice.id` |
| applicationNo | String | 发票申请单号 | `biz_invoice.application_no` |
| invoiceStatus | String | 状态:`SUBMITTED`、`PENDING`、`REJECTED` | `biz_invoice.invoice_status` |
| sysRequestNo | String | 发往 `SYS-008` 的受理号 | 协同流水 |
| msg | String | 处理说明 | 返回消息 |
#### 申请校验与幂等约束
- 所有关联账单必须满足“已收费、未开票、未作废”。
- 一期不支持原始单账单直接任意部分金额开票;如需多张发票,必须基于拆账/分账后的账单集合发起申请。
- 企业抬头场景应校验 `taxNo` 完整性;电子发票场景优先校验 `email` 或 `mobile` 至少一项可用。
- 幂等键优先使用 `applicationNo`,未传入时按 `custId + chargeIds` 组合控制重复申请。
- 申请成功后必须创建查询补偿上下文,不依赖回调作为唯一结果来源。
#### 后台作废请求参数(`/business/invoice/invalidate`)
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| invoiceId | Long | 是 | 发票记录 ID | `biz_invoice.id` |
| invalidReason | String | 是 | 作废原因 | `biz_invoice.invalid_reason` |
| invalidRemark | String | 否 | 作废备注 | `biz_invoice.invalid_remark` |
| originalInvoiceCode | String | 否 | 原发票代码;传入时必须与当前发票记录一致 | `biz_invoice.original_invoice_code` |
| originalInvoiceNumber | String | 否 | 原发票号码;传入时必须与当前发票记录一致 | `biz_invoice.original_invoice_number` |
#### 后台红冲请求参数(`/business/invoice/red-ink`)
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| invoiceId | Long | 是 | 发票记录 ID | `biz_invoice.id` |
| redInkReason | String | 是 | 红冲原因 | `biz_invoice.red_ink_reason` |
| redInkRemark | String | 否 | 红冲备注 | `biz_invoice.red_ink_remark` |
| originalInvoiceCode | String | 否 | 原发票代码;传入时必须与当前发票记录一致 | `biz_invoice.original_invoice_code` |
| originalInvoiceNumber | String | 否 | 原发票号码;传入时必须与当前发票记录一致 | `biz_invoice.original_invoice_number` |
#### 后台作废/红冲处理约束
- 作废与红冲仅允许对当前 `invoiceStatus=SUCCESS` 的记录发起;已进入 `INVALID` 或 `RED_INK` 的记录必须拒绝重复处理。
- 后台提交作废或红冲后,应同步写入原因、备注、原票引用与触发来源,当前实现的触发来源分别为 `ADMIN_INVALIDATE`、`ADMIN_RED_INK`。
- 作废与红冲的即时返回仅表示后台已受理本次后处理动作;最终状态仍通过 `IF-REV-009` 查询补偿或 `IF-EXT-007` 回写统一收口。
- 后处理动作必须保留操作日志,记录触发人、目标状态、原因、备注与原发票代码/号码。
### IF-REV-009 发票结果查询接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| applicationNo | String | 否 | 发票申请单号,与 `sysRequestNo` 二选一 | `biz_invoice.application_no` |
| sysRequestNo | String | 否 | `SYS-008` 受理号,与 `applicationNo` 二选一 | `biz_invoice.sys_request_no` |
| querySource | String | 是 | 查询来源:`MANUAL`、`AUTO_COMPENSATE`、`CALLBACK_VERIFY` | 查询触发上下文 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| invoiceId | Long | 发票主记录 ID | `biz_invoice.id` |
| applicationNo | String | 发票申请单号 | `biz_invoice.application_no` |
| sysRequestNo | String | `SYS-008` 受理号 | `biz_invoice.sys_request_no` |
| invoiceStatus | String | 状态:`SUBMITTED`、`PENDING`、`SUCCESS`、`FAIL`、`INVALID`、`RED_INK` | `biz_invoice.invoice_status` |
| invoiceCode | String | 发票代码 | `biz_invoice.invoice_code` |
| invoiceNumber | String | 发票号码 | `biz_invoice.invoice_number` |
| fileUrl | String | 电子发票文件地址 | `biz_invoice.file_url` |
| failReason | String | 失败原因 | `biz_invoice.fail_reason` |
| pushStatus | String | 电子发票推送状态 | `biz_invoice.push_status` |
| lastQueryTime | DateTime | 最近一次查询时间 | `biz_invoice.last_try_time` |
| tryCount | Integer | 累计查询次数 | `biz_invoice.try_count` |
| latestResult | String | 最近一次查询结果摘要 | `biz_invoice.latest_result` |
| latestError | String | 最近一次查询异常说明 | `biz_invoice.latest_error` |
| msg | String | 处理说明 | 返回消息 |
#### 查询补偿与状态流转约束
- 查询入口同时服务于后台人工查询与系统补偿查询,两类触发必须复用同一状态落账规则。
- 当 `querySource=AUTO_COMPENSATE` 时,接口语义表示由系统补偿任务触发一次兜底查询,并刷新最近查询时间、下次计划时间与累计次数。
- 查询结果若确认开票成功,应回写票号、票据地址与账单-发票关联状态;若仍处理中,仅维持 `PENDING` 并更新补偿上下文。
- 对已发起作废或红冲的记录,查询结果应允许把终态更新为 `INVALID` 或 `RED_INK`,并同步刷新 `latestResult`、`latestError`、账单关联状态与后处理上下文。
- 已进入 `SUCCESS` 的正常开票终态不得被后续失败查询结果覆盖;若外部返回异常,应记录到操作留痕并保留人工核查入口。
### IF-REV-013 催缴任务生成与结果承接接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| taskNo | String | 否 | 催缴任务号;查询/人工核查时必填 | 任务主键 |
| custId | Long | 是 | 客户标识 | `biz_charge.cust_id` |
| chargeIds | Array | 是 | 欠费账单集合 | `biz_charge.id` |
| billPeriod | String | 是 | 账期 | `biz_charge.bill_period` |
| arrearsAmount | Decimal | 是 | 欠费金额汇总 | 欠费汇总结果 |
| strategyCode | String | 是 | 命中的催缴策略编码 | 策略规则 |
| channelType | String | 是 | 触达渠道:短信/微信公众号/站内信等 | 任务分组结果 |
| triggerType | String | 是 | 触发方式:`AUTO` / `MANUAL` | 任务触发上下文 |
| eventNo | String | 否 | 业务事件号;生成后返回,回写承接时作为关联键 | 协同事件主键 |
| relatedDisposalRef | String | 否 | 关联停复水或工单引用 | 联动追溯信息 |
| manualVerifyNote | String | 否 | 人工核查说明;仅人工核查时填写 | 核查留痕 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| taskNo | String | 催缴任务号 | 任务主键 |
| interfaceCode | String | 固定返回 `IF-REV-013` | 接口常量 |
| eventNo | String | 业务事件号 | 协同主键 |
| status | String | 状态:`PENDING`、`SUCCESS`、`FAIL`、`MANUAL_VERIFIED` | 任务状态 |
| resultTime | DateTime | 最近结果时间 | 结果回写时间 |
| failureReason | String | 失败原因 | 失败回写 |
| resultChannel | String | 实际触达渠道 | 协同结果 |
| relatedDisposalRef | String | 关联停复水或工单引用 | 联动追溯 |
| msg | String | 处理说明 | 返回消息 |
#### 任务生成与状态承接约束
- 任务生成前必须完成欠费账单、客户类别、联系方式和策略命中校验;至少存在一个可用触达渠道。
- 相同业务事件与同一接收对象在去重窗口内不得重复生成等效任务;若为人工补发,应显式记录 `triggerType=MANUAL`。
- `PENDING` 表示已生成任务并发起协同,等待 `SYS-010` 回写或人工核查;`SUCCESS`、`FAIL` 由协同结果或明确失败确认触发。
- 当外部结果长期未定、历史回执不足或人工核查已确认结果时,可将任务补记为 `MANUAL_VERIFIED`,并保留核查人和核查说明。
- 接口返回的 `relatedDisposalRef` 仅用于追溯停复水、复水或工单处置引用,不表示本接口承担下游流程控制。
#### 失败阻断与人工核查约束
- 候选账单不满足欠费前提、策略编码无效或触达信息缺失时,应阻断任务生成并返回明确原因,不得写入伪成功状态。
- 频控规则命中时允许部分阻断,必须返回被跳过对象与原因摘要,避免“全成功”误判。
- 渠道协同超时或仅返回受理结果时,不直接判定 `FAIL`,保持 `PENDING` 并等待回执或进入人工核查流程。
- 人工核查补记必须校验 `taskNo` 存在且 `manualVerifyNote` 非空;不满足条件时应拒绝补记并返回校验错误。
- 人工核查仅用于状态收口,不替代 `SYS-010` 的渠道执行职责,也不扩展停复水/工单内部流程控制。
### IF-REV-010 统计查询接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| themeCode | String | 是 | 统计主题编码 | 查询主题 |
| dateFrom | Date | 是 | 开始日期 | 时间维度 |
| dateTo | Date | 是 | 结束日期 | 时间维度 |
| billPeriod | String | 否 | 账期 | `biz_charge.bill_period` |
| deptId | Long | 否 | 营业所/部门 | `system_dept.id` |
| regionCode | String | 否 | 片区/区域编码 | 区域维度 |
| customerCategory | String | 否 | 客户类别 | 客户标签/分类 |
| channelCode | String | 否 | 收费/交易渠道 | `bk_payment_channel.channel_code` |
| accountId | Long | 否 | 账户标识 | `biz_account.id` |
| custId | Long | 否 | 客户标识 | `biz_cust.id` |
| statusSet | Array | 否 | 状态集合 | 账单/收费/抄表等状态筛选 |
| groupBy | Array | 否 | 分组维度集合 | 结果分组 |
| exportFlag | Boolean | 否 | 是否导出 | 导出控制 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| themeCode | String | 统计主题编码 | 查询主题 |
| themeName | String | 统计主题名称 | 主题定义 |
| dimensionSummary | Object | 查询维度摘要 | 查询条件 |
| indicatorList | Array | 指标结果集合 | 聚合结果 |
| indicatorList[].indicatorCode | String | 指标编码 | 指标定义 |
| indicatorList[].indicatorName | String | 指标名称 | 指标定义 |
| indicatorList[].indicatorValue | Decimal/String | 指标值 | 聚合结果 |
| indicatorList[].unit | String | 指标单位 | 指标定义 |
| groupRows | Array | 分组结果集合 | 维度分组结果 |
| exportAllowed | Boolean | 是否允许导出 | 权限结果 |
| msg | String | 处理说明 | 返回消息 |
#### 查询主题与口径约束
- 本接口至少支持营收汇总、收费与实收、欠费规模与账龄、客户结构、渠道交易、抄表完成率等主题查询。
- 应收金额、实收金额、欠费余额、账单数、客户数、交易笔数、渠道占比、完成率等指标必须按业务含义区分,不得混写。
- 当查询涉及历史只读口径时,历史数据仅作为补充来源或迁移核查辅助,不替代在线主数据统计结果。
- 权限边界必须同时作用于在线查询和导出动作;不允许越过现有数据权限返回全量统计结果。
### IF-REV-011 银行代收协同接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| batchNo | String | 是 | 代扣批次号 | `bk_withholding_batch.batch_no` |
| businessType | String | 是 | 业务类型:`WITHHOLDING`、`RECONCILE`、`SETTLEMENT` | 协同类型 |
| channelCode | String | 是 | 渠道编码 | `bk_payment_channel.channel_code` |
| billPeriod | String | 否 | 账期 | 批处理参数 |
| itemList | Array | 否 | 批次明细列表 | `bk_withholding_item` |
| itemList[].custId | Long | 是 | 客户 ID | `bk_withholding_item.cust_id` |
| itemList[].chargeId | Long | 是 | 账单 ID | `bk_withholding_item.charge_id` |
| itemList[].amount | Decimal | 是 | 扣款金额 | 业务金额 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| batchNo | String | 批次号 | `bk_withholding_batch.batch_no` |
| batchStatus | String | 批次状态:`CREATED`、`SENT`、`RETURNED`、`RECONCILED`、`SETTLED` | 批次状态 |
| successCount | Integer | 成功处理条数 | 汇总结果 |
| failCount | Integer | 失败条数 | 汇总结果 |
| reconcileStatus | String | 对账状态 | `bk_reconcile_batch.status` |
| settlementStatus | String | 结算状态 | `bk_settlement_batch.status` |
| diffList | Array | 差异清单摘要 | `bk_reconcile_diff` |
### IF-REV-012 业务参数配置接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| action | String | 是 | 动作:`QUERY`、`CREATE`、`UPDATE` | 配置动作 |
| configType | String | 是 | 配置类型:`PRICE`、`RULE`、`PAGE`、`NOTICE` | `biz_parameter_settings.config_type` |
| configCode | String | 否 | 配置编码 | `biz_parameter_settings.config_code` |
| configValue | String | 否 | 配置值或 JSON 内容 | `biz_parameter_settings.config_value` |
| deptId | Long | 否 | 生效单位 | 作用域参数 |
| effectiveDate | Date | 否 | 生效日期 | 生效控制 |
| operatorId | Long | 否 | 操作人 ID | 操作上下文 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| configId | Long | 配置主键 | `biz_parameter_settings.id` |
| configCode | String | 配置编码 | `biz_parameter_settings.config_code` |
| configVersion | String | 配置版本 | 版本信息 |
| effectScope | String | 生效范围 | 作用域结果 |
| effectStatus | String | 生效状态:`DRAFT`、`ACTIVE`、`EXPIRED` | 业务状态 |
| msg | String | 处理说明 | 返回消息 |
### IF-CS-001 账户绑定接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| action | String | 是 | 动作:`BIND`、`UNBIND`、`SET_DEFAULT` | 绑定动作 |
| channelType | String | 是 | 渠道类型:`WECHAT`、`ALIPAY`、`MINIAPP` | 渠道上下文 |
| channelUserId | String | 是 | 渠道用户标识,如 OpenId | 渠道上下文 |
| custId | Long | 是 | 客户 ID | `biz_cust.id` |
| accountId | Long | 否 | 账户 ID | `biz_account.id` |
| verifyCode | String | 否 | 验证码或身份校验码 | 安全校验 |
| defaultFlag | Boolean | 否 | 是否设为默认账户 | `biz_cust_app_binds.is_default` |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| bindId | Long | 绑定关系 ID | `biz_cust_app_binds.id` |
| bindStatus | String | 绑定状态:`BOUND`、`UNBOUND` | 业务状态 |
| defaultFlag | Boolean | 是否默认账户 | `biz_cust_app_binds.is_default` |
| custSummary | Object | 客户摘要信息 | `biz_cust` |
| msg | String | 处理说明 | 返回消息 |
### IF-CS-002 历史账单查询接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| custId | Long | 是 | 客户 ID | 客户上下文 |
| queryType | String | 是 | 查询类型:`BILL`、`PAYMENT`、`USAGE`、`ARREARS`、`INVOICE` | 查询控制 |
| billPeriod | String | 否 | 账期,如 `2026-03` | `biz_charge.bill_period` |
| chargeStatus | String | 否 | 账单状态筛选 | `biz_charge.status` |
| pageNo | Integer | 否 | 页码 | 分页参数 |
| pageSize | Integer | 否 | 每页数量 | 分页参数 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| total | Integer | 总记录数 | 分页结果 |
| list | Array | 查询结果列表 | 聚合结果 |
| list[].chargeId | Long | 账单 ID | `biz_charge.id` |
| list[].billPeriod | String | 账期 | `biz_charge.bill_period` |
| list[].usageAmount | Decimal | 用量 | `biz_reading_data.usage_amount` |
| list[].payStatus | String | 缴费状态 | 业务状态 |
| list[].invoiceStatus | String | 开票状态 | `biz_invoice.invoice_status` |
### IF-CS-004 电子发票消费接口
#### 查询/下载请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| custId | Long | 是 | 客户 ID | `biz_invoice.cust_id` |
| invoiceId | Long | 否 | 发票记录 ID,三选一优先键 | `biz_invoice.id` |
| applicationNo | String | 否 | 发票申请单号 | `biz_invoice.application_no` |
| sysRequestNo | String | 否 | `SYS-008` 受理号 | `biz_invoice.sys_request_no` |
#### 推送请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| custId | Long | 是 | 客户 ID | `biz_invoice.cust_id` |
| invoiceId | Long | 是 | 发票记录 ID | `biz_invoice.id` |
| applicationNo | String | 否 | 发票申请单号 | `biz_invoice.application_no` |
| pushChannel | String | 是 | 推送方式:`EMAIL`、`SMS` | 推送动作 |
| pushEmail | String | 否 | 推送邮箱,`EMAIL` 时优先使用 | 目标地址 |
| pushMobile | String | 否 | 推送手机号,`SMS` 时优先使用 | 目标地址 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| invoiceId | Long | 发票记录 ID | `biz_invoice.id` |
| applicationNo | String | 发票申请单号 | `biz_invoice.application_no` |
| invoiceStatus | String | 当前状态 | `biz_invoice.invoice_status` |
| invoiceCode | String | 发票代码 | `biz_invoice.invoice_code` |
| invoiceNumber | String | 发票号码 | `biz_invoice.invoice_number` |
| fileUrl | String | 发票下载地址 | `biz_invoice.file_url` |
| pushStatus | String | 推送状态:`NONE`、`PUSHED`、`FAIL` | `biz_invoice.push_status` |
| chargeBindStatus | String | 账单关联状态:`UNBOUND`、`BOUND` | `biz_invoice.charge_bind_status` |
| msg | String | 处理说明 | 返回消息 |
#### 客户侧消费约束
- 客户侧仅允许访问本人 `custId` 名下发票记录,`invoiceId`、`applicationNo`、`sysRequestNo` 任一定位成功后仍需再次校验客户归属。
- 下载与推送前必须校验 `invoiceStatus=SUCCESS` 且 `fileUrl` 非空;已作废、已红冲或缺少电子票地址的记录一律返回不可消费原因。
- 推送成功后回写 `pushStatus=PUSHED`;失败则更新为 `FAIL` 并记录失败原因。
- 客户侧只消费已形成有效电子票结果的记录,不暴露后台作废、红冲入口,也不直接展示后处理请求参数。
### IF-CS-003 在线支付下单接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| custId | Long | 是 | 客户 ID | 客户上下文 |
| chargeIds | Array | 是 | 待支付账单 ID 列表 | `biz_charge.id` |
| paymentChannel | String | 是 | 支付渠道:`WECHAT`、`ALIPAY` | 渠道参数 |
| paymentAmount | Decimal | 是 | 支付金额 | `bk_transaction.trade_amount` |
| openId | String | 否 | 微信渠道用户标识 | 微信场景 |
| returnUrl | String | 否 | 前端完成跳转地址 | 前端场景 |
| notifyUrl | String | 否 | 支付结果通知地址 | 回调地址 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| bizOrderNo | String | SYS-002 业务订单号 | `biz_collection.code` / 业务单号 |
| tradeNo | String | 渠道交易流水号 | `bk_transaction.trade_no` |
| orderStatus | String | 订单状态:`INIT`、`PAYING`、`SUCCESS`、`FAIL` | 交易状态 |
| payUrl | String | 支付链接或二维码地址 | 渠道返回 |
| prepayInfo | Object | 预支付参数对象 | 渠道返回 |
| expireTime | Datetime | 订单失效时间 | 交易参数 |
### IF-CS-006 业务办理进度接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| processId | Long | 否 | 办理流程 ID,查询场景使用 | `biz_process.id` |
| businessTypeCode | String | 否 | 业务类型编码,如更名、过户、低保、换表 | `biz_business_types.code` |
| custId | Long | 否 | 客户 ID | 客户上下文 |
| applyData | Object | 否 | 业务申请主体数据 | `biz_business_datas` |
| attachmentList | Array | 否 | 附件文件标识列表 | `biz_content_attach` |
| action | String | 否 | 动作:`CREATE`、`QUERY`、`SUPPLEMENT` | 流程动作 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| processId | Long | 办理流程 ID | `biz_process.id` |
| processCode | String | 流程编号 | `biz_process.code` |
| processStatus | String | 当前状态:`INIT`、`ACCEPTED`、`PROCESSING`、`DONE`、`REJECTED` | `biz_process.status` |
| currentNode | String | 当前办理节点 | 流程状态 |
| transferList | Array | 流转轨迹 | `biz_process_transfer` |
| attachmentRequired | Boolean | 是否需要补件 | 业务判断 |
| msg | String | 办理说明 | 返回消息 |
### IF-CS-007 柜面扫码支付接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| counterCode | String | 是 | 柜台编号 | 柜面终端 |
| chargeIds | Array | 是 | 待支付账单 ID 列表 | `biz_charge.id` |
| paymentChannel | String | 是 | 支付渠道:`WECHAT`、`ALIPAY` | 渠道参数 |
| orderAmount | Decimal | 是 | 订单金额 | `bk_transaction.trade_amount` |
| operatorId | Long | 是 | 柜台操作员 ID | 操作上下文 |
| scene | String | 否 | 场景标识,默认 `COUNTER_SCAN_PAY` | 场景参数 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| bizOrderNo | String | 柜面业务订单号 | `biz_collection.code` |
| tradeNo | String | 渠道交易流水号 | `bk_transaction.trade_no` |
| qrCode | String | 柜面展示二维码内容 | 渠道返回 |
| orderStatus | String | 当前订单状态:`INIT`、`PAYING`、`SUCCESS`、`FAIL` | 交易状态 |
| writeBackStatus | String | 营收状态回写结果 | 业务状态 |
| msg | String | 处理说明 | 返回消息 |
### IF-METER-001 水表档案查询接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源 |
|------|------|------|------|----------|
| id | Long | 否 | 水表主键 ID,与 `code` 二选一 | `biz_meter.id` |
| code | String | 否 | 水表编号,与 `id` 二选一 | `biz_meter.code` |
| queryType | String | 否 | 查询类型:`base`、`status`、`lifeCycle`、`all` | 查询控制参数 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| id | Long | 水表主键 ID | `biz_meter.id` |
| code | String | 水表编号 | `biz_meter.code` |
| meterStatus | String | 水表状态 | `biz_meter.status` |
| modelCode | String | 型号编码 | `biz_meter.model_code` |
| caliberCode | String | 口径编码 | `biz_meter.caliber_code` |
| rangeCode | String | 量程编码 | `biz_meter.range_code` |
| installAddress | String | 安装地址 | `biz_meter.install_address` |
| lastReading | Decimal | 最近有效读数 | `biz_last_reading.last_reading` |
### IF-METER-003 库存出入库接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| action | String | 是 | 动作:`IN`、`OUT`、`RETURN`、`SCRAP` | 库存动作 |
| batchNo | String | 是 | 批次号 | `biz_meter_in_out.batch_no` |
| warehouseCode | String | 否 | 仓库编码 | 仓储参数 |
| meterIds | Array | 是 | 水表 ID 列表 | `biz_meter.id` |
| remark | String | 否 | 出入库说明 | `biz_meter_in_out.remark` |
| operatorId | Long | 是 | 操作人 ID | 操作上下文 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| inOutId | Long | 出入库主记录 ID | `biz_meter_in_out.id` |
| batchNo | String | 批次号 | `biz_meter_in_out.batch_no` |
| actionStatus | String | 处理状态:`SUCCESS`、`PARTIAL`、`FAIL` | 业务状态 |
| successCount | Integer | 成功处理数量 | 汇总结果 |
| failCount | Integer | 失败数量 | 汇总结果 |
| msg | String | 处理说明 | 返回消息 |
### IF-METER-004 集抄数据接收接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| meterCode | String | 是 | 水表编号 | `biz_meter.code` |
| readTime | Datetime | 是 | 采集时间 | `biz_reading_data.read_time` |
| currentReading | Decimal | 是 | 当前读数 | `biz_reading_data.current_reading` |
| deviceStatus | String | 否 | 设备状态:`ONLINE`、`OFFLINE`、`ALARM` | 设备状态 |
| alarmList | Array | 否 | 告警编码列表 | 告警结果 |
| fileSerialNo | String | 否 | 上送批次或文件序列号 | 幂等辅助键 |
| sourceSystem | String | 是 | 来源系统:`IOT`、`MDC` | 来源标识 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| readingId | Long | 读数记录 ID | `biz_reading_data.id` |
| meterReadId | Long | 对应抄表任务 ID | `biz_meter_read.id` |
| acceptStatus | String | 接收状态:`SUCCESS`、`WARN`、`REJECT` | 处理状态 |
| abnormalFlag | Boolean | 是否异常 | 过程判断 |
| nextAction | String | 后续动作:`BILLING`、`RECHECK`、`MANUAL_REVIEW` | 流程控制 |
| msg | String | 处理说明 | 返回消息 |
### IF-INST-001 报装申请提交接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| applyType | String | 是 | 报装类型:`NEW`、`REBUILD`、`ONE_METER_ONE_HOME` | 业务类型 |
| applicantName | String | 是 | 申请人姓名 | 申请资料 |
| mobile | String | 是 | 联系手机号 | 申请资料 |
| address | String | 是 | 申请地址 | 申请资料 |
| waterUseType | String | 是 | 用水性质 | 业务字典 |
| sourceChannel | String | 是 | 来源渠道:`COUNTER`、`MINIAPP`、`GOV` | 来源标识 |
| attachmentList | Array | 否 | 申请附件列表 | `biz_content_attach` |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| processId | Long | 流程实例 ID | `biz_process.id` |
| processCode | String | 报装流程编号 | `biz_process.code` |
| processStatus | String | 当前状态:`INIT`、`ACCEPTED`、`SURVEYING` | `biz_process.process_status` |
| acceptStatus | String | 受理结果 | 业务状态 |
| msg | String | 处理说明 | 返回消息 |
### IF-INST-002 踏勘结果回填接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| processId | Long | 是 | 报装流程 ID | `biz_process.id` |
| schemeVersion | String | 是 | 方案版本号 | `biz_business_datas` |
| surveyResult | String | 是 | 踏勘结论 | `biz_business_datas` |
| estimateAmount | Decimal | 否 | 预估费用 | `biz_business_datas` |
| attachmentList | Array | 否 | 现场照片与方案附件 | `biz_content_attach` |
| auditResult | String | 否 | 审核结果:`PASS`、`REJECT` | 审核结果 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| transferId | Long | 流转记录 ID | `biz_process_transfer.id` |
| processStatus | String | 当前流程状态 | `biz_process.process_status` |
| nextNode | String | 下一节点 | 流程控制 |
| msg | String | 处理说明 | 返回消息 |
### IF-INST-004 签章回执接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| contractId | Long | 是 | 合同 ID | `installation_contract.id` |
| requestNo | String | 是 | 签章请求号 | 协同流水 |
| signStatus | String | 是 | 签章状态:`SUCCESS`、`FAIL`、`CANCEL` | `installation_signature.signature_status` |
| signerId | String | 否 | 签署人标识 | `installation_signature.signer_id` |
| signatureTime | Datetime | 否 | 签章时间 | `installation_signature.signature_time` |
| evidenceNo | String | 否 | 存证编号 | `installation_evidence.evidence_no` |
| fileUrl | String | 否 | 已签文件地址 | 结果回写 |
| hashValue | String | 否 | 存证哈希 | `installation_evidence.hash_value` |
| resultMsg | String | 否 | 结果说明 | 返回消息 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| signatureId | Long | 签章记录 ID | `installation_signature.id` |
| evidenceId | Long | 存证记录 ID | `installation_evidence.id` |
| writeBackStatus | String | 回写状态:`SUCCESS`、`IGNORE_REPEAT`、`FAIL` | 业务状态 |
| msg | String | 处理说明 | 返回消息 |
### IF-INST-005 报装归档接口
#### 请求参数
| 字段 | 类型 | 必填 | 说明 | 主要来源/去向 |
|------|------|------|------|---------------|
| processId | Long | 是 | 报装流程 ID | `biz_process.id` |
| archiveType | String | 是 | 归档类型:`APPLY`、`ACCEPT`、`CHECK`、`CONTRACT`、`FINISH` | 归档分类 |
| attachmentList | Array | 是 | 归档附件列表 | `biz_content_attach` |
| contractId | Long | 否 | 合同 ID | `installation_contract.id` |
| evidenceId | Long | 否 | 存证记录 ID | `installation_evidence.id` |
| operatorId | Long | 否 | 归档操作人 | 操作上下文 |
#### 响应参数
| 字段 | 类型 | 说明 | 主要来源 |
|------|------|------|----------|
| archiveBatchNo | String | 归档批次号 | 业务流水 |
| archiveStatus | String | 归档状态:`SUCCESS`、`PARTIAL`、`FAIL` | 业务状态 |
| archiveCount | Integer | 已归档文件数量 | 汇总结果 |
| msg | String | 处理说明 | 返回消息 |
## 关键接口时序图
> 说明:以下时序图用于说明 SYS-002 与客户渠道、外部协同子系统之间的交互边界,重点体现业务校验、协同调用、结果回写与状态更新链路。
### 1. 在线支付下单与回调时序
```mermaid
sequenceDiagram
autonumber
participant Client as 客户渠道
participant SYS002 as SYS-002营收系统
participant SYS009 as SYS-009支付结算
participant Channel as 支付渠道
Client->>SYS002: 提交缴费下单请求(IF-CS-003)
SYS002->>SYS002: 校验客户、账单状态与应付金额
SYS002->>SYS002: 生成业务订单与收费记录草稿
SYS002->>SYS009: 发起支付下单协同(IF-EXT-004)
SYS009->>Channel: 调用微信/支付宝统一下单
Channel-->>SYS009: 返回tradeNo、payUrl/prepayInfo
SYS009-->>SYS002: 返回交易流水与支付参数
SYS002-->>Client: 返回bizOrderNo、payUrl、expireTime
Channel-->>SYS009: 异步支付结果通知
SYS009->>SYS009: 校验签名与交易状态
SYS009->>SYS002: 回写支付结果(IF-EXT-005)
SYS002->>SYS002: 幂等校验并更新biz_collection/biz_charge
SYS002-->>Client: 查询订单时返回最新支付状态
```
### 2. 电子发票申请、查询补偿与回写时序
```mermaid
sequenceDiagram
autonumber
participant Counter as 柜台或客户渠道
participant SYS002 as SYS-002营收系统
participant SYS008 as SYS-008发票服务
participant Tax as 税控/开票平台
participant Job as 查询补偿任务
Counter->>SYS002: 提交发票申请(IF-REV-008/IF-CS-004)
SYS002->>SYS002: 校验客户、账单、开票抬头与金额
SYS002->>SYS002: 生成发票申请记录biz_invoice(SUBMITTED)
SYS002->>SYS008: 发起开票协同(IF-EXT-006)
SYS008->>Tax: 调用税控或电子发票平台
Tax-->>SYS008: 返回受理结果/票号/文件地址
SYS008-->>SYS002: 返回受理号或异步结果
SYS002->>SYS002: 记录sysRequestNo并更新为PENDING
alt 发票服务主动回写
SYS008-->>SYS002: 回写开票结果(IF-EXT-007)
SYS002->>SYS002: 更新biz_invoice状态、票据地址与账单关联
else 未收到终态结果
Job->>SYS002: 触发补偿查询(IF-REV-009)
SYS002->>SYS008: 按申请单号/受理号查询结果
SYS008-->>SYS002: 返回处理中/成功/失败
SYS002->>SYS002: 刷新查询上下文并按终态规则落账
end
SYS002-->>Counter: 返回申请结果或供后续查询
```
### 3. 银行代扣批次与回盘时序
```mermaid
sequenceDiagram
autonumber
participant BatchJob as 代扣批处理任务
participant SYS002 as SYS-002营收系统
participant SYS009 as SYS-009支付结算
participant Bank as 银行渠道
BatchJob->>SYS002: 发起代扣批次处理(IF-REV-011)
SYS002->>SYS002: 汇总代扣客户、账单与协议关系
SYS002->>SYS002: 生成bk_withholding_batch/bk_withholding_item
SYS002->>SYS002: 解析 send/back/reconcile 目录并固化协议、目录、文件路径
SYS002->>SYS009: 下发银行代扣批次(IF-EXT-001)
SYS009->>Bank: 发送代扣文件或报文
Bank-->>SYS009: 返回受理结果
SYS009-->>SYS002: 回写批次发送状态
Bank-->>SYS009: 回盘文件/结果通知(IF-EXT-002)
SYS009->>SYS009: 解析成功、失败、异常明细
SYS009->>SYS002: 回写代扣结果、差异与结算状态
SYS002->>SYS002: 更新biz_withholding、账单核销、对账结算状态
SYS002-->>BatchJob: 返回批次处理汇总结果
```
### 4. 催缴通知下发与结果回写时序
```mermaid
sequenceDiagram
autonumber
participant Job as 催缴任务
participant SYS002 as SYS-002营收系统
participant SYS010 as SYS-010消息服务
participant User as 客户
Job->>SYS002: 触发催缴任务(IF-REV-013)
SYS002->>SYS002: 按欠费账单、渠道偏好生成催缴名单
SYS002->>SYS010: 提交通知下发请求(IF-EXT-008)
SYS010->>User: 发送短信/公众号/APP消息
User-->>SYS010: 触达回执或阅读反馈
SYS010-->>SYS002: 回写发送结果与触达状态
SYS002->>SYS002: 更新催缴记录、四态状态与后续策略
SYS002-->>Job: 返回催缴任务执行结果
```
## 数据对象与表口径
### SYS-002 接口核心数据对象
| 数据域 | 代表表 | 接口说明 |
|--------|--------|----------|
| 客户与账户 | `biz_cust`、`biz_account`、`biz_cust_contact` | 用于客户查询、账户绑定、资料维护 |
| 客户扩展关系 | `biz_cust_meter`、`biz_cust_invoice`、`biz_cust_app_binds`、`biz_cust_collection_rel`、`biz_cust_withholding_rel` | 用于客户关联对象查询与服务协同 |
| 抄表与开账 | `biz_meter_book`、`biz_meter_read`、`biz_reading_data`、`biz_last_reading`、`biz_charge`、`biz_charge_detail` | 用于抄表任务、账单生成、费用明细查询 |
| 价格与参数 | `biz_price_*`、`biz_cost_component`、`biz_parameter_settings`、`biz_page_settings*` | 用于价格模板、业务参数、页面配置 |
| 收费与票据 | `biz_collection`、`biz_withholding`、`biz_invoice`、`biz_invoice_taxrate` | 用于收费、代扣、发票申请与回写 |
| 办理与资料 | `biz_process*`、`biz_business_datas`、`biz_content*` | 用于业务办理与进度跟踪 |
| 银行代收与结算 | `bk_transaction*`、`bk_withholding_*`、`bk_reconcile_*`、`bk_settlement_batch` | 用于支付流水、批次、回调、对账和结算 |
### 口径约束说明
1. 不再使用旧稿中的 `customer_*`、`water_*`、`billing_*`、`thirdpay_*`、`service_*` 作为 SYS-002 正式接口数据口径。
2. 若历史资料中仍存在旧命名,仅作为来源参考,不作为正式交付口径。
3. 对 backend 中尚未明确存在独立实体表的对象,例如部分精细账务台账、红冲明细、价差调整明细等,本文仅描述为业务处理场景,不强写为既有独立接口对象。
## 跨系统报文映射表
> 说明:以下映射表用于说明 SYS-002 与 `SYS-008`、`SYS-009`、`SYS-010` 之间的关键报文字段对应关系,重点体现业务主键、状态字段、金额字段与结果回写字段,不展开各外部平台私有扩展字段。
### 1. SYS-002 ↔ SYS-009 支付下单与结果回写映射
| 协同场景 | SYS-002 字段 | SYS-009/渠道字段 | 说明 | 主要来源 |
|---------|--------------|------------------|------|----------|
| 支付下单 | `bizOrderNo` | `businessOrderNo` | SYS-002 业务订单号,作为支付协同主键 | `biz_collection.code` |
| 支付下单 | `chargeIds[]` | `orderItems[].sourceId` | 待缴账单明细标识 | `biz_charge.id` |
| 支付下单 | `custId` | `buyer.customerId` | 客户标识 | `biz_charge.cust_id` / `biz_cust.id` |
| 支付下单 | `paymentAmount` | `tradeAmount` | 交易总金额 | `bk_transaction.trade_amount` |
| 支付下单 | `paymentChannel` | `channelCode` | 支付渠道编码 | 渠道参数 / `bk_payment_channel.channel_code` |
| 支付下单 | `notifyUrl` | `notifyUrl` | 支付结果异步通知地址 | 协同参数 |
| 下单返回 | `tradeNo` | `tradeNo` | 渠道交易流水号 | `bk_transaction.trade_no` |
| 下单返回 | `payUrl`/`prepayInfo` | `payUrl`/`payParams` | 二维码链接或预支付参数 | 渠道返回 |
| 结果回写 | `orderStatus` | `tradeStatus` | 交易状态映射:`INIT/PAYING/SUCCESS/FAIL` | `bk_transaction.status` |
| 结果回写 | `paidAmount` | `successAmount` | 实际支付成功金额 | `biz_collection.amount` / 渠道结果 |
| 结果回写 | `callbackTime` | `notifyTime` | 回调时间 | `bk_transaction_callback.create_time` |
| 结果回写 | `writeOffStatus` | `writeBackStatus` | SYS-002 核销处理结果 | 业务状态 |
### 2. SYS-002 ↔ SYS-008 发票申请与结果回写映射
| 协同场景 | SYS-002 字段 | SYS-008 字段 | 说明 | 主要来源 |
|---------|--------------|--------------|------|----------|
| 发票申请 | `invoiceCode` | `requestNo` | 发票申请单号 / 协同请求号 | `biz_invoice.code` |
| 发票申请 | `custId` | `customerId` | 客户标识 | `biz_invoice.cust_id` |
| 发票申请 | `chargeIds[]` | `billList[].sourceBillId` | 开票关联账单标识 | 业务单据关联 |
| 发票申请 | `invoiceTitle` | `buyerName` | 购方名称 / 抬头 | `biz_cust_invoice.invoice_title` |
| 发票申请 | `taxNo` | `buyerTaxNo` | 购方税号 | `biz_cust_invoice.tax_no` |
| 发票申请 | `invoiceType` | `invoiceType` | 电子/纸质发票类型 | `biz_invoice.invoice_type` |
| 发票申请 | `taxRateCode` | `taxRateCode` | 税率编码 | `biz_invoice_taxrate.tax_code` |
| 发票申请 | `email` / `mobile` | `receiver.email` / `receiver.mobile` | 票据接收信息 | `biz_cust_invoice.email` / `biz_cust_invoice.mobile` |
| 结果回写 | `invoiceStatus` | `invoiceStatus` | 开票状态:受理中、成功、失败、作废、红冲等 | `biz_invoice.invoice_status` |
| 结果回写 | `invoiceNo` | `invoiceNo` | 发票号码 | 开票结果 |
| 结果回写 | `fileUrl` | `fileUrl` | 发票文件下载地址 | 回写结果 |
| 结果回写 | `msg` | `resultMsg` | 结果说明 | 返回消息 |
### 3. SYS-002 ↔ SYS-009 银行代扣、对账、结算映射
| 协同场景 | SYS-002 字段 | SYS-009/银行字段 | 说明 | 主要来源 |
|---------|--------------|------------------|------|----------|
| 批次下发 | `batchNo` | `batchNo` | 代扣批次号 | `bk_withholding_batch.batch_no` |
| 批次下发 | `businessType` | `businessType` | 代扣/对账/结算类型 | 协同参数 |
| 批次下发 | `channelCode` | `channelCode` | 渠道编码 | `bk_payment_channel.channel_code` |
| 批次下发 | `protocol` | `protocol` | `SFTP/FTP` 传输协议 | 统一解析结果 |
| 批次下发 | `sendDir` / `sendFilePath` | `sendDir` / `sendFilePath` | 送盘目录与文件路径 | `bk_withholding_batch` |
| 批次下发 | `billPeriod` | `billPeriod` | 账期 | 批处理参数 |
| 批次明细 | `itemList[].custId` | `itemList[].customerId` | 客户标识 | `bk_withholding_item.cust_id` |
| 批次明细 | `itemList[].chargeId` | `itemList[].sourceBillId` | 账单标识 | `bk_withholding_item.charge_id` |
| 批次明细 | `itemList[].amount` | `itemList[].withholdingAmount` | 代扣金额 | 业务金额 |
| 回盘回写 | `batchStatus` | `batchStatus` | 批次状态:已发送、已回盘等 | `bk_withholding_batch.status` |
| 回盘回写 | `backProtocol` / `backDir` / `backFilePath` | `backProtocol` / `backDir` / `backFilePath` | 回盘阶段最终解析结果 | `bk_withholding_batch` |
| 回盘回写 | `successCount` / `failCount` | `successCount` / `failCount` | 成功失败数量汇总 | 汇总结果 |
| 对账回写 | `protocol` / `dir` / `filePath` | `protocol` / `dir` / `filePath` | 对账文件最终解析结果 | `bk_reconcile_batch` |
| 对账回写 | `reconcileStatus` | `reconcileStatus` | 对账状态 | `bk_reconcile_batch.status` |
| 对账回写 | `diffList[]` | `diffList[]` | 差异明细摘要 | `bk_reconcile_diff` |
| 结算回写 | `settlementStatus` | `settlementStatus` | 结算状态 | `bk_settlement_batch.status` |
### 4. SYS-002 ↔ SYS-010 催缴与业务通知映射
| 协同场景 | SYS-002 字段 | SYS-010 字段 | 说明 | 主要来源 |
|---------|--------------|--------------|------|----------|
| 催缴通知 | `messageBizNo` | `eventNo` | 消息事件编号 | 业务事件编号 |
| 催缴通知 | `custId` | `receiver.customerId` | 接收客户标识 | `biz_charge.cust_id` / `biz_process.cust_id` |
| 催缴通知 | `mobile` | `receiver.mobile` | 接收手机号 | 客户联系方式 |
| 催缴通知 | `templateCode` | `templateCode` | 消息模板编码 | 模板参数 |
| 催缴通知 | `arrearsAmount` | `payload.arrearsAmount` | 欠费金额 | `biz_charge.total_amount` / 汇总结果 |
| 催缴通知 | `billPeriod` | `payload.billPeriod` | 账期 | `biz_charge.bill_period` |
| 催缴通知 | `strategyCode` | `payload.strategyCode` | 命中的催缴策略编码 | 任务分组结果 |
| 催缴通知 | `triggerType` | `payload.triggerType` | 自动/人工触发方式 | 任务触发上下文 |
| 办理进度通知 | `processCode` | `payload.processCode` | 业务办理单号 | `biz_process.code` |
| 办理进度通知 | `processStatus` | `payload.processStatus` | 办理状态 | `biz_process.status` |
| 发送结果回写 | `status` | `sendStatus` | 渠道回执由 `SYS-002` 统一映射为 `PENDING/SUCCESS/FAIL/MANUAL_VERIFIED` 四态 | 消息结果 |
| 发送结果回写 | `reachStatus` | `reachStatus` | 触达/阅读状态 | 渠道回执 |
| 发送结果回写 | `sendTime` | `sendTime` | 发送时间 | 消息结果 |
| 发送结果回写 | `msg` | `resultMsg` | 结果说明 | 返回消息 |
## 接口安全与异常处理
### 认证与鉴权
- 管理后台接口:统一采用登录态 + 权限控制 + 数据权限。
- 客户渠道接口:采用账户绑定态、手机号/验证码、OAuth 或渠道令牌机制。
- 外部协同接口:按渠道要求使用 API Key、时间戳、数字签名、证书或国密算法。
### 安全控制要求
- 全部接口统一走 HTTPS。
- 外部回调接口必须执行签名校验、重复通知幂等处理与来源校验。
- 关键交易类接口需记录业务流水、渠道流水和操作日志。
- 敏感字段如证件号、手机号、银行账号按制度要求脱敏展示。
### 错误码分层建议
| 错误码段 | 说明 |
|---------|------|
| 0 | 成功 |
| 400~499 | 请求参数、权限、资源不存在等通用错误 |
| 1_002_001_xxx | 客户主数据类错误 |
| 1_002_002_xxx | 抄表开账类错误 |
| 1_002_003_xxx | 收费与核销类错误 |
| 1_002_004_xxx | 账务处理类错误 |
| 1_002_005_xxx | 发票协同类错误 |
| 1_002_006_xxx | 银行代收与结算类错误 |
| 1_002_007_xxx | 客户渠道与业务办理类错误 |
| 1_002_008_xxx | 消息通知与触达类错误 |
### 典型错误码建议
| 错误码 | 适用接口/场景 | 说明 | 处理建议 |
|-------|---------------|------|----------|
| `1_002_001_001` | IF-REV-001 / IF-REV-002 | 客户不存在或已停用 | 返回客户状态并阻断后续处理 |
| `1_002_001_002` | IF-CS-001 | 账户绑定关系不存在 | 引导重新绑定客户 |
| `1_002_002_001` | IF-REV-004 | 抄表任务不存在或已关闭 | 禁止提交抄表数据 |
| `1_002_002_002` | IF-REV-004 | 本次读数小于上次读数且未通过异常审批 | 标记异常并进入复核 |
| `1_002_002_003` | IF-REV-005 | 价格模板或费用组成缺失 | 阻断账单生成并提示补齐配置 |
| `1_002_003_001` | IF-REV-006 / IF-CS-003 / IF-CS-007 | 账单已核销或不允许重复支付 | 返回当前账单支付状态 |
| `1_002_003_002` | IF-REV-006 | 支付金额与待核销金额不一致 | 阻断核销并返回差额 |
| `1_002_003_003` | IF-EXT-005 | 支付回调签名校验失败 | 记录异常回调并拒绝入账 |
| `1_002_004_001` | IF-REV-007 | 账务调整目标状态不允许变更 | 返回当前账务状态 |
| `1_002_005_001` | IF-REV-008 / IF-CS-004 | 发票申请单据不满足开票条件 | 返回不可开票原因 |
| `1_002_005_002` | IF-EXT-007 | 发票结果回写状态非法或重复 | 按请求号执行幂等回写 |
| `1_002_006_001` | IF-REV-011 / IF-EXT-001 | 代扣批次不存在或已发送 | 禁止重复下发批次 |
| `1_002_006_002` | IF-EXT-002 | 银行回盘文件格式非法或批次号不匹配 | 记录异常并进入人工核查 |
| `1_002_006_003` | IF-REV-011 | 对账差异未处理,禁止结算确认 | 需先完成差异处置 |
| `1_002_007_001` | IF-CS-006 | 业务办理单不存在 | 返回空结果并提示核对单号 |
| `1_002_007_002` | IF-CS-006 | 当前节点不允许补件或重复提交 | 返回当前流程节点状态 |
| `1_002_008_001` | IF-REV-013 / IF-EXT-008 | 消息模板不存在或目标联系方式缺失 | 记录失败原因并允许后续补发 |
| `1_002_008_002` | IF-EXT-008 | 消息通道调用超时 | 标记待重试,不直接判定业务失败 |
| `1_002_008_003` | IF-REV-013 | 人工核查补记缺少核查说明或关联任务不存在 | 拒绝补记并提示补齐核查上下文 |
### 幂等与状态冲突控制
#### 幂等键建议
| 场景 | 接口 | 建议幂等键 | 幂等判定说明 |
|------|------|------------|--------------|
| 支付下单 | IF-CS-003 / IF-CS-007 | `bizOrderNo` 或 `custId + chargeIds + paymentChannel` | 相同业务订单仅允许创建一次有效支付单 |
| 支付回调 | IF-EXT-005 | `tradeNo + tradeStatus + notifyTime` | 同一交易成功回调只允许入账一次 |
| 发票申请 | IF-REV-008 / IF-CS-004 | `invoiceCode` 或 `custId + chargeIds` | 相同账单组合避免重复申请开票 |
| 发票结果回写 | IF-EXT-007 | `requestNo + invoiceStatus` | 相同发票状态重复回写仅更新回执日志 |
| 银行批次下发 | IF-REV-011 / IF-EXT-001 | `batchNo` | 同一代扣批次禁止重复发送 |
| 银行回盘接收 | IF-EXT-002 | `batchNo + fileSerialNo` | 同一回盘文件只处理一次 |
| 催缴通知 | IF-REV-013 / IF-EXT-008 | `messageBizNo + templateCode + receiver` | 同一业务事件与同一接收方避免重复发送 |
| 业务补件 | IF-CS-006 | `processId + action + attachmentDigest` | 相同补件内容重复提交仅保留一次 |
#### 状态冲突处理原则
| 场景 | 冲突条件 | 处理原则 |
|------|----------|----------|
| 支付核销 | 账单已完成核销后再次支付 | 拒绝重复核销,返回现有 `writeOffStatus` |
| 支付回调 | 先收到失败回调,后收到成功回调 | 以最终成功状态为准,但全过程保留回调日志 |
| 发票申请 | 单据已开票成功后再次申请 | 拒绝重复申请,返回既有发票信息 |
| 发票回写 | 已成功开票后收到失败回写 | 不覆盖成功状态,转入异常核查 |
| 银行代扣 | 批次已发送后再次下发 | 拒绝重复发送,保留原批次状态 |
| 对账结算 | 差异未消除即发起结算 | 禁止结算,提示先处理差异明细 |
| 催缴通知 | 同一账期、同一模板短时间内重复催缴 | 按通知频控策略拦截重复下发 |
| 业务办理 | 流程已办结后再次补件 | 拒绝补件,返回当前流程终态 |
### 异常处理要求
- 参数校验失败:直接返回明确字段错误信息。
- 外部渠道超时:记录重试状态,不直接覆盖业务成功状态。
- 重复回调:按业务流水执行幂等控制。
- 账务状态冲突:返回当前账单状态与冲突原因,禁止重复核销。
- 外部结果晚到:允许按幂等键补写回执,但不得回退已确认成功状态。
- 人工兜底场景:支付异常、银行回盘异常、发票状态冲突等需保留人工复核入口与操作日志。
## 历史查询与迁移校验接口口径
### 设计原则
- 历史查询接口一律只读,不承担迁移修正、补写或状态变更职责。
- 不为迁移场景发明新的独立接口编号体系,统一挂靠既有 `IF-REV-*`、`IF-CS-*`、`IF-METER-*` 接口族扩展查询能力。
- 对 backend 当前未识别到独立实体表的旧细粒度对象,仅要求接口返回“历史摘要 + 原始标识 + 状态映射”,不强行承诺独立在线业务对象。
- 迁移验收接口必须同时支持“汇总对账”和“明细追溯”两类能力,避免只能看总数、无法定位差异。
### 最小历史查询保留集
| 查询主题 | 挂靠接口族 | 主要数据来源 | 最低返回要求 | 说明 |
|---------|------------|--------------|--------------|------|
| 历史账单、特殊开账 | `IF-CS-002`、`IF-REV-005` | `biz_charge*` + 历史账单来源 | 原账单号、新账单号、客户号、账期、金额、状态、来源类型 | 支撑账单迁移核查与客户侧历史查询 |
| 缴费记录、柜台结账、实时收费 | `IF-CS-002`、`IF-REV-006`、`IF-REV-011` | `biz_collection`、`bk_transaction*` + 历史收费记录 | 原流水号、渠道、实收金额、收费时间、柜员/营业所、核销状态 | 支撑渠道对账、柜面核查和历史收据核对 |
| 红冲与账务调整 | `IF-REV-007` | 操作留痕、流程结果 + 历史调整台账 | 调整类型、关联原单号、调整金额、原因、审批状态、处理时间 | 支撑预存退款、已销调整、价差调整、分账调整、呆坏账查询 |
| 发票与开票关系 | `IF-REV-008`、`IF-CS-004` | `biz_invoice*` + 历史开票关系快照 | 发票号、申请单号、关联账单、票据状态、票据类型、文件地址 | 支撑发票结果核查与历史补打定位 |
| 催缴、停复水、预存短信 | `IF-REV-013`、`IF-METER-002` | 通知结果、流程工单 + 历史催缴记录 | 客户号、账期、催缴方式、消息状态、停复水状态、执行人、执行时间、处置引用 | 支撑催缴处置闭环核查 |
| 业务进度与电子档案 | `IF-CS-006` | `biz_process*`、`biz_content*` + 历史附件目录 | 业务单号、节点状态、处理轨迹、附件数量、附件元数据 | 支撑微网厅与柜台办理进度、电子档案查询 |
| 水表生命周期、检定与库存流转 | `IF-METER-001`、`IF-METER-003` | `biz_meter*` + 历史仓储/检定单据 | 表号、当前状态、单据类型、仓库、检定结论、证书编号、时间 | 支撑表务迁移核查与历史作业追溯 |
| 页面参数、业务字段、微信配置 | `IF-REV-012`、`IF-CS-006` | `biz_parameter_settings`、`biz_page_settings*`、`sys_wechat_app_settings` | 参数编码、原值、新值、启用状态、生效时间、适用渠道 | 支撑微网厅后台配置迁移核查 |
### 迁移验收对账接口要求
| 验收场景 | 推荐挂靠接口 | 最低查询维度 | 输出要求 |
|---------|--------------|--------------|----------|
| 开账迁移核对 | `IF-REV-005`、`IF-CS-002` | 账期、营业所、客户类型、账单状态 | 同时提供汇总金额/笔数与可追溯明细清单 |
| 收费迁移核对 | `IF-REV-006`、`IF-REV-011`、`IF-CS-002` | 日期、渠道、营业所、收费状态 | 同时提供实收金额、流水数量和异常流水列表 |
| 发票迁移核对 | `IF-REV-008`、`IF-CS-004` | 开票日期、票据类型、开票状态 | 同时提供开票汇总、失败原因和票据明细定位 |
| 催缴与停复水核对 | `IF-REV-013`、`IF-METER-002` | 账期、催缴方式、执行状态、处理人 | 同时提供任务统计、执行明细与处置引用 |
| 业务办理与档案核对 | `IF-CS-006` | 业务类型、流程状态、附件类型、创建时间 | 同时提供流程轨迹、附件元数据和缺失标记 |
| 表务仓储与检定核对 | `IF-METER-001`、`IF-METER-003` | 仓库、单据类型、水表状态、检定结论 | 同时提供数量汇总和单据级追溯信息 |
### 接口约束补充
- 历史查询结果应优先返回原系统标识与新系统标识的映射关系,例如原单号、原批次号、原附件标识、当前业务单号。
- 明细查询接口应支持按客户号、证件号、手机号、表号、账期、营业所、渠道、业务单号等组合检索,满足迁移验收定位需求。
- 若历史附件不直接由当前业务服务托管,接口至少返回附件元数据、来源系统、文件引用地址和可访问状态。
- 历史查询接口的导出能力属于查询扩展能力,不应与在线交易接口共用“状态变更”动作。
## 实现状态说明
### 已落地
结合 `backend` 当前已确认模块与真实表,可明确支撑以下接口域:
- 客户与账户查询、维护接口
- 抄表任务与抄表数据接口
- 账单生成与收费核销接口
- 银行代收、代扣、交易回调、对账、结算接口
- 发票申请与票据状态回写接口的业务侧支撑
- 客户渠道的账户绑定、查询、缴费、业务办理进度接口
### 部分落地
以下接口域已有主线支撑,但部分细粒度对象仍需结合后续实现继续核实:
- 账务调整、退款、坏账、冲正类精细接口
- 催缴管理中针对不同通知策略和停复水联动的细分接口
- 发票补开等扩展票据后处理接口
### 文档先行
以下内容可保留设计说明,但当前不应直接表述为已完全落地:
- 历史数据字典中大量细粒度账务台账接口
- 未在 backend 当前扫描范围内明确识别到的独立业务对象接口
- 特定银行或地方平台的专有报文细节
- 历史查询与迁移校验接口在实施时所依赖的只读库、归档库或映射表物理形态
---
### 版本迭代维护说明
当前主文档已覆盖 `UP / REV / CS / METER / INST / EXT` 六类接口域的统一编号、清单、关键接口与字段级定义。后续版本迭代按以下顺序增量维护:
1. 先更新接口清单与归属模块,再补充字段级请求/响应结构;
2. 涉及跨系统协同时,同步维护 `SYS-008`、`SYS-009`、`SYS-010` 报文映射;
3. 涉及异常策略变化时,同步更新错误码与幂等规则;
4. 完成后同步校验 `02_Detailed_Design/01_Detailed_Design.md` 与本主文档的一致性。