# プログラム仕様書　BU20900P（配車修正入力　更新）

| 項目 | 内容 |
|---|---|
| システムID | BU |
| 参考資料 | ・現行ソース BU20900P.pl1<br/>・現行の解析資料 BU0070_配車修正入力.xlsx（シート「資産一覧」「Link XCTL 一覧」「レコードフォーマット」「SRC_BU20900P」「BU20900P_参考」）<br/>・呼出し元の仕様書 [BU10900P_仕様書.md](BU10900P_仕様書.md) |
| 項目名の出典 | 受渡し項目（CEDPBU07・CEDPBU09）・運行指令マスター（UNKOSHIR）の項目は解析資料のシート「レコードフォーマット」の日本語名称 |

---

## 1. 概要

| 項目 | 内容 |
|---|---|
| プログラムID | BU20900P（手続き名：BU20900） |
| プログラム名称 | 配車修正入力　更新（2000年対応済み） |
| 言語 | PL/I（CICS コマンドレベル） |
| 処理形態 | オンライン（APPC 会話の相手側。画面なし） |
| 動作環境 | CIC1（センター側） |
| プロセス名（トランザクションID） | B09U |
| パターンID | PPOC050P（1987/05/06。ＫＳＤＳ・ＵＰＤＡＴＥ）、業務 BUSHRE30 |
| 呼出し元 | BU10900P（DDP の BU09）。SYSID 'CIC1'、プロセス 'B09U' で接続 |
| 更新ファイル | VKUNKSH（運行指令マスター）：読込み・書換え・削除 |
| 参照ファイル | VKLNFRY（ライナー料金マスター・フェリー料金マスター）、VKKDMST（日付稼働テーブルマスター）、VKTENMS（店所マスター）、VKHCBKM（発着地粁程マスター）、VKFIXNW（計画便マスター（ＮＥＷ））、VKHGINT（高速インターマスター） |
| 呼出しモジュール | LSO0020（指令書ＮＯ のチェックデジット生成）、LSO0130（日付の経過日数の計算）、LSS0030A（応答コードの16進表示への変換） |
| 次の処理 | 車両・乗務員の稼働の更新が必要なら、TSキューを書いて BZ20200P に XCTL |

### 1.1 機能概要

DDP（BU10900P）から検証済みの修正データを受け取り、運行指令マスターを更新して結果を返す。1つの便は指令書の枚数（発行枚数）だけレコードがあり（指令書ＮＯ の8桁目が枝番、9桁目がチェックデジット）、修正した枝番とそれ以降の枝番をまとめて更新する。

| 入力結果（受信） | 処理 |
|---|---|
| 1・2・5（入力区分そのまま） | 修正。修正した枝番を更新し、後の枝番（未配車のもの）に乗務員・車両・日付のずれを反映する |
| 9 | 減便。修正した枝番から最終枝番までを減便にする |
| D | 削除。増便の指令書を削除する |
| R | 減便からの復活 |

```mermaid
flowchart LR
    DDP[BU10900P<br/>DDP BU09] -- 修正データ 250バイト --> C[BU20900P<br/>CIC1 B09U]
    C <--> UNK[(VKUNKSH<br/>運行指令マスター)]
    C --> REF[(VKLNFRY・VKKDMST<br/>VKTENMS・VKHCBKM<br/>VKFIXNW・VKHGINT)]
    C -- 結果 169バイト --> DDP
    C -- 稼働データ TS --> BZ[BZ20200P<br/>XCTL]
```

---

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

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

トランザクションID（4）＋エラーフラグ（1）＋エラーコード（4）＋配車修正照会後、検証後データ（CEDPBU07、241バイト）。主な項目は [BU10800P_仕様書.md](BU10800P_仕様書.md) の 3.2 の表と同じ。入力結果（UNKNYUK）には BU10900P が画面の入力区分をセットしている。

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

| 項目ID | 項目名 | 内容 |
|---|---|---|
| SESS_ERR_FLG・SESS_ERR_CODE | エラーフラグ・エラーコード | フラグは '0'。マスターの読込みエラー時は応答コード（16進表示）をエラーコードにセット |
| DNKTERM・DNKSHNO | 端末ＩＤ・指令書ＮＯ | 受信した値 |
| DNKNYUK | 入力結果 | 処理結果（下表） |
| UNQENTC ほか（UNQPDAT） | 印刷用データ | 修正が成功した場合だけ（3.4） |

| 入力結果 | 意味 | DDP のメッセージ |
|---|---|---|
| 1 | 修正した | 修正ＯＫ！！ |
| 2 | 復活した | 復活しました。 |
| 3 | 削除した | 削除しました。 |
| 9 | 減便にした | 減便になりました。 |
| 0 | 修正した枝番が配車未入力 | 配車未入力です。！！ |
| 4 | 枝番のレコードがない | 枝番前後の指令書無し |
| 7 | 送付書がある、または入力区分が対象外 | 入力済で修正不可能！ |
| 8 | マスターの I/O エラー、ライナー・フェリー料金マスターがない | マスターＩ／Ｏエラー |
| ? | 枝番のチェックデジットを作れない | 　　？？？？？？ |

