Add Subsystem C (KYU01-09): all 9 programs, design docs, resource lists, DDL, COPY, coverage stats

KYU programs for payroll calculation:
  KYU01CVT - CSV conversion
  KYU02REG - attendance registration
  KYU03AGG - aggregation
  KYU04CAL - salary calculation
  KYU05DED - deduction calculation
  KYU06UPD - DB update
  KYU07DIV - division/pay-slip
  KYU08PRI - print output
  KYU09MRG - merge output

Includes:
  - Source programs (9 .cbl)
  - Compiled executables (9 .exe)
  - Detailed design docs (9 + sign-off)
  - Basic design doc (subsystem C overview)
  - Resource lists (9)
  - DDL schema (schema_kyu.sql)
  - COPY book (KYU99REC.cpy)
  - Coverage statistics update
  - DB definition update (STATUS values)
  - Overall system design document
This commit is contained in:
qiuqiuqiu
2026-07-09 08:09:59 +08:00
parent 02dd36e094
commit 75475b3fa1
43 changed files with 7212 additions and 41 deletions
+115
View File
@@ -5,6 +5,7 @@
| No | 変更内容 | 担当者 | 変更日 | 承認者 | 備考 |
|----|---------|--------|--------|--------|------|
| 1 | 新規作成(全8テーブル) | AI | 2026/06/23 | | サブシステムA(6) + B(2) |
| 2 | SALARYDB 4テーブル追加 | AI | 2026/07/08 | | サブシステムC(給与計算) |
---
@@ -230,3 +231,117 @@
### 備考
- ZAN06UPDが月次集計結果をUPSERT
---
# EMP-MASTERSALARYDB — 社員マスタ(給与計算用)
## Layout(テーブル定義)
### DB基本情報
| DB名 | DB ID | COPY ID | INDEX |
|------|-------|---------|-------|
| 給与計算DB | EMP-MASTER | KYU01REC | PK: EMP-ID |
### カラム定義
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
| 1 | 社員番号 | EMP-ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
| 2 | 氏名 | EMP-NAME | VARCHAR | 40 | | 40 | NOT NULL | | | | | | |
| 3 | 部署コード | DEPT-CODE | CHAR | 2 | | 2 | NOT NULL | | | | | | |
| 4 | 地域コード | REGION-CODE | CHAR | 2 | | 2 | NOT NULL | | | | | | |
| 5 | 職種コード | CATEGORY-CODE | CHAR | 3 | | 3 | NOT NULL | | | | | | |
| 6 | 基本給 | BASE-SALARY | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
| 7 | 時給 | HOURLY-RATE | DECIMAL | 7 | 0 | 4 | NOT NULL | | | | | | |
| 8 | 扶養人数 | DEPENDENT-COUNT | SMALLINT | — | | 2 | NOT NULL | | | | | | |
| 9 | ステータス | STATUS | CHAR | 1 | | 1 | NOT NULL | | | | | | '0'=在籍, '9'=退職 |
| 10 | 更新日時 | UPDATED-AT | TIMESTAMP | — | | 10 | NOT NULL | CURRENT TIMESTAMP | | | | | |
### 備考
- KYU02REGがINSERT/UPSERTを実行
- KYU04CALがSELECTで参照
---
# TAX-TABLESALARYDB — 所得税率テーブル
## Layout(テーブル定義)
### DB基本情報
| DB名 | DB ID | COPY ID | INDEX |
|------|-------|---------|-------|
| 給与計算DB | TAX-TABLE | — | PK: (TAX-FROM, TAX-TO) |
### カラム定義
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
| 1 | 課税下限 | TAX-FROM | DECIMAL | 9 | 0 | 5 | NOT NULL | | ✓ | | | | |
| 2 | 課税上限 | TAX-TO | DECIMAL | 9 | 0 | 5 | NOT NULL | | ✓ | | | | |
| 3 | 税率 | TAX-RATE | DECIMAL | 5 | 4 | 3 | NOT NULL | | | | | | |
| 4 | 控除額 | DEDUCTION | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
### 備考
- KYU05DEDがSELECT ... BETWEENで参照
- 課税所得に対する超過累進税率
---
# INSURANCE-TABLESALARYDB — 社会保険料率テーブル
## Layout(テーブル定義)
### DB基本情報
| DB名 | DB ID | COPY ID | INDEX |
|------|-------|---------|-------|
| 給与計算DB | INSURANCE-TABLE | — | PK: (INS-INCOME-FROM, INS-INCOME-TO) |
### カラム定義
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
| 1 | 所得下限 | INS-INCOME-FROM | DECIMAL | 9 | 0 | 5 | NOT NULL | | ✓ | | | | |
| 2 | 所得上限 | INS-INCOME-TO | DECIMAL | 9 | 0 | 5 | NOT NULL | | ✓ | | | | |
| 3 | 健康保険料率 | INS-HEALTH-RATE | DECIMAL | 7 | 6 | 4 | NOT NULL | | | | | | |
| 4 | 厚生年金保険料率 | INS-PENSION-RATE | DECIMAL | 7 | 6 | 4 | NOT NULL | | | | | | |
| 5 | 更新日時 | UPDATED-AT | TIMESTAMP | — | | 10 | NOT NULL | CURRENT TIMESTAMP | | | | | |
### 備考
- KYU05DEDが内部テーブル(SEARCH ALL)に取込んで参照
- 被保険者負担分のみ
---
# SALARY-RESULTSSALARYDB — 給与計算結果テーブル
## Layout(テーブル定義)
### DB基本情報
| DB名 | DB ID | COPY ID | INDEX |
|------|-------|---------|-------|
| 給与計算DB | SALARY-RESULTS | — | PK: (EMP-ID, YEAR-MONTH) |
### カラム定義
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
| 1 | 社員番号 | EMP-ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
| 2 | 対象年月 | YEAR-MONTH | CHAR | 6 | | 6 | NOT NULL | | ✓ | | | | YYYYMM |
| 3 | 総支給額 | GROSS-PAYMENT | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
| 4 | 源泉所得税 | INCOME-TAX | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
| 5 | 社会保険料 | INSURANCE | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
| 6 | 住民税 | RESIDENT-TAX | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
| 7 | 差引支給額 | NET-PAYMENT | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
| 8 | 更新日時 | UPDATED-AT | TIMESTAMP | — | | 10 | NOT NULL | CURRENT TIMESTAMP | | | | | |
### 備考
- KYU06UPDがINSERT/UPSERTを実行
@@ -0,0 +1,148 @@
# 設計レビューサインオフ(サブシステムC / KYU)
> レビュー日: 2026-07-09
> レビュー対象: サブシステムCKYU01CVT〜KYU09MRG)全9プログラム
> 状態: ✅ サインオフ
---
## 1. JCL vs SELECT/ASSIGN 整合性
### 判定: ✅ 合格
| JCL | DD名 | プログラム | ASSIGN先 | 一致 |
|-----|------|-----------|---------|:---:|
| KYUJ010 STEP010 | KYU01R01 | KYU01CVT | KYU01R01 | ✅ |
| KYUJ010 STEP010 | KYU01W01 | KYU01CVT | KYU01W01 | ✅ |
| KYUJ010 STEP010 | KYU01W02 | KYU01CVT | KYU01W02 | ✅ |
| KYUJ010 STEP020 | KYU02R02 | KYU02REG | KYU02R02 | ✅ |
| KYUJ010 STEP020 | KYU02W03 | KYU02REG | KYU02W03 | ✅ |
| KYUJ020 STEP021 | KYU03R01 | KYU03AGG | KYU03R01 | ✅ |
| KYUJ020 STEP021 | KYU03W01 | KYU03AGG | KYU03W01 | ✅ |
| KYUJ020 STEP021 | KYU03W02 | KYU03AGG | KYU03W02 | ✅ |
| KYUJ020 STEP022 | KYU04R02 | KYU04CAL | KYU04R02 | ✅ |
| KYUJ020 STEP022 | KYU04R03 | KYU04CAL | KYU04R03 | ✅ |
| KYUJ020 STEP022 | KYU04W03 | KYU04CAL | KYU04W03 | ✅ |
| KYUJ020 STEP022 | KYU04W04 | KYU04CAL | KYU04W04 | ✅ |
| KYUJ030 STEP030 | KYU05R01 | KYU05DED | KYU05R01 | ✅ |
| KYUJ030 STEP030 | KYU05W01 | KYU05DED | KYU05W01 | ✅ |
| KYUJ030 STEP030 | KYU05W02 | KYU05DED | KYU05W02 | ✅ |
| KYUJ030 STEP031 | KYU06R02 | KYU06UPD | KYU06R02 | ✅ |
| KYUJ030 STEP031 | KYU06W03 | KYU06UPD | KYU06W03 | ✅ |
| KYUJ040 STEP040 | KYU07R01 | KYU07DIV | KYU07R01 | ✅ |
| KYUJ040 STEP040 | KYU07D01〜D50 | KYU07DIV | KYU07D01〜D50 | ✅ |
| KYUJ040 STEP040 | KYU07SYS | KYU07DIV | KYU07SYS | ✅ |
| KYUJ040 STEP040 | KYU07W99 | KYU07DIV | KYU07W99 | ✅ |
| KYUJ050 STEP050 | KYU08R01 | KYU08PRI | KYU08R01 | ✅ |
| KYUJ050 STEP050 | KYU08W01 | KYU08PRI | KYU08W01 | ✅ |
| KYUJ050 STEP050 | KYU08W02 | KYU08PRI | KYU08W02 | ✅ |
| KYUJ060 STEP060 | KYU09M01 | KYU09MRG | KYU09M01 | ✅ |
| KYUJ060 STEP060 | KYU09M02 | KYU09MRG | KYU09M02 | ✅ |
| KYUJ060 STEP060 | KYU09M99 | KYU09MRG | KYU09M99 | ✅ |
| KYUJ060 STEP060 | KYU09W01 | KYU09MRG | KYU09W01 | ✅ |
| KYUJ060 STEP060 | KYU09W02 | KYU09MRG | KYU09W02 | ✅ |
全29 DD名がJCLとASSIGNで一致。前回修正済み。
---
## 2. Sort-key 条件整合性
### 判定: ✅ 合格
| プログラム | JCL SORT条件 | 設計書記載 | 一致 |
|-----------|-------------|-----------|:---:|
| KYU03AGG | SORT FIELDS=(1,8,CH,A) | 社員番号(1-8桁)昇順 | ✅ |
| KYU07DIV | SORT FIELDS=(50,2,CH,A) | 部署コード(50-51桁)昇順 | ✅ |
| KYU08PRI | SORT FIELDS=(1,8,CH,A) | 社員番号(1-8桁)昇順 | ✅ |
| KYU09MRG | MERGE ON ASCENDING KEY EMP-ID | 社員番号昇順(MERGE文内部) | ✅ |
JCL SORTステップ(STEP020S/STEP040S/STEP050S)とプログラム前提条件の一致を確認。
---
## 3. COPY-book 整合性
### 判定: ⚠️ 条件付き合格(軽微な問題1件)
#### 3.1 レコード長検算
| COPY書式 | 用途 | 計算長 | 設計書記載 | 一致 |
|---------|------|:-----:|:---------:|:---:|
| KYU01REC | EMP-RECORD (W01) | 80B | 80B | ✅ |
| KYU02REC | ABSENCE-AGGREGATE (W01) | 80B | 80B | ✅ |
| KYU03REC | SALARY-DETAIL (W03) | 240B | 240B | ✅ |
| KYU04REC | SALARY-NET (W01/D01〜50/M01/M02) | 200B | 200B | ✅ |
| KYU05REC | PAYSLIP (W01) | 200B | 200B | ✅ |
| KYU06REC | PAYMENT-DATA (W01) | 200B | 200B | ✅ |
| KYU99REC | ERROR-LOG (W02/W03/W04/W99) | 200B(VB) | 200B | ✅ |
#### 3.2 ファイル連携レイアウト一致
| 出力元 | 出力COPY | 入力先 | 入力COPY | 一致 |
|--------|---------|--------|---------|:---:|
| KYU01CVT(W01) | KYU01REC | KYU02REG(R02) | KYU01REC | ✅ |
| KYU03AGG(W01) | KYU02REC | KYU04CAL(R02) | KYU02REC | ✅ |
| KYU04CAL(W03) | KYU03REC | KYU05DED(R01) | KYU03REC | ✅ |
| KYU05DED(W01) | KYU04REC | KYU06UPD(R02) / KYU07DIV(R01) / KYU08PRI(R01) / KYU09MRG(M01) | KYU04REC | ✅ |
| KYU08PRI(W01) | KYU05REC | —(印刷出力) | — | ✅ |
| KYU09MRG(W01) | KYU06REC | —(銀行データ出力) | — | ✅ |
#### 3.3 軽微な問題
| # | 内容 | 対象 | 対処 |
|---|------|------|------|
| 1 | KYU02REC.cpy 7行目: `03`の前に余分なスペース(インデント不整合) | cpy/KYU02REC.cpy:7 | 後日修正推奨(コンパイル・動作に影響なし) |
---
## 4. CALL/プログラム間インターフェース
### 判定: ⚠️ 条件付き合格(設計上の不整合1件)
#### 4.1 CALL先一覧
| CALL元 | CALL先 | 設計書記載 | コード存在 | 一致 |
|--------|--------|:---------:|:---------:|:---:|
| KYU01CVT | SUB02MSG | ✅ | ✅ | ✅ |
| KYU01CVT | SUB03END | ✅ | ✅ | ✅ |
| KYU01CVT | SUB04CHK | ✅ | ✅ | ✅ |
| KYU02REG | SUB02MSG | ✅ | ✅ | ✅ |
| KYU02REG | SUB03END | ✅ | ✅ | ✅ |
| KYU03AGG | SUB02MSG | ✅ | ✅ | ✅ |
| KYU03AGG | SUB03END | ✅ | ✅ | ✅ |
| KYU04CAL | SUB01DAT | ✅ | ✅ | ✅ |
| KYU04CAL | SUB02MSG | ✅ | ✅ | ✅ |
| KYU04CAL | SUB03END | ✅ | ✅ | ✅ |
| KYU04CAL | SUB05TIM | ✅ | ✅ | ✅ |
| KYU05DED | SUB02MSG | ✅ | ✅ | ✅ |
| KYU05DED | SUB03END | ✅ | ✅ | ✅ |
| KYU06UPD | SUB02MSG | ✅ | ✅ | ✅ |
| KYU06UPD | SUB03END | ✅ | ✅ | ✅ |
| KYU07DIV | SUB02MSG | ✅ | ✅ | ✅ |
| KYU07DIV | SUB03END | ✅ | ✅ | ✅ |
| KYU08PRI | SUB01DAT | ✅ | ✅ | ✅ |
| KYU08PRI | SUB02MSG | ✅ | ✅ | ✅ |
| KYU08PRI | SUB03END | ✅ | ✅ | ✅ |
| KYU09MRG | SUB01DAT | ✅ | ✅ | ✅ |
| KYU09MRG | SUB02MSG | ✅ | ✅ | ✅ |
| KYU09MRG | SUB03END | ✅ | ✅ | ✅ |
#### 4.2 設計上の不整合
| # | 内容 | プログラム | 設計書 | コード | 対処 |
|---|------|-----------|-------|-------|------|
| 1 | SUB01DAT呼出しの記載有無 | KYU01CVT | 1-4にSUB01DAT呼出し記載あり(運用日付取得) | SUB01DAT呼出しなし(CSV変換に運用日不要) | 設計書の方がテンプレートから過剰に記載。SUB01DATの呼出しは実際不要。**設計書を削除修正すべき** |
---
## 5. サインオフ
上記レビューの結果、全プログラムの設計とコードの整合性は確認されました。
軽微な問題2件(COPYインデント・設計書過剰記載)は後日修正対象とし、本設計レビューはサインオフします。
| 判定 | 日付 | レビュー担当 |
|:---:|:---:|:-----------:|
| ✅ サインオフ | 2026-07-09 | AI (自動レビュー) |
---
+156
View File
@@ -0,0 +1,156 @@
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 給与計算システム |
| 2 | プログラムID | KYU01CVT |
| 3 | プログラム名 | 社員マスタCSV→FB変換処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | CSV→FB変換(改行あり) |
| 6 | 機能概要 | CSV形式の社員マスタを読み込み、固定長80Bに変換する。 |
| 7 | | 引用符内改行をINSPECT CONVERTINGで処理。 |
| 8 | | 項目チェックはSUB04CHKで実施。 |
| 9 | | 正常:EMP-RECORDW01)出力/異常:ERROR-LOGW02)出力 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | EMP-MASTER.CSV | ソート不要。CSV形式(カンマ区切り、引用符内改行あり)。コメント行(先頭#)読み飛ばし |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | EMP-MASTER.CSV | R01 | KYU01R01 | I | 自前(500B) | V | | 500 | PS | CSV形式 |
| 2 | EMP-RECORD | W01 | KYU01W01 | O | KYU01REC | FB | | 80 | PS | |
| 3 | ERROR-LOG | W02 | KYU01W02 | O | KYU99REC | VB | | 200 | PS | |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | EMP-MASTER.CSV | なし | なし |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
| 3 | 項目チェックSUB | SUB04CHK | ZANCHKAC |
---
## 処理詳細
```
1.初期処理(1000ITTSOR
1-1.開始メッセージ出力
【メッセージ編集】
メッセージ番号:1(開始メッセージ)
1-2.コンパイル日時出力
【メッセージ編集】
メッセージ番号:33(コンパイル日時)
PARM1:コンパイル日時
PARM2'COMPILED'
1-3.ワークエリアの初期化
INITIALIZE WRKARA
MOVE SPACE TO WRK-CSV-ACCUM
MOVE ZERO TO WRK-ACCUM-LEN
1-4.使用ファイルのオープン
OPEN INPUT R01INNFIL
OPEN OUTPUT W01OUTFIL W02OUTFIL
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
2-1.コメント行(先頭#)はスキップ(2000MAJSOR内インライン)
WRK-CSV-LINE(1:1) = '#' の場合、次行READしてEXIT SECTION
2-2.引用符内改行処理(2000MAJSOR内インライン)
2-2-1.WRK-IN-QUOTEフラグを追跡し、引用符内の改行を連結用ワーク領域(WRK-CSV-ACCUM)に蓄積
2-2-2.引用符内奇数個の"で状態反転(WRK-QUOTE-ACTIVE / WRK-QUOTE-INACTIVE
2-2-3.完全な1レコード分が揃ったら、INSPECT CONVERTING X"0D"/X"0A" BY SPACEで改行→スペース変換
2-3.CSV分解(2100CSVUNSOR
UNSTRING DELIMITED BY ',' INTO 各フィールド COUNT IN WS-FIELD-COUNT
項目数≠9の場合はERROR-LOG出力
2-4.社員番号空チェック
INSPECT WRK-CSV-EMP-ID TALLYING FOR LEADING SPACES
全桁SPACEの場合はERROR-LOG出力
2-5.項目チェック(SUB04CHK
2-5-1.社員番号(EMPID)数値妥当性チェック
2-5-2.時給(NUM)数値妥当性チェック
エラー時はERROR-LOG出力
2-6.社員名英字チェック(IF NOT ALPHABETIC、参考判定)
2-7.W01OUTREC編集
MOVE CSV各フィールド→W01OUTREC該当項目
2-8.W01出力(WRITE W01OUTREC
CUN-W01OUT加算
2-9.R01を読み込む(1100R01INNSOR)(2件目以降)
3.終了処理(3000STPSOR
3-1.入出力ファイルのクローズ
3-2.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1'KYU01R01'
PARM2CUN-R01INN
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU01W01'
PARM2CUN-W01OUT
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU01W02'
PARM2CUN-W02OUT
3-3.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
### DECLARATIVES(ファイルエラー処理)
```
DECLARATIVES.
USE AFTER ERROR PROCEDURE ON R01INNFIL.
PERFORM 9999ABDSOR.
USE AFTER ERROR PROCEDURE ON W01OUTFIL.
PERFORM 9999ABDSOR.
USE AFTER ERROR PROCEDURE ON W02OUTFIL.
PERFORM 9999ABDSOR.
END DECLARATIVES.
```
---
## 出力レコード定義
### 出力ファイル1W01/EMP-RECORD
COPY書式:KYU01REC80B FB
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | EMP-ID | CSV同項目を設定 | |
| 2 | EMP-NAME | CSV同項目を設定 | |
| 3 | DEPT-CODE | CSV同項目を設定 | |
| 4 | REGION-CODE | CSV同項目を設定 | |
| 5 | CATEGORY-CODE | CSV同項目を設定 | |
| 6 | BASE-SALARY | CSV同項目を設定 | |
| 7 | HOURLY-RATE | CSV同項目を設定 | |
| 8 | DEPENDENT-COUNT | CSV同項目を設定 | |
| 9 | STATUS | CSV同項目を設定 | |
| 10 | FILLER | SPACE固定 | |
### 出力ファイル2W02/ERROR-LOG
COPY書式:KYU99RECVB 200B
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | ERR-CATEGORY | 'CSV-ERR'または'EMPID-ERR'で固定 | エラー区分 |
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容(CSV行の先頭80B等) |
+146
View File
@@ -0,0 +1,146 @@
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 給与計算システム |
| 2 | プログラムID | KYU02REG |
| 3 | プログラム名 | 社員マスタDB2登録処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | DB更新 |
| 6 | 機能概要 | EMP-RECORD80B固定長)を読み込み、DB2 EMP-MASTERにINSERTする。 |
| 7 | | SQLCODE=-803(重複)の場合はUPDATEに切替える(UPSERT)。 |
| 8 | | エラー時はERROR-LOGに出力する。 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | EMP-RECORD | ソート不要。KYU01CVT出力の80B固定長ファイル。社員番号昇順である必要はない |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | EMP-RECORD | R02 | KYU02R02 | I | KYU01REC | FB | | 80 | PS | |
| 2 | ERROR-LOG | W03 | KYU02W03 | O | KYU99REC | VB | | 200 | PS | |
| 3 | EMP-MASTER(DB2) | — | — | — | — | — | — | — | DB2 | EXEC SQL INSERT/UPDATE |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | EMP-RECORD | なし | なし |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
---
## 処理詳細
```
1.初期処理(1000ITTSOR
1-1.開始メッセージ出力
【メッセージ編集】
メッセージ番号:1(開始メッセージ)
1-2.コンパイル日時出力
【メッセージ編集】
メッセージ番号:33(コンパイル日時)
PARM1:コンパイル日時
PARM2'COMPILED'
1-3.ワークエリアの初期化
INITIALIZE WRKARA
1-4.DB接続
EXEC SQL CONNECT TO 'data/SALARY.db' END-EXEC
1-5.使用ファイルのオープン
OPEN INPUT R02INNFIL
OPEN OUTPUT W03OUTFIL
1-6.R02を読み込む。(1100R02INNSOR)(1回目)
2.主処理(2000MAJSOR)(R02を全て読み終えるまで下記を繰り返す)
2-1.DB2ホスト変数にMOVE
MOVE R02EMP-ID〜R02STATUS → DBV-EMP-ID〜DBV-STATUS
2-2.EXEC SQL INSERT試行(2000MAJSOR内インライン)
EXEC SQL INSERT INTO EMP-MASTER
(EMP-ID, EMP-NAME, DEPT-CODE, REGION-CODE,
CATEGORY-CODE, BASE-SALARY, HOURLY-RATE,
DEPENDENT-COUNT, STATUS, UPDATED-AT)
VALUES
(:DBV-EMP-ID, :DBV-EMP-NAME, :DBV-DEPT-CODE,
:DBV-REGION-CODE, :DBV-CATEGORY-CODE,
:DBV-BASE-SALARY, :DBV-HOURLY-RATE,
:DBV-DEPENDENT-COUNT, :DBV-STATUS,
CURRENT TIMESTAMP)
END-EXEC
2-3.SQLCODE判定
2-3-1.SQLCODE = 0 → INSERT成功
CUN-DB-INS加算、次行READ
2-3-2.SQLCODE = -803 → 重複
EXEC SQL UPDATE EMP-MASTER SET ... WHERE EMP-ID = :DBV-EMP-ID
SQLCODE = 0 → CUN-DB-UPD加算
SQLCODE ≠ 0 → ERROR-LOG出力(2200ERROUTSOR
次行READ
2-3-3.その他SQLエラー
ERROR-LOG出力(2200ERROUTSOR
次行READ
3.終了処理(3000STPSOR
3-1.入出力ファイルのクローズ
3-2.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1'KYU02R02'
PARM2CUN-R02INN
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'DB-INSERT'
PARM2CUN-DB-INS
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'DB-UPDATE'
PARM2CUN-DB-UPD
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU02W03'
PARM2CUN-W03OUT
3-3.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル1W03/ERROR-LOG
COPY書式:KYU99RECVB 200B
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | ERR-CATEGORY | 'DB-ERR'で固定 | エラー区分 |
| 2 | ERR-DETAIL | DBV-EMP-IDを設定 | エラー発生社員番号 |
### DB2出力(EMP-MASTER
| No | カラム名 | 設定元 | 備考 |
|----|---------|--------|------|
| 1 | EMP-ID | DBV-EMP-ID | ホスト変数 |
| 2 | EMP-NAME | DBV-EMP-NAME | ホスト変数 |
| 3 | DEPT-CODE | DBV-DEPT-CODE | ホスト変数 |
| 4 | REGION-CODE | DBV-REGION-CODE | ホスト変数 |
| 5 | CATEGORY-CODE | DBV-CATEGORY-CODE | ホスト変数 |
| 6 | BASE-SALARY | DBV-BASE-SALARY | ホスト変数 |
| 7 | HOURLY-RATE | DBV-HOURLY-RATE | ホスト変数 |
| 8 | DEPENDENT-COUNT | DBV-DEPENDENT-COUNT | ホスト変数 |
| 9 | STATUS | DBV-STATUS | ホスト変数 |
| 10 | UPDATED-AT | CURRENT TIMESTAMP | DB2関数 |
+139
View File
@@ -0,0 +1,139 @@
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 給与計算システム |
| 2 | プログラムID | KYU03AGG |
| 3 | プログラム名 | 欠勤集約処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | キーブレイク(集約) |
| 6 | 機能概要 | JCL SORT済み欠勤データ(社員番号昇順)を読み込み、同一社員内の欠勤時間・回数を集約する。 |
| 7 | | 社員単位に1件の集約レコードをABSENCE-AGGREGATEに出力する。 |
| 8 | | エラー時はERROR-LOGに出力する。 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | KYU02S01(ABSENCE-SUMMARY) | JCL SORTにより社員番号(1-8桁)昇順に整列済みであること |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | KYU02S01 | R01 | KYU03R01 | I | 自前(80B) | FB | | 80 | PS | JCL SORT済み |
| 2 | ABSENCE-AGGREGATE | W01 | KYU03W01 | O | KYU02REC | FB | | 80 | PS | 社員単位1件 |
| 3 | ERROR-LOG | W02 | KYU03W02 | O | KYU99REC | VB | | 200 | PS | |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | KYU02S01 | 社員番号(1-8桁CH昇順) | 社員番号による集約キーブレイク |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
---
## 処理詳細
```
1.初期処理(1000ITTSOR
1-1.開始メッセージ出力
【メッセージ編集】
メッセージ番号:1(開始メッセージ)
1-2.コンパイル日時出力
【メッセージ編集】
メッセージ番号:33(コンパイル日時)
PARM1:コンパイル日時
PARM2'COMPILED'
1-3.ワークエリアの初期化
INITIALIZE WRKARA
1-4.使用ファイルのオープン
OPEN INPUT R01INNFIL
OPEN OUTPUT W01OUTFIL W02OUTFIL
1-5.R01を読み込む。(1100R01INNSOR)(1回目)
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
2-1.キーブレイク判定
2-1-1.前社員キー設定済み(WRK-PREV-Y)の場合
2-1-1-1.WRK-PREV-EMP-ID = WRK-EMP-ID(同一社員)
ADD 1 TO WRK-ABSENT-COUNT
ADD WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS
2-1-1-2.異なる社員
前社員の集約レコード出力(2100WRITOUTSOR
WRK-PREV-EMP-ID ← WRK-EMP-ID
INITIALIZE WRK-TOTAL-HOURS WRK-ABSENT-COUNT
REPLACING NUMERIC DATA BY ZERO
MOVE 1 TO WRK-ABSENT-COUNT
MOVE WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS
2-1-2.初回(WRK-PREV-Y未設定)
WRK-PREV-EMP-ID ← WRK-EMP-ID
WRK-PREV-Y ← TRUE
MOVE 1 TO WRK-ABSENT-COUNT
MOVE WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS
2-2.R01を読み込む(1100R01INNSOR)(2件目以降)
3.終了処理(3000STPSOR
3-1.最終社員の集約レコード出力
IF WRK-PREV-Y → PERFORM 2100WRITOUTSOR
3-2.入出力ファイルのクローズ
3-3.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1'KYU03R01'
PARM2CUN-R01INN
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU03W01'
PARM2CUN-W01OUT
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU03W02'
PARM2CUN-W02OUT
3-4.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
補足:集約ロジック詳細
WRK-PREV-EMP-ID:前社員キー保持変数
WRK-TOTAL-HOURS:同一社員内の欠勤時間合計
WRK-ABSENT-COUNT:同一社員内の欠勤回数
初回設定後、同一社員の間は加算を継続し、異社員出現時に前社員の集約結果を出力する。
全READ終了後、最終社員の出力を3000STPSORで実施する。
```
---
## 出力レコード定義
### 出力ファイル1W01/ABSENCE-AGGREGATE
COPY書式:KYU02REC80B FB
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | EMP-ID | WRK-PREV-EMP-ID | 社員番号 |
| 2 | YEAR-MONTH | WRK-YEAR-MONTH | 対象年月(YYYYMM |
| 3 | TOTAL-HOURS | WRK-TOTAL-HOURS | 欠勤時間合計 |
| 4 | ABSENT-COUNT | WRK-ABSENT-COUNT | 欠勤回数 |
| 5 | FILLER | SPACE固定 | |
### 出力ファイル2W02/ERROR-LOG
COPY書式:KYU99RECVB 200B
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | ERR-CATEGORY | 区分固定値 | エラー区分 |
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |
+176
View File
@@ -0,0 +1,176 @@
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 給与計算システム |
| 2 | プログラムID | KYU04CAL |
| 3 | プログラム名 | 給与計算処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | 1:N+キーブレイク(同キー) |
| 6 | 機能概要 | ABSENCE-AGGREGATEを読込み、DB2 EMP-MASTER・OVT-MONTHLYを参照し給与計算を実行する。 |
| 7 | | 欠勤控除額計算→時間外手当計算→支給総額計算→SALARY-DETAIL出力 |
| 8 | | 勤怠区分×手当種別の複合分岐はEVALUATE ALSOで実装 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | ABSENCE-AGGREGATE(KYU04R02) | ソート不要。社員番号単位の1件(KYU03AGG出力) |
| 2 | PAY-PARAM(KYU04R03) | CSV形式。基本給パラメータを保持 |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | ABSENCE-AGGREGATE | R02 | KYU04R02 | I | KYU02REC | F | | 80 | PS | KYU03AGG出力 |
| 2 | PAY-PARAM | R03 | KYU04R03 | I | 自前(80B) | F | | 80 | PS | CSV形式 |
| 3 | SALARY-DETAIL | W03 | KYU04W03 | O | KYU03REC | FB | | 240 | PS | |
| 4 | ERROR-LOG | W04 | KYU04W04 | O | KYU99REC | VB | | 200 | PS | |
| 5 | EMP-MASTER (DB2) | — | — | I | — | — | — | — | DB2 | EXEC SQL SELECT |
| 6 | OVT-MONTHLY (DB2) | — | — | I | — | — | — | — | DB2 | EXEC SQL SELECT SUM |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | ABSENCE-AGGREGATE | なし | 社員番号(1:Nマッチングキー) |
### 使用モジュール一覧
| 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.運用日付取得SUB(SUB01DAT)により運用日を取得する。
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
【メッセージ編集】
メッセージ番号:5(サブエラー)
PARM1'SUB01DAT'
PARM2:復帰コード
【ABEND処理SUB】
ABENDコード:999
1-5.PAY-PARAM(R03)をOPEN READし、基本給パラメータを取得する。
UNSTRINGでカンマ区切りを分解し、対象年月と基本給を抽出する。
1-6.使用ファイルのOPEN
R02INNFIL / W03OUTFIL / W04OUTFIL をOPEN
1-7.DB接続(EXEC SQL CONNECT TO 'data/SALARY.db'
1-8.R02を読み込む。(1100R02INNSOR)(1回目)
2.主処理(2000MAJSOR)(R02を全て読み終えるまで下記を繰り返す)
2-1.ホスト変数セット
R02のEMP-IDをDBV-EMP-IDにMOVE
2-2.DB2 EMP-MASTER参照(EXEC SQL SELECT
【SQL】
SELECT EMP-NAME, DEPT-CODE, REGION-CODE,
CATEGORY-CODE, BASE-SALARY, HOURLY-RATE,
DEPENDENT-COUNT, STATUS
※REGION-CODE/CATEGORY-CODEはFYI用に取得するが現状未使用
FROM EMP-MASTER
WHERE EMP-ID = :DBV-EMP-ID
SQLコード≠0の場合、エラー出力(2200ERROUTSOR)し次件へ。
2-3.DB2 OVT-MONTHLY参照(EXEC SQL SELECT SUM
【SQL】
SELECT SUM(OVT-HOURS)
FROM OVT-MONTHLY
WHERE EMP-ID = :DBV-EMP-ID
AND YEAR-MONTH = :WRK-YEAR-MONTH
SQLコード≠0の場合、残業時間をZEROとする。
2-4.給与計算(2100CALCSOR
2-4-1.欠勤控除額計算
【COMPUTE】
WRK-ABSENT-DEDUCT ROUNDED =
DBV-HOURLY-RATE × WRK-ABSENT-HOURS
ON SIZE ERROR → ZERO設定
2-4-2.時間外手当計算
【COMPUTE】
WRK-OVT-AMOUNT ROUNDED =
DBV-HOURLY-RATE × DBV-OVT-HOURS × CNS-OVERTIME-RATE(1.25)
ON SIZE ERROR → ZERO設定
2-4-3.EVALUATE ALSO(勤怠区分×手当種別の複合分岐)
【EVALUATE ALSO】
WRK-ALLOWANCE-TYPE = 'OVT' AND WRK-ATTEND-TYPE = 'W'
→ WRK-AMOUNT = HOURLY-RATE × OVT-HOURS × 1.25
WRK-ALLOWANCE-TYPE = 'OVT' AND WRK-ATTEND-TYPE = 'H'
→ WRK-AMOUNT = HOURLY-RATE × OVT-HOURS × 1.35
WRK-ALLOWANCE-TYPE = 'LATE' AND WRK-ATTEND-TYPE = ANY
→ WRK-AMOUNT = HOURLY-RATE × OVT-HOURS × 0.50
WHEN OTHER → WRK-AMOUNT = ZERO
2-4-4.支給総額計算
【COMPUTE】
WRK-GROSS-PAYMENT =
DBV-BASE-SALARY + WRK-OVT-AMOUNT - WRK-ABSENT-DEDUCT
2-5.SALARY-DETAIL出力(2110WRITOUTSOR
各項目をW03OUTRECKYU03REC)にMOVEしWRITE
W03OUT件数カウンタ(CUN-W03OUT)を+1
2-6.R02を読み込む。(1100R02INNSOR)(2件目以降)
3.終了処理(3000STPSOR
3-1.入出力ファイルのクローズ
3-2.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1'KYU04R02'
PARM2CUN-R02INN
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU04W03'
PARM2CUN-W03OUT
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU04W04'
PARM2CUN-W04OUT
3-3.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル1W03/SALARY-DETAIL
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | EMP-ID | R02EMP-ID | |
| 2 | EMP-NAME | DB2 EMP-MASTER EMP-NAME | |
| 3 | DEPT-CODE | DB2 EMP-MASTER DEPT-CODE | |
| 4 | BASE-SALARY | DB2 EMP-MASTER BASE-SALARY | |
| 5 | OVT-AMOUNT | 時間外手当計算結果 | |
| 6 | HOLIDAY-AMOUNT | 0で固定 | |
| 7 | ABSENT-DEDUCT | 欠勤控除額計算結果 | |
| 8 | GROSS-PAYMENT | 支給総額計算結果 | |
| 9 | OVT-HOURS | DB2 OVT-MONTHLY SUM結果 | |
| 10 | ABSENT-HOURS | R02TOTAL-HOURS | |
| 11 | ATTEND-TYPE | WRK-ATTEND-TYPE | |
| 12 | ALLOWANCE-TYPE | WRK-ALLOWANCE-TYPE | |
| 13 | FILLER | — | 131B |
### 出力ファイル2W04/ERROR-LOG
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | ERR-CATEGORY | 'DB-ERR'で固定 | |
| 2 | ERR-DETAIL | R02EMP-ID | エラー発生社員番号 |
+167
View File
@@ -0,0 +1,167 @@
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 給与計算システム |
| 2 | プログラムID | KYU05DED |
| 3 | プログラム名 | 控除計算処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | SELECT条件 |
| 6 | 機能概要 | SALARY-DETAILを入力に、源泉所得税・社会保険料・住民税を計算しSALARY-NETを出力する。 |
| 7 | | TAX-TABLEDB2 SELECT ... BETWEEN)で税率検索、INSURANCE-TABLESEARCH ALL)で保険料率検索 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | SALARY-DETAIL(KYU05R01) | ソート不要。KYU04CALの出力を入力 |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | SALARY-DETAIL | R01 | KYU05R01 | I | KYU03REC | FB | | 240 | PS | KYU04CAL出力 |
| 2 | SALARY-NET | W01 | KYU05W01 | O | KYU04REC | FB | | 200 | PS | |
| 3 | ERROR-LOG | W02 | KYU05W02 | O | KYU99REC | VB | | 200 | PS | |
| 4 | TAX-TABLE (DB2) | — | — | I | — | — | — | — | DB2 | EXEC SQL SELECT ... BETWEEN |
| 5 | INSURANCE-TABLE (DB2) | — | — | I | — | — | — | — | DB2 | LOAD→WORKING-STORAGE→SEARCH ALL |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | 該当なし | なし | なし |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
| 2 | 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/SALARY.db'
1-5.INSURANCE-TABLE全件LOAD1100INSLOADSOR
【SQL】(DECLARE INS-CURSOR
SELECT INS-INCOME-FROM, INS-INCOME-TO,
INS-HEALTH-RATE, INS-PENSION-RATE
FROM INSURANCE-TABLE
ORDER BY INS-INCOME-FROM
OPEN CURSOR → FETCH ループ → WORKING-STORAGE(INSURANCE-WORK)に格納
IW-COUNT で件数管理(最大200件)
→ CLOSE CURSOR
1-6.使用ファイルのOPEN
R01INNFIL / W01OUTFIL / W02OUTFIL をOPEN
1-7.R01を読み込む。(1200R01INNSOR)(1回目)
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
2-1.課税所得計算
【IF判定】
WRK-GROSS-PAYMENT < CNS-TAX-BASIC-DEDUCTION(50000)
→ 課税所得 = 0
上記以外
【COMPUTE】
WRK-TAXABLE-INCOME =
WRK-GROSS-PAYMENT - CNS-TAX-BASIC-DEDUCTION
2-2.DB2 TAX-TABLE税率取得(EXEC SQL SELECT ... BETWEEN
【SQL】
SELECT TAX-RATE, DEDUCTION
FROM TAX-TABLE
WHERE :WRK-TAXABLE-INCOME BETWEEN TAX-FROM AND TAX-TO
SQLコード=0の場合
【COMPUTE ROUNDED】
WRK-INCOME-TAX =
WRK-TAXABLE-INCOME × DBV-TAX-RATE - DBV-TAX-DEDUCTION
計算結果<0 → 0に補正
SQLコード≠0の場合
WRK-INCOME-TAX = 0
2-3.社会保険料計算(SEARCH ALL on INSURANCE-WORK
【SEARCH ALL IW-ENTRY】
条件:IW-INCOME-FROM(IW-IDX) ≦ WRK-TAXABLE-INCOME
AND WRK-TAXABLE-INCOME ≦ IW-INCOME-TO(IW-IDX)
AT END → WRK-INSURANCE = 0
【COMPUTE ROUNDED】
WRK-INSURANCE = WRK-TAXABLE-INCOME ×
(IW-HEALTH-RATE + IW-PENSION-RATE)
2-4.住民税計算
【COMPUTE ROUNDED】
WRK-RESIDENT-TAX =
WRK-TAXABLE-INCOME × CNS-RESIDENT-TAX-RATE(0.10)
2-5.差引支給額計算
【COMPUTE】
WRK-NET-PAYMENT =
WRK-GROSS-PAYMENT - WRK-INCOME-TAX
- WRK-INSURANCE - WRK-RESIDENT-TAX
2-6.SALARY-NET出力(2100WRITOUTSOR
各項目をW01OUTRECKYU04REC)にMOVEしWRITE
W01OUT件数カウンタ(CUN-W01OUT)を+1
2-7.R01を読み込む。(1200R01INNSOR)(2件目以降)
3.終了処理(3000STPSOR
3-1.入出力ファイルのクローズ
3-2.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1'KYU05R01'
PARM2CUN-R01INN
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU05W01'
PARM2CUN-W01OUT
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU05W02'
PARM2CUN-W02OUT
3-3.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル1W01/SALARY-NET
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | EMP-ID | R01EMP-ID | |
| 2 | REC-TYPE | 'S'で固定 | 給与= S / 賞与= B |
| 3 | EMP-NAME | R01EMP-NAME | |
| 4 | DEPT-CODE | R01DEPT-CODE | |
| 5 | REGION-CODE | — | 未設定(FILLER |
| 6 | CATEGORY-CODE | — | 未設定(FILLER |
| 7 | GROSS-PAYMENT | R01BASE-SALARY | |
| 8 | INCOME-TAX | WRK-INCOME-TAX | 所得税計算結果 |
| 9 | INSURANCE | WRK-INSURANCE | 社会保険料計算結果 |
| 10 | RESIDENT-TAX | WRK-RESIDENT-TAX | 住民税計算結果 |
| 11 | NET-PAYMENT | WRK-NET-PAYMENT | 差引支給額計算結果 |
| 12 | TAXABLE-INCOME | WRK-TAXABLE-INCOME | 課税所得計算結果 |
| 13 | PAY-AMOUNT | WRK-NET-PAYMENT | 汎用支給額 |
| 14 | FILLER | — | 81B |
### 出力ファイル2W02/ERROR-LOG
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | ERR-CATEGORY | 未設定 | 該当ケースなし |
| 2 | ERR-DETAIL | エラー内容 | DB接続エラー時のみ |
+147
View File
@@ -0,0 +1,147 @@
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 給与計算システム |
| 2 | プログラムID | KYU06UPD |
| 3 | プログラム名 | 給与計算結果DB2更新処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | DB更新 |
| 6 | 機能概要 | SALARY-NETをDB2 SALARY-RESULTSに登録する。 |
| 7 | | INSERT実行→SQLCODE=-803(重複)の場合UPDATEに切替(UPSERT |
| 8 | | SQLコード≠0かつ≠-803の場合ERROR-LOGに出力 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | SALARY-NET(KYU06R02) | ソート不要。KYU05DEDの出力を入力 |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | SALARY-NET | R02 | KYU06R02 | I | KYU04REC | FB | | 200 | PS | KYU05DED出力 |
| 2 | ERROR-LOG | W03 | KYU06W03 | O | KYU99REC | VB | | 200 | PS | |
| 3 | SALARY-RESULTS (DB2) | — | — | O | — | — | — | — | DB2 | EXEC SQL INSERT / UPDATE |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | 該当なし | なし | なし |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
---
## 処理詳細
```
1.初期処理(1000ITTSOR
1-1.開始メッセージ出力
【メッセージ編集】
メッセージ番号:1(開始メッセージ)
1-2.コンパイル日時出力
【メッセージ編集】
メッセージ番号:33(コンパイル日時)
PARM1:コンパイル日時
PARM2'COMPILED'
1-3.ワークエリアの初期化
1-4.PARMYEAR-MONTH)取得
ACCEPT FROM COMMAND-LINE
未指定時は'202605'をデフォルト値とする
1-5.使用ファイルのOPEN
R02INNFIL / W03OUTFIL をOPEN
1-6.DB接続(EXEC SQL CONNECT TO 'data/SALARY.db'
1-7.R02を読み込む。(1100R02INNSOR)(1回目)
2.主処理(2000MAJSOR)(R02を全て読み終えるまで下記を繰り返す)
2-1.ホスト変数セット
R02EMP-ID → DBV-EMP-ID
CNS-YEAR-MONTH-PARM → DBV-YEAR-MONTH
R02GROSS-PAYMENT → DBV-GROSS-PAYMENT
R02INCOME-TAX → DBV-INCOME-TAX
R02INSURANCE → DBV-INSURANCE
R02RESIDENT-TAX → DBV-RESIDENT-TAX
R02NET-PAYMENT → DBV-NET-PAYMENT
2-2.EXEC SQL INSERT INTO SALARY-RESULTS
【SQL】
INSERT INTO SALARY-RESULTS
(EMP-ID, YEAR-MONTH,
GROSS-PAYMENT, INCOME-TAX,
INSURANCE, RESIDENT-TAX,
NET-PAYMENT, UPDATED-AT)
VALUES
(:DBV-EMP-ID, :DBV-YEAR-MONTH,
:DBV-GROSS-PAYMENT, :DBV-INCOME-TAX,
:DBV-INSURANCE, :DBV-RESIDENT-TAX,
:DBV-NET-PAYMENT, CURRENT TIMESTAMP)
2-3.SQLCODE判定
2-3-1.SQLCODE = 0(正常登録)
CUN-DB-INSカウンタを+1
→ R02次件読込(1100R02INNSOR
2-3-2.SQLCODE = -803(重複)
【EXEC SQL UPDATE】
UPDATE SALARY-RESULTS SET
GROSS-PAYMENT = :DBV-GROSS-PAYMENT,
INCOME-TAX = :DBV-INCOME-TAX,
INSURANCE = :DBV-INSURANCE,
RESIDENT-TAX = :DBV-RESIDENT-TAX,
NET-PAYMENT = :DBV-NET-PAYMENT,
UPDATED-AT = CURRENT TIMESTAMP
WHERE EMP-ID = :DBV-EMP-ID
AND YEAR-MONTH = :DBV-YEAR-MONTH
【SQLCODE判定】
UPDATE SQLCODE = 0 → CUN-DB-UPDカウンタを+1
UPDATE SQLCODE ≠ 0 → エラー出力(2100ERROUTSOR
→ R02次件読込(1100R02INNSOR
2-3-3.SQLCODE = その他(DBエラー)
エラー出力(2100ERROUTSOR
→ R02次件読込(1100R02INNSOR
2-4.R02を読み込む。(1100R02INNSOR)(2件目以降)
3.終了処理(3000STPSOR
3-1.入出力ファイルのクローズ
3-2.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1'KYU06R02'
PARM2CUN-R02INN
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'DB-INSERT'
PARM2CUN-DB-INS
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'DB-UPDATE'
PARM2CUN-DB-UPD
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU06W03'
PARM2CUN-W03OUT
3-3.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル1W03/ERROR-LOG
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | ERR-CATEGORY | 'DB-ERR'で固定 | |
| 2 | ERR-DETAIL | DBV-EMP-ID | エラー発生社員番号 |
+193
View File
@@ -0,0 +1,193 @@
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 給与計算システム |
| 2 | プログラムID | KYU07DIV |
| 3 | プログラム名 | 部門別分割出力処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | 50分割 |
| 6 | 機能概要 | JCL SORT済みSALARY-NETを部署コードに応じて50ファイルに分割出力する。 |
| 7 | | 常に1ファイルのみOPEN状態を保ち、部署コード切替時にファイルを開閉する。 |
| 8 | | SYSIN制御カードにより出力対象部署の絞り込みが可能(省略時は全50部署)。 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | KYU04S01(SALARY-NET) | JCL SORTで部署コード(DEPT-CODE 50-51桁目)昇順ソート済みであること |
| 2 | SYSIN(制御カード) | 省略時は全50部署を出力対象とする |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | SALARY-NET | R01 | KYU07R01 | I | KYU04REC | F | | 200 | PS | JCL SORT済み |
| 2 | SYSIN | SYSIN | KYU07SYS | I | 自前(80B) | F | | 80 | PS | 制御カード |
| 3 | DEPT-OUT-01 | D01 | KYU07D01 | O | KYU04REC | F | | 200 | PS | |
| 4 | DEPT-OUT-02 | D02 | KYU07D02 | O | KYU04REC | F | | 200 | PS | |
| 5 | DEPT-OUT-03 | D03 | KYU07D03 | O | KYU04REC | F | | 200 | PS | |
| 6 | DEPT-OUT-04 | D04 | KYU07D04 | O | KYU04REC | F | | 200 | PS | |
| 7 | DEPT-OUT-05 | D05 | KYU07D05 | O | KYU04REC | F | | 200 | PS | |
| 8 | DEPT-OUT-06 | D06 | KYU07D06 | O | KYU04REC | F | | 200 | PS | |
| 9 | DEPT-OUT-07 | D07 | KYU07D07 | O | KYU04REC | F | | 200 | PS | |
| 10 | DEPT-OUT-08 | D08 | KYU07D08 | O | KYU04REC | F | | 200 | PS | |
| 11 | DEPT-OUT-09 | D09 | KYU07D09 | O | KYU04REC | F | | 200 | PS | |
| 12 | DEPT-OUT-10 | D10 | KYU07D10 | O | KYU04REC | F | | 200 | PS | |
| 13 | DEPT-OUT-11 | D11 | KYU07D11 | O | KYU04REC | F | | 200 | PS | |
| 14 | DEPT-OUT-12 | D12 | KYU07D12 | O | KYU04REC | F | | 200 | PS | |
| 15 | DEPT-OUT-13 | D13 | KYU07D13 | O | KYU04REC | F | | 200 | PS | |
| 16 | DEPT-OUT-14 | D14 | KYU07D14 | O | KYU04REC | F | | 200 | PS | |
| 17 | DEPT-OUT-15 | D15 | KYU07D15 | O | KYU04REC | F | | 200 | PS | |
| 18 | DEPT-OUT-16 | D16 | KYU07D16 | O | KYU04REC | F | | 200 | PS | |
| 19 | DEPT-OUT-17 | D17 | KYU07D17 | O | KYU04REC | F | | 200 | PS | |
| 20 | DEPT-OUT-18 | D18 | KYU07D18 | O | KYU04REC | F | | 200 | PS | |
| 21 | DEPT-OUT-19 | D19 | KYU07D19 | O | KYU04REC | F | | 200 | PS | |
| 22 | DEPT-OUT-20 | D20 | KYU07D20 | O | KYU04REC | F | | 200 | PS | |
| 23 | DEPT-OUT-21 | D21 | KYU07D21 | O | KYU04REC | F | | 200 | PS | |
| 24 | DEPT-OUT-22 | D22 | KYU07D22 | O | KYU04REC | F | | 200 | PS | |
| 25 | DEPT-OUT-23 | D23 | KYU07D23 | O | KYU04REC | F | | 200 | PS | |
| 26 | DEPT-OUT-24 | D24 | KYU07D24 | O | KYU04REC | F | | 200 | PS | |
| 27 | DEPT-OUT-25 | D25 | KYU07D25 | O | KYU04REC | F | | 200 | PS | |
| 28 | DEPT-OUT-26 | D26 | KYU07D26 | O | KYU04REC | F | | 200 | PS | |
| 29 | DEPT-OUT-27 | D27 | KYU07D27 | O | KYU04REC | F | | 200 | PS | |
| 30 | DEPT-OUT-28 | D28 | KYU07D28 | O | KYU04REC | F | | 200 | PS | |
| 31 | DEPT-OUT-29 | D29 | KYU07D29 | O | KYU04REC | F | | 200 | PS | |
| 32 | DEPT-OUT-30 | D30 | KYU07D30 | O | KYU04REC | F | | 200 | PS | |
| 33 | DEPT-OUT-31 | D31 | KYU07D31 | O | KYU04REC | F | | 200 | PS | |
| 34 | DEPT-OUT-32 | D32 | KYU07D32 | O | KYU04REC | F | | 200 | PS | |
| 35 | DEPT-OUT-33 | D33 | KYU07D33 | O | KYU04REC | F | | 200 | PS | |
| 36 | DEPT-OUT-34 | D34 | KYU07D34 | O | KYU04REC | F | | 200 | PS | |
| 37 | DEPT-OUT-35 | D35 | KYU07D35 | O | KYU04REC | F | | 200 | PS | |
| 38 | DEPT-OUT-36 | D36 | KYU07D36 | O | KYU04REC | F | | 200 | PS | |
| 39 | DEPT-OUT-37 | D37 | KYU07D37 | O | KYU04REC | F | | 200 | PS | |
| 40 | DEPT-OUT-38 | D38 | KYU07D38 | O | KYU04REC | F | | 200 | PS | |
| 41 | DEPT-OUT-39 | D39 | KYU07D39 | O | KYU04REC | F | | 200 | PS | |
| 42 | DEPT-OUT-40 | D40 | KYU07D40 | O | KYU04REC | F | | 200 | PS | |
| 43 | DEPT-OUT-41 | D41 | KYU07D41 | O | KYU04REC | F | | 200 | PS | |
| 44 | DEPT-OUT-42 | D42 | KYU07D42 | O | KYU04REC | F | | 200 | PS | |
| 45 | DEPT-OUT-43 | D43 | KYU07D43 | O | KYU04REC | F | | 200 | PS | |
| 46 | DEPT-OUT-44 | D44 | KYU07D44 | O | KYU04REC | F | | 200 | PS | |
| 47 | DEPT-OUT-45 | D45 | KYU07D45 | O | KYU04REC | F | | 200 | PS | |
| 48 | DEPT-OUT-46 | D46 | KYU07D46 | O | KYU04REC | F | | 200 | PS | |
| 49 | DEPT-OUT-47 | D47 | KYU07D47 | O | KYU04REC | F | | 200 | PS | |
| 50 | DEPT-OUT-48 | D48 | KYU07D48 | O | KYU04REC | F | | 200 | PS | |
| 51 | DEPT-OUT-49 | D49 | KYU07D49 | O | KYU04REC | F | | 200 | PS | |
| 52 | DEPT-OUT-50 | D50 | KYU07D50 | O | KYU04REC | F | | 200 | PS | |
| 53 | ERROR-LOG | W99 | KYU07W99 | O | KYU99REC | VB | | 200 | PS | |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | KYU04S01 | 部署コード(昇順) | 部署コード切替(分割キー) |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
---
## 処理詳細
```
1.初期処理(1000ITTSOR
1-1.開始メッセージ出力
【メッセージ編集】
メッセージ番号:1(開始メッセージ)
1-2.コンパイル日時出力
【メッセージ編集】
メッセージ番号:33(コンパイル日時)
PARM1:コンパイル日時
PARM2'COMPILED'
1-3.ワークエリアの初期化
WRKARA初期化、WRK-FIRST='1'設定
1-4.SYSIN読込(1100SYSINSOR
制御カードから対象部署一覧を取得する。
SYSINファイルOPEN→READ→CLOSE。
カードなし(AT END):全部署対象(WRK-ALL-DEPTS)
カードあり:"DEPT=01,02,05,10"形式をパースし、
WRK-TARGET-DEPTテーブルに格納。
1-5.入出力ファイルのOPEN
R01INNFIL(INPUT)、W99OUTFIL(OUTPUT)をOPEN
1-6.R01を読み込む。(1200R01INNSOR)(1回目)
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
2-1.R01の部署コードを取得(MOVE R01DEPT-CODE TO WRK-DEPT-CODE)
2-2.SYSIN対象部署フィルタ
WRK-FILTER-DEPTSの場合、SEARCHでWRK-TARGET-DEPTテーブルを検索。
該当なし→次レコード読込(1200R01INNSOR)してEXIT SECTION。
2-3.部署切替判定
2-3-1.WRK-FIRST-Yの場合(初回)
WRK-FIRSTを'0'に設定し、2100OPENSORを実行
2-3-2.WRK-PREV-DEPT ≠ WRK-DEPT-CODEの場合(部署切替)
2200CLOSESORで前部署ファイルをCLOSE WITH LOCK
2100OPENSORで新部署ファイルをOPEN
2-4.現部署コードをWRK-PREV-DEPTに保存
2-5.該当ファイルにWRITE2300WRITESOR
EVALUATE WRK-DEPT-CODEでD01〜D50の該当ファイルにWRITE
WHEN OTHERは無視
CUN-DEPT-OUTを+1
2-6.R01を読み込む。(1200R01INNSOR)(2件目以降)
3.終了処理(3000STPSOR
3-1.WRK-PREV-DEPT > SPACESの場合、2200CLOSESOR実行
3-2.入出力ファイルのクローズ
R01INNFIL、W99OUTFILをCLOSE
3-3.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1'KYU07R01'
PARM2CUN-R01INN
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'DEPT-OUT'
PARM2CUN-DEPT-OUT
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU07W99'
PARM2CUN-W99OUT
3-4.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル(D01〜D50/DEPT-OUT-01〜50
KYU04RECSALARY-NET形式)をそのまま出力する。
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | EMP-ID | R01同項目を設定 | |
| 2 | REC-TYPE | R01同項目を設定 | |
| 3 | EMP-NAME | R01同項目を設定 | |
| 4 | DEPT-CODE | R01同項目を設定 | |
| 5 | REGION-CODE | R01同項目を設定 | |
| 6 | CATEGORY-CODE | R01同項目を設定 | |
| 7 | GROSS-PAYMENT | R01同項目を設定 | |
| 8 | INCOME-TAX | R01同項目を設定 | |
| 9 | INSURANCE | R01同項目を設定 | |
| 10 | RESIDENT-TAX | R01同項目を設定 | |
| 11 | NET-PAYMENT | R01同項目を設定 | |
| 12 | TAXABLE-INCOME | R01同項目を設定 | |
| 13 | PAY-AMOUNT | R01同項目を設定 | |
| 14 | FILLER | R01同項目を設定 | |
### 出力ファイル(W99/ERROR-LOG
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | ERR-CATEGORY | 固定値'INVDEPT' | 無効部署コード時 |
| 2 | ERR-DETAIL | 'INVALID DEPT' | 部署コード範囲外 |
+149
View File
@@ -0,0 +1,149 @@
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 給与計算システム |
| 2 | プログラムID | KYU08PRI |
| 3 | プログラム名 | 給与明細印刷処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | レイアウト編集のみ(GETPUT) |
| 6 | 機能概要 | JCL SORT済みSALARY-NETを給与明細書としてLINAGEページ制御で印刷出力する。 |
| 7 | | 1社員1ページ、ヘッダ・明細行・フッタの構成でPAGE-COUNTER自動管理。 |
| 8 | | BLANK WHEN ZERO / JUSTIFIED RIGHTによる編集出力。 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | KYU05S01(SALARY-NET) | JCL SORTで社員番号(EMP-ID)昇順ソート済みであること |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | SALARY-NET | R01 | KYU08R01 | I | KYU04REC | F | | 200 | PS | JCL SORT済み |
| 2 | PAYSLIP | W01 | KYU08W01 | O | KYU05REC | F | | 200 | SYSOUT A | LINAGE 66行 |
| 3 | ERROR-LOG | W02 | KYU08W02 | O | KYU99REC | VB | | 200 | PS | |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | KYU05S01 | 社員番号(昇順) | なし(全件印刷) |
### 使用モジュール一覧
| 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.運用日付取得SUB(SUB01DAT)により運用日を取得する。
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
【メッセージ編集】
メッセージ番号:5(サブエラー)
PARM1'SUB01DAT'
PARM2:復帰コード
【ABEND処理SUB】
ABENDコード:999
1-5.使用ファイルのオープン
R01INNFIL(INPUT)、W01OUTFIL(OUTPUT)、W02OUTFIL(OUTPUT)をOPEN
W01OUTFILはLINAGE IS 66 LINESで定義
FOOTING AT 60 / TOP 6 / BOTTOM 6
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
2-1.ページカウンタ加算
WRK-PAGE-COUNTERを+1
2-2.ヘッダ行編集・出力
【ヘッダ編集】
タイトル行'========== 給与明細書 =========='を設定
WRK-PAGE-COUNTERをPIC Z(03)9で編集
WRITE W01OUTREC FROM HEADER-LINE
BEFORE ADVANCING PAGE(改ページ)
2-3.明細行編集・出力
【明細編集】
EMP-IDR01同項目をX(008)で設定
EMP-NAMER01同項目をX(020) JUSTIFIED RIGHTで設定
BASIC-SALARYR01-GROSS-PAYMENTをZ(08)9 BLANK WHEN ZEROで設定
NET-PAYMENTR01-NET-PAYMENTをZ(08)9 BLANK WHEN ZEROで設定
WRITE W01OUTREC FROM DETAIL-LINE
BEFORE ADVANCING 1 LINE
AT END-OF-PAGE
WRITE W01OUTREC FROM FOOTER-LINE
BEFORE ADVANCING PAGE
CUN-W01OUTを+1
2-4.フッタ出力
【フッタ編集】
'--- 明細終了 ---'を設定
WRITE W01OUTREC FROM FOOTER-LINE
BEFORE ADVANCING PAGE(改ページ=次社員)
2-5.R01を読み込む。(1100R01INNSOR)(2件目以降)
3.終了処理(3000STPSOR
3-1.入出力ファイルのクローズ
R01INNFIL、W01OUTFIL、W02OUTFILをCLOSE
3-2.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1'KYU08R01'
PARM2CUN-R01INN
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU08W01'
PARM2CUN-W01OUT
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU08W02'
PARM2CUN-W02OUT
3-3.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル1W01/PAYSLIP
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | EMP-ID | R01-EMP-IDを設定 | X(008) |
| 2 | FILLER | SPACE | X(002) |
| 3 | EMP-NAME | R01-EMP-NAMEを設定 | X(020) JUSTIFIED RIGHT |
| 4 | FILLER | SPACE | X(002) |
| 5 | BASIC-SALARY | R01-GROSS-PAYMENTを設定 | Z(008)9 BLANK WHEN ZERO |
| 6 | FILLER | SPACE | X(002) |
| 7 | NET-PAYMENT | R01-NET-PAYMENTを設定 | Z(008)9 BLANK WHEN ZERO |
| 8 | FILLER | SPACE | X(002) |
| 9 | PAGE-TITLE | ヘッダ編集 | X(040) |
| 10 | FILLER | SPACE | X(106) |
### 出力ファイル2W02/ERROR-LOG
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | ERR-CATEGORY | 該当エラー種別 | X(008) |
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |
+162
View File
@@ -0,0 +1,162 @@
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 給与計算システム |
| 2 | プログラムID | KYU09MRG |
| 3 | プログラム名 | 支給データ結合処理 |
| 4 | PGMタイプ | メイン |
| 5 | PGMパターン | MERGE(複数ファイル結合) |
| 6 | 機能概要 | SALARY-NETとBONUS-DATAをMERGE文で社員番号昇順に結合する。 |
| 7 | | OUTPUT PROCEDURE内で同一社員の給与(TYPE=S)と賞与(TYPE=B)を統合し、 |
| 8 | | 支給データ(PAYMENT-DATA)として出力する。 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | SALARY-NET(KYU09M01) | 社員番号(EMP-ID)昇順であること(MERGE文で内部ソート) |
| 2 | BONUS-DATA(KYU09M02) | 社員番号(EMP-ID)昇順であること(MERGE文で内部ソート) |
| 3 | MERGE作業ファイル | ソート前処理不要。MERGE文が自ら2ファイルを結合する。 |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | SALARY-NET | M01 | KYU09M01 | I | KYU04REC | F | | 200 | PS | REC-TYPE='S' |
| 2 | BONUS-DATA | M02 | KYU09M02 | I | KYU04REC | F | | 200 | PS | REC-TYPE='B' |
| 3 | WORK-FILE | M99 | KYU09M99 | I | 自前(200B) | F | | 200 | PS | MERGE作業用SD |
| 4 | PAYMENT-DATA | W01 | KYU09W01 | O | KYU06REC | F | | 200 | PS | |
| 5 | ERROR-LOG | W02 | KYU09W02 | O | KYU99REC | VB | | 200 | PS | |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | SALARY-NET | 社員番号(昇順) | MERGEキー(社員番号) |
| 2 | BONUS-DATA | 社員番号(昇順) | MERGEキー(社員番号) |
### 使用モジュール一覧
| 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.運用日付取得SUB(SUB01DAT)により運用日を取得する。
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
【メッセージ編集】
メッセージ番号:5(サブエラー)
PARM1'SUB01DAT'
PARM2:復帰コード
【ABEND処理SUB】
ABENDコード:999
1-5.出力ファイルのオープン
W01OUTFIL(OUTPUT)、W02OUTFIL(OUTPUT)をOPEN
(入力ファイルはMERGE文が自動OPENするため明示OPEN不要)
2.MERGE出力処理(2000MRGOUTSOR
2-1.MERGE文実行(0000MAJCOLSOR内)
MERGE MERGE-FILE
ON ASCENDING KEY MERGE-EMP-ID
USING SALARY-FILE BONUS-FILE
OUTPUT PROCEDURE 2000MRGOUTSOR
給与(SALARY-NET)と賞与(BONUS-DATA)を社員番号昇順で結合。
結合結果はOUTPUT PROCEDUREに渡される。
2-2.RETURNでMERGE結果取得ループ
PERFORM WITH TEST AFTER UNTIL WRK-MERGE-EOF-Y
RETURN MERGE-FILE INTO MERGE-REC
AT END SET WRK-MERGE-EOF-Y TO TRUE
2-2-1.現社員番号をWRK-CURRENT-EMPに設定
2-2-2.WRK-SALARY-AMOUNTWRK-BONUS-AMOUNTをZERO初期化
2-2-3.同一社員内ループ(WRK-CURRENT-EMP ≠ MERGE-EMP-IDまで)
2-2-3-1.MERGE-REC-TYPE = 'S'(給与)の場合
MERGE-PAY-AMOUNT → WRK-SALARY-AMOUNT
MERGE-GROSS-PAYMENT → WRK-BANK-CODE
MERGE-EMP-ID(1:4) → WRK-ACCOUNT-NO
2-2-3-2.上記以外(賞与)の場合
MERGE-PAY-AMOUNT → WRK-BONUS-AMOUNT
2-2-3-3.RETURNで次レコード取得
AT END → HIGH-VALUES設定、EXIT PERFORM
2-2-4.給与+賞与合算
ADD WRK-SALARY-AMOUNT TO WRK-BONUS-AMOUNT
GIVING WRK-TOTAL-PAYMENT
2-2-5.2100PAYOUTSORでPAYMENT-DATA出力
2-2-5-1.W01OUTREC初期化
2-2-5-2.WRK-CURRENT-EMP → W01EMP-ID
2-2-5-3.'T' → W01PAY-TYPE(支給合算)
2-2-5-4.WRK-TOTAL-PAYMENT → W01AMOUNT
2-2-5-5.WRK-BANK-CODE → W01BANK-CODE
2-2-5-6.WRK-ACCOUNT-NO → W01ACCOUNT-NO
2-2-5-7.W01OUTRECをWRITE
2-2-5-8.CUN-W01OUTを+1
3.ENTRY代替エントリポイント(0010DIRECTSOR
3-1.'KYU09ENT'で直接呼出し可能
3-2.直接結合モードで簡易エラーログ出力
【エラー出力】
ERR-DETAIL'DIRECT ENTRY'
4.終了処理(3000STPSOR
4-1.出力ファイルのクローズ
W01OUTFIL、W02OUTFILをCLOSE
4-2.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1'MERGE-FILE'
PARM2CUN-W01OUT
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU09W01'
PARM2CUN-W01OUT
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1'KYU09W02'
PARM2CUN-W02OUT
4-3.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル1W01/PAYMENT-DATA
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | EMP-ID | WRK-CURRENT-EMPを設定 | X(008) |
| 2 | PAY-TYPE | 'T'(支給合算)固定 | X(001) |
| 3 | AMOUNT | WRK-TOTAL-PAYMENT(給与+賞与)を設定 | 9(009) |
| 4 | BANK-CODE | WRK-BANK-CODE(給与レコードのGROSS-PAYMENT)を設定 | X(004) |
| 5 | ACCOUNT-NO | WRK-ACCOUNT-NOEMP-ID(1:4))を設定 | 9(008) |
| 6 | FILLER | SPACE | X(170) |
### 出力ファイル2W02/ERROR-LOG
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | ERR-CATEGORY | 該当エラー種別 | X(008) |
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |