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

6.2 KiB
Raw Blame History

詳細設計書

基本情報

# 項目 内容
1 システム名 勤怠休暇管理システム
2 プログラムID KIN04CHK
3 プログラム名 打刻項目チェック処理
4 PGMタイプ メイン
5 PGMパターン 項目チェック(重複なし)
6 機能概要 CSV形式の打刻データファイルを読み込み、項目チェックを行い、正常レコードをEDITED-PUNCHへ、異常レコードをERROR-LOGへ振り分ける。
7 チェックはIF多重ネスト(THEN句)で4段階:社員番号必須→日付妥当性→時刻妥当性→出勤<退勤
8 正常出力はWRITE FROMを使用する(新規カバレッジ)

前提条件

NO 対象ファイル 条件
1 KIN04R01(CSV) ソート不要。CSV形式(カンマ区切り、6項目)

使用ファイル一覧

NO 使用ファイル/DB名 識別子 DD名 I/O COPY群 形式 ブロック レコード長 媒体 備考
1 RAW-PUNCH R01 KIN04R01 I 自前(80B) F 80 PS CSV形式
2 EDITED-PUNCH W01 KIN04W01 O KIN04REC FB 80 PS WRITE FROM使用
3 ERROR-LOG W02 KIN04W02 O KIN05REC VB 200 PS

キー項目一覧

NO ファイル名 ソート条件(キー項目) キー条件(マッチング/キーブレイク)
1 RAW-PUNCH なし なし

使用モジュール一覧

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.運用日付取得SUB(SUB01DAT)により運用日を取得する。
    復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
    【メッセージ編集】
    メッセージ番号:5(サブエラー)
    PARM1'SUB01DAT'
    PARM2:復帰コード
    【ABEND処理SUB】
    ABENDコード:999
  1-5.使用ファイルのオープン(R01:入力、W01/W02:出力)
  1-6.R01を読み込む。(1100R01INNSOR)(1回目)

2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
  2-1.CSVの分解(2010CSVSOR)
    UNSTRINGでカンマ区切りのCSVを6項目に分解する。
    (EMP-ID, DATE, TIME-IN, TIME-OUT, DEPT-ID, TERMINAL)
  2.1.5.社員番号チェック(2021EMPIDSOR)
    SUB04CHK('EMPID')により社員番号のフォーマットチェックを実施する。
    SUB04CHKの復帰コードにより正常/異常を判定する。
  2-2.IF多重ネストチェック(2020VALIDATESOR)
    第1段階: フィールド数チェック + 社員番号チェック(2021EMPIDSOR)
    IF フィールド数=6 THEN
        2021EMPIDSORを実行
        IF 社員番号正常 THEN
            SUB04CHK('DATE')で日付チェック
            IF 正常 THEN
                SUB04CHK('TIME')で時刻チェック(出勤)
                IF 正常 THEN
                    SUB04CHK('TIME')で時刻チェック(退勤)
                    IF 正常 THEN
                        IF 出勤時刻 < 退勤時刻 THEN
                            WRITE FROMでW01出力(2050NORMSOR)
                        ELSE
                            エラー区分='02'でW02出力(2090ERRORSOR)
                        END-IF
                    ELSE
                        エラー区分='02'でW02出力(2090ERRORSOR)
                    END-IF
                ELSE
                    エラー区分='02'でW02出力(2090ERRORSOR)
                END-IF
            ELSE
                エラー区分='02'でW02出力(2090ERRORSOR)
            END-IF
        ELSE
            エラー区分='02'でW02出力(2090ERRORSOR)
        END-IF
    ELSE
        エラー区分='02'でW02出力(2090ERRORSOR)
    END-IF

  2021EMPIDSOR (社員番号チェック)
    本Paragraphは2020VALIDATESORの第1段階(フィールド数OK時)に
    PERFORMされる。
    SUB04CHK('EMPID')により社員番号のフォーマットチェックを実施する。
    復帰コード=ZEROなら正常、≠ZEROなら異常として呼び出し元に戻る。

  2-3.R01を読み込む。(1100R01INNSOR)(2件目以降)

3.終了処理(3000STPSOR
  3-1.入出力ファイルのクローズ
  3-2.入出力件数出力メッセージ出力
    【入力メッセージ編集】
    メッセージ番号:6(入力件数メッセージ)
    PARM1'KIN04R01'
    PARM2:当該入力ファイルの件数
    【出力メッセージ編集】
    メッセージ番号:7(出力件数メッセージ)
    PARM1'KIN04W01'、'KIN04W02'
    PARM2:当該出力ファイルの件数
  3-3.終了メッセージ出力
    【メッセージ編集】
    メッセージ番号:2(終了メッセージ)

出力レコード定義

出力ファイル1W01/EDITED-PUNCH KIN04REC 80B FB

No 項目名 設定元 備考
1 EMP-ID WRK-CSV-EMP-ID 社員番号
2 WORK-DATE WRK-CSV-DATE YYYYMMDD
3 STR-TIME WRK-CSV-TIME-IN HHMM
4 END-TIME WRK-CSV-TIME-OUT HHMM
5 DEPT-ID WRK-CSV-DEPT-ID 部署ID
6 TERMINAL WRK-CSV-TERMINAL 端末ID
7 FILLER SPACE 46B

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

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