Files
cobol-tna-system/詳細設計書/詳細設計書_JIN02SKL.md

180 lines
7.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-RECJIN02R01, 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-RECJIN02R02, 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-RECJIN02W01, 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-RECJIN02W02, 80B
JIN01KNS と共用。VALID-ERROR-REC.cpy(独立したCOPY書式)を参照。
## 内部表
### WS-SKILL-TABLEOCCURS 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. 開始メッセージを OUTPUT6000MSGOUTSOR 経由)
2. JIN02R01 / JIN02R02 / JIN02W01 / JIN02W02 を OPEN
3. WS-TBL-MAX-IDX を ZERO で初期化(内部表初期化)
#### マスタLOAD1100R02INNSOR / 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 END1100R02INNSOR で WRK-R02EOF='1')→ マスタLOADループ終了
4. JIN02R02 の CLOSE は 3000OUTPUSOR で実施
#### 主処理ループ(1300R01INNSOR → 2000MAJSOR → ループ)
1. JIN02R01 から SKILL-EVAL を 1 件 READ1300R01INNSOR
2. AT END → 3000OUTPUSOR へ
3. 2000MAJSOR を PERFORM
#### 集計処理(2000MAJSOR
1. SEARCH ALL で該当レベルを特定
2. WHEN 該当 → 2200UPDTTLSOR を PERFORM
3. WHEN NOT 該当 → 2100WRTERRSOR を PERFORM
#### SEARCH ALL2000MAJSOR 内)
1. SEARCH ALL WS-SKILL-TABLE
2. AT END → PERFORM 2100WRTERRSOR(該当するレベルがない)
3. WHEN TBL-SKILL-CODE(WS-IDX) = SKILL-CODE → PERFORM 2200UPDTTLSOR
#### 内部表UPDATE2200UPDTTLSOR
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 を PERFORMJIN02W01 へ 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-SUBTRACTEND-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 を CLOSEJIN02R01 / JIN02R02 は 3000OUTPUSOR で CLOSE 済み)
3. 終了メッセージ OUTPUT6000MSGOUTSOR
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 -13000OUTPUSOR |
| 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 でカバー) |