（入力結果 5「修正済、次の枝番無し」は本プログラムでは返さない。）

---

## 3. 処理仕様

### 3.1 処理の流れ

```mermaid
flowchart TD
    S([受信]) --> PRE{入力結果 9・D}
    PRE -- はい --> CHK[後の枝番の事前確認 3.2]
    PRE -- いいえ --> LF
    CHK --> LF{運行車区分 03・04・05}
    LF -- はい --> LFR[料金マスター確認 3.2]
    LF -- いいえ --> LOOP
    LFR -- なし --> SEND
    LFR -- あり --> LOOP[枝番ごとに読込み・更新 3.3]
    LOOP --> SEND[結果を送信<br/>終了データを受信]
    SEND --> BZ{稼働データあり}
    BZ -- はい --> XCTL[TSキューを書いて<br/>BZ20200P に XCTL]
    BZ -- いいえ --> END([終了])
```

### 3.2 更新前の確認

1. 送信域をクリアし、端末ＩＤ・指令書ＮＯ をセットする。処理する枝番の範囲を「受信した指令書ＮＯ の枝番 ～ 発行枚数」（1ずつ増やす）にする。
2. 入力結果が 9（減便）か D（削除）なら、後の枝番（枝番＋1 ～ 発行枚数）を順に読んで確認する。枝番のキーは LSO0020（区分 '07'、タイプ 'G'）でチェックデジットを作る。
   - 送付書がある（取消送付書枚数 ≠ 送付書枚数 で、送付書枚数 ≠ 0、入力区分 ≠ 0）→ 入力結果 7、更新しない。
   - レコードがない → 入力結果 4、更新しない。その他の読込みエラー → 入力結果 8（エラーコードに応答コード）、更新しない。
   - チェックデジットを作れない → 入力結果 '?'、更新しない。
   - D の場合は、処理の範囲を「発行枚数 ～ 修正した枝番」（1ずつ減らす）に変える。
3. 運行車区分が 03・04・05 なら、ライナー・フェリー料金マスター（VKLNFRY）を「発店＋最終卸店＋運行車区分」で読む。ない、または料金コード（区分 05 はフェリー会社コード（1）、それ以外はライナー料金コード）が 0 なら入力結果 8 にして、更新せずに結果を送信する。

### 3.3 枝番ごとの更新（入力結果 1・2・5 など、数字の 1～8）

範囲の枝番ごとに、運行指令マスターを更新目的で読む（ない → 4、読込みエラー → 8 で中断）。

**(1) 修正した枝番**（入力区分が 1～5 の場合だけ。0 なら入力結果 0、それ以外は 7 で中断）

| 更新する項目 | 値 |
|---|---|
| 指令年月日（＝出発年月日）（VBKBSRDD） | 出発年月日 |
| 特定便区分・特定便ＮＯ | 受信値 |
| 実績の発店（支社区分・発店コード）、実績の着店（最終卸店） | 受信値 |
| 能屯（VBKGNUTN） | 積載車標屯＋トレーラの標屯 |
| 実績運行ＯＷ区分（VBKGOWKB） | 乗務員Ａ・Ｂとも入力 '2'、両方 0 なら空白、片方なら '1' |
| 乗務員コード（Ａ・Ｂ） | 受信値 |
| 車番・標屯・車種（1・2台目、枝番2以降は3・4台目） | 積載とトレーラー。積載の車種が 'F' なら入れ替える（傭車の標屯は入れ替えない） |
| 運行車区分 | 受信値 |
| 予定年月日時分（出発・到着）、予定年月日時分（最終卸し） | 受信した出発・到着の年月日時分 |
| 連絡事項（漢字） | 受信値 |
| 増便（増定減便区分 2）の場合 | 便名（漢字・カナ）、運行形態、計画の発店・着店、乗り継ぎ店コード１・２、計画設定粁（発店・着店（直配なら着地）の所在地で発着地粁程マスターを読む）、計画出発年月日、出発日が変わったら運行日の曜日・休日区分（日付稼働テーブルマスター）、枝番1なら所属の支社区分・店所コード |
| 次運行発店（到着店コード） | 自社便の最終枝番は次運行発店（0 なら最終卸店）、それ以外の枝番は次運行発店と支社区分。予定店コードと違えば、後の枝番の発店に引き継ぐ（4） |
| 傭車便の場合 | フェリー会社・傭車コード＝傭車会社、使用形態（差額的傭車 4 は使用形態 3＋自動車利用運送区分 '1'）、定額傭車料、一車保険料（傭車）、到着店コード＝最終卸店 |
| 自社便の場合 | 一車保険料（自社鮮魚）、フェリー会社・傭車コード＝フェリー会社、到着店コード |
| 着支社・到着月日・直配区分・直配着地コード・直配着地標準最終扱店所 | 受信値 |
| 入力区分 1 の場合 | 出発月日、発支社、発店所コード |
| 到着年月日時分（乗継店・手当付フェリー） | 出発年月日（時分 0）。形態 4 は乗船・引取時刻の両方、それ以外は乗継店がある方 |

