feat: 多轮运行 + GCOV 合并 + JSON 出力 + DesignDataGenerator

This commit is contained in:
hangshuo652
2026-07-12 21:04:58 +08:00
parent af37e33b98
commit f3be17e5eb
40 changed files with 4397 additions and 198 deletions
+347
View File
@@ -0,0 +1,347 @@
# DB定義書
## 変更履歴
| No | 変更内容 | 担当者 | 変更日 | 承認者 | 備考 |
|----|---------|--------|--------|--------|------|
| 1 | 新規作成(全8テーブル) | AI | 2026/06/23 | | サブシステムA(6) + B(2) |
| 2 | SALARYDB 4テーブル追加 | AI | 2026/07/08 | | サブシステムC(給与計算) |
---
# EMP_MASTER — 社員マスタ
## Layout(テーブル定義)
### DB基本情報
| DB名 | DB ID | COPY ID | INDEX |
|------|-------|---------|-------|
| 勤怠休暇管理DB | EMP_MASTER | — | PK: EMP_ID |
### カラム定義
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
| 1 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
| 2 | 部署ID | DEPT_ID | CHAR | 4 | | 4 | NOT NULL | | | | | | |
| 3 | 氏名 | EMP_NAME | VARCHAR | 50 | | 50 | NOT NULL | | | | | | |
| 4 | ステータス | STATUS | CHAR | 1 | | 1 | NOT NULL | | | | | | '1'=在籍, '9'=退職 |
### 備考
- サブシステムA: 参照のみ(SELECT)
- サブシステムB: 使用しない
---
# LEAVE_RECORDS — 休暇申請記録
## Layout(テーブル定義)
### DB基本情報
| DB名 | DB ID | COPY ID | INDEX |
|------|-------|---------|-------|
| 勤怠休暇管理DB | LEAVE_RECORDS | — | PK: APPLICATION_ID |
### カラム定義
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
| 1 | 申請番号 | APPLICATION_ID | INTEGER | 10 | | 4 | NOT NULL | | ✓ | | | | 自動採番 |
| 2 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | | | | | |
| 3 | 休暇種別 | LEAVE_TYPE | CHAR | 2 | | 2 | NOT NULL | | | | | | 01/02/03/04 |
| 4 | 開始日 | START_DATE | CHAR | 8 | | 8 | NOT NULL | | | | | | YYYYMMDD |
| 5 | 開始時刻 | START_TIME | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM |
| 6 | 終了日 | END_DATE | CHAR | 8 | | 8 | NOT NULL | | | | | | YYYYMMDD |
| 7 | 終了時刻 | END_TIME | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM |
| 8 | ステータス | STATUS | CHAR | 1 | | 1 | NOT NULL | | | | | | '1'=有効, '9'=取消 |
### 備考
- KIN02UPDがINSERT/DELETEを実行
- KIN03EXPがSELECT(日付展開用)
- 取消はDELETE FROM で物理削除
---
# HOLIDAY_CALENDAR — 休日カレンダー
## Layout(テーブル定義)
### DB基本情報
| DB名 | DB ID | COPY ID | INDEX |
|------|-------|---------|-------|
| 勤怠休暇管理DB | HOLIDAY_CALENDAR | — | PK: HOLIDAY_DATE |
### カラム定義
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
| 1 | 休日日付 | HOLIDAY_DATE | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | YYYYMMDD |
| 2 | 説明 | DESCRIPTION | VARCHAR | 50 | | 50 | NULL許可 | NULL | | | | | 例:「建国記念の日」 |
### 備考
- 土日は曜日判定で処理するため、このテーブルには祝日のみ格納
- KIN03EXP, KIN06CLDがSELECTで参照
---
# SICK_LEAVE_RATE — 病欠控除率
## Layout(テーブル定義)
### DB基本情報
| DB名 | DB ID | COPY ID | INDEX |
|------|-------|---------|-------|
| 勤怠休暇管理DB | SICK_LEAVE_RATE | — | PK: LEAVE_TYPE |
### カラム定義
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
| 1 | 休暇種別 | LEAVE_TYPE | CHAR | 2 | | 2 | NOT NULL | | ✓ | | | | '04'固定 |
| 2 | 控除率 | DEDUCTION_RATE | DECIMAL | 3 | 2 | 3 | NOT NULL | | | | | | 例:0.5050%控除) |
### 備考
- 全社員共通の設定値
- 現時点では参照プログラム未実装(設計上定義)
---
# DAILY_RECORDS — 日別勤怠記録
## Layout(テーブル定義)
### DB基本情報
| DB名 | DB ID | COPY ID | INDEX |
|------|-------|---------|-------|
| 勤怠休暇管理DB | DAILY_RECORDS | — | PK: (EMP_ID, TARGET_DATE) |
### カラム定義
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
| 1 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
| 2 | 対象日 | TARGET_DATE | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | YYYYMMDD |
| 3 | 出勤時刻 | TIME_IN | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM, '0000'=打刻なし |
| 4 | 退勤時刻 | TIME_OUT | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM, '0000'=打刻なし |
| 5 | 年休時間 | ANNUAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
| 6 | 事假時間 | PERSONAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
| 7 | 因公特批假時間 | OFFICIAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
| 8 | 病欠時間 | SICK_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
| 9 | 未申請欠勤時間 | UNAPPROVED_ABSENT_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
| 10 | 更新日時 | UPDATED_AT | TIMESTAMP | — | | 10 | NOT NULL | | | | | | DEFAULT CURRENT_TIMESTAMP |
### 備考
- KIN08DBUがKIN07DAIの出力ファイルからINSERT
- 1社員1日=1レコード。出勤日のみ存在。
---
# MONTHLY_ABSENCE — 月次統計
## Layout(テーブル定義)
### DB基本情報
| DB名 | DB ID | COPY ID | INDEX |
|------|-------|---------|-------|
| 勤怠休暇管理DB | MONTHLY_ABSENCE | — | 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 | 年休合計 | ANNUAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
| 4 | 事假合計 | PERSONAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
| 5 | 因公特批假合計 | OFFICIAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
| 6 | 病欠合計 | SICK_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
| 7 | 未申請欠勤合計 | UNAPPROVED_ABSENT_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
| 8 | 更新日時 | UPDATED_AT | TIMESTAMP | — | | 10 | NOT NULL | | | | | | DEFAULT CURRENT_TIMESTAMP |
### 備考
- KIN08DBUが月次集計後にUPSERTMERGE
- サブシステムC(給与計算)への連携元
---
# OVT_APPLICATIONS — 個別加班申請テーブル
## Layout(テーブル定義)
### DB基本情報
| DB名 | DB ID | COPY ID | INDEX |
|------|-------|---------|-------|
| 残業統計管理DB | OVT_APPLICATIONS | — | PK: APPL_ID |
### カラム定義
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
| 1 | 申請番号 | APPL_ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | YYYYMMDD+SEQ |
| 2 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | | | | | |
| 3 | 申請日 | APPL_DATE | CHAR | 8 | | 8 | NOT NULL | | | | | | YYYYMMDD |
| 4 | 残業種別 | OVT_TYPE | CHAR | 1 | | 1 | NOT NULL | | | | | | W=平日, H=休日 |
| 5 | 開始時刻 | START_TIME | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM |
| 6 | 終了時刻 | END_TIME | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM |
| 7 | 加班時間 | OVT_HOURS | DECIMAL | 4 | 1 | 4 | NOT NULL | | | | | | 0.1h単位 |
| 8 | ステータス | STATUS | CHAR | 1 | | 1 | NOT NULL | | | | | | 0=有効, 9=取消 |
| 9 | 更新日時 | UPDATED_AT | TIMESTAMP | — | | 10 | NOT NULL | | | | | | |
### 備考
- ZAN06UPDがINSERT/UPDATEを実行
- STATUS=9で取消(物理削除はしない)
---
# OVT_MONTHLY — 月次集計テーブル
## Layout(テーブル定義)
### DB基本情報
| DB名 | DB ID | COPY ID | INDEX |
|------|-------|---------|-------|
| 残業統計管理DB | OVT_MONTHLY | — | PK: (EMP_ID, YEAR_MONTH, OVT_TYPE) |
### カラム定義
| 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 | 残業種別 | OVT_TYPE | CHAR | 1 | | 1 | NOT NULL | | ✓ | | | | W=平日, H=休日 |
| 4 | 加班時間合計 | OVT_HOURS | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
| 5 | 加班回数 | OVT_COUNT | INTEGER | 10 | | 4 | NOT NULL | | | | | | |
| 6 | 更新日時 | UPDATED_AT | TIMESTAMP | — | | 10 | NOT NULL | | | | | | |
### 備考
- 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を実行
+435
View File
@@ -0,0 +1,435 @@
# cobol_testgen v4 生成 JSON — 格式说明 v2.0
## 修订履历
| 版本 | 日期 | 变更内容 |
|------|------|---------|
| v2.0 | | 明确1个json文件=1组数据(group)的命名规则,格式本身与v1相同 |
## 说明
v2.0 **格式本身与v1完全一致**,仅补充:
1. 一组数据单独放一个json文件
2. 一个文件内的`records`数组包含该组的全部处理单元
3. 命名规则追加 `_g{groupId}` 标识组号
---
## 完整规格 JSON`output/json/{プログラム名}_g{groupId}.json`
### 最外层结构
```json
{
"program": "SAN01MAT",
"records": [
{
"input": { ... }
}
]
}
```
**1条record = 1次处理单元**。例如匹配(1:1)时:
- 匹配成功:record内同时包含两个输入FD
- R01-onlyrecord内只含R01的FD
- R02-onlyrecord内只含R02的FD
多个record按处理顺序排列,组成一组完整的测试数据。
---
## 例1:单文件CSV输入(1组1条记录)
文件 `ZAN01CHK_g1.json`
```json
{
"program": "ZAN01CHK",
"records": [
{
"input": {
"R01INNFIL": {
"R01LINE": "A0000000, , , , ,0, , "
}
}
}
]
}
```
## 例2:单文件二进制输入(1组多条记录)
文件 `ZAN02CHK_g1.json`
```json
{
"program": "ZAN02CHK",
"records": [
{
"input": {
"R01INNFIL": {
"R01APPL-ID": "A0000001",
"R01EMP-ID": "00000101",
"R01APPL-DATE": "20000101",
"R01START-TIME":"0201",
"R01END-TIME": "0301",
"R01STATUS": "B",
"R01OVT-TYPE": "C",
"R01FILLER": "D000000000000000000000000000000000000000000001"
}
}
},
{
"input": {
"R01INNFIL": {
"R01APPL-ID": "A0000002",
"R01EMP-ID": "00000102",
"R01APPL-DATE": "20000102",
"R01START-TIME":"0202",
"R01END-TIME": "0302",
"R01STATUS": "C",
"R01OVT-TYPE": "D",
"R01FILLER": "D000000000000000000000000000000000000000000002"
}
}
}
]
}
```
## 例3:多文件输入(与v1相同)
文件 `ZAN03CHK_g1.json`
```json
{
"program": "ZAN03CHK",
"records": [
{
"input": {
"R01INNFIL": {
"R01APPL-ID": "A0000001",
"R01EMP-ID": "00000101",
"R01APPL-DATE": "20000101",
"R01START-TIME":"0201",
"R01END-TIME": "0301",
"R01STATUS": "B",
"R01OVT-TYPE": "C",
"R01FILLER": "D000000000000000000000000000000000000000000001"
},
"R02INNFIL": {
"R02EMP-ID": "00000401",
"R02DATE": "20000101",
"R02TIME-IN": "0501",
"R02TIME-OUT": "0601",
"R02FILLER": "E0000000000000000000000000000000000000000000000000000001"
},
"R03INNFIL": {
"R03HOLIDAY-DATE": "20000101",
"R03HOLIDAY-FLG": "F",
"R03FILLER": "G0000000000000000000000000000000000000000000000000000000000000000000001"
}
}
}
]
}
```
## 例4:二文件匹配(マッチング1:1)
v1中ZAN04MAT示例是1条record = 1次匹配处理。
对于匹配(1:1)测试,**1组数据 = 1个json文件**。1组内包含多条recordR01-only、R02-only、匹配),按处理顺序排列。
### 文件1`SAN01MAT_g1.json`
两端不匹配:先处理R01-only(a001) → 3次匹配(a002/b002, a003/b003, a004/b004) → 最后R02-only(a005)。
```json
{
"program": "SAN01MAT",
"records": [
{
"input": {
"R01INNFIL": {
"R01A001": "a001",
"R01A002": "b001",
"R01A003": "c001",
"R01DATA": "c00000000011"
}
}
},
{
"input": {
"R01INNFIL": {
"R01A001": "a002",
"R01A002": "b002",
"R01A003": "c002",
"R01DATA": "c00000000012"
},
"R02INNFIL": {
"R02A001": "a002",
"R02A002": "b002",
"R02A003": "c002",
"R02DATA": "c00000000012"
}
}
},
{
"input": {
"R01INNFIL": {
"R01A001": "a003",
"R01A002": "b003",
"R01A003": "c003",
"R01DATA": "c00000000013"
},
"R02INNFIL": {
"R02A001": "a003",
"R02A002": "b003",
"R02A003": "c003",
"R02DATA": "c00000000013"
}
}
},
{
"input": {
"R01INNFIL": {
"R01A001": "a004",
"R01A002": "b004",
"R01A003": "c004",
"R01DATA": "c00000000014"
},
"R02INNFIL": {
"R02A001": "a004",
"R02A002": "b004",
"R02A003": "c004",
"R02DATA": "c00000000014"
}
}
},
{
"input": {
"R02INNFIL": {
"R02A001": "a005",
"R02A002": "b005",
"R02A003": "c005",
"R02DATA": "c00000000015"
}
}
}
]
}
```
### 文件2`SAN01MAT_g2.json`
反向两端不匹配:先处理R02-only(a001) → 3次匹配 → 最后R01-only(a005)。
```json
{
"program": "SAN01MAT",
"records": [
{
"input": {
"R02INNFIL": {
"R02A001": "a001",
"R02A002": "b001",
"R02A003": "c001",
"R02DATA": "c00000000011"
}
}
},
{
"input": {
"R01INNFIL": {
"R01A001": "a002",
"R01A002": "b002",
"R01A003": "c002",
"R01DATA": "c00000000012"
},
"R02INNFIL": {
"R02A001": "a002",
"R02A002": "b002",
"R02A003": "c002",
"R02DATA": "c00000000012"
}
}
},
{
"input": {
"R01INNFIL": {
"R01A001": "a003",
"R01A002": "b003",
"R01A003": "c003",
"R01DATA": "c00000000013"
},
"R02INNFIL": {
"R02A001": "a003",
"R02A002": "b003",
"R02A003": "c003",
"R02DATA": "c00000000013"
}
}
},
{
"input": {
"R01INNFIL": {
"R01A001": "a004",
"R01A002": "b004",
"R01A003": "c004",
"R01DATA": "c00000000014"
},
"R02INNFIL": {
"R02A001": "a004",
"R02A002": "b004",
"R02A003": "c004",
"R02DATA": "c00000000014"
}
}
},
{
"input": {
"R01INNFIL": {
"R01A001": "a005",
"R01A002": "b005",
"R01A003": "c005",
"R01DATA": "c00000000015"
}
}
}
]
}
```
### 文件3`SAN01MAT_g3.json`
中间不匹配:先匹配(a001) → R01-only(a003) → 匹配(a004) → R02-only(a002) → 匹配(a005)。
```json
{
"program": "SAN01MAT",
"records": [
{
"input": {
"R01INNFIL": {
"R01A001": "a001",
"R01A002": "b001",
"R01A003": "c001",
"R01DATA": "c00000000011"
},
"R02INNFIL": {
"R02A001": "a001",
"R02A002": "b001",
"R02A003": "c001",
"R02DATA": "c00000000011"
}
}
},
{
"input": {
"R01INNFIL": {
"R01A001": "a003",
"R01A002": "b003",
"R01A003": "c003",
"R01DATA": "c00000000013"
}
}
},
{
"input": {
"R01INNFIL": {
"R01A001": "a004",
"R01A002": "b004",
"R01A003": "c004",
"R01DATA": "c00000000014"
},
"R02INNFIL": {
"R02A001": "a004",
"R02A002": "b004",
"R02A003": "c004",
"R02DATA": "c00000000014"
}
}
},
{
"input": {
"R02INNFIL": {
"R02A001": "a002",
"R02A002": "b002",
"R02A003": "c002",
"R02DATA": "c00000000012"
}
}
},
{
"input": {
"R01INNFIL": {
"R01A001": "a005",
"R01A002": "b005",
"R01A003": "c005",
"R01DATA": "c00000000015"
},
"R02INNFIL": {
"R02A001": "a005",
"R02A002": "b005",
"R02A003": "c005",
"R02DATA": "c00000000015"
}
}
}
]
}
```
---
## DB类型时的输出
输入类型为DB时,每组生成一个独立的SQL insert文件。
| 文件种类 | 命名规则 | 例 |
|---------|--------|-----|
| Insert SQL(一组) | `{プログラムID}_g{groupId}.sql` | `SAN01MAT_g1.sql` |
例(组1):
```sql
-- Group: 1
-- 用途: 员工主表基础数据
INSERT INTO EMPLOYEE (EMP_ID, EMP_NAME, BIRTH_DATE, SALARY) VALUES
('0000000001', '测试太郎', '1990-04-01', 350000.00),
('0000000002', '测试花子', '1995-07-15', 420000.00);
```
---
## 字段值规则
| PIC | JSON内表示 | 例 |
|-----|-----------|-----|
| `PIC X(n)` | 左对齐 + 空格填充 | `"A0000001"` (8桁) |
| `PIC 9(n)` | 右对齐 + 前补零 | `"00000101"` (8桁) |
| `PIC S9(n)` | 符号 + 右对齐 + 前补零 | `"+0000101"` |
| `PIC S9(n)V9(m)` | 符号 + 右对齐 + 含小数点 | `"+001234567"` (V9(2)时实际为 +0012345.67) |
| `PIC S9(n) COMP` | 十进制数字字符串(含符号) | `"300"``"-100000"` |
| `PIC S9(n) COMP-3` | 十进制数字字符串(含符号) | `"1234"``"-5678"` |
| `PIC 9(n) COMP-3` | 十进制数字字符串(无符号) | `"1234"` |
| FILLER(纯保留) | 字段名为`FILLER`的未使用区域 | 含有组ID和记录编号的可辨识模式 `"D000000...001"` |
| FILLER(业务保留) | 字段名有具体名称但实际未使用的保留区 | PIC X(n)填全空格、PIC 9(n)填全零 |
---
## 输出目录结构
```
output/
├── json/ # 完整JSON(每组一个文件,输入类型=文件时输出)
│ ├── SAN01MAT_g1.json
│ ├── SAN01MAT_g2.json
│ └── SAN01MAT_g3.json
└── db/ # DB insert SQL(每组一个文件,输入类型=DB时输出)
├── SAN01MAT_g1.sql
├── SAN01MAT_g2.sql
└── SAN01MAT_g3.sql
```
+432
View File
@@ -0,0 +1,432 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. SAN01MAT.
*****************************************************************
* システム名 : サンプルシステム *
* プログラムID : SAN01MAT *
* プログラム名 : XXXXXX処理 *
* 作成日 : YYYY-MM-DD *
* 処理概要 : マッチング(1:1)を行う。 *
* マッチの場合、ファイルW01を出力する。 *
* ファイルR01のみの場合ファイルW02を出力する。*
* ファイルR02のみの場合ファイルW03を出力する。*
* *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
* 更新日付 担当者 更新内容 *
*---------------------------------------------------------------*
* YY-MM-DD @@@ 新規作成 *
* *
*****************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-ZSERIES.
OBJECT-COMPUTER. IBM-ZSERIES.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT R01INNFIL ASSIGN TO SAN01R01.
SELECT R02INNFIL ASSIGN TO SAN01R02.
SELECT W010UTFIL ASSIGN TO SAN01W01.
SELECT W020UTFIL ASSIGN TO SAN01W02.
SELECT W030UTFIL ASSIGN TO SAN01W03.
*
DATA DIVISION.
FILE SECTION.
*
*****************************************************************
* ##RO1## *
*****************************************************************
FD R01INNFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 RO1INNREC.
COPY BBBBBFC REPLACING ==(A)== BY ==R01==.
*
*****************************************************************
* ##RO2## *
*****************************************************************
FD R02INNFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 RO2INNREC.
COPY BBBBBFC REPLACING ==(A)== BY ==R02==.
*
*****************************************************************
* ##WO1## *
*****************************************************************
FD W010UTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 WO10UTREC.
COPY BBBBBFC REPLACING ==(A)== BY ==WO1==.
*
*****************************************************************
* ##WO2## *
*****************************************************************
FD W020UTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 WO20UTREC.
COPY BBBBBFC REPLACING ==(A)== BY ==WO2==.
*
*****************************************************************
* ##W03## *
*****************************************************************
FD W030UTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 WO30UTREC.
COPY BBBBBFC REPLACING ==(A)== BY ==WO3==.
*
WORKING-STORAGE SECTION.
*
*****************************************************************
* SYSIN領域 *
*****************************************************************
*01 SYSARA.
*
*****************************************************************
* コンスタント領域 *
*****************************************************************
01 CNSARA.
03 CNS-PRGIDX PIC X(008) VALUE 'SAN01MAT'.
03 CNS-UNYSUTKES-1 PIC X(001) VALUE '1'.
03 CNS-CFKFCA PIC X(001) VALUE 'N'.
03 CNS-MSGSTR PIC 9(003) VALUE 001.
03 CNS-MSGFIN PIC 9(003) VALUE 002.
03 CNS-MSGSUBEEK PIC 9(003) VALUE 005.
03 CNS-MSGIINKES PIC 9(003) VALUE 006.
03 CNS-MSGOUTKES PIC 9(003) VALUE 007.
03 CNS-MSGKEYINF PIC 9(003) VALUE 033.
03 CNS-KN0002 PIC 9(001) VALUE 2.
03 CNS-ABD999 PIC 9(003) VALUE 999.
*
*****************************************************************
* フラグ領域 *
*****************************************************************
*01 FLGARA.
*
*****************************************************************
* カウンタ領域 *
*****************************************************************
01 CUNARA.
03 CUN-RO1INN PIC S9(009) COMP-3 VALUE ZERO.
03 CUN-R02INN PIC S9(009) COMP-3 VALUE ZERO.
03 CUN-WO1OUT PIC S9(009) COMP-3 VALUE ZERO.
03 CUN-WO2OUT PIC S9(009) COMP-3 VALUE ZERO.
03 CUN-WO3OUT PIC S9(009) COMP-3 VALUE ZERO.
*
*****************************************************************
* 作業領域 *
*****************************************************************
01 WRKARA.
*** 運用日付
03 WRK-U06 PIC 9(008).
03 WRK-U06ARA REDEFINES WRK-U06.
05 WRK-UYOYMX PIC 9(006).
05 WRK-UYOHII PIC 9(002).
*** マッチングキー
03 WRK-R01KEY.
05 WRK-R01KEY001 PIC X(010).
05 WRK-R01KEY002 PIC X(010).
05 WRK-R01KEY003 PIC X(010).
03 WRK-R02KEY.
05 WRK-R02KEY001 PIC X(010).
05 WRK-R02KEY002 PIC X(010).
05 WRK-R02KEY003 PIC X(010).
*
*****************************************************************
* サブプログラム連絡領域 *
*****************************************************************
*** 運用日付取得
COPY D01010AC.
*** 入力件数表示/入力レコードシーケンスチェックSR用
COPY S01MSGAC.
*** メッセージ編集出力SR用
COPY MSG000AC.
*
PROCEDURE DIVISION.
*****************************************************************
* サブモジュールNO: (0.0) *
* サブモジュール名: 制御処理 *
* 処理概要 : メインコントロール処理 *
*****************************************************************
0000MAJCOLSOR SECTION.
*
*** 初期処理
PERFORM 1000ITTSOR.
*
*** メイン処理
PERFORM 2000MAJSOR
UNTIL WRK-R01KEY = HIGH-VALUE
AND WRK-R02KEY = HIGH-VALUE.
*
*** 終了処理
PERFORM 3000STPSOR.
*
0000MAJCOLSOREXT.
GOBACK.
*****************************************************************
* サブモジュールNO: (1.0) *
* サブモジュール名: 初期処理 *
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
*****************************************************************
1000ITTSOR SECTION.
*
*** 開始メッセージ出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGSTR TO M00MSGCOD.
PERFORM 4000MSGOUTSOR.
*
*** コンバイル日時出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGKEYINF TO M00MSGCOD.
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22(1).
MOVE 'COMPILED' TO M00UMKDATS22(2).
PERFORM 4000MSGOUTSOR.
*
*** ワークエリア初期化
INITIALIZE WRKARA.
*
*** 運用日付取得
INITIALIZE D01UBSPAR.
CALL 'DAT01S0' USING D01UBSPAR.
IF D01FKICOD = ZERO
MOVE D01U06 TO WRK-U06
ELSE
INITIALIZE M00MHOPAR
MOVE CNS-MSGSUBEEK TO M00MSGCOD
MOVE 'DAT01SO' TO M00UMKDATS22(1)
MOVE D01FKICOD TO M00UMKDATS22(2)
PERFORM 4000MSGOUTSOR
PERFORM 9999ABDSOR
END-IF.
*
*** 入出力ファイルOPEN
OPEN INPUT R01INNFIL
R02INNFIL
OUTPUT W010UTFIL
W020UTFIL
W030UTFIL.
*
*** #R01#を読み込み
PERFORM 1100R01INNSOR.
*** #R02#を読み込み
PERFORM 1200R02INNSOR.
*
1000ITTSOREXT.
EXIT.
*****************************************************************
* サブモジュールNO:(1.1) *
* サブモジュール名:##RO1##読込処理 *
* 処理概要 :レコード読込・キー設定・SEQチェック処理 *
*****************************************************************
1100R01INNSOR SECTION.
*
READ R01INNFIL
AT END
MOVE HIGH-VALUE TO WRK-R01KEY
NOT AT END
ADD 1 TO CUN-RO1INN
MOVE R01A001 TO WRK-R01KEY001
MOVE R01A002 TO WRK-R01KEY002
MOVE R01A003 TO WRK-R01KEY003
*** 入力件数表示/シーケンスチェック処理
MOVE 'SAN01R01' TO S01DDM.
MOVE CNS-UNYSUTKES-1 TO SO1HYOKESKJCKUB
MOVE CNS-CFKFCA TO S01JKDKIYFLG
MOVE WRK-R01KEY TO SO1SEQCECKOM
COPY CHK01SRP REPLACING ==(A)==BY ==S01==.
END-READ.
*
1100R01INNSOREXT.
EXIT.
*****************************************************************
* サブモジュールNO:(1.2) *
* サブモジュール名:##RO2##読込処理 *
* 処理概要 :レコード読込・キー設定・SEQチェック処理 *
*****************************************************************
1200R02INNSOR SECTION.
*
READ R02INNFIL
AT END
MOVE HIGH-VALUE TO WRK-R02KEY
NOT AT END
ADD 1 TO CUN-R02INN
MOVE R02A001 TO WRK-R02KEY001
MOVE R02A002 TO WRK-R02KEY002
MOVE R02A003 TO WRK-R02KEY003
*** 入力件数表示/シーケンスチェック処理
MOVE 'SAN01R02' TO S01DDM.
MOVE CNS-UNYSUTKES-1 TO SO1HYOKESKJCKUB
MOVE CNS-CFKFCA TO S01JKDKIYFLG
MOVE WRK-R02KEY TO SO1SEQCECKOM
COPY CHK01SRP REPLACING ==(A)== BY ==S01==.
END-READ.
*
1200R02INNSOREXT.
EXIT.
*****************************************************************
* サブプログラムNO:(2.0) *
* サブプログラム名:主処理 *
* 処理概要 :マッチング(1:1)を行う *
*****************************************************************
2000MAJSOR SECTION.
*
EVALUATE TRUE
*** マッチ
WHEN WRK-R01KEY = WRK-R02KEY
*** #WO1#を編集出力処理
PERFORM 2100W010UTSOR
*
*** #RO1#を読み込み
PERFORM 1100R01INNSOR
*** #RO2#を読み込み
PERFORM 1200R02INNSOR
*
*** アンマッチ(##R01##のみ)
WHEN WRK-R01KEY < WRK-R02KEY
*** #WO2#を編集出力処理
PERFORM 2200W020UTSOR
*
*** #RO1#を読み込み
PERFORM 1100R01INNSOR
*
*** アンマッチ(##R02##のみ)
WHEN WRK-R01KEY > WRK-R02KEY
*** #WO3#を編集出力処理
PERFORM 2300W030UTSOR
*
*** #R02#を読み込み
PERFORM 1200R02INNSOR
END-EVALUATE.
*
2000MAJSOREXT.
EXIT.
*****************************************************************
* サブモジュールNO:(2.1) *
* サブモジュール名:##WO1##編集出力処理 *
* 処理概要 :レコード編集・出力処理 *
*****************************************************************
2100W010UTSOR SECTION.
*
MOVE RO1INNREC TO W010UTREC.
MOVE R02INNREC TO W010UTREC.
*
WRITE WO1OUTREC.
ADD 1 TO CUN-WO1OUT.
2100W010UTSOREXT.
EXIT.
*****************************************************************
* サブプログラムNO:(2.2) *
* サブプログラム名:##WO2#を編集出力処理 *
* 処理概要 :レコード編集・出力処理 *
*****************************************************************
2200W020UTSOR SECTION.
*
MOVE RO1INNREC TO W020UTREC.
*
WRITE WO2OUTREC.
ADD 1 TO CUN-WO2OUT.
*
2200W020UTSOREXT.
EXIT.
*****************************************************************
* サブプログラムNO:(2.3) *
* サブプログラム名:##WO3#を編集出力処理 *
* 処理概要 :レコード編集・出力処理 *
*****************************************************************
2300W030UTSOR SECTION.
*
MOVE R02INNREC TO W03OUTREC.
*
WRITE WO3OUTREC.
ADD 1 TO CUN-WO3OUT.
*
2300W030UTSOREXT.
EXIT.
*****************************************************************
* サブモジュールNO:(3.0) *
* サブモジュール名:終了処理 *
* 処理概要 :ファイルクローズ・件数と終了メッセージ出力 *
*****************************************************************
3000STPSOR SECTION.
*
*** 入出力ファイルCLOSE
CLOSE R01INNFIL
R02INNFIL
W010UTFIL
W020UTFIL
W030UTFIL.
*
*** 入出力ファイル件数出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGIINKES TO M00MSGCOD.
MOVE 'SAN01R01' TO M00UMKDATS22(1).
MOVE CUN-RO1INN TO M00UMKDATS22(2).
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGIINKES TO M00MSGCOD.
MOVE 'SAN01R02' TO M00UMKDATS22(1).
MOVE CUN-R02INN TO M00UMKDATS22(2).
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGIINKES TO M00MSGCOD.
MOVE 'SAN01W01' TO M00UMKDATS22(1).
MOVE CUN-WO1OUT TO M00UMKDATS22(2).
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGIINKES TO M00MSGCOD.
MOVE 'SAN01W02' TO M00UMKDATS22(1).
MOVE CUN-WO2OUT TO M00UMKDATS22(2).
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGIINKES TO M00MSGCOD.
MOVE 'SAN01W03' TO M00UMKDATS22(1).
MOVE CUN-WO3OUT TO M00UMKDATS22(2).
PERFORM 4000MSGOUTSOR.
*
*** 終了メッセージ出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGFIN TO M00MSGCOD.
PERFORM 4000MSGOUTSOR.
*
3000STPSOREXT.
EXIT.
*****************************************************************
* サブプログラムNO:(4.0) *
* サブプログラム名:メッセージ編集出力処理 *
* 処理概要 :メッセージ編集出力サブPGM呼出 *
*****************************************************************
4000MSGOUTSOR SECTION.
*
MOVE CNS-KN0002 TO M00KNOCOD
MOVE CNS-KN0002 TO M00SYUCOD.
MOVE CNS-PRGIDX TO M00PRGIDX.
CALL 'MSG0SRP' USING M00MSGPAR.
*
4000MSGOUTSOREXT.
EXIT.
*****************************************************************
* サブプログラムNO:(9.9) *
* サブプログラム名:ABEND処理 *
* 処理概要 :ABENDサブPGM呼出 *
*****************************************************************
9999ABDSOR SECTION.
*
MOVE CNS-ABD999 TO M00ABDCOD.
CALL 'END01TO' USING M00MSGPAR.
*
9999ABDSOREXT.
EXIT.
+141
View File
@@ -0,0 +1,141 @@
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | サンプルシステム |
| 2 | プログラムID | SAN01MAT |
| 3 | プログラム名 | XXXXXX処理 |
| 4 | PGMパターン | マッチング(1:1) |
| 5 | 機能概要 | マッチング(1:1)を行う。 |
| 6 | | マッチの場合、ファイルW01を出力する。 |
| 7 | | ファイルR01のみの場合ファイルW02を出力する。 |
| 8 | | ファイルR02のみの場合ファイルW03を出力する。 |
※PGMパターン:マッチング(1:1、1:N、M:N)、レイアウト編集のみ(GETPUT)、項目チェック、振り分け、キーブレイク、キーブレイク(集計、集約)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | ファイルR01 | キー項目A001>A002>A003で昇順でソート |
| 2 | ファイルR02 | キー項目A001>A002>A003で昇順でソート |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | ファイルR01 | R01 | SAN01R01 | I | BBBBBFC | FB | | 120 | PS | |
| 2 | ファイルR02 | R02 | SAN01R02 | I | BBBBBFC | FB | | 120 | PS | |
| 3 | ファイルW01 | W01 | SAN01W01 | O | BBBBBFC | FB | | 120 | PS | |
| 4 | ファイルW02 | W02 | SAN01W02 | O | BBBBBFC | FB | | 120 | PS | |
| 5 | ファイルW03 | W03 | SAN01W03 | O | BBBBBFC | FB | | 120 | PS | |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | ファイルR01 | A001>A002>A003(重複NG | A001>A002>A003 |
| 2 | ファイルR02 | A001>A002>A003(重複NG | A001>A002>A003 |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | 入力件数表示/シーケンスチェック処理SUB | CHK01SRP | S01MSGAC |
| 2 | 運用日取得SUB | DAT01S0 | D01010AC |
| 3 | メッセージ編集出力処理SUB | MSG0SRP | MSG000AC |
| 4 | ABEND処理SUB | END01TO | MSG000AC |
---
## 処理詳細
```
1.初期処理(1000ITTSOR
1-1.開始メッセージ出力
【メッセージ編集】
メッセージ番号:1(開始メッセージ)
1-2.コンパイル日時出力
【メッセージ編集】
メッセージ番号:33(コンパイル日時)
PARM1:コンパイル日時
PARM2'COMPILED'
1-3.ワークエリアの初期化
1-4.運用日取得SUB(DAT01S0)により運用日を取得する。
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
【メッセージ編集】
メッセージ番号:5(サブエラー)
PARM1'DAT01SO'
PARM2:復帰コード
【ABEND処理SUB】
ABENDコード:999
1-5.使用ファイルのオーブン
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
1-7.R02を読み込む。(1200R02INNSOR)(1回目)
2.主処理(2000MAJSOR)(R01、R02を全て読み終えるまで下記を繰り返す)
2-1.マッチの場合
2-1-1.R01をW01にそのまま出力する。(2100W010UTSOR)
*出力編集(W01)を参照
2-1-2.R01を読み込む。(1100R01INNSOR)(2件目以降)
2-1-3.R02を読み込む。(1200R02INNSOR)(2件目以降)
2-2.R01のみの場合
2-2-1.R01をW02にそのまま出力する。(2200W020UTSOR)
*出力編集(W02)を参照
2-2-2.R01を読み込む。(1100R01INNSOR)(2件目以降)
2-3.R02のみの場合
2-3-1.R02をW03にそのまま出力する。(2300W030UTSOR)
*出力編集(W03)を参照
2-3-2.R02を読み込む。(1200R02INNSOR)(2件目以降)
3.終了処理(3000STPSOR
3-1.入出力ファイルのクローズ
3-2.入出力件数出力メッセージ出力
【入力メッセージ編集】
メッセージ番号:6(入力件数メッセージ)
PARM1:当該入力ファイルのDD名
PARM2:当該入力ファイルの件数
【出力メッセージ編集】
メッセージ番号:7(出力件数メッセージ)
PARM1:当該出力ファイルのDD名
PARM2:当該出力ファイルの件数
3-3.終了メッセージ出力
【メッセージ編集】
メッセージ番号:2(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル1W01
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | A001 | R01.同項目を設定 | |
| 2 | A002 | R01.同項目を設定 | |
| 3 | A003 | R01.同項目を設定 | |
| 4 | … | | |
| 5 | A020 | R01.同項目を設定 | |
### 出力ファイル2W02
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | A001 | R01.同項目を設定 | |
| 2 | A002 | R01.同項目を設定 | |
| 3 | A003 | R01.同項目を設定 | |
| 4 | … | | |
| 5 | A020 | R01.同項目を設定 | |
### 出力ファイル3W03
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | A001 | R02.同項目を設定 | |
| 2 | A002 | R02.同項目を設定 | |
| 3 | A003 | R02.同項目を設定 | |
| 4 | … | | |
| 5 | A020 | R02.同項目を設定 | |
+142
View File
@@ -0,0 +1,142 @@
# ファイル定義書
## 変更履歴
| No | 変更内容 | 担当者 | 変更日 | 承認者 | 備考 |
|----|---------|--------|--------|--------|------|
| 1 | 新規作成 | AI | YYYY/MM/DD | | |
## Layout(レコードレイアウト)
### ファイル基本情報
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|-----------|---------|------|-------------|-----------|
| | | PS | FB | |
### レコード定義
| No | レベル | 項目名 | 項目名(英字名) | 属性 | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|----|--------|--------|---------------|------|---------|--------|---------|-----------|-------------|------|
| 1 | | | | | | | | | | |
| 2 | | | | | | | | | | |
| 3 | | | | | | | | | | |
| 4 | | | | | | | | | | |
---
## 記載説明
| 項目 | 説明 |
|------|------|
| 媒体 | ファイル(PS)の場合は"PS"と記録 |
| レコード形式 | 固定長(FB)または可変長(VB)と記録 |
| レコード長 | レコード長は全項目のバイト数を合計して記録。FDのRECORD SIZEと一致させること。REDEFINES項目は合計に含まない。 |
| レベル | レベル番号の定義:01, 03, 05, 07, 09... と飛び飛びのレベル番号とする。同じレベル番号は兄弟関係となる。 |
| 属性(PIC TYPE) | 属性(TYPE)とバイト数を記入するものとする。原則PIC記法で記録。COBOL記述に沿ったシートの記載内容に準拠。 |
## COBOLデータ型一覧
| No | COBOL記述 | 略記法 | バイト数 | 説明 | 日本語説明 | 例 | バイト数(例) |
|----|-----------|--------|---------|------|-----------|-----|-------------|
| 1 | PIC X(n) | X(n) | n | 英数字 | 固定長英数字 | X(10) | 10 |
| 2 | PIC G(n) | G(n) | n×2 | DBCS文字 | ダブルバイト文字(日本語) | G(20) | 40 |
| 3 | PIC 9(n) | 9(n) | n | 数字・10進(符号無) | 符号無し整数 | 9(7) | 7 |
| 4 | PIC S9(n) | S9(n) | n | 数字・10進(符号有) | 符号付き整数 | S9(7) | 7 |
| 5 | PIC S9(n)V9(m) | S9(n)V9(m) | n+m | 数字・10進(符号有・小数) | 暗黙小数点付き(DISPLAY) | S9(7)V9(2) | 9 |
| 6 | PIC S9(n) COMP-3 | S9(n) COMP-3 | INT((n+2)/2) | パック10進(符号有) | 内部10進数 | S9(7) COMP-3 | 4 |
| 7 | PIC 9(n) COMP-3 | 9(n) COMP-3 | INT((n+1)/2) | パック10進(符号無) | 内部10進数(符号無) | 9(7) COMP-3 | 4 |
| 8 | PIC S9(n)V9(m) COMP-3 | S9(n)V9(m) COMP-3 | INT((n+m+2)/2) | パック10進(符号有・小数) | 暗黙小数点付きCOMP-3 | S9(7)V9(2) COMP-3 | 5 |
| 9 | PIC S9(4) COMP | S9(4) COMP | 2 | 2進(2バイト) | 半語長バイナリ | S9(4) COMP | 2 |
| 10 | PIC S9(9) COMP | S9(9) COMP | 4 | 2進(4バイト) | 全語長バイナリ | S9(9) COMP | 4 |
| 11 | PIC S9(18) COMP | S9(18) COMP | 8 | 2進(8バイト) | 2語長バイナリ | S9(18) COMP | 8 |
| 12 | PIC S9(n)V9(m) COMP | S9(n)V9(m) COMP | n+m≦4→2, ≦9→4, ≦18→8 | 2進(符号有・小数) | 暗黙小数点付きCOMP | S9(9)V9(2) COMP | 8 |
| 13 | PIC S9(n) BINARY | S9(n) BINARY | n≦4→2, n≦9→4, n≦18→8 | 2進(バイナリ) | COMPと同一 | S9(15) BINARY | 8 |
| 14 | ZZZ9 | ZZZ9 | Zの数+9の数 | 数字編集パターン | ゼロ抑制編集 | ZZZZ9 | 5 |
## COBOL記述例
### 例1: 基本レイアウト
COBOL定義:
```
01 TEST-RECORD.
03 FIELD-1 PIC X(10).
03 FIELD-2 PIC S9(7) COMP-3.
03 FIELD-3 PIC 9(4).
03 FIELD-4 PIC S9(9) COMP.
03 FILLER PIC X(5).
```
FD記述:
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
| 1 | 01 | テストレコード | TEST-RECORD | | | | 1 | | | |
| 2 | 03 | フィールド1 | FIELD-1 | X | 10 | | 1 | | TEST-RECORD | |
| 3 | 03 | フィールド2 | FIELD-2 | S9(7) COMP-3 | 5 | | 11 | | TEST-RECORD | |
| 4 | 03 | フィールド3 | FIELD-3 | 9(4) | 4 | | 16 | | TEST-RECORD | |
| 5 | 03 | 予約 | FILLER | X(5) | 5 | | 20 | | TEST-RECORD | |
### 例2: REDEFINESを使用する場合
COBOL定義:
```
01 REDEF-REC.
03 BASE-FIELD PIC X(10).
03 REDEF-FIELD REDEFINES BASE-FIELD.
05 INFO-1 PIC X(5).
05 INFO-2 PIC X(5).
```
FD記述:
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
| 1 | 01 | REDEFINESレコード | REDEF-REC | | | | 1 | | | |
| 2 | 03 | ベースフィールド | BASE-FIELD | X(10) | 10 | | 1 | | REDEF-REC | |
| 3 | 03 | 再定義フィールド | REDEF-FIELD | | | | 11 | BASE-FIELD | REDEF-REC | |
| 4 | 05 | 情報1 | INFO-1 | 9(5) | 5 | | 11 | | REDEF-REC | |
| 5 | 05 | 情報2 | INFO-2 | 9(5) | 5 | | 16 | | REDEF-REC | |
### 例3: OCCURSを使用する場合
COBOL定義:
```
01 OCCURS-REC.
03 OCCURS-ITEM OCCURS 3.
05 SUB-1 PIC X(5).
03 AFTER-ITEM PIC 9(3).
```
FD記述:
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
| 1 | 01 | OCCURSレコード | OCCURS-REC | | | | 1 | | | |
| 2 | 03 | OCCURS項目 | OCCURS-ITEM | | | 3 | 1 | | OCCURS-REC | |
| 3 | 05 | サブ項目1 | SUB-1 | X(5) | 5 | | 1 | | OCCURS-REC | |
| 4 | 03 | OCCURS後 | AFTER-ITEM | 9(3) | 3 | | 16 | | OCCURS-REC | |
### 例4: OCCURSの多重入れ子
COBOL定義:
```
01 OCCURS-MULTI-REC.
03 GRP-ITEM OCCURS 3.
05 SUB1 PIC X(5).
05 SUB2 OCCURS 4.
07 SUB2-DATA PIC 9(3).
03 AFTER-ITEM PIC 9(3).
```
FD記述:
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
| 1 | 01 | OCCURS多重入れ子レコード | OCCURS-MULTI-REC | | | | 1 | | | |
| 2 | 03 | グループ項目 | GRP-ITEM | | | 3 | 1 | | OCCURS-MULTI-REC | |
| 3 | 05 | サブ項目1 | SUB-1 | X(5) | 5 | | 1 | | OCCURS-MULTI-REC | |
| 4 | 05 | サブ項目2 | SUB-2 | | | 4 | 6 | | OCCURS-MULTI-REC | |
| 5 | 07 | サブ項目2データ | SUB2-DATA | 9(3) | 3 | | 6 | | OCCURS-MULTI-REC | |
| 6 | 03 | OCCURS後 | AFTER-ITEM | 9(3) | 3 | | 52 | | OCCURS-MULTI-REC | |
+145
View File
@@ -0,0 +1,145 @@
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | SSSSシステム |
| 2 | プログラムID | SSSnnFFF |
| 3 | プログラム名 | XXXXXX処理 |
| 4 | PGMパターン | |
| 5 | 機能概要 | |
| 6 | | |
| 7 | | |
| 8 | | |
※PGMパターン:マッチング(1:1、1:N、M:N)、レイアウト編集のみ(GETPUT)、項目チェック、振り分け、キーブレイク、キーブレイク(集計、集約)、DB更新
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | | |
| 2 | | |
### 使用ファイル一覧
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
| 1 | | | | | | | | | | |
| 2 | | | | | | | | | | |
| 3 | | | | | | | | | | |
| 4 | | | | | | | | | | |
| 5 | | | | | | | | | | |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------------|
| 1 | | | |
| 2 | | | |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | | | |
| 2 | | | |
| 3 | | | |
| 4 | | | |
---
## 処理詳細
```
大項目(1桁):「1.」「2.」「3.」のいずれか
中項目(2桁):対応するパラグラフ名を括弧書きで併記
小項目(3桁):個別処理の説明
詳細:メッセージ番号、PARM、条件分岐、ABENDコード等
```
### 処理詳細フォーマット(記入例)
```
1.初期処理 (1000ITTSOR)
1-1.開始メッセージ出力
メッセージ番号: 1(開始メッセージ)
1-2.コンパイル日時出力
メッセージ番号: 33(コンパイル日時)
PARM1: コンパイル日時
PARM2: 'COMPILED'
1-3.ワークエリア初期化
1-4.サブプログラム呼出(各種初期設定)
戻りコードがZEROの場合、正常継続。
それ以外の場合、メッセージ出力後、ABEND処理へ遷移。
メッセージ番号: 5(サブエラー)
PARM1: 呼出プログラム名
PARM2: 戻りコード
ABENDコード: 999
1-5.入出力ファイルOPEN
1-6.入力ファイル1を読み込み。
1-7.入力ファイル2を読み込み。
2.主処理 (2000MAJSOR)(全入力ファイルを読み切り終了するまで繰り返し)
2-1.条件Aの場合
2-1-1.出力ファイル1に出力する。
出力後、出力ファイル1のカウンタを加算
2-1-2.入力ファイル1を読み込み。
2-2.条件Bの場合
2-2-1.出力ファイル2に出力する。
出力後、出力ファイル2のカウンタを加算
2-2-2.入力ファイル2を読み込み。
2-3.条件Cの場合
2-3-1.出力ファイル3に出力する。
出力後、出力ファイル3のカウンタを加算
2-3-2.入力ファイル2を読み込み。
3.終了処理 (3000STPSOR)
3-1.入出力ファイルCLOSE
3-2.入出力ファイル件数出力
メッセージ番号: 6(入力件数)
PARM1: 該当ファイルDD名
PARM2: 該当ファイル件数
メッセージ番号: 7(出力件数)
PARM1: 該当ファイルDD名
PARM2: 該当ファイル件数
3-3.終了メッセージ出力
メッセージ番号: 2(終了メッセージ)
```
---
## 出力レコード定義
出力ファイルごとに以下の形式で記述する。
### 出力ファイル1(例: W01)
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | | | |
| 2 | | | |
| 3 | | | |
| 4 | | | |
| 5 | | | |
### 出力ファイル2(例: W02)
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | | | |
| 2 | | | |
| 3 | | | |
| 4 | | | |
| 5 | | | |
### 出力ファイル3(例: W03)
| No | 項目名 | 設定元 | 備考 |
|----|--------|--------|------|
| 1 | | | |
| 2 | | | |
| 3 | | | |
| 4 | | | |
| 5 | | | |