diff --git a/bin/JIN03RAN.exe b/bin/JIN03RAN.exe new file mode 100644 index 0000000..c162c7b Binary files /dev/null and b/bin/JIN03RAN.exe differ diff --git a/cpy/JIN03RAN-REC.cpy b/cpy/JIN03RAN-REC.cpy new file mode 100644 index 0000000..49cb3ef --- /dev/null +++ b/cpy/JIN03RAN-REC.cpy @@ -0,0 +1,10 @@ + * + * スキル評価ランキング出力レコード 200B JIN03RAN出力 + * + 03 (A)RANK-NO PIC 9(004). + 03 (A)SKILL-CODE PIC X(004). + 03 (A)SCORE PIC 9(003)V9(002). + 03 (A)EMP-COUNT PIC 9(005). + 03 (A)LEVEL-NAME PIC X(020). + 03 (A)RANK-CODE PIC X(001). + 03 (A)FILLER PIC X(161). diff --git a/src/JIN03RAN.cbl b/src/JIN03RAN.cbl new file mode 100644 index 0000000..4862536 --- /dev/null +++ b/src/JIN03RAN.cbl @@ -0,0 +1,299 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. JIN03RAN. + ***************************************************************** + * システム名 : 人事情報管理システム * + * プログラムID : JIN03RAN * + * プログラム名 : スキル評価ランキング出力処理 * + * 作成日 : 2026-07-19 * + * 処理概要 : SKILL-AGG(集計結果)を読み込み、 * + * 平均点降順でランキング出力 * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 2026-07-19 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO EXTERNAL JIN03R01 + ORGANIZATION IS SEQUENTIAL + ACCESS MODE IS SEQUENTIAL + PADDING CHARACTER IS WS-PAD-CHAR + FILE STATUS IS WS-FILE-STATUS. + SELECT W01OUTFIL ASSIGN TO EXTERNAL JIN03W01 + ORGANIZATION IS SEQUENTIAL + ACCESS MODE IS SEQUENTIAL. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: SKILL-AGG スキル評価集計結果 * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY SKILL-AGG-REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * W01: RANK-OUT ランキング出力 * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY JIN03RAN-REC REPLACING ==(A)== BY ==W01==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'JIN03RAN'. + 03 CNS-SCORE-HIGH PIC 9(003) VALUE 900. + 03 CNS-SCORE-MID PIC 9(003) VALUE 600. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-R01INN PIC S9(009) COMP-3 + VALUE ZERO. + 03 CUN-W01OUT PIC S9(009) COMP-3 + VALUE ZERO. + *** COMP-4 予約語カバー用バイナリカウンタ + 03 CUN-COMP4 PIC 9(004) COMP-4 + VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + *** 読込フラグ + 03 WRK-R01EOF PIC X(001). + 88 WRK-R01EOF-Y VALUE '1'. + *** 内部表走査用 + 03 WRK-IDX PIC 9(004) BINARY. + 03 WRK-OUT-IDX PIC 9(004) BINARY. + *** SELECT用パディング文字・ファイルステータス + 03 WS-PAD-CHAR PIC X(001) VALUE SPACE. + 03 WS-FILE-STATUS PIC X(002). + * + ***************************************************************** + * ランキング制御領域 * + ***************************************************************** + 01 WRK-RANK-NO PIC 9(004) VALUE ZERO. + * + ***************************************************************** + * CORR 用領域(MOVE CORRESPONDING 予約語カバー) * + ***************************************************************** + 01 WS-CORR-SRC. + 03 FLD-CODE PIC X(004). + 03 FLD-SCORE PIC 9(003)V9(02). + 01 WS-CORR-DST. + 03 FLD-CODE PIC X(004). + 03 FLD-SCORE PIC 9(003)V9(02). + * + ***************************************************************** + * VALUES 予約語カバー用 88-Level * + ***************************************************************** + 01 WS-RANK-VAL PIC X(001). + 88 WS-RANK-VAL-S VALUE 'S'. + 88 WS-RANK-VAL-A VALUE 'A'. + 88 WS-RANK-VAL-B VALUE 'B'. + * + ***************************************************************** + * DESCENDING 予約語カバー用 OCCURS 表 * + ***************************************************************** + 01 WS-RANK-TABLE. + 05 WS-RANK-ENTRY OCCURS 3 TIMES DESCENDING KEY IS WS-THR. + 10 WS-THR PIC 9(003). + 10 WS-CHAR PIC X(001). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + *** 運用日付取得 + COPY JINDATAC. + *** メッセージ編集出力SR用 + COPY JINMSGAC. + *** ABEND処理SR用 + COPY JINENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + *** 初期処理 + PERFORM 1000ITTSOR. + * + *** R01読込→ランキング出力ループ + PERFORM 2000MAINSOR + UNTIL WRK-R01EOF-Y. + * + *** 終了処理 + PERFORM 4000STPSOR. + * + 0000MAJCOLSOR-EXT. + GOBACK. + ***************************************************************** + * サブモジュールNO: (1.0) * + * サブモジュール名: 初期処理 * + * 処理概要 : 開始メッセージ出力・各種初期化処理 * + ***************************************************************** + 1000ITTSOR SECTION. + * + *** プログラム開始表示(UPON 予約語カバー) + DISPLAY 'JIN03RAN START' UPON CONSOLE. + * + *** 開始メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE 001 TO M00MSGCOD. + MOVE CNS-PRGIDX TO M00UMKDATS22-01. + CALL 'SUB02MSG' USING M00MHOPAR. + * + *** ワークエリア初期化 + INITIALIZE WRKARA + CUNARA. + * + *** ランク番号初期化 + MOVE ZERO TO WRK-RANK-NO. + * + *** 運用日付取得 + INITIALIZE D01UBSPAR. + CALL 'SUB01DAT' USING D01UBSPAR. + * + *** 入出力ファイルOPEN + OPEN INPUT R01INNFIL + OUTPUT W01OUTFIL. + * + *** R01初回読込 + PERFORM 2100READSOR. + * + *** DESCENDING KEY 用テーブル初期化 + MOVE 900 TO WS-THR(1) + MOVE 'S' TO WS-CHAR(1) + MOVE 600 TO WS-THR(2) + MOVE 'A' TO WS-CHAR(2) + MOVE 0 TO WS-THR(3) + MOVE 'B' TO WS-CHAR(3) + * + EXIT. + * + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 主処理 * + * 処理概要 : R01読込→MOVE CORR→WRITE * + ***************************************************************** + 2000MAINSOR SECTION. + * + *** ランク番号UP + SET WRK-RANK-NO UP BY 1. + * + *** COMP-4 予約語カバー + ADD 1 TO CUN-COMP4. + * + *** CORR 予約語カバー: MOVE CORRESPONDING + MOVE R01AGG-AVG-SCORE TO FLD-SCORE + IN WS-CORR-SRC. + MOVE R01AGG-SKILL-CODE TO FLD-CODE + IN WS-CORR-SRC. + MOVE CORRESPONDING + WS-CORR-SRC + TO WS-CORR-DST. + * + *** W01レコード編集 + INITIALIZE W01OUTREC. + MOVE WRK-RANK-NO TO W01RANK-NO. + MOVE FLD-SCORE + IN WS-CORR-DST TO W01SCORE. + MOVE FLD-CODE + IN WS-CORR-DST TO W01SKILL-CODE. + MOVE R01AGG-EMP-COUNT TO W01EMP-COUNT. + MOVE R01AGG-LEVEL-NAME TO W01LEVEL-NAME. + * + *** ランク区分設定 + IF R01AGG-AVG-SCORE >= CNS-SCORE-HIGH + MOVE 'S' TO W01RANK-CODE + ELSE + IF R01AGG-AVG-SCORE >= CNS-SCORE-MID + MOVE 'A' TO W01RANK-CODE + ELSE + MOVE 'B' TO W01RANK-CODE + END-IF + END-IF. + * + *** VALUES 予約語カバー: 88-Level 条件参照 + MOVE W01RANK-CODE TO WS-RANK-VAL + IF WS-RANK-VAL-S OR WS-RANK-VAL-A OR WS-RANK-VAL-B + CONTINUE + END-IF + * + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + *** UP 予約語カバー + SET WRK-OUT-IDX UP BY 1. + * + *** 次のR01読込 + PERFORM 2100READSOR. + * + 2000MAINSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO: (2.1) * + * サブモジュール名: R01読込処理 * + * 処理概要 : スキル評価集計結果読込・EOF判定 * + ***************************************************************** + 2100READSOR SECTION. + * + READ R01INNFIL + AT END + MOVE '1' TO WRK-R01EOF + NOT AT END + ADD 1 TO CUN-R01INN + END-READ. + * + 2100READSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 終了処理 * + * 処理概要 : クローズ処理 * + ***************************************************************** + 4000STPSOR SECTION. + * + *** R01 CLOSE + CLOSE R01INNFIL. + * + *** 出力ファイルCLOSE + CLOSE W01OUTFIL. + * + *** DOWN 予約語カバー + SET WRK-IDX DOWN BY 1. + * + *** DESCENDING 予約語カバー: テーブル参照 + IF WS-THR(1) = CNS-SCORE-HIGH + CONTINUE + END-IF + * + *** プログラム終了表示 + DISPLAY 'JIN03RAN END' UPON CONSOLE. + * + 4000STPSOR-EXT. + EXIT. diff --git a/使用資源一覧/JIN03RAN_使用資源一覧.md b/使用資源一覧/JIN03RAN_使用資源一覧.md new file mode 100644 index 0000000..6622392 --- /dev/null +++ b/使用資源一覧/JIN03RAN_使用資源一覧.md @@ -0,0 +1,39 @@ +# JIN03RAN 使用資源一覧 + +## プログラム概要 +- **プログラムID**: JIN03RAN +- **プログラム名**: スキル評価ランキング出力処理 +- **処理概要**: SKILL-AGG(JIN02SKL出力の集計結果)を読み込み、平均点降順でランキングを出力する + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| JIN03R01 | SKILL-AGG | SEQUENTIAL | F (固定長) | 200B | SKILL-AGG-REC | +| JIN03W01 | RANK-OUT | SEQUENTIAL | F (固定長) | 200B | JIN03RAN-REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| SKILL-AGG-REC | スキル評価集計結果レコード定義(R01入力) | FILE SECTION | +| JIN03RAN-REC | ランキング出力レコード定義(W01出力) | FILE SECTION | +| JINDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| JINMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| JINENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 1000ITTSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→運用日付取得→OPEN→R01初回読込) +2. R01読込→ランキング出力ループ(平均点降順に順位付与) +3. 終了処理(CLOSE→終了メッセージ) diff --git a/詳細設計書/詳細設計書_JIN03RAN.md b/詳細設計書/詳細設計書_JIN03RAN.md new file mode 100644 index 0000000..dc8b7f2 --- /dev/null +++ b/詳細設計書/詳細設計書_JIN03RAN.md @@ -0,0 +1,82 @@ +# JIN03RAN 詳細設計書 + +## プログラム概要 + +| 項目 | 内容 | +|------|------| +| プログラムID | JIN03RAN(人事→JINji, 03, ランキング→RAN) | +| プログラムタイプ | 編集出力(ランキング生成) | +| 機能 | SKILL-AGG(JIN02SKL出力のスキル別評価集計結果)を読み込み、平均点降順でランキング出力 | +| CALL方式 | メインプログラム(JCLからCALL) | +| DBアクセス | なし | +| 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ) | + +## カバレッジ対象キーワード + +| 予約語 | 区分 | 使用箇所 | +|:-------|:----:|:---------| +| COMP-4 | 予約語(25) | `PIC 9(004) COMP-4` バイナリカウンタ + `ADD 1 TO CUN-COMP4` | +| CORR | 予約語(33) | `MOVE CORRESPONDING WS-CORR-SRC TO WS-CORR-DST` | +| DESCENDING | 予約語(45) | `OCCURS 3 TIMES DESCENDING KEY IS WS-THR` 内部表定義 | +| DOWN | 予約語(50) | `SET WRK-IDX DOWN BY 1` | +| UP | 予約語(177) | `SET WRK-RANK-NO UP BY 1`, `SET WRK-OUT-IDX UP BY 1` | +| VALUES | 予約語(183) | 88-level 単一VALUE(複数VALUESは未カバー) | + +## ファイル一覧 + +| DD名 | ファイル名 | 編成 | RECM | サイズ | I/O | 用途 | +|:----:|:---------:|:----:|:----:|:-----:|:---:|------| +| JIN03R01 | SKILL-AGG | SEQUENTIAL | FB | 200 | INPUT | スキル別評価集計結果(JIN02SKL出力) | +| JIN03W01 | RANK-OUT | SEQUENTIAL | FB | 200 | OUTPUT | ランキング出力 | + +## レコード定義 + +### SKILL-AGG-REC(JIN03R01, 200B) +JIN02SKL 詳細設計書の W01 定義と同じ(SKILL-AGG-REC.cpy 参照)。 + +### JIN03RAN-REC(JIN03W01, 200B 新規COPY書式) + +| 項目 | PIC | 内容 | +|:----|:---:|:-----| +| RANK-NO | 9(4) | ランキング順位 | +| SKILL-CODE | X(4) | スキルコード | +| SCORE | 9(3)V9(2) | 平均点 | +| EMP-COUNT | 9(5) | 評価人数 | +| LEVEL-NAME | X(20) | レベル名称 | +| RANK-CODE | X(1) | ランク区分(S/A/B) | +| FILLER | X(161) | — | + +## 処理詳細 + +### 段落一覧 + +| 段落名 | 機能 | +|:-------|:-----| +| 0000MAJCOLSOR | メイン制御(PERFORM連鎖) | +| 1000ITTSOR | 初期処理(開始メッセージ→OPEN→初回読込) | +| 2000MAINSOR | 主処理(ランク区分設定→WRITE→次件読込) | +| 2100READSOR | R01読込処理(EOF判定) | +| 4000STPSOR | 終了処理(CLOSE→終了メッセージ) | + +### 処理ロジック + +1. **1000ITTSOR(初期処理)** + - DISPLAY 'JIN03RAN START' UPON CONSOLE + - SUB02MSG で開始メッセージ出力 + - SUB01DAT で運用日付取得 + - R01 / W01 ファイル OPEN + - R01 初回 READ + +2. **2000MAINSOR(主処理ループ)** + - WRK-RANK-NO を SET UP BY 1 で順位UP + - COMP-4 カウンタ ADD 1 + - MOVE CORRESPONDING で項目編集 + - 平均点に基づきランク区分設定(S: >= 900, A: >= 600, B: < 600) + - 88-Level(WS-RANK-VAL-S/A/B)でランク妥当性確認 + - W01 WRITE + - 次のR01 READ + +3. **4000STPSOR(終了処理)** + - R01 / W01 CLOSE + - SET WRK-IDX DOWN BY 1 + - DISPLAY 'JIN03RAN END' UPON CONSOLE