repository restructure: move .git to production/, rename dirs (design→基本設計書, list→品質管理, docs→参考資料), add Subsystem A KIN01-03 files, update AGENTS.md and README.md, cleanup tmp/ tools/ bk/

This commit is contained in:
qiuqiuqiu
2026-06-27 01:09:40 +08:00
parent 6754df70cd
commit 3379941b44
22 changed files with 3325 additions and 57 deletions
+170
View File
@@ -0,0 +1,170 @@
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 勤怠休暇管理システム |
| 2 | プログラムID | KIN03EXP |
| 3 | プログラム名 | 休暇日別展開処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | キーブレイク(集計) |
| 6 | 機能概要 | LEAVE_RECORDS(DB2)より有効申請(STATUS='1')を読込み、開始日〜終了日の期間を日別に展開し、休日・週末を除外してLEAVE-DAILYファイルを出力する。 |
| 7 | | 社員番号(EMP_ID)キーブレイクで小計出力を行う。 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | DB(LEAVE_RECORDS) | EMP_ID, START_DATE順にソート済(ORDER BYで取得) |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | LEAVE-DAILY | W01 | KIN02W01.DAT | O | KIN02REC | FB | | 80 | PS | 日別展開後レコード |
| 2 | LEAVE_RECORDS | DB | — | I | — | — | — | — | DB | SQLite |
| 3 | HOLIDAY_CALENDAR | DB | — | I | — | — | — | — | DB | SQLite |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | DB(LEAVE_RECORDS) | EMP-ID, START_DATE(昇順) | キーブレイク: EMP-ID |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
---
## 処理詳細
```
1.初期処理(1000ITTSOR
1-1.開始メッセージ出力
【メッセージ編集】
メッセージ番号:1(開始メッセージ)
1-2.コンパイル日時出力
【メッセージ編集】
メッセージ番号:33(コンパイル日時)
PARM1:コンパイル日時
PARM2'COMPILED'
1-3.ワークエリアの初期化
1-4.DB接続
EXEC SQL CONNECT TO 'data/kin.db'
1-5.運用日付取得SUB(SUB01DAT)により運用日を取得する。
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
【メッセージ編集】
メッセージ番号:5(サブエラー)
PARM1'SUB01DAT'
PARM2:復帰コード
【ABEND処理SUB】
ABENDコード:999
1-6.休日カレンダーテーブル読込(1200HDINNSOR)
【SQL】
SELECT HOLIDAY_DATE FROM HOLIDAY_CALENDAR ORDER BY HOLIDAY_DATE
FETCHループでWORKING-STORAGEのWRK-HOLIDAY-TABLEに全件格納する。
WRK-HD-COUNTに件数を保持。最大366件(ODO定義)。
1-7.出力ファイルOPENW01
1-8.C1カーソル初回FETCH(1100C1INITSOR)
【SQL】
SELECT APPLICATION_ID, EMP_ID, LEAVE_TYPE,
START_DATE, START_TIME, END_DATE, END_TIME
FROM LEAVE_RECORDS
WHERE STATUS = '1'
ORDER BY EMP_ID, START_DATE
INTO :SQL-APPL-ID, :SQL-EMP-ID, :SQL-LEAVE-TYPE,
:SQL-START-DATE, :SQL-START-TIME,
:SQL-END-DATE, :SQL-END-TIME
SQLCODE=0の場合、入力件数+1
SQLCODE≠0の場合、WRK-R01EOF='1'EOF
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
2-1.社員番号キー保存
SQL-EMP-ID → WRK-BFR-EMP-ID
2-2.1社員分処理(2100-PROCESS-EMP)(PERFORM THRU)
2-2-1.CUN-EMP-SUB初期化(ZERO)
2-2-2.EOFまたはキー変化(SQL-EMP-ID≠WRK-BFR-EMP-ID)まで繰り返し
2-2-2-1.日付展開処理(2200-EXPAND-DATE)(PERFORM THRU)
2-2-2-1-1.開始日(SQL-START-DATE)→WRK-DATE-CURRENT
終了日(SQL-END-DATE)→WRK-DATE-END
2-2-2-1-2.WRK-DATE-CURRENT > WRK-DATE-END までループ
2-2-2-1-2-1.曜日判定
COMPUTE WRK-DAY-OF-WEEK = FUNCTION MOD(
FUNCTION INTEGER-OF-DATE(WRK-DATE-CURRENT), 7)
0=日曜日、6=土曜日 → 週末としてスキップ
2-2-2-1-2-2.非週末の場合、休日テーブル検索
SEARCH ALL WRK-HD-ENTRY(昇順KEY=WRK-HD-DATE
WRK-HD-DATE(WRK-HD-IDX) = WRK-DATE-CURRENT → 休日としてスキップ
2-2-2-1-2-3.非週末かつ非休日の場合、W01出力
W01レコード初期化
APPL-ID = SQL-APPL-ID
EMP-ID = WRK-BFR-EMP-ID
LEAVE-TYPE = SQL-LEAVE-TYPE
START-TIME = SQL-START-TIME
END-TIME = SQL-END-TIME
DATE = WRK-DATE-ALPHA(現在日付)
WRITE W01OUTREC
CUN-W01OUT +1
CUN-EMP-SUB +1
2-2-2-1-2-4.日付加算(2300-DATE-ADD-1)
WRK-DATE-DAY + 1
各月の最終日判定:
- 1/3/5/7/8/10/12月:31日超で月+1、13月→年+1
- 4/6/9/11月:30日超で月+1
- 2月:閏年判定(MOD年400=0 または MOD年4=0 AND MOD年100≠0)
閏年→29日超、平年→28日超で月+1
2-2-3.次レコードFETCH(1100C1FETCHSOR)
CALL 'br_fetch_next' USING SQLCODE
SQLCODE=0の場合、br_get_colで各カラムを取得
SQLCODE≠0の場合、WRK-R01EOF='1'
2-2-4.社員別小計出力(キーブレイク)
【メッセージ編集】
メッセージ番号:33(情報メッセージ)
PARM1WRK-BFR-EMP-ID
PARM2CUN-EMP-SUB
PARM3'EMP SUB'
3.終了処理(3000STPSOR
3-1.出力ファイルのクローズ
3-2.件数メッセージ出力
【メッセージ編集】
メッセージ番号:6(入力件数)
PARM1'LEAVE_RECORDS'
PARM2:入力件数
【メッセージ編集】
メッセージ番号:7(出力件数)
PARM1'KIN02W01'
PARM2:出力件数
【メッセージ編集】
メッセージ番号:33(情報)
PARM1'HOLIDAYS LOADED'
PARM2:休日テーブル件数
3-3.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル1W01/LEAVE-DAILY KIN02REC 80B FB
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | EMP-ID | WRK-BFR-EMP-ID | キーブレイク単位 |
| 2 | DATE | WRK-DATE-ALPHA | 展開された日付(YYYYMMDD) |
| 3 | LEAVE-TYPE | SQL-LEAVE-TYPE | 01/02/03/04 |
| 4 | START-TIME | SQL-START-TIME | 元申請の開始時刻(HHMM) |
| 5 | END-TIME | SQL-END-TIME | 元申請の終了時刻(HHMM) |
| 6 | APPL-ID | SQL-APPL-ID | APPLICATION_ID |
| 7 | FILLER | SPACE | 45B |