# プログラム仕様書　BV23500P（他社直卸分発送伝票送付書（傭車便）　センター照会）

| 項目 | 内容 |
|---|---|
| システムID | BV |
| 参考資料 | ・現行ソース BV23500P.pl1<br/>・現行の解析資料 BV0180_他社直卸出発入力（傭車.xlsx（シート「資産一覧」「レコードフォーマット」「SRC_BV23500P」） |
| 項目名の出典 | 送受信データ・マスター・テーブルの項目は解析資料のシート「レコードフォーマット」の日本語名称 |

---

## 1. 概要

| 項目 | 内容 |
|---|---|
| プログラムID | BV23500P（手続き名：BU23500） |
| プログラム名称 | 他社直卸分発送伝票送付書（傭車便）センター照会（ソースの冒頭コメントは「ＤＢ・ＲＥＡＤ・ＯＮＬＹ　センター　ＣＩＣＳ」。処理内容から命名） |
| 言語 | PL/I（CICS コマンドレベル、DB2 埋込み SQL） |
| 処理形態 | オンライン（APPC 会話の相手側。画面なし） |
| 動作環境 | CIC1（センター側） |
| トランザクションID | B35V（DDP の BV13500P から CONNECT PROCESS で起動される） |
| パターンID | PPOC020P（1987/04/30）、業務 BXHEAD30 |
| 呼出し元 | BV13500P（BV35） |
| 参照ファイル・テーブル | VKUNKSH（運行指令マスター）、RDSFIS（送付書照会ＤＢ２）、RDRUNK（運行ＤＢ２）。いずれも参照のみ |

### 1.1 機能概要

DDP から受け取った指令書ＮＯ・送付書ＮＯ で、指令書の状態と送付書の有無を調べ、送付書（またはその元になる指令書）の内容を DDP に返す。自社便版（BV23100P）と同じ処理に、利用運送（差額）の指令書のチェックと、差額区分の返却を加えたもの。

| 結果 | エラーフラグ | 返す内容 |
|---|---|---|
| 送付書照会ＤＢ２に送付書があり、運行ＤＢ２に指令書がある | '0' | 送付書の内容（発送日時・発店・着店・車番・傭車情報など） |
| 送付書はなく、指令書はある（新規の送付書） | '3' | 運行指令マスターの内容（指令日・出発時分・発店・着店・車番・傭車情報など） |
| 指令書が配車未入力・減便、または運行指令マスターにない | '1'（エラーコード 'BU03'） | なし |
| 指令書が自動車利用運送で、選択ＮＯ が 55 でない | '4'（エラーコード空白） | なし |
| その他のエラー | '2' | なし |

```mermaid
flowchart LR
    DDP[DDP BV13500P<br/>BV35] -- 照会データ 23バイト --> B35V[B35V<br/>本プログラム]
    B35V -- 照会結果 150バイト --> DDP
    B35V --> UNK[(VKUNKSH<br/>運行指令マスター)]
    B35V --> SF[(RDSFIS<br/>送付書照会ＤＢ２)]
    B35V --> RU[(RDRUNK<br/>運行ＤＢ２)]
```

---

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

### 2.1 受信データ（23バイト）

トランザクションID（4）＋ DPCEB35V。

| 項目ID | 項目名 | 桁 | 用途 |
|---|---|---|---|
| B35VSRNO | 指令書ＮＯ | 9 | 運行指令マスター・運行ＤＢ２のキー |
| B35VSFNO | 送付書ＮＯ | 8 | 送付書照会ＤＢ２のキー |
| B35VSELN | 選択ＮＯ | 2 | 作業選択番号。55 なら利用運送のチェックをしない |

### 2.2 送信データ（150バイト）

エラーフラグ（1）＋エラーコード（4）＋ CEDPBV35（他社直卸分発送伝票送付書（傭）［ＣＤ］）。送信前に全体を空にする。

