# バッチ設計書（プログラム仕様書）【KS60350P】ＰＯＳメートマスター　ＶＳ　管理台帳

| 項目 | 内容 |
|---|---|
| プログラムID | KS60350P（PL/I プロシージャ名：KS60350） |
| プログラム名 | ＰＯＳメートマスター　ＶＳ　管理台帳 |
| 帳票名 | ＰＯＳメイトマスター　アンマッチリスト（見出し定数 MI102 より） |
| 業務ID | KS60350P |
| パターンID | PPB0010P（ファイルのＩＯ（ＳＩＮＧＬＥ）　ＰＬ／Ｉ）／パターン作成 87/04/03、部品 PBB0014P |
| 言語・形態 | PL/I バッチ（OPTIONS(MAIN)）、帳票出力 |
| 使用JOB（参考） | DAIMNT3J　ステップ KS60350P（JOBフロー No.19「ＰＯＳメート　請求額エラーリスト処理」） |
| 作成元 | ソース `KS60350P.pl1`、参考資料 `KS60350P.xlsx`（現行解析資料） |
| 作成日 | 2026/10/26 |

---

## 1. 改訂履歴

| 改定日 | 改定者 | 改定箇所 | 改定内容 |
|---|---|---|---|
| 2026/10/26 |  | 全体 | PL/Iソースより新規作成 |

---

## 2. プログラム概要

### 2.1 機能概要

ＰＯＳメイト請求額マスター（ＰＯＳメート・ＦＡＸサービス）と管理台帳をマッチングし、締日が違うものをアンマッチリストに出力する。

### 2.2 処理概要

1. ＰＯＳメート・ＦＡＸサービス（INFILE）を先頭から1件ずつ順次読み込む。
2. 荷主コードをキーに、管理台帳（VKKANMS）をキー読込する。管理台帳に該当がない荷主は何もせず次のレコードへ進む（リストには出力しない）。
3. 管理台帳の締日情報（6件）のうち、正式仮区分＝1（本締）の締日と、ＰＯＳメート側の請求締日（履歴テーブル1件目）を比較する。
4. 一致する締日が1件もない場合、ＰＯＳメート側と管理台帳側の内容を2行1組でアンマッチリストに印字する。18件ごとに改ページして見出しを印字する。
5. 終了時に入力件数・出力件数を表示する。

### 2.3 入出力概要図

```mermaid
flowchart LR
    POS[("INFILE<br/>ＰＯＳメート・ＦＡＸサービス<br/>VK32.SSPOSFAX.DTMASTER<br/>VSAM")]
    KAN[("VKKANMS<br/>管理台帳<br/>VK47.KANBASED.DTMASTER<br/>VSAM KSDS 可変長 1200／1500")]
    PGM["KS60350P<br/>ＰＯＳメートマスター ＶＳ 管理台帳"]
    LST[/"OUTFILE<br/>ＰＯＳメイトマスター アンマッチリスト<br/>SYSOUT=I（FA／165）"/]
    SYSOUT[/"SYSOUT（DISPLAY）<br/>入力件数・出力件数"/]

    POS -- "順次読込" --> PGM
    KAN -- "キー読込（荷主コード）" --> PGM
    PGM -- "帳票出力" --> LST
    PGM -.-> SYSOUT
```

---

## 3. 入出力ファイル一覧

| No | DD名 | ファイル名称 | 入出力 | 編成 | アクセス | レコード長 | エリア | レイアウト（INCLUDE） | キー | 定義行 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | INFILE | ＰＯＳメート・ＦＡＸサービス ※1 | 入力 | VSAM | 順次読込（KEYED SEQUENTIAL） | 120（読込エリア長） | INAREA | SSPOSFAX | － | 22–23 |
| 2 | VKKANMS | 管理台帳 | 入力 | VSAM KSDS | キー指定読込（KEYED SEQUENTIAL ＋ KEY指定） | 可変長 1200／1500（読込エリア 1500） | VSAREA | KANBASED | 登録顧客コード（7桁）← 荷主コード | 24–25 |
| 3 | OUTFILE | （名称なし）※2 | 出力 | 順次（SYSOUT） | 順次書出 | 165（1バイト目 ASA 制御文字） | OUTAREA ／ MI01〜MI03 ／ DT01〜DT02 | なし（プログラム内定義） | － | 26 |

※1 名称は参考資料（入出力ファイル一覧の INCLUDE 名）による。ソースコメント（8行）では「ＰＯＳメイト請求額マスター」と記載。
※2 参考資料に名称の記載なし。帳票タイトルは「ＰＯＳメイトマスター　アンマッチリスト」。

参考：JOB DAIMNT3J（ステップ KS60350P）での割当て

| DD名 | DSN／出力先 | 属性 | 備考 |
|---|---|---|---|
| INFILE | VK32.SSPOSFAX.DTMASTER | DISP=SHR | |
| VKKANMS | VK47.KANBASED.DTMASTER | DISP=SHR（KEYS(7 0)、RECSZ(1200 1500)） | 同JOBの前ステップ（No.16〜17）で再作成 |
| OUTFILE | SYSOUT=I | DCB=(RECFM=FA,LRECL=165) | |

---

## 4. 処理詳細

### 4.1 初期処理

| 項番 | 処理内容 | 条件・補足 | 行番号 |
|---|---|---|---|
| 1.1 | ＰＯＳメート・ＦＡＸサービス（INFILE）のファイル終了時、終了スイッチ（EOF_SW）を `'0'B`（終了）にする。 | ENDFILE条件 | 119–122 |
| 1.2 | 管理台帳（VKKANMS）のキーエラー時、読込キー（VKEY）に HIGH(7) を設定する（管理台帳なしの目印）。 | KEY条件。ONCODE の判定はない | 123–126 |
| 1.3 | INFILE・VKKANMS・OUTFILE をオープンする。 | | 130–132 |
| 1.4 | ＰＯＳメート・ＦＡＸサービスを1件読み込む。 | この読込は入力件数に加算しない | 133 |
| 1.5 | 処理日（DATEX）にシステム日時（DATETIME）の3桁目から6桁（YYMMDD）を設定する。 | 見出しの日付に使用 | 134 |

