# B2B見積受発注システム バッチ設計書

## 概要・目的

本ドキュメントは、B2B見積受発注システムにおけるバッチ処理の設計仕様を定義するものである。システムにおいて必要となるバッチ処理の一覧、各バッチの詳細な処理仕様、入出力データ、エラー処理、実行条件などを明確にすることで、システム開発および運用における指針とする。

本システムは、卸売業者が購入者（バイヤー）からの見積依頼を受け、必要に応じてメーカーへの見積依頼を行い、最終的に注文から配送までの一連のプロセスを管理するものである。これらのプロセスを効率化するため、複数のバッチ処理が必要となる。

## バッチ一覧

| No | 機能名 | 機能概要 | 実行頻度 | 実行時刻 | 依存関係 |
|----|--------|----------|----------|----------|----------|
| 1 | 見積依頼自動取得 | バイヤーが統合プラットフォームで作成した見積依頼を自動的に取得し、システムに登録する | 1時間毎 | 毎時00分 | なし |
| 2 | AI見積依頼分析 | 取得した見積依頼内容をAIが分析し、不明点や確認すべき項目をリストアップする | 見積依頼取得後 | 見積依頼取得の5分後 | 見積依頼自動取得 |
| 3 | 商品パターン自動判別 | 見積依頼内容から商品パターン（規定商品/カスタマイズ商品）を自動判別する | 見積質問回答受領後 | 見積質問回答受領の5分後 | 見積質問回答受領 |
| 4 | メーカー見積依頼送信 | カスタマイズ商品の場合、作成された見積依頼をメーカーに自動的にメール送信する | 商品パターン判別後 | 商品パターン判別の5分後 | 商品パターン自動判別 |
| 5 | 見積回答書自動生成 | 見積管理シートの情報から、バイヤー向けの見積回答書を自動的に作成する | 見積情報完成後 | 見積情報完成の5分後 | 見積質問回答受領、メーカー見積回答受領 |
| 6 | 承認ワークフロー起動 | 見積回答書の承認プロセスを開始し、承認者に通知する | 見積回答書生成後 | 見積回答書生成の5分後 | 見積回答書自動生成 |
| 7 | 注文受領 | バイヤーからの注文データを受領し、システムに登録する | 1時間毎 | 毎時10分 | なし |
| 8 | 在庫自動確認 | 規定商品の場合、自社倉庫の在庫状況を自動的に確認する | 注文受領後 | 注文受領の5分後 | 注文受領 |
| 9 | メーカー注文送信 | カスタマイズ商品の場合、作成された注文情報をメーカーに対して自動的にメール送信する | 注文受領後 | 注文受領の10分後 | 注文受領 |
| 10 | 注文請書自動生成 | 受領した注文情報から、バイヤー向けの注文請書を自動的に作成する | 在庫確認後、メーカー注文請書受領後 | 在庫確認またはメーカー注文請書受領の5分後 | 在庫自動確認、メーカー注文請書受領 |
| 11 | 注文情報自動連携 | 確定した注文情報を基幹システムに送信し、在庫引当や出荷準備を開始する | 注文請書送付後 | 注文請書送付の5分後 | 注文請書送付 |
| 12 | 配送スケジュール自動通知 | 注文情報から配送スケジュールを作成し、バイヤーに通知する | 注文情報自動連携後 | 注文情報自動連携の5分後 | 注文情報自動連携 |
| 13 | 配送状況自動追跡 | 配送業者からのステータス情報を取得し、システムに記録する | 1時間毎 | 毎時30分 | 配送スケジュール自動通知 |

## 各バッチ詳細

### 1. 見積依頼自動取得

#### 1-1 機能概要
バイヤーが統合プラットフォーム上で作成した見積依頼データを定期的に取得し、システムに登録する機能。見積依頼の基本情報、要求仕様、希望納期などを取得し、見積管理シートに格納する。

#### 1-2 処理フロー
1. 統合プラットフォームのAPIを呼び出し、未取得の見積依頼データを取得する
2. 取得したデータの形式チェックを行う
3. データを見積管理シートの形式に変換する
4. 見積依頼データをデータベースに登録する
5. 取得した見積依頼データのステータスを「取得済み」に更新する
6. 処理結果をログに出力する

#### 1-3 入力データ仕様
- データソース: 統合プラットフォームAPI
- 取得対象: 未取得の見積依頼データ
- データ形式: JSON
- 主要項目:
  - 見積依頼ID
  - バイヤー情報（会社名、担当者名、連絡先）
  - 商品情報（品名、数量、仕様）
  - 希望納期
  - 添付ファイル
  - 見積依頼日時

#### 1-4 出力データ仕様
- データ形式: データベースレコード
- 出力先: 見積依頼テーブル
- 主要項目:
  - 見積依頼ID
  - バイヤー情報（会社名、担当者名、連絡先）
  - 商品情報（品名、数量、仕様）
  - 希望納期
  - 添付ファイルパス
  - 見積依頼日時
  - ステータス（初期値: 「新規」）

