# プログラム仕様書　BU20600P（配車入力（傭、増）更新）

| 項目 | 内容 |
|---|---|
| システムID | BU |
| 参考資料 | ・現行ソース BU20600P.pl1<br/>・現行の解析資料 BU0040_配車入力（自社増）.xlsx（シート「資産一覧」「レコードフォーマット」「SRC_BU20600P」） |
| 項目名の出典 | 送受信データ・マスターの項目は解析資料のシート「レコードフォーマット」の日本語名称 |

---

## 1. 概要

| 項目 | 内容 |
|---|---|
| プログラムID | BU20600P（手続き名：BU20600） |
| プログラム名称 | 配車入力（傭、増）更新 |
| 言語 | PL/I（CICS コマンドレベル） |
| 処理形態 | オンライン（APPC 会話の相手側。画面なし） |
| 動作環境 | CIC1（センター側） |
| トランザクションID | B06U（DDP の BU10600P から CONNECT PROCESS で起動される） |
| パターンID | PPOC050P（1987/05/06、ＫＳＤＳ・ＵＰＤＡＴＥ）、業務 BUSHRE30 |
| 呼出し元 | BU10600P（配車入力 確認・更新） |
| 呼出しモジュール | LSS0030A（応答コードの16進文字変換） |

使用ファイル：

| ファイル | 内容 | 用途 |
|---|---|---|
| VKLNFRY | ライナー料金マスター（ＮＥＷ）（LINFERRC）／フェリー料金マスター（LINFERRB） | 参照（ライナー・フェリーの料金の有無） |
| VKUNKSH | 運行指令マスター（UNKOSHIR） | 定便：更新（READ UPDATE・REWRITE）、増便：追加（WRITE） |
| VKTENMS | 店所マスター（DDPTENMS） | 参照（設定粁のキーにする所在地コード） |
| VKHCBKM | 発着地粁程マスター（DDPHCBKM） | 参照（設定粁） |
| VKKDMST | 日付稼働テーブルマスター（DAYTBMST） | 参照（曜日・休日区分） |
| VKCUSTM | 顧客マスター | 参照（トン単価） |
| VKCUYOS | 顧客マスター（傭車料計算契約情報）（VCUYOSRY） | 参照（トン単価） |
| VKYSRBS | 傭車料基準マスター（YSRYBASE） | 参照（トン単価） |

### 1.1 機能概要

DDP から検証済みの配車データ（CEDPBU04）を受け取り、運行指令マスターを更新して、結果（CEDPBU06）を返す。

| データ区分 | 内容 | 運行指令マスター |
|---|---|---|
| 'D' | 定便（傭車のみ）。既存の指令書に配車内容を書き込む | 書き換え（REWRITE） |
| 'N' | 増便（自社・傭車）。BU20400P で採番した指令書を新しく作る。自社は 2～4枚目（枝番）も作る | 追加（WRITE） |

```mermaid
flowchart LR
    DDP[DDP BU10600P<br/>BU06] -- 検証済みデータ 419バイト --> B06U[B06U<br/>本プログラム]
    B06U -- 更新結果 54バイト --> DDP
    B06U --> UNKSH[(VKUNKSH<br/>運行指令マスター)]
    B06U -.参照.-> M[(料金・店所・粁程・日付稼働<br/>顧客・傭車料基準)]
```

---

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

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

トランザクションID（4）＋エラーフラグ（1）＋エラーコード（4）＋ CEDPBU04（配車入力照会後、検証後データ（増、傭）、410バイト）。項目は BU20400P_仕様書.md の 2.2、BU10500P_仕様書.md の 3.3 を参照。

本プログラムで判定に使う主な項目：データ区分（UNKDTKB）、入力結果（UNKNYUK：'1' 入力、'9' 減便）、運行車区分（UNKKUBN）、指令書ＮＯ（UNKSHNO）、指令書発行枚数（UNKSHCN）。

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

| 項目ID | 項目名 | 内容 |
|---|---|---|
| SESS_ERR_FLG | エラーフラグ | '0' 固定 |
| SESS_ERR_CODE | エラーコード | マスターI/Oエラーのときの応答コード（16進文字） |
| SESS_TONTAN | トン単価 | 傭車の使用形態が 2（トン当たり）のとき、取得した単価×100－300 |
| DNKTERM・DNKIYMD・DNKSHNO | ＤＤＰ端末ＩＤ・入力年月日・指令書ＮＯ | 受信データの値 |
| DNKNYUK | 入力結果 | 2.3 |
| UNQSZTC | 所属店 | 更新できたときの所属店の店所コード |
| UNQDTIM・UNQDONO・UNQDIN1～3 | 道路情報 | 0（道路情報マスターを読む処理は 2014/11/25 にコメントアウト） |