### 4.2 主処理（ＰＯＳメート・ＦＡＸサービスが終了するまで繰返し：EOF_SW＝`'1'B` の間）

| 項番 | 処理名 | 処理内容 | 条件・補足 | 行番号 |
|---|---|---|---|---|
| 2.1 | キー設定 | 荷主コード（POSQVKEY）を読込キー（VKEY）に設定する。 | | 139 |
| 2.2 | 管理台帳 読込 | 管理台帳（VKKANMS）を読込キーでキー読込する。 | 該当なし時は1.2により VKEY＝HIGH(7) | 140 |
| 2.3 | 管理台帳 存在判定 | VKEY が HIGH(7) 以外（管理台帳あり）の場合のみ 2.4〜2.11 を行う。HIGH(7)（管理台帳なし）の場合は 2.12 へ進む。 | 管理台帳なしの荷主は出力しない | 141, 192 |
| 2.4 | 処理フラグ初期化 | 処理フラグ（T）に 0 を設定する。 | | 144 |
| 2.5 | 締日照合 | I＝1〜6 について、締日（KASFSSIX(I)）＝請求締日（POSQSQDD(1)）かつ 正式仮区分（KASFSSAK(I)）＝1 の要素があれば、処理フラグ（T）に 1 を設定する。 | ＰＯＳ側は履歴テーブルの1件目のみ。管理台帳側は本締（正式仮区分＝1）のみ | 145–149 |
| 2.6 | アンマッチ判定 | 処理フラグ（T）＝0（本締の締日と一度も一致しない）の場合のみ 2.7〜2.11 を行う。 | T＝1 は出力なし | 150, 190 |
| 2.7 | 改ページ | 書き込み回数（LCNT）が18以上の場合、ページ番号（MIPA）に1を加え、見出し日付（DATEP）に処理日（DATEN）を設定し、見出し1〜3行目（MI01・MI02・MI03）を出力して、LCNT を 0 にする。 | LCNT の初期値は51のため、最初の明細の前に必ず見出しを出力 | 153–166 |
| 2.8 | 書き込み回数加算 | 書き込み回数（LCNT）に1を加える。 | | 167 |
| 2.9 | 明細1行目 編集・出力 | 明細1行目（DT01：ＰＯＳ側）に 未収扱い店所・荷主コード・区分・請求締日（1件目）・入力更新年月日 を編集し、出力する。 | 5.2 参照 | 168–174 |
| 2.10 | 明細2行目 編集・出力 | 明細2行目（DT02：管理台帳側）に、正式仮区分＝1 の要素の締日（DTSM(I)）、契約更新年月日（年／月／日）、顧客略名（カナ）を編集し、出力する。 | 正式仮区分≠1 の要素は締日欄を設定しない（8章 No.1） | 175–187 |
| 2.11 | 出力件数加算 | 出力件数（OTCNT）に1を加える。 | 明細2行で1件 | 188 |
| 2.12 | 次レコード読込 | 次のＰＯＳメート・ＦＡＸサービスを読み込み、入力件数（INCNT）に1を加える。 | ファイル終了時も加算後にループ終了（8章 No.6） | 193–194 |

### 4.3 終了処理

| 項番 | 処理内容 | 条件・補足 | 行番号 |
|---|---|---|---|
| 3.1 | INFILE・VKKANMS・OUTFILE をクローズする。 | | 199–201 |
| 3.2 | 入力件数・出力件数を表示する。 | 「`## KS60350P INCNT   = n`」「`## KS60350P OTCNT   = n`」 | 202–203 |
| 3.3 | プログラムを終了する。 | リターンコードの設定なし | 207 |

### 4.4 処理フロー

```mermaid
flowchart TD
    START(["開始"]) --> ON["ON条件を設定<br/>INFILE 終了／VKKANMS キーエラー"]
    ON --> OPEN["INFILE・VKKANMS・OUTFILE をオープン"]
    OPEN --> READ1["ＰＯＳメート・ＦＡＸサービス（INFILE）を読込<br/>処理日 ← システム日付（YYMMDD）"]
    READ1 --> EOF{"INFILE<br/>終了？"}
    EOF -- "No" --> KEY["読込キー ← 荷主コード<br/>管理台帳（VKKANMS）をキー読込"]
    KEY --> EX{"管理台帳あり？<br/>（読込キー ≠ HIGH(7)）"}
    EX -- "No" --> READ2
    EX -- "Yes" --> T0["処理フラグ ← 0"]
    T0 --> CHK["締日照合（I＝1〜6）<br/>締日(I) ＝ 請求締日(1)<br/>かつ 正式仮区分(I) ＝ 1 なら<br/>処理フラグ ← 1"]
    CHK --> TJ{"処理フラグ ＝ 0？<br/>（本締の締日と不一致）"}
    TJ -- "No" --> READ2
    TJ -- "Yes" --> PG{"書き込み回数<br/>≧ 18？"}
    PG -- "Yes" --> HEAD["ページ番号 ＋1<br/>見出し日付 ← 処理日<br/>見出し1〜3行目を出力<br/>書き込み回数 ← 0"]
    PG -- "No" --> DT1
    HEAD --> DT1["書き込み回数 ＋1<br/>明細1行目（ＰＯＳ側）を編集・出力"]
    DT1 --> DT2["明細2行目（管理台帳側）を編集・出力<br/>締日欄は正式仮区分＝1 の要素のみ設定"]
    DT2 --> OC["出力件数 ＋1"]
    OC --> READ2["次の INFILE を読込<br/>入力件数 ＋1"]
    READ2 --> EOF
    EOF -- "Yes" --> CLOSE["3ファイルをクローズ"]
    CLOSE --> DISP[/"入力件数・出力件数を表示"/]
    DISP --> FIN(["終了"])
```