#### 1-5 エラー処理
- API接続エラー: 3回まで再試行し、失敗した場合はエラーログを出力し、システム管理者に通知
- データ形式エラー: エラーログを出力し、該当データをエラーテーブルに格納
- データベース登録エラー: トランザクションをロールバックし、エラーログを出力

#### 1-6 実行条件
- 実行頻度: 1時間毎
- 実行時刻: 毎時00分
- 前提条件: 統合プラットフォームとの接続が確立されていること

#### 1-7 ログ出力仕様
- ログレベル: INFO, WARN, ERROR
- 出力項目:
  - 実行日時
  - 処理件数（取得件数、成功件数、失敗件数）
  - エラー内容（発生時）
  - 処理時間

#### 1-8 リトライ設計
- リトライ対象: API接続エラー
- リトライ回数: 最大3回
- リトライ間隔: 30秒
- リトライ後の最終失敗時: エラーログ出力、システム管理者に通知

### 2. AI見積依頼分析

#### 2-1 機能概要
取得した見積依頼内容をAIが分析し、不明点や確認すべき項目をリストアップする機能。見積依頼の内容を解析し、曖昧な表現や不足情報、技術的な確認事項などを自動的に抽出する。

#### 2-2 処理フロー
1. 見積依頼テーブルから未分析の見積依頼データを取得する
2. 見積依頼データをAI分析用のフォーマットに変換する
3. AI分析エンジンにデータを送信し、分析を実行する
4. 分析結果から不明点や確認事項をリストとして抽出する
5. 抽出したリストを見積質問テーブルに登録する
6. 見積依頼のステータスを「AI分析済み」に更新する
7. 処理結果をログに出力する

#### 2-3 入力データ仕様
- データソース: 見積依頼テーブル
- 取得条件: ステータスが「新規」のレコード
- データ形式: データベースレコード
- 主要項目:
  - 見積依頼ID
  - 商品情報（品名、数量、仕様）
  - 希望納期
  - 添付ファイル内容（テキスト抽出）

#### 2-4 出力データ仕様
- データ形式: データベースレコード
- 出力先: 見積質問テーブル
- 主要項目:
  - 見積依頼ID
  - 質問ID
  - 質問カテゴリ（仕様、納期、価格など）
  - 質問内容
  - 重要度（高、中、低）
  - ステータス（初期値: 「未確認」）

#### 2-5 エラー処理
- AI分析エンジン接続エラー: 3回まで再試行し、失敗した場合はエラーログを出力し、システム管理者に通知
- 分析処理エラー: エラーログを出力し、該当データを手動分析対象としてマーク
- データベース登録エラー: トランザクションをロールバックし、エラーログを出力

#### 2-6 実行条件
- 実行頻度: 見積依頼取得後
- 実行時刻: 見積依頼取得の5分後
- 前提条件: 見積依頼データが取得済みであること、AI分析エンジンが利用可能であること

#### 2-7 ログ出力仕様
- ログレベル: INFO, WARN, ERROR
- 出力項目:
  - 実行日時
  - 処理件数（分析件数、成功件数、失敗件数）
  - 抽出された質問数
  - エラー内容（発生時）
  - 処理時間

#### 2-8 リトライ設計
- リトライ対象: AI分析エンジン接続エラー、分析処理エラー
- リトライ回数: 最大3回
- リトライ間隔: 60秒
- リトライ後の最終失敗時: エラーログ出力、手動分析対象としてマーク、システム管理者に通知

### 3. 商品パターン自動判別

#### 3-1 機能概要
見積依頼内容から商品パターン（規定商品/カスタマイズ商品）を自動判別する機能。商品の特性に基づいて適切なフローに振り分ける。

#### 3-2 処理フロー
1. 見積依頼テーブルから質問回答が完了した見積依頼データを取得する
2. 商品情報を抽出し、商品マスタと照合する
3. 商品コードが完全一致する場合は「規定商品」と判定
4. 商品コードが一致しない、またはカスタマイズ要素がある場合は「カスタマイズ商品」と判定
5. 判定結果を見積依頼テーブルに更新する
6. 処理結果をログに出力する

#### 3-3 入力データ仕様
- データソース: 見積依頼テーブル、見積質問テーブル
- 取得条件: 見積質問のステータスが全て「回答済み」の見積依頼
- データ形式: データベースレコード
- 主要項目:
  - 見積依頼ID
  - 商品情報（品名、数量、仕様）
  - 質問回答内容

#### 3-4 出力データ仕様
- データ形式: データベースレコード更新
- 出力先: 見積依頼テーブル
- 主要項目:
  - 見積依頼ID
  - 商品パターン（規定商品/カスタマイズ商品）
  - ステータス（「商品パターン判別済み」）

#### 3-5 エラー処理
- 商品判別エラー: エラーログを出力し、手動判別対象としてマーク
- データベース更新エラー: トランザクションをロールバックし、エラーログを出力

#### 3-6 実行条件
- 実行頻度: 見積質問回答受領後
- 実行時刻: 見積質問回答受領の5分後
- 前提条件: 見積質問の回答が全て完了していること

