コンテンツにスキップ

商社・卸

位置づけ: 第1弾(催事+アイテム+商社)

商社・卸モジュールは、商社(卸)を軸に販売店からの発注を管理する業務ドメインである。元請案件(販売店・エンドユーザー向け商談を扱う本体案件)とはエンティティを分離し、WholesaleCase を集約ルートとして発注・請求・入金を内包する独立したライフサイクルで運用する。

決済区分(前金/掛売/三社間/カード/その他)ごとに発注可否・請求可否を判定するワークフローエンジンを備え、案件は工程の進捗に応じてパイプライン列(WBucket)へ自動配置される。ワークフローエンジンで発注可否・請求可否を判定する構造は ValueOS の WorkflowEnginecanOrder / canInvoice)と同一の思想であり、case_settlements.settlement_type による決済区分管理にも対応する。決済区分の定義・審査観点・工程順序(FLOW)の詳細は /features/wholesale-settlement/ を正本とする。本ページでは、案件・卸金額マスタ・発注フォーム・受注〜入金・パイプライン・タスクを扱う。

対象内容
別軸案件WholesaleCase(商社軸の案件。orders[] / invoices[] / payments[] を内包)
卸金額マスタWholesalePrice(アイテム × 商社の卸価格。反映日付き)
販売店発注フォームDealerIntakeForm(送信で WholesaleCase を自動生成)
受注〜入金WOrder / WInvoice / WPayment
パイプラインWBucket(決済待ち/発注待ち/納品待ち/請求待ち/入金待ち/完了)
タスクWholesaleTask(卸業務専用のタスクリスト)
対象外(委譲)決済区分 WSettlement の定義・審査観点、工程 FLOW の全パターン → /features/wholesale-settlement/

アイテム(商品マスタ)は /features/item-master/、価格表・見積は /features/quote-pricing/ を参照。

エンティティ主なフィールド役割ValueOS対応
WholesaleCaseidW-XXXX), createdAt, dealer, settlement, approvalNo, items[], 進捗フラグ5種商社軸の案件。発注・請求・入金の集約ルートcases(決済関連は case_settlements
WholesalePriceid, itemKind, itemName, supplier, purchasePrice, wholesalePrice, startDate, endDate, memoアイテム×商社の卸価格。反映日により価格改定と履歴を表現dealer_sales_prices / supplier_purchase_prices に相当
WOrderid, orderNoPO-XXXX), orderDate, supplier, amount, status, deliveredDate商社・メーカーへの発注記録orders
WInvoiceid, invoiceNoINV-XXXX), invoiceDate, dueDate, amount, status販売店への請求記録invoices
WPaymentid, paymentDate, amount, method分割入金レコードpayments
WholesaleTaskidWT-XXXX), caseId, title, status, assignee, dueDate, priority, memo卸業務専用タスク。案件への任意接続ValueOSの taskscase_id, title, status, due_date, assigned_user, priority

WholesaleCase は決済区分に応じたゲートフラグ(settlementConfirmed / paymentReceived / ordered / delivered / invoiced)を持ち、これらがワークフロー判定の入力になる。