#### 締日照合と明細2行目の締日欄編集

```mermaid
flowchart TD
    S(["締日照合 開始"]) --> INIT["処理フラグ ← 0<br/>I ← 1"]
    INIT --> C1{"締日(I) ＝ 請求締日(1)<br/>かつ 正式仮区分(I) ＝ 1？"}
    C1 -- "Yes" --> F1["処理フラグ ← 1"]
    C1 -- "No" --> NX
    F1 --> NX{"I ＜ 6？"}
    NX -- "Yes" --> INC["I ＋1"]
    INC --> C1
    NX -- "No" --> J{"処理フラグ ＝ 0？"}
    J -- "No" --> SKIP(["出力なし（次レコードへ）"])
    J -- "Yes" --> E1["I ← 1"]
    E1 --> C2{"正式仮区分(I) ＝ 1？"}
    C2 -- "Yes" --> SET["明細の締日欄(I) ← 締日(I)"]
    C2 -- "No" --> KEEP["何もしない<br/>（前回の値が残る）"]
    SET --> N2{"I ＜ 6？"}
    KEEP --> N2
    N2 -- "Yes" --> INC2["I ＋1"]
    INC2 --> C2
    N2 -- "No" --> OUT(["明細2行目を出力"])
```

#### キーエラー時の処理（ON KEY 条件）

```mermaid
flowchart TD
    K(["KEY条件発生<br/>VKKANMS"]) --> SW["読込キー（VKEY） ← HIGH(7)"]
    SW --> RET(["処理続行<br/>（主処理で管理台帳なしと判定し、出力せずに次レコードへ）"])
```

---

## 5. 出力編集仕様（帳票：ＰＯＳメイトマスター　アンマッチリスト ／ OUTFILE）

### 5.1 帳票の基本仕様

| 項目 | 内容 | 行番号 |
|---|---|---|
| 帳票名 | ＰＯＳメイトマスター　アンマッチリスト | 42 |
| レコード長 | 165バイト（1バイト目は ASA 制御文字、印字部164バイト） | 38 |
| 出力単位 | アンマッチ1件につき明細2行（1行目：ＰＯＳ側、2行目：管理台帳側） | 168–187 |
| 出力順 | ＰＯＳメート・ＦＡＸサービスの読込順 | 138, 193 |
| 改ページ | 明細18件ごと（5.4 参照） | 153 |
| 合計行 | なし（件数は DISPLAY のみ） | 202–203 |
| 該当なしの場合 | 見出しを含め何も出力しない | 153 |

### 5.2 行別項目定義

位置はレコード先頭（ASA 制御文字）を1とした値。出力エリアの各項目は参考資料に日本語名称の記載がないため「（名称なし）」とし、内容欄に意味を記載する。

**見出し1行目（MI01）**（定義行 39–48、出力行 158–159）

| 変数名 | 日本語名称 | 位置 | 長さ | 属性 | 内容・編集元 |
|---|---|---|---|---|---|
| MI101 | （名称なし） | 1 | 1 | CHAR | `'1'`（ASA：改ページ） |
| MI102 | （名称なし） | 2 | 60 | CHAR（混在文字） | `' (KS60350P)  *** ＰＯＳメイトマスター　アンマッチリスト***'`（タイトル） |
| MI103 | （名称なし） | 62 | 10 | CHAR | 空白 |
| DATEP | （名称なし） | 72 | 8 | PIC'99/99/99' | 処理日（DATEN：YY/MM/DD） |
| MI104 | （名称なし） | 80 | 74 | CHAR | 空白 |
| MI105 | （名称なし） | 154 | 6 | CHAR | `'PAGE :'` |
| MIPA | （名称なし） | 160 | 4 | PIC'ZZZ9' | ページ番号 |
| MI106 | （名称なし） | 164 | 2 | CHAR | 空白 |

**見出し2行目（MI02）**（定義行 49–55、出力行 160–161）

| 変数名 | 日本語名称 | 位置 | 長さ | 属性 | 内容・編集元 |
|---|---|---|---|---|---|
| MI201 | （名称なし） | 1 | 1 | CHAR | `'0'`（ASA：1行空けて印字） |
| MI202 | （名称なし） | 2 | 55 | CHAR（混在文字） | `' T-CD   NI-CODE  KB 締日 … 更新日'`（ＰＯＳ側の項目見出し） |
| MI203 | （名称なし） | 57 | 109 | CHAR（混在文字） | `'（ＰＯＳ）'` |

**見出し3行目（MI03）**（定義行 56–62、出力行 162–163）

| 変数名 | 日本語名称 | 位置 | 長さ | 属性 | 内容・編集元 |
|---|---|---|---|---|---|
| MI301 | （名称なし） | 1 | 1 | CHAR | 空白（ASA：改行して印字） |
| MI302 | （名称なし） | 2 | 55 | CHAR（混在文字） | `'… 締日 … 更新日'`（管理台帳側の項目見出し） |
| MI303 | （名称なし） | 57 | 109 | CHAR（混在文字） | `'（管理台帳）  NI-NAME'` |

**明細1行目（DT01）：ＰＯＳ側**（定義行 64–75、編集行 168–173、出力行 174）