#### 3-7 ログ出力仕様
- ログレベル: INFO, WARN, ERROR
- 出力項目:
  - 実行日時
  - 処理件数（判別件数、規定商品数、カスタマイズ商品数、失敗件数）
  - エラー内容（発生時）
  - 処理時間

#### 3-8 リトライ設計
- リトライ対象: データベース更新エラー
- リトライ回数: 最大3回
- リトライ間隔: 30秒
- リトライ後の最終失敗時: エラーログ出力、手動判別対象としてマーク

### 4. メーカー見積依頼送信

#### 4-1 機能概要
カスタマイズ商品の場合、作成された見積依頼をメーカーに自動的にメール送信する機能。メーカーへの見積依頼書を生成し、対応するメーカーに送信する。

#### 4-2 処理フロー
1. 見積依頼テーブルから商品パターンが「カスタマイズ商品」かつ未送信のデータを取得する
2. メーカーマスタから対応するメーカー情報を取得する
3. メーカー向け見積依頼書を生成する
4. メーカー向け見積依頼メールを作成する
5. メールにPDF形式の見積依頼書を添付する
6. メーカーにメールを送信する
7. 送信結果を見積依頼テーブルに更新する
8. 処理結果をログに出力する

#### 4-3 入力データ仕様
- データソース: 見積依頼テーブル、メーカーマスタ
- 取得条件: 商品パターンが「カスタマイズ商品」かつメーカー見積依頼が未送信
- データ形式: データベースレコード
- 主要項目:
  - 見積依頼ID
  - 商品情報（品名、数量、仕様）
  - メーカーID
  - メーカー担当者情報

#### 4-4 出力データ仕様
- データ形式1: PDF（見積依頼書）
- 出力先1: ファイルストレージ
- 主要項目1:
  - 見積依頼ID
  - 依頼日
  - 商品情報
  - 希望納期
  - 特記事項

- データ形式2: メール
- 出力先2: メーカー担当者メールアドレス
- 主要項目2:
  - 件名: 「見積依頼 - [見積依頼ID]」
  - 本文: 定型文（見積依頼の概要、回答期限など）
  - 添付ファイル: 見積依頼書PDF

- データ形式3: データベースレコード更新
- 出力先3: 見積依頼テーブル
- 主要項目3:
  - 見積依頼ID
  - メーカー見積依頼送信日時
  - ステータス（「メーカー見積依頼送信済み」）

#### 4-5 エラー処理
- メーカー情報取得エラー: エラーログを出力し、システム管理者に通知
- PDF生成エラー: エラーログを出力し、該当データを手動処理対象としてマーク
- メール送信エラー: 3回まで再試行し、失敗した場合はエラーログを出力し、システム管理者に通知
- データベース更新エラー: トランザクションをロールバックし、エラーログを出力

#### 4-6 実行条件
- 実行頻度: 商品パターン判別後
- 実行時刻: 商品パターン判別の5分後
- 前提条件: 商品パターンが「カスタマイズ商品」と判別されていること

#### 4-7 ログ出力仕様
- ログレベル: INFO, WARN, ERROR
- 出力項目:
  - 実行日時
  - 処理件数（送信件数、成功件数、失敗件数）
  - メーカーごとの送信件数
  - エラー内容（発生時）
  - 処理時間

#### 4-8 リトライ設計
- リトライ対象: メール送信エラー
- リトライ回数: 最大3回
- リトライ間隔: 5分
- リトライ後の最終失敗時: エラーログ出力、手動送信対象としてマーク、システム管理者に通知

### 5. 見積回答書自動生成

#### 5-1 機能概要
見積管理シートの情報から、バイヤー向けの見積回答書を自動的に作成する機能。見積情報、価格情報、納期情報などを含む見積回答書を生成する。

#### 5-2 処理フロー
1. 見積依頼テーブルから必要な情報が揃った見積依頼データを取得する
2. 規定商品の場合は商品マスタから価格情報を取得
3. カスタマイズ商品の場合はメーカー見積回答から価格情報を取得
4. 配送料金を計算し、見積管理シートに反映
5. 見積回答書テンプレートに情報を埋め込む
6. PDF形式の見積回答書を生成
7. 生成した見積回答書の情報をデータベースに登録
8. 処理結果をログに出力する

#### 5-3 入力データ仕様
- データソース1: 見積依頼テーブル
- 取得条件1: 必要情報が揃った見積依頼（規定商品または「メーカー見積回答受領済み」のカスタマイズ商品）
- データ形式1: データベースレコード
- 主要項目1:
  - 見積依頼ID
  - 商品情報（品名、数量、仕様）
  - 商品パターン

- データソース2: 商品マスタ（規定商品の場合）
- 取得条件2: 見積依頼に含まれる商品コード
- データ形式2: データベースレコード
- 主要項目2:
  - 商品コード
  - 単価
  - リードタイム

- データソース3: メーカー見積回答テーブル（カスタマイズ商品の場合）
- 取得条件3: 対応する見積依頼ID
- データ形式3: データベースレコード
- 主要項目3:
  - 見積依頼ID
  - 見積金額
  - 納期

