# プログラム仕様書　BK10030 回送到着入力　－　BK21500P（① センター照会）

| 項目 | 内容 |
|---|---|
| 機能ID・機能名 | BK10030　回送到着入力（機能仕様書：[BK10030_回送到着入力_仕様書.md](BK10030_回送到着入力_仕様書.md)） |
| システムID | BK |
| サブシステムID | BK0070 |
| サブシステム名 | 回送・域内便到着入力 |
| 参考資料 | ・現行ソース BK21500P.pl1<br/>・画面設計書「BK0070_回送・域内便到着入力.xlsx」（Ver.1.2023.1016.3）：資産一覧、レコードフォーマット |
| 関連仕様書 | [BK11500P_仕様書.md](BK11500P_仕様書.md)（呼出し元：回送到着入力（照会）） |

---

## 1. 概要

| 項目 | 内容 |
|---|---|
| プログラムID | BK21500P（手続き名：BK21500） |
| プログラム名称 | 回送到着入力（センター照会） |
| 言語 | PL/I（CICS コマンドレベル） |
| 処理形態 | オンライン（APPC 会話の相手側プログラム。画面なし） |
| 動作環境 | CIC1（センター側 CICS） |
| トランザクションID | B15K |
| パターンID | PPOC020P（1987/04/30）、業務 BXHEAD30。DB は読込みのみ |
| 呼出し元 | BK11500P（DDP 側、トランザクション BK15）。CONNECT PROCESS で B15K を起動する |
| 参照ファイル | VKKAISO（センターの回送マスター、KAISOHBN） |
| 更新ファイル | なし |
| 通信領域 | なし（会話でデータを受け渡す） |

### 1.1 機能概要

DDP 側の回送到着入力（BK11500P）で、DDP の回送マスターに回送票が見つからなかったときに呼ばれる。

1. DDP から回送入力票ＮＯを受け取る。
2. センターの回送マスター（VKKAISO）を読む。
3. 取消済みかどうか、入力区分が対象（店所間回送・域内）かどうかを判定する。
4. 回送マスターの内容とエラーコードを編集して DDP に返す。

```mermaid
sequenceDiagram
    participant DDP as BK11500P（DDP・BK15）
    participant CEN as BK21500P（センター・B15K）
    participant VK as VKKAISO（センター回送マスター）
    DDP->>CEN: ALLOCATE / CONNECT PROCESS（B15K）
    DDP->>CEN: SEND 49バイト（回送入力票ＮＯ）INVITE WAIT
    CEN->>CEN: RECEIVE 49バイト
    CEN->>VK: READ（キー：回送入力票ＮＯ）
    VK-->>CEN: 回送マスター
    CEN->>DDP: SEND 89バイト（エラーコード＋回送内容）INVITE WAIT
    DDP->>CEN: SEND 1バイト LAST WAIT
    CEN->>CEN: RECEIVE（終了の確認）
    CEN->>CEN: RETURN
    DDP->>DDP: FREE
```

---

## 2. インターフェース

### 2.1 受信データ（IN_DATA：49バイト）

| 項目ID | 型 | 項目名 | 本プログラムでの扱い |
|---|---|---|---|
| SESS_TRID | 文字(4) | トランザクションID（'B15K'） | 使わない |
| WBK2KSNO | 数字(8) | 回送入力票ＮＯ | 回送マスターのキー |
| WBK2NYKB | 数字(1) | 入力区分 | 使わない（DDP 側は 0 をセット） |
| WBK2ORN1・WBK2ORN2 | 数字 | 指令書ＮＯ　行き分 no1・no2 | 使わない |
| WBK2FKN1・WBK2FKN2 | 数字 | 指令書ＮＯ　帰り分 no1・no2 | 使わない |

レイアウトは DPCEB02K（回送・航空・域内入力（ＤＤＰ～センター））。

### 2.2 送信データ（OUT_DATA：89バイト）

| 項目ID | 型 | 項目名 | 設定値 |
|---|---|---|---|
| SESS_ERR_FLG | 文字(1) | エラーフラグ | '0'：通常（正常・業務エラーとも）、'2'：CICS エラー |
| SESS_ERR_CODE | 文字(4) | エラーコード | 3.3 参照 |
| UB02KSNO | 数字(8) | 回送入力票ＮＯ | VSKJKINO |
| UB02INKB | 数字(1) | 入力区分 | VSKJNYUK |
| UB02HTCD | 数字(4) | 発店 | VSKJHTCD（回送発送店所コード） |
| UB02SYMD | 数字(6) | 発送　年月日 | VSKJYMDH |
| UB02DHMM | 数字(4) | 発送　時分 | VSKJHHMM |
| UB02TOCD | 数字(4) | 到着店 | VSKJCHCD |
| UB02CYMD | 数字(6) | 到着　年月日 | VSKJTYMD |
| UB02CHMM | 数字(4) | 到着　時分 | VSKJHMHM |
| UB02ARCO | 数字(1) | 航空会社区分 | VSKJKOKU |
| UB02SYAB | 数字(5) | 社番 | VSKJKSBN（回送社番） |
| UB02JYCA・UB02JYCB | 数字(6) | 乗務員コードＡ・Ｂ | VSKJCDAA・VSKJCDBB |
| UB02STKM | 数値(7) | 指示粁　出発時 | VSKJSPTK |
| UB02TCKM | 数値(7) | 指示粁　到着時 | VSKJTCHG |
| UB02SKOM | 数値(3) | 走行粁 | 3.2 参照 |
| UB02SRNO | 文字(16) | スペース | 設定しない（空） |
| UB02TOKB | 数字(1) | 積卸区分 | VSKJSKKB |
| UB02UNKB | 数字(2) | 運行車区分 | 13 |