| 変数名 | 日本語名称 | 位置 | 長さ | 属性 | 見出し | 内容・編集元 |
|---|---|---|---|---|---|---|
| DT101 | （名称なし） | 1 | 2 | CHAR | | `'0'`＋空白（ASA：1行空けて印字） |
| DTTNCD | （名称なし） | 3 | 4 | CHAR | T-CD | 未収扱い店所（POSQTNCD） |
| DT102 | （名称なし） | 7 | 3 | CHAR | | 空白 |
| DTNICD | （名称なし） | 10 | 7 | CHAR | NI-CODE | 荷主コード（POSQVKEY） |
| DT103 | （名称なし） | 17 | 3 | CHAR | | 空白 |
| DTKUBN | （名称なし） | 20 | 1 | PIC'(1)9' | KB | 区分（POSFAXKB）（1:POSﾒｰﾄ 2:FAXｻｰﾋﾞｽ 3:ｻﾎﾟｰﾄII） |
| DT104 | （名称なし） | 21 | 3 | CHAR | | 空白 |
| DTSIME | （名称なし） | 24 | 2 | PIC'ZZ' | 締日 | 請求締日（POSQSQDD(1)）。ゼロサプレス |
| DT105 | （名称なし） | 26 | 23 | CHAR | | 空白 |
| DTYMD1 | （名称なし） | 49 | 8 | PIC'99/99/99' | 更新日 | 入力更新年月日（POSQIYMD） |
| DT106 | （名称なし） | 57 | 109 | CHAR | | 空白 |

**明細2行目（DT02）：管理台帳側**（定義行 76–87、編集行 175–186、出力行 187）

| 変数名 | 日本語名称 | 位置 | 長さ | 属性 | 見出し | 内容・編集元 |
|---|---|---|---|---|---|---|
| DT201 | （名称なし） | 1 | 21 | CHAR | | 空白（1バイト目は ASA：改行して印字） |
| DTSM(1〜6) | （名称なし） | 22 | 4×6＝24 | PIC'ZZZZ' | 締日 | 締日（KASFSSIX(I)）。正式仮区分（KASFSSAK(I)）＝1 の要素のみ設定。初期値なし |
| DT202 | （名称なし） | 46 | 3 | CHAR | | 空白 |
| DTYY2 | （名称なし） | 49 | 2 | PIC'99' | 更新日 | 契約更新年月日の年（KAHNKMYY） |
| DTSP1 | （名称なし） | 51 | 1 | CHAR | | `'/'` |
| DTMM2 | （名称なし） | 52 | 2 | PIC'99' | | 契約更新年月日の月（KAHNKMMM） |
| DTSP2 | （名称なし） | 54 | 1 | CHAR | | `'/'` |
| DTDD2 | （名称なし） | 55 | 2 | PIC'99' | | 契約更新年月日の日（KAHNKMDD） |
| DT203 | （名称なし） | 57 | 16 | CHAR | | 空白 |
| DTNAM | （名称なし） | 73 | 14 | CHAR | NI-NAME | 顧客略名（カナ）（KATNRCNM） |
| DT204 | （名称なし） | 87 | 79 | CHAR | | 空白 |

- 見出しの日本語部分はシフトコード（SO／SI 各1バイト）を含む混在文字定数（接尾辞 M）で定義されている。
- 各行とも OUTAREA（CHAR(165)）に STRING 組込み関数で転送してから出力する（158, 160, 162, 173, 186）。

### 5.3 印字イメージ

1行目・2行目はカラム位置（ASA 制御文字を1桁目とする）。1桁目は ASA 制御文字そのものを示す。空行は ASA `'0'` による1行空け。全角文字は2桁、シフトコードは空白1桁で表示している。最後の2行は印字例。

```
         1         2         3         4         5         6         7         8         9         0         1         2         3         4         5         6
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
1 (KS60350P)  ***  ＰＯＳメイトマスター　アンマッチリスト ***          YY/MM/DD                                                                          PAGE :ZZZ9

0 T-CD   NI-CODE  KB  締日                       更新日  （ＰＯＳ）
                      締日                       更新日  （管理台帳）   NI-NAME

0 XXXX   XXXXXXX   9   ZZ                       99/99/99
                     ZZZZZZZZZZZZZZZZZZZZZZZZ   99/99/99                XXXXXXXXXXXXXX

0 1234   1234567   1   20                       26/10/20
                       20  25  99               26/04/01                ｻﾝﾌﾟﾙｼｮｳｼﾞ
```

- 明細1行目の「締日」はＰＯＳ側の請求締日、「更新日」は入力更新年月日。
- 明細2行目の「締日」欄は締日（KASFSSIX）を4桁×6欄で印字する（正式仮区分＝1 の欄のみ設定）。「更新日」は管理台帳の契約更新年月日。

### 5.4 改ページ

| 項目 | 内容 | 行番号 |
|---|---|---|
| 判定 | 明細を出力する直前に、書き込み回数（LCNT）≧ 18 なら改ページ | 153 |
| 改ページ時の処理 | ページ番号（MIPA）＋1、見出し日付（DATEP）← 処理日、見出し1〜3行目を出力、LCNT ← 0 | 156–164 |
| 初回 | LCNT の初期値が51のため、最初のアンマッチ明細の前に見出しを出力する | 98 |
| 1ページの構成 | 見出し（タイトル行＋空行＋見出し2行）＋明細18件（1件＝空行＋2行）＝58行 | 153–187 |
| ページ番号 | 1から開始（MIPA 初期値0に加算） | 47, 156 |

```mermaid
flowchart TD
    A(["アンマッチ明細の出力"]) --> B{"書き込み回数 ≧ 18？"}
    B -- "Yes" --> C["ページ番号 ＋1<br/>見出し日付 ← 処理日"]
    C --> D["見出し1行目（ASA '1'：改ページ）<br/>見出し2行目（ASA '0'）<br/>見出し3行目（ASA ' '）を出力"]
    D --> E["書き込み回数 ← 0"]
    B -- "No" --> F
    E --> F["書き込み回数 ＋1"]
    F --> G["明細1行目（ASA '0'）・明細2行目（ASA ' '）を出力"]
```

### 5.5 項目単位の対応表

付録A を参照。

---

## 6. メッセージ一覧（DISPLAY）