### 2.3 入力結果（DNKNYUK）

| 値 | 意味 | 設定する条件 |
|---|---|---|
| '1' | 更新ＯＫ | 入力結果 '1' のデータを更新できた |
| '9' | 減便 | 入力結果 '9' のデータを更新できた |
| '4' | 料金マスターに無し | ライナー・フェリーの料金マスターがない（3.2） |
| '6' | 指令書マスターに無し | 定便で指令書がない |
| '7' | すでに入力済 | 定便で指令書の入力区分が 0 以外 |
| '8' | マスターＩ／Ｏエラー | 運行指令マスターの読込み・書込みエラー |
| 空白 | ― | 受信データの入力結果が '1'・'9' 以外 |

---

## 3. 処理仕様

### 3.1 処理の流れ

```mermaid
flowchart TD
    S([開始]) --> RCV[検証済みデータを受信]
    RCV --> LF{運行車区分 03・04・05}
    LF -- はい --> LFC[料金マスターのチェック 3.2]
    LFC -- なし --> SND
    LF -- いいえ --> DK{データ区分}
    LFC -- あり --> DK
    DK -- D 定便 --> RD[指令書を更新モードで読む 3.3]
    RD -- エラー --> SND
    DK -- N 増便 --> KM[設定粁を求める 3.4]
    RD --> SET[1枚目の項目編集 3.5]
    KM --> SET
    SET --> UPD[定便：書換え 3.6<br/>増便：追加 3.7]
    UPD --> EDA[自社増便：2～4枚目を追加 3.8]
    EDA --> SND[結果を送信<br/>終了データを受信して終了]
```

### 3.2 ライナー・フェリー料金マスターのチェック

運行車区分が 03・04・05 の場合、キー「発店（4）＋最終卸店（4）＋運行車区分（1）」で VKLNFRY を読む。

| 結果 | 処理 |
|---|---|
| ない | 入力結果 '4' にして送信へ |
| 運行車区分 05（フェリー）で、フェリー会社コード（1件目）が 0 | 入力結果 '4' にして送信へ |
| 運行車区分 03・04（ライナー）で、ライナー会社コードが 0 | 入力結果 '4' にして送信へ |

（傭車の携帯番号のチェックはコメントアウトされている。）

### 3.3 定便（データ区分 'D'）の読込み

指令書ＮＯ で運行指令マスターを更新モードで読む。

| 結果 | 処理 |
|---|---|
| 正常で入力区分（VBKBNURK）が 0 | 3.5 へ |
| 正常で入力区分が 0 以外 | 入力結果 '7'、ロックを解除して送信へ |
| レコードなし | 入力結果 '6' にして送信へ |
| その他 | 入力結果 '8'、エラーコードに応答コードをセットして送信へ |

### 3.4 増便（データ区分 'N'）の設定粁

運行指令マスターの領域を空にしてから、次のように設定粁を求める。

1. 発店の店所マスターの店所所在地コード（先頭5桁）を起点にする（ない場合は 00000）。
2. 終点は、直配区分が 1 なら直配着地コード、それ以外は最終卸店の店所所在地コード（先頭5桁）。
3. 発着地粁程マスターを「起点＋終点」で読み、標準粁程（1件目）を設定粁（UNKSEKM）にする（ない場合は 0）。
4. 2～発行枚数枚目も、次の指令書の発店・最終卸店で同様に求める（UNKNEKM）。

### 3.5 1枚目の項目編集

入力年月日（VBKINYYY～DDD）に受信データの入力年月日をセットする。

**入力結果が '1'（入力）の場合**