#### 5-4 出力データ仕様
- データ形式1: PDF（見積回答書）
- 出力先1: ファイルストレージ
- 主要項目1:
  - 見積依頼ID
  - 回答日
  - バイヤー情報
  - 商品情報
  - 単価・数量・金額
  - 納期
  - 配送料
  - 合計金額
  - 特記事項

- データ形式2: データベースレコード
- 出力先2: 見積回答テーブル
- 主要項目2:
  - 見積依頼ID
  - 見積回答ID
  - 見積回答書ファイルパス
  - 回答日
  - 金額情報
  - 納期情報
  - ステータス（「見積回答書生成済み」）

#### 5-5 エラー処理
- データ取得エラー: エラーログを出力し、該当データを手動処理対象としてマーク
- PDF生成エラー: エラーログを出力し、該当データを手動処理対象としてマーク
- データベース登録エラー: トランザクションをロールバックし、エラーログを出力

#### 5-6 実行条件
- 実行頻度: 見積情報完成後
- 実行時刻: 見積情報完成の5分後
- 前提条件: 
  - 規定商品: 商品パターンが「規定商品」と判別され、配送料金が入力されていること
  - カスタマイズ商品: メーカーからの見積回答を受領し、配送料金が入力されていること

#### 5-7 ログ出力仕様
- ログレベル: INFO, WARN, ERROR
- 出力項目:
  - 実行日時
  - 処理件数（生成件数、成功件数、失敗件数）
  - 商品パターン別の生成件数
  - エラー内容（発生時）
  - 処理時間

#### 5-8 リトライ設計
- リトライ対象: PDF生成エラー、データベース登録エラー
- リトライ回数: 最大3回
- リトライ間隔: 30秒
- リトライ後の最終失敗時: エラーログ出力、手動生成対象としてマーク、システム管理者に通知

### 6. 承認ワークフロー起動

#### 6-1 機能概要
見積回答書の承認プロセスを開始し、承認者に通知する機能。承認ルートに基づいて承認者にタスクを割り当て、承認依頼を通知する。

#### 6-2 処理フロー
1. 見積回答テーブルからステータスが「見積回答書生成済み」のデータを取得する
2. 見積金額に応じた承認ルートを決定する
3. 承認ワークフローを作成し、最初の承認者にタスクを割り当てる
4. 承認者に承認依頼メールを送信する
5. 見積回答のステータスを「承認待ち」に更新する
6. 処理結果をログに出力する

#### 6-3 入力データ仕様
- データソース1: 見積回答テーブル
- 取得条件1: ステータスが「見積回答書生成済み」
- データ形式1: データベースレコード
- 主要項目1:
  - 見積依頼ID
  - 見積回答ID
  - 見積回答書ファイルパス
  - 金額情報

- データソース2: 承認ルートマスタ
- 取得条件2: 見積金額に応じたルート
- データ形式2: データベースレコード
- 主要項目2:
  - 承認ルートID
  - 承認レベル
  - 承認者役割
  - 金額閾値

- データソース3: ユーザーマスタ
- 取得条件3: 承認者役割に対応するユーザー
- データ形式3: データベースレコード
- 主要項目3:
  - ユーザーID
  - メールアドレス
  - 役割

#### 6-4 出力データ仕様
- データ形式1: データベースレコード
- 出力先1: 承認ワークフローテーブル
- 主要項目1:
  - 承認ワークフローID
  - 見積回答ID
  - 承認ルートID
  - 現在の承認レベル
  - ステータス（「承認待ち」）

- データ形式2: データベースレコード
- 出力先2: 承認タスクテーブル
- 主要項目2:
  - 承認タスクID
  - 承認ワークフローID
  - 承認者ID
  - 承認レベル
  - 割当日時
  - ステータス（「未承認」）

- データ形式3: メール
- 出力先3: 承認者メールアドレス
- 主要項目3:
  - 件名: 「見積回答書承認依頼 - [見積回答ID]」
  - 本文: 承認依頼の概要、承認期限、承認画面へのリンク
  - 添付ファイル: 見積回答書PDF

- データ形式4: データベースレコード更新
- 出力先4: 見積回答テーブル
- 主要項目4:
  - 見積回答ID
  - ステータス（「承認待ち」）

#### 6-5 エラー処理
- 承認ルート決定エラー: エラーログを出力し、デフォルトルートを適用
- 承認者取得エラー: エラーログを出力し、システム管理者に通知
- メール送信エラー: 3回まで再試行し、失敗した場合はエラーログを出力し、システム管理者に通知
- データベース登録/更新エラー: トランザクションをロールバックし、エラーログを出力

#### 6-6 実行条件
- 実行頻度: 見積回答書生成後
- 実行時刻: 見積回答書生成の5分後
- 前提条件: 見積回答書が生成されていること

#### 6-7 ログ出力仕様
- ログレベル: INFO, WARN, ERROR
- 出力項目:
  - 実行日時
  - 処理件数（ワークフロー起動件数、成功件数、失敗件数）
  - 承認ルート情報
  - エラー内容（発生時）
  - 処理時間

#### 6-8 リトライ設計
- リトライ対象: メール送信エラー
- リトライ回数: 最大3回
- リトライ間隔: 5分
- リトライ後の最終失敗時: エラーログ出力、システム管理者に通知

