Files
cobol-tna-system/基本設計書/03_給与計算システム_設計書(サブシステムC).md
T
qiuqiuqiu 75475b3fa1 Add Subsystem C (KYU01-09): all 9 programs, design docs, resource lists, DDL, COPY, coverage stats
KYU programs for payroll calculation:
  KYU01CVT - CSV conversion
  KYU02REG - attendance registration
  KYU03AGG - aggregation
  KYU04CAL - salary calculation
  KYU05DED - deduction calculation
  KYU06UPD - DB update
  KYU07DIV - division/pay-slip
  KYU08PRI - print output
  KYU09MRG - merge output

Includes:
  - Source programs (9 .cbl)
  - Compiled executables (9 .exe)
  - Detailed design docs (9 + sign-off)
  - Basic design doc (subsystem C overview)
  - Resource lists (9)
  - DDL schema (schema_kyu.sql)
  - COPY book (KYU99REC.cpy)
  - Coverage statistics update
  - DB definition update (STATUS values)
  - Overall system design document
2026-07-09 08:09:59 +08:00

45 KiB
Raw Blame History

給与計算システム 設計書(サブシステムC)

システム概要

本サブシステムは、社員マスタ・勤怠集計データ(サブシステムA・Bの出力)を基に給与計算を行い、 部門別分割出力・給与明細印刷・支給データ結合を実行する。 各COBOLプログラムは1プログラム=1パターンを原則とし、内部処理(Type 24/25/28)との併用のみ許容する。

サブシステム情報