| 項目ID | 項目名 | 送付書あり（'0'）の編集元：送付書照会ＤＢ２ | 新規（'3'）の編集元：運行指令マスター |
|---|---|---|---|
| BV35SRNO・BV35SOFN | 指令書ＮＯ・送付書ＮＯ | 受信した値 | 受信した値 |
| BV35SYMD | 年月日 | 発送年月日（RSFQYMD1）の下6桁 | 指令年月日（VBKBSRDD） |
| BV35DHMM | 時分 | 発送時分（RSFQHHM1） | 始発の予定年月日時分（VBKYATIM）の7～10桁目（時分） |
| BV35STNC | 指令店所 | 発店コート゛（RSFQHTCD） | 実績の発店コート゛（VBKGJHCD） |
| BV35SRCT | 指令着店 | 着店コート゛（RSFQCTCD） | 実績の着店コード（最終卸店）（VBKGJCCD） |
| BV35BNKB | 運行車区分 | 便区分（RSFQBNKB） | 運行車区分（VBKBYKKN） |
| BV35SYAB・BV35SEMI | 積載社番・セミトレ社番 | 積載社番（RSFQSHAA）・セミトレ社番（RSFQSHAB） | 始発の積載 車番（VBKGSBN1）・セミ頭・フル子・回送 車番（VBKGSBN2） |
| BV35SYB1・BV35SEM1 | 積載社番１・セミトレ１ | （セットしない） | リンク・代替・着回送の 積載 車番（VBKGSBN3）・セミ頭・フル子・回送 車番（VBKGSBN4） |
| BV35SHAT・BV35SHCH | 送付書発店・送付書発地 | 発店コート゛（RSFQHTCD）・発地コート゛（RSFQHCCD） | （セットしない） |
| BV35SCAT・BV35SCKT | 送付書着店・送付書着地 | 着店コート゛（RSFQCTCD）・着地コート゛（RSFQCCCD） | （セットしない） |
| BV35HYTN | 標屯 | 標屯（RSFQHYTO） | 始発の積載 標屯（VBKGFYT1） |
| BV35OWKB | ＯＷ区分 | ｏｗ区分（RSFQOWKB） | 始発の乗務員Ａ・Ｂがともにあれば 2、それ以外は 1 |
| BV35YSCD・BV35KETA・BV35YSRY・BV35HKRY | 傭車コード・傭車形態・傭車料・一車保険料 | 運行ＤＢ２の運行車区分（RUNKYKKN）が '02' のとき、傭車コード（RSFQYOCD）・形態（RSFQKKTI）・傭車料（RSFQKYSR）・一車保険料（RSFQQHKN） | 運行車区分が 02 のとき、フェリー会社・傭車コード（VBKGFYCD）・使用形態（VBKGKITI）・定額傭車料（VBKGTGKU）・一車保険料（傭車）（VBKGYOHO） |
| BV35KUIK | 区域区分 | 運行車区分が '02' のとき、区域区分（RSFQKUIK） | （セットしない） |
| BV35SAGK | 差額区分 | 運行車区分が '02' のとき、差額区分（RSFQSAGK） | 運行車区分が 02 のとき、自動車利用運送区分（VBKKSAGK） |
| BV35BINM | 運行便名 | 運行ＤＢ２の便名（漢字）（RUNKKANG） | 便名（漢字）（VBKBKANG） |
| BV35TCYD | 到着予定年月日 | 到着予定年月日（RSFQTOYO）の下6桁 | 最終卸店の予定年月日時分（VBKYBTIM）÷10000（年月日） |
| BV35TMKB | 積区分 | 積区分（RSFQQEKI） | 1 |
| BV35JONC | 直卸他社コード | 直卸他社コード（RSFQJONC）。空白なら 0 | （セットしない） |

変更２社番（BV35SYB2・BV35SEM2）・マスター区分（BV35MKBN）はセットしない。

---

## 3. 処理仕様

### 3.1 処理の流れ