### 7. 注文受領

#### 7-1 機能概要
バイヤーからの注文データを受領し、システムに登録する機能。統合プラットフォーム経由で送信された注文を自動取得する。

#### 7-2 処理フロー
1. 統合プラットフォームのAPIを呼び出し、未取得の注文データを取得する
2. 取得したデータの形式チェックを行う
3. データを注文管理の形式に変換する
4. 注文データをデータベースに登録する
5. 取得した注文データのステータスを「取得済み」に更新する
6. 処理結果をログに出力する

#### 7-3 入力データ仕様
- データソース: 統合プラットフォームAPI
- 取得対象: 未取得の注文データ
- データ形式: JSON
- 主要項目:
  - 注文ID
  - 見積回答ID（関連する見積がある場合）
  - バイヤー情報（会社名、担当者名、連絡先）
  - 商品情報（品名、数量、仕様）
  - 希望納期
  - 配送先情報
  - 注文日時

#### 7-4 出力データ仕様
- データ形式: データベースレコード
- 出力先: 注文テーブル
- 主要項目:
  - 注文ID
  - 見積回答ID（関連する見積がある場合）
  - バイヤー情報（会社名、担当者名、連絡先）
  - 商品情報（品名、数量、仕様）
  - 希望納期
  - 配送先情報
  - 注文日時
  - ステータス（初期値: 「新規」）

#### 7-5 エラー処理
- API接続エラー: 3回まで再試行し、失敗した場合はエラーログを出力し、システム管理者に通知
- データ形式エラー: エラーログを出力し、該当データをエラーテーブルに格納
- データベース登録エラー: トランザクションをロールバックし、エラーログを出力

#### 7-6 実行条件
- 実行頻度: 1時間毎
- 実行時刻: 毎時10分
- 前提条件: 統合プラットフォームとの接続が確立されていること

#### 7-7 ログ出力仕様
- ログレベル: INFO, WARN, ERROR
- 出力項目:
  - 実行日時
  - 処理件数（取得件数、成功件数、失敗件数）
  - エラー内容（発生時）
  - 処理時間

#### 7-8 リトライ設計
- リトライ対象: API接続エラー
- リトライ回数: 最大3回
- リトライ間隔: 30秒
- リトライ後の最終失敗時: エラーログ出力、システム管理者に通知

### 8. 在庫自動確認

#### 8-1 機能概要
規定商品の場合、自社倉庫の在庫状況を自動的に確認する機能。注文に含まれる商品の在庫状況を確認し、在庫不足の場合は対応策を検討する。

#### 8-2 処理フロー
1. 注文テーブルからステータスが「新規」かつ商品パターンが「規定商品」のデータを取得する
2. 注文に含まれる商品情報を抽出する
3. 基幹システムのAPI経由で在庫状況を照会する
4. 在庫状況に応じて注文ステータスを更新する
   - 在庫十分: 「在庫確認済み」
   - 在庫不足: 「在庫不足」
5. 在庫確認結果をデータベースに登録する
6. 処理結果をログに出力する

#### 8-3 入力データ仕様
- データソース1: 注文テーブル
- 取得条件1: ステータスが「新規」かつ商品パターンが「規定商品」
- データ形式1: データベースレコード
- 主要項目1:
  - 注文ID
  - 商品情報（品名、商品コード、数量）

- データソース2: 基幹システム在庫API
- 取得条件2: 注文に含まれる商品コード
- データ形式2: API応答（JSON）
- 主要項目2:
  - 商品コード
  - 在庫数量
  - 入荷予定情報

#### 8-4 出力データ仕様
- データ形式1: データベースレコード
- 出力先1: 在庫確認結果テーブル
- 主要項目1:
  - 注文ID
  - 商品コード
  - 確認日時
  - 在庫数量
  - 在庫状況（「十分」「不足」）
  - 入荷予定情報

- データ形式2: データベースレコード更新
- 出力先2: 注文テーブル
- 主要項目2:
  - 注文ID
  - ステータス（「在庫確認済み」または「在庫不足」）

#### 8-5 エラー処理
- API接続エラー: 3回まで再試行し、失敗した場合はエラーログを出力し、システム管理者に通知
- 在庫照会エラー: エラーログを出力し、該当データを手動確認対象としてマーク
- データベース登録/更新エラー: トランザクションをロールバックし、エラーログを出力

#### 8-6 実行条件
- 実行頻度: 注文受領後
- 実行時刻: 注文受領の5分後
- 前提条件: 注文データが取得済みであり、商品パターンが「規定商品」と判別されていること

#### 8-7 ログ出力仕様
- ログレベル: INFO, WARN, ERROR
- 出力項目:
  - 実行日時
  - 処理件数（確認件数、在庫十分件数、在庫不足件数、失敗件数）
  - 商品別在庫状況
  - エラー内容（発生時）
  - 処理時間

#### 8-8 リトライ設計
- リトライ対象: API接続エラー
- リトライ回数: 最大3回
- リトライ間隔: 30秒
- リトライ後の最終失敗時: エラーログ出力、手動確認対象としてマーク、システム管理者に通知