項目 内容
サブシステムID KYU(給与→KYUryo
COBOLプログラム数 9
JCL数 6

システム定数

定数 説明
BASE-HOURS 160 月所定労働時間(20日×8h)(参考値、コード未使用)
INSURANCE-RATE 0.12345 社会保険料率(12.345%)(参考値、コード未使用)
TAX-BASIC-DEDUCTION 50000 基礎控除(月額50,000円)
OVERTIME-RATE 1.25 時間外労働割増率(25%増)
HOLIDAY-RATE 1.35 休日労働割増率(35%増)
MIDNIGHT-RATE 1.50 深夜労働割増率(50%増)

サブシステム間連携

連携データ 出力元 入力先 方式 備考
ABSENCE-SUMMARY(欠勤統計) A-サブシステム KIN08DBU KYUJ020 ファイル連携 月次欠勤集計(80B / 社員番号昇順)
OVT-MONTHLY(残業統計) B-サブシステム ZAN06UPD KYUJ020 DB参照(同一DB2インスタンス) 残業時間(DB2同一インスタンス内別スキーマ)
EMP-RECORD(社員固定長) KYU01CVT KYU02REG ファイル連携 CSV変換後(80B
ABSENCE-AGGREGATE(欠勤集約) KYU03AGG KYU04CAL ファイル連携 社員別集約後(80B
SALARY-DETAIL(給与明細) KYU04CAL KYU05DED / KYU06UPD ファイル連携 計算後給与(240B
SALARY-NET(差引支給) KYU05DED KYU06UPD / KYU07DIV / KYU08PRI / KYU09MRG ファイル連携 控除後支給額(200B
PAYMENT-DATA(支給データ) KYU09MRG 外部銀行システム ファイル連携 振込データ(200B

ファイル一覧

# ファイル名 編成 RECM サイズ 用途 区分
1 ABSENCE-SUMMARY SEQUENTIAL FB 80 欠勤統計(Aシステム出力) A連携
2 PAY-PARAM SEQUENTIAL FB 80 給与パラメータ(単価・控除率) 新規
3 EMP-RECORD SEQUENTIAL FB 80 社員マスタ固定長(CSV変換後) 新規
4 ABSENCE-AGGREGATE SEQUENTIAL FB 80 欠勤集約後(社員単位) 新規
5 SALARY-DETAIL SEQUENTIAL FB 240 給与明細(計算後) 新規
6 SALARY-NET SEQUENTIAL FB 200 差引支給額(控除後) 新規
7 PAYSLIP SEQUENTIAL FB 200 給与明細印刷イメージ 新規
8 BONUS-DATA SEQUENTIAL FB 200 賞与データ 新規
9 PAYMENT-DATA SEQUENTIAL FB 200 支給データ(銀行振込用) 新規
10 DEPT-OUT-01〜50 SEQUENTIAL FB 200 部門別分割出力(最大50ファイル) 新規
11 ERROR-LOG SEQUENTIAL VB 最大200 エラーレコード退避 A・B共用

DB二重対応

本サブシステムのDB操作はDB2の埋め込みSQL(EXEC SQL)で直接記述する。 社員マスタ(EMP-MASTER)と税率テーブル(TAX-TABLE)は同一DB2インスタンス内の別スキーマ(SALARYDB)で管理する。 BサブシステムのOVERTIME.DBも同一DB2インスタンスに存在するため、スキーマ名.テーブル名 でクロススキーマ参照可能。

共通関数利用方針

既存のサブプログラム(SUB01DAT~SUB05TIM)は本サブシステムでも利用する。 新たな共通関数は追加せず、各プログラム内でロジックを完結させる。


DB構成(SALARYDB

DB名称:給与計算データベース(SALARYDB)

テーブル1:EMP-MASTER(社員マスタテーブル)

カラム 内容
EMP-ID CHAR(8) 社員番号(PK
EMP-NAME VARCHAR(40) 社員名
DEPT-CODE CHAR(2) 部署コード(0150
REGION-CODE CHAR(2) 地域コード(0125、FYI用)
CATEGORY-CODE CHAR(3) 社員区分コード(001~100、FYI用)
BASE-SALARY DECIMAL(9,0) 基本給
HOURLY-RATE DECIMAL(7,0) 時給
DEPENDENT-COUNT SMALLINT 扶養人数
STATUS CHAR(1) 0=在籍 / 9=退職
UPDATED-AT TIMESTAMP 更新日時

テーブル2:TAX-TABLE(税率テーブル)

カラム 内容
TAX-FROM DECIMAL(9,0) 課税所得下限(PK
TAX-TO DECIMAL(9,0) 課税所得上限(PK
TAX-RATE DECIMAL(5,4) 税率(0.0500=5%
DEDUCTION DECIMAL(9,0) 控除額

テーブル3INSURANCE-TABLE(社会保険料率テーブル)

カラム 内容
INS-INCOME-FROM DECIMAL(9,0) 対象所得下限(PK
INS-INCOME-TO DECIMAL(9,0) 対象所得上限(PK
INS-HEALTH-RATE DECIMAL(7,6) 健康保険料率
INS-PENSION-RATE DECIMAL(7,6) 厚生年金保険料率
UPDATED-AT TIMESTAMP 更新日時

テーブル4SALARY-RESULTS(給与計算結果テーブル)

カラム 内容
EMP-ID CHAR(8) 社員番号(PK
YEAR-MONTH CHAR(6) 対象年月 YYYYMMPK
GROSS-PAYMENT DECIMAL(9,0) 支給総額
INCOME-TAX DECIMAL(9,0) 源泉所得税
INSURANCE DECIMAL(9,0) 社会保険料
RESIDENT-TAX DECIMAL(9,0) 住民税
NET-PAYMENT DECIMAL(9,0) 差引支給額
UPDATED-AT TIMESTAMP 更新日時

処理フロー

  ╞══ KYUJ010 ═══════════════════════════════════╡
  │ KYU01CVTCSV→FB変換) PGMパターン: 21
  │   INSPECT CONVERTING(引用符内改行→SPACE
  │   UNSTRING COUNT IN(項目数カウント)
  │   SUB04CHK で数値妥当性チェック(内部処理25)
  │   コメント行(先頭#)は読み飛ばし
  ├── 正常 → EMP-RECORD(80B 固定長)
  └── 異常 → ERROR-LOG
  │
  │ KYU02REGDB2登録) PGMパターン: 09
  │   EXEC SQL INSERT(新規)
  │   SQLCODE=-803 → EXEC SQL UPDATE(重複更新)
  ├── → DB2 EMP-MASTER
  └── 異常 → ERROR-LOG
  │
  ╞══ KYUJ020 ═══════════════════════════════════╡
  │ STEP020S: JCL SORTABSENCE-SUMMARY → 社員番号昇順)
  │
  │ KYU03AGG(欠勤集約) PGMパターン: 08
  │   同一社員内の複数欠勤レコードを読込 → 集約
  │   INITIALIZE REPLACING NUMERIC DATA BY ZERO
  ├── → ABSENCE-AGGREGATE80B 社員単位1件)
  └── 異常 → ERROR-LOG
  │
  │ KYU04CAL(給与計算) PGMパターン: 32
  │   ABSENCE-AGGREGATE + EMP-MASTERDB2参照)
  │   OVT-MONTHLYDB2 Bサブシステム参照)
  │   EVALUATE ALSO(勤怠区分×手当種別の複合分岐)
  │   COMPUTE ROUNDED ON SIZE ERROR
  ├── → SALARY-DETAIL240B
  └── 異常 → ERROR-LOG
  │
  ╞══ KYUJ030 ═══════════════════════════════════╡
  │ KYU05DED(控除計算) PGMパターン: 23
  │   TAX-TABLE → EXEC SQL SELECT ... BETWEEN
  │   INSURANCE-TABLE → SEARCH ALL(内部表LOAD後)
  │   課税所得計算・源泉所得税・社会保険料・住民税を算出
  ├── → SALARY-NET200B
  └── 異常 → ERROR-LOG
  │
  │ KYU06UPDDB2更新) PGMパターン: 09
  │   EXEC SQL INSERT(新規)
  │   SQLCODE=-803 → EXEC SQL UPDATE(再計算更新)
  ├── → DB2 SALARY-RESULTS
  └── 異常 → ERROR-LOG
  │
  ╞══ KYUJ040 ═══════════════════════════════════╡
  │ STEP040S: JCL SORTSALARY-NET → 部署コード昇順)
  │
  │ KYU07DIV(部門分割出力) PGMパターン: 10
  │   SYSIN制御カードで出力対象部署の絞込可能
  │   EVALUATE DEPT-CODE で該当ファイルへSELECT WRITE
  │   部署別ファイルを順次OPEN/CLOSE(常時1 OPEN
  │   CLOSE WITH LOCK で出力ファイル確定
  ├── 部署別 → DEPT-OUT-01〜50
  └── 異常 → ERROR-LOG
  │
  ╞══ KYUJ050 ═══════════════════════════════════╡
  │ STEP050S: JCL SORTSALARY-NET → 社員番号昇順)
  │
  │ KYU08PRI(給与明細印刷) PGMパターン: 04
  │   FD LINAGE IS 66 LINES / TOP 6 / BOTTOM 6 / FOOTING 60
  │   WRITE BEFORE ADVANCING PAGE1社員1ページ)
  │   BLANK WHEN ZERO / JUSTIFIED RIGHT
  │   AT END-OF-PAGE / PAGE-COUNTER / SET UP BY
  ├── → PAYSLIPSYSOUT
  └── 異常 → ERROR-LOG
  │
  ╞══ KYUJ060 ═══════════════════════════════════╡
  │ KYU09MRG(支給データ結合) PGMパターン: 35
  │   COBOL MERGE文(SALARY-NET + BONUS-DATA
  │   ON ASCENDING KEY MERGE-EMP-ID
  │   OUTPUT PROCEDURE で社員単位に統合
  │   RETURN ... AT END でMERGE結果受取
  ├── → PAYMENT-DATA200B
  └── 異常 → ERROR-LOG

JCL

KYUJ010 — 社員マスタ取込(2ステップ)

//KYUJ010  JOB (ACCT),'社員マスタ取込',CLASS=A
//*
//*--- パラメータ定義 ---
//SETPARM  SET YEARMONTH=202605
//*                   ※PARM値は本番z/OSでJCLから指定。ローカルGnuCOBOLでは環境変数で代替。
//*=====================================================================
//* STEP010: CSV→FB変換(Type 21
//*=====================================================================
//STEP010  EXEC PGM=KYU01CVT,PARM='YEARMONTH=&YEARMONTH'
//KYU01R01  DD DSN=EMP-MASTER.CSV,DISP=SHR
//KYU01W01  DD DSN=EMP-RECORD.DAT,DISP=(NEW,PASS)
//KYU01W02  DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
//*
//*=====================================================================
//* STEP020: DB2登録(Type 09
//*=====================================================================
//STEP020  EXEC PGM=KYU02REG,PARM='YEARMONTH=&YEARMONTH'
//KYU02R02  DD DSN=EMP-RECORD.DAT,DISP=(OLD,DELETE)
//KYU02W03  DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)

KYUJ020 — 給与計算(3ステップ)

//KYUJ020  JOB (ACCT),'給与計算',CLASS=A
//*
//*--- パラメータ定義 ---
//SETPARM  SET YEARMONTH=202605
//*
//*=====================================================================
//* STEP020S: 欠勤統計 SORT(社員番号昇順)
//*=====================================================================
//STEP020S EXEC PGM=SORT
//SORTIN   DD DSN=ABSENCE-SUMMARY.DAT,DISP=SHR
//SORTOUT  DD DSN=KYU02S01.DAT,DISP=(NEW,PASS)
//SYSIN    DD *
  SORT FIELDS=(1,8,CH,A),EQUALS
/*
//*
//*=====================================================================
//* STEP021: 欠勤集約(Type 08
//*=====================================================================
//STEP021  EXEC PGM=KYU03AGG,PARM='YEARMONTH=&YEARMONTH'
//KYU03R01  DD DSN=KYU02S01.DAT,DISP=(OLD,DELETE)
//KYU03W01  DD DSN=ABSENCE-AGGREGATE.DAT,DISP=(NEW,PASS)
//KYU03W02  DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
//*
//*=====================================================================
//* STEP022: 給与計算(Type 32
//* EMP-MASTER / OVT-MONTHLY はDB2EXEC SQL)参照のためDD不要
//*=====================================================================
//STEP022  EXEC PGM=KYU04CAL,PARM='YEARMONTH=&YEARMONTH'
//KYU04R02  DD DSN=ABSENCE-AGGREGATE.DAT,DISP=(OLD,DELETE)
//KYU04R03  DD DSN=PAY-PARAM.DAT,DISP=SHR
//KYU04W03  DD DSN=SALARY-DETAIL.DAT,DISP=(NEW,CATLG,DELETE)
//KYU04W04  DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)

KYUJ030 — 控除計算(2ステップ)

//KYUJ030  JOB (ACCT),'控除計算',CLASS=A
//*
//*--- パラメータ定義 ---
//SETPARM  SET YEARMONTH=202605
//*
//*=====================================================================
//* STEP030: 控除計算(Type 23
//* TAX-TABLE / INSURANCE-TABLE はDB2EXEC SQL)参照のためDD不要
//*=====================================================================
//STEP030  EXEC PGM=KYU05DED,PARM='YEARMONTH=&YEARMONTH'
//KYU05R01  DD DSN=SALARY-DETAIL.DAT,DISP=(OLD,DELETE)
//KYU05W01  DD DSN=SALARY-NET.DAT,DISP=(NEW,PASS)
//KYU05W02  DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
//*
//*=====================================================================
//* STEP031: DB2 SALARY-RESULTS 更新(Type 09
//*=====================================================================
//STEP031  EXEC PGM=KYU06UPD,PARM='YEARMONTH=&YEARMONTH'
//KYU06R02  DD DSN=SALARY-NET.DAT,DISP=(OLD,DELETE)
//KYU06W03  DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)

KYUJ040 — 部門別分割出力

//KYUJ040  JOB (ACCT),'部門別分割出力',CLASS=A
//*
//*--- パラメータ定義 ---
//SETPARM  SET YEARMONTH=202605
//*
//*=====================================================================
//* STEP040S: SALARY-NET SORT(部署コード昇順)
//*=====================================================================
//STEP040S EXEC PGM=SORT
//SORTIN   DD DSN=SALARY-NET.DAT,DISP=SHR
//SORTOUT  DD DSN=KYU04S01.DAT,DISP=(NEW,PASS)
//SYSIN    DD *
  SORT FIELDS=(50,2,CH,A),EQUALS
/*
//*
//*=====================================================================
//* STEP040: 50分割出力(Type 10
//* SYSINで出力対象部署絞込可
//*=====================================================================
//STEP040  EXEC PGM=KYU07DIV,PARM='YEARMONTH=&YEARMONTH'
//KYU07R01  DD DSN=KYU04S01.DAT,DISP=(OLD,DELETE)
//KYU07D01  DD DSN=DEPT-OUT-01.DAT,DISP=(NEW,CATLG,DELETE)
//   ...(全50部署)
//KYU07D50  DD DSN=DEPT-OUT-50.DAT,DISP=(NEW,CATLG,DELETE)
//KYU07SYS  DD *
  DEPT=01,02,05,10
/*
//KYU07W99  DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)

KYUJ050 — 給与明細印刷

//KYUJ050  JOB (ACCT),'給与明細印刷',CLASS=A
//*
//*--- パラメータ定義 ---
//SETPARM  SET YEARMONTH=202605
//*
//*=====================================================================
//* STEP050S: 給与データ SORT(社員番号昇順)
//*=====================================================================
//STEP050S EXEC PGM=SORT
//SORTIN   DD DSN=SALARY-NET.DAT,DISP=SHR
//SORTOUT  DD DSN=KYU05S01.DAT,DISP=(NEW,PASS)
//SYSIN    DD *
  SORT FIELDS=(1,8,CH,A),EQUALS
/*
//*
//*=====================================================================
//* STEP050: 給与明細印刷(Type 04 LINAGEページ制御)
//*=====================================================================
//STEP050  EXEC PGM=KYU08PRI,PARM='YEARMONTH=&YEARMONTH'
//KYU08R01  DD DSN=KYU05S01.DAT,DISP=(OLD,DELETE)
//KYU08W01  DD SYSOUT=A
//KYU08W02  DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)

KYUJ060 — 支給データ結合

//KYUJ060  JOB (ACCT),'支給データ結合',CLASS=A
//*
//*--- パラメータ定義 ---
//SETPARM  SET YEARMONTH=202605
//*
//*=====================================================================
//* STEP060: MERGEType 35 給与 + 賞与)
//*=====================================================================
//STEP060  EXEC PGM=KYU09MRG,PARM='YEARMONTH=&YEARMONTH'
//KYU09M99  DD UNIT=SYSDA,SPACE=(CYL,(10,5))
//KYU09M01  DD DSN=SALARY-NET.DAT,DISP=SHR
//KYU09M02  DD DSN=BONUS-DATA.DAT,DISP=SHR
//KYU09W01  DD DSN=PAYMENT-DATA.DAT,DISP=(NEW,CATLG,DELETE)
//KYU09W02  DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)

実行順序

本サブシステムのJOBは、A・Bサブシステムの出力を入力とする。 JCL起動時は以下の順序を保証すること。

  1. Aサブシステム KINJ080KIN08DBU)→ ABSENCE-SUMMARY生成
  2. Bサブシステム ZANJ025ZAN06UPD)→ DB2 OVT-MONTHLY確定
  3. KYUJ010(マスタ取込、任意タイミング。初回のみ必須)
  4. KYUJ020KYUJ030KYUJ040(またはKYUJ050)→ KYUJ060(順次実行)
  5. KYUJ040 と KYUJ050 は SALARY-NET.DAT を DISP=SHR で参照するため並行実行可能

プログラム詳細

KYU01CVT(社員マスタCSV→FB変換処理) — Type 21

項目 内容
プログラム名称 社員マスタCSV→FB変換処理
PGMパターン CSV→FB変換(改行あり)+ 内部処理25(SUB04CHK数値チェック)
SORT前処理 不要
入力 EMP-MASTER.CSV(可変長/改行あり)
出力 EMP-RECORD80B 固定長)/ ERROR-LOGVB
件数変化 N件(CSV行)→ 正常M件 + 異常(N-M)件
使用共通関数 SUB01DAT, SUB02MSG, SUB03END, SUB04CHK
該当プログラム分類 No.21 CSV→FB変換(改行あり)

入力CSV形式:

EMP001,山田 太郎,01,01,001,300000,1800,2,0
EMP002,佐藤 花子,02,01,002,280000,1700,1,0
  • 引用符(")で囲まれた社員名フィールド内に改行を含む場合は複数行読込
  • コメント行(先頭#)は読み飛ばし

機能:

  1. OPEN INPUT CSVファイル(VB編成・可変長)
  2. READ で1行取得。AT END まで繰り返し
  3. 行内の引用符 " の出現状態を追跡し、引用符内改行とレコード境界改行を区別:
    • WS-IN-QUOTE フラグが FALSE かつ行内に奇数個の " → 引用符内続行モード開始
    • WS-IN-QUOTE が TRUE かつ行内に奇数個の " → 引用符内終了
    • 引用符内継続行は連結用ワーク領域(WS-CSV-ACCUM)に蓄積
  4. 完全な1レコード分のデータが揃った時点で、INSPECT CONVERTING X"0D" X"0A" BY SPACE で引用符内改行をスペース変換
  5. UNSTRING DELIMITED BY ',' INTO ... COUNT IN WS-FIELD-COUNT でCSV分解+項目数カウント
  6. SUB04CHK で社員番号(8桁)・時給(7桁)の数値妥当性チェック(内部処理25に該当)
  7. 社員番号空チェック:INSPECT TALLYING WS-TALLY FOR LEADING SPACES → 全桁SPACEならエラー
  8. 正常レコードは EMP-RECORD80B)に WRITE
  9. エラー時は ERROR-LOG に書出し

DECLARATIVES(ファイルエラー処理)

DECLARATIVES 宣言部でファイル入出力エラーを捕捉し、共通エラー処理に制御を移す。

DECLARATIVES.
KYU01CVT-ERR SECTION.
    USE AFTER ERROR PROCEDURE ON KYU01R01.
KYU01CVT-ERR-PROC.
    PERFORM 9999-ABEND.
    .
KYU01W01-ERR SECTION.
    USE AFTER ERROR PROCEDURE ON KYU01W01.
KYU01W01-ERR-PROC.
    PERFORM 9999-ABEND.
    .
END DECLARATIVES.

新規カバレッジ構文:

構文 用途
INSPECT CONVERTING 引用符内改行コード→SPACE変換
UNSTRING COUNT IN CSV分解時の項目数検証
IF ALPHABETIC 社員名の英字判定
DECLARATIVES ファイル入出力エラー処理の宣言部
USE AFTER ERROR ファイルエラー時の共通エラー処理手続き

KYU02REG(社員マスタDB2登録処理) — Type 09

項目 内容
プログラム名称 社員マスタDB2登録処理
PGMパターン DB更新
SORT前処理 不要(KYU01CVTの出力を入力)
入力 EMP-RECORD80B 固定長)
出力 DB2 EMP-MASTERINSERT/UPSERT/ ERROR-LOGVB
件数変化 N件 → DB2登録N件(全件)
使用共通関数 SUB02MSG, SUB03END
該当プログラム分類 No.09 DB更新

機能:

  1. OPEN INPUT EMP-RECORD80B 固定長)
  2. READ で1件取得。AT END まで繰り返し
  3. EXEC SQL INSERT INTO EMP-MASTER ... でDB2登録
  4. SQLCODE = -803(重複)の場合、EXEC SQL UPDATE で更新
  5. エラー時は ERROR-LOG に書出し

新規カバレッジ構文:

構文 用途
EXEC SQL INSERT 社員マスタ新規登録
SQLCODE判定によるUPSERT 重複時UPDATE
CLOSE WITH LOCK 入力ファイルのロッククローズ

KYU03AGG(欠勤集約処理) — Type 08

項目 内容
プログラム名称 欠勤集約処理
PGMパターン キーブレイク(集約)
SORT前処理 JCL SORT(社員番号昇順)
入力 KYU02S0180B JCL SORT済み欠勤データ)
出力 ABSENCE-AGGREGATE80B 社員単位)/ ERROR-LOGVB
件数変化 M件(欠勤レコード)→ N件(社員数、M≧N)
使用共通関数 SUB02MSG, SUB03END
該当プログラム分類 No.08 キーブレイク(集約)

機能:

同一社員内の複数欠勤レコードを集約する。

PERFORM UNTIL WS-EOF = '1'
    READ KYU08R01 INTO WS-ABSENCE-REC
        AT END SET WS-EOF TO TRUE
    END-READ
    IF NOT WS-EOF
        IF WS-PREV-EMP-ID = WS-EMP-ID
            ADD 1 TO WS-ABSENT-COUNT
            ADD WS-ABSENT-HOURS TO WS-TOTAL-ABSENT-HOURS
        ELSE
            PERFORM 2000-WRITE-AGGREGATE
            MOVE WS-EMP-ID TO WS-PREV-EMP-ID
            INITIALIZE WS-TOTAL-ABSENT-HOURS
                       WS-ABSENT-COUNT
                REPLACING NUMERIC DATA BY ZERO
            MOVE 1 TO WS-ABSENT-COUNT
            MOVE WS-ABSENT-HOURS TO WS-TOTAL-ABSENT-HOURS
        END-IF
    END-IF
END-PERFORM.
PERFORM 2000-WRITE-AGGREGATE.

新規カバレッジ構文:

構文 用途
INITIALIZE REPLACING NUMERIC DATA BY ZERO 集約カウンタの型別初期化
END-ADD ADD文の明示的スコープターミネータ

KYU04CAL(給与計算処理) — Type 32

項目 内容
プログラム名称 給与計算処理
PGMパターン 1:N+キーブレイク(同キー)
SORT前処理 不要(KYU03AGGの出力を入力)
入力 ABSENCE-AGGREGATE80B/ PAY-PARAM80B/ EMP-MASTERDB2参照)/ OVT-MONTHLYDB2 Bサブシステム参照)
出力 SALARY-DETAIL240B/ ERROR-LOGVB
件数変化 N件(社員)→ N件(社員)
使用共通関数 SUB01DAT, SUB02MSG, SUB03END
該当プログラム分類 No.32 1:N+キーブレイク(同キー)

機能:

Step1:社員単位の給与計算

ABSENCE-AGGREGATE(社員単位1件)を読込み、DB2 EMP-MASTER・OVT-MONTHLY を補完参照する。

PERFORM UNTIL WS-EOF = '1'
    READ KYU04R02 INTO WS-ABSENCE-AGG
        AT END SET WS-EOF TO TRUE
    END-READ
    IF NOT WS-EOF
        PERFORM 2100-CALCULATE-SALARY
    END-IF
END-PERFORM.

Step2:給与計算

  1. EMP-MASTERDB2 SELECT で基本給・時給・扶養人数を取得
  2. OVT-MONTHLYDB2 SELECT WHERE EMP-ID / YEAR-MONTH で残業時間を取得
  3. 欠勤控除額 = HOURLY-RATE × 欠勤時間合計
  4. 時間外手当 = HOURLY-RATE × 残業時間 × OVERTIME-RATE1.25
  5. 支給総額 = 基本給 + 各種手当 - 欠勤控除
EXEC SQL
    SELECT BASE-SALARY, HOURLY-RATE, DEPENDENT-COUNT
        INTO :WS-BASE-SALARY, :WS-HOURLY-RATE, :WS-DEPENDENT
        FROM EMP-MASTER
        WHERE EMP-ID = :WS-EMP-ID
END-EXEC.

IF SQLCODE = 0
    COMPUTE WS-ABSENT-DEDUCT ROUNDED =
        WS-HOURLY-RATE * WS-TOTAL-ABSENT-HOURS
        ON SIZE ERROR
            MOVE ZERO TO WS-ABSENT-DEDUCT
            PERFORM 9999ABDSOR
    END-COMPUTE
    COMPUTE WS-OVT-AMOUNT ROUNDED =
        WS-HOURLY-RATE * WS-OVT-HOURS * WS-OVERTIME-RATE
        ON SIZE ERROR
            MOVE ZERO TO WS-OVT-AMOUNT
            PERFORM 9999ABDSOR
    END-COMPUTE
    COMPUTE WS-GROSS-PAYMENT =
        WS-BASE-SALARY + WS-OVT-AMOUNT - WS-ABSENT-DEDUCT
    END-COMPUTE
END-IF.

Step3:複合条件分岐(EVALUATE ALSO

勤怠区分と手当種別の組み合わせで支給額を判定する。

EVALUATE WS-ALLOWANCE-TYPE ALSO WS-ATTEND-TYPE
    WHEN 'OVT' ALSO 'W'
        COMPUTE WS-AMOUNT ROUNDED =
            WS-HOURLY-RATE * WS-OVT-HOURS * 1.25
    WHEN 'OVT' ALSO 'H'
        COMPUTE WS-AMOUNT ROUNDED =
            WS-HOURLY-RATE * WS-OVT-HOURS * 1.35
    WHEN 'LATE' ALSO ANY
        COMPUTE WS-AMOUNT ROUNDED =
            WS-HOURLY-RATE * WS-LATE-HOURS * 0.50
    WHEN OTHER
        MOVE ZERO TO WS-AMOUNT
END-EVALUATE.

新規カバレッジ構文:

構文 用途
EVALUATE ALSO 勤怠区分×手当種別の複合分岐
OCCURS DESCENDING KEY 手当テーブルの高額順整列
COMPUTE ROUNDED ON SIZE ERROR 給与計算の桁あふれ処理
END-ADD / END-DIVIDE / END-SUBTRACT 明示的スコープターミネータ

KYU05DED(控除計算処理) — Type 23

項目 内容
プログラム名称 控除計算処理
PGMパターン SELECT条件
SORT前処理 不要
入力 SALARY-DETAIL240B/ TAX-TABLEDB2/ INSURANCE-TABLEDB2
出力 SALARY-NET200B/ ERROR-LOGVB
件数変化 N件 → N件(1対1
使用共通関数 SUB02MSG, SUB03END
該当プログラム分類 No.23 SELECT条件

機能:

Step1:課税所得計算

COMPUTE WS-TAXABLE-INCOME =
    WS-GROSS-PAYMENT - WS-INSURANCE - WS-BASIC-DEDUCTION
END-COMPUTE.

Step2:税率取得(EXEC SQL SELECT ... BETWEEN

EXEC SQL
    SELECT TAX-RATE, DEDUCTION
        INTO :WS-TAX-RATE, :WS-DEDUCTION
        FROM TAX-TABLE
        WHERE :WS-TAXABLE-INCOME BETWEEN TAX-FROM AND TAX-TO
END-EXEC.

IF SQLCODE = 0
    COMPUTE WS-INCOME-TAX ROUNDED =
        WS-TAXABLE-INCOME * WS-TAX-RATE - WS-DEDUCTION
    END-COMPUTE
ELSE
    MOVE ZERO TO WS-INCOME-TAX
END-IF.

Step3:社会保険料計算(SEARCH ALL)

保険料率テーブル(WORKING-STORAGE)を事前LOADし、SEARCH ALLで検索する。

01  INSURANCE-WORK.
    05  IW-COUNT           PIC 9(4).
    05  IW-ENTRY OCCURS 1 TO 200 TIMES
        DEPENDING ON IW-COUNT
        ASCENDING KEY IS IW-INCOME-FROM
        INDEXED BY IW-IDX.
        10  IW-INCOME-FROM PIC 9(9).
        10  IW-INCOME-TO   PIC 9(9).
        10  IW-HEALTH-RATE PIC V9(6).
        10  IW-PENSION-RATE PIC V9(6).
    05  IW-END.
  • 初期処理で DB2 INSURANCE-TABLE を全件 SELECT → WORKING-STORAGE に LOAD
  • SEARCH ALL で該当所得範囲の保険料率を検索
SEARCH ALL IW-ENTRY
    AT END
        PERFORM 9999ABDSOR
    WHEN IW-INCOME-FROM(IW-IDX) <= WS-TAXABLE-INCOME
      AND WS-TAXABLE-INCOME <= IW-INCOME-TO(IW-IDX)
        COMPUTE WS-INSURANCE ROUNDED =
            WS-TAXABLE-INCOME *
            (IW-HEALTH-RATE(IW-IDX) + IW-PENSION-RATE(IW-IDX))
        END-COMPUTE
END-SEARCH.

Step4:差引支給額計算

COMPUTE WS-NET-PAYMENT =
    WS-GROSS-PAYMENT - WS-INCOME-TAX
                     - WS-INSURANCE
                     - WS-RESIDENT-TAX
END-COMPUTE.

新規カバレッジ構文:

構文 用途
EXEC SQL SELECT ... BETWEEN 課税所得範囲検索
SEARCH ALL(複数WHEN複合条件) IW-INCOME-FROMIW-INCOME-TO範囲判定
88-level VALUES複数値 保険料率テーブルの境界値判定

KYU06UPD(給与計算結果DB2更新処理) — Type 09

項目 内容
プログラム名称 給与計算結果DB2更新処理
PGMパターン DB更新
SORT前処理 不要(KYU05DEDの出力を入力)
入力 SALARY-NET200B
出力 DB2 SALARY-RESULTSINSERT/UPSERT/ ERROR-LOGVB
件数変化 N件 → DB2登録N件(全件)
使用共通関数 SUB02MSG, SUB03END
該当プログラム分類 No.09 DB更新

機能:

  1. OPEN INPUT SALARY-NET200B
  2. READ で1件取得。AT END まで繰り返し
  3. EXEC SQL INSERT INTO SALARY-RESULTS ... で登録
EXEC SQL
    INSERT INTO SALARY-RESULTS
        (EMP-ID, YEAR-MONTH, GROSS-PAYMENT,
         INCOME-TAX, INSURANCE, RESIDENT-TAX,
         NET-PAYMENT, UPDATED-AT)
    VALUES
        (:WS-EMP-ID, :WS-YEAR-MONTH, :WS-GROSS-PAYMENT,
         :WS-INCOME-TAX, :WS-INSURANCE, :WS-RESIDENT-TAX,
         :WS-NET-PAYMENT, CURRENT TIMESTAMP)
END-EXEC.
  1. SQLCODE = -803(重複)の場合、EXEC SQL UPDATE で更新
IF SQLCODE = -803
    EXEC SQL
        UPDATE SALARY-RESULTS SET
            GROSS-PAYMENT   = :WS-GROSS-PAYMENT,
            INCOME-TAX      = :WS-INCOME-TAX,
            INSURANCE       = :WS-INSURANCE,
            RESIDENT-TAX    = :WS-RESIDENT-TAX,
            NET-PAYMENT     = :WS-NET-PAYMENT,
            UPDATED-AT      = CURRENT TIMESTAMP
        WHERE EMP-ID    = :WS-EMP-ID
          AND YEAR-MONTH = :WS-YEAR-MONTH
    END-EXEC
END-IF.

新規カバレッジ構文:

構文 用途
EXEC SQL INSERT SALARY-RESULTS新規登録
SQLCODE判定によるUPSERT 再計算時の重複UPDATE

KYU07DIV(部門別分割出力処理) — Type 10

項目 内容
プログラム名称 部門別分割出力処理
PGMパターン 50分割
SORT前処理 JCL SORT(部署コード昇順)
入力 KYU04S01200B JCL SORT済み)/ SYSIN(制御カード)
出力 DEPT-OUT-01〜50(各200B
件数変化 N件 → 各部署合計N件(全社員)
使用共通関数 SUB02MSG, SUB03END
該当プログラム分類 No.10 50分割

機能:

  1. READ SYSIN で出力対象部署コード一覧を取得(省略時は全50部署)
  2. JCL SORT済みのため部署コード順に入力。部署コードが変わるたびにファイルを切替
  3. 部署コード単位でファイルを開閉し、常に1ファイルのみ OPEN 状態を保つ
PERFORM UNTIL WS-EOF = '1'
    READ KYU07R01 INTO WS-SALARY-REC
        AT END SET WS-EOF TO TRUE
    END-READ
    IF NOT WS-EOF AND WS-DEPT-CODE IN 対象部署一覧
        IF WS-PREV-DEPT > SPACES
          AND WS-PREV-DEPT NOT = WS-DEPT-CODE
            PERFORM 3000-CLOSE-FILE
        END-IF
        IF WS-DEPT-CODE NOT = WS-PREV-DEPT
            PERFORM 3100-OPEN-FILE
        END-IF
        EVALUATE WS-DEPT-CODE
            WHEN '01' WRITE DEPT01-REC FROM WS-SALARY-REC
            WHEN '02' WRITE DEPT02-REC FROM WS-SALARY-REC
            ...
            WHEN '50' WRITE DEPT50-REC FROM WS-SALARY-REC
            WHEN OTHER CONTINUE
        END-EVALUATE
        MOVE WS-DEPT-CODE TO WS-PREV-DEPT
    END-IF
END-PERFORM.
IF WS-PREV-DEPT > SPACES
    PERFORM 3000-CLOSE-FILE
END-IF.
  1. 全ファイル終了後、最終部署ファイルを CLOSE WITH LOCK で確定

新規カバレッジ構文:

構文 用途
50分割(部署別1ファイルずつOPEN/CLOSE切替) 部署別出力(常時1 OPEN でリソース節約)
CLOSE WITH LOCK 出力ファイルのロッククローズ
READ SYSIN 制御カードによる出力対象部署指定(内部処理28)

KYU08PRI(給与明細印刷処理) — Type 04

項目 内容
プログラム名称 給与明細印刷処理
PGMパターン レイアウト編集のみ(GETPUT)+ LINAGEページ制御
SORT前処理 JCL SORT(社員番号昇順)
入力 KYU05S01200B
出力 PAYSLIPSYSOUT A行 200B/ ERROR-LOGVB
件数変化 N件 → 1社員1ページ(Nページ)
使用共通関数 SUB01DAT, SUB02MSG, SUB03END
該当プログラム分類 No.04 レイアウト編集のみ(GETPUT)

機能:

Step1LINAGEページ定義

FD  KYU08W01
    LABEL RECORDS STANDARD
    LINAGE IS 66 LINES
        FOOTING IS 60
        TOP 6
        BOTTOM 6.
  • 1ページ66行、先頭6行(TOP)= ヘッダ領域、最終6行(BOTTOM)= フッタ領域

Step2:明細行編集

01  PAYSLIP-HEADER.
    05  PH-TITLE           PIC X(40) VALUE
        '========== 給与明細書 =========='.
    05  FILLER             PIC X(10) VALUE SPACES.
    05  PH-PAGE-NO         PIC Z(4)9 VALUE ZERO.
    05  FILLER             PIC X(02) VALUE '頁'.

01  PAYSLIP-DETAIL.
    05  PD-EMP-ID          PIC X(08).
    05  FILLER             PIC X(02) VALUE SPACES.
    05  PD-EMP-NAME        PIC X(20) JUSTIFIED RIGHT.
    05  FILLER             PIC X(02) VALUE SPACES.
    05  PD-BASIC-SALARY    PIC Z(8)9 BLANK WHEN ZERO.
    05  FILLER             PIC X(02) VALUE SPACES.
    05  PD-NET-PAYMENT     PIC Z(8)9 BLANK WHEN ZERO.

Step3:ページ制御

WRITE PAYSLIP-REC FROM PAYSLIP-HEADER
    BEFORE ADVANCING PAGE.

PERFORM VARYING WS-LINE FROM 1 BY 1
          UNTIL WS-LINE > WS-DETAIL-LINES
    WRITE PAYSLIP-REC FROM PAYSLIP-DETAIL
        BEFORE ADVANCING 1 LINE
    AT END-OF-PAGE
        WRITE PAYSLIP-REC FROM PAYSLIP-FOOTER
            BEFORE ADVANCING PAGE
        SET WS-PAGE-END TO TRUE
    END-WRITE
END-PERFORM.
  • PAGE-COUNTER 特殊レジスタで自動ページ番号管理
  • SET UP BY / SET DOWN BYPAGE-COUNTER 操作
  • 社員ごとに WRITE BEFORE ADVANCING PAGE で改ページ

新規カバレッジ構文:

構文 用途
FD LINAGE IS ... TOP/BOTTOM/FOOTING 明細ページ制御
WRITE BEFORE ADVANCING PAGE 改ページ制御
WRITE BEFORE ADVANCING 1 LINE 行送り制御
WRITE AT END-OF-PAGE ページ終端検出
PAGE-COUNTER ページ番号自動計数
BLANK WHEN ZERO ゼロ金額非表示
JUSTIFIED RIGHT 右詰め編集
SET UP BY / SET DOWN BY カウンタ増減操作

KYU09MRG(支給データ結合処理) — Type 35

項目 内容
プログラム名称 支給データ結合処理
PGMパターン MERGE(複数ファイル結合)
SORT前処理 不要(MERGE文が自ら結合)
入力 SALARY-NET200B/ BONUS-DATA200B
出力 PAYMENT-DATA200B/ ERROR-LOGVB
件数変化 N件 + M件 → (N+M)件(社員単位に統合後N件)
使用共通関数 SUB01DAT, SUB02MSG, SUB03END
該当プログラム分類 No.35 MERGE(複数ファイル結合)

機能:

MERGE文によるファイル結合

SALARY-NET と BONUS-DATA は共に200B固定長で、社員番号(EMP-ID)が1桁目から8桁で共通。 MERGE文で社員番号昇順に結合し、同一社員の給与レコードと賞与レコードを連続取得する。

PROCEDURE DIVISION USING KYU-PARM.

MAIN-MERGE SECTION.
    MERGE WORK-FILE
        ON ASCENDING KEY MERGE-EMP-ID
        USING SALARY-FILE BONUS-FILE
        OUTPUT PROCEDURE 3000-MERGE-OUTPUT
    .
    GOBACK.

OUTPUT PROCEDURE:社員単位の支給データ生成

MERGE結果を受け取り、同一社員内で給与(TYPE='S')と賞与(TYPE='B')のレコードを統合する。

3000-MERGE-OUTPUT SECTION.
    PERFORM WITH TEST AFTER
      UNTIL WS-MERGE-EOF
        RETURN WORK-FILE INTO WS-MERGE-REC
            AT END SET WS-MERGE-EOF TO TRUE
        END-RETURN
        IF NOT WS-MERGE-EOF
            MOVE MERGE-EMP-ID OF WS-MERGE-REC
              TO WS-CURRENT-EMP
            MOVE ZEROS TO WS-SALARY-AMOUNT
                           WS-BONUS-AMOUNT
            PERFORM UNTIL WS-CURRENT-EMP
                     NOT = MERGE-EMP-ID OF WS-MERGE-REC
                IF WS-RECORD-TYPE = 'S'
                    MOVE WS-PAY-AMOUNT TO WS-SALARY-AMOUNT
                ELSE
                    MOVE WS-PAY-AMOUNT TO WS-BONUS-AMOUNT
                END-IF
                RETURN WORK-FILE INTO WS-MERGE-REC
                    AT END
                        MOVE HIGH-VALUES TO MERGE-EMP-ID
                        EXIT PERFORM
                END-RETURN
            END-PERFORM
            ADD WS-SALARY-AMOUNT TO WS-BONUS-AMOUNT
                GIVING WS-TOTAL-PAYMENT
            WRITE PAYMENT-REC FROM WS-PAYMENT-DATA
        END-IF
    END-PERFORM.

新規カバレッジ構文:

構文 用途
MERGE文(USING複数ファイル) 給与+賞与の社員番号昇順結合
MERGE ... OUTPUT PROCEDURE MERGE結果の後処理
RETURN ... AT END MERGE結果レコード取得
ENTRY 代替エントリポイント

レコード構成

EMP-RECORD80B — KYU01CVT出力

# 項目 名称 開始 長さ 属性 備考
1 社員番号 ER-EMP-ID 1 8 X(8)
2 社員名 ER-EMP-NAME 9 40 X(40)
3 部署コード ER-DEPT-CODE 49 2 X(2)
4 地域コード ER-REGION-CODE 51 2 X(2)
5 社員区分コード ER-CATEGORY-CODE 53 3 X(3)
6 基本給 ER-BASE-SALARY 56 9 9(9)
7 時給 ER-HOURLY-RATE 65 7 9(7)
8 扶養人数 ER-DEPENDENT-COUNT 72 2 9(2)
9 ステータス ER-STATUS 74 1 X(1)
10 予備 ER-FILLER 75 6 X(6)

ABSENCE-AGGREGATE80B — KYU03AGG出力

# 項目 名称 開始 長さ 属性 備考
1 社員番号 AA-EMP-ID 1 8 X(8)
2 対象年月 AA-YEAR-MONTH 9 6 X(6) YYYYMM
3 欠勤時間合計 AA-TOTAL-ABSENT-HOURS 15 5 9(4)V9(1)
4 欠勤回数 AA-ABSENT-COUNT 20 2 9(2)
5 予備 AA-FILLER 22 58 X(58)

SALARY-DETAIL240B — KYU04CAL出力

# 項目 名称 開始 長さ 属性 備考
1 社員番号 SD-EMP-ID 1 8 X(8)
2 社員名 SD-EMP-NAME 9 40 X(40)
3 部署コード SD-DEPT-CODE 49 2 X(2)
4 基本給 SD-BASIC-SALARY 51 9 9(9)
5 時間外手当 SD-OVT-AMOUNT 60 9 9(9)
6 休日手当 SD-HOLIDAY-AMOUNT 69 9 9(9)
7 欠勤控除 SD-ABSENT-DEDUCT 78 9 9(9)
8 支給総額 SD-GROSS-PAYMENT 87 9 9(9)
9 残業時間 SD-OVT-HOURS 96 5 9(4)V9(1)
10 欠勤時間 SD-ABSENT-HOURS 101 5 9(4)V9(1)
11 勤怠区分 SD-ATTEND-TYPE 106 1 X(1) W=平日残業 / H=休日残業
12 手当種別 SD-ALLOWANCE-TYPE 107 3 X(3) OVT=残業 / LATE=遅刻
13 予備 SD-FILLER 110 131 X(131)

SALARY-NET200B — KYU05DED出力

# 項目 名称 開始 長さ 属性 備考
1 社員番号 SN-EMP-ID 1 8 X(8) MERGEキー
2 レコード種別 SN-REC-TYPE 9 1 X(1) S=給与 / B=賞与
3 社員名 SN-EMP-NAME 10 40 X(40)
4 部署コード SN-DEPT-CODE 50 2 X(2)
5 地域コード SN-REGION-CODE 52 2 X(2)
6 社員区分コード SN-CATEGORY-CODE 54 3 X(3)
7 支給総額 SN-GROSS-PAYMENT 57 9 9(9)
8 源泉所得税 SN-INCOME-TAX 66 9 9(9)
9 社会保険料 SN-INSURANCE 75 9 9(9)
10 住民税 SN-RESIDENT-TAX 84 9 9(9)
11 差引支給額 SN-NET-PAYMENT 93 9 9(9)
12 課税所得 SN-TAXABLE-INCOME 102 9 9(9)
13 支給額 SN-PAY-AMOUNT 111 9 9(9) 汎用(給与/賞与)
14 予備 SN-FILLER 120 81 X(81)

BONUS-DATA も同一レイアウト(200B)。レコード種別 SN-REC-TYPE = 'B'、支給額 SN-PAY-AMOUNT に賞与額を格納。

DEPT-OUT-01〜50(各200B — KYU07DIV出力

SALARY-NET と同一レイアウト(200B)。部署コードに応じて振り分け出力。

PAYSLIP200B — KYU08PRI出力(印刷イメージ)

# 項目 名称 開始 長さ 属性 備考
1 社員番号 PS-EMP-ID 1 8 X(8)
2 FILLER PS-SP1 9 2 X(2) 空白
3 社員名 PS-EMP-NAME 11 20 X(20) JUSTIFIED RIGHT
4 FILLER PS-SP2 31 2 X(2) 空白
5 基本給 PS-BASIC-SALARY 33 9 Z(8)9 BLANK WHEN ZERO
6 FILLER PS-SP3 42 2 X(2) 空白
7 差引支給額 PS-NET-PAYMENT 44 9 Z(8)9 BLANK WHEN ZERO
8 FILLER PS-SP4 53 2 X(2) 空白
9 ページヘッダ PS-PAGE-TITLE 55 40 X(40) LINAGE制御用
10 予備 PS-FILLER 95 106 X(106)

PAYMENT-DATA200B — KYU09MRG出力

# 項目 名称 開始 長さ 属性 備考
1 社員番号 PD-EMP-ID 1 8 X(8)
2 支給区分 PD-PAY-TYPE 9 1 X(1) S=給与 / B=賞与 / T=合計
3 支給額 PD-AMOUNT 10 9 9(9)
4 振込銀行コード PD-BANK-CODE 19 4 X(4)
5 振込口座番号 PD-ACCOUNT-NO 23 8 9(8)
6 予備 PD-FILLER 31 170 X(170)

新規プログラムタイプカバレッジ一覧(10種)

No. 名称 分類 対応プログラム カバレッジ(現状→目標)
04 レイアウト編集のみ(GETPUT 编辑 KYU08PRI ◎(既存)
08 キーブレイク(集約) key切 KYU03AGG × → ◎
09 DB更新 数据库 KYU02REG, KYU06UPD ◎(既存、本サブシステムで+2本)
10 50分割 分割 KYU07DIV × → ◎
21 CSV→FB変換(改行あり) 文件转换 KYU01CVT × → ◎
23 SELECT条件 数据库 KYU05DED × → ◎
32 1:N+キーブレイク(同キー) 混合 KYU04CAL × → ◎
35 MERGE(複数ファイル結合) 排序 KYU09MRG × → ◎

プログラムタイプカバレッジ率: 16/3545.7%)→ 24/3568.6%

本サブシステムで新規追加するプログラムタイプは 7種08, 09x2, 10, 21, 23, 32, 35)。 09DB更新)は既にKIN02UPD・ZAN06UPDで◎であるが、本サブシステムでさらに2本追加し実績を拡充。 No.27(項目チェック半角20桁/4桁)はKYU01CVT内でSUB04CHK(内部処理25)により実装され、プログラムタイプとしては単一(21)を維持。


新規予約語カバレッジ一覧

No. 予約語 現状 目標 プログラム 使用コンテキスト
6 ALPHABETIC × KYU01CVT クラス条件(社員名英字判定)
8 ALSO KYU04CAL EVALUATE ALSO(勤怠区分×手当種別)
31 CONVERTING × KYU01CVT INSPECT CONVERTING(引用符内改行→SPACE
34 COUNT × KYU01CVT UNSTRING COUNT IN(項目数カウント)
40 DECLARATIVES × KYU01CVT ファイルエラー処理の宣言部
45 DESCENDING × KYU04CAL OCCURS DESCENDING KEY(高額手当優先)
50 DOWN × KYU08PRI SET DOWN BY(ページカウンタ減少)
55 END-ADD × KYU03AGG ADD文の明示的END-ADD
58 END-DIVIDE × KYU04CAL DIVIDE文の明示的END-DIVIDE
66 END-SUBTRACT × KYU05DED SUBTRACT文の明示的END-SUBTRACT
112 NEXT × KYU09MRG READ NEXTの代替(MERGE RETURN使用)
128 PAGE KYU08PRI LINAGE PAGE句 / FD PAGE-COUNTER
129 PAGE-COUNTER × KYU08PRI 特殊レジスタ(自動ページ番号)
142 REMOVAL × CLOSE FOR REMOVALは今回不要
177 UP × KYU08PRI SET UP BYPAGE-COUNTER増加)
180 USE × KYU01CVT USE AFTER ERROR(ファイルエラー処理)
183 VALUES × KYU05DED 88-level VALUES複数値指定
193 ENTRY × KYU09MRG 代替エントリポイント定義
194 MERGE × KYU09MRG MERGE文(複数ファイル結合)
196 RETURN × KYU09MRG MERGE OUTPUT PROCEDUREのRETURN文
204 BEFORE × KYU08PRI WRITE BEFORE ADVANCING

予約語カバレッジ率(◎+△): 125/20561.0%)→ 145/20570.7% 内 ◎: 101/20549.3%)→ 121/20559.0%

前回変更で追加した DECLARATIVES / USE / SORT / RELEASE / および ADDRESS 除外の修正は、 今回のパターン純化方針に伴い再編。SORT / RELEASE は KYU07DIV に COBOL SORT を使わないため削除。


PICTURE記号カバレッジ拡張

記号 現状 目標 プログラム 使用例
ZZZ9 × KYU08PRI PIC Z(8)9 BLANK WHEN ZERO

全体サマリ

指標 現状 目標(追加後) 増分
プログラムタイプ(35種) 16使用 24使用 +868.6%
予約語 ◎+△(205 125 145 +2070.7%
予約語 ◎(205 101 121 +2059.0%
PICTURE記号(11種) 7 8 +1
COBOLプログラム数 20 29 +9