Skip to the content.

チョコレート卸向け納品計画システム 業務フロー設計

全体フロー図

[1. 発注受付] → [2. 在庫確認] → [3. 自動計算] → [4. 計画確認] → [5. 納品実行]
     ↓              ↓                ↓              ↓              ↓
  pending      在庫チェック      processing      計画調整      completed
                                                              在庫減算

1. 発注受付フロー

1.1 デパートからの発注

画面: 発注管理 (/orders)

アクション:

  1. 「新規発注」ボタンをクリック
  2. 発注情報を入力
    • デパート名(選択式)
    • 商品(選択式)
    • 数量(個数)
    • 希望納品日
  3. 「登録」ボタンで発注を追加

データ更新:

Order {
  id: 自動採番
  department: 入力値
  productCode: 入力値
  quantity: 入力値
  desiredDeliveryDate: 入力値
  status: "pending" // 初期ステータス
  createdAt: 現在時刻
}

画面表示:


2. 在庫確認フロー

2.1 在庫の確認

画面: 在庫管理 (/inventory)

確認項目:

  1. 対象商品の在庫数
  2. 各ロットの賞味期限
  3. 発注数量に対する過不足

在庫不足の場合:

データ更新:

Inventory {
  id: 自動採番
  productCode: 入力値
  lotNumber: 入力値
  expiryDate: 入力値
  cases: 入力値
  createdAt: 現在時刻
}

3. 自動計算フロー

3.1 計算の実行

画面: 自動計算 (/calculate)

実行条件:

計算処理:

ステップ1: 在庫確認

ステップ2: 賞味期限チェック

ステップ3: 納品日計算

ステップ4: ロット割り当て

ステップ5: 計画生成

DeliveryPlan {
  id: 自動採番
  deliveryDate: 計算された納品日
  department: 発注のデパート名
  productCode: 発注の商品コード
  productName: 商品名
  cases: 割り当てケース数
  lotNumber: 使用ロット
  expiryDate: ロットの賞味期限
  warning: 警告メッセージ該当時
  orderId: 元の発注ID
}

発注ステータス更新:

Order.status = "pending"  "processing"

計算ログ出力: 各ステップで処理内容をログに記録


4. 納品計画確認フロー

4.1 計画の確認

画面: 納品計画 (/delivery-plan)

表示内容:

4.2 計画の調整(将来機能)

4.3 計画の承認

アクション:

  1. 内容を確認
  2. 「計画を承認」ボタンをクリック
  3. 確認ダイアログで最終確認

データ更新:

DeliveryPlan.status = "draft"  "approved"

5. 納品実行フロー

5.1 納品の実行

画面: 納品計画 (/delivery-plan)

アクション:

  1. 「納品実行」ボタンをクリック
  2. 実行確認ダイアログ

処理内容:

在庫の減算

計画の各行に対して:
  対象ロットのケース数 -= 計画のケース数

  if (ロットのケース数 == 0) {
    ロットを削除
  }

発注ステータス更新

Order.status = "processing"  "completed"
Order.completedAt = 現在時刻

納品実績の記録

DeliveryHistory {
  id: 自動採番
  planId: 納品計画ID
  orderId: 発注ID
  deliveryDate: 納品日
  actualDeliveryDate: 実際の納品日通常は計画と同じ
  cases: 納品ケース数
  executedAt: 実行時刻
  executedBy: 実行者将来の認証機能で
}

5.2 Excel出力

アクション:


ステータス遷移図

発注ステータス

[pending]
   ↓
  自動計算実行
   ↓
[processing]
   ↓
  納品実行
   ↓
[completed]

納品計画ステータス(将来機能)

[draft]
   ↓
  計画承認
   ↓
[approved]
   ↓
  納品実行
   ↓
[delivered]

データ連携

発注 → 計算 → 計画 → 実績

Order (発注)
  ↓ 参照
DeliveryPlan (計画)
  ↓ 参照
DeliveryHistory (実績)

Inventory (在庫)
  ↓ 参照
DeliveryPlan (計画)
  ↓ 減算
Inventory (在庫更新)

エラーハンドリング

在庫不足エラー

発生タイミング: 自動計算時

条件:

総在庫ケース数 < 必要ケース数

対応:

  1. エラーログを表示
  2. 不足ケース数を明示
  3. 計算を中断
  4. 在庫追加を促す

賞味期限エラー

発生タイミング: 自動計算時

条件:

すべてのロットで (賞味期限 - 納品日) < 30日

対応:

  1. 警告ログを表示
  2. 該当ロットを明示
  3. 計算は続行(警告付き計画を生成)

納品日エラー

発生タイミング: 自動計算時

条件:

希望納品日から1ヶ月以内に納品可能日が見つからない

対応:

  1. エラーログを表示
  2. デパートの納品可能曜日を明示
  3. 代替日の提案

画面遷移パターン

通常フロー

発注管理 → 在庫管理 → 自動計算 → 納品計画
   ↑                                    ↓
   └──────────── Excel出力 ─────────────┘

エラー時フロー

自動計算 → エラー検出 → 在庫管理(在庫追加)→ 自動計算(再実行)

業務ルール詳細

1. 賞味期限優先ルール

ロットを賞味期限の昇順古い順でソート
古いロットから順に割り当て

2. 納品時30日以上ルール

if ((expiryDate - deliveryDate) < 30) {
  該当ロットをスキップ
  警告を記録
}

3. デパート別納品曜日ルール

const deliveryRules = {
  "高島屋": [2, 5],  // 火曜・金曜
  "伊勢丹": [1, 4],  // 月曜・木曜
  "三越": [3, 6],    // 水曜・土曜
  "大丸": [1, 3, 5], // 月水金
}

希望納品日から最も近い納品可能曜日を選定

4. 1回最大20ケースルール

if (必要ケース数 > 20) {
  複数の納品計画に分割
  分割数 = Math.ceil(必要ケース数 / 20)
  各回の納品日は納品可能曜日で分散
}

将来の拡張機能

フェーズ2

フェーズ3

フェーズ4


文書終わり