From 39b9ec4e50f47a3792b92779893563053d27d59d Mon Sep 17 00:00:00 2001 From: qiuqiuqiu Date: Sun, 19 Jul 2026 20:31:51 +0800 Subject: [PATCH] Add Subsystem E (JIN01-02): personnel info management + design-resource consistency fixes --- bin/JIN01KNS.exe | Bin 0 -> 155523 bytes bin/JIN02SKL.exe | Bin 0 -> 159457 bytes cpy/JIN01REC.cpy | 10 + cpy/JINDATAC.cpy | 4 + cpy/JINENDAC.cpy | 3 + cpy/JINMSGAC.cpy | 13 + cpy/SKILL-AGG-REC.cpy | 11 + cpy/SKILL-EVAL-REC.cpy | 9 + cpy/SKILL-MST-REC.cpy | 9 + cpy/VALID-ERROR-REC.cpy | 7 + src/JIN01KNS.cbl | 406 +++++++++++++++ src/JIN02SKL.cbl | 483 ++++++++++++++++++ 使用資源一覧/JIN01KNS_使用資源一覧.md | 44 ++ 使用資源一覧/JIN02SKL_使用資源一覧.md | 48 ++ ...報管理システム_設計書(サブシステムE).md | 132 +++++ 詳細設計書/詳細設計書_JIN01KNS.md | 119 +++++ 詳細設計書/詳細設計書_JIN02SKL.md | 173 +++++++ 17 files changed, 1471 insertions(+) create mode 100644 bin/JIN01KNS.exe create mode 100644 bin/JIN02SKL.exe create mode 100644 cpy/JIN01REC.cpy create mode 100644 cpy/JINDATAC.cpy create mode 100644 cpy/JINENDAC.cpy create mode 100644 cpy/JINMSGAC.cpy create mode 100644 cpy/SKILL-AGG-REC.cpy create mode 100644 cpy/SKILL-EVAL-REC.cpy create mode 100644 cpy/SKILL-MST-REC.cpy create mode 100644 cpy/VALID-ERROR-REC.cpy create mode 100644 src/JIN01KNS.cbl create mode 100644 src/JIN02SKL.cbl create mode 100644 使用資源一覧/JIN01KNS_使用資源一覧.md create mode 100644 使用資源一覧/JIN02SKL_使用資源一覧.md create mode 100644 基本設計書/05_人事情報管理システム_設計書(サブシステムE).md create mode 100644 詳細設計書/詳細設計書_JIN01KNS.md create mode 100644 詳細設計書/詳細設計書_JIN02SKL.md diff --git a/bin/JIN01KNS.exe b/bin/JIN01KNS.exe new file mode 100644 index 0000000000000000000000000000000000000000..779465a84c29e344fd62383032a664766c265f46 GIT binary patch literal 155523 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 F{vT&BuO$Eg literal 0 HcmV?d00001 diff --git a/cpy/JIN01REC.cpy b/cpy/JIN01REC.cpy new file mode 100644 index 0000000..25807d7 --- /dev/null +++ b/cpy/JIN01REC.cpy @@ -0,0 +1,10 @@ + * + * 人事取込/正常レコード 200B JIN01KNS入出力 + * + 03 (A)KANA-SEI PIC X(020). + 03 (A)KANA-MEI PIC X(020). + 03 (A)KANJI-NAME PIC N(040). + 03 (A)SUB-CODE PIC X(004). + 03 (A)BIRTH-DATE PIC X(008). + 03 (A)EMP-ID PIC X(008). + 03 (A)FILLER PIC X(060). diff --git a/cpy/JINDATAC.cpy b/cpy/JINDATAC.cpy new file mode 100644 index 0000000..64ea1ab --- /dev/null +++ b/cpy/JINDATAC.cpy @@ -0,0 +1,4 @@ + * SUB01DAT 運用日付取得用連絡領域 + 01 D01UBSPAR. + 03 D01FKICOD PIC S9(004) COMP. + 03 D01UBSUDATE PIC 9(008). diff --git a/cpy/JINENDAC.cpy b/cpy/JINENDAC.cpy new file mode 100644 index 0000000..967c2ca --- /dev/null +++ b/cpy/JINENDAC.cpy @@ -0,0 +1,3 @@ + * SUB03END ABEND処理用連絡領域 + 01 E01ABDPAR. + 03 E01ABDCOD PIC 9(003). diff --git a/cpy/JINMSGAC.cpy b/cpy/JINMSGAC.cpy new file mode 100644 index 0000000..f27e94d --- /dev/null +++ b/cpy/JINMSGAC.cpy @@ -0,0 +1,13 @@ + * SUB02MSG メッセージ出力用連絡領域 + 01 M00MHOPAR. + 03 M00MSGCOD PIC 9(003). + 03 M00UMKDATS22-01 PIC X(030). + 03 M00UMKDATS22-02 PIC X(030). + 03 M00UMKDATS22-03 PIC X(030). + 03 M00UMKDATS22-04 PIC X(030). + 03 M00UMKDATS22-05 PIC X(030). + 03 M00UMKDATS22-06 PIC X(030). + 03 M00UMKDATS22-07 PIC X(030). + 03 M00UMKDATS22-08 PIC X(030). + 03 M00UMKDATS22-09 PIC X(030). + 03 M00UMKDATS22-10 PIC X(030). diff --git a/cpy/SKILL-AGG-REC.cpy b/cpy/SKILL-AGG-REC.cpy new file mode 100644 index 0000000..27c717f --- /dev/null +++ b/cpy/SKILL-AGG-REC.cpy @@ -0,0 +1,11 @@ + * + * スキル別評価集計結果レコード 200B JIN02SKL出力 + * + 03 (A)AGG-SKILL-CODE PIC X(004). + 03 (A)AGG-LEVEL PIC 9(002) PACKED-DECIMAL. + 03 (A)AGG-LEVEL-NAME PIC X(020). + 03 (A)AGG-EMP-COUNT PIC 9(005) BINARY. + 03 (A)AGG-COUNT-EDIT PIC ZZZZ9. + 03 (A)AGG-AVG-SCORE PIC 9(003)V9(002) + PACKED-DECIMAL. + 03 (A)FILLER PIC X(162). diff --git a/cpy/SKILL-EVAL-REC.cpy b/cpy/SKILL-EVAL-REC.cpy new file mode 100644 index 0000000..d117f78 --- /dev/null +++ b/cpy/SKILL-EVAL-REC.cpy @@ -0,0 +1,9 @@ + * + * スキル評価明細レコード 200B JIN02SKL入力 + * + 03 (A)SKILL-CODE PIC X(004). + 03 (A)EMP-ID PIC X(008). + 03 (A)EMP-NAME PIC X(040). + 03 (A)EVAL-DATE PIC X(008). + 03 (A)SCORE PIC 9(003). + 03 (A)FILLER PIC X(137). diff --git a/cpy/SKILL-MST-REC.cpy b/cpy/SKILL-MST-REC.cpy new file mode 100644 index 0000000..80536b8 --- /dev/null +++ b/cpy/SKILL-MST-REC.cpy @@ -0,0 +1,9 @@ + * + * スキル評価基準マスタレコード 80B JIN02SKL入力 + * + 03 (A)MST-SKILL-CODE PIC X(004). + 03 (A)MST-LEVEL PIC 9(002) BINARY. + 03 (A)MST-SCORE-FROM PIC 9(003). + 03 (A)MST-SCORE-TO PIC 9(003). + 03 (A)MST-LEVEL-NAME PIC X(020). + 03 (A)FILLER PIC X(048). diff --git a/cpy/VALID-ERROR-REC.cpy b/cpy/VALID-ERROR-REC.cpy new file mode 100644 index 0000000..3a21934 --- /dev/null +++ b/cpy/VALID-ERROR-REC.cpy @@ -0,0 +1,7 @@ + * + * バリデーションエラーレコード 80B JIN01KNS/JIN02SKL共用 + * + 03 ERR-PROGRAMID PIC X(008). + 03 ERR-EMP-ID PIC X(008). + 03 ERR-CODE PIC X(004). + 03 ERR-DETAIL PIC X(060). diff --git a/src/JIN01KNS.cbl b/src/JIN01KNS.cbl new file mode 100644 index 0000000..dced3d4 --- /dev/null +++ b/src/JIN01KNS.cbl @@ -0,0 +1,406 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. JIN01KNS IS INITIAL. + ***************************************************************** + * システム名 : 人事情報管理システム * + * プログラムID : JIN01KNS * + * プログラム名 : カナ氏名チェック処理 * + * 作成日 : 2026-07-19 * + * 処理概要 : 人事取込データの氏名カナ(半角20桁以内・ * + * 英大文字)および補助コード桁数をチェックする * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 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 JIN01R01. + SELECT W01OUTFIL ASSIGN TO EXTERNAL JIN01W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL JIN01W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: EMP-IMPORT 人事取込データ * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY JIN01REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * W01: EMP-VALID 正常通過データ * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY JIN01REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: VALID-ERROR エラーレコード * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W02OUTREC. + COPY VALID-ERROR-REC. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'JIN01KNS'. + 03 CNS-MSGSTR PIC 9(003) VALUE 001. + 03 CNS-MSGFIN PIC 9(003) VALUE 002. + 03 CNS-MSGSUBEEK PIC 9(003) VALUE 005. + 03 CNS-MSGIINKES PIC 9(003) VALUE 006. + 03 CNS-MSGOUTKES PIC 9(003) VALUE 007. + 03 CNS-MSGKEYINF PIC 9(003) VALUE 033. + 03 CNS-KN0002 PIC 9(001) VALUE 2. + 03 CNS-ABD999 PIC 9(003) VALUE 999. + 03 CNS-KANA-MAX PIC 9(002) VALUE 20. + 03 CNS-SUB-VALID-1 PIC X(004) VALUE '0001'. + 03 CNS-SUB-VALID-2 PIC X(004) VALUE '0002'. + 03 CNS-SUB-VALID-3 PIC X(004) VALUE '0003'. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-R01INN PIC S9(009) COMP-3 + VALUE ZERO. + 03 CUN-W01OUT PIC S9(009) COMP-3 + VALUE ZERO. + 03 CUN-W02OUT PIC S9(009) COMP-3 + VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + *** 運用日付 + 03 WRK-U06 PIC 9(008). + *** 読込フラグ + 03 WRK-R01EOF PIC X(001). + 88 WRK-R01EOF-Y VALUE '1'. + *** エラーフラグ + 03 WRK-ERR-FLG PIC X(001). + 88 WRK-ERR-Y VALUE '1'. + *** エラーコード + 03 WRK-ERR-CODE PIC X(004). + *** カナ長さWORK + 03 WRK-KANA-LEN PIC 9(002). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + *** 運用日付取得 + COPY JINDATAC. + *** メッセージ編集出力SR用 + COPY JINMSGAC. + *** ABEND処理SR用 + COPY JINENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + *** 初期処理 + PERFORM 1000ITTSOR. + * + *** メイン処理 + PERFORM 2000MAJSOR + UNTIL WRK-R01EOF-Y. + * + *** 終了処理 + PERFORM 3000STPSOR. + * + *** RETURN-CODE設定(GOBACK直前) + IF CUN-W02OUT > ZERO + MOVE 4 TO RETURN-CODE + END-IF. + * + 0000MAJCOLSOR-EXT. + GOBACK. + ***************************************************************** + * サブモジュールNO: (1.0) * + * サブモジュール名: 初期処理 * + * 処理概要 : 開始メッセージ出力・各種初期化処理 * + ***************************************************************** + 1000ITTSOR SECTION. + * + *** 開始メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGSTR TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + *** コンパイル日時出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGKEYINF TO M00MSGCOD. + MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01. + MOVE 'COMPILED' TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** ワークエリア初期化 + INITIALIZE WRKARA + CUNARA. + * + *** 運用日付取得 + INITIALIZE D01UBSPAR. + CALL 'SUB01DAT' USING D01UBSPAR. + IF D01FKICOD = ZERO + MOVE D01UBSUDATE TO WRK-U06 + ELSE + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 4000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** 入出力ファイルOPEN + OPEN INPUT R01INNFIL + OUTPUT W01OUTFIL + W02OUTFIL. + * + *** R01を読み込み + PERFORM 1100R01INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(1.1) * + * サブモジュール名: R01読込処理 * + * 処理概要 : レコード読込・EOF判定処理 * + ***************************************************************** + 1100R01INNSOR SECTION. + * + READ R01INNFIL + AT END + MOVE '1' TO WRK-R01EOF + NOT AT END + ADD 1 TO CUN-R01INN + END-READ. + * + 1100R01INNSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.0) * + * サブモジュール名: 主処理 * + * 処理概要 : カナチェック・振分処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + *** エラーフラグ初期化 + MOVE '0' TO WRK-ERR-FLG. + * + *** カナ文字チェック + PERFORM 2010CHKANASOR. + * + *** 桁数チェック(エラー未設定時のみ) + IF NOT WRK-ERR-Y + PERFORM 2020CHKSIZSOR + END-IF. + * + *** 補助コードチェック(エラー未設定時のみ) + IF NOT WRK-ERR-Y + PERFORM 2030CHKSUBSOR + END-IF. + * + *** 振分処理 + IF WRK-ERR-Y + PERFORM 2200WRTERRSOR + ELSE + PERFORM 2100WRTOKSOR + END-IF. + * + *** 次のレコード読込 + PERFORM 1100R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.1) * + * サブモジュール名: カナ文字チェック * + * 処理概要 : IS ALPHABETIC-UPPER で英大文字判定 * + ***************************************************************** + 2010CHKANASOR SECTION. + * + IF R01KANA-SEI IS NOT ALPHABETIC-UPPER + MOVE '1' TO WRK-ERR-FLG + MOVE 'K002' TO WRK-ERR-CODE + END-IF. + IF R01KANA-MEI IS NOT ALPHABETIC-UPPER + MOVE '1' TO WRK-ERR-FLG + MOVE 'K002' TO WRK-ERR-CODE + END-IF. + * + 2010CHKANASOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.2) * + * サブモジュール名: 桁数チェック * + * 処理概要 : 半角20桁超過チェック * + ***************************************************************** + 2020CHKSIZSOR SECTION. + * + *** TRAILING SPACES除去後の実効長が20超過かチェック + MOVE FUNCTION LENGTH( + FUNCTION TRIM(R01KANA-SEI TRAILING)) + TO WRK-KANA-LEN. + IF WRK-KANA-LEN > CNS-KANA-MAX + MOVE '1' TO WRK-ERR-FLG + MOVE 'K001' TO WRK-ERR-CODE + END-IF. + MOVE FUNCTION LENGTH( + FUNCTION TRIM(R01KANA-MEI TRAILING)) + TO WRK-KANA-LEN. + IF WRK-KANA-LEN > CNS-KANA-MAX + MOVE '1' TO WRK-ERR-FLG + MOVE 'K001' TO WRK-ERR-CODE + END-IF. + * + 2020CHKSIZSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.3) * + * サブモジュール名: 補助コードチェック * + * 処理概要 : SUB-CODEの有効値チェック * + ***************************************************************** + 2030CHKSUBSOR SECTION. + * + IF R01SUB-CODE NOT = CNS-SUB-VALID-1 + AND R01SUB-CODE NOT = CNS-SUB-VALID-2 + AND R01SUB-CODE NOT = CNS-SUB-VALID-3 + MOVE '1' TO WRK-ERR-FLG + MOVE 'K003' TO WRK-ERR-CODE + END-IF. + * + 2030CHKSUBSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.4) * + * サブモジュール名: 正常WRITE処理 * + * 処理概要 : W01へ正常データ出力 * + ***************************************************************** + 2100WRTOKSOR SECTION. + * + *** W01レコード編集 + INITIALIZE W01OUTREC. + MOVE R01KANA-SEI TO W01KANA-SEI. + MOVE R01KANA-MEI TO W01KANA-MEI. + MOVE R01KANJI-NAME TO W01KANJI-NAME. + MOVE R01SUB-CODE TO W01SUB-CODE. + MOVE R01BIRTH-DATE TO W01BIRTH-DATE. + MOVE R01EMP-ID TO W01EMP-ID. + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + 2100WRTOKSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.5) * + * サブモジュール名: エラーWRITE処理 * + * 処理概要 : W02へエラーレコード出力 * + ***************************************************************** + 2200WRTERRSOR SECTION. + * + ADD 1 TO CUN-W02OUT + END-ADD. + INITIALIZE W02OUTREC. + MOVE CNS-PRGIDX TO ERR-PROGRAMID. + MOVE R01EMP-ID TO ERR-EMP-ID. + MOVE WRK-ERR-CODE TO ERR-CODE. + STRING 'ERR:' WRK-ERR-CODE + DELIMITED BY SIZE + INTO ERR-DETAIL + END-STRING. + WRITE W02OUTREC. + * + 2200WRTERRSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(3.0) * + * サブモジュール名: 終了処理 * + * 処理概要 : ファイルクローズ・件数と終了メッセージ出力 * + ***************************************************************** + 3000STPSOR SECTION. + * + *** 入出力ファイルCLOSE + CLOSE R01INNFIL + W01OUTFIL + W02OUTFIL. + * + *** 入出力ファイル件数出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'JIN01R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'JIN01W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'JIN01W02' TO M00UMKDATS22-01. + MOVE CUN-W02OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 終了メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGFIN TO M00MSGCOD. + PERFORM 4000MSGOUTSOR. + * + 3000STPSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(4.0) * + * サブモジュール名: メッセージ編集出力処理 * + * 処理概要 : メッセージ編集出力サブPGM呼出 * + ***************************************************************** + 4000MSGOUTSOR SECTION. + * + MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). + MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). + MOVE CNS-PRGIDX TO M00UMKDATS22-05. + CALL 'SUB02MSG' USING M00MHOPAR. + * + 4000MSGOUTSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(9.9) * + * サブモジュール名: ABEND処理 * + * 処理概要 : ABENDサブPGM呼出 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/src/JIN02SKL.cbl b/src/JIN02SKL.cbl new file mode 100644 index 0000000..ff572d3 --- /dev/null +++ b/src/JIN02SKL.cbl @@ -0,0 +1,483 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. JIN02SKL. + ***************************************************************** + * システム名 : 人事情報管理システム * + * プログラムID : JIN02SKL * + * プログラム名 : スキル別評価集計処理 * + * 作成日 : 2026-07-19 * + * 処理概要 : スキル評価明細(M件)× 評価基準マスタ * + * (N件)→ スキル別評価集計(N件出力) * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 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 JIN02R01. + SELECT R02INNFIL ASSIGN TO EXTERNAL JIN02R02. + SELECT W01OUTFIL ASSIGN TO EXTERNAL JIN02W01. + SELECT W02OUTFIL ASSIGN TO EXTERNAL JIN02W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * R01: SKILL-EVAL スキル評価明細 * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY SKILL-EVAL-REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * R02: SKILL-MST スキル評価基準マスタ * + ***************************************************************** + FD R02INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R02INNREC. + COPY SKILL-MST-REC REPLACING ==(A)== BY ==R02==. + * + ***************************************************************** + * W01: SKILL-AGG スキル別評価集計結果 * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY SKILL-AGG-REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * W02: VALID-ERROR エラーレコード * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W02OUTREC. + COPY VALID-ERROR-REC. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'JIN02SKL'. + 03 CNS-MSGSTR PIC 9(003) VALUE 001. + 03 CNS-MSGFIN PIC 9(003) VALUE 002. + 03 CNS-MSGSUBEEK PIC 9(003) VALUE 005. + 03 CNS-MSGIINKES PIC 9(003) VALUE 006. + 03 CNS-MSGOUTKES PIC 9(003) VALUE 007. + 03 CNS-MSGKEYINF PIC 9(003) VALUE 033. + 03 CNS-KN0002 PIC 9(001) VALUE 2. + 03 CNS-ABD999 PIC 9(003) VALUE 999. + 03 CNS-TBL-MAX PIC 9(003) VALUE 100. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 01 CUNARA. + 03 CUN-R01INN PIC S9(009) COMP-3 + VALUE ZERO. + 03 CUN-R02INN PIC S9(009) COMP-3 + VALUE ZERO. + 03 CUN-W01OUT PIC S9(009) COMP-3 + VALUE ZERO. + 03 CUN-W02OUT PIC S9(009) COMP-3 + VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + *** 運用日付 + 03 WRK-U06 PIC 9(008). + *** 読込フラグ + 03 WRK-R01EOF PIC X(001). + 88 WRK-R01EOF-Y VALUE '1'. + 03 WRK-R02EOF PIC X(001). + 88 WRK-R02EOF-Y VALUE '1'. + *** 内部表走査用 + 03 WRK-IDX PIC 9(004) BINARY. + 03 WRK-AVG-TEMP PIC 9(006)V9(002). + 03 WRK-REM PIC 9(003). + + * + ***************************************************************** + * 内部表: スキル別評価集計用 * + ***************************************************************** + 01 WS-SKILL-TABLE. + 03 WS-TBL-ENTRY OCCURS 1 TO 100 + DEPENDING ON WS-TBL-MAX-IDX + ASCENDING KEY IS TBL-SKILL-CODE + INDEXED BY WS-TBL-IDX. + 05 TBL-SKILL-CODE PIC X(004). + 05 TBL-LEVEL PIC 9(002) BINARY. + 05 TBL-LEVEL-NAME PIC X(020). + 05 TBL-EMP-COUNT PIC 9(005) BINARY. + 05 TBL-SCORE-SUM PIC 9(008) BINARY. + 01 WS-TBL-MAX-IDX PIC 9(004) BINARY. + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + *** 運用日付取得 + COPY JINDATAC. + *** メッセージ編集出力SR用 + COPY JINMSGAC. + *** ABEND処理SR用 + COPY JINENDAC. + * + PROCEDURE DIVISION. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAJCOLSOR SECTION. + * + *** 初期処理 + PERFORM 1000ITTSOR. + * + *** マスタLOAD処理 + PERFORM 1200MSTLDASOR + UNTIL WRK-R02EOF-Y. + * + *** 評価明細集計処理 + PERFORM 2000MAJSOR + UNTIL WRK-R01EOF-Y. + * + *** 集計結果出力処理 + PERFORM 3000OUTPUSOR. + * + *** 終了処理 + PERFORM 4000STPSOR. + * + 0000MAJCOLSOR-EXT. + GOBACK. + ***************************************************************** + * サブモジュールNO: (1.0) * + * サブモジュール名: 初期処理 * + * 処理概要 : 開始メッセージ出力・各種初期化処理 * + ***************************************************************** + 1000ITTSOR SECTION. + * + *** 開始メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGSTR TO M00MSGCOD. + PERFORM 6000MSGOUTSOR. + * + *** コンパイル日時出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGKEYINF TO M00MSGCOD. + MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01. + MOVE 'COMPILED' TO M00UMKDATS22-02. + PERFORM 6000MSGOUTSOR. + * + *** ワークエリア初期化 + INITIALIZE WRKARA + CUNARA. + * + *** 内部表サイズ初期化 + MOVE ZERO TO WS-TBL-MAX-IDX. + * + *** 運用日付取得 + INITIALIZE D01UBSPAR. + CALL 'SUB01DAT' USING D01UBSPAR. + IF D01FKICOD = ZERO + MOVE D01UBSUDATE TO WRK-U06 + ELSE + INITIALIZE M00MHOPAR + MOVE CNS-MSGSUBEEK TO M00MSGCOD + MOVE 'SUB01DAT' TO M00UMKDATS22-01 + MOVE D01FKICOD TO M00UMKDATS22-02 + PERFORM 6000MSGOUTSOR + PERFORM 9999ABDSOR + END-IF. + * + *** 入出力ファイルOPEN + OPEN INPUT R01INNFIL + R02INNFIL + OUTPUT W01OUTFIL + W02OUTFIL. + * + *** R02初回読込 + PERFORM 1100R02INNSOR. + * + *** R01初回読込 + PERFORM 1300R01INNSOR. + * + 1000ITTSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(1.1) * + * サブモジュール名: R02読込処理 * + * 処理概要 : 評価基準マスタ読込・EOF判定 * + ***************************************************************** + 1100R02INNSOR SECTION. + * + READ R02INNFIL + AT END + MOVE '1' TO WRK-R02EOF + NOT AT END + ADD 1 TO CUN-R02INN + END-READ. + * + 1100R02INNSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(1.2) * + * サブモジュール名: マスタLOAD処理 * + * 処理概要 : R02全件を内部表にLOAD * + ***************************************************************** + 1200MSTLDASOR SECTION. + * + *** 内部表エントリ追加 + ADD 1 TO WS-TBL-MAX-IDX + END-ADD. + * + MOVE R02MST-SKILL-CODE + TO TBL-SKILL-CODE(WS-TBL-MAX-IDX). + MOVE R02MST-LEVEL + TO TBL-LEVEL(WS-TBL-MAX-IDX). + MOVE R02MST-LEVEL-NAME + TO TBL-LEVEL-NAME(WS-TBL-MAX-IDX). + MOVE ZERO + TO TBL-EMP-COUNT(WS-TBL-MAX-IDX). + MOVE ZERO + TO TBL-SCORE-SUM(WS-TBL-MAX-IDX). + * + *** 次のR02読込 + PERFORM 1100R02INNSOR. + * + 1200MSTLDASOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(1.3) * + * サブモジュール名: R01読込処理 * + * 処理概要 : 評価明細読込・EOF判定 * + ***************************************************************** + 1300R01INNSOR SECTION. + * + READ R01INNFIL + AT END + MOVE '1' TO WRK-R01EOF + NOT AT END + ADD 1 TO CUN-R01INN + END-READ. + * + 1300R01INNSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.0) * + * サブモジュール名: 主処理 * + * 処理概要 : 評価明細1件の集計(SEARCH ALL + UPDATE) * + ***************************************************************** + 2000MAJSOR SECTION. + * + *** SEARCH ALL で該当レベル特定 + SET WS-TBL-IDX TO 1. + SEARCH ALL WS-TBL-ENTRY + AT END + PERFORM 2100WRTERRSOR + WHEN TBL-SKILL-CODE(WS-TBL-IDX) + = R01SKILL-CODE + PERFORM 2200UPDTTLSOR + END-SEARCH. + * + *** 次のR01読込 + PERFORM 1300R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.1) * + * サブモジュール名: エラーWRITE * + * 処理概要 : W02へエラーレコード出力 * + ***************************************************************** + 2100WRTERRSOR SECTION. + * + ADD 1 TO CUN-W02OUT. + INITIALIZE W02OUTREC. + MOVE CNS-PRGIDX TO ERR-PROGRAMID. + MOVE R01EMP-ID TO ERR-EMP-ID. + MOVE 'E001' TO ERR-CODE. + STRING 'SKILL CODE NOT FOUND: ' + R01SKILL-CODE + DELIMITED BY SIZE + INTO ERR-DETAIL + END-STRING. + WRITE W02OUTREC. + * + 2100WRTERRSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.2) * + * サブモジュール名: 内部表UPDATE * + * 処理概要 : 該当エントリの件数・合計点を加算 * + ***************************************************************** + 2200UPDTTLSOR SECTION. + * + *** 件数加算(END-ADD 予約語カバー) + ADD 1 TO TBL-EMP-COUNT(WS-TBL-IDX) + END-ADD. + *** 合計点加算 + ADD R01SCORE TO TBL-SCORE-SUM(WS-TBL-IDX) + END-ADD. + * + 2200UPDTTLSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(3.0) * + * サブモジュール名: 集計結果出力処理 * + * 処理概要 : 内部表を降順走査し平均点を算出して出力 * + ***************************************************************** + 3000OUTPUSOR SECTION. + * + *** R01/R02 CLOSE(後続処理でR01/R02は不要) + CLOSE R01INNFIL + R02INNFIL. + * + *** 内部表を降順走査 + IF WS-TBL-MAX-IDX > ZERO + PERFORM VARYING WRK-IDX + FROM WS-TBL-MAX-IDX BY -1 + UNTIL WRK-IDX = ZERO + PERFORM 3100WRITEAGSOR + END-PERFORM + SUBTRACT 1 FROM WS-TBL-MAX-IDX + END-SUBTRACT + END-IF. + * + 3000OUTPUSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(3.1) * + * サブモジュール名: 集計結果1件WRITE * + * 処理概要 : 平均点算出→編集→W01出力 * + ***************************************************************** + 3100WRITEAGSOR SECTION. + * + *** 平均点算出(END-DIVIDE 予約語カバー) + IF TBL-EMP-COUNT(WRK-IDX) > ZERO + DIVIDE TBL-SCORE-SUM(WRK-IDX) + BY TBL-EMP-COUNT(WRK-IDX) + GIVING WRK-AVG-TEMP + REMAINDER WRK-REM + END-DIVIDE + ELSE + MOVE ZERO TO WRK-AVG-TEMP + END-IF. + * + *** W01レコード編集 + INITIALIZE W01OUTREC. + MOVE TBL-SKILL-CODE(WRK-IDX) + TO W01AGG-SKILL-CODE. + MOVE TBL-LEVEL(WRK-IDX) + TO W01AGG-LEVEL. + MOVE TBL-LEVEL-NAME(WRK-IDX) + TO W01AGG-LEVEL-NAME. + * + *** GREATER THAN 予約語カバー + IF TBL-EMP-COUNT(WRK-IDX) + IS GREATER THAN ZERO + MOVE TBL-EMP-COUNT(WRK-IDX) + TO W01AGG-EMP-COUNT + MOVE TBL-EMP-COUNT(WRK-IDX) + TO W01AGG-COUNT-EDIT + ELSE + MOVE ZERO TO W01AGG-EMP-COUNT + W01AGG-COUNT-EDIT + END-IF. + * + MOVE WRK-AVG-TEMP + TO W01AGG-AVG-SCORE. + * + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + 3100WRITEAGSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(4.0) * + * サブモジュール名: 終了処理 * + * 処理概要 : 件数出力 + 終了メッセージ * + ***************************************************************** + 4000STPSOR SECTION. + * + *** 入出力ファイル件数出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'JIN02R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 6000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'JIN02R02' TO M00UMKDATS22-01. + MOVE CUN-R02INN TO M00UMKDATS22-02. + PERFORM 6000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'JIN02W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 6000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'JIN02W02' TO M00UMKDATS22-01. + MOVE CUN-W02OUT TO M00UMKDATS22-02. + PERFORM 6000MSGOUTSOR. + * + *** 出力ファイルCLOSE + CLOSE W01OUTFIL + W02OUTFIL. + * + *** 終了メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGFIN TO M00MSGCOD. + PERFORM 6000MSGOUTSOR. + * + 4000STPSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(6.0) * + * サブモジュール名: メッセージ編集出力処理 * + * 処理概要 : メッセージ編集出力サブPGM呼出 * + ***************************************************************** + 6000MSGOUTSOR SECTION. + * + MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). + MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). + MOVE CNS-PRGIDX TO M00UMKDATS22-05. + CALL 'SUB02MSG' USING M00MHOPAR. + * + 6000MSGOUTSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(9.9) * + * サブモジュール名: ABEND処理 * + * 処理概要 : ABENDサブPGM呼出 * + ***************************************************************** + 9999ABDSOR SECTION. + * + MOVE CNS-ABD999 TO E01ABDCOD. + CALL 'SUB03END' USING E01ABDPAR. + * + 9999ABDSOR-EXT. + EXIT. diff --git a/使用資源一覧/JIN01KNS_使用資源一覧.md b/使用資源一覧/JIN01KNS_使用資源一覧.md new file mode 100644 index 0000000..86eadcd --- /dev/null +++ b/使用資源一覧/JIN01KNS_使用資源一覧.md @@ -0,0 +1,44 @@ +# JIN01KNS 使用資源一覧 + +## プログラム概要 +- **プログラムID**: JIN01KNS +- **プログラム名**: カナ氏名チェック処理 +- **処理概要**: 人事取込データの氏名カナ(半角20桁以内・英大文字)および補助コード桁数をチェックする。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| JIN01R01 | EMP-IMPORT | 順編成 | F (固定長) | 200B | JIN01REC | +| JIN01W01 | EMP-VALID | 順編成 | F (固定長) | 200B | JIN01REC | +| JIN01W02 | VALID-ERROR | 順編成 | F (固定長) | 80B | VALID-ERROR-REC(JIN01REC内) | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| JIN01REC | レコード定義(R01/W01/W02出力ファイル) | FILE SECTION | +| JINDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| JINMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| JINENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→運用日付取得→OPEN→初回読込) +2. READループ(R01) +3. カナ文字チェック(IS ALPHABETIC-UPPER) +4. 桁数チェック(20桁超過) +5. 補助コードチェック(4桁有効値) +6. 正常→W01出力、異常→W02出力 +7. 終了処理(CLOSE→件数出力→RETURN-CODE設定) diff --git a/使用資源一覧/JIN02SKL_使用資源一覧.md b/使用資源一覧/JIN02SKL_使用資源一覧.md new file mode 100644 index 0000000..7c2c549 --- /dev/null +++ b/使用資源一覧/JIN02SKL_使用資源一覧.md @@ -0,0 +1,48 @@ +# JIN02SKL 使用資源一覧 + +## プログラム概要 +- **プログラムID**: JIN02SKL +- **プログラム名**: スキル別評価集計処理 +- **処理概要**: スキル評価明細(M件)× 評価基準マスタ(N件)→ スキル別評価集計(N件出力) + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| JIN02R01 | SKILL-EVAL | 順編成 | F (固定長) | 200B | SKILL-EVAL-REC | +| JIN02R02 | SKILL-MST | 順編成 | F (固定長) | 80B | SKILL-MST-REC | +| JIN02W01 | SKILL-AGG | 順編成 | F (固定長) | 200B | SKILL-AGG-REC | +| JIN02W02 | VALID-ERROR | 順編成 | F (固定長) | 80B | VALID-ERROR-REC(JIN01REC内) | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| SKILL-EVAL-REC | スキル評価明細レコード定義(R01入力) | FILE SECTION | +| SKILL-MST-REC | 評価基準マスタレコード定義(R02入力) | FILE SECTION | +| SKILL-AGG-REC | 評価集計結果レコード定義(W01出力) | FILE SECTION | +| JIN01REC | VALID-ERROR-REC(W02出力) | FILE SECTION | +| JINDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| JINMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| JINENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→運用日付取得→OPEN) +2. マスタLOAD(R02全件→内部表構築) +3. 評価明細READループ(R01) +4. SEARCH ALLで該当レベル特定 +5. 内部表UPDATE(件数・合計点加算) +6. 集計結果出力(降順走査→平均点DIVIDE→WRITE) +7. 終了処理(CLOSE→件数出力) diff --git a/基本設計書/05_人事情報管理システム_設計書(サブシステムE).md b/基本設計書/05_人事情報管理システム_設計書(サブシステムE).md new file mode 100644 index 0000000..c69c06f --- /dev/null +++ b/基本設計書/05_人事情報管理システム_設計書(サブシステムE).md @@ -0,0 +1,132 @@ +# 人事情報管理システム 設計書(サブシステムE) + +## システム概要 + +本サブシステムは、従業員の基本情報(氏名カナ/漢字)のフォーマット検証と、 +スキル評価データの集計・分析を行う。 +これにより、サブシステムA〜Dで未カバーのプログラムタイプ +No.19(M:N→N件)および No.27(半角20桁/4桁チェック)を追加し、 +PICTURE記号 N/BINARY/ZZZZ9 および11個の COBOL 予約語を +新たにカバーする。 + +### サブシステム情報 + +| 項目 | 内容 | +|------|------| +| サブシステムID | JIN(人事→JINji) | +| COBOLプログラム数 | 2 | +| JCL数 | 2 | +| DB | なし(ファイル連携のみ) | + +### サブシステム内ファイル + +| # | ファイル名 | 編成 | RECM | サイズ | 用途 | 区分 | +|---|-----------|------|------|-------|------|------| +| 1 | EMP-IMPORT | SEQUENTIAL | FB | 200 | 人事取込データ(外部システムよりCSV→EBCDIC変換済) | 新規 | +| 2 | EMP-VALID | SEQUENTIAL | FB | 200 | チェック通過正常データ | 新規 | +| 3 | VALID-ERROR | SEQUENTIAL | FB | 80 | バリデーションエラーレコード(PROGRAMID・EMP-ID・ERR-CODE・詳細) | 新規 | +| 4 | SKILL-EVAL | SEQUENTIAL | FB | 200 | スキル評価明細データ | 新規 | +| 5 | SKILL-MST | SEQUENTIAL | FB | 80 | スキル評価基準マスタ | 新規 | +| 6 | SKILL-AGG | SEQUENTIAL | FB | 200 | スキル別評価集計結果 | 新規 | + +### システム定数 + +| 定数 | 値 | 説明 | +|------|-----|------| +| KANA-MAX-LEN | 20 | 氏名カナ最大桁数(半角) | +| SUBCODE-LEN | 4 | 補助コード桁数 | +| SKILL-LEVEL-MAX | 10 | スキルレベルの最大値 | +| EVAL-SCORE-MAX | 999 | 評価点数の最大値 | + +### 共通関数利用方針 + +既存のサブプログラム(SUB01DAT〜SUB05TIM)は本サブシステムでも利用する。 +連絡領域のCOPY書式は `JINDATAC`・`JINMSGAC`・`JINENDAC` を新規作成する +(チェック用サブプログラム SUB04CHK は使用しない)。 + +--- + +## 処理フロー + +``` +╞══ JINJ010 ═══════════════════════════════════╡ +│ JIN01KNS(カナ氏名チェック) PGMパターン: 27 +│ 人事取込データ(EMP-IMPORT)を1レコードずつ読み込み +│ IF KANA-SEI IS ALPHABETIC-UPPER AND KANA-MEI IS ALPHABETIC-UPPER → 正常 +│ 半角20桁超過 OR 補助コード4桁不一致 → エラーファイル出力 +│ ADD 1 TO WS-READ-CNT END-ADD(件数カウント) +│ RETURN-CODE に終了ステータス設定 +│ PROGRAM-ID IS INITIAL 指定 +├── 正常 → EMP-VALID(200B 正常データ) +└── 異常 → VALID-ERROR(80B エラーレコード) +│ +╞══ JINJ020 ═══════════════════════════════════╡ +│ JIN02SKL(スキル別評価集計) PGMパターン: 19 +│ SKILL-EVAL(M件の評価明細)× SKILL-MST(N件の評価基準) +│ SEARCH ALL でSKILL-CODEに対応するLEVEL判定 +│ 内部表にスキルコード×レベル別の件数と合計点を集計 +│ 集計後、PERFORM VARYINGで降順(DESCENDING)走査し出力 +│ DIVIDE ... GIVING ... END-DIVIDE で平均点算出 +│ SUBTRACT 1 FROM WS-IDX END-SUBTRACT で内部表走査 +│ USAGE BINARY / USAGE PACKED-DECIMAL でカウンタ・金額定義 +│ エラー件数表示に ZZZZ9 編集 +├── → SKILL-AGG(200B スキル別評価集計結果) +└── 異常 → VALID-ERROR(80B エラーレコード) +``` + +--- + +## JCL + +### JINJ010 — カナ氏名チェック + +```jcl +//JINJ010 JOB (ACCT),'カナ氏名チェック',CLASS=A +//* +//*===================================================================== +//* STEP010: 半角カナチェック(Type 27) +//*===================================================================== +//STEP010 EXEC PGM=JIN01KNS +//JIN01R01 DD DSN=EMP-IMPORT.DAT,DISP=SHR +//JIN01W01 DD DSN=EMP-VALID.DAT,DISP=(NEW,CATLG) +//JIN01W02 DD DSN=VALID-ERROR.DAT,DISP=(NEW,PASS) +``` + +### JINJ020 — スキル別評価集計 + +```jcl +//JINJ020 JOB (ACCT),'スキル別評価集計',CLASS=A +//* +//*===================================================================== +//* STEP010: M:N→N件(Type 19) +//*===================================================================== +//STEP010 EXEC PGM=JIN02SKL +//JIN02R01 DD DSN=SKILL-EVAL.DAT,DISP=SHR +//JIN02R02 DD DSN=SKILL-MST.DAT,DISP=SHR +//JIN02W01 DD DSN=SKILL-AGG.DAT,DISP=(NEW,CATLG) +//JIN02W02 DD DSN=VALID-ERROR.DAT,DISP=(NEW,PASS) +``` + +--- + +## プログラム一覧 + +| # | PGM-ID | PGMパターン | 機能概要 | 使用COPY | DBアクセス | CALL先 | +|:-:|:------:|:----------:|---------|:--------:|:---------:|:------:| +| 1 | JIN01KNS | 27 半角20桁/4桁チェック | 人事取込データの氏名カナ桁数・半角英大文字チェック | JIN01REC, JINDATAC, JINMSGAC, JINENDAC | なし | SUB01DAT, SUB02MSG, SUB03END | +| 2 | JIN02SKL | 19 M:N→N件 | スキル評価明細×評価基準マスタの集計(M件→N件出力) | SKILL-EVAL-REC, SKILL-MST-REC, SKILL-AGG-REC, VALID-ERROR-REC, JINDATAC, JINMSGAC, JINENDAC | なし | SUB01DAT, SUB02MSG, SUB03END | + +--- + +## COPY書式一覧 + +| # | COPY ID | 用途 | サイズ | 備考 | +|:-:|:--------|:----:|:------:|------| +| 1 | JIN01REC | EMP-IMPORT/EMP-VALID レコード | 200 | JIN01KNS入出力 | +| 2 | VALID-ERROR-REC | VALID-ERROR エラーレコード | 80 | JIN01KNS/JIN02SKL共用 | +| 3 | SKILL-EVAL-REC | SKILL-EVAL スキル評価明細 | 200 | JIN02SKL入力(M件) | +| 4 | SKILL-MST-REC | SKILL-MST 評価基準マスタ | 80 | JIN02SKL入力(内部表LOAD) | +| 5 | SKILL-AGG-REC | SKILL-AGG 評価集計結果 | 200 | JIN02SKL出力(N件) | +| 6 | JINDATAC | SUB01DAT連絡領域 | — | CALL I/F | +| 7 | JINMSGAC | SUB02MSG連絡領域 | — | CALL I/F | +| 8 | JINENDAC | SUB03END連絡領域 | — | CALL I/F | diff --git a/詳細設計書/詳細設計書_JIN01KNS.md b/詳細設計書/詳細設計書_JIN01KNS.md new file mode 100644 index 0000000..905feba --- /dev/null +++ b/詳細設計書/詳細設計書_JIN01KNS.md @@ -0,0 +1,119 @@ +# JIN01KNS 詳細設計書 + +## プログラム概要 + +| 項目 | 内容 | +|------|------| +| プログラムID | JIN01KNS(人事→JINji, 01, カナKana確認Chekku→KNS) | +| プログラムタイプ | 27(半角20桁/4桁チェック) | +| 機能 | 人事取込データの氏名カナ(半角20桁以内・英大文字)および補助コード桁数のチェック | +| CALL方式 | メインプログラム(JCLからCALL) | +| DBアクセス | なし | +| 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド) | +| INITIAL指定 | PROGRAM-ID IS INITIAL(INITIAL 予約語使用) | +| RETURN-CODE | 正常終了時 MOVE ZERO TO RETURN-CODE(RETURN-CODE 予約語使用) | + +## ファイル一覧 + +| DD名 | ファイル名 | 編成 | RECM | サイズ | I/O | 用途 | +|:----:|:---------:|:----:|:----:|:-----:|:---:|------| +| JIN01R01 | EMP-IMPORT | SEQUENTIAL | FB | 200 | INPUT | 人事取込データ | +| JIN01W01 | EMP-VALID | SEQUENTIAL | FB | 200 | OUTPUT | 正常通過データ | +| JIN01W02 | VALID-ERROR | SEQUENTIAL | FB | 80 | OUTPUT | エラーレコード | + +## レコード定義 + +### JIN01REC(JIN01R01 / JIN01W01 共用, 200B) + +| 項目 | PIC | 内容 | 備考 | +|:----|:---:|------|:----:| +| KANA-SEI | X(20) | 姓(半角カナ) | 最大20桁チェック対象 | +| KANA-MEI | X(20) | 名(半角カナ) | 最大20桁チェック対象 | +| KANJI-NAME | N(40) | 漢字氏名(全角) | PIC N 使用(N(1)=2B、実長80B、合計200B) | +| SUB-CODE | X(4) | 補助コード | 4桁チェック対象 | +| BIRTH-DATE | X(8) | 生年月日 CCYYMMDD | — | +| EMP-ID | X(8) | 社員番号 | — | +| FILLER | X(060) | — | — | + +### VALID-ERROR-REC(JIN01W02, 80B) + +| 項目 | PIC | 内容 | +|:----|:---:|------| +| ERR-PROGRAMID | X(8) | エラー発生プログラムID | +| ERR-EMP-ID | X(8) | エラー社員番号 | +| ERR-CODE | X(4) | エラーコード(K001=カナ桁数超過, K002=英大文字以外, K003=補助コード不正) | +| ERR-DETAIL | X(60) | エラー詳細メッセージ | + +## 処理詳細 + +### 段落一覧 + +| 段落名 | 機能 | +|:-------|:-----| +| JIN01KNS-OPEN | ファイルOPEN | +| JIN01KNS-READ | 1レコードREAD | +| JIN01KNS-CHECK | カナチェック主処理 | +| JIN01KNS-CHK-KANA | 半角カナ文字チェック(IS ALPHABETIC-UPPER) | +| JIN01KNS-CHK-SIZE | 桁数チェック(20桁超過チェック) | +| JIN01KNS-CHK-SUB | 補助コード桁数チェック(4桁) | +| JIN01KNS-WRITE-OK | 正常データWRITE | +| JIN01KNS-WRITE-ERR | エラーデータWRITE | +| JIN01KNS-CLOSE | ファイルCLOSE + RETURN-CODE設定 | + +### 処理ロジック + +#### 初期処理(JIN01KNS-OPEN) +1. JIN01R01 / JIN01W01 / JIN01W02 を OPEN +2. WS-READ-CNT, WS-ERR-CNT を INITIALIZE(数値=0, PIC X=SPACE) + +#### 主処理(JIN01KNS-READ → JIN01KNS-CHECK → JIN01KNS-READ) +1. JIN01R01 から1レコード READ +2. READ 成功 → JIN01KNS-CHECK へ +3. READ 失敗(AT END)→ JIN01KNS-CLOSE へ + +#### チェック処理(JIN01KNS-CHECK) +1. ADD 1 TO WS-READ-CNT END-ADD(END-ADD 予約語) +2. JIN01KNS-CHK-KANA 呼出 +3. JIN01KNS-CHK-SIZE 呼出 +4. JIN01KNS-CHK-SUB 呼出 +5. エラーフラグ OFF → JIN01KNS-WRITE-OK +6. エラーフラグ ON → JIN01KNS-WRITE-ERR + +#### カナ文字チェック(JIN01KNS-CHK-KANA) +1. IF KANA-SEI IS NOT ALPHABETIC-UPPER → エラー(ALPHABETIC-UPPER 予約語) +2. IF KANA-MEI IS NOT ALPHABETIC-UPPER → エラー +3. エラー時は WRK-ERR-CODE に 'K002' を MOVE(88-level VALUESは使用なし) + +#### 桁数チェック(JIN01KNS-CHK-SIZE) +1. KANA-SEI の20桁超過をチェック(FUNCTION LENGTH) +2. 超過時はエラーフラグ ON + エラーコード設定 + +#### 補助コードチェック(JIN01KNS-CHK-SUB) +1. SUB-CODE が有効値(VALUES '0001' '0002' '0003' 等)かチェック +2. 範囲外はエラーフラグ ON + +#### 正常出力(JIN01KNS-WRITE-OK) +1. JIN01W01 へレコード WRITE + +#### エラー出力(JIN01KNS-WRITE-ERR) +1. ADD 1 TO WS-ERR-CNT END-ADD +2. VALID-ERROR-REC にエラー情報設定 +3. JIN01W02 へ WRITE + +#### 終了処理(JIN01KNS-CLOSE) +1. JIN01R01 / JIN01W01 / JIN01W02 を CLOSE +2. WS-ERR-CNT = 0 → MOVE ZERO TO RETURN-CODE +3. WS-ERR-CNT > 0 → MOVE 4 TO RETURN-CODE +4. GOBACK + +## カバレッジ対象キーワード + +| 予約語/記号 | 区分 | 使用箇所 | +|:-----------|:----:|:---------| +| PROGRAM-ID IS INITIAL | 予約語(95) | IDENTIFICATION DIVISION | +| RETURN-CODE | 予約語(145) | JIN01KNS-CLOSE | +| ALPHABETIC-UPPER | 予約語(7) | JIN01KNS-CHK-KANA | +| END-ADD | 予約語(55) | JIN01KNS-CHECK | +| VALUES | 予約語(183) | ERR-CODE 88-level(VALUE→VALUES表記) | +| PIC N | PICTURE記号 | KANJI-NAME定義 | +| ZZZZ9 | PICTURE記号 | 自プログラムでは使用なし(JIN02SKLのAGG-COUNT-EDITでカバー) | diff --git a/詳細設計書/詳細設計書_JIN02SKL.md b/詳細設計書/詳細設計書_JIN02SKL.md new file mode 100644 index 0000000..52ca0a5 --- /dev/null +++ b/詳細設計書/詳細設計書_JIN02SKL.md @@ -0,0 +1,173 @@ +# 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参照でカバー) |