# JIN01KNS 詳細設計書 ## プログラム概要 | 項目 | 内容 | |------|------| | プログラムID | JIN01KNS(人事→JINji, 01, カナKana確認Chekku→KNS) | | プログラムタイプ | 27(半角20桁/補助コード有効値チェック) | | 機能 | 人事取込データの氏名カナ(半角20桁以内・英大文字)および補助コード有効値のチェック | | CALL方式 | メインプログラム(JCLからCALL) | | DBアクセス | なし | | 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド) | | INITIAL指定 | PROGRAM-ID IS INITIAL(INITIAL 予約語使用) | | RETURN-CODE | エラー時 MOVE 4 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) | 補助コード | 有効値チェック対象 | | 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) | エラー詳細メッセージ | ## 処理詳細 ### 段落一覧 | 段落名 | 機能 | |:-------|:-----| | 0000MAJCOLSOR | メインコントロール(初期→読込→主処理→終了、RETURN-CODE設定) | | 1000ITTSOR | 初期処理(開始・コンパイル日時メッセージ、初期化、運用日付、OPEN、初回読込) | | 1100R01INNSOR | R01読込・EOF判定 | | 2000MAJSOR | 主処理(エラーフラグ初期化→各チェック→振分) | | 2010CHKANASOR | 半角カナ文字チェック(IS ALPHABETIC-UPPER) | | 2020CHKSIZSOR | 桁数チェック(20桁超過チェック) | | 2030CHKSUBSOR | 補助コード有効値チェック('0001'/'0002'/'0003') | | 2100WRTOKSOR | 正常データWRITE | | 2200WRTERRSOR | エラーデータWRITE | | 3000STPSOR | 終了処理(統計表示・CLOSE) | | 4000MSGOUTSOR | メッセージ編集出力SUB呼出 | | 9999ABDSOR | エラー処理(ABEND) | ### 処理ロジック #### 初期処理(1000ITTSOR) 1. 開始・コンパイル日時メッセージを SUB02MSG で出力(4000MSGOUTSOR 経由) 2. WRKARA, CUNARA を INITIALIZE 3. 運用日付取得(CALL SUB01DAT)。異常時は 4000MSGOUTSOR+9999ABDSOR 4. JIN01R01 / JIN01W01 / JIN01W02 を OPEN 5. 初回読込(PERFORM 1100R01INNSOR) #### 制御・メイン(0000MAJCOLSOR) 1. PERFORM 1000ITTSOR(初期処理) 2. PERFORM 2000MAJSOR UNTIL WRK-R01EOF-Y(読込EOFまでループ) 3. PERFORM 3000STPSOR(終了処理) 4. CUN-W02OUT > 0 → MOVE 4 TO RETURN-CODE(GOBACK直前) 5. GOBACK #### 読込処理(1100R01INNSOR) 1. JIN01R01 から1レコード READ(AT END → WRK-R01EOF='1') #### 主処理(2000MAJSOR) 1. WRK-ERR-FLG に '0' を初期化 2. カナ文字チェック(2010CHKANASOR)呼出 3. エラー未設定時のみ桁数チェック(2020CHKSIZSOR)呼出 4. エラー未設定時のみ補助コードチェック(2030CHKSUBSOR)呼出 5. エラーフラグ ON → 2200WRTERRSOR / OFF → 2100WRTOKSOR へ振分 #### カナ文字チェック(2010CHKANASOR) 1. IF KANA-SEI IS NOT ALPHABETIC-UPPER → エラー(ALPHABETIC-UPPER 予約語) 2. IF KANA-MEI IS NOT ALPHABETIC-UPPER → エラー 3. エラー時は ERR-CODE に 'K002' を設定 #### 桁数チェック(2020CHKSIZSOR) 1. KANA-SEI の20桁超過をチェック(FUNCTION LENGTH) 2. 超過時はエラーフラグ ON + エラーコード設定 #### 補助コードチェック(2030CHKSUBSOR) 1. SUB-CODE が有効値(VALUES '0001' '0002' '0003' 等)かチェック 2. 範囲外はエラーフラグ ON #### 正常出力(2100WRTOKSOR) 1. JIN01W01 へレコード WRITE #### エラー出力(2200WRTERRSOR) 1. ADD 1 TO CUN-W02OUT END-ADD 2. VALID-ERROR-REC にエラー情報設定 3. JIN01W02 へ WRITE #### 終了処理(3000STPSOR) 1. 統計表示 2. JIN01R01 / JIN01W01 / JIN01W02 を CLOSE 3. 終了メッセージ OUTPUT(4000MSGOUTSOR) #### メッセージ出力(4000MSGOUTSOR) 1. CALL SUB02MSG でメッセージ出力 #### エラー処理(9999ABDSOR) 1. CALL SUB03END(ABEND) ## カバレッジ対象キーワード | 予約語/記号 | 区分 | 使用箇所 | |:-----------|:----:|:---------| | PROGRAM-ID IS INITIAL | 予約語(95) | IDENTIFICATION DIVISION | | RETURN-CODE | 予約語(145) | 0000MAJCOLSOR | | ALPHABETIC-UPPER | 予約語(7) | 2010CHKANASOR | | END-ADD | 予約語(55) | 2200WRTERRSOR | | VALUES | 予約語(183) | (JIN01KNS では未使用。JIN05UPD の EXEC SQL VALUES 句は SQL コンテキストのため、COBOL 予約語 VALUES のカバー対象外。カバレッジ統計は ×) | | PIC N | PICTURE記号 | KANJI-NAME定義 | | ZZZZ9 | PICTURE記号 | 自プログラムでは使用なし(JIN02SKLのAGG-COUNT-EDITでカバー) |