feat: add benchmark-programs — 58 telecom COBOL test programs
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
# 36 - 金额计算程序 (TA-TELAMTCAL)
|
||||
|
||||
## 概要
|
||||
基于标准批处理框架架构的电信金额计算程序。
|
||||
读取 CDR 明细,按套餐费率计算通话费用,生成课金明细。
|
||||
|
||||
## 架构
|
||||
|
||||
```
|
||||
TA-TELAMTCAL-BEGIN (业务前处理)
|
||||
├── 0100-INIT-TARIFF — 费率表初始化
|
||||
├── INFO_PARAM — 参数读取(COMMIT-COUNT)
|
||||
└── INFO_CHKPT — Checkpoint信息取得
|
||||
|
||||
TA-TELAMTCAL-MAIN (业务主处理)
|
||||
├── 0100-INIT-TARIFF — 费率表加载
|
||||
├── TXN-CTRL — 事务管理(BEGIN/END)
|
||||
├── 1000-RATE-CALC — 金额计算
|
||||
│ ├── 1100-VOICE-CHARGE — 语音通话计费
|
||||
│ ├── 1200-SMS-CHARGE — SMS计费
|
||||
│ └── 1300-DATA-CHARGE — 数据通信计费
|
||||
├── 2000-DB-OPERATION — 课金明细登録
|
||||
│ └── 2100-DML-INSERT — INSERT (重複→UPDATE)
|
||||
└── CHKPT-SAVE — Checkpoint登録
|
||||
```
|
||||
|
||||
## 费率表
|
||||
|
||||
| プラン | 基本料金 | 秒単価 | 無料分(秒) | 超過単価 | ローミング | SMS | データ |
|
||||
|--------|---------|-------|-----------|---------|--------|-----|------|
|
||||
| P01 基本 | 3000 | 20 | 6000 | 20 | 50 | 10 | 30 |
|
||||
| P02 商用 | 8000 | 10 | 30000 | 15 | 30 | 5 | 20 |
|
||||
| P03 無制限 | 20000 | 5 | 120000 | 5 | 20 | 3 | 10 |
|
||||
| P04 データ専用 | 5000 | 0 | 0 | 0 | 0 | 0 | 20 |
|
||||
| P05 格安 | 1000 | 30 | 1800 | 30 | 150 | 100 | 50 |
|
||||
|
||||
## 测试数据(8件)
|
||||
|
||||
| CDR | 発信者 | 着信者 | 時間 | 秒 | 種別 | ローミング |
|
||||
|-----|--------|--------|------|-----|------|---------|
|
||||
| CDR0000001 | 8613800138001 | 8613900999001 | 20250601 083000 | 120 | 01音声 | N |
|
||||
| CDR0000002 | 8613800138001 | 8613700777001 | 20250601 084500 | 045 | 01音声 | N |
|
||||
| CDR0000003 | 8613800138001 | 8613600666001 | 20250601 090000 | 300 | 01音声 | N |
|
||||
| CDR0000004 | 8613900210033 | 8613800138001 | 20250601 100000 | 600 | 01音声 | N |
|
||||
| CDR0000005 | 8613900210033 | 8613800138001 | 20250601 110000 | 001 | 02SMS | N |
|
||||
| CDR0000006 | 8613700550066 | 8613900210033 | 20250601 120000 | 1200 | 01音声 | Y |
|
||||
| CDR0000007 | 8613800138001 | 8613600666001 | 20250601 130000 | 900 | 03データ | N |
|
||||
| CDR0000008 | 8613700550066 | 8613500555001 | 20250601 140000 | 1800 | 01音声 | N |
|
||||
|
||||
## 実行
|
||||
|
||||
```bash
|
||||
cd 36-billing-calc && bash run.sh
|
||||
```
|
||||
@@ -0,0 +1,190 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. TABEGIN.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 CON-FLAG-ON PIC S9(04) COMP VALUE 1.
|
||||
01 CON-NORMAL PIC S9(04) COMP VALUE 0.
|
||||
01 CON-STATUS-OFF PIC S9(08) COMP VALUE 0.
|
||||
01 CON-COMMIT-MAX PIC 9(04) COMP VALUE 5.
|
||||
01 WRK-COMMIT-COUNT PIC 9(04) COMP.
|
||||
01 WRK-TARIFF-COUNT PIC 9(02) COMP VALUE 5.
|
||||
01 WRK-TARIFF-TABLE.
|
||||
03 TP-ENTRY OCCURS 5 TIMES.
|
||||
05 TP-CODE PIC X(03).
|
||||
05 TP-NAME PIC X(08).
|
||||
05 TP-BASE-FEE PIC 9(09) COMP.
|
||||
05 TP-UNIT-PRICE PIC 9(04) COMP.
|
||||
05 TP-FREE-SEC PIC 9(09) COMP.
|
||||
05 TP-OVER-PRICE PIC 9(04) COMP.
|
||||
05 TP-ROAM-PRICE PIC 9(04) COMP.
|
||||
05 TP-SMS-PRICE PIC 9(04) COMP.
|
||||
05 TP-DATA-PRICE PIC 9(04) COMP.
|
||||
01 CDR-TEST-COUNT PIC 9(02) COMP VALUE 8.
|
||||
01 CDR-TEST-DATA.
|
||||
03 CDR-TEST-ENTRY OCCURS 8 TIMES.
|
||||
05 TE-ID PIC X(10).
|
||||
05 TE-CALLER PIC X(11).
|
||||
05 TE-CALLEE PIC X(11).
|
||||
05 TE-START PIC X(14).
|
||||
05 TE-DURATION PIC 9(09) COMP.
|
||||
05 TE-TYPE PIC X(02).
|
||||
05 TE-ROAM PIC X(01).
|
||||
01 WRK-IDX PIC 9(02) COMP.
|
||||
01 WRK-JDX PIC 9(02) COMP.
|
||||
|
||||
01 COMMONMEMORY GLOBAL EXTERNAL.
|
||||
03 CM-TARIFF-TABLE.
|
||||
05 CM-TP-ENTRY OCCURS 5 TIMES.
|
||||
10 CTP-CODE PIC X(03).
|
||||
10 CTP-NAME PIC X(08).
|
||||
10 CTP-BASE-FEE PIC 9(09) COMP.
|
||||
10 CTP-UNIT-PRICE PIC 9(04) COMP.
|
||||
10 CTP-FREE-SEC PIC 9(09) COMP.
|
||||
10 CTP-OVER-PRICE PIC 9(04) COMP.
|
||||
10 CTP-ROAM-PRICE PIC 9(04) COMP.
|
||||
10 CTP-SMS-PRICE PIC 9(04) COMP.
|
||||
10 CTP-DATA-PRICE PIC 9(04) COMP.
|
||||
03 CM-TARIFF-COUNT PIC 9(02) COMP.
|
||||
03 CM-TEST-COUNT PIC 9(02) COMP.
|
||||
03 CM-TEST-DATA.
|
||||
05 CMT-ENTRY OCCURS 8 TIMES.
|
||||
10 CMT-ID PIC X(10).
|
||||
10 CMT-CALLER PIC X(11).
|
||||
10 CMT-CALLEE PIC X(11).
|
||||
10 CMT-START PIC X(14).
|
||||
10 CMT-DURATION PIC 9(09) COMP.
|
||||
10 CMT-TYPE PIC X(02).
|
||||
10 CMT-ROAM PIC X(01).
|
||||
03 CM-COMMIT-COUNT PIC 9(04) COMP.
|
||||
03 CM-PROC-COUNT PIC 9(08) COMP.
|
||||
|
||||
LINKAGE SECTION.
|
||||
01 LK-STATUS PIC S9(08) COMP.
|
||||
|
||||
PROCEDURE DIVISION USING LK-STATUS.
|
||||
0000-BEGIN SECTION.
|
||||
MOVE CON-STATUS-OFF TO LK-STATUS.
|
||||
MOVE 5 TO WRK-TARIFF-COUNT.
|
||||
MOVE "P01" TO TP-CODE(1)
|
||||
MOVE "BASIC" TO TP-NAME(1)
|
||||
MOVE 3000 TO TP-BASE-FEE(1)
|
||||
MOVE 20 TO TP-UNIT-PRICE(1)
|
||||
MOVE 6000 TO TP-FREE-SEC(1)
|
||||
MOVE 20 TO TP-OVER-PRICE(1)
|
||||
MOVE 50 TO TP-ROAM-PRICE(1)
|
||||
MOVE 10 TO TP-SMS-PRICE(1)
|
||||
MOVE 30 TO TP-DATA-PRICE(1)
|
||||
MOVE "P02" TO TP-CODE(2)
|
||||
MOVE "BUSINESS" TO TP-NAME(2)
|
||||
MOVE 8000 TO TP-BASE-FEE(2)
|
||||
MOVE 10 TO TP-UNIT-PRICE(2)
|
||||
MOVE 30000 TO TP-FREE-SEC(2)
|
||||
MOVE 15 TO TP-OVER-PRICE(2)
|
||||
MOVE 30 TO TP-ROAM-PRICE(2)
|
||||
MOVE 5 TO TP-SMS-PRICE(2)
|
||||
MOVE 20 TO TP-DATA-PRICE(2)
|
||||
MOVE "P03" TO TP-CODE(3)
|
||||
MOVE "UNLIMIT" TO TP-NAME(3)
|
||||
MOVE 20000 TO TP-BASE-FEE(3)
|
||||
MOVE 5 TO TP-UNIT-PRICE(3)
|
||||
MOVE 120000 TO TP-FREE-SEC(3)
|
||||
MOVE 5 TO TP-OVER-PRICE(3)
|
||||
MOVE 20 TO TP-ROAM-PRICE(3)
|
||||
MOVE 3 TO TP-SMS-PRICE(3)
|
||||
MOVE 10 TO TP-DATA-PRICE(3)
|
||||
MOVE "P04" TO TP-CODE(4)
|
||||
MOVE "DATA" TO TP-NAME(4)
|
||||
MOVE 5000 TO TP-BASE-FEE(4)
|
||||
MOVE 0 TO TP-UNIT-PRICE(4)
|
||||
MOVE 0 TO TP-FREE-SEC(4)
|
||||
MOVE 0 TO TP-OVER-PRICE(4)
|
||||
MOVE 0 TO TP-ROAM-PRICE(4)
|
||||
MOVE 0 TO TP-SMS-PRICE(4)
|
||||
MOVE 20 TO TP-DATA-PRICE(4)
|
||||
MOVE "P05" TO TP-CODE(5)
|
||||
MOVE "CHEAP" TO TP-NAME(5)
|
||||
MOVE 1000 TO TP-BASE-FEE(5)
|
||||
MOVE 30 TO TP-UNIT-PRICE(5)
|
||||
MOVE 1800 TO TP-FREE-SEC(5)
|
||||
MOVE 30 TO TP-OVER-PRICE(5)
|
||||
MOVE 150 TO TP-ROAM-PRICE(5)
|
||||
MOVE 100 TO TP-SMS-PRICE(5)
|
||||
MOVE 50 TO TP-DATA-PRICE(5)
|
||||
|
||||
MOVE 5 TO CM-TARIFF-COUNT
|
||||
PERFORM VARYING WRK-JDX FROM 1 BY 1 UNTIL WRK-JDX > 5
|
||||
MOVE TP-CODE(WRK-JDX) TO CTP-CODE(WRK-JDX)
|
||||
MOVE TP-NAME(WRK-JDX) TO CTP-NAME(WRK-JDX)
|
||||
MOVE TP-BASE-FEE(WRK-JDX) TO CTP-BASE-FEE(WRK-JDX)
|
||||
MOVE TP-UNIT-PRICE(WRK-JDX) TO CTP-UNIT-PRICE(WRK-JDX)
|
||||
MOVE TP-FREE-SEC(WRK-JDX) TO CTP-FREE-SEC(WRK-JDX)
|
||||
MOVE TP-OVER-PRICE(WRK-JDX) TO CTP-OVER-PRICE(WRK-JDX)
|
||||
MOVE TP-ROAM-PRICE(WRK-JDX) TO CTP-ROAM-PRICE(WRK-JDX)
|
||||
MOVE TP-SMS-PRICE(WRK-JDX) TO CTP-SMS-PRICE(WRK-JDX)
|
||||
MOVE TP-DATA-PRICE(WRK-JDX) TO CTP-DATA-PRICE(WRK-JDX)
|
||||
END-PERFORM.
|
||||
|
||||
MOVE 8 TO CM-TEST-COUNT
|
||||
MOVE "CDR0000001" TO CMT-ID(1)
|
||||
MOVE "86138001380" TO CMT-CALLER(1)
|
||||
MOVE "86139009990" TO CMT-CALLEE(1)
|
||||
MOVE "20250601083000" TO CMT-START(1)
|
||||
MOVE 120 TO CMT-DURATION(1)
|
||||
MOVE "01" TO CMT-TYPE(1)
|
||||
MOVE "N" TO CMT-ROAM(1)
|
||||
MOVE "CDR0000002" TO CMT-ID(2)
|
||||
MOVE "86138001380" TO CMT-CALLER(2)
|
||||
MOVE "86137007770" TO CMT-CALLEE(2)
|
||||
MOVE "20250601084500" TO CMT-START(2)
|
||||
MOVE 45 TO CMT-DURATION(2)
|
||||
MOVE "01" TO CMT-TYPE(2)
|
||||
MOVE "N" TO CMT-ROAM(2)
|
||||
MOVE "CDR0000003" TO CMT-ID(3)
|
||||
MOVE "86138001380" TO CMT-CALLER(3)
|
||||
MOVE "86136006660" TO CMT-CALLEE(3)
|
||||
MOVE "20250601090000" TO CMT-START(3)
|
||||
MOVE 300 TO CMT-DURATION(3)
|
||||
MOVE "01" TO CMT-TYPE(3)
|
||||
MOVE "N" TO CMT-ROAM(3)
|
||||
MOVE "CDR0000004" TO CMT-ID(4)
|
||||
MOVE "86139002100" TO CMT-CALLER(4)
|
||||
MOVE "86138001380" TO CMT-CALLEE(4)
|
||||
MOVE "20250601100000" TO CMT-START(4)
|
||||
MOVE 600 TO CMT-DURATION(4)
|
||||
MOVE "01" TO CMT-TYPE(4)
|
||||
MOVE "N" TO CMT-ROAM(4)
|
||||
MOVE "CDR0000005" TO CMT-ID(5)
|
||||
MOVE "86139002100" TO CMT-CALLER(5)
|
||||
MOVE "86138001380" TO CMT-CALLEE(5)
|
||||
MOVE "20250601110000" TO CMT-START(5)
|
||||
MOVE 1 TO CMT-DURATION(5)
|
||||
MOVE "02" TO CMT-TYPE(5)
|
||||
MOVE "N" TO CMT-ROAM(5)
|
||||
MOVE "CDR0000006" TO CMT-ID(6)
|
||||
MOVE "86137005500" TO CMT-CALLER(6)
|
||||
MOVE "86139002100" TO CMT-CALLEE(6)
|
||||
MOVE "20250601120000" TO CMT-START(6)
|
||||
MOVE 1200 TO CMT-DURATION(6)
|
||||
MOVE "01" TO CMT-TYPE(6)
|
||||
MOVE "Y" TO CMT-ROAM(6)
|
||||
MOVE "CDR0000007" TO CMT-ID(7)
|
||||
MOVE "86138001380" TO CMT-CALLER(7)
|
||||
MOVE "86136006660" TO CMT-CALLEE(7)
|
||||
MOVE "20250601130000" TO CMT-START(7)
|
||||
MOVE 900 TO CMT-DURATION(7)
|
||||
MOVE "03" TO CMT-TYPE(7)
|
||||
MOVE "N" TO CMT-ROAM(7)
|
||||
MOVE "CDR0000008" TO CMT-ID(8)
|
||||
MOVE "86137005500" TO CMT-CALLER(8)
|
||||
MOVE "86135005550" TO CMT-CALLEE(8)
|
||||
MOVE "20250601140000" TO CMT-START(8)
|
||||
MOVE 1800 TO CMT-DURATION(8)
|
||||
MOVE "01" TO CMT-TYPE(8)
|
||||
MOVE "N" TO CMT-ROAM(8)
|
||||
|
||||
MOVE CON-COMMIT-MAX TO CM-COMMIT-COUNT.
|
||||
MOVE ZERO TO CM-PROC-COUNT.
|
||||
DISPLAY "TABEGIN: tariff=" CM-TARIFF-COUNT
|
||||
" cdrs=" CM-TEST-COUNT " loaded"
|
||||
GOBACK.
|
||||
END PROGRAM TABEGIN.
|
||||
@@ -0,0 +1,56 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. TADRIVER.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 LK-STATUS PIC S9(08) COMP.
|
||||
|
||||
01 COMMONMEMORY GLOBAL EXTERNAL.
|
||||
03 CM-TARIFF-TABLE.
|
||||
05 CM-TP-ENTRY OCCURS 5 TIMES.
|
||||
10 CTP-CODE PIC X(03).
|
||||
10 CTP-NAME PIC X(08).
|
||||
10 CTP-BASE-FEE PIC 9(09) COMP.
|
||||
10 CTP-UNIT-PRICE PIC 9(04) COMP.
|
||||
10 CTP-FREE-SEC PIC 9(09) COMP.
|
||||
10 CTP-OVER-PRICE PIC 9(04) COMP.
|
||||
10 CTP-ROAM-PRICE PIC 9(04) COMP.
|
||||
10 CTP-SMS-PRICE PIC 9(04) COMP.
|
||||
10 CTP-DATA-PRICE PIC 9(04) COMP.
|
||||
03 CM-TARIFF-COUNT PIC 9(02) COMP.
|
||||
03 CM-TEST-COUNT PIC 9(02) COMP.
|
||||
03 CM-TEST-DATA.
|
||||
05 CMT-ENTRY OCCURS 8 TIMES.
|
||||
10 CMT-ID PIC X(10).
|
||||
10 CMT-CALLER PIC X(11).
|
||||
10 CMT-CALLEE PIC X(11).
|
||||
10 CMT-START PIC X(14).
|
||||
10 CMT-DURATION PIC 9(09) COMP.
|
||||
10 CMT-TYPE PIC X(02).
|
||||
10 CMT-ROAM PIC X(01).
|
||||
03 CM-COMMIT-COUNT PIC 9(04) COMP.
|
||||
03 CM-PROC-COUNT PIC 9(08) COMP.
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
0000-DRIVER SECTION.
|
||||
DISPLAY "TA-DRIVER: Starting"
|
||||
|
||||
CALL "TABEGIN" USING LK-STATUS
|
||||
IF LK-STATUS NOT = 0
|
||||
DISPLAY "ABORT: TABEGIN failed status=" LK-STATUS
|
||||
STOP RUN RETURNING 1
|
||||
END-IF
|
||||
|
||||
DISPLAY "TA-DRIVER: BEGIN OK, tariff=" CM-TARIFF-COUNT
|
||||
" cdrs=" CM-TEST-COUNT
|
||||
|
||||
CALL "TAMAIN" USING LK-STATUS
|
||||
IF LK-STATUS NOT = 0
|
||||
DISPLAY "ABORT: TAMAIN failed status=" LK-STATUS
|
||||
STOP RUN RETURNING 1
|
||||
END-IF
|
||||
|
||||
DISPLAY "TA-DRIVER: MAIN OK, total-proc=" CM-PROC-COUNT
|
||||
DISPLAY "TA-DRIVER: Normal end"
|
||||
STOP RUN RETURNING 0.
|
||||
|
||||
END PROGRAM TADRIVER.
|
||||
@@ -0,0 +1,197 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. TAMAIN.
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 CON-FLAG-ON PIC S9(04) COMP VALUE 1.
|
||||
01 CON-NORMAL PIC S9(04) COMP VALUE 0.
|
||||
01 CON-FLAG-OFF PIC S9(04) COMP VALUE 0.
|
||||
01 CON-STATUS-ON PIC S9(08) COMP VALUE 1.
|
||||
01 CON-STATUS-OFF PIC S9(08) COMP VALUE 0.
|
||||
01 CON-COMMIT-MAX PIC 9(04) COMP VALUE 5.
|
||||
01 WB-ERROR-FLAG PIC S9(04) COMP.
|
||||
01 WB-LOOP-FLAG PIC S9(04) COMP.
|
||||
01 WB-REC-COUNT PIC 9(08) COMP.
|
||||
01 WRK-IDX PIC 9(02) COMP.
|
||||
01 WRK-JDX PIC 9(02) COMP.
|
||||
01 CALC-DURATION PIC 9(09) COMP.
|
||||
01 CALC-FREE-MIN PIC 9(09) COMP.
|
||||
01 CALC-OVER-SEC PIC 9(09) COMP.
|
||||
01 CALC-UNIT-PRICE PIC 9(04) COMP.
|
||||
01 CALC-BASE-CHARGE PIC 9(09) COMP.
|
||||
01 CALC-OVER-CHARGE PIC 9(09) COMP.
|
||||
01 CALC-ROAM-CHARGE PIC 9(09) COMP.
|
||||
01 CALC-TOTAL-CHARGE PIC 9(09) COMP.
|
||||
01 CALC-TP-IDX PIC 9(02) COMP.
|
||||
01 CALC-FOUND PIC X(01).
|
||||
88 CALC-FOUND-YES VALUE 'Y'.
|
||||
01 CALC-CALL-TYPE PIC X(02).
|
||||
01 CALC-ROAM-FLAG PIC X(01).
|
||||
|
||||
01 SUM-COUNT PIC 9(09) VALUE 0.
|
||||
01 SUM-CHARGE PIC 9(15) VALUE 0.
|
||||
01 SUM-BASE PIC 9(15) VALUE 0.
|
||||
01 SUM-OVER PIC 9(15) VALUE 0.
|
||||
01 SUM-ROAM PIC 9(15) VALUE 0.
|
||||
01 SUM-ERROR-COUNT PIC 9(09) VALUE 0.
|
||||
|
||||
01 CDR-ID PIC X(10).
|
||||
01 CDR-CALLER PIC X(11).
|
||||
01 CDR-CALLEE PIC X(11).
|
||||
01 CDR-START PIC X(14).
|
||||
01 CDR-DURATION PIC 9(09) COMP.
|
||||
01 CDR-CALL-TYPE PIC X(02).
|
||||
01 CDR-ROAM-FLAG PIC X(01).
|
||||
|
||||
01 COMMONMEMORY GLOBAL EXTERNAL.
|
||||
03 CM-TARIFF-TABLE.
|
||||
05 CM-TP-ENTRY OCCURS 5 TIMES.
|
||||
10 CTP-CODE PIC X(03).
|
||||
10 CTP-NAME PIC X(08).
|
||||
10 CTP-BASE-FEE PIC 9(09) COMP.
|
||||
10 CTP-UNIT-PRICE PIC 9(04) COMP.
|
||||
10 CTP-FREE-SEC PIC 9(09) COMP.
|
||||
10 CTP-OVER-PRICE PIC 9(04) COMP.
|
||||
10 CTP-ROAM-PRICE PIC 9(04) COMP.
|
||||
10 CTP-SMS-PRICE PIC 9(04) COMP.
|
||||
10 CTP-DATA-PRICE PIC 9(04) COMP.
|
||||
03 CM-TARIFF-COUNT PIC 9(02) COMP.
|
||||
03 CM-TEST-COUNT PIC 9(02) COMP.
|
||||
03 CM-TEST-DATA.
|
||||
05 CMT-ENTRY OCCURS 8 TIMES.
|
||||
10 CMT-ID PIC X(10).
|
||||
10 CMT-CALLER PIC X(11).
|
||||
10 CMT-CALLEE PIC X(11).
|
||||
10 CMT-START PIC X(14).
|
||||
10 CMT-DURATION PIC 9(09) COMP.
|
||||
10 CMT-TYPE PIC X(02).
|
||||
10 CMT-ROAM PIC X(01).
|
||||
03 CM-COMMIT-COUNT PIC 9(04) COMP.
|
||||
03 CM-PROC-COUNT PIC 9(08) COMP.
|
||||
|
||||
LINKAGE SECTION.
|
||||
01 LK-STATUS PIC S9(08) COMP.
|
||||
|
||||
PROCEDURE DIVISION USING LK-STATUS.
|
||||
0000-MAIN SECTION.
|
||||
MOVE CON-STATUS-OFF TO LK-STATUS
|
||||
MOVE ZERO TO SUM-COUNT
|
||||
MOVE ZERO TO SUM-ERROR-COUNT
|
||||
MOVE ZERO TO SUM-CHARGE
|
||||
MOVE ZERO TO SUM-BASE
|
||||
MOVE ZERO TO SUM-OVER
|
||||
MOVE ZERO TO SUM-ROAM
|
||||
MOVE ZERO TO WB-REC-COUNT
|
||||
MOVE CON-FLAG-OFF TO WB-LOOP-FLAG
|
||||
MOVE CON-NORMAL TO WB-ERROR-FLAG
|
||||
|
||||
DISPLAY "TAMAIN: tariff=" CM-TARIFF-COUNT
|
||||
" cdrs=" CM-TEST-COUNT " processing..."
|
||||
|
||||
PERFORM VARYING WRK-IDX FROM 1 BY 1
|
||||
UNTIL WRK-IDX > CM-TEST-COUNT
|
||||
OR WB-LOOP-FLAG = CON-FLAG-ON
|
||||
MOVE CMT-ID(WRK-IDX) TO CDR-ID
|
||||
MOVE CMT-CALLER(WRK-IDX) TO CDR-CALLER
|
||||
MOVE CMT-CALLEE(WRK-IDX) TO CDR-CALLEE
|
||||
MOVE CMT-START(WRK-IDX) TO CDR-START
|
||||
MOVE CMT-DURATION(WRK-IDX) TO CDR-DURATION
|
||||
MOVE CMT-TYPE(WRK-IDX) TO CDR-CALL-TYPE
|
||||
MOVE CMT-ROAM(WRK-IDX) TO CDR-ROAM-FLAG
|
||||
ADD 1 TO WB-REC-COUNT
|
||||
|
||||
PERFORM 1000-RATE-CALC
|
||||
|
||||
IF WB-ERROR-FLAG = CON-NORMAL
|
||||
PERFORM 2000-WRITE-BILLING
|
||||
ELSE
|
||||
ADD 1 TO SUM-ERROR-COUNT
|
||||
END-IF
|
||||
|
||||
IF WB-REC-COUNT >= CM-COMMIT-COUNT
|
||||
DISPLAY "COMMIT: " WB-REC-COUNT " recs"
|
||||
MOVE ZERO TO WB-REC-COUNT
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
|
||||
DISPLAY "TAMAIN: billed=" SUM-COUNT
|
||||
" errors=" SUM-ERROR-COUNT
|
||||
" total=" SUM-CHARGE
|
||||
GOBACK.
|
||||
|
||||
1000-RATE-CALC SECTION.
|
||||
MOVE CDR-CALL-TYPE TO CALC-CALL-TYPE
|
||||
MOVE CDR-ROAM-FLAG TO CALC-ROAM-FLAG
|
||||
MOVE CDR-DURATION TO CALC-DURATION
|
||||
|
||||
MOVE 'N' TO CALC-FOUND
|
||||
MOVE 1 TO CALC-TP-IDX
|
||||
PERFORM VARYING WRK-JDX FROM 1 BY 1
|
||||
UNTIL WRK-JDX > CM-TARIFF-COUNT
|
||||
IF CDR-ID(1:3) = CTP-CODE(WRK-JDX)(1:3)
|
||||
MOVE WRK-JDX TO CALC-TP-IDX
|
||||
MOVE 'Y' TO CALC-FOUND
|
||||
EXIT PERFORM
|
||||
END-IF
|
||||
END-PERFORM
|
||||
|
||||
EVALUATE CALC-CALL-TYPE
|
||||
WHEN "01"
|
||||
COMPUTE CALC-FREE-MIN =
|
||||
CTP-FREE-SEC(CALC-TP-IDX) * 60
|
||||
IF CALC-DURATION <= CALC-FREE-MIN
|
||||
MOVE ZERO TO CALC-OVER-SEC
|
||||
MOVE ZERO TO CALC-OVER-CHARGE
|
||||
ELSE
|
||||
COMPUTE CALC-OVER-SEC =
|
||||
CALC-DURATION - CALC-FREE-MIN
|
||||
COMPUTE CALC-OVER-CHARGE =
|
||||
CALC-OVER-SEC *
|
||||
CTP-OVER-PRICE(CALC-TP-IDX)
|
||||
END-IF
|
||||
COMPUTE CALC-BASE-CHARGE =
|
||||
CALC-FREE-MIN *
|
||||
CTP-UNIT-PRICE(CALC-TP-IDX)
|
||||
IF CDR-ROAM-FLAG = 'Y'
|
||||
COMPUTE CALC-ROAM-CHARGE =
|
||||
CALC-DURATION *
|
||||
CTP-ROAM-PRICE(CALC-TP-IDX)
|
||||
ELSE
|
||||
MOVE ZERO TO CALC-ROAM-CHARGE
|
||||
END-IF
|
||||
COMPUTE CALC-TOTAL-CHARGE =
|
||||
CALC-BASE-CHARGE + CALC-OVER-CHARGE
|
||||
+ CALC-ROAM-CHARGE
|
||||
WHEN "02"
|
||||
MOVE ZERO TO CALC-FREE-MIN
|
||||
MOVE ZERO TO CALC-OVER-SEC
|
||||
MOVE ZERO TO CALC-BASE-CHARGE
|
||||
MOVE ZERO TO CALC-OVER-CHARGE
|
||||
MOVE CTP-SMS-PRICE(CALC-TP-IDX)
|
||||
TO CALC-ROAM-CHARGE
|
||||
MOVE CALC-ROAM-CHARGE TO CALC-TOTAL-CHARGE
|
||||
WHEN "03"
|
||||
MOVE ZERO TO CALC-FREE-MIN
|
||||
MOVE ZERO TO CALC-BASE-CHARGE
|
||||
MOVE ZERO TO CALC-ROAM-CHARGE
|
||||
COMPUTE CALC-OVER-CHARGE =
|
||||
CALC-DURATION *
|
||||
CTP-DATA-PRICE(CALC-TP-IDX) / 1000
|
||||
MOVE CALC-OVER-CHARGE TO CALC-TOTAL-CHARGE
|
||||
WHEN OTHER
|
||||
MOVE CON-FLAG-ON TO WB-LOOP-FLAG
|
||||
DISPLAY "ERROR: type=" CALC-CALL-TYPE
|
||||
END-EVALUATE
|
||||
EXIT.
|
||||
|
||||
2000-WRITE-BILLING SECTION.
|
||||
ADD CALC-TOTAL-CHARGE TO SUM-CHARGE
|
||||
ADD CALC-BASE-CHARGE TO SUM-BASE
|
||||
ADD CALC-OVER-CHARGE TO SUM-OVER
|
||||
ADD CALC-ROAM-CHARGE TO SUM-ROAM
|
||||
ADD 1 TO SUM-COUNT
|
||||
ADD 1 TO CM-PROC-COUNT
|
||||
DISPLAY "BILL: " CDR-ID " TYPE:" CDR-CALL-TYPE
|
||||
" DUR:" CDR-DURATION " TOTAL:" CALC-TOTAL-CHARGE
|
||||
EXIT.
|
||||
|
||||
END PROGRAM TAMAIN.
|
||||
@@ -0,0 +1,442 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. TA-TELAMTCAL.
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-370.
|
||||
OBJECT-COMPUTER. IBM-370.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 CON-FLAG-ON PIC S9(04) COMP VALUE 1.
|
||||
01 CON-FLAG-OFF PIC S9(04) COMP VALUE 0.
|
||||
01 CON-STATUS-ON PIC S9(08) COMP VALUE 1.
|
||||
01 CON-STATUS-OFF PIC S9(08) COMP VALUE 0.
|
||||
01 CON-NORMAL PIC S9(04) COMP VALUE 0.
|
||||
01 CON-ADD-COUNT PIC 9(04) COMP VALUE 1.
|
||||
01 CON-ADD-TOTAL-COUNT PIC 9(04) COMP VALUE 1.
|
||||
01 CON-COMMIT-MAX PIC 9(04) COMP VALUE 5.
|
||||
|
||||
01 WRK-FLAGS.
|
||||
03 WB-ERROR-FLAG PIC S9(04) COMP.
|
||||
03 WB-LOOP-FLAG PIC S9(04) COMP.
|
||||
01 WRK-PARAM-COUNT PIC 9(04) COMP.
|
||||
01 WRK-TOTAL-COUNT PIC 9(08) COMP.
|
||||
01 WRK-LOOP-COUNT PIC 9(04) COMP.
|
||||
01 WRK-PROC-COUNT PIC 9(08) COMP.
|
||||
01 WRK-REC-COUNT PIC 9(08) COMP.
|
||||
01 WRK-IDX PIC 9(02) COMP.
|
||||
01 WRK-JDX PIC 9(02) COMP.
|
||||
01 WRK-EMS-RET PIC S9(04) COMP.
|
||||
01 WRK-ABEND-COD PIC S9(04) COMP.
|
||||
|
||||
01 WRK-TARIFF-COUNT PIC 9(02) COMP VALUE 5.
|
||||
01 WRK-TARIFF-TABLE.
|
||||
03 WRK-TP-ENTRY OCCURS 5 TIMES.
|
||||
05 TP-CODE PIC X(03).
|
||||
05 TP-NAME PIC X(08).
|
||||
05 TP-BASE-FEE PIC 9(09) COMP.
|
||||
05 TP-UNIT-PRICE PIC 9(04) COMP.
|
||||
05 TP-FREE-SEC PIC 9(09) COMP.
|
||||
05 TP-OVER-PRICE PIC 9(04) COMP.
|
||||
05 TP-ROAM-PRICE PIC 9(04) COMP.
|
||||
05 TP-SMS-PRICE PIC 9(04) COMP.
|
||||
05 TP-DATA-PRICE PIC 9(04) COMP.
|
||||
|
||||
01 CDR-REC.
|
||||
03 CDR-ID PIC X(10).
|
||||
03 CDR-CALLER PIC X(11).
|
||||
03 CDR-CALLEE PIC X(11).
|
||||
03 CDR-START PIC X(14).
|
||||
03 CDR-DURATION PIC 9(09) COMP.
|
||||
03 CDR-CALL-TYPE PIC X(02).
|
||||
03 CDR-ROAM-FLAG PIC X(01).
|
||||
|
||||
01 BLL-REC.
|
||||
03 BLL-CALL-ID PIC X(10).
|
||||
03 BLL-CUST-ID PIC X(10).
|
||||
03 BLL-PLAN-CODE PIC X(03).
|
||||
03 BLL-CALL-TYPE PIC X(02).
|
||||
03 BLL-DURATION PIC 9(09) COMP.
|
||||
03 BLL-FREE-MIN PIC 9(09) COMP.
|
||||
03 BLL-OVER-USAGE PIC 9(09) COMP.
|
||||
03 BLL-UNIT-PRICE PIC 9(04) COMP.
|
||||
03 BLL-BASE-CHARGE PIC 9(09) COMP.
|
||||
03 BLL-OVER-CHARGE PIC 9(09) COMP.
|
||||
03 BLL-ROAM-CHARGE PIC 9(09) COMP.
|
||||
03 BLL-TOTAL-CHARGE PIC 9(09) COMP.
|
||||
03 BLL-STATUS PIC X(01).
|
||||
|
||||
01 CALC-AREA.
|
||||
03 CALC-DURATION PIC 9(09) COMP.
|
||||
03 CALC-FREE-MIN PIC 9(09) COMP.
|
||||
03 CALC-OVER-SEC PIC 9(09) COMP.
|
||||
03 CALC-UNIT-PRICE PIC 9(04) COMP.
|
||||
03 CALC-BASE-CHARGE PIC 9(09) COMP.
|
||||
03 CALC-OVER-CHARGE PIC 9(09) COMP.
|
||||
03 CALC-ROAM-CHARGE PIC 9(09) COMP.
|
||||
03 CALC-TOTAL-CHARGE PIC 9(09) COMP.
|
||||
03 CALC-TP-IDX PIC 9(02) COMP.
|
||||
03 CALC-FOUND PIC X(01).
|
||||
88 CALC-FOUND-YES VALUE 'Y'.
|
||||
03 CALC-PLAN-CODE PIC X(03).
|
||||
03 CALC-CALL-TYPE PIC X(02).
|
||||
03 CALC-ROAM-FLAG PIC X(01).
|
||||
|
||||
01 SUM-CHARGE PIC 9(15) VALUE 0.
|
||||
01 SUM-BASE PIC 9(15) VALUE 0.
|
||||
01 SUM-OVER PIC 9(15) VALUE 0.
|
||||
01 SUM-ROAM PIC 9(15) VALUE 0.
|
||||
01 SUM-COUNT PIC 9(09) VALUE 0.
|
||||
01 SUM-ERROR-COUNT PIC 9(09) VALUE 0.
|
||||
|
||||
01 CDR-TEST-COUNT PIC 9(02) COMP VALUE 8.
|
||||
01 CDR-TEST-DATA.
|
||||
03 CDR-TEST-ENTRY OCCURS 8 TIMES.
|
||||
05 TE-ID PIC X(10).
|
||||
05 TE-CALLER PIC X(11).
|
||||
05 TE-CALLEE PIC X(11).
|
||||
05 TE-START PIC X(14).
|
||||
05 TE-DURATION PIC 9(09) COMP.
|
||||
05 TE-TYPE PIC X(02).
|
||||
05 TE-ROAM PIC X(01).
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
|
||||
0000-MAIN SECTION.
|
||||
DISPLAY "TA-TELAMTCAL: Starting"
|
||||
DISPLAY "Telecom Amount Calculation System"
|
||||
|
||||
PERFORM 0100-INIT.
|
||||
|
||||
PERFORM 0200-LOAD-TARIFF.
|
||||
|
||||
PERFORM 0300-LOAD-TEST-DATA.
|
||||
|
||||
PERFORM VARYING WRK-IDX FROM 1 BY 1
|
||||
UNTIL WRK-IDX > CDR-TEST-COUNT
|
||||
OR WB-LOOP-FLAG = CON-FLAG-ON
|
||||
PERFORM 0400-PROCESS-CDR
|
||||
END-PERFORM.
|
||||
|
||||
PERFORM 0700-CHECKPOINT.
|
||||
|
||||
PERFORM 0800-SUMMARY.
|
||||
|
||||
DISPLAY "TA-TELAMTCAL: Normal end"
|
||||
DISPLAY "PROCESSED: " SUM-COUNT
|
||||
" TOTAL-CHARGE: " SUM-CHARGE
|
||||
STOP RUN.
|
||||
|
||||
0100-INIT SECTION.
|
||||
MOVE CON-FLAG-OFF TO WB-LOOP-FLAG.
|
||||
MOVE CON-NORMAL TO WB-ERROR-FLAG.
|
||||
MOVE CON-STATUS-OFF TO WB-ERROR-FLAG.
|
||||
MOVE ZERO TO WRK-TOTAL-COUNT.
|
||||
MOVE ZERO TO WRK-LOOP-COUNT.
|
||||
MOVE ZERO TO WRK-REC-COUNT.
|
||||
MOVE ZERO TO WRK-PROC-COUNT.
|
||||
MOVE ZERO TO SUM-COUNT
|
||||
MOVE ZERO TO SUM-ERROR-COUNT
|
||||
MOVE ZERO TO SUM-CHARGE
|
||||
MOVE ZERO TO SUM-BASE
|
||||
MOVE ZERO TO SUM-OVER
|
||||
MOVE ZERO TO SUM-ROAM
|
||||
DISPLAY "INIT: OK".
|
||||
EXIT.
|
||||
|
||||
0200-LOAD-TARIFF SECTION.
|
||||
MOVE 5 TO WRK-TARIFF-COUNT.
|
||||
|
||||
MOVE "P01" TO TP-CODE(1)
|
||||
MOVE "BASIC" TO TP-NAME(1)
|
||||
MOVE 3000 TO TP-BASE-FEE(1)
|
||||
MOVE 20 TO TP-UNIT-PRICE(1)
|
||||
MOVE 6000 TO TP-FREE-SEC(1)
|
||||
MOVE 20 TO TP-OVER-PRICE(1)
|
||||
MOVE 50 TO TP-ROAM-PRICE(1)
|
||||
MOVE 10 TO TP-SMS-PRICE(1)
|
||||
MOVE 30 TO TP-DATA-PRICE(1)
|
||||
|
||||
MOVE "P02" TO TP-CODE(2)
|
||||
MOVE "BUSINESS" TO TP-NAME(2)
|
||||
MOVE 8000 TO TP-BASE-FEE(2)
|
||||
MOVE 10 TO TP-UNIT-PRICE(2)
|
||||
MOVE 30000 TO TP-FREE-SEC(2)
|
||||
MOVE 15 TO TP-OVER-PRICE(2)
|
||||
MOVE 30 TO TP-ROAM-PRICE(2)
|
||||
MOVE 5 TO TP-SMS-PRICE(2)
|
||||
MOVE 20 TO TP-DATA-PRICE(2)
|
||||
|
||||
MOVE "P03" TO TP-CODE(3)
|
||||
MOVE "UNLIMIT" TO TP-NAME(3)
|
||||
MOVE 20000 TO TP-BASE-FEE(3)
|
||||
MOVE 5 TO TP-UNIT-PRICE(3)
|
||||
MOVE 120000 TO TP-FREE-SEC(3)
|
||||
MOVE 5 TO TP-OVER-PRICE(3)
|
||||
MOVE 20 TO TP-ROAM-PRICE(3)
|
||||
MOVE 3 TO TP-SMS-PRICE(3)
|
||||
MOVE 10 TO TP-DATA-PRICE(3)
|
||||
|
||||
MOVE "P04" TO TP-CODE(4)
|
||||
MOVE "DATA-ONLY" TO TP-NAME(4)
|
||||
MOVE 5000 TO TP-BASE-FEE(4)
|
||||
MOVE 0 TO TP-UNIT-PRICE(4)
|
||||
MOVE 0 TO TP-FREE-SEC(4)
|
||||
MOVE 0 TO TP-OVER-PRICE(4)
|
||||
MOVE 0 TO TP-ROAM-PRICE(4)
|
||||
MOVE 0 TO TP-SMS-PRICE(4)
|
||||
MOVE 20 TO TP-DATA-PRICE(4)
|
||||
|
||||
MOVE "P05" TO TP-CODE(5)
|
||||
MOVE "CHEAP" TO TP-NAME(5)
|
||||
MOVE 1000 TO TP-BASE-FEE(5)
|
||||
MOVE 30 TO TP-UNIT-PRICE(5)
|
||||
MOVE 1800 TO TP-FREE-SEC(5)
|
||||
MOVE 30 TO TP-OVER-PRICE(5)
|
||||
MOVE 150 TO TP-ROAM-PRICE(5)
|
||||
MOVE 100 TO TP-SMS-PRICE(5)
|
||||
MOVE 50 TO TP-DATA-PRICE(5)
|
||||
|
||||
DISPLAY "TARIFF: " WRK-TARIFF-COUNT " plans loaded".
|
||||
PERFORM VARYING WRK-JDX FROM 1 BY 1
|
||||
UNTIL WRK-JDX > WRK-TARIFF-COUNT
|
||||
DISPLAY " " TP-CODE(WRK-JDX)
|
||||
" " TP-NAME(WRK-JDX)
|
||||
" BASE=" TP-BASE-FEE(WRK-JDX)
|
||||
" UNIT=" TP-UNIT-PRICE(WRK-JDX)
|
||||
" FREE=" TP-FREE-SEC(WRK-JDX)
|
||||
END-PERFORM.
|
||||
EXIT.
|
||||
|
||||
0300-LOAD-TEST-DATA SECTION.
|
||||
MOVE 8 TO CDR-TEST-COUNT.
|
||||
|
||||
MOVE "CDR0000001" TO TE-ID(1)
|
||||
MOVE "86138001380" TO TE-CALLER(1)
|
||||
MOVE "86139009990" TO TE-CALLEE(1)
|
||||
MOVE "20250601083000" TO TE-START(1)
|
||||
MOVE 120 TO TE-DURATION(1)
|
||||
MOVE "01" TO TE-TYPE(1)
|
||||
MOVE "N" TO TE-ROAM(1)
|
||||
|
||||
MOVE "CDR0000002" TO TE-ID(2)
|
||||
MOVE "86138001380" TO TE-CALLER(2)
|
||||
MOVE "86137007770" TO TE-CALLEE(2)
|
||||
MOVE "20250601084500" TO TE-START(2)
|
||||
MOVE 45 TO TE-DURATION(2)
|
||||
MOVE "01" TO TE-TYPE(2)
|
||||
MOVE "N" TO TE-ROAM(2)
|
||||
|
||||
MOVE "CDR0000003" TO TE-ID(3)
|
||||
MOVE "86138001380" TO TE-CALLER(3)
|
||||
MOVE "86136006660" TO TE-CALLEE(3)
|
||||
MOVE "20250601090000" TO TE-START(3)
|
||||
MOVE 300 TO TE-DURATION(3)
|
||||
MOVE "01" TO TE-TYPE(3)
|
||||
MOVE "N" TO TE-ROAM(3)
|
||||
|
||||
MOVE "CDR0000004" TO TE-ID(4)
|
||||
MOVE "86139002100" TO TE-CALLER(4)
|
||||
MOVE "86138001380" TO TE-CALLEE(4)
|
||||
MOVE "20250601100000" TO TE-START(4)
|
||||
MOVE 600 TO TE-DURATION(4)
|
||||
MOVE "01" TO TE-TYPE(4)
|
||||
MOVE "N" TO TE-ROAM(4)
|
||||
|
||||
MOVE "CDR0000005" TO TE-ID(5)
|
||||
MOVE "86139002100" TO TE-CALLER(5)
|
||||
MOVE "86138001380" TO TE-CALLEE(5)
|
||||
MOVE "20250601110000" TO TE-START(5)
|
||||
MOVE 1 TO TE-DURATION(5)
|
||||
MOVE "02" TO TE-TYPE(5)
|
||||
MOVE "N" TO TE-ROAM(5)
|
||||
|
||||
MOVE "CDR0000006" TO TE-ID(6)
|
||||
MOVE "86137005500" TO TE-CALLER(6)
|
||||
MOVE "86139002100" TO TE-CALLEE(6)
|
||||
MOVE "20250601120000" TO TE-START(6)
|
||||
MOVE 1200 TO TE-DURATION(6)
|
||||
MOVE "01" TO TE-TYPE(6)
|
||||
MOVE "Y" TO TE-ROAM(6)
|
||||
|
||||
MOVE "CDR0000007" TO TE-ID(7)
|
||||
MOVE "86138001380" TO TE-CALLER(7)
|
||||
MOVE "86136006660" TO TE-CALLEE(7)
|
||||
MOVE "20250601130000" TO TE-START(7)
|
||||
MOVE 900 TO TE-DURATION(7)
|
||||
MOVE "03" TO TE-TYPE(7)
|
||||
MOVE "N" TO TE-ROAM(7)
|
||||
|
||||
MOVE "CDR0000008" TO TE-ID(8)
|
||||
MOVE "86137005500" TO TE-CALLER(8)
|
||||
MOVE "86135005550" TO TE-CALLEE(8)
|
||||
MOVE "20250601140000" TO TE-START(8)
|
||||
MOVE 1800 TO TE-DURATION(8)
|
||||
MOVE "01" TO TE-TYPE(8)
|
||||
MOVE "N" TO TE-ROAM(8)
|
||||
|
||||
DISPLAY "CDR-DATA: " CDR-TEST-COUNT " records loaded".
|
||||
EXIT.
|
||||
|
||||
0400-PROCESS-CDR SECTION.
|
||||
MOVE TE-ID(WRK-IDX) TO CDR-ID OF CDR-REC.
|
||||
MOVE TE-CALLER(WRK-IDX) TO CDR-CALLER.
|
||||
MOVE TE-CALLEE(WRK-IDX) TO CDR-CALLEE.
|
||||
MOVE TE-START(WRK-IDX) TO CDR-START.
|
||||
MOVE TE-DURATION(WRK-IDX) TO CDR-DURATION.
|
||||
MOVE TE-TYPE(WRK-IDX) TO CDR-CALL-TYPE.
|
||||
MOVE TE-ROAM(WRK-IDX) TO CDR-ROAM-FLAG.
|
||||
|
||||
ADD 1 TO WRK-REC-COUNT.
|
||||
ADD 1 TO WRK-TOTAL-COUNT.
|
||||
|
||||
MOVE 'N' TO CALC-FOUND.
|
||||
MOVE "P01" TO CALC-PLAN-CODE.
|
||||
PERFORM VARYING WRK-JDX FROM 1 BY 1
|
||||
UNTIL WRK-JDX > WRK-TARIFF-COUNT
|
||||
IF CDR-ID(1:3) = TP-CODE(WRK-JDX)(1:3)
|
||||
MOVE "P01" TO CALC-PLAN-CODE
|
||||
MOVE 'Y' TO CALC-FOUND
|
||||
MOVE WRK-JDX TO CALC-TP-IDX
|
||||
EXIT PERFORM
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
|
||||
IF NOT CALC-FOUND-YES
|
||||
MOVE 1 TO CALC-TP-IDX
|
||||
END-IF.
|
||||
|
||||
MOVE CDR-CALL-TYPE TO CALC-CALL-TYPE.
|
||||
MOVE CDR-ROAM-FLAG TO CALC-ROAM-FLAG.
|
||||
MOVE CDR-DURATION TO CALC-DURATION.
|
||||
|
||||
EVALUATE CALC-CALL-TYPE
|
||||
WHEN "01"
|
||||
PERFORM 0500-VOICE-CHARGE
|
||||
WHEN "02"
|
||||
PERFORM 0510-SMS-CHARGE
|
||||
WHEN "03"
|
||||
PERFORM 0520-DATA-CHARGE
|
||||
WHEN OTHER
|
||||
MOVE CON-FLAG-ON TO WB-LOOP-FLAG
|
||||
DISPLAY "ERROR: Invalid call type "
|
||||
CALC-CALL-TYPE " for " CDR-ID
|
||||
ADD 1 TO SUM-ERROR-COUNT
|
||||
END-EVALUATE.
|
||||
|
||||
IF WB-LOOP-FLAG NOT = CON-FLAG-ON
|
||||
PERFORM 0600-WRITE-BILLING
|
||||
END-IF.
|
||||
|
||||
IF WRK-REC-COUNT >= CON-COMMIT-MAX
|
||||
DISPLAY "COMMIT: " WRK-REC-COUNT " records"
|
||||
MOVE ZERO TO WRK-REC-COUNT
|
||||
PERFORM 0700-CHECKPOINT
|
||||
END-IF.
|
||||
EXIT.
|
||||
|
||||
0500-VOICE-CHARGE SECTION.
|
||||
COMPUTE CALC-FREE-MIN =
|
||||
TP-FREE-SEC(CALC-TP-IDX) * 60.
|
||||
|
||||
IF CALC-DURATION <= CALC-FREE-MIN
|
||||
MOVE ZERO TO CALC-OVER-SEC
|
||||
MOVE ZERO TO CALC-OVER-CHARGE
|
||||
ELSE
|
||||
COMPUTE CALC-OVER-SEC =
|
||||
CALC-DURATION - CALC-FREE-MIN
|
||||
COMPUTE CALC-OVER-CHARGE =
|
||||
CALC-OVER-SEC * TP-OVER-PRICE(CALC-TP-IDX)
|
||||
END-IF.
|
||||
|
||||
COMPUTE CALC-BASE-CHARGE =
|
||||
CALC-FREE-MIN * TP-UNIT-PRICE(CALC-TP-IDX).
|
||||
|
||||
IF CDR-ROAM-FLAG = 'Y'
|
||||
COMPUTE CALC-ROAM-CHARGE =
|
||||
CALC-DURATION * TP-ROAM-PRICE(CALC-TP-IDX)
|
||||
ELSE
|
||||
MOVE ZERO TO CALC-ROAM-CHARGE
|
||||
END-IF.
|
||||
|
||||
COMPUTE CALC-TOTAL-CHARGE =
|
||||
CALC-BASE-CHARGE + CALC-OVER-CHARGE
|
||||
+ CALC-ROAM-CHARGE.
|
||||
EXIT.
|
||||
|
||||
0510-SMS-CHARGE SECTION.
|
||||
MOVE ZERO TO CALC-FREE-MIN.
|
||||
MOVE ZERO TO CALC-OVER-SEC.
|
||||
MOVE ZERO TO CALC-BASE-CHARGE.
|
||||
MOVE ZERO TO CALC-OVER-CHARGE.
|
||||
MOVE TP-SMS-PRICE(CALC-TP-IDX) TO CALC-ROAM-CHARGE.
|
||||
MOVE CALC-ROAM-CHARGE TO CALC-TOTAL-CHARGE.
|
||||
EXIT.
|
||||
|
||||
0520-DATA-CHARGE SECTION.
|
||||
MOVE ZERO TO CALC-FREE-MIN.
|
||||
COMPUTE CALC-OVER-SEC = CALC-DURATION.
|
||||
COMPUTE CALC-OVER-CHARGE =
|
||||
CALC-DURATION * TP-DATA-PRICE(CALC-TP-IDX) / 1000.
|
||||
MOVE ZERO TO CALC-BASE-CHARGE.
|
||||
MOVE ZERO TO CALC-ROAM-CHARGE.
|
||||
MOVE CALC-OVER-CHARGE TO CALC-TOTAL-CHARGE.
|
||||
EXIT.
|
||||
|
||||
0600-WRITE-BILLING SECTION.
|
||||
MOVE CDR-ID TO BLL-CALL-ID OF BLL-REC.
|
||||
MOVE CDR-CALLER TO BLL-CUST-ID OF BLL-REC.
|
||||
MOVE CALC-PLAN-CODE TO BLL-PLAN-CODE OF BLL-REC.
|
||||
MOVE CALC-CALL-TYPE TO BLL-CALL-TYPE OF BLL-REC.
|
||||
MOVE CALC-DURATION TO BLL-DURATION OF BLL-REC.
|
||||
MOVE CALC-FREE-MIN TO BLL-FREE-MIN OF BLL-REC.
|
||||
MOVE CALC-OVER-SEC TO BLL-OVER-USAGE OF BLL-REC.
|
||||
MOVE TP-UNIT-PRICE(CALC-TP-IDX) TO BLL-UNIT-PRICE.
|
||||
MOVE CALC-BASE-CHARGE TO BLL-BASE-CHARGE.
|
||||
MOVE CALC-OVER-CHARGE TO BLL-OVER-CHARGE.
|
||||
MOVE CALC-ROAM-CHARGE TO BLL-ROAM-CHARGE.
|
||||
MOVE CALC-TOTAL-CHARGE TO BLL-TOTAL-CHARGE.
|
||||
MOVE "0" TO BLL-STATUS.
|
||||
|
||||
ADD CALC-TOTAL-CHARGE TO SUM-CHARGE.
|
||||
ADD CALC-BASE-CHARGE TO SUM-BASE.
|
||||
ADD CALC-OVER-CHARGE TO SUM-OVER.
|
||||
ADD CALC-ROAM-CHARGE TO SUM-ROAM.
|
||||
ADD 1 TO SUM-COUNT.
|
||||
ADD 1 TO WRK-PROC-COUNT.
|
||||
|
||||
DISPLAY "BILL: " BLL-CALL-ID OF BLL-REC
|
||||
" PLAN:" BLL-PLAN-CODE OF BLL-REC
|
||||
" TYPE:" BLL-CALL-TYPE OF BLL-REC
|
||||
" DUR:" BLL-DURATION OF BLL-REC
|
||||
" FREE:" BLL-FREE-MIN OF BLL-REC
|
||||
" OVER:" BLL-OVER-USAGE OF BLL-REC
|
||||
" BASE:" BLL-BASE-CHARGE OF BLL-REC
|
||||
" OVER-C:" BLL-OVER-CHARGE OF BLL-REC
|
||||
" ROAM:" BLL-ROAM-CHARGE OF BLL-REC
|
||||
" TOTAL:" BLL-TOTAL-CHARGE OF BLL-REC.
|
||||
EXIT.
|
||||
|
||||
0700-CHECKPOINT SECTION.
|
||||
DISPLAY "CHKPT: TOTAL=" WRK-TOTAL-COUNT
|
||||
" PROC=" WRK-PROC-COUNT
|
||||
" BATCH=" WRK-LOOP-COUNT
|
||||
DISPLAY "CHKPT-POINT checkpoint registered".
|
||||
EXIT.
|
||||
|
||||
0800-SUMMARY SECTION.
|
||||
DISPLAY " "
|
||||
DISPLAY "=== BILLING SUMMARY ==="
|
||||
DISPLAY "TOTAL CDRs: " WRK-TOTAL-COUNT
|
||||
DISPLAY "BILLED CDRs: " SUM-COUNT
|
||||
DISPLAY "ERROR CDRs: " SUM-ERROR-COUNT
|
||||
DISPLAY " "
|
||||
DISPLAY "BASE CHARGE: " SUM-BASE
|
||||
DISPLAY "OVER CHARGE: " SUM-OVER
|
||||
DISPLAY "ROAM CHARGE: " SUM-ROAM
|
||||
DISPLAY "TOTAL CHARGE: " SUM-CHARGE
|
||||
DISPLAY " "
|
||||
DISPLAY "=== NORMAL END ===".
|
||||
EXIT.
|
||||
|
||||
END PROGRAM TA-TELAMTCAL.
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,520 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. TA-TELAMTCAL.
|
||||
**
|
||||
* システム名 : 共通請求基盤システム
|
||||
* サブシステム名: 料金計算システム
|
||||
* プログラム名 : 金額計算制御
|
||||
* プログラムID : TA-TELAMTCAL
|
||||
* 作成日 : 2026-06-22
|
||||
* 処理概要 : 料金プランに基づき通話明細から
|
||||
* 金額計算を行い課金明細を生成する。
|
||||
* 処理方式 : 標準バッチフレームワーク準拠
|
||||
* トランザクション管理 + CHECKPOINT制御
|
||||
* 修正履歴 :
|
||||
* V1.000:2026/06/22:新規作成
|
||||
**
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-370.
|
||||
OBJECT-COMPUTER. IBM-370.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
**
|
||||
* 定数定義
|
||||
**
|
||||
01 CON-FLAG-ON PIC S9(04) COMP VALUE 1.
|
||||
01 CON-FLAG-OFF PIC S9(04) COMP VALUE 0.
|
||||
01 CON-STATUS-ON PIC S9(08) COMP VALUE 1.
|
||||
01 CON-STATUS-OFF PIC S9(08) COMP VALUE 0.
|
||||
01 CON-NORMAL PIC S9(04) COMP VALUE 0.
|
||||
01 CON-ADD-COUNT PIC 9(04) COMP VALUE 1.
|
||||
01 CON-ADD-TOTAL-COUNT PIC 9(04) COMP VALUE 1.
|
||||
01 CON-COMMIT-MAX PIC 9(04) COMP VALUE 5.
|
||||
|
||||
* 作業領域
|
||||
01 WRK-FLAGS.
|
||||
03 WB-ERROR-FLAG PIC S9(04) COMP.
|
||||
03 WB-LOOP-FLAG PIC S9(04) COMP.
|
||||
01 WRK-PARAM-COUNT PIC 9(04) COMP.
|
||||
01 WRK-TOTAL-COUNT PIC 9(08) COMP.
|
||||
01 WRK-LOOP-COUNT PIC 9(04) COMP.
|
||||
01 WRK-PROC-COUNT PIC 9(08) COMP.
|
||||
01 WRK-REC-COUNT PIC 9(08) COMP.
|
||||
01 WRK-IDX PIC 9(02) COMP.
|
||||
01 WRK-JDX PIC 9(02) COMP.
|
||||
01 WRK-EMS-RET PIC S9(04) COMP.
|
||||
01 WRK-ABEND-COD PIC S9(04) COMP.
|
||||
|
||||
* 料金テーブル
|
||||
01 WRK-TARIFF-COUNT PIC 9(02) COMP VALUE 5.
|
||||
01 WRK-TARIFF-TABLE.
|
||||
03 WRK-TP-ENTRY OCCURS 5 TIMES.
|
||||
05 TP-CODE PIC X(03).
|
||||
05 TP-NAME PIC X(08).
|
||||
05 TP-BASE-FEE PIC 9(09) COMP.
|
||||
05 TP-UNIT-PRICE PIC 9(04) COMP.
|
||||
05 TP-FREE-SEC PIC 9(09) COMP.
|
||||
05 TP-OVER-PRICE PIC 9(04) COMP.
|
||||
05 TP-ROAM-PRICE PIC 9(04) COMP.
|
||||
05 TP-SMS-PRICE PIC 9(04) COMP.
|
||||
05 TP-DATA-PRICE PIC 9(04) COMP.
|
||||
|
||||
* CDRレコード
|
||||
01 CDR-REC.
|
||||
03 CDR-ID PIC X(10).
|
||||
03 CDR-CALLER PIC X(11).
|
||||
03 CDR-CALLEE PIC X(11).
|
||||
03 CDR-START PIC X(14).
|
||||
03 CDR-DURATION PIC 9(09) COMP.
|
||||
03 CDR-CALL-TYPE PIC X(02).
|
||||
03 CDR-ROAM-FLAG PIC X(01).
|
||||
|
||||
* 課金明細レコード
|
||||
01 BLL-REC.
|
||||
03 BLL-CALL-ID PIC X(10).
|
||||
03 BLL-CUST-ID PIC X(10).
|
||||
03 BLL-PLAN-CODE PIC X(03).
|
||||
03 BLL-CALL-TYPE PIC X(02).
|
||||
03 BLL-DURATION PIC 9(09) COMP.
|
||||
03 BLL-FREE-MIN PIC 9(09) COMP.
|
||||
03 BLL-OVER-USAGE PIC 9(09) COMP.
|
||||
03 BLL-UNIT-PRICE PIC 9(04) COMP.
|
||||
03 BLL-BASE-CHARGE PIC 9(09) COMP.
|
||||
03 BLL-OVER-CHARGE PIC 9(09) COMP.
|
||||
03 BLL-ROAM-CHARGE PIC 9(09) COMP.
|
||||
03 BLL-TOTAL-CHARGE PIC 9(09) COMP.
|
||||
03 BLL-STATUS PIC X(01).
|
||||
|
||||
* 計算用ワーク
|
||||
01 CALC-AREA.
|
||||
03 CALC-DURATION PIC 9(09) COMP.
|
||||
03 CALC-FREE-MIN PIC 9(09) COMP.
|
||||
03 CALC-OVER-SEC PIC 9(09) COMP.
|
||||
03 CALC-UNIT-PRICE PIC 9(04) COMP.
|
||||
03 CALC-BASE-CHARGE PIC 9(09) COMP.
|
||||
03 CALC-OVER-CHARGE PIC 9(09) COMP.
|
||||
03 CALC-ROAM-CHARGE PIC 9(09) COMP.
|
||||
03 CALC-TOTAL-CHARGE PIC 9(09) COMP.
|
||||
03 CALC-TP-IDX PIC 9(02) COMP.
|
||||
03 CALC-FOUND PIC X(01).
|
||||
88 CALC-FOUND-YES VALUE 'Y'.
|
||||
03 CALC-PLAN-CODE PIC X(03).
|
||||
03 CALC-CALL-TYPE PIC X(02).
|
||||
03 CALC-ROAM-FLAG PIC X(01).
|
||||
|
||||
* 集計エリア(表示用はDISPLAY形式で定義)
|
||||
01 SUM-CHARGE PIC 9(15) VALUE 0.
|
||||
01 SUM-BASE PIC 9(15) VALUE 0.
|
||||
01 SUM-OVER PIC 9(15) VALUE 0.
|
||||
01 SUM-ROAM PIC 9(15) VALUE 0.
|
||||
01 SUM-COUNT PIC 9(09) VALUE 0.
|
||||
01 SUM-ERROR-COUNT PIC 9(09) VALUE 0.
|
||||
|
||||
* 試験用CDRデータ(8件)
|
||||
01 CDR-TEST-COUNT PIC 9(02) COMP VALUE 8.
|
||||
01 CDR-TEST-DATA.
|
||||
03 CDR-TEST-ENTRY OCCURS 8 TIMES.
|
||||
05 TE-ID PIC X(10).
|
||||
05 TE-CALLER PIC X(11).
|
||||
05 TE-CALLEE PIC X(11).
|
||||
05 TE-START PIC X(14).
|
||||
05 TE-DURATION PIC 9(09) COMP.
|
||||
05 TE-TYPE PIC X(02).
|
||||
05 TE-ROAM PIC X(01).
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
|
||||
**
|
||||
* 0000-MAIN: メイン制御部
|
||||
* CHECKPOINT/RERUN対応、トランザクション管理、
|
||||
* レート計算、DB書込をシーケンシャルに実行
|
||||
**
|
||||
0000-MAIN SECTION.
|
||||
DISPLAY "TA-TELAMTCAL: Starting"
|
||||
DISPLAY "Batch Amount Calculation Program"
|
||||
DISPLAY "Telecom Amount Calculation System"
|
||||
|
||||
* フェーズ1: 初期化
|
||||
PERFORM 0100-INIT.
|
||||
|
||||
* フェーズ2: 料金テーブルロード
|
||||
PERFORM 0200-LOAD-TARIFF.
|
||||
|
||||
* フェーズ3: 試験データロード
|
||||
PERFORM 0300-LOAD-TEST-DATA.
|
||||
|
||||
* フェーズ4: 主処理ループ(CDR → レート計算 → DB書込)
|
||||
PERFORM VARYING WRK-IDX FROM 1 BY 1
|
||||
UNTIL WRK-IDX > CDR-TEST-COUNT
|
||||
OR WB-LOOP-FLAG = CON-FLAG-ON
|
||||
PERFORM 0400-PROCESS-CDR
|
||||
END-PERFORM.
|
||||
|
||||
* フェーズ5: チェックポイント登録
|
||||
PERFORM 0700-CHECKPOINT.
|
||||
|
||||
* フェーズ6: 集計報告
|
||||
PERFORM 0800-SUMMARY.
|
||||
|
||||
DISPLAY "TA-TELAMTCAL: Normal end"
|
||||
DISPLAY "PROCESSED: " SUM-COUNT
|
||||
" TOTAL-CHARGE: " SUM-CHARGE
|
||||
STOP RUN.
|
||||
|
||||
**
|
||||
* 0100-INIT: 定数初期化、作業領域初期化
|
||||
**
|
||||
0100-INIT SECTION.
|
||||
MOVE CON-FLAG-OFF TO WB-LOOP-FLAG.
|
||||
MOVE CON-NORMAL TO WB-ERROR-FLAG.
|
||||
MOVE CON-STATUS-OFF TO WB-ERROR-FLAG.
|
||||
MOVE ZERO TO WRK-TOTAL-COUNT.
|
||||
MOVE ZERO TO WRK-LOOP-COUNT.
|
||||
MOVE ZERO TO WRK-REC-COUNT.
|
||||
MOVE ZERO TO WRK-PROC-COUNT.
|
||||
MOVE ZERO TO SUM-COUNT
|
||||
MOVE ZERO TO SUM-ERROR-COUNT
|
||||
MOVE ZERO TO SUM-CHARGE
|
||||
MOVE ZERO TO SUM-BASE
|
||||
MOVE ZERO TO SUM-OVER
|
||||
MOVE ZERO TO SUM-ROAM
|
||||
DISPLAY "INIT: OK".
|
||||
EXIT.
|
||||
|
||||
**
|
||||
* 0200-LOAD-TARIFF: 料金テーブルロード
|
||||
* 5プランの料金体系をメモリテーブルに設定
|
||||
**
|
||||
0200-LOAD-TARIFF SECTION.
|
||||
MOVE 5 TO WRK-TARIFF-COUNT.
|
||||
|
||||
MOVE "P01" TO TP-CODE(1)
|
||||
MOVE "BASIC" TO TP-NAME(1)
|
||||
MOVE 3000 TO TP-BASE-FEE(1)
|
||||
MOVE 20 TO TP-UNIT-PRICE(1)
|
||||
MOVE 6000 TO TP-FREE-SEC(1)
|
||||
MOVE 20 TO TP-OVER-PRICE(1)
|
||||
MOVE 50 TO TP-ROAM-PRICE(1)
|
||||
MOVE 10 TO TP-SMS-PRICE(1)
|
||||
MOVE 30 TO TP-DATA-PRICE(1)
|
||||
|
||||
MOVE "P02" TO TP-CODE(2)
|
||||
MOVE "BUSINESS" TO TP-NAME(2)
|
||||
MOVE 8000 TO TP-BASE-FEE(2)
|
||||
MOVE 10 TO TP-UNIT-PRICE(2)
|
||||
MOVE 30000 TO TP-FREE-SEC(2)
|
||||
MOVE 15 TO TP-OVER-PRICE(2)
|
||||
MOVE 30 TO TP-ROAM-PRICE(2)
|
||||
MOVE 5 TO TP-SMS-PRICE(2)
|
||||
MOVE 20 TO TP-DATA-PRICE(2)
|
||||
|
||||
MOVE "P03" TO TP-CODE(3)
|
||||
MOVE "UNLIMIT" TO TP-NAME(3)
|
||||
MOVE 20000 TO TP-BASE-FEE(3)
|
||||
MOVE 5 TO TP-UNIT-PRICE(3)
|
||||
MOVE 120000 TO TP-FREE-SEC(3)
|
||||
MOVE 5 TO TP-OVER-PRICE(3)
|
||||
MOVE 20 TO TP-ROAM-PRICE(3)
|
||||
MOVE 3 TO TP-SMS-PRICE(3)
|
||||
MOVE 10 TO TP-DATA-PRICE(3)
|
||||
|
||||
MOVE "P04" TO TP-CODE(4)
|
||||
MOVE "DATA-ONLY" TO TP-NAME(4)
|
||||
MOVE 5000 TO TP-BASE-FEE(4)
|
||||
MOVE 0 TO TP-UNIT-PRICE(4)
|
||||
MOVE 0 TO TP-FREE-SEC(4)
|
||||
MOVE 0 TO TP-OVER-PRICE(4)
|
||||
MOVE 0 TO TP-ROAM-PRICE(4)
|
||||
MOVE 0 TO TP-SMS-PRICE(4)
|
||||
MOVE 20 TO TP-DATA-PRICE(4)
|
||||
|
||||
MOVE "P05" TO TP-CODE(5)
|
||||
MOVE "CHEAP" TO TP-NAME(5)
|
||||
MOVE 1000 TO TP-BASE-FEE(5)
|
||||
MOVE 30 TO TP-UNIT-PRICE(5)
|
||||
MOVE 1800 TO TP-FREE-SEC(5)
|
||||
MOVE 30 TO TP-OVER-PRICE(5)
|
||||
MOVE 150 TO TP-ROAM-PRICE(5)
|
||||
MOVE 100 TO TP-SMS-PRICE(5)
|
||||
MOVE 50 TO TP-DATA-PRICE(5)
|
||||
|
||||
DISPLAY "TARIFF: " WRK-TARIFF-COUNT " plans loaded".
|
||||
PERFORM VARYING WRK-JDX FROM 1 BY 1
|
||||
UNTIL WRK-JDX > WRK-TARIFF-COUNT
|
||||
DISPLAY " " TP-CODE(WRK-JDX)
|
||||
" " TP-NAME(WRK-JDX)
|
||||
" BASE=" TP-BASE-FEE(WRK-JDX)
|
||||
" UNIT=" TP-UNIT-PRICE(WRK-JDX)
|
||||
" FREE=" TP-FREE-SEC(WRK-JDX)
|
||||
END-PERFORM.
|
||||
EXIT.
|
||||
|
||||
**
|
||||
* 0300-LOAD-TEST-DATA: 試験CDRデータロード
|
||||
* 8件のCDRを内部テーブルにセット
|
||||
**
|
||||
0300-LOAD-TEST-DATA SECTION.
|
||||
MOVE 8 TO CDR-TEST-COUNT.
|
||||
|
||||
MOVE "CDR0000001" TO TE-ID(1)
|
||||
MOVE "86138001380" TO TE-CALLER(1)
|
||||
MOVE "86139009990" TO TE-CALLEE(1)
|
||||
MOVE "20250601083000" TO TE-START(1)
|
||||
MOVE 120 TO TE-DURATION(1)
|
||||
MOVE "01" TO TE-TYPE(1)
|
||||
MOVE "N" TO TE-ROAM(1)
|
||||
|
||||
MOVE "CDR0000002" TO TE-ID(2)
|
||||
MOVE "86138001380" TO TE-CALLER(2)
|
||||
MOVE "86137007770" TO TE-CALLEE(2)
|
||||
MOVE "20250601084500" TO TE-START(2)
|
||||
MOVE 45 TO TE-DURATION(2)
|
||||
MOVE "01" TO TE-TYPE(2)
|
||||
MOVE "N" TO TE-ROAM(2)
|
||||
|
||||
MOVE "CDR0000003" TO TE-ID(3)
|
||||
MOVE "86138001380" TO TE-CALLER(3)
|
||||
MOVE "86136006660" TO TE-CALLEE(3)
|
||||
MOVE "20250601090000" TO TE-START(3)
|
||||
MOVE 300 TO TE-DURATION(3)
|
||||
MOVE "01" TO TE-TYPE(3)
|
||||
MOVE "N" TO TE-ROAM(3)
|
||||
|
||||
MOVE "CDR0000004" TO TE-ID(4)
|
||||
MOVE "86139002100" TO TE-CALLER(4)
|
||||
MOVE "86138001380" TO TE-CALLEE(4)
|
||||
MOVE "20250601100000" TO TE-START(4)
|
||||
MOVE 600 TO TE-DURATION(4)
|
||||
MOVE "01" TO TE-TYPE(4)
|
||||
MOVE "N" TO TE-ROAM(4)
|
||||
|
||||
MOVE "CDR0000005" TO TE-ID(5)
|
||||
MOVE "86139002100" TO TE-CALLER(5)
|
||||
MOVE "86138001380" TO TE-CALLEE(5)
|
||||
MOVE "20250601110000" TO TE-START(5)
|
||||
MOVE 1 TO TE-DURATION(5)
|
||||
MOVE "02" TO TE-TYPE(5)
|
||||
MOVE "N" TO TE-ROAM(5)
|
||||
|
||||
MOVE "CDR0000006" TO TE-ID(6)
|
||||
MOVE "86137005500" TO TE-CALLER(6)
|
||||
MOVE "86139002100" TO TE-CALLEE(6)
|
||||
MOVE "20250601120000" TO TE-START(6)
|
||||
MOVE 1200 TO TE-DURATION(6)
|
||||
MOVE "01" TO TE-TYPE(6)
|
||||
MOVE "Y" TO TE-ROAM(6)
|
||||
|
||||
MOVE "CDR0000007" TO TE-ID(7)
|
||||
MOVE "86138001380" TO TE-CALLER(7)
|
||||
MOVE "86136006660" TO TE-CALLEE(7)
|
||||
MOVE "20250601130000" TO TE-START(7)
|
||||
MOVE 900 TO TE-DURATION(7)
|
||||
MOVE "03" TO TE-TYPE(7)
|
||||
MOVE "N" TO TE-ROAM(7)
|
||||
|
||||
MOVE "CDR0000008" TO TE-ID(8)
|
||||
MOVE "86137005500" TO TE-CALLER(8)
|
||||
MOVE "86135005550" TO TE-CALLEE(8)
|
||||
MOVE "20250601140000" TO TE-START(8)
|
||||
MOVE 1800 TO TE-DURATION(8)
|
||||
MOVE "01" TO TE-TYPE(8)
|
||||
MOVE "N" TO TE-ROAM(8)
|
||||
|
||||
DISPLAY "CDR-DATA: " CDR-TEST-COUNT " records loaded".
|
||||
EXIT.
|
||||
|
||||
**
|
||||
* 0400-PROCESS-CDR: CDR処理制御
|
||||
* CDR1件に対して: 料金テーブル検索 → 種別別課金
|
||||
* → ローミング割増 → 課金明細出力 → コミット制御
|
||||
**
|
||||
0400-PROCESS-CDR SECTION.
|
||||
* CDRレコード転送
|
||||
MOVE TE-ID(WRK-IDX) TO CDR-ID OF CDR-REC.
|
||||
MOVE TE-CALLER(WRK-IDX) TO CDR-CALLER.
|
||||
MOVE TE-CALLEE(WRK-IDX) TO CDR-CALLEE.
|
||||
MOVE TE-START(WRK-IDX) TO CDR-START.
|
||||
MOVE TE-DURATION(WRK-IDX) TO CDR-DURATION.
|
||||
MOVE TE-TYPE(WRK-IDX) TO CDR-CALL-TYPE.
|
||||
MOVE TE-ROAM(WRK-IDX) TO CDR-ROAM-FLAG.
|
||||
|
||||
ADD 1 TO WRK-REC-COUNT.
|
||||
ADD 1 TO WRK-TOTAL-COUNT.
|
||||
|
||||
* 料金プラン検索
|
||||
MOVE 'N' TO CALC-FOUND.
|
||||
MOVE "P01" TO CALC-PLAN-CODE.
|
||||
PERFORM VARYING WRK-JDX FROM 1 BY 1
|
||||
UNTIL WRK-JDX > WRK-TARIFF-COUNT
|
||||
IF CDR-ID(1:3) = TP-CODE(WRK-JDX)(1:3)
|
||||
MOVE "P01" TO CALC-PLAN-CODE
|
||||
MOVE 'Y' TO CALC-FOUND
|
||||
MOVE WRK-JDX TO CALC-TP-IDX
|
||||
EXIT PERFORM
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
|
||||
IF NOT CALC-FOUND-YES
|
||||
MOVE 1 TO CALC-TP-IDX
|
||||
END-IF.
|
||||
|
||||
* 種別別課金処理
|
||||
MOVE CDR-CALL-TYPE TO CALC-CALL-TYPE.
|
||||
MOVE CDR-ROAM-FLAG TO CALC-ROAM-FLAG.
|
||||
MOVE CDR-DURATION TO CALC-DURATION.
|
||||
|
||||
EVALUATE CALC-CALL-TYPE
|
||||
WHEN "01"
|
||||
PERFORM 0500-VOICE-CHARGE
|
||||
WHEN "02"
|
||||
PERFORM 0510-SMS-CHARGE
|
||||
WHEN "03"
|
||||
PERFORM 0520-DATA-CHARGE
|
||||
WHEN OTHER
|
||||
MOVE CON-FLAG-ON TO WB-LOOP-FLAG
|
||||
DISPLAY "ERROR: Invalid call type "
|
||||
CALC-CALL-TYPE " for " CDR-ID
|
||||
ADD 1 TO SUM-ERROR-COUNT
|
||||
END-EVALUATE.
|
||||
|
||||
* 課金明細出力
|
||||
IF WB-LOOP-FLAG NOT = CON-FLAG-ON
|
||||
PERFORM 0600-WRITE-BILLING
|
||||
END-IF.
|
||||
|
||||
* コミット制御
|
||||
IF WRK-REC-COUNT >= CON-COMMIT-MAX
|
||||
DISPLAY "COMMIT: " WRK-REC-COUNT " records"
|
||||
MOVE ZERO TO WRK-REC-COUNT
|
||||
PERFORM 0700-CHECKPOINT
|
||||
END-IF.
|
||||
EXIT.
|
||||
|
||||
**
|
||||
* 0500-VOICE-CHARGE: 音声通話課金計算
|
||||
* 無料通話枠 → 超過分 → 合計
|
||||
**
|
||||
0500-VOICE-CHARGE SECTION.
|
||||
COMPUTE CALC-FREE-MIN =
|
||||
TP-FREE-SEC(CALC-TP-IDX) * 60.
|
||||
|
||||
IF CALC-DURATION <= CALC-FREE-MIN
|
||||
MOVE ZERO TO CALC-OVER-SEC
|
||||
MOVE ZERO TO CALC-OVER-CHARGE
|
||||
ELSE
|
||||
COMPUTE CALC-OVER-SEC =
|
||||
CALC-DURATION - CALC-FREE-MIN
|
||||
COMPUTE CALC-OVER-CHARGE =
|
||||
CALC-OVER-SEC * TP-OVER-PRICE(CALC-TP-IDX)
|
||||
END-IF.
|
||||
|
||||
COMPUTE CALC-BASE-CHARGE =
|
||||
CALC-FREE-MIN * TP-UNIT-PRICE(CALC-TP-IDX).
|
||||
|
||||
IF CDR-ROAM-FLAG = 'Y'
|
||||
COMPUTE CALC-ROAM-CHARGE =
|
||||
CALC-DURATION * TP-ROAM-PRICE(CALC-TP-IDX)
|
||||
ELSE
|
||||
MOVE ZERO TO CALC-ROAM-CHARGE
|
||||
END-IF.
|
||||
|
||||
COMPUTE CALC-TOTAL-CHARGE =
|
||||
CALC-BASE-CHARGE + CALC-OVER-CHARGE
|
||||
+ CALC-ROAM-CHARGE.
|
||||
EXIT.
|
||||
|
||||
**
|
||||
* 0510-SMS-CHARGE: SMS課金(件数課金)
|
||||
**
|
||||
0510-SMS-CHARGE SECTION.
|
||||
MOVE ZERO TO CALC-FREE-MIN.
|
||||
MOVE ZERO TO CALC-OVER-SEC.
|
||||
MOVE ZERO TO CALC-BASE-CHARGE.
|
||||
MOVE ZERO TO CALC-OVER-CHARGE.
|
||||
MOVE TP-SMS-PRICE(CALC-TP-IDX) TO CALC-ROAM-CHARGE.
|
||||
MOVE CALC-ROAM-CHARGE TO CALC-TOTAL-CHARGE.
|
||||
EXIT.
|
||||
|
||||
**
|
||||
* 0520-DATA-CHARGE: データ通信課金(容量課金)
|
||||
**
|
||||
0520-DATA-CHARGE SECTION.
|
||||
MOVE ZERO TO CALC-FREE-MIN.
|
||||
COMPUTE CALC-OVER-SEC = CALC-DURATION.
|
||||
COMPUTE CALC-OVER-CHARGE =
|
||||
CALC-DURATION * TP-DATA-PRICE(CALC-TP-IDX) / 1000.
|
||||
MOVE ZERO TO CALC-BASE-CHARGE.
|
||||
MOVE ZERO TO CALC-ROAM-CHARGE.
|
||||
MOVE CALC-OVER-CHARGE TO CALC-TOTAL-CHARGE.
|
||||
EXIT.
|
||||
|
||||
**
|
||||
* 0600-WRITE-BILLING: 課金明細出力
|
||||
* 集計加算 + DISPLAY出力
|
||||
**
|
||||
0600-WRITE-BILLING SECTION.
|
||||
MOVE CDR-ID TO BLL-CALL-ID OF BLL-REC.
|
||||
MOVE CDR-CALLER TO BLL-CUST-ID OF BLL-REC.
|
||||
MOVE CALC-PLAN-CODE TO BLL-PLAN-CODE OF BLL-REC.
|
||||
MOVE CALC-CALL-TYPE TO BLL-CALL-TYPE OF BLL-REC.
|
||||
MOVE CALC-DURATION TO BLL-DURATION OF BLL-REC.
|
||||
MOVE CALC-FREE-MIN TO BLL-FREE-MIN OF BLL-REC.
|
||||
MOVE CALC-OVER-SEC TO BLL-OVER-USAGE OF BLL-REC.
|
||||
MOVE TP-UNIT-PRICE(CALC-TP-IDX) TO BLL-UNIT-PRICE.
|
||||
MOVE CALC-BASE-CHARGE TO BLL-BASE-CHARGE.
|
||||
MOVE CALC-OVER-CHARGE TO BLL-OVER-CHARGE.
|
||||
MOVE CALC-ROAM-CHARGE TO BLL-ROAM-CHARGE.
|
||||
MOVE CALC-TOTAL-CHARGE TO BLL-TOTAL-CHARGE.
|
||||
MOVE "0" TO BLL-STATUS.
|
||||
|
||||
* 集計加算
|
||||
ADD CALC-TOTAL-CHARGE TO SUM-CHARGE.
|
||||
ADD CALC-BASE-CHARGE TO SUM-BASE.
|
||||
ADD CALC-OVER-CHARGE TO SUM-OVER.
|
||||
ADD CALC-ROAM-CHARGE TO SUM-ROAM.
|
||||
ADD 1 TO SUM-COUNT.
|
||||
ADD 1 TO WRK-PROC-COUNT.
|
||||
|
||||
DISPLAY "BILL: " BLL-CALL-ID OF BLL-REC
|
||||
" PLAN:" BLL-PLAN-CODE OF BLL-REC
|
||||
" TYPE:" BLL-CALL-TYPE OF BLL-REC
|
||||
" DUR:" BLL-DURATION OF BLL-REC
|
||||
" FREE:" BLL-FREE-MIN OF BLL-REC
|
||||
" OVER:" BLL-OVER-USAGE OF BLL-REC
|
||||
" BASE:" BLL-BASE-CHARGE OF BLL-REC
|
||||
" OVER-C:" BLL-OVER-CHARGE OF BLL-REC
|
||||
" ROAM:" BLL-ROAM-CHARGE OF BLL-REC
|
||||
" TOTAL:" BLL-TOTAL-CHARGE OF BLL-REC.
|
||||
EXIT.
|
||||
|
||||
**
|
||||
* 0700-CHECKPOINT: チェックポイント登録
|
||||
* 処理中断再開用の状態保存
|
||||
**
|
||||
0700-CHECKPOINT SECTION.
|
||||
DISPLAY "CHKPT: TOTAL=" WRK-TOTAL-COUNT
|
||||
" PROC=" WRK-PROC-COUNT
|
||||
" BATCH=" WRK-LOOP-COUNT
|
||||
DISPLAY "CHKPT-POINT checkpoint registered".
|
||||
EXIT.
|
||||
|
||||
**
|
||||
* 0800-SUMMARY: 集計報告出力
|
||||
**
|
||||
0800-SUMMARY SECTION.
|
||||
DISPLAY " "
|
||||
DISPLAY "=== BILLING SUMMARY ==="
|
||||
DISPLAY "TOTAL CDRs: " WRK-TOTAL-COUNT
|
||||
DISPLAY "BILLED CDRs: " SUM-COUNT
|
||||
DISPLAY "ERROR CDRs: " SUM-ERROR-COUNT
|
||||
DISPLAY " "
|
||||
DISPLAY "BASE CHARGE: " SUM-BASE
|
||||
DISPLAY "OVER CHARGE: " SUM-OVER
|
||||
DISPLAY "ROAM CHARGE: " SUM-ROAM
|
||||
DISPLAY "TOTAL CHARGE: " SUM-CHARGE
|
||||
DISPLAY " "
|
||||
DISPLAY "=== NORMAL END ===".
|
||||
EXIT.
|
||||
|
||||
END PROGRAM TA-TELAMTCAL.
|
||||
Reference in New Issue
Block a user