書き換えが成功したら入力結果を 1 にして印刷用データ（3.4）を作る。失敗したら 8 で中断。

**(2) 後の枝番**（入力区分が 0（未配車）の場合だけ更新し、それ以外は読み飛ばす）

- 乗務員：修正した枝番の形態が乗継（1～3）でなければ、乗務員Ａ・Ｂ・ＯＷ区分を引き継ぐ。
- 車番・標屯・車種、能屯を引き継ぐ。
- 次運行発店が予定店と違っていた場合、この枝番の発店（支社区分・店所コード）を次運行発店にする。
- 入力区分 1 の便で、計画最終卸日と修正後の到着日のずれ（±1日を超える分）が変わった場合、出発・到着の予定日をその日数ずらす（増便は曜日・休日区分も再設定）。

**(3) 稼働データ**：入力区分が 2 以上（出発点呼済以降）の便で、自社便（運行車区分 01）または手当付フェリー（形態 4）なら変更前の乗務員を削除（'D'）・変更後を登録（'R'）、運行車区分 01・03・05 なら変更前の車番を削除・変更後を登録するデータを作る（3.5）。

### 3.4 印刷用データ（修正が成功した場合）

| 項目 | 値 |
|---|---|
| 最終到着店（UNQENTC） | 実績店所コード。0 なら予定店コード、それも 0 なら配車で予定の店所コード（0 なら計画便マスターよりの店所コード） |
| 積載社番（１）（２）・トレーラ頭等（１）（２） | 車番1・3、車番2・4 |
| 所属店・乗継店１・２ | 所属の店所コード・乗り継ぎ店コード１・２ |
| 出社・退社・到着時分、休憩場所・時間（4件）、標準拘束時間・運転時間・有余時間 | 計画便マスター（VKFIXNW）を計画便コードで読む。休憩場所は店所マスターの店所略名、または高速インターマスターの名称。ない場合は 0・空白 |

### 3.5 減便・削除・復活（入力結果 9・D・R）

| 入力結果 | 条件 | 処理 | 結果 |
|---|---|---|---|
| 9（減便） | 送付書がない（取消送付書枚数 ＝ 送付書枚数、または 0）で、入力区分 < 5 | 増定減便区分を 3、入力区分を 9 にし、予定の時刻・指令年月日・保険料・実績の項目・送付書枚数などをクリアして書き換える（範囲の全枝番） | 9 |
| D（削除） | 同上 | 最終枝番から順にレコードを削除する（修正した枝番が 1 なら全枝番を削除）。途中の枝番から削除する場合は、発行枚数を1減らし継続入力区分を更新して書き換える | 3 |
| R（復活） | 入力区分が 9 | 増定減便区分・入力区分を 0 にして書き換える（範囲の全枝番） | 2 |
| 上記以外 | | 書き換えずに中断。入力区分 0 なら入力結果 0、それ以外は 7 | |

減便・削除では、入力区分が 2 以上の便の乗務員・車番を稼働データの削除（'D'）として作る。

### 3.6 結果の送信と後処理

1. 結果（169バイト）を送信して応答を待ち（INVITE WAIT）、DDP からの終了データを受信する。
2. 稼働データが1件以上あれば、TSキュー（端末ＩＤ＋現在の分秒）に稼働データ（件数×50＋5バイト。計画所属始発年月日・計画便コード・発店・実績年月日時分・到着店・時刻（入力区分 5 以上）・指令書ＮＯ・形態区分と、社番・乗務員コードごとの区分（1：車両、2：乗務員）・削除／登録）を書き、BZ20200P に XCTL する（車両稼働・乗務員稼働の更新）。
3. 稼働データがなければ終了する。

---

## 4. 補足・留意事項

1. **集信ログは出力しない**：保険料（自社鮮魚・傭車）がある便の修正・減便・削除では、センター集信ログ（BATCH4、レコードＩＤ 430）のデータを作るが、TD キュー（SYUD）への書込みがコメントになっており出力していない。
2. **傭車の携帯番号チェックは無効**：傭車の携帯番号（VKKTAIN）を確認して入力結果 A を返す処理はコメントになっている（GPS 対応 2008.11 の記述あり）。BU10900P の「携帯№無し　Ｆ５修正」は表示されない。
3. **入力結果 5 は返さない**：BU10900P は 5 を「修正済、次の枝番無し」とするが、本プログラムには 5 を返す処理がない。
4. **途中の枝番からの削除**：削除を途中の枝番から行う場合（発行枚数を減らして書き換える処理）は、BU10800P・BV10800P が削除を「最終枝番または1枚目」に限っているため、通常は通らない。最終枝番を削除した場合、前の枝番の発行枚数は更新しない。
5. **修正した枝番より前の枝番は更新しない**：範囲は修正した枝番から最終枝番まで。
6. **ライナー・フェリー料金マスターがないときのメッセージ**：料金マスターがない場合も入力結果 8 のため、DDP には「マスターＩ／Ｏエラー」と表示される。
7. **応答コードの表示**：読込みエラー時はエラーコードに応答コードをセットするが、BU10900P はこの値を表示しない。