| No | メッセージ | 出力条件 | 意味 | 後続処理 | 行番号 |
|---|---|---|---|---|---|
| 1 | `## KS60350P INCNT   = `（入力件数：ZZZ,ZZZ,ZZ9） | 終了時 | ＰＯＳメート・ＦＡＸサービスの読込件数 | － | 202 |
| 2 | `## KS60350P OTCNT   = `（出力件数：ZZZ,ZZZ,ZZ9） | 終了時 | アンマッチとして印字した件数（明細2行で1件） | － | 203 |

エラーメッセージはない（キーエラーはメッセージなしで続行、その他の例外は ON ユニット未定義）。

---

## 7. 変数一覧

| No | 変数名 | 日本語名称 | 属性 | 初期値 | 用途 | 定義行 |
|---|---|---|---|---|---|---|
| 1 | INFILE | ＰＯＳメート・ＦＡＸサービス | FILE RECORD KEYED SEQUENTIAL BUFFERED INPUT ENV(VSAM) | | ＰＯＳメート・ＦＡＸサービスの順次読込 | 22–23 |
| 2 | VKKANMS | 管理台帳 | FILE RECORD KEYED SEQUENTIAL BUFFERED INPUT ENV(VSAM) | | 荷主コードによるキー読込 | 24–25 |
| 3 | OUTFILE | （名称なし） | FILE RECORD OUTPUT | | アンマッチリストの出力 | 26 |
| 4 | INAREA | （名称なし） | 構造体（SSPOSFAX）120バイト | | ＰＯＳメート・ＦＡＸサービスの読込エリア | 30–31 |
| 5 | OUTAREA | （名称なし） | CHAR(165) | | 印字行の出力エリア | 38 |
| 6 | MI01 | （名称なし） | 構造体 165バイト | 各項目 INIT | 見出し1行目（5.2参照） | 39–48 |
| 7 | MI02 | （名称なし） | 構造体 165バイト | 各項目 INIT | 見出し2行目（5.2参照） | 49–55 |
| 8 | MI03 | （名称なし） | 構造体 165バイト | 各項目 INIT | 見出し3行目（5.2参照） | 56–62 |
| 9 | DT01 | （名称なし） | 構造体 165バイト | 各項目 INIT | 明細1行目（5.2参照） | 64–75 |
| 10 | DT02 | （名称なし） | 構造体 165バイト | DTSM 以外 INIT | 明細2行目（5.2参照） | 76–87 |
| 11 | EOF_SW | （名称なし） | BIT(1) STATIC | '1'B | INFILE 終了スイッチ（'1'B：継続、'0'B：終了） | 94 |
| 12 | VKEY | （名称なし） | CHAR(7) | | 管理台帳の読込キー。キーエラー時 HIGH(7) | 97 |
| 13 | LCNT | 書き込み回数 | PIC'999' | 51 | ページ内の明細件数（18件ごとに改ページ） | 98 |
| 14 | INCNT | （名称なし） | PIC'ZZZ,ZZZ,ZZ9' | 0 | 入力件数 | 99 |
| 15 | OTCNT | （名称なし） | PIC'ZZZ,ZZZ,ZZ9' | 0 | 出力件数 | 100 |
| 16 | DATEX | （名称なし） | CHAR(6) | ' ' | 処理日（YYMMDD） | 101 |
| 17 | DATEN | （名称なし） | PIC'(6)9' DEF DATEX | | 処理日（数字再定義）。見出し日付へ設定 | 102 |
| 18 | I | （名称なし） | FIXED BIN(15) | 0 | 締日情報の添字（1〜6） | 103 |
| 19 | T | 処理フラグ | FIXED BIN(15) | 0 | 締日照合結果（0：一致なし、1：一致あり） | 104 |
| 20 | VSAREA | （名称なし） | 構造体（KANBASED）1500バイト | | 管理台帳の読込エリア | 111–112 |
| 21 | ADDR, SUBSTR, HIGH, LOW, LENGTH, STRING, VERIFY, UNSPEC, DATETIME | （名称なし） | BUILTIN | | 組込み関数（使用は SUBSTR・HIGH・STRING・DATETIME のみ） | 95–96 |

※ 日本語名称は参考資料による。LCNT・T の名称は参考資料 SRC シートの備考による。参考資料に記載のない変数は「（名称なし）」とした。

### 7.1 本プログラムで参照するレイアウト項目

| 変数名 | 日本語名称 | 所属レイアウト | 位置 | 属性・桁 | 用途 | 行番号 |
|---|---|---|---|---|---|---|
| POSQVKEY | 荷主コード | SSPOSFAX（ＰＯＳメート・ＦＡＸサービス） | 1 | 数字 7 | 管理台帳の読込キー、明細1行目 NI-CODE | 139, 169 |
| POSFAXKB | 区分 | SSPOSFAX | 8 | 数字 1（1:POSﾒｰﾄ 2:FAXｻｰﾋﾞｽ 3:ｻﾎﾟｰﾄII） | 明細1行目 KB | 170 |
| POSQTNCD | 未収扱い店所 | SSPOSFAX | 9 | 数字 4 | 明細1行目 T-CD | 168 |
| POSQGROP | 履歴テーブル | SSPOSFAX | 14 | 集団 22バイト×3 | （POSQSQDD の上位項目） | － |
| POSQSQDD(1) | 請求締日 | SSPOSFAX（履歴テーブル1件目） | 34 | 数字 2 | 締日照合、明細1行目 締日 | 146, 171 |
| POSQIYMD | 入力更新年月日 | SSPOSFAX | 96 | 数字 6 | 明細1行目 更新日 | 172 |
| KACUSTCD | 登録顧客コード | KANBASED（管理台帳） | 1 | 数字 7 | 管理台帳のキー（KEYS(7 0)）。ソース上は直接参照しない | （140） |
| KASFSMKB | 締日情報 | KANBASED | 256 | 集団 3バイト×6 | （KASFSSIX・KASFSSAK の上位項目） | － |
| KASFSSIX(1〜6) | 締日 | KANBASED | 256, 259, 262, 265, 268, 271 | 数字 2（月末＝99） | 締日照合、明細2行目 締日 | 146, 177 |
| KASFSSAK(1〜6) | 正式仮区分 | KANBASED | 258, 261, 264, 267, 270, 273 | 数字 1（1：本締、2：仮締） | 締日照合・締日欄設定の条件 | 146, 176 |
| KAHKYMNT | 契約更新年月日 | KANBASED | 789 | 集団 6 | （KAHNKMYY〜KAHNKMDD の上位項目） | － |
| KAHNKMYY | 年 | KANBASED（契約更新年月日） | 789 | 数字 2 | 明細2行目 更新日（年） | 180 |
| KAHNKMMM | 月 | KANBASED（契約更新年月日） | 791 | 数字 2 | 明細2行目 更新日（月） | 181 |
| KAHNKMDD | 日 | KANBASED（契約更新年月日） | 793 | 数字 2 | 明細2行目 更新日（日） | 182 |
| KATNRCNM | 顧客略名　（カナ） | KANBASED | 557 | 文字 14 | 明細2行目 NI-NAME | 185 |

