集約: 売上・売掛・入金 / Aggregate: Sales & Billing
バウンデッドコンテキスト: bc-sales
DeliveryInspection(検収)
DeliveryInspection (集約ルート) ├── → SalesOrder (受注への参照) └── → SalesInvoice (売上への参照)
| プロパティ | 型 | 説明 |
|---|---|---|
| orderNumber | string | 受注番号 |
| inspectionDate | Date | 検収日 |
| inspectionAmount | Money | 検収金額 |
| taxRate | number | 税率 |
不変条件 (Invariants)
- 検収金額は受注金額以下 (分割検収可能)
- 検収合格後のみ売上計上可能
SalesInvoice(売上)
| プロパティ | 型 | 説明 |
|---|---|---|
| salesId | string | 売上ID |
| orderNumber | string | 受注番号 |
| customerId | string | 得意先コード |
| salesDate | Date | 売上日 |
| inputDate | Date | 入力日 |
計算フィールド
| フィールド | 計算式 | トリガー |
|---|---|---|
| 明細金額 | `CalcAmount(roundingPolicy, quantity, unitPrice)` | 端数処理は得意先マスタの設定に従う: 四捨五入/切捨て/切上げ |
| 売上合計 | `Σ(全行の明細金額)` | 明細変更時に即時再計算 |
| 税額 | `taxableAmount × taxRate / 100` | 得意先の税計算方法に従う: 明細単位 or 合算。端数処理も得意先依存 |
入力検証
| 検証 | 条件 |
|---|---|
| 得意先必須 | コードと名称の両方が入力されていること |
| 売上日必須 | 空でないこと |
| 入力日必須 | 空でないこと |
| 明細の受注番号必須 | データが入力された行の受注番号が空でないこと |
| 明細の数量必須 | 空でないこと |
| 明細の単価必須 | 空でないこと |
| 得意先存在チェック | 得意先コードが得意先マスタに存在すること |
| 受注番号存在チェック | 受注番号が当該得意先の受注に存在すること |
自動入力
- **新規作成時**: 日付=当日
- **得意先選択時**: コメントテンプレートを得意先マスタから取得
コマンド
| コマンド | ガード条件 | アクション |
|---|---|---|
| 登録 (Save) | 入力検証通過 | 売上データ保存。新規時は採番管理で売上番号を自動発行。**受注の売上金額・売上日を自動更新** (受注金額が 0 の場合は売上合計で初期化) |
| 行削除 | — | 論理削除。受注金額を再計算 |
| 納品書発行 | 保存済み + 明細あり + 得意先の納品書出力設定 ≠ 出力なし | 納品書印刷。得意先設定により請求書の同時発行も可能 |
ARBalance(売掛)
ARBalance (集約ルート) ├── → Customer (得意先) └── CashReceipt[] (入金 — 消込対象)
| プロパティ | 型 | 説明 |
|---|---|---|
| customerId | string | 得意先コード |
| billingAmount | Money | 請求額 |
| previousBalance | Money | 前期残高 |
| tax | Money | 消費税 |
不変条件 (Invariants)
- `残高` = `前期残高` + `当期請求` - `当期入金` - `相殺`
- 得意先マスタの締日 (`ClosingDayType`) に基づいて期間を区切る
- 入金消込は売掛残高を超過しない
- 税額計算は得意先の `BillingCalculationMethod` (明細単位/合算) に従う
- 端数処理は得意先の `RoundingPolicy` (四捨五入/切捨て/切上げ) に従う
- 前月残高と前々月残高の2世代を保持 (繰越トレーサビリティ)
CashReceipt(入金)
| プロパティ | 型 | 説明 |
|---|---|---|
| receiptId | string | 入金ID |
| customerId | string | 得意先コード |
| receiptType | PaymentMethod | 入金方法 (現金/銀行振込/小切手/手形/相殺/手数料/値引き/その他) |
| amount | Money | 入金額 |
| 操作 | 同一トランザクション | 結果整合性 |
| 検収登録 | DeliveryInspection | SalesInvoice 自動生成 |
| 請求書発行 | — (帳票) | 売掛データ更新 |
| 入金消込 | CashReceipt + ARBalance 更新 | — |