```mermaid
flowchart TD
    S([開始]) --> RCV[照会データを受信]
    RCV --> R1[運行指令マスターを指令書ＮＯで読む]
    R1 -- なし --> E1[エラーフラグ 1・BU03]
    R1 -- 読込みエラー --> E2[エラーフラグ 2]
    R1 -- あり --> NU{入力区分}
    NU -- 0 または 9 --> E1
    NU -- それ以外 --> SG{自動車利用運送区分 1<br/>かつ 選択ＮＯ ≠ 55}
    SG -- はい --> E4[エラーフラグ 4]
    SG -- いいえ --> DB[送付書照会ＤＢ２・運行ＤＢ２を読む]
    DB -- 送付書あり・運行あり --> F0[送付書の内容を編集<br/>エラーフラグ 0]
    DB -- 送付書なし --> F3[運行指令マスターの内容を編集<br/>エラーフラグ 3]
    DB -- その他 --> E2
    E1 --> SND
    E2 --> SND
    E4 --> SND
    F0 --> SND
    F3 --> SND[結果を送信<br/>終了データを受信して終了]
```

### 3.2 指令書のチェック

1. 指令書ＮＯ で運行指令マスター（VKUNKSH）を読む。
2. 結果を判定する。

| 結果 | 処理 |
|---|---|
| あり、入力区分（VBKBNURK）が 0（配車未入力）または 9（減便） | エラーフラグ '1'、エラーコード 'BU03' |
| あり、自動車利用運送区分（VBKKSAGK）が '1' で、選択ＮＯ が 55 でない | エラーフラグ '4'、エラーコード空白（DDP では「この依頼書№は利用運送です。直集入力して下さい。」） |
| あり、上記以外 | 3.3 へ |
| なし | エラーフラグ '1'、エラーコード 'BU03' |
| 読込みエラー | エラーフラグ '2' |

### 3.3 送付書の照会

1. 送付書照会ＤＢ２（RDSFIS）を「送付書ＮＯ（RSFQSONO）＝ 受信した送付書ＮＯ」で読む。
2. 運行ＤＢ２（RDRUNK）を「指令書ＮＯ（RUNKSRSH）＝ 受信した指令書ＮＯ」で読む。
3. 結果を判定し、2.2 のとおり送信データを編集する。

| 送付書照会ＤＢ２ | 運行ＤＢ２ | 処理 |
|---|---|---|
| あり | あり | 送付書の内容を編集し、エラーフラグ '0' |
| なし | あり・なし | 運行指令マスターの内容を編集し、エラーフラグ '3'（新規の送付書） |
| 上記以外（送付書はあるが運行がない、SQL エラーなど） | | エラーフラグ '2' |

### 3.4 送受信・エラー処理

1. 結果（150バイト）を送信して応答を待ち（SEND INVITE WAIT）、DDP からの終了データを受信して終了する。
2. CICS のエラー（HANDLE CONDITION ERROR）が発生した場合は、エラーフラグ '2' にして送信する。

---

## 4. 補足・留意事項

1. **送付書と指令書の対応を確認しない**：送付書照会ＤＢ２の送付書の指令書ＮＯ が受信した指令書ＮＯ と同じかは確認していない。別の指令書の送付書ＮＯ を入力しても、その送付書の内容が返る。
2. **選択ＮＯ 55**：選択ＮＯ（作業選択番号）が 55 の場合だけ、利用運送の指令書でも照会を続ける。55 がどのメニューの番号かは、本プログラムからは分からない。
3. **差額区分が返るのは傭車便だけ**：差額区分は運行車区分が 02 のときだけセットする。運行車区分が 02 以外の場合は空白で返る（DDP の BV13500P は、運行車区分が自社便（01・03・04・05）ならエラーにする）。
4. **運行車区分の判定元の違い**：送付書ありの場合、傭車情報をセットするかは送付書の便区分ではなく、運行ＤＢ２の運行車区分（RUNKYKKN）で判定している。DDP に返す運行車区分は送付書の便区分（RSFQBNKB）である。
5. **送付書発店・発地の新規時**：新規（エラーフラグ '3'）の場合、送付書発店・発地・着店・着地はセットしない（DDP の BV13500P が端末の店所を発店にする）。
6. **エラーフラグ '2' のエラーコード**：エラーフラグ '2' の場合はエラーコードを空白のまま返すため、DDP ではメッセージ「エラー項目あり」などの固定メッセージは出ず、照会前のメッセージ欄の内容になる（BV13500P_仕様書.md 4.5）。
7. **時分の編集**：新規の場合の時分は、始発の予定年月日時分（11桁）を10桁の作業域に入れてから7～10桁目を取り出している。
