180 lines
7.3 KiB
Markdown
180 lines
7.3 KiB
Markdown
# 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
|
||
|
||
## 処理詳細
|
||
|
||
### 段落一覧
|
||
|
||
| 段落名 | 機能 |
|
||
|:-------|:-----|
|
||
| 0000MAJCOLSOR | メインコントロール(初期→マスタLOAD→主処理→出力→終了) |
|
||
| 1000ITTSOR | 初期処理(開始メッセージ・初期化・運用日付・OPEN) |
|
||
| 1100R02INNSOR | 評価基準マスタ(R02)読込・EOF判定 |
|
||
| 1200MSTLDASOR | 評価基準マスタ全件LOAD → 内部表構築 |
|
||
| 1300R01INNSOR | 評価明細(R01)読込・EOF判定 |
|
||
| 2000MAJSOR | 集計主処理(SEARCH判定 → 更新 or エラー) |
|
||
| 2100WRTERRSOR | エラーレコードWRITE |
|
||
| 2200UPDTTLSOR | 内部表の件数・合計点UPDATE |
|
||
| 3000OUTPUSOR | 集計結果出力(降順走査 → 平均点算出 → WRITE) |
|
||
| 3100WRITEAGSOR | 1エントリWRITE |
|
||
| 4000STPSOR | 終了処理(統計表示・CLOSE・終了メッセージ) |
|
||
| 6000MSGOUTSOR | メッセージ編集出力SUB呼出 |
|
||
| 9999ABDSOR | エラー処理(ABEND) |
|
||
|
||
> 設計書の機能記述(SEARCH-LVL / GET-AVG / DESCEND 等)は、実装では個々の SECTION ではなく親段落(2000MAJSOR / 3000OUTPUSOR)内にインラインで実装されている。
|
||
|
||
### 処理ロジック
|
||
|
||
#### 初期処理(1000ITTSOR)
|
||
1. 開始メッセージを OUTPUT(6000MSGOUTSOR 経由)
|
||
2. JIN02R01 / JIN02R02 / JIN02W01 / JIN02W02 を OPEN
|
||
3. WS-TBL-MAX-IDX を ZERO で初期化(内部表初期化)
|
||
|
||
#### マスタLOAD(1100R02INNSOR / 1200MSTLDASOR)
|
||
1. JIN02R02 から SKILL-MST を 1 件読込(1100R02INNSOR)
|
||
2. 1200MSTLDASOR で内部表 WS-SKILL-TABLE に設定
|
||
(MST-SKILL-CODE, MST-LEVEL, MST-LEVEL-NAME, TBL-EMP-COUNT=0, TBL-SCORE-SUM=0)
|
||
3. AT END(1100R02INNSOR で WRK-R02EOF='1')→ マスタLOADループ終了
|
||
4. JIN02R02 の CLOSE は 3000OUTPUSOR で実施
|
||
|
||
#### 主処理ループ(1300R01INNSOR → 2000MAJSOR → ループ)
|
||
1. JIN02R01 から SKILL-EVAL を 1 件 READ(1300R01INNSOR)
|
||
2. AT END → 3000OUTPUSOR へ
|
||
3. 2000MAJSOR を PERFORM
|
||
|
||
#### 集計処理(2000MAJSOR)
|
||
1. SEARCH ALL で該当レベルを特定
|
||
2. WHEN 該当 → 2200UPDTTLSOR を PERFORM
|
||
3. WHEN NOT 該当 → 2100WRTERRSOR を PERFORM
|
||
|
||
#### SEARCH ALL(2000MAJSOR 内)
|
||
1. SEARCH ALL WS-SKILL-TABLE
|
||
2. AT END → PERFORM 2100WRTERRSOR(該当するレベルがない)
|
||
3. WHEN TBL-SKILL-CODE(WS-IDX) = SKILL-CODE → PERFORM 2200UPDTTLSOR
|
||
|
||
#### 内部表UPDATE(2200UPDTTLSOR)
|
||
1. ADD 1 TO TBL-EMP-COUNT(WS-IDX) END-ADD
|
||
2. ADD SCORE TO TBL-SCORE-SUM(WS-IDX) END-ADD
|
||
|
||
#### 集計結果出力(3000OUTPUSOR)
|
||
1. 内部表をスキルコード降順(逆走査)で走査(内部表は SKILL-CODE 昇順。WS-TBL-MAX-IDX から -1 ずつ逆走査)
|
||
2. 各エントリについて:
|
||
a. WS-AVG を ZERO で初期化
|
||
b. DIVIDE TBL-SCORE-SUM BY TBL-EMP-COUNT GIVING WS-AVG END-DIVIDE
|
||
c. SKILL-AGG-REC に編集設定(ZZZZ9 編集文字)
|
||
d. 3100WRITEAGSOR を PERFORM(JIN02W01 へ WRITE)
|
||
|
||
#### 降順走査(3000OUTPUSOR 内)
|
||
```
|
||
PERFORM VARYING WS-IDX FROM WS-MAX-ENTRY BY -1
|
||
UNTIL WS-IDX = 0
|
||
PERFORM 3100WRITEAGSOR
|
||
END-PERFORM
|
||
```
|
||
SUBTRACT 1 FROM WS-IDX END-SUBTRACT(END-SUBTRACT 予約語使用)
|
||
|
||
#### 平均点算出(3000OUTPUSOR 内)
|
||
```
|
||
DIVIDE TBL-SCORE-SUM(WS-IDX) BY TBL-EMP-COUNT(WS-IDX)
|
||
GIVING WS-AVG-TEMP REMAINDER WS-REM
|
||
END-DIVIDE
|
||
```
|
||
(DIVIDE 予約語カバレッジ + END-DIVIDE)
|
||
|
||
#### エラー出力(2100WRTERRSOR)
|
||
1. VALID-ERROR-REC にエラー情報設定
|
||
2. JIN02W02 へ WRITE
|
||
|
||
#### 終了処理(4000STPSOR)
|
||
1. 統計表示
|
||
2. JIN02W01 / JIN02W02 を CLOSE(JIN02R01 / JIN02R02 は 3000OUTPUSOR で CLOSE 済み)
|
||
3. 終了メッセージ OUTPUT(6000MSGOUTSOR)
|
||
4. GOBACK
|
||
|
||
## カバレッジ対象キーワード
|
||
|
||
| 予約語/記号 | 区分 | 使用箇所 |
|
||
|:-----------|:----:|:---------|
|
||
| USAGE BINARY | 予約語(16) | TBL-LEVEL, TBL-EMP-COUNT, TBL-SCORE-SUM(内部表) |
|
||
| USAGE PACKED-DECIMAL | 予約語(127) | AGG-LEVEL, AGG-AVG-SCORE |
|
||
| BY(降順走査) | 予約語(18) | PERFORM VARYING BY -1(3000OUTPUSOR) |
|
||
| END-DIVIDE | 予約語(58) | 3000OUTPUSOR |
|
||
| END-SUBTRACT | 予約語(66) | 3000OUTPUSOR |
|
||
| GREATER | 予約語(87) | IF WS-COUNT IS GREATER THAN ZERO |
|
||
| IF GREATER THAN | 予約語(87) | 件数判定 |
|
||
| PIC ZZZZ9 | PICTURE記号 | AGG-COUNT-EDIT |
|
||
| PIC N | PICTURE記号 | (JIN02SKL では PIC N 未使用。PIC N は JIN01KNS が JIN01REC の KANJI-NAME でカバー) |
|