| 運行指令マスターの項目 | セットする値 |
|---|---|
| 指令年月日（VBKBSRDD） | 出発 年月日 |
| 特定便区分・特定便ＮＯ | 特定便区分・特定便ＮＯ |
| 運行区間 実績の発店（支社区分・発店コード）・着店（最終卸店） | 発支社区分・発店、最終卸支社区分・最終卸店 |
| 実績 能屯 | 積載車標屯＋トレーラ頭・コンテナ車 標屯 |
| 実績運行ＯＷ区分 | 乗務員Ａ・Ｂがともにあれば '2'、どちらかだけなら '1'、ともになければ変更しない |
| 乗務員コード（始発 Ａ・Ｂ） | 乗務員 Ａ・Ｂ |
| 車番（始発の積載、セミ頭・フル子・回送） | 通常は積載に積載車番・標屯・車種、セミ頭・フル子・回送にトレーラーの車番・標屯・車種。積載車種が 'F' なら入れ替える（傭車の場合、標屯は入れ替えない） |
| 予定年月日時分（始発） | 出発 年月日時分 |
| 予定年月日時分（最終卸店） | 最終卸店到着 年月日時分 |
| 最終着予定の予定年月日時分 | 最終卸店到着 年月日（時分 0） |
| 連絡事項（漢字） | 連絡事項 |
| 出発月日（2か所）・発支社（2か所）・発店所コード（3か所） | 出発月日・発支社区分・発店 |
| 着支社（最終卸）（2か所）・到着月日（2か所） | 最終卸支社区分・最終卸店到着月日 |
| 直配区分・直配着地コード・直配着地標準最終扱店所 | 直配区分・直配着地コード・直配着地最寄りの店所 |
| 入力区分 | 1 |

**入力結果が '9'（減便）の場合**：増定減便区分 3、入力区分 9 にする（入力結果 '9'）。

**それ以外**：更新せずに送信へ（入力結果は空白）。

### 3.6 定便（'D'）の書換え

| 項目 | セットする値 |
|---|---|
| 増定減便区分 | 減便なら 3、それ以外は 1 |
| フェリー会社・傭車コード | 傭車会社コード |
| 使用形態・自動車利用運送区分 | 傭車使用形態が 4（差額的傭車）なら 3・'1'、それ以外は傭車使用形態・空白（1992/03/03 変更） |
| 定額傭車料・一車保険料（傭車） | 定額傭車料・一車保険料（傭車の場合） |
| 最終着実績の店所コード・到着店コード（次運行発店） | 最終卸店 |

運行指令マスターを書き換える。正常で減便でなければ、使用形態が 2 ならトン単価（3.9）を求め、所属店に所属店の店所コードをセットする。書換えエラーは入力結果 '8'。

### 3.7 増便（'N'）の追加（1枚目）

| 項目 | セットする値 |
|---|---|
| 増定減便区分・入力区分・便数カウント区分 | 2・1・1 |
| 指令書ＮＯ・計画便コード | 指令書ＮＯ・計画便コード |
| 便名（漢字）・便名（カナ） | 便名（漢字）（前後にシフトコードを付ける）・便名（カナ） |
| 運行車区分・運行形態・指令書発行枚数 | 運行車区分・運行形態区分・指令書発行枚数 |
| 所属店（支社区分・店所コード）、計画の発店 | 発支社区分・発店 |
| 計画の着店（最終卸店） | 最終卸支社区分・最終卸店 |
| 継続入力区分 | 指令書ＮＯ の8桁目（枝番）が発行枚数と同じなら 0、違えば 1 |
| 運行日の曜日・休日区分 | 日付稼働テーブルマスターを出発年月日で読み、曜日（日：0～金：5、土：6）、休日区分（平日 0、それ以外 1） |
| 計画設定粁 | 設定粁（3.4） |
| 計画所属始発年月日・計画出発年月日 | 出発年月日 |
| 計画便コード枝番（4か所）・計画便コード上位５桁（4か所） | 計画便コードの6桁目・頭5桁 |

運行車区分ごとの項目：

| 運行車区分 | 項目 |
|---|---|
| 02（傭車） | 3.6 と同じ傭車の項目。最終着予定の店所コード・最終着実績の店所コード・到着店コードは最終卸店。2枚目以降は作らない |
| 02 以外（自社） | 一車保険料（自社鮮魚）・フェリー会社コード。1枚だけの場合、最終着予定・実績の店所コードは最終着店（0 なら最終卸店）。2枚以上の場合は最終着店とし、予定店の支社区分・店所コード（実績も）に次運行発支社・次運行発店をセット。到着店コードは「予定店コード → 最終着予定の店所コード → 計画の着店」の順で 0 でないもの |

運行形態が 1～3（乗継・ドッキング・マルニ運行）なら、2枚目以降に乗務員を引き継がない（3.8）。

運行指令マスターを追加する。正常なら、使用形態が 2 ならトン単価（3.9）を求め、所属店に所属店の店所コードをセットする。追加エラーは入力結果 '8'。

### 3.8 自社増便の 2～4枚目の追加

自社増便（運行車区分 02 以外）で正常に 1枚目を追加した場合、「発行枚数－1」枚分を追加する（追加エラーでも続ける）。1枚目の内容をもとに、次の項目をクリア・セットする。

