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:
+115
@@ -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-MASTER(SALARYDB) — 社員マスタ(給与計算用)
|
||||
|
||||
## 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-TABLE(SALARYDB) — 所得税率テーブル
|
||||
|
||||
## 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-TABLE(SALARYDB) — 社会保険料率テーブル
|
||||
|
||||
## 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-RESULTS(SALARYDB) — 給与計算結果テーブル
|
||||
|
||||
## 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
|
||||
> レビュー対象: サブシステムC(KYU01CVT〜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 (自動レビュー) |
|
||||
|
||||
---
|
||||
@@ -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-RECORD(W01)出力/異常:ERROR-LOG(W02)出力 |
|
||||
|
||||
※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'
|
||||
PARM2:CUN-R01INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU01W01'
|
||||
PARM2:CUN-W01OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU01W02'
|
||||
PARM2:CUN-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.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/EMP-RECORD)
|
||||
|
||||
COPY書式:KYU01REC(80B 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固定 | |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
COPY書式:KYU99REC(VB 200B)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 'CSV-ERR'または'EMPID-ERR'で固定 | エラー区分 |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容(CSV行の先頭80B等) |
|
||||
@@ -0,0 +1,146 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 給与計算システム |
|
||||
| 2 | プログラムID | KYU02REG |
|
||||
| 3 | プログラム名 | 社員マスタDB2登録処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | DB更新 |
|
||||
| 6 | 機能概要 | EMP-RECORD(80B固定長)を読み込み、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'
|
||||
PARM2:CUN-R02INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'DB-INSERT'
|
||||
PARM2:CUN-DB-INS
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'DB-UPDATE'
|
||||
PARM2:CUN-DB-UPD
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU02W03'
|
||||
PARM2:CUN-W03OUT
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W03/ERROR-LOG)
|
||||
|
||||
COPY書式:KYU99REC(VB 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関数 |
|
||||
@@ -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'
|
||||
PARM2:CUN-R01INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU03W01'
|
||||
PARM2:CUN-W01OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU03W02'
|
||||
PARM2:CUN-W02OUT
|
||||
3-4.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
|
||||
補足:集約ロジック詳細
|
||||
WRK-PREV-EMP-ID:前社員キー保持変数
|
||||
WRK-TOTAL-HOURS:同一社員内の欠勤時間合計
|
||||
WRK-ABSENT-COUNT:同一社員内の欠勤回数
|
||||
初回設定後、同一社員の間は加算を継続し、異社員出現時に前社員の集約結果を出力する。
|
||||
全READ終了後、最終社員の出力を3000STPSORで実施する。
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/ABSENCE-AGGREGATE)
|
||||
|
||||
COPY書式:KYU02REC(80B 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固定 | |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
COPY書式:KYU99REC(VB 200B)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 区分固定値 | エラー区分 |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |
|
||||
@@ -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)
|
||||
各項目をW03OUTREC(KYU03REC)にMOVEしWRITE
|
||||
W03OUT件数カウンタ(CUN-W03OUT)を+1
|
||||
2-6.R02を読み込む。(1100R02INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KYU04R02'
|
||||
PARM2:CUN-R02INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU04W03'
|
||||
PARM2:CUN-W03OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU04W04'
|
||||
PARM2:CUN-W04OUT
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W03/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 |
|
||||
|
||||
### 出力ファイル2(W04/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 'DB-ERR'で固定 | |
|
||||
| 2 | ERR-DETAIL | R02EMP-ID | エラー発生社員番号 |
|
||||
@@ -0,0 +1,167 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 給与計算システム |
|
||||
| 2 | プログラムID | KYU05DED |
|
||||
| 3 | プログラム名 | 控除計算処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | SELECT条件 |
|
||||
| 6 | 機能概要 | SALARY-DETAILを入力に、源泉所得税・社会保険料・住民税を計算しSALARY-NETを出力する。 |
|
||||
| 7 | | TAX-TABLE(DB2 SELECT ... BETWEEN)で税率検索、INSURANCE-TABLE(SEARCH 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全件LOAD(1100INSLOADSOR)
|
||||
【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)
|
||||
各項目をW01OUTREC(KYU04REC)にMOVEしWRITE
|
||||
W01OUT件数カウンタ(CUN-W01OUT)を+1
|
||||
2-7.R01を読み込む。(1200R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KYU05R01'
|
||||
PARM2:CUN-R01INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU05W01'
|
||||
PARM2:CUN-W01OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU05W02'
|
||||
PARM2:CUN-W02OUT
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/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 |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 未設定 | 該当ケースなし |
|
||||
| 2 | ERR-DETAIL | エラー内容 | DB接続エラー時のみ |
|
||||
@@ -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.PARM(YEAR-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'
|
||||
PARM2:CUN-R02INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'DB-INSERT'
|
||||
PARM2:CUN-DB-INS
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'DB-UPDATE'
|
||||
PARM2:CUN-DB-UPD
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU06W03'
|
||||
PARM2:CUN-W03OUT
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W03/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 'DB-ERR'で固定 | |
|
||||
| 2 | ERR-DETAIL | DBV-EMP-ID | エラー発生社員番号 |
|
||||
@@ -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.該当ファイルにWRITE(2300WRITESOR)
|
||||
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'
|
||||
PARM2:CUN-R01INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'DEPT-OUT'
|
||||
PARM2:CUN-DEPT-OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU07W99'
|
||||
PARM2:CUN-W99OUT
|
||||
3-4.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル(D01〜D50/DEPT-OUT-01〜50)
|
||||
|
||||
KYU04REC(SALARY-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' | 部署コード範囲外 |
|
||||
@@ -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-ID:R01同項目をX(008)で設定
|
||||
EMP-NAME:R01同項目をX(020) JUSTIFIED RIGHTで設定
|
||||
BASIC-SALARY:R01-GROSS-PAYMENTをZ(08)9 BLANK WHEN ZEROで設定
|
||||
NET-PAYMENT:R01-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'
|
||||
PARM2:CUN-R01INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU08W01'
|
||||
PARM2:CUN-W01OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU08W02'
|
||||
PARM2:CUN-W02OUT
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/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) |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 該当エラー種別 | X(008) |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |
|
||||
@@ -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-AMOUNT/WRK-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'
|
||||
PARM2:CUN-W01OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU09W01'
|
||||
PARM2:CUN-W01OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU09W02'
|
||||
PARM2:CUN-W02OUT
|
||||
4-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/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-NO(EMP-ID(1:4))を設定 | 9(008) |
|
||||
| 6 | FILLER | SPACE | X(170) |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 該当エラー種別 | X(008) |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |
|
||||
Reference in New Issue
Block a user