diff --git a/bin/JIN01KNS.exe b/bin/JIN01KNS.exe new file mode 100644 index 0000000..779465a Binary files /dev/null and b/bin/JIN01KNS.exe differ diff --git a/bin/JIN02SKL.exe b/bin/JIN02SKL.exe new file mode 100644 index 0000000..50c8bcd Binary files /dev/null and b/bin/JIN02SKL.exe differ 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参照でカバー) |