| 項目 | 内容 |
|---|---|
| クリアする項目 | 特定便、一車保険料（自社鮮魚）、実績の発店・着店、実績運行ＯＷ区分、乗務員Ａ・Ｂ、最終着予定の年月日時分、最終着実績の店所コード、フェリー会社・傭車コード・定額傭車料・一車保険料（傭車）・使用形態、支社区分・実績店所コード、連絡事項、計画出発年月日、乗継店の到着年月日時分、直配 |
| 入力区分 | 0 |
| 指令書ＮＯ | 次の運行の指令書ＮＯ |
| 計画便コード | 1枚目の頭5桁＋指令書ＮＯ の8桁目（枝番） |
| 便名（漢字）・（カナ）・運行形態 | 次の指令書の便名・運行形態区分 |
| 計画の発店・着店 | 次の指令書の発支社区分・発店、最終卸支社区分・最終卸店 |
| 予定年月日時分（始発）・指令年月日 | 次の指令書の出発年月日（時分 0） |
| 予定年月日時分（最終卸店） | 次の指令書の最終卸店到着年月日（時分 0） |
| 最終着予定の店所コード・継続入力区分 | 最後の枚（枝番 ＝ 発行枚数）：次運行発店（0 なら最終卸店）、継続 0、予定店はクリア。それ以外：次運行発店、継続 1、予定店に次運行発支社・次運行発店 |
| 曜日・休日区分 | 次の指令書の出発年月日で日付稼働テーブルマスターを読む |
| 計画設定粁・計画出発年月日 | 次の指令書の設定粁・1枚目の出発年月日 |
| 計画便コード枝番・上位５桁、出発月日、到着月日、発店所コード、発支社、着支社 | 次の指令書の値 |
| 到着店コード | 1枚目と同じ決め方 |
| 実績運行ＯＷ区分・乗務員Ａ・Ｂ | それまでの枚に運行形態 1～3 がなければ 1枚目の値を引き継ぐ |

### 3.9 トン単価の取得（TONTANKA_RTN）

1. 顧客マスター（VKCUSTM）を傭車会社コードで読む。ある場合は、傭車料計算契約情報（VKCUYOS）を「傭車会社コード＋連番（01～）」で順に読み、発店・着店・レートの一覧を作る。
2. 発店（実績の発店、0 なら計画の発店）と着店（実績の着店、0 なら計画の着店）が一致するレートを単価とする。
3. 顧客マスター・契約情報がない、または一致しない場合は、傭車料基準マスター（VKYSRBS）を発店で読み、着店所コードが一致する屯単価を単価とする。
4. 単価が 0 でなければ、トン単価を「単価×100－300」にする。

### 3.10 集信ログ

一車保険料（鮮魚・傭車）があり入力結果 '1' の場合、集信Ｒ４（傭車、鮮魚保険データ：SSS435）のログを編集するが、TD キュー 'SYUD' への書込みはコメントアウトされており、出力されない。

### 3.11 送受信

結果（54バイト）を送信して応答を待ち（SEND INVITE WAIT）、DDP からの終了データを受信して終了する。

---

## 4. 補足・留意事項

1. **入力結果 '5'・'A' は返さない**：BU10600P には「更新済、次の枝番無し」（'5'）・「携帯番号無し？」（'A'）のメッセージがあるが、本プログラムは '5' を設定せず、'A' を設定する携帯番号のチェックはコメントアウトされている。
2. **エラーフラグは常に '0'**：マスターのエラーでもエラーフラグは '0' のまま（'2' をセットする処理はコメントアウト）。
3. **傭車の車番の入替え**：積載車種が 'F' の場合、車番・車種は入れ替えるが、傭車（運行車区分 02）は標屯を入れ替えないため、車番と標屯の組合せがずれる。
4. **トン単価の発店・着店**：顧客マスターがない場合、発店・着店をセットしないまま傭車料基準マスターを読む（前回の値または初期値のキーになる）。
5. **増便で入力結果 '9'**：データ区分 'N' の場合、減便でも増定減便区分 2・入力区分 1 で上書きされる（自社増便は画面から減便を入力できないため、実際には発生しない）。
6. **枝番の追加エラー**：2～4枚目の追加でエラーになっても処理を続け、追加できた枚は残る。入力結果は '8' になる。
7. **道路情報・集信ログ**：道路情報マスターの読込み（2014/11/25）と集信ログの書込みはコメントアウトされている。
8. **送信データのトランザクションID**：送信データのトランザクションID はセットしていない（空白）。
