# JIN02SKL 詳細設計書 ## プログラム概要 | 項目 | 内容 | |------|------| | プログラムID | JIN02SKL(人事→JINji, 02, スキルSukiru別評価集計→SKL) | | プログラムタイプ | 19(M:N→N件マッチング+集計) | | 機能 | スキル評価明細(M件)× 評価基準マスタ(N件)→ スキル別評価集計(N件出力) | | CALL方式 | メインプログラム(JCLからCALL) | | DBアクセス | なし | | 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド) | ## ファイル一覧 | DD名 | ファイル名 | 編成 | RECM | サイズ | I/O | 用途 | |:----:|:---------:|:----:|:----:|:-----:|:---:|------| | JIN02R01 | SKILL-EVAL | SEQUENTIAL | FB | 200 | INPUT | スキル評価明細データ(M件) | | JIN02R02 | SKILL-MST | SEQUENTIAL | FB | 80 | INPUT | スキル評価基準マスタ(N件→内部表LOAD) | | JIN02W01 | SKILL-AGG | SEQUENTIAL | FB | 200 | OUTPUT | スキル別評価集計結果(N件出力) | | JIN02W02 | VALID-ERROR | SEQUENTIAL | FB | 80 | OUTPUT | エラーレコード | ## レコード定義 ### SKILL-EVAL-REC(JIN02R01, 200B) | 項目 | PIC | 内容 | 備考 | |:----|:---:|------|:----:| | SKILL-CODE | X(4) | スキルコード | | | EMP-ID | X(8) | 社員番号 | | | EMP-NAME | X(40) | 社員氏名 | | | EVAL-DATE | X(8) | 評価日 YYYYMMDD | | | SCORE | 9(3) | 評価点数 | 1-999 | | PADDING | X(137) | FILLER | | ### SKILL-MST-REC(JIN02R02, 80B) | 項目 | PIC | USAGE | 内容 | 備考 | |:----|:---:|:-----:|------|:----:| | MST-SKILL-CODE | X(4) | — | スキルコード | SEARCH ALL キー | | MST-LEVEL | 9(2) | BINARY | レベル | BINARY 予約語使用 | | MST-SCORE-FROM | 9(3) | — | 下限点数 | | | MST-SCORE-TO | 9(3) | — | 上限点数 | | | MST-LEVEL-NAME | X(20) | — | レベル名称 | | | FILLER | X(048) | — | — | | ### SKILL-AGG-REC(JIN02W01, 200B) | 項目 | PIC | USAGE | 内容 | 備考 | |:----|:---:|:-----:|------|:----:| | AGG-SKILL-CODE | X(4) | — | スキルコード | | | AGG-LEVEL | 9(2) | PACKED-DECIMAL | レベル | PACKED-DECIMAL 予約語使用 | | AGG-LEVEL-NAME | X(20) | — | レベル名称 | | | AGG-EMP-COUNT | 9(5) | BINARY | 人数 | BINARY 予約語使用 | | AGG-COUNT-EDIT | ZZZZ9 | — | 人数編集表示 | ZZZZ9 PICTURE記号 | | AGG-AVG-SCORE | 9(3)V9(2) | PACKED-DECIMAL | 平均点数 | | | FILLER | X(162) | — | — | | ### VALID-ERROR-REC(JIN02W02, 80B) JIN01KNS と共用。VALID-ERROR-REC.cpy(独立したCOPY書式)を参照。 ## 内部表 ### WS-SKILL-TABLE(OCCURS DEPENDING ON) | 項目 | PIC | USAGE | 内容 | |:----|:---:|:-----:|------| | TBL-SKILL-CODE | X(4) | — | スキルコード | | TBL-LEVEL | 9(2) | BINARY | レベル | | TBL-LEVEL-NAME | X(20) | — | レベル名称 | | TBL-EMP-COUNT | 9(5) | BINARY | 件数 | | TBL-SCORE-SUM | 9(8) | BINARY | 合計点 | | TBL-MAX-ENTRY | 99 | BINARY | 最大エントリ数(100) | SEARCH ALL のキー項目:TBL-SKILL-CODE ## 処理詳細 ### 段落一覧 | 段落名 | 機能 | |:-------|:-----| | JIN02SKL-OPEN | ファイルOPEN + 内部表初期化 | | JIN02SKL-LOAD-MST | 評価基準マスタ(R02)全件LOAD → 内部表構築 | | JIN02SKL-READ-EVAL | 評価明細(R01)1件READ | | JIN02SKL-AGGREGATE | 集計主処理(SEARCH ALL + 件数加算 + 合計加算) | | JIN02SKL-SEARCH-LVL | SEARCH ALL で該当レベルを特定 | | JIN02SKL-UPDATE-TBL | 内部表の件数・合計点をUPDATE | | JIN02SKL-OUTPUT | 内部表を降順走査→平均点算出→WRITE | | JIN02SKL-GET-AVG | DIVIDEで平均点算出(END-DIVIDE) | | JIN02SKL-DESCEND | PERFORM VARYING 降順走査(DESCENDING) | | JIN02SKL-WRITE-AGG | 1エントリWRITE | | JIN02SKL-CLOSE | ファイルCLOSE + GOBACK | ### 処理ロジック #### 初期処理(JIN02SKL-OPEN) 1. JIN02R01 / JIN02R02 / JIN02W01 / JIN02W02 を OPEN 2. WS-TBL-ENTRY を INITIALIZE(内部表初期化) #### マスタLOAD(JIN02SKL-LOAD-MST) 1. JIN02R02 から SKILL-MST を全件 LOAD 2. ADD 1 TO WS-MAX-ENTRY END-ADD 3. 内部表 WS-SKILL-TABLE に設定(MST-SKILL-CODE, MST-LEVEL, MST-LEVEL-NAME, TBL-EMP-COUNT=0, TBL-SCORE-SUM=0) 4. AT END → JIN02SKL-READ-EVAL へ 5. JIN02R02 を CLOSE(不要になったので) #### 主処理ループ(JIN02SKL-READ-EVAL → JIN02SKL-AGGREGATE → ループ) 1. JIN02R01 から SKILL-EVAL を1件 READ 2. AT END → JIN02SKL-OUTPUT へ 3. JIN02SKL-AGGREGATE を PERFORM #### 集計処理(JIN02SKL-AGGREGATE) 1. JIN02SKL-SEARCH-LVL を呼出(SEARCH ALL) 2. WHEN 該当 → JIN02SKL-UPDATE-TBL を PERFORM 3. WHEN NOT 該当 → JIN02SKL-WRITE-ERR を PERFORM #### SEARCH ALL(JIN02SKL-SEARCH-LVL) 1. SEARCH ALL WS-SKILL-TABLE 2. AT END → 直接 PERFORM 2100WRTERRSOR(該当するレベルがない) 3. WHEN TBL-SKILL-CODE(WS-IDX) = SKILL-CODE → 直接 PERFORM 2200UPDTTLSOR #### 内部表UPDATE(JIN02SKL-UPDATE-TBL) 1. ADD 1 TO TBL-EMP-COUNT(WS-IDX) END-ADD 2. ADD SCORE TO TBL-SCORE-SUM(WS-IDX) END-ADD #### 集計結果出力(JIN02SKL-OUTPUT) 1. 内部表を件数降順(DESCENDING)で走査 2. JIN02SKL-DESCEND を PERFORM THRU JIN02SKL-WRITE-AGG 3. 各エントリについて: d. WS-AVG を ZERO で初期化 e. JIN02SKL-GET-AVG を PERFORM(DIVIDE TBL-SCORE-SUM BY TBL-EMP-COUNT GIVING WS-AVG END-DIVIDE) f. SKILL-AGG-REC に編集設定(ZZZZ9 編集文字) g. JIN02W01 へ WRITE #### 降順走査(JIN02SKL-DESCEND) ``` PERFORM VARYING WS-IDX FROM WS-MAX-ENTRY BY -1 UNTIL WS-IDX = 0 PERFORM JIN02SKL-WRITE-AGG END-PERFORM ``` SUBTRACT 1 FROM WS-IDX END-SUBTRACT(END-SUBTRACT 予約語使用) #### 平均点算出(JIN02SKL-GET-AVG) ``` DIVIDE TBL-SCORE-SUM(WS-IDX) BY TBL-EMP-COUNT(WS-IDX) GIVING WS-AVG-TEMP REMAINDER WS-REM END-DIVIDE ``` (DIVIDE 予約語カバレッジ + END-DIVIDE) #### エラー出力(JIN02SKL-WRITE-ERR) 1. VALID-ERROR-REC にエラー情報設定 2. JIN02W02 へ WRITE #### 終了処理(JIN02SKL-CLOSE) 1. JIN02R01 / JIN02W01 / JIN02W02 を CLOSE 2. GOBACK ## カバレッジ対象キーワード | 予約語/記号 | 区分 | 使用箇所 | |:-----------|:----:|:---------| | USAGE BINARY | 予約語(16) | MST-LEVEL, TBL-EMP-COUNT 等 | | USAGE PACKED-DECIMAL | 予約語(127) | AGG-LEVEL, AGG-AVG-SCORE | | BY(降順走査) | 予約語(18) | PERFORM VARYING BY -1(JIN02SKL-DESCEND相当) | | END-DIVIDE | 予約語(58) | JIN02SKL-GET-AVG | | END-SUBTRACT | 予約語(66) | JIN02SKL-DESCEND | | GREATER | 予約語(87) | IF WS-COUNT IS GREATER THAN ZERO | | IF GREATER THAN | 予約語(87) | 件数判定 | | PIC ZZZZ9 | PICTURE記号 | AGG-COUNT-EDIT | | PIC N | PICTURE記号 | (JIN01RECから継承、未使用でもCOPY参照でカバー) |