# 詳細設計書 ## 基本情報 | # | 項目 | 内容 | |---|------|------| | 1 | システム名 | 勤怠休暇管理システム | | 2 | プログラムID | KIN01INP | | 3 | プログラム名 | 休暇申請CSV取込・検証処理 | | 4 | PGMタイプ | メイン | | 5 | PGMパターン | 振り分け | | 6 | 機能概要 | CSV形式の休暇申請ファイルを読み込み、休暇種別テーブル検索と項目チェックを行い、ステータスによってWORK-LEAVEまたはERROR-LOGへ振り分ける。 | | 7 | | ステータス'1':有効申請としてWORK-LEAVEに出力(項目チェック実施) | | 8 | | ステータス'9':取消申請としてWORK-LEAVEに出力(項目チェックなし、APPL-ID保持) | | 9 | | その他・フィールド数異常・休暇種別異常:ERROR-LOGに出力 | ※PGMタイプ:メイン、サブ ※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 ### 前提条件 | NO | 対象ファイル | 条件 | |----|-------------|------| | 1 | KIN01R01(CSV) | ソート不要。CSV形式(カンマ区切り、8項目) | ### 使用ファイル一覧 | NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | |----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| | 1 | CSV-INPUT | R01 | KIN01R01 | I | 自前(80B) | F | | 80 | PS | CSV形式 | | 2 | WORK-LEAVE | W01 | KIN01W01 | O | KIN01REC | FB | | 80 | PS | | | 3 | ERROR-LOG | W02 | KIN01W02 | O | KIN05REC | VB | | 200 | PS | | ### キー項目一覧 | NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | |----|-----------|---------------------|-------------------------------------------| | 1 | CSV-INPUT | なし | なし | ### 使用モジュール一覧 | NO | 機能 | プログラムID | 使用COPY名 | |----|------|-------------|-----------| | 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC | | 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC | | 3 | ABEND処理SUB | SUB03END | ZANENDAC | | 4 | 項目チェックSUB | SUB04CHK | ZANCHKAC | --- ## 処理詳細 ``` 1.初期処理(1000ITTSOR) 1-1.開始メッセージ出力 【メッセージ編集】 メッセージ番号:1(開始メッセージ) 1-2.コンパイル日時出力 【メッセージ編集】 メッセージ番号:33(コンパイル日時) PARM1:コンパイル日時 PARM2:'COMPILED' 1-3.ワークエリアの初期化 1-4.休暇種別テーブル設定(WRK-LEAVE-TYPE-TABLE) WRK-LT-CODE(1)='01' (年休/年假) WRK-LT-CODE(2)='02' (事假) WRK-LT-CODE(3)='03' (因公特批假) WRK-LT-CODE(4)='04' (病欠) 1-5.運用日付取得SUB(SUB01DAT)により運用日を取得する。 復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。 【メッセージ編集】 メッセージ番号:5(サブエラー) PARM1:'SUB01DAT' PARM2:復帰コード 【ABEND処理SUB】 ABENDコード:999 1-6.使用ファイルのオープン(R01:入力、W01/W02:出力) 1-7.R01を読み込む。(1100R01INNSOR)(1回目) 2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) 2-1.CSVの分解(2010CSVSOR) UNSTRINGでカンマ区切りのCSVを8項目に分解する。 (APPL-ID, EMP-ID, START-DATE, START-TIME, END-DATE, END-TIME, LEAVE-TYPE, STATUS) 2-2.休暇種別テーブル検索(2020LEAVSERSOR) SEARCH(非ALL)でWRK-LEAVE-TYPE-TABLEを検索し、休暇種別の妥当性を検証する。 2-3.エラー判定 2-3-1.フィールド数≠8の場合 ERROR-LOGに出力する。(2050ERRORSOR) エラー種別:'F'(FIELD COUNT ERROR) 2-3-2.休暇種別がテーブルに存在しない場合 ERROR-LOGに出力する。(2050ERRORSOR) エラー種別:'L'(INVALID LEAVE TYPE) 2-3-3.ステータス'1'(有効)の場合 項目チェックを実施し、エラーがあればERROR-LOGに出力、なければWORK-LEAVEに出力する。(2030VALIDATESOR) 2-3-3-1.SUB04CHKで社員番号チェック(EMPID): WRK-CSV-EMP-IDをC01CHKDATに設定し、CALL 'SUB04CHK' EMPIDタイプで社員番号フォーマットの妥当性を検証する。エラーの場合はW02ERR-CATEGORY='01'でエラーログに出力し本レコードをスキップ。 2-3-3-2.開始日付チェック(SUB04CHK)。エラー→W02出力 2-3-3-3.開始時刻チェック(SUB04CHK)。エラー→W02出力 2-3-3-4.終了日付チェック(SUB04CHK)。エラー→W02出力 2-3-3-5.終了時刻チェック(SUB04CHK)。エラー→W02出力 2-3-3-6.複合条件チェック(AND+OR+3段ネスト) 開始日>0 AND 終了日>0 AND 開始時刻>0 の場合: - 開始日>終了日 → WRK-DEMO-TYPE=10 - 開始日=終了日 AND 開始時刻>=終了時刻 → WRK-DEMO-TYPE=10 - 上記以外 → WRK-DEMO-TYPE=20 2-3-3-7.すべて通過→W01出力(APPL-ID=0, STATUS='1') 2-3-4.ステータス'9'(取消)の場合 WORK-LEAVEにそのまま出力する。(2040CANCELSOR) APPL-ID=CSV値、STATUS='9'(項目チェックなし) 2-3-5.その他のステータスの場合 ERROR-LOGに出力する。(2050ERRORSOR) エラー種別:'S'(INVALID STATUS) 2-4.R01を読み込む。(1100R01INNSOR)(2件目以降) 3.終了処理(3000STPSOR) 3-1.入出力ファイルのクローズ 3-2.入出力件数出力メッセージ出力 【入力メッセージ編集】 メッセージ番号:6(入力件数メッセージ) PARM1:'KIN01R01' PARM2:当該入力ファイルの件数 【出力メッセージ編集】 メッセージ番号:7(出力件数メッセージ) PARM1:'KIN01W01'、'KIN01W02' PARM2:当該出力ファイルの件数 3-3.終了メッセージ出力 【メッセージ編集】 メッセージ番号:2(終了メッセージ) ``` --- ## 出力レコード定義 ### 出力ファイル1(W01/WORK-LEAVE) KIN01REC 80B FB | No | 項目名 | 設定元 | 備考 | |----|--------|--------|------| | 1 | APPL-ID | WRK-CSV-APPL-ID | 有効時=0、取消時=CSV値 | | 2 | EMP-ID | WRK-CSV-EMP-ID | | | 3 | LEAVE-TYPE | WRK-CSV-LEAVE-TYPE | 01/02/03/04 | | 4 | START-DATE | WRK-CSV-START-DATE | YYYYMMDD | | 5 | START-TIME | WRK-CSV-START-TIME | HHMM | | 6 | END-DATE | WRK-CSV-END-DATE | YYYYMMDD | | 7 | END-TIME | WRK-CSV-END-TIME | HHMM | | 8 | STATUS | WRK-CSV-STATUS | '1'(有効)または'9'(取消) | | 9 | FILLER | SPACE | 36B | ### 出力ファイル2(W02/ERROR-LOG) KIN05REC 200B VB | No | 項目名 | 設定元 | 備考 | |----|--------|--------|------| | 1 | ERR-CATEGORY | '01'固定 | | | 2 | ERR-DETAIL | STRING編集 | エラー内容(198B) |