> For the complete documentation index, see [llms.txt](https://support.bridge-funeral.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://support.bridge-funeral.com/nori/40-pricing-and-products.md).

# 商品マスタと価格タイプ｜価格設計の全体像

ブリッジ葬儀の **価格まわり** は、**3 つのオブジェクト** で構成されています。「同じ商品でも、会員様には会員価格で、一般のお客様には標準価格で」という運用は、この設計のおかげで **自動的に** 実現できます。

このページでは、商品マスタ・価格タイプ・商品価格 の関係と、**会員権から見積伝票まで価格が自動継承されるしくみ** をひとまとめに解説します。

## 全体像 (1 分で掴む)

```
[商品マスタ]              [価格タイプ]                [商品価格]
─────────────────         ─────────────────          ──────────────────
祭壇 A                    標準価格                    祭壇 A × 標準 = ¥100,000
                          会員価格                    祭壇 A × 会員 = ¥90,000
                          葬祭ホール価格              祭壇 A × ホール = ¥80,000
                          仕入価格                    祭壇 A × 仕入 = ¥60,000
   ↓                         ↓                          ↑
   商品マスタを追加 ────→ 価格タイプの数だけ ───→ 商品価格レコードが
                          自動で組み合わせ            自動生成される
                          (PriceTypeAutoPriceTrigger)
```

ポイント:

* **商品マスタ** は商品そのものを定義 (棺・祭壇・料理・返礼品 など)
* **価格タイプ** は **価格の区分** を定義 (標準・会員・葬祭ホール・仕入 など)
* **商品価格** は商品 × 価格タイプ の **交点 (実際の単価)** を保持
* 商品か価格タイプを 1 件追加すれば、**自動で商品価格レコードが組み合わせ生成** される

## 3 つのオブジェクトの役割

### ① 商品マスタ (`Product__c`)

葬儀社が取り扱う **商品 1 つ 1 つ** を表すマスタ。

| 主な項目                             | 説明                            |
| -------------------------------- | ----------------------------- |
| **商品名** (Name)                   | 商品の名前 (例: `祭壇 A`、`高級棺`)       |
| **商品名カナ**                        | フリガナ (検索用)                    |
| **商品コード**                        | 在庫・経理用のコード                    |
| **商品分類**                         | カテゴリ (祭壇 / 棺 / 料理 / 返礼品 etc.) |
| **規格**                           | サイズ・素材などの規格情報                 |
| **販売単価**                         | デフォルトの販売単価 (= 標準価格と同じ運用)      |
| **仕入単価**                         | 仕入先からの仕入額                     |
| **売上税率** (`TaxRate__c`)          | 売上時に適用される税率 (Lookup)          |
| **仕入税率** (`TaxRate_Supplier__c`) | 仕入時に適用される税率                   |
| **供物一覧に表示** (`IsShownOnList__c`) | 供物一覧 PDF の対象                  |
| **廃盤** (`IsInvalid__c`)          | 検索候補から除外 (履歴は残る)              |

### ② 価格タイプ (`PriceType__c`)

価格の区分 (どんなお客様向けの価格か) を表すマスタ。

| 主な項目                       | 説明                                   |
| -------------------------- | ------------------------------------ |
| **名前** (Name)              | 価格区分の名称 (例: `標準価格`、`会員価格`、`葬祭ホール価格`) |
| **分類** (`Category__c`)     | 販売系 / 仕入系 などの区分 (内部処理で使用)            |
| **デフォルト割引率**               | 標準価格に対する自動割引率 (例: `10` で標準から 10% 引き) |
| **デフォルト** (`IsDefault__c`) | 同カテゴリでデフォルトとなる価格タイプ (1 つだけ)          |
| **アクティブ** (`IsActive__c`)  | 有効/無効の切替                             |
| **表示順** (`SortOrder__c`)   | プルダウンでの並び順                           |

#### 価格タイプの典型例

| 価格タイプ       | デフォルト割引率       | 用途            |
| ----------- | -------------- | ------------- |
| **標準価格**    | 0% (基準)        | 一般のお客様向け      |
| **会員価格**    | 10% など         | 互助会会員のお客様向け   |
| **葬祭ホール価格** | 5% など          | 提携ホール経由のお客様向け |
| **仕入価格**    | -100%++ (個別単価) | 仕入先から自社への単価   |
| **上代**      | 0% (定価)        | 業界標準定価        |

> インストール時に **「標準価格 / 仕入価格 / 上代」** の 3 つが初期投入されます。組織で必要に応じて「会員価格」「葬祭ホール価格」などを追加します ([マスタデータ整備](https://github.com/thinkeight/bridge-cms/blob/main/admin/03-master-data.md) 参照)。

### ③ 商品価格 (`ProductPrice__c`)

**商品 × 価格タイプ の交点** 。「祭壇 A の会員価格はいくらか」という具体的な単価を保持。

| 主な項目                         | 説明                      |
| ---------------------------- | ----------------------- |
| **商品** (`Product__c`)        | どの商品か                   |
| **価格タイプ** (`PriceType__c`)   | どの価格区分か                 |
| **価格** (`Price__c`)          | 具体的な単価                  |
| **価格率** (`PriceRate__c`)     | 標準価格に対する割合 (% 指定で双方向変換) |
| **仕入先** (`Supplier__c`)      | 仕入系価格タイプの場合 (v2.3.0+)   |
| **内税/外税** (`TaxIncluded__c`) | 税込か税抜か (v2.3.0+)        |

> 担当者が手動で 1 件ずつ作る必要は無く、**商品か価格タイプを追加した瞬間に自動生成** されます (`ProductAutoPriceTrigger` / `PriceTypeAutoPriceTrigger`)。

## 自動生成のしくみ

### 商品マスタを 1 件作ると…

例: 組織に価格タイプが **3 つ** (標準・会員・葬祭ホール) ある状態で、新商品「祭壇 A」を追加:

```
[新商品: 祭壇 A] を作成
       ↓
ProductAutoPriceTrigger が起動
       ↓
3 つの商品価格レコードを自動生成:
  ・祭壇 A × 標準価格    = ¥100,000 (販売単価 のまま)
  ・祭壇 A × 会員価格    = ¥90,000  (標準 × (1 - 10%))
  ・祭壇 A × 葬祭ホール価格 = ¥95,000 (標準 × (1 - 5%))
```

### 価格タイプを 1 件追加すると…

例: 組織に商品が **500 件** ある状態で、新しい価格タイプ「VIP 価格」(デフォルト割引率 15%) を追加:

```
[新価格タイプ: VIP 価格] を作成
       ↓
PriceTypeAutoPriceTrigger が起動
       ↓
500 件の商品価格レコードを自動生成 (全商品 × VIP 価格)
  ・各商品の標準価格 × (1 - 15%) で初期値設定
```

> 後で個別に微調整したい場合は、商品価格マトリクスや商品価格エディタで編集できます ([マスタデータ整備](https://github.com/thinkeight/bridge-cms/blob/main/admin/03-master-data.md))。

## 標準価格は 1 つだけ (PriceTypeDefaultEnforcer)

同じカテゴリ内で **「デフォルト価格」フラグはひとつだけ** に絞られます。これは `PriceTypeDefaultEnforcer` (Apex) が強制している制約です。

* 既存の「標準価格」を `IsDefault` にしたまま、新しく「VIP 価格」を `IsDefault` にしようとするとエラー
* 切り替えたい場合は、先に既存のデフォルトをオフにしてから

## 会員権 → 施行情報 → 見積 への自動継承 (v2.3.0+ で完成)

ここからが、ブリッジ葬儀の価格設計の **真骨頂** 。「お客様が会員様なら、自動的に会員価格で見積が作られる」 — これが実現できます。

### 流れ図

```
[会員権 Membership]
  └─ 価格タイプ: 会員価格 ← マスタとして保持
       │
       ▼ Ceremony.MemberNo で会員権を紐付ける
[施行情報 Ceremony]
  └─ 価格タイプ: 会員価格 ← スナップショットコピー (Trigger: CeremonyMembershipPriceTypeTrigger)
       │
       ▼ この施行情報から新規見積を作る (伝票区分 = 「葬儀」)
[見積伝票 Slip]
  └─ 価格タイプ: 会員価格 ← 自動継承 (Handler: SlipDefaultPriceTypeHandler)
       │
       ▼ 商品検索モーダルで明細を追加
[商品検索モーダル]
  └─ 「会員価格」 列の単価を取得して表示
       │
       ▼ 選択した商品を伝票に追加
[伝票明細 SlipDetail]
  └─ 単価: 会員価格 (例: 祭壇 A → ¥90,000)
```

### ステップ別の動作

| ステップ                                  | 何が起きるか                                                           |
| ------------------------------------- | ---------------------------------------------------------------- |
| 1. 会員権マスタに **「価格タイプ = 会員価格」** を設定     | 管理者 / 担当者の登録作業                                                   |
| 2. 施行情報で **会員権を選択**                   | `CeremonyMembershipPriceTypeTrigger` が会員権の価格タイプを施行情報にスナップショットコピー |
| 3. その施行情報から **新規見積伝票** を作成 (伝票区分: 葬儀) | `SlipDefaultPriceTypeHandler` が施行情報の価格タイプを継承                     |
| 4. 商品検索モーダルで商品を選択                     | その価格タイプの単価が表示・反映                                                 |
| 5. 明細の単価には **会員価格** が入る               | 自動                                                               |

担当者が「価格マスタ」プルダウンを **手動で切り替える必要が無くなる** のがポイントです。

### 「葬儀」伝票のみが対象 (v2.3.0+ の制限)

価格タイプの自動継承は **`SlipType__c = 「葬儀」`** の伝票のみに限定されています。

* ✅ **当家への見積伝票 (葬儀区分)** → 会員価格を自動継承
* ❌ **参列者からの供花注文伝票 (供物区分)** → 標準価格を使用 (会員価格は適用されない)

これは「ご友人 A さんが供花を出したら、当家の会員価格で割引される」のような **誤適用を防ぐ** ための設計です。

## 業務シーン別の価格適用

### シーン 1: 一般のお客様

会員権がないお客様の葬儀 → 施行情報の価格タイプは **空** → 伝票作成時に組織既定の **標準価格** が適用。

### シーン 2: 互助会会員のお客様

会員権を持つお客様の葬儀 → 施行情報の会員権欄を選択 → 価格タイプが **会員価格** にスナップショット → 見積伝票も会員価格で作られる。

### シーン 3: 葬祭ホール提携経由のお客様

葬祭ホールが発行する会員権 → 価格タイプを **葬祭ホール価格** に設定 → 同様に自動継承。

### シーン 4: 仕入先への発注伝票

発注伝票 (Order レコードタイプ + SlipType=供物 など) では、伝票エディタの「単価の反映元」を **`仕入単価`** に切替 → 商品検索で **仕入価格** が引かれる。

### シーン 5: 手動で価格タイプを変えたい

会員様の見積でも、特別に標準価格で出したい場合 → 伝票エディタ上部の **「価格マスタ」プルダウン** で **手動切替** 。新規追加した明細にその価格が適用される。

> ただし既存の明細は再計算されないので、必要なら一旦削除して再追加。

## 価格マスタの編集方法 (担当者向け)

### 商品 1 件の価格を編集

商品マスタの詳細画面 → **「商品価格エディタ」** (LWC) → 全価格タイプの単価を一画面で編集。「% 指定」「金額指定」を双方向に切替可能。

### 商品 × 価格タイプ を一括編集

**「商品価格マスタ」タブ** → **「商品価格マトリクス」** (LWC) → Excel 風行列で一括編集。変更したセルだけ保存。一度に最大 200 商品まで。

詳しくは [マスタデータを整備する](https://github.com/thinkeight/bridge-cms/blob/main/admin/03-master-data.md) を参照 (管理者向け)。

## 設計思想のまとめ

| 観点        | ブリッジ葬儀の考え方                                         |
| --------- | -------------------------------------------------- |
| 商品と価格の分離  | 商品マスタは「**何を売るか**」、価格タイプは「**誰向けか**」、商品価格は「**いくらか**」 |
| 自動展開      | 商品か価格タイプを追加すれば、組合せが自動生成                            |
| デフォルト制約   | 「デフォルト価格」は同カテゴリで 1 つだけに強制                          |
| 会員価格の自動適用 | 会員権 → 施行情報 → 見積 まで **手動切替不要**                      |
| 葬儀と供物の区別  | 「葬儀」伝票のみ会員価格を継承、「供物」伝票は標準価格 (誤適用防止)                |
| 履歴整合性     | 会員権マスタを後で変えても **過去の施行・伝票は追従しない** (スナップショット)        |

## こんなときは

### 同じ会員でも、見積によって価格を変えたい

伝票エディタ上部の **「価格マスタ」プルダウン** で手動切替。会員権の自動継承を **その伝票だけ無視** できます。

### 会員価格と葬祭ホール価格をミックスしたい

伝票全体に 1 つの価格タイプしか設定できないため、片方を選んで作成 → 必要な明細だけ単価を手動編集 する運用。または別伝票で。

### 仕入価格を会員価格と一緒に管理したい

「分類」(Category) で価格タイプを **販売系 / 仕入系** に分け、伝票エディタの「単価の反映元」プロパティで切替。混在しないよう設計されています。

### 価格タイプを増やすと商品価格レコードが大量生成される?

はい、商品数 × 価格タイプ数 だけレコードが生成されます (商品 1,000 件 + 価格タイプ 5 つ = 5,000 レコード)。Salesforce のストレージは余裕がありますが、目安として **価格タイプは 5-10 個程度** に抑えるのが一般的。

### 価格タイプを削除したい

過去の伝票で参照されている場合、削除すると履歴が壊れます。**「アクティブ」をオフ** にして「プルダウンに出さない」運用がおすすめ。

## 関連オブジェクト一覧

| オブジェクト                                      | 用途                |
| ------------------------------------------- | ----------------- |
| **商品マスタ** (`Product__c`)                    | 商品の元データ           |
| **価格タイプ** (`PriceType__c`)                  | 価格区分              |
| **商品価格** (`ProductPrice__c`)                | 商品 × 価格タイプ の単価    |
| **税率マスタ** (`TaxRate__c`)                    | 商品ごとの税率           |
| **会員権** (`Membership__c`)                   | 会員プランと価格タイプの紐付き   |
| **施行情報** (`Ceremony__c`)                    | 会員権の価格タイプスナップショット |
| **伝票 / 伝票明細** (`Slip__c` / `SlipDetail__c`) | 実際の見積・請求への適用      |

## 関連する自動処理

| 自動処理                                              | 役割                         |
| ------------------------------------------------- | -------------------------- |
| **`ProductAutoPriceTrigger`**                     | 商品マスタ追加時に全価格タイプ分の商品価格を生成   |
| **`PriceTypeAutoPriceTrigger`**                   | 価格タイプ追加時に全商品分の商品価格を生成      |
| **`ProductDefaultTaxRateHandler`**                | 商品マスタ作成時に税率自動補填            |
| **`PriceTypeDefaultEnforcer`**                    | デフォルト価格は同カテゴリで 1 つだけのルール強制 |
| **`CeremonyMembershipPriceTypeTrigger`** ★v2.3.0+ | 会員権の価格タイプを施行情報にスナップショットコピー |
| **`SlipDefaultPriceTypeHandler`** ★v2.3.0+        | 「葬儀」伝票のみ施行情報の価格タイプを継承      |

詳しくは [裏で自動で動く処理を知る](/nori/14-auto-processing.md) を参照。

## 次に進む

* [会員権を管理する](/ji-ben-cao-zuo/08-membership.md) — 会員権側の設定詳細
* [見積書を作る](/ji-ben-cao-zuo/05-create-quote.md) — 見積伝票での価格適用の実操作
* [商品検索モーダルを使いこなす](/nori/11-product-search-modal.md) — 商品検索時の価格表示
* [伝票の設計思想](/nori/28-slip-design-philosophy.md) — もう 1 つの核心設計
* [マスタデータを整備する](https://github.com/thinkeight/bridge-cms/blob/main/admin/03-master-data.md) (管理者) — 商品・価格タイプの登録手順

***

📅 最終更新日: 2026-06-16


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://support.bridge-funeral.com/nori/40-pricing-and-products.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