- 参照する管理台帳の項目はすべて799バイト目までにあり、1200バイト・1500バイトどちらのレコードにも含まれる。

---

## 8. 留意事項（ソース解析で判明した事項）

| No | 区分 | 内容 | 行番号 |
|---|---|---|---|
| 1 | 潜在不具合 | 明細2行目の締日欄（DTSM(1〜6)）は、正式仮区分＝1 の要素だけ設定し、それ以外の要素は設定もクリアもしない。DTSM には初期値（INIT）もない。このため、本締でない欄には前に印字した明細の締日がそのまま残り、最初の明細では不定値が印字される可能性がある。本締でない欄は空白にするのが意図と考えられる。 | 78, 175–179 |
| 2 | 突合せ | 管理台帳に存在しない荷主は、印字も件数表示もせずにスキップする。帳票名は「アンマッチリスト」だが、検出対象は締日の不一致だけである。 | 141, 192 |
| 3 | 例外処理 | KEY条件で ONCODE を判定していないため、該当キーなし以外のキーエラーも「管理台帳なし」と同じ扱いでスキップされ、検知できない。KEY以外の入出力エラー・CONVERSION 等には ON ユニットがなく、PL/I の標準動作（異常終了）となる。リターンコードは設定していない。 | 123–126 |
| 4 | 突合せ | ＰＯＳ側は履歴テーブル（POSQGROP、3件）のうち1件目の請求締日（POSQSQDD(1)）だけを比較・印字する。2・3件目は参照しない。 | 146, 171 |
| 5 | 突合せ | 管理台帳側は正式仮区分＝1（本締）の締日だけを比較対象とする。仮締（2）の締日とだけ一致する荷主はアンマッチとして出力される。 | 146 |
| 6 | 件数 | 入力件数（INCNT）は1件目の読込（133行）では加算せず、ループ内の読込後に加算する。ファイル終了となった読込でも加算されるため、結果として読込件数と一致する（入力0件なら0）。 | 133, 193–194 |
| 7 | 帳票 | 明細2行目の「更新日」は管理台帳の契約更新年月日（KAHKYMNT）であり、明細1行目のＰＯＳ側「更新日」（入力更新年月日 POSQIYMD）とは意味が異なる。見出しはどちらも「更新日」。 | 172, 180–182 |
| 8 | ファイル | 管理台帳は可変長（1200／1500）だが、読込エリア VSAREA は1500バイト固定。1200バイトのレコードでは後半300バイトに前レコードの内容が残るが、参照項目は799バイト目までのため影響しない。レコード長の違いで RECORD 条件が出るかは処理系による（ON RECORD なし）。 | 111–112, 140 |
| 9 | ファイル | 管理台帳は KEYED SEQUENTIAL で宣言し、READ … KEY でランダムに読んでいる（KEYED DIRECT ではない）。キーエラー時、VSAREA は前の荷主の内容のままだが参照しない。 | 24–25, 140 |
| 10 | データ | 締日・正式仮区分などは数字（PIC'9'）項目として数値比較・編集する。数字以外（空白等）が入っていると CONVERSION 条件が発生し得る。 | 146, 176–182 |
| 11 | 帳票 | アンマッチが1件もない場合、見出しも出力せず帳票は0行となる。結果はジョブログの出力件数（OTCNT）で確認する。 | 153, 203 |
| 12 | 帳票 | 処理日・更新日とも年は2桁（YY）で印字する（処理日は DATETIME の3桁目から6桁）。ページ番号は PIC'ZZZ9'（最大9999）。 | 44, 47, 134 |
| 13 | 資料差異 | 参考資料の SRC シートでは141行が `IF VKEY = HIGH(7)` となっているが、ソースは `IF VKEY ¬= HIGH(7)`（否定記号が欠落）。変数定義シートの MI106・DT101・DT105・DT201 の桁、I の属性、INCNT・OTCNT の PICTURE も取込み時に欠けている。本書はソースを正とした。 | 141, 48, 65, 73, 77, 99–100, 103 |
| 14 | 名称 | 入力ファイルの名称が資料ごとに異なる：ソースコメント「ＰＯＳメイト請求額マスター」、参考資料「ＰＯＳメート・ＦＡＸサービス」、JCLコメント「ＰＯＳメート　請求額エラーリスト処理」。プログラム名も参考資料「ＰＯＳメートマスター　ＶＳ　管理台帳」と帳票タイトル「ＰＯＳメイトマスター　アンマッチリスト」で異なる。 | 8, 42 |
| 15 | 未使用定義 | 組込み関数 ADDR／LOW／LENGTH／VERIFY／UNSPEC は宣言のみで使っていない。SSPOSFAX の請求精算区分・有償台数・無償台数・請求額・その他料金・開始年月日・請求精算ＮＯ・前回請求処理年月日等も参照しない。 | 95 |

