Fab Forward Dev/

DDD ドキュメント

集約: 売上・売掛・入金 / Aggregate: Sales & Billing

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

DeliveryInspection(検収)

DeliveryInspection (集約ルート)
├── → SalesOrder  (受注への参照)
└── → SalesInvoice (売上への参照)
プロパティ説明
orderNumberstring受注番号
inspectionDateDate検収日
inspectionAmountMoney検収金額
taxRatenumber税率

不変条件 (Invariants)

  • 検収金額は受注金額以下 (分割検収可能)
  • 検収合格後のみ売上計上可能

SalesInvoice(売上)

プロパティ説明
salesIdstring売上ID
orderNumberstring受注番号
customerIdstring得意先コード
salesDateDate売上日
inputDateDate入力日

計算フィールド

フィールド計算式トリガー
明細金額`CalcAmount(roundingPolicy, quantity, unitPrice)`端数処理は得意先マスタの設定に従う: 四捨五入/切捨て/切上げ
売上合計`Σ(全行の明細金額)`明細変更時に即時再計算
税額`taxableAmount × taxRate / 100`得意先の税計算方法に従う: 明細単位 or 合算。端数処理も得意先依存

入力検証

検証条件
得意先必須コードと名称の両方が入力されていること
売上日必須空でないこと
入力日必須空でないこと
明細の受注番号必須データが入力された行の受注番号が空でないこと
明細の数量必須空でないこと
明細の単価必須空でないこと
得意先存在チェック得意先コードが得意先マスタに存在すること
受注番号存在チェック受注番号が当該得意先の受注に存在すること

自動入力

  • **新規作成時**: 日付=当日
  • **得意先選択時**: コメントテンプレートを得意先マスタから取得

コマンド

コマンドガード条件アクション
登録 (Save)入力検証通過売上データ保存。新規時は採番管理で売上番号を自動発行。**受注の売上金額・売上日を自動更新** (受注金額が 0 の場合は売上合計で初期化)
行削除論理削除。受注金額を再計算
納品書発行保存済み + 明細あり + 得意先の納品書出力設定 ≠ 出力なし納品書印刷。得意先設定により請求書の同時発行も可能

ARBalance(売掛)

ARBalance (集約ルート)
├── → Customer     (得意先)
└── CashReceipt[]  (入金 — 消込対象)
プロパティ説明
customerIdstring得意先コード
billingAmountMoney請求額
previousBalanceMoney前期残高
taxMoney消費税

不変条件 (Invariants)

  • `残高` = `前期残高` + `当期請求` - `当期入金` - `相殺`
  • 得意先マスタの締日 (`ClosingDayType`) に基づいて期間を区切る
  • 入金消込は売掛残高を超過しない
  • 税額計算は得意先の `BillingCalculationMethod` (明細単位/合算) に従う
  • 端数処理は得意先の `RoundingPolicy` (四捨五入/切捨て/切上げ) に従う
  • 前月残高と前々月残高の2世代を保持 (繰越トレーサビリティ)

CashReceipt(入金)

プロパティ説明
receiptIdstring入金ID
customerIdstring得意先コード
receiptTypePaymentMethod入金方法 (現金/銀行振込/小切手/手形/相殺/手数料/値引き/その他)
amountMoney入金額
操作同一トランザクション結果整合性
検収登録DeliveryInspectionSalesInvoice 自動生成
請求書発行— (帳票)売掛データ更新
入金消込CashReceipt + ARBalance 更新