レイアウトは CEDPB15K（回送・航空・域内照会到着（ＤＤ～セン））。項目名はレコードフォーマットの名称。

### 2.3 参照ファイル：VKKAISO（センター回送マスター、KAISOHBN）

| 項目 | 内容 |
|---|---|
| キー | 回送入力票ＮＯ（8桁） |
| 読込み長 | 170バイト |
| 判定に使う項目 | VSKJSJKB（削除区分：0 初期値、9 削除）、VSKJNYUK（入力区分：1 店所間回送、2 航空、3 域内、4 ライナー、5 フェリー） |

---

## 3. 処理仕様

### 3.1 処理の流れ

```mermaid
flowchart TD
    S([B15K 起動]) --> H[CICS エラー時の分岐先を登録]
    H --> R1[DDP から 49バイト受信]
    R1 --> CLR[送信エリアをクリア<br/>エラーフラグ '0'・コード '0000']
    CLR --> RD{VKKAISO を読む}
    RD -- 正常 --> DL{削除区分 = 9}
    DL -- はい --> E9[コード '0009']
    DL -- いいえ --> KB{入力区分 = 1 または 3}
    KB -- いいえ --> E3[コード '0003']
    KB -- はい --> OK[コード '0000' のまま]
    E9 --> SET[回送マスターの内容を<br/>送信エリアにセット 3.2]
    E3 --> SET
    OK --> SET
    RD -- 該当なし --> E1[コード '0001']
    RD -- その他エラー --> E2[コード '0002']
    SET --> SND[DDP に 89バイト送信<br/>INVITE WAIT]
    E1 --> SND
    E2 --> SND
    SND --> R2[DDP からの終了を受信]
    R2 --> RET([RETURN])
```

### 3.2 処理内容

1. CICS コマンドがエラーになったときの分岐先（エラー処理 3.4）を登録する。
2. DDP から受信データ（49バイト）を受け取る。
3. 送信エリアをクリアし、エラーフラグ ＝ '0'、エラーコード ＝ '0000' にする。
4. 回送入力票ＮＯ（WBK2KSNO）をキーに、センター回送マスター（VKKAISO）を 170バイトで読む。
5. 読めた場合：
   1. 削除区分（VSKJSJKB）＝ 9 なら、エラーコード ＝ '0009'（取消済み）。
   2. そうでなければ、入力区分（VSKJNYUK）が 1 または 3 以外なら、エラーコード ＝ '0003'（入力区分エラー）。
   3. エラーコードにかかわらず、回送マスターの内容を送信エリアにセットする（2.2）。
   4. 走行粁は次のとおり計算する。

| 条件 | 走行粁（UB02SKOM） |
|---|---|
| 指示粁 出発時 ＞ 到着時（メーターが一巡） | (到着時 ＋ 10,000,000) − 出発時 |
| 上記以外 | 到着時 − 出発時 |

6. 読めなかった場合：該当なしならエラーコード ＝ '0001'、それ以外のエラーなら '0002'（エラーフラグはどちらも '0'）。送信エリアの回送内容は空のまま。
7. 送信データ（89バイト）を DDP に送信し、応答を待つ（INVITE WAIT）。
8. DDP からの最後のデータ（会話の終了）を受信する。
9. 終了する（RETURN）。

### 3.3 エラーコード一覧

| エラーフラグ | エラーコード | 意味 | DDP 側（BK11500P）の表示 |
|---|---|---|---|
| '0' | 0000 | 正常（入力区分 1・3、取消されていない） | 照会内容を表示し、到着入力へ |
| '0' | 0001 | 回送マスターに該当なし | ERR 3：回送未入力です。 |
| '0' | 0002 | 回送マスターの読込みエラー | ERR 3：センターの回送マスターの　Ｉ／Ｏエラー |
| '0' | 0003 | 入力区分が 1・3 以外 | ERR 5：この回送票の入力区分がエラーです。再入力して下さい |
| '0' | 0009 | 取消済み | ERR 9：この回送票は取消済みです。　　再入力して下さい |
| '2' | BU02 | CICS コマンドのエラー（3.4） | ERR ?：？？？？？？？？？？？？ |

### 3.4 エラー処理（CICS ERROR 条件）

受信・送信などの CICS コマンドでエラーが起きた場合（回送マスターの読込みは RESP で判定するため対象外）：

1. 送信エリアをクリアする。
2. エラーフラグ ＝ '2'、エラーコード ＝ 'BU02' にする。
3. 3.2 の手順 7（送信）から処理を続ける。

---

## 4. 補足・留意事項

1. **取消済み・入力区分エラーでも内容を返す**：エラーコードが '0009'・'0003' の場合も、回送マスターの内容を送信エリアにセットして返す。DDP 側（BK11500P）はエラーコードだけを見て、内容は使わない。
2. **走行粁の桁あふれ**：走行粁（UB02SKOM）は3桁の数値項目。1,000km 以上になると上位の桁が失われ、正しい値が返らない。
3. **送信時のエラーでループするおそれ**：エラー処理の後は送信（手順 7）に戻る。送信そのものがエラーの場合は、再びエラー処理に入り、送信を繰り返すおそれがある。
4. **受信データで使うのは回送入力票ＮＯだけ**：入力区分・指令書ＮＯは受け取るが使わない。
5. **航空会社区分・積卸区分**：送信データにセットしているが、DDP 側（BK11500P）では使っていない。
6. **使っていない領域**：VKEY2（VKUNKSH 用のキー）、UB02SRNO は使っていない。