### 9. メーカー注文送信

#### 9-1 機能概要
カスタマイズ商品の場合、作成された注文情報をメーカーに対して自動的にメール送信する機能。メーカーへの注文書を生成し、対応するメーカーに送信する。

#### 9-2 処理フロー
1. 注文テーブルからステータスが「新規」かつ商品パターンが「カスタマイズ商品」のデータを取得する
2. メーカーマスタから対応するメーカー情報を取得する
3. メーカー向け注文書を生成する
4. メーカー向け注文メールを作成する
5. メールにPDF形式の注文書を添付する
6. メーカーにメールを送信する
7. 送信結果を注文テーブルに更新する
8. 処理結果をログに出力する

#### 9-3 入力データ仕様
- データソース1: 注文テーブル
- 取得条件1: ステータスが「新規」かつ商品パターンが「カスタマイズ商品」
- データ形式1: データベースレコード
- 主要項目1:
  - 注文ID
  - 商品情報（品名、数量、仕様）
  - 希望納期
  - 配送先情報

- データソース2: メーカーマスタ
- 取得条件2: 注文に関連するメーカーID
- データ形式2: データベースレコード
- 主要項目2:
  - メーカーID
  - メーカー名
  - 担当者名
  - メールアドレス
  - 連絡先

#### 9-4 出力データ仕様
- データ形式1: PDF（注文書）
- 出力先1: ファイルストレージ
- 主要項目1:
  - 注文ID
  - 注文日
  - 商品情報
  - 数量
  - 希望納期
  - 配送先情報
  - 特記事項

- データ形式2: メール
- 出力先2: メーカー担当者メールアドレス
- 主要項目2:
  - 件名: 「注文依頼 - [注文ID]」
  - 本文: 定型文（注文の概要、納期など）
  - 添付ファイル: 注文書PDF

- データ形式3: データベースレコード更新
- 出力先3: 注文テーブル
- 主要項目3:
  - 注文ID
  - メーカー注文送信日時
  - ステータス（「メーカー注文送信済み」）

#### 9-5 エラー処理
- メーカー情報取得エラー: エラーログを出力し、システム管理者に通知
- PDF生成エラー: エラーログを出力し、該当データを手動処理対象としてマーク
- メール送信エラー: 3回まで再試行し、失敗した場合はエラーログを出力し、システム管理者に通知
- データベース更新エラー: トランザクションをロールバックし、エラーログを出力

#### 9-6 実行条件
- 実行頻度: 注文受領後
- 実行時刻: 注文受領の10分後
- 前提条件: 注文データが取得済みであり、商品パターンが「カスタマイズ商品」と判別されていること

#### 9-7 ログ出力仕様
- ログレベル: INFO, WARN, ERROR
- 出力項目:
  - 実行日時
  - 処理件数（送信件数、成功件数、失敗件数）
  - メーカーごとの送信件数
  - エラー内容（発生時）
  - 処理時間

#### 9-8 リトライ設計
- リトライ対象: メール送信エラー
- リトライ回数: 最大3回
- リトライ間隔: 5分
- リトライ後の最終失敗時: エラーログ出力、手動送信対象としてマーク、システム管理者に通知

### 10. 注文請書自動生成

#### 10-1 機能概要
受領した注文情報から、バイヤー向けの注文請書を自動的に作成する機能。注文情報、価格情報、納期情報などを含む注文請書を生成する。

#### 10-2 処理フロー
1. 注文テーブルから条件に合致するデータを取得する
   - 規定商品: ステータスが「在庫確認済み」
   - カスタマイズ商品: ステータスが「メーカー注文請書受領済み」
2. 注文請書テンプレートに情報を埋め込む
3. PDF形式の注文請書を生成
4. 生成した注文請書の情報をデータベースに登録
5. 注文のステータスを「注文請書生成済み」に更新
6. 処理結果をログに出力する

#### 10-3 入力データ仕様
- データソース: 注文テーブル
- 取得条件: 
  - 規定商品: ステータスが「在庫確認済み」
  - カスタマイズ商品: ステータスが「メーカー注文請書受領済み」
- データ形式: データベースレコード
- 主要項目:
  - 注文ID
  - バイヤー情報（会社名、担当者名、連絡先）
  - 商品情報（品名、数量、仕様）
  - 価格情報
  - 希望納期
  - 配送先情報
  - 注文日時

#### 10-4 出力データ仕様
- データ形式1: PDF（注文請書）
- 出力先1: ファイルストレージ
- 主要項目1:
  - 注文ID
  - 発行日
  - バイヤー情報
  - 商品情報
  - 単価・数量・金額
  - 納期
  - 配送先情報
  - 特記事項

- データ形式2: データベースレコード
- 出力先2: 注文請書テーブル
- 主要項目2:
  - 注文ID
  - 注文請書ID
  - 注文請書ファイルパス
  - 発行日
  - ステータス（「生成済み」）

- データ形式3: データベースレコード更新
- 出力先3: 注文テーブル
- 主要項目3:
  - 注文ID
  - ステータス（「注文請書生成済み」）