---

## 付録A 項目対応表

### A.1 帳票印字項目対応表（OUTFILE ← 編集元）

位置はレコード先頭（ASA 制御文字）を1とした値。編集元の位置は各レイアウト先頭を1とした値（参考資料による）。

| # | 行 | 位置 | 長さ | 変数名 | 日本語名称 | 属性 | 見出し | 編集元 | 編集元項目 | 編集元位置 | 編集内容・備考 | 行番号 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 見出し1 | 1 | 1 | MI101 | （名称なし） | CHAR | | 定数 | － | | `'1'`（ASA：改ページ） | 40 |
| 2 | 見出し1 | 2 | 60 | MI102 | （名称なし） | CHAR | | 定数 | － | | タイトル `(KS60350P)  *** ＰＯＳメイトマスター　アンマッチリスト***` | 41–42 |
| 3 | 見出し1 | 62 | 10 | MI103 | （名称なし） | CHAR | | 定数 | － | | 空白 | 43 |
| 4 | 見出し1 | 72 | 8 | DATEP | （名称なし） | PIC'99/99/99' | | ワーク | DATEN（DATETIME の YYMMDD） | | 処理日 YY/MM/DD | 44, 134, 157 |
| 5 | 見出し1 | 80 | 74 | MI104 | （名称なし） | CHAR | | 定数 | － | | 空白 | 45 |
| 6 | 見出し1 | 154 | 6 | MI105 | （名称なし） | CHAR | | 定数 | － | | `'PAGE :'` | 46 |
| 7 | 見出し1 | 160 | 4 | MIPA | （名称なし） | PIC'ZZZ9' | | ワーク | 改ページごとに＋1 | | ページ番号 | 47, 156 |
| 8 | 見出し1 | 164 | 2 | MI106 | （名称なし） | CHAR | | 定数 | － | | 空白 | 48 |
| 9 | 見出し2 | 1 | 1 | MI201 | （名称なし） | CHAR | | 定数 | － | | `'0'`（ASA：1行空け） | 50 |
| 10 | 見出し2 | 2 | 55 | MI202 | （名称なし） | CHAR | | 定数 | － | | ` T-CD   NI-CODE  KB 締日 … 更新日` | 51–52 |
| 11 | 見出し2 | 57 | 109 | MI203 | （名称なし） | CHAR | | 定数 | － | | `（ＰＯＳ）` | 54–55 |
| 12 | 見出し3 | 1 | 1 | MI301 | （名称なし） | CHAR | | 定数 | － | | 空白（ASA：改行） | 57 |
| 13 | 見出し3 | 2 | 55 | MI302 | （名称なし） | CHAR | | 定数 | － | | `… 締日 … 更新日` | 58–59 |
| 14 | 見出し3 | 57 | 109 | MI303 | （名称なし） | CHAR | | 定数 | － | | `（管理台帳）  NI-NAME` | 61–62 |
| 15 | 明細1 | 1 | 2 | DT101 | （名称なし） | CHAR | | 定数 | － | | `'0'`＋空白（ASA：1行空け） | 65 |
| 16 | 明細1 | 3 | 4 | DTTNCD | （名称なし） | CHAR | T-CD | ＰＯＳメート・ＦＡＸサービス | 未収扱い店所（POSQTNCD） | 9 | 転記 | 168 |
| 17 | 明細1 | 7 | 3 | DT102 | （名称なし） | CHAR | | 定数 | － | | 空白 | 67 |
| 18 | 明細1 | 10 | 7 | DTNICD | （名称なし） | CHAR | NI-CODE | ＰＯＳメート・ＦＡＸサービス | 荷主コード（POSQVKEY） | 1 | 転記 | 169 |
| 19 | 明細1 | 17 | 3 | DT103 | （名称なし） | CHAR | | 定数 | － | | 空白 | 69 |
| 20 | 明細1 | 20 | 1 | DTKUBN | （名称なし） | PIC'(1)9' | KB | ＰＯＳメート・ＦＡＸサービス | 区分（POSFAXKB） | 8 | 転記／1:POSﾒｰﾄ 2:FAXｻｰﾋﾞｽ 3:ｻﾎﾟｰﾄII | 170 |
| 21 | 明細1 | 21 | 3 | DT104 | （名称なし） | CHAR | | 定数 | － | | 空白 | 71 |
| 22 | 明細1 | 24 | 2 | DTSIME | （名称なし） | PIC'ZZ' | 締日 | ＰＯＳメート・ＦＡＸサービス | 請求締日（POSQSQDD(1)） | 34 | ゼロサプレス編集（履歴テーブル1件目） | 171 |
| 23 | 明細1 | 26 | 23 | DT105 | （名称なし） | CHAR | | 定数 | － | | 空白 | 73 |
| 24 | 明細1 | 49 | 8 | DTYMD1 | （名称なし） | PIC'99/99/99' | 更新日 | ＰＯＳメート・ＦＡＸサービス | 入力更新年月日（POSQIYMD） | 96 | 99/99/99 編集 | 172 |
| 25 | 明細1 | 57 | 109 | DT106 | （名称なし） | CHAR | | 定数 | － | | 空白 | 75 |
| 26 | 明細2 | 1 | 21 | DT201 | （名称なし） | CHAR | | 定数 | － | | 空白（1桁目 ASA：改行） | 77 |
| 27 | 明細2 | 22 | 4 | DTSM(1) | （名称なし） | PIC'ZZZZ' | 締日 | 管理台帳 | 締日（KASFSSIX(1)） | 256 | 正式仮区分（KASFSSAK(1)：258）＝1 の場合のみ設定。ゼロサプレス | 176–177 |
| 28 | 明細2 | 26 | 4 | DTSM(2) | （名称なし） | PIC'ZZZZ' | 締日 | 管理台帳 | 締日（KASFSSIX(2)） | 259 | 正式仮区分（KASFSSAK(2)：261）＝1 の場合のみ設定 | 176–177 |
| 29 | 明細2 | 30 | 4 | DTSM(3) | （名称なし） | PIC'ZZZZ' | 締日 | 管理台帳 | 締日（KASFSSIX(3)） | 262 | 正式仮区分（KASFSSAK(3)：264）＝1 の場合のみ設定 | 176–177 |
| 30 | 明細2 | 34 | 4 | DTSM(4) | （名称なし） | PIC'ZZZZ' | 締日 | 管理台帳 | 締日（KASFSSIX(4)） | 265 | 正式仮区分（KASFSSAK(4)：267）＝1 の場合のみ設定 | 176–177 |
| 31 | 明細2 | 38 | 4 | DTSM(5) | （名称なし） | PIC'ZZZZ' | 締日 | 管理台帳 | 締日（KASFSSIX(5)） | 268 | 正式仮区分（KASFSSAK(5)：270）＝1 の場合のみ設定 | 176–177 |
| 32 | 明細2 | 42 | 4 | DTSM(6) | （名称なし） | PIC'ZZZZ' | 締日 | 管理台帳 | 締日（KASFSSIX(6)） | 271 | 正式仮区分（KASFSSAK(6)：273）＝1 の場合のみ設定 | 176–177 |
| 33 | 明細2 | 46 | 3 | DT202 | （名称なし） | CHAR | | 定数 | － | | 空白 | 79 |
| 34 | 明細2 | 49 | 2 | DTYY2 | （名称なし） | PIC'99' | 更新日 | 管理台帳 | 年（KAHNKMYY）※契約更新年月日 | 789 | 転記 | 180 |
| 35 | 明細2 | 51 | 1 | DTSP1 | （名称なし） | CHAR | | 定数 | － | | `'/'` | 183–184 |
| 36 | 明細2 | 52 | 2 | DTMM2 | （名称なし） | PIC'99' | | 管理台帳 | 月（KAHNKMMM）※契約更新年月日 | 791 | 転記 | 181 |
| 37 | 明細2 | 54 | 1 | DTSP2 | （名称なし） | CHAR | | 定数 | － | | `'/'` | 183–184 |
| 38 | 明細2 | 55 | 2 | DTDD2 | （名称なし） | PIC'99' | | 管理台帳 | 日（KAHNKMDD）※契約更新年月日 | 793 | 転記 | 182 |
| 39 | 明細2 | 57 | 16 | DT203 | （名称なし） | CHAR | | 定数 | － | | 空白 | 85 |
| 40 | 明細2 | 73 | 14 | DTNAM | （名称なし） | CHAR | NI-NAME | 管理台帳 | 顧客略名　（カナ）（KATNRCNM） | 557 | 転記 | 185 |
| 41 | 明細2 | 87 | 79 | DT204 | （名称なし） | CHAR | | 定数 | － | | 空白 | 87 |