画面機能備考
卸案件一覧(パイプライン)6バケットでの進捗表示。商社軸での絞り込みを既定にするバケット間の手動移動は不可。工程完了に応じた自動導出のみ
卸金額マスタアイテム×商社の卸価格の登録・改定startDate による価格予約・履歴を兼ねる
販売店発注フォーム(DealerIntakeForm販売店からの発注入力を受け付け、送信時に WholesaleCase を自動生成手入力での案件直接作成も併存する
タスク一覧卸業務専用タスクの一覧・期限管理案件詳細内タブ表示と独立リスト表示のいずれを既定にするかは確認事項(下記)

案件一覧の表示形式(かんばん列型かテーブル+フィルタ型か)は、実装時に複数パターンを提示したうえで選定する。堅牢性要件として、ゼロ件バケットの表示、長い品名・販売店名の折返し、件数過多時のページングまたは仮想スクロールを満たす。

現在価格の引き当ては「startDate ≤ 基準日 かつ(endDate 未設定 または endDate ≥ 基準日)」を満たす行のうち、startDate が新しい順、同日なら卸価格が安い順で先頭を採用する。品名はフリーテキストの itemName で管理し、Product.model(型番)とは連結していない。

DealerIntakeForm の送信時、進捗フラグ(settlementConfirmed / paymentReceived / ordered / delivered / invoiced)は全て未完了で初期化される。これによりワークフロー判定は自動的に先頭工程(決済区分に応じて「決済条件の確定」または「審査OK確認」)を指し、対応する WBucket(決済待ち)へ配置する。明細の品名を卸金額マスタから選択すると区分・卸単価を自動で引き当て、マスタに無い品名は単価を手入力する。

決済区分工程順請求工程入金確認の位置づけ
前金決済条件確定 → 前金入金確認 → 発注 → 納品持たない発注より前(prepay 工程内)
掛売決済条件確定 → 発注 → 納品 → 請求 → 入金消込持つ請求後(payment 工程)
三社間審査OK確認 → 発注 → 納品 → 入金消込持たない納品後(payment 工程)
カード審査OK確認 → 発注 → 納品 → 入金消込持たない納品後(payment 工程)
その他決済条件確定 → 発注 → 納品 → 請求 → 入金消込持つ請求後(payment 工程)

工程の名称・担当・審査観点の詳細は /features/wholesale-settlement/ を正本とする。本ページは接続点(工程順とバケットの対応)のみを保持する。

パイプライン列(WBucket)の導出

Section titled “パイプライン列(WBucket)の導出”
バケット対応工程決済区分による有無導出条件
決済待ち決済条件確定/審査OK確認全区分で通過未完了の先頭工程がこの2つのいずれか
発注待ち発注全区分で通過直前工程が完了かつ未発注
納品待ち納品確認全区分で通過発注済みかつ未納品
請求待ち請求掛売・その他のみ(三社間/カード/前金は通らない)工程順に「請求」が含まれる場合のみ
入金待ち前金入金確認/入金消込前金は前者、他区分は後者対応工程が未完了
完了全区分共通全工程が完了

発注可否(canOrder)は、工程順で「発注」より前の工程が全て完了し、かつ未発注のときに真となる。請求可否(canInvoice)は、工程順に「請求」が含まれ、それより前の工程が全て完了し、かつ未請求のときに真となる。この判定構造は ValueOS の WorkflowEnginecanOrder / canInvoice)と対応する。

受注から入金までの状態と金額

Section titled “受注から入金までの状態と金額”

WOrder の状態は「発注済」「納品済」の2値、WInvoice の状態は「請求済」「一部入金」「入金済」の3値であり、いずれもフォーム操作による手動更新で遷移する。金額は次の式で自動算出する。

  • 請求ベース金額(wholesaleBilled): 請求書があればその合計、無ければ明細の卸金額合計
  • 入金済み合計(wholesalePaid): 入金レコードの合計
  • 残高(wholesaleBalance): wholesaleBilled − wholesalePaid(下限0)

入金は複数レコードによる分割入金に対応する。入金をどの請求へ充当するかの按分ルールは定めておらず、入金レコードの単純合算で残高を算出する。

タスクは title / status(未対応・対応中・完了)/ assignee / dueDate / priority(高・中・低)を持ち、卸案件(caseId)への任意接続に対応する。案件に紐付けない全社共通タスク(caseId = null)も登録できる。期限超過は「status ≠ 完了 かつ dueDate が基準日より前」で判定する。経理系工程(決済条件確定/審査OK確認/前金入金確認/請求/入金消込)と発注担当系工程(発注/納品確認)の担当分掌に沿って assignee を運用する。

現行実装は発注フォーム・案件操作の認証・権限ガードを持たず、入力主体が社内(VE)担当か販売店本人かを技術的に区別する手段を持たない。販売店による直接入力(ポータル化)と、その際の認証・権限モデルは確認事項とする。

  • 元請案件(deals)と卸案件(WholesaleCase)の紐付け方式(参照キー追加か疎結合突合か)
  • WholesalePrice の価格改定時、旧行の endDate を必ず設定する運用とするか
  • itemName(フリーテキスト)を Product.model(型番)参照へ正規化する方式と時期
  • DealerIntakeForm の入力主体(社内代行かポータル型か)と認証・権限モデル
  • WOrder / WInvoice のステータスを入金・納品実績から自動遷移させるか、手動更新のまま運用するか
  • 前金の工程順で「入金消込」を独立工程として持たず「前金入金確認」に統合している設計の妥当性
  • WholesaleTask を案件詳細画面内タブとして表示するか、独立リストとして表示するか
  • 発注・請求明細のOCR/AI取込(明細スキャン)構想の採否と実装時期