Fab Forward Dev/

DDD ドキュメント

集約: 外注手配 / Aggregate: Procurement

バウンデッドコンテキスト: bc-procurement

PurchaseOrder(手配)

PurchaseOrder (集約ルート)
├── → SalesOrder     (受注への参照)
├── → Supplier       (仕入先への参照)
└── → GoodsReceipt[] (受入 — 別集約)
プロパティ説明
poNumberstring注文番号
orderNumberstring紐付く受注番号
supplierCodestring仕入先コード
procurementStatusProcurementStatus手配状況
procurementTypeProcurementItemType手配品区分 (材料/部品/購入品/外注)
isOrderedboolean発注済みフラグ
expenseCategoryExpenseCategory費目区分
poOutputMethodPOOutputMethod注文書出力方法 (紙/FAX/メール/出力なし)

不変条件 (Invariants)

  • 1 つの受注に対して複数の手配が存在可能 (1:N)
  • 発注済み (`isOrdered = true`) の手配は変更不可 (注文書発行後)
  • 手配不要は受注直後のみ設定可能
  • 仕入先コードは仕入先マスタに存在する必要がある
  • 手配品区分 (材料/部品/購入品/外注) は必須
  • **ルーティング分岐**: 同一入力の行が手配品種別 + 社内外区分の組合せで保存先が3分岐: ①購入品 → 外注手配、②製作品+社外仕入先 → 外注手配、③製作品+社内部署 → 製作指示 (ProductionInstruction 集約へ)
  • **購入品に社内仕入先は不可**: 購入品の行に社内部署を仕入先として選択することは禁止
  • **工事完了ロック**: 受注の完了日が設定済みの場合、全操作を無効化

計算フィールド

フィールド計算式トリガー
手配金額`quantity × purchaseUnitPrice`数量・単価は小数2桁、金額は整数
行番号 (SEQ)`MAX(既存SEQ)`手動追加行は SEQ >= 90000、Excel インポート行は < 90000。手動行のみ削除可能

自動入力

  • **型式入力時**: 過去の受入実績から価格履歴をリアルタイム検索。候補選択で品番・品名・型式・材質・単価・仕入先を一括自動入力
  • **ユニットコード入力時**: 部品表マスタからユニット名を取得し、明細にデータロード
  • **受注番号入力時**: 得意先名・納入先名・品名・納期を受注マスタから自動表示
  • **新規行追加時**: ステータス=作成中、種別=製作品、社内外=社外、確認者=ログインユーザー

コマンド

コマンドガード条件アクション
登録 (Save)入力検証通過手配品種別+社内外区分に基づき外注手配 or 製作指示にルーティング保存
Excel取込受注番号+ユニットコード必須Excel インポート (SEQ < 90000)
行削除手動追加行 (SEQ >= 90000) AND 作成中のみインポート行は削除不可
確定入力検証通過ステータス→確定済、確認者コード+確認日を記録
承認承認検証通過 (金額上限チェック含む)ステータス→承認済、承認者コード+承認日を記録
発注発注検証通過仕入先+納期でグルーピング → 注文書発行へ
見積依頼保存済み + 部品情報あり + 未発注 + 手配不要でない + 社内でない仕入先に見積依頼を送信
一括設定選択行あり選択行に仕入先・納期を一括設定
注文書発行選択あり + 同一ユニットコード注文書番号を採番、ステータス→発注済、発注済みフラグON、バーコード生成。出力方法は仕入先マスタの設定に従う (印刷/FAX/メール/出力なし)

ライフサイクル (State Machine)

新システムでは承認ワークフローを汎用サブシステムとして切り出し、手配固有のステータスは「作成中→発注済→受入→検収→手配不要」に簡素化することを検討。


GoodsReceipt(受入)