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

228 lines
9.7 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.
# JIN09RPT 詳細設計書
## プログラム概要
| 項目 | 内容 |
|------|------|
| プログラムID | JIN09RPT(人事→JINji, 09, 社員別スキル集計レポート→RPT) |
| プログラムタイプ | 32(1:N+同キーキーブレイク) |
| 機能 | SKILL-EVALM件, EMP-ID昇順)を社員キーブレイクで集計し、社員別スキル集計結果を出力する |
| CALL方式 | メインプログラム(JCLからCALL) |
| DBアクセス | なし |
| 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド) |
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | SKILL-EVAL | JCL の SORTSTEP010)で EMP-ID 昇順に並替済であること |
| 2 | SKILL-MST | SKILL-CODE 昇順に整列済であること |
### 使用ファイル一覧
| NO | 使用ファイル名 | 識別子 | DD名 | I/O | COPY群 | 形式 | レコード長 | 媒体 | 備考 |
|----|--------------|--------|------|-----|--------|------|-----------|------|------|
| 1 | SKILL-EVAL | R01 | JIN09R01 | I | SKILL-EVAL-REC | FB | 200 | PS | EMP-ID昇順 |
| 2 | SKILL-MST | R02 | JIN09R02 | I | SKILL-MST-REC | FB | 80 | PS | SKILL-CODE昇順 |
| 3 | SKILL-SUM | W01 | JIN09W01 | O | JIN09REC | FB | 120 | PS | 社員別集計結果 |
| 4 | VALID-ERROR | W02 | JIN09W02 | O | VALID-ERROR-REC | FB | 80 | PS | エラー退避 |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------|
| 1 | SKILL-EVAL | EMP-ID昇順 | 同キーキーブレイク(社員ごと) |
| 2 | SKILL-MST | SKILL-CODE昇順 | 評価基準マッチング(1:N) |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | 運用日付取得SUB | SUB01DAT | JINDATAC |
| 2 | メッセージ編集出力SUB | SUB02MSG | JINMSGAC |
| 3 | ABEND処理SUB | SUB03END | JINENDAC |
---
## 処理詳細
### 段落一覧
| 段落名 | 機能 |
|:-------|:-----|
| 0000MAJCOLSOR | メインコントロール(初期→マスタLOAD→主処理→終了) |
| 1000ITTSOR | 初期処理(開始メッセージ・初期化・OPEN・運用日付) |
| 1100R02INNSOR | 評価基準マスタ(R02)読込・EOF判定 |
| 1200MSTLDASOR | 評価基準マスタ全件LOAD → 内部表構築 |
| 1250R02CLOSOR | 評価基準マスタ(R02CLOSE |
| 1300R01INNSOR | 評価明細(R01)読込・EOF判定 |
| 1500TBLINITSOR | 内部表初期化(INITIALIZE TBL |
| 1600TBLRSTSOR | 内部表リセット(キーブレイク時に再初期化) |
| 2000MAJSOR | 主処理(キーブレイク判定 → 集計 → 前社員分出力 → リセット) |
| 2100AGGRGASOR | 1明細の集計主処理(レベル判定→SEARCH→UPDATE/ERR |
| 2200JUDGESOR | スコア→S/A/B/Cレベル判定(NESTED IF 3段) |
| 2300UPDTTLSOR | 内部表の件数・合計点UPDATE |
| 2400WRTERRSOR | エラーレコードWRITE |
| 3000OUTPUSOR | 1社員分の集計結果出力(昇順走査→平均点→WRITE) |
| 3100WRITEAGSOR | 1行の集計レコードWRITEDIVIDE平均点含む) |
| 4000STPSOR | 終了処理(統計表示・CLOSE・CANCEL・終了メッセージ) |
| 6000MSGOUTSOR | メッセージ編集出力SUB呼出 |
| 9999ABDSOR | エラー処理(ABEND |
### 処理フロー
```
1. 初期処理(1000ITTSOR
1-1. SUB02MSG で開始メッセージ出力(6000MSGOUTSOR
1-2. 内部表 WS-SKILL-TABLE を INITIALIZE1500TBLINITSOR
1-3. SUB01DAT で運用日取得(復帰コード≠0なら 9999ABDSOR+SUB03END で異常終了)
1-4. JIN09R01 / JIN09R02 / JIN09W01 / JIN09W02 を OPEN
1-5. 初回フラグ(WRK-FIRST-FLG)を 'Y' に設定
1-6. R02 初回読込(1100R02INNSOR
1-7. R01 初回読込(1300R01INNSOR
2. マスタLOAD1100R02INNSOR / 1200MSTLDASOR
2-1. JIN09R02 から SKILL-MST を 1 件 READ1100R02INNSOR
2-2. 1200MSTLDASOR で内部表 WS-SKILL-TABLE(WS-TBL-ENTRY) に設定
2-3. AT END → 1250R02CLOSORJIN09R02 CLOSE)→ 主処理へ
3. 主処理(0000MAJCOLSOR
3-1. 1300R01INNSOR で SKILL-EVAL を1件 READ
3-2. AT END → 3000OUTPUSOR(最終社員分)→ 4000STPSOR へ
3-3. 2000MAJSOR でキーブレイク判定:
(初回 or EMP-ID が WS-PREV-EMP-ID と不一致 → キーブレイク)
→ 3000OUTPUSOR で前社員分を出力、1600TBLRSTSOR で内部表リセット
3-4. 2100AGGRtASOR を PERFORM
3-5. WS-PREV-EMP-ID に今回 EMP-ID を設定
3-6. 3-1 へ戻る
4. 集計処理(2100AGGRGASOR
4-1. 2200JUDGESOR でレベル判定
4-2. SEARCH ALL で評価基準を特定
4-3. WHEN 該当 → 2300UPDTTLSOR を PERFORM
4-4. WHEN 未該当 → 2400WRTERRSOR を PERFORM
5. レベル判定(2200JUDGESOR)— NESTED IF 3段 + 複合条件
IF SCORE >= 80 AND SCORE <= 999
IF SCORE >= 90 OR SCORE = 100
MOVE 'S' TO WS-LEVEL
ELSE
MOVE 'A' TO WS-LEVEL
END-IF
ELSE
IF SCORE >= 50 AND SCORE <= 79
MOVE 'B' TO WS-LEVEL
ELSE
IF SCORE >= 1 AND SCORE <= 49
MOVE 'C' TO WS-LEVEL
ELSE
MOVE 'X' TO WS-LEVEL
NEXT SENTENCE
END-IF
END-IF
END-IF
6. 社員グループ出力(3000OUTPUSOR
6-1. 内部表を 1 から WS-TBL-ENTRY まで PERFORM VARYING で走査
6-2. 件数 > 0 のエントリのみ 3100WRITEAGSOR で出力(DIVIDE平均点含む)
6-3. 出力行数カウンタを加算
7. 終了処理(4000STPSOR
7-1. 統計表示
7-2. JIN09R01 / JIN09W01 / JIN09W02 を CLOSE
7-3. CANCEL 'SUB02MSG' でサブPGM解放
7-4. SUB02MSG で件数メッセージ出力
7-5. GOBACK
```
### I-O-CONTROL
```
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT R01INNFIL ASSIGN TO EXTERNAL JIN09R01.
SELECT R02INNFIL ASSIGN TO EXTERNAL JIN09R02.
SELECT W01OUTFIL ASSIGN TO EXTERNAL JIN09W01.
SELECT W02OUTFIL ASSIGN TO EXTERNAL JIN09W02.
I-O-CONTROL.
```
> 補足:I-O-CONTROL 段落は予約語カバー目的で記載する。当初 SAME RECORD AREA FOR
> R01INNFIL R02INNFIL を指定したが、GnuCOBOL 3.2 はレコード長の異なるファイル
> R01=200B / R02=80B)間で共有領域が最小レコード長に固定され、R01 の READ が
> 破綻することが判明したため、SAME 句は使用しない(IBM COBOL では正しく動作する
> が、ローカル検証の再現性を優先して SAME 予約語カバーは断念)。
### SET 条件名 / NEXT SENTENCE / CANCEL / EJECT / SKIP2
| 予約語 | 使用箇所 |
|:-------|:---------|
| SET 条件名 TO FALSE | 2000MAJSOR: キーブレイク検知時に SET WRK-FIRST-FLG TO FALSE で初回フラグ解除 |
| NEXT SENTENCE | レベル判定の ELSE 内で未判定時、後続文へ制御 |
| CANCEL | 終了処理で CANCEL 'SUB02MSG' |
| EJECT | 段落境界の第7桁に `*` 付きコメント行 `*EJECT`(コメント化) |
| SKIP2 | (実装せず。EJECT 同様に `*SKIP2` コメント行のみ。W-1 にて統計から除外決定) |
### 内部表
#### WS-SKILL-TABLEOCCURS 1 TO 20 DEPENDING ON WS-TBL-MAX-IDX
| 項目 | PIC | USAGE | 内容 |
|:----|:---:|:-----:|------|
| TBL-SKILL-CODE | X(4) | — | スキルコード |
| TBL-SKILL-NAME | X(20) | — | スキル名称 |
| TBL-LEVEL-NAME | X(2) | — | S/A/B/C レベル |
| TBL-EVAL-CNT | 9(3) | BINARY | 明細件数 |
| TBL-SCORE-SUM | 9(5) | BINARY | 合計点 |
| TBL-EMP-ID | X(8) | — | 社員番号(出力用) |
| TBL-EMP-NAME | X(40) | — | 社員氏名(出力用) |
SEARCH ALL のキー項目:TBL-SKILL-CODESKILL-MST LOAD後に確定)
---
## 出力レコード定義
### 出力ファイル1W01/SKILL-SUM)— JIN09REC 120B
| No | 項目名 | 設定元 | PIC | 備考 |
|----|--------|--------|:---:|------|
| 1 | SUM-EMP-ID | TBL-EMP-ID | X(8) | |
| 2 | SUM-EMP-NAME | TBL-EMP-NAME | X(40) | |
| 3 | SUM-SKILL-CODE | TBL-SKILL-CODE | X(4) | |
| 4 | SUM-SKILL-NAME | MST-LEVEL-NAME | X(20) | スキル名称 |
| 5 | SUM-LEVEL-NAME | WS-LEVEL | X(2) | S/A/B/C |
| 6 | SUM-EVAL-CNT | TBL-EVAL-CNT | 9(3) | 明細件数 |
| 7 | SUM-SCORE-TOTAL | TBL-SCORE-SUM | 9(5) | 合計点 |
| 8 | SUM-SCORE-AVG | WS-AVG | 9(3)V9(2) | 平均点 |
| 9 | SUM-EVAL-CNT-TOTAL | WS-EMP-EVAL-CNT | 9(3) | 社員別明細総数 |
| 10 | SUM-FILLER | SPACE | X(30) | |
### 出力ファイル2W02/VALID-ERROR)— VALID-ERROR-REC 80B
| No | 項目名 | 設定元 | PIC | 備考 |
|----|--------|--------|:---:|------|
| 1 | ERR-PROGRAMID | 'JIN09RPT' | X(8) | |
| 2 | ERR-EMP-ID | EMP-ID | X(8) | |
| 3 | ERR-CODE | 'LVL1' | X(4) | レベル未特定 |
| 4 | ERR-DETAIL | STRING 編集 | X(60) | SKILL-CODE / SCORE |
---
## カバレッジ対象キーワード
| 予約語/記号 | 区分 | 使用箇所 |
|:-----------|:----:|:---------|
| CANCEL | 予約語 | 終了処理 CANCEL 'SUB02MSG' |
| I-O-CONTROL | 予約語 | ENVIRONMENT DIVISION の I-O-CONTROL 段落 |
| NEXT SENTENCE | 予約語 | レベル判定 ELSE 内 NEXT SENTENCE |
| EJECT | 予約語 | 段落境界の `*EJECT` コメント行(コメント化) |
| SKIP2 | 予約語 | (実装せず。W-1 にて統計対象から除外決定) |
| SET 条件名 TO FALSE | 予約語 | 2000MAJSOR: 初回フラグ解除に SET ... TO FALSE |
| PERFORM VARYING | 予約語(昇格) | 内部表走査(単一ループ) |
| NESTED IF(複合条件 AND/OR | 予約語(昇格) | レベル判定 IF ネスト 3 段 |
| SEARCH ALL | 予約語 | 評価基準マッチング |
| DIVIDE ... GIVING | 予約語 | 平均点算出 |
| BINARY | 予約語 | 内部表カウンタ USAGE BINARY |