### A.2 入力レイアウト（ＰＯＳメート・ＦＡＸサービス SSPOSFAX）

LV＝レベル番号。属性・桁・Byte は参考資料（現行解析資料）の定義による。

| # | 位置 | 日本語名称 | LV | 変数名 | 属性 | 桁 | Byte | 繰返し | 本プログラムでの使用 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 荷主コード | 2 | POSQVKEY | 数字 | 7 | 7 | | 管理台帳の読込キー、明細1行目 NI-CODE |
| 2 | 8 | 区分 | 2 | POSFAXKB | 数字 | 1 | 1 | | 明細1行目 KB（1:POSﾒｰﾄ 2:FAXｻｰﾋﾞｽ 3:ｻﾎﾟｰﾄII） |
| 3 | 9 | 未収扱い店所 | 2 | POSQTNCD | 数字 | 4 | 4 | | 明細1行目 T-CD |
| 4 | 13 | 請求精算区分 | 2 | POSQSQKB | 数字 | 1 | 1 | | － |
| 5 | 14 | 履歴テーブル | 2 | POSQGROP | | | 22 | 3 | （集団項目） |
| 6 | 14 | 有償台数 | 3 | POSQDARI | 数値 | 5 | 3 | | － |
| 7 | 17 | 無償台数 | 3 | POSQNASI | 数値 | 5 | 3 | | － |
| 8 | 20 | 請求額 | 3 | POSQSEQU | 数値 | 7 | 4 | | － |
| 9 | 24 | その他料金 | 3 | POSQEXRY | 数値 | 7 | 4 | | － |
| 10 | 28 | 開始年月日 | 3 | POSQSTRT | 数字 | 6 | 6 | | － |
| 11 | 34 | 請求締日 | 3 | POSQSQDD | 数字 | 2 | 2 | | 1件目（34）のみ：締日照合、明細1行目 締日（2件目 56、3件目 78 は未使用） |
| 12 | 80 | 請求精算ＮＯ | 2 | POSQSQNO | 数字 | 12 | 12 | | － |
| 13 | 92 | ＳＰＡＣＥ | 2 | POSQSPAC | 文字 | 4 | 4 | | － |
| 14 | 96 | 入力更新年月日 | 2 | POSQIYMD | 数字 | 6 | 6 | | 明細1行目 更新日 |
| 15 | 102 | 前回請求処理年月日 | 2 | POSQBYMD | 数字 | 6 | 6 | | － |
| 16 | 108 | ＳＰＡＣＥ | 2 | POSQSPA0 | 文字 | 13 | 13 | | － |

管理台帳（KANBASED）で参照する項目は 7.1 を参照（それ以外の項目は参照しない）。
