# 电信请求书系统 — COBOL 测试基准程序集 **Telecom Billing System — COBOL Test Benchmark Suite** 基于 [cobol-test-benchmark.md](../cobol-test-benchmark.md) 的 35 种 COBOL 程序类型 + 8 项横跨功能测试,映射为模拟的电信请求书(计费)处理系统。 ## 系统架构 ``` ┌───────────────────┐ │ 外部系统 CDR │ │ (CSV 格式) │ └─────────┬─────────┘ │ ┌─────────▼─────────┐ │ 15/21 CDR 取込 │ CSV→FB转换 └─────────┬─────────┘ │ ┌─────────▼─────────┐ │ 13/27/31 CDR校验 │ 字段/半角/重複 └─────────┬─────────┘ │ ┌──────────────┼──────────────┐ │ │ │ ┌──────▼──────┐ ┌────▼────┐ ┌──────▼──────┐ │ 34 CDR 排序 │ │35 CDR合并│ │ 29 编码转换 │ └──────┬──────┘ └────┬────┘ └──────┬──────┘ │ │ │ └──────────────┼──────────────┘ │ ┌─────────────────────▼─────────────────────┐ │ 02 合同↔CDR 匹配 (1:N) │ │ 03 线路↔请求书 (N:1) │ │ 01 请求书↔支付对账 (1:1) │ │ 16-22 二级/组合匹配 │ └─────────────────────┬─────────────────────┘ │ ┌─────────────────────▼─────────────────────┐ │ 24 资费表检索 (SEARCH ALL) │ │ 25 计费子程序 (CALL) │ │ 05/06 条件判定 (IF/EVALUATE) │ └─────────────────────┬─────────────────────┘ │ ┌─────────────────────▼─────────────────────┐ │ 07/08/30 用量/费用汇总 (key切) │ │ 32/33 混合处理 │ └─────────────────────┬─────────────────────┘ │ ┌─────────────────────▼─────────────────────┐ │ 04 请求书编辑输出 (GETPUT/报表) │ │ 09/23/26 DB更新/检索 │ │ 14 在线照会 (CICS模拟) │ └─────────────────────┬─────────────────────┘ │ ┌─────────────────────▼─────────────────────┐ │ 10/11/12 请求书分割输出 │ │ 28 SYSIN批量参数 │ └───────────────────────────────────────────┘ ``` ## 35 类型 → 电信业务映射 | 目录 | 电信功能 | COBOL 类型 | 处理阶段 | |------|---------|-----------|---------| | `01-matching-1-1` | 请求书↔支付对账 | 1:1匹配 | 对账 | | `02-matching-1-N` | 合同↔通话明细匹配 | 1:N匹配 | 计费前 | | `03-matching-N-1` | 多线路→请求书汇集 | N:1匹配 | 计费后 | | `04-edit-getput` | 请求书编辑输出 | 编辑 | 输出 | | `05-branch-if` | 料金阶梯判定(IF) | IF分支 | 计费 | | `06-branch-evaluate` | 套餐类型判定 | EVALUATE分支 | 计费 | | `07-keybreak-summary` | 加入者月汇总 | key切汇总 | 集计 | | `08-keybreak-aggregate` | 套餐统计 | key切聚合 | 集计 | | `09-db-update` | 客户DB更新 | DB更新 | DB | | `10-divide-50` | 请求书50分割输出 | 50分割 | 输出 | | `11-divide-25` | 明细25分割 | 25分割 | 输出 | | `12-divide-100` | 数据100分割 | 100分割 | 输出 | | `13-validation-nodup` | CDR字段校验 | 校验(无重复) | 前处理 | | `14-online-cics` | 在线客户照会 | online/CICS | 在线 | | `15-csv-fb-nolf` | 外部CDR CSV取込(无LF) | CSV→FB | 取込 | | `16-matching-2stage-1-1` | 二级请求书核对 | 二级1:1 | 对账 | | `17-matching-2stage-N-1` | 线路汇总→请求书 | 二级N:1 | 集计 | | `18-matching-MN-to-M` | 合同↔套餐匹配 | M:N→M条 | 计费 | | `19-matching-MN-to-N` | 套餐适用明细 | M:N→N条 | 计费 | | `20-matching-MN-to-MxN` | CDR详细清单 | M:N→M×N | 计费 | | `21-csv-fb-lf` | CDR CSV取込(有LF) | CSV→FB(LF) | 取込 | | `22-matching-2stage-MN` | 二级套餐匹配 | 二级M:N | 计费 | | `23-select-condition` | 客户合同检索 | SELECT条件 | DB | | `24-table-search` | 资费表检索 | 内部表 | 计费 | | `25-subprogram` | 计费子程序 | 子程序 | 计费 | | `26-db-search` | 客户信息检索 | DB检索 | DB | | `27-validation-halfwidth` | 电话号码格式校验 | 半角校验 | 前处理 | | `28-sysin` | 批量参数设定 | SYSIN读取 | 共通 | | `29-ascii-ebcdic` | 主机编码转换 | 编码转换 | 接口 | | `30-keybreak-other` | 通话状态变化检测 | key切非汇总 | 检测 | | `31-validation-withdup` | 重复CDR检测 | 校验(含重复) | 前处理 | | `32-mix-1N-samekeybreak` | 合同+月别集计 | 1:N+同key切 | 混合 | | `33-mix-1N-diffkeybreak` | 线路+类型切替 | 1:N+异key切 | 混合 | | `34-sort` | CDR排序 | SORT | 前处理 | | `35-merge` | 多源CDR合并 | MERGE | 取込 | ## 横跨功能 | 目录 | 电信业务场景 | |------|------------| | `cross-cutting/variable-length` | 可变长CDR记录、ODO套餐明细表 | | `cross-cutting/loop` | 批量处理循环(PERFORM变种) | | `cross-cutting/numeric-precision` | 资费计算精度(ROUNDED/SIZE ERROR) | | `cross-cutting/japanese` | 客户名日文处理(PIC N/全角假名) | | `cross-cutting/date` | 账期计算(闰年/和历/月末) | | `cross-cutting/rerun` | 请求书再发行(幂等性) | | `cross-cutting/exclusion` | 排他控制(文件竞争) | | `cross-cutting/performance` | 大容量CDR处理性能 | | `cross-cutting/file-organization` | RRDS/索引文件编成 | ## 流水线处理 (pipeline/) 端到端批处理流程: ``` 1. CDR取込 → 15-csv-fb-nolf (外部CDR CSV→固定长) 2. CDR校验 → 13-validation-nodup (字段校验) 3. CDR排序 → 34-sort (按客户/时间排序) 4. 合同匹配 → 02-matching-1-N (合同↔CDR关联) 5. 资费检索 → 24-table-search (套餐单价查找) 6. 计费计算 → 25-subprogram (时长×单价) 7. 月汇总 → 07-keybreak-summary (加入者别集计) 8. 请求书 → 04-edit-getput (请求书输出) 9. 分割 → 10-divide-50 (请求书50分割) ``` ```bash cd pipeline && bash run-pipeline.sh ``` ## 快速开始 ```bash # 编译全部 bash common/scripts/build.sh # 运行全部测试 bash common/scripts/run_tests.sh # 运行流水线 cd pipeline && bash run-pipeline.sh # 单个测试 cd 34-sort && bash run.sh ``` ## 数据约定 - **客户ID**: `CUST000001` 格式 (10字节) - **合同ID**: `CTR000001` 格式 (10字节) - **CDR编号**: `CDR000001` 格式 (10字节) - **请求书ID**: `INV2025001` 格式 (10字节) - **电话号码**: `8613800138001` 格式 (中国手机, 11字节) - **套餐代码**: `P01/P02/P03` (3字节) - **金额**: 分为单位 (9字节整数) - **日期**: YYYYMMDD 格式 (8字节) - **账期**: YYYYMM 格式 (6字节)