#### 10-5 エラー処理
- データ取得エラー: エラーログを出力し、該当データを手動処理対象としてマーク
- PDF生成エラー: エラーログを出力し、該当データを手動処理対象としてマーク
- データベース登録/更新エラー: トランザクションをロールバックし、エラーログを出力

#### 10-6 実行条件
- 実行頻度: 在庫確認後、メーカー注文請書受領後
- 実行時刻: 在庫確認またはメーカー注文請書受領の5分後
- 前提条件: 
  - 規定商品: 在庫確認が完了していること
  - カスタマイズ商品: メーカーからの注文請書を受領していること

#### 10-7 ログ出力仕様
- ログレベル: INFO, WARN, ERROR
- 出力項目:
  - 実行日時
  - 処理件数（生成件数、成功件数、失敗件数）
  - 商品パターン別の生成件数
  - エラー内容（発生時）
  - 処理時間

#### 10-8 リトライ設計
- リトライ対象: PDF生成エラー、データベース登録/更新エラー
- リトライ回数: 最大3回
- リトライ間隔: 30秒
- リトライ後の最終失敗時: エラーログ出力、手動生成対象としてマーク、システム管理者に通知

### 11. 注文情報自動連携

#### 11-1 機能概要
確定した注文情報を基幹システムに送信し、在庫引当や出荷準備を開始する機能。注文請書が送付された注文情報を基幹システムに連携する。

#### 11-2 処理フロー
1. 注文テーブルからステータスが「注文請書送付済み」のデータを取得する
2. 基幹システム連携用のフォーマットにデータを変換する
3. 基幹システムのAPIを呼び出し、注文情報を送信する
4. 基幹システムからの応答を確認する
5. 連携結果を注文テーブルに更新する
6. 処理結果をログに出力する

#### 11-3 入力データ仕様
- データソース: 注文テーブル
- 取得条件: ステータスが「注文請書送付済み」
- データ形式: データベースレコード
- 主要項目:
  - 注文ID
  - バイヤー情報（会社名、担当者名、連絡先）
  - 商品情報（品名、商品コード、数量、仕様）
  - 価格情報
  - 納期
  - 配送先情報
  - 注文日時

#### 11-4 出力データ仕様
- データ形式1: API送信データ（JSON）
- 出力先1: 基幹システムAPI
- 主要項目1:
  - 注文ID
  - 顧客コード
  - 商品コード
  - 数量
  - 納期
  - 配送先情報
  - 価格情報
  - 特記事項

- データ形式2: データベースレコード更新
- 出力先2: 注文テーブル
- 主要項目2:
  - 注文ID
  - 基幹システム連携日時
  - 基幹システム連携結果
  - ステータス（「基幹システム連携済み」）

#### 11-5 エラー処理
- API接続エラー: 3回まで再試行し、失敗した場合はエラーログを出力し、システム管理者に通知
- データ変換エラー: エラーログを出力し、該当データを手動処理対象としてマーク
- 基幹システム処理エラー: エラーログを出力し、エラー内容を記録、システム管理者に通知
- データベース更新エラー: トランザクションをロールバックし、エラーログを出力

#### 11-6 実行条件
- 実行頻度: 注文請書送付後
- 実行時刻: 注文請書送付の5分後
- 前提条件: 注文請書が送付済みであること

#### 11-7 ログ出力仕様
- ログレベル: INFO, WARN, ERROR
- 出力項目:
  - 実行日時
  - 処理件数（連携件数、成功件数、失敗件数）
  - 基幹システム応答情報
  - エラー内容（発生時）
  - 処理時間

#### 11-8 リトライ設計
- リトライ対象: API接続エラー、基幹システム処理エラー
- リトライ回数: 最大3回
- リトライ間隔: 5分
- リトライ後の最終失敗時: エラーログ出力、手動連携対象としてマーク、システム管理者に通知

### 12. 配送スケジュール自動通知

#### 12-1 機能概要
注文情報から配送スケジュールを作成し、バイヤーに通知する機能。基幹システムに連携された注文の配送スケジュールを作成し、バイヤーに通知する。

#### 12-2 処理フロー
1. 注文テーブルからステータスが「基幹システム連携済み」のデータを取得する
2. 基幹システムから配送スケジュール情報を取得する
3. 配送スケジュールデータをデータベースに登録する
4. バイヤー向け配送スケジュール通知メールを作成する
5. バイヤーにメールを送信する
6. 送信結果を注文テーブルに更新する
7. 処理結果をログに出力する

#### 12-3 入力データ仕様
- データソース1: 注文テーブル
- 取得条件1: ステータスが「基幹システム連携済み」
- データ形式1: データベースレコード
- 主要項目1:
  - 注文ID
  - バイヤー情報（会社名、担当者名、連絡先）
  - 商品情報
  - 納期
  - 配送先情報

- データソース2: 基幹システムAPI
- 取得条件2: 注文IDに対応する配送スケジュール
- データ形式2: API応答（JSON）
- 主要項目2:
  - 注文ID
  - 出荷予定日
  - 配送予定日
  - 配送業者情報
  - 配送ステータス

