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

6.9 KiB
Raw Permalink Blame History

詳細設計書

基本情報

# 項目 内容
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(終了メッセージ)

出力レコード定義

出力ファイル1W01/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

出力ファイル2W02/ERROR-LOG KIN05REC 200B VB

No 項目名 設定元 備考
1 ERR-CATEGORY '01'固定
2 ERR-DETAIL STRING編集 エラー内容(198B)