#### 12-4 出力データ仕様
- データ形式1: データベースレコード
- 出力先1: 配送スケジュールテーブル
- 主要項目1:
  - 配送スケジュールID
  - 注文ID
  - 出荷予定日
  - 配送予定日
  - 配送業者情報
  - 配送ステータス

- データ形式2: メール
- 出力先2: バイヤー担当者メールアドレス
- 主要項目2:
  - 件名: 「配送スケジュールのお知らせ - [注文ID]」
  - 本文: 配送スケジュールの詳細情報（出荷予定日、配送予定日、配送業者情報など）
  - 添付ファイル: なし

- データ形式3: データベースレコード更新
- 出力先3: 注文テーブル
- 主要項目3:
  - 注文ID
  - 配送スケジュール通知日時
  - ステータス（「配送スケジュール通知済み」）

#### 12-5 エラー処理
- API接続エラー: 3回まで再試行し、失敗した場合はエラーログを出力し、システム管理者に通知
- データ取得エラー: エラーログを出力し、該当データを手動処理対象としてマーク
- メール送信エラー: 3回まで再試行し、失敗した場合はエラーログを出力し、システム管理者に通知
- データベース登録/更新エラー: トランザクションをロールバックし、エラーログを出力

#### 12-6 実行条件
- 実行頻度: 注文情報自動連携後
- 実行時刻: 注文情報自動連携の5分後
- 前提条件: 注文情報が基幹システムに連携済みであること

#### 12-7 ログ出力仕様
- ログレベル: INFO, WARN, ERROR
- 出力項目:
  - 実行日時
  - 処理件数（通知件数、成功件数、失敗件数）
  - エラー内容（発生時）
  - 処理時間

#### 12-8 リトライ設計
- リトライ対象: API接続エラー、メール送信エラー
- リトライ回数: 最大3回
- リトライ間隔: 5分
- リトライ後の最終失敗時: エラーログ出力、手動通知対象としてマーク、システム管理者に通知

### 13. 配送状況自動追跡

#### 13-1 機能概要
配送業者からのステータス情報を取得し、システムに記録する機能。配送中の商品の現在位置や状態を追跡し、システムに反映する。

#### 13-2 処理フロー
1. 配送スケジュールテーブルから配送ステータスが「出荷済み」かつ「配送完了」でないデータを取得する
2. 配送業者のAPIを呼び出し、配送状況を取得する
3. 取得した配送状況をデータベースに登録する
4. 配送完了の場合は配送ステータスを「配送完了」に更新し、バイヤーに通知する
5. 処理結果をログに出力する

#### 13-3 入力データ仕様
- データソース1: 配送スケジュールテーブル
- 取得条件1: 配送ステータスが「出荷済み」かつ「配送完了」でない
- データ形式1: データベースレコード
- 主要項目1:
  - 配送スケジュールID
  - 注文ID
  - 配送業者情報
  - 追跡番号
  - 配送ステータス

- データソース2: 配送業者API
- 取得条件2: 追跡番号
- データ形式2: API応答（JSON）
- 主要項目2:
  - 追跡番号
  - 現在位置
  - 現在ステータス
  - 更新日時
  - 予定到着時刻

#### 13-4 出力データ仕様
- データ形式1: データベースレコード
- 出力先1: 配送状況テーブル
- 主要項目1:
  - 配送状況ID
  - 配送スケジュールID
  - 現在位置
  - 現在ステータス
  - 更新日時
  - 予定到着時刻

- データ形式2: データベースレコード更新
- 出力先2: 配送スケジュールテーブル
- 主要項目2:
  - 配送スケジュールID
  - 配送ステータス（更新値）
  - 最終更新日時

- データ形式3: メール（配送完了時のみ）
- 出力先3: バイヤー担当者メールアドレス
- 主要項目3:
  - 件名: 「配送完了のお知らせ - [注文ID]」
  - 本文: 配送完了の通知、受領確認依頼
  - 添付ファイル: なし

#### 13-5 エラー処理
- API接続エラー: 3回まで再試行し、失敗した場合はエラーログを出力し、次回バッチ実行時に再処理
- データ取得エラー: エラーログを出力し、次回バッチ実行時に再処理
- メール送信エラー: 3回まで再試行し、失敗した場合はエラーログを出力し、システム管理者に通知
- データベース登録/更新エラー: トランザクションをロールバックし、エラーログを出力

#### 13-6 実行条件
- 実行頻度: 1時間毎
- 実行時刻: 毎時30分
- 前提条件: 配送スケジュールが登録済みであり、配送ステータスが「出荷済み」であること

#### 13-7 ログ出力仕様
- ログレベル: INFO, WARN, ERROR
- 出力項目:
  - 実行日時
  - 処理件数（追跡件数、更新件数、完了件数、失敗件数）
  - 配送業者別の処理件数
  - エラー内容（発生時）
  - 処理時間

#### 13-8 リトライ設計
- リトライ対象: API接続エラー、メール送信エラー
- リトライ回数: 最大3回
- リトライ間隔: 30秒
- リトライ後の最終失敗時: エラーログ出力、次回バッチ実行時に再処理
