Assist_Design/docs/SALESFORCE-SIM-PRODUCTS.md
T. Narantuya 94e1625b78 order fix
2025-08-27 10:54:05 +09:00

497 lines
13 KiB
Markdown

# Salesforce Product2 Setup - Complete Portal Structure
This document covers the simplified product structure for Internet, SIM, and VPN services.
## Core Custom Fields Required on Product2
```sql
-- Core Fields (All Products)
SKU__c (Text, 255) - Product identifier
Portal_Category__c (Picklist) - "Internet", "SIM", "VPN", "Other"
Portal_Visible__c (Checkbox) - Show in catalog
Item_Class__c (Picklist) - "Service", "Install", "Add-on", "Activation"
WHMCS_Product_Id__c (Number, 18, 0) - WHMCS Product ID (nullable for configured products)
-- Internet Fields
Internet_Plan_Tier__c (Picklist) - "Silver", "Gold", "Platinum"
Internet_Offering_Type__c (Picklist) - "Home 1G", "Home 10G", "Apartment 1G", "Apartment 100M"
Internet_Requires_Configuration__c (Checkbox) - true for Platinum/Gold, false for Silver
Internet_Monthly_Price__c (Currency) - Base monthly price
Internet_Display_Order__c (Number, 18, 0) - UI sorting
-- SIM Fields
SIM_Data_Size__c (Text, 50) - "5GB", "10GB", "25GB", "30GB", "50GB", "Voice-Only"
SIM_Plan_Type__c (Picklist) - "Data-only", "Data+SMS", "Data+Voice", "Voice-Only", "Add-on"
SIM_Has_Family_Discount__c (Checkbox) - true/false
SIM_Display_Order__c (Number, 18, 0) - for sorting in UI
-- VPN Fields (Optional)
VPN_Region__c (Text, 50) - "USA", "UK", "Global"
VPN_Display_Order__c (Number, 18, 0) - UI sorting
```
## Internet Products (Simplified Structure)
### Service Plans (Customer Selects Tier)
```
-- Silver Plan (Customer Configures Access Mode)
Name: "Internet Silver Plan"
SKU__c: "INTERNET-SILVER"
Portal_Category__c: "Internet"
Portal_Visible__c: true
Item_Class__c: "Service"
Internet_Plan_Tier__c: "Silver"
Internet_Offering_Type__c: "Apartment 1G"
Internet_Requires_Configuration__c: false
Internet_Monthly_Price__c: 4800
Internet_Display_Order__c: 1
WHMCS_Product_Id__c: 184
-- Gold Plan (Salesforce Configures)
Name: "Internet Gold Plan"
SKU__c: "INTERNET-GOLD"
Portal_Category__c: "Internet"
Portal_Visible__c: true
Item_Class__c: "Service"
Internet_Plan_Tier__c: "Gold"
Internet_Offering_Type__c: "Apartment 1G"
Internet_Requires_Configuration__c: true
Internet_Monthly_Price__c: 4900
Internet_Display_Order__c: 2
WHMCS_Product_Id__c: null -- Salesforce will provide
-- Platinum Plan (Salesforce Configures)
Name: "Internet Platinum Plan"
SKU__c: "INTERNET-PLATINUM"
Portal_Category__c: "Internet"
Portal_Visible__c: true
Item_Class__c: "Service"
Internet_Plan_Tier__c: "Platinum"
Internet_Offering_Type__c: "Apartment 1G"
Internet_Requires_Configuration__c: true
Internet_Monthly_Price__c: 5300
Internet_Display_Order__c: 3
WHMCS_Product_Id__c: null -- Salesforce will provide
```
### Installation Products (Hidden from Catalog)
```
-- Single Payment Installation
Name: "Internet Installation (Single Payment)"
SKU__c: "INTERNET-INSTALL-SINGLE"
Portal_Category__c: "Internet"
Portal_Visible__c: false
Item_Class__c: "Install"
Internet_Monthly_Price__c: 22800 -- One-time price
WHMCS_Product_Id__c: 242
-- 12-Month Installation
Name: "Internet Installation (12-Month)"
SKU__c: "INTERNET-INSTALL-12M"
Portal_Category__c: "Internet"
Portal_Visible__c: false
Item_Class__c: "Install"
Internet_Monthly_Price__c: 1900
WHMCS_Product_Id__c: 243
-- 24-Month Installation
Name: "Internet Installation (24-Month)"
SKU__c: "INTERNET-INSTALL-24M"
Portal_Category__c: "Internet"
Portal_Visible__c: false
Item_Class__c: "Install"
Internet_Monthly_Price__c: 950
WHMCS_Product_Id__c: 244
-- Weekend Installation Add-on
Name: "Internet Weekend Installation"
SKU__c: "INTERNET-INSTALL-WEEKEND"
Portal_Category__c: "Internet"
Portal_Visible__c: false
Item_Class__c: "Add-on"
Internet_Monthly_Price__c: 3000 -- One-time price
WHMCS_Product_Id__c: 245
```
### Optional Add-ons
```
-- Home Phone Service
Name: "Hikari Denwa (Home Phone)"
SKU__c: "INTERNET-ADDON-HOME-PHONE"
Portal_Category__c: "Internet"
Portal_Visible__c: false
Item_Class__c: "Add-on"
Internet_Monthly_Price__c: 450
WHMCS_Product_Id__c: 246
```
## SIM Products
### Main Service Plans (Portal_Visible__c = true)
### Data-only Plans
```
Name: "SIM Data-only 5GB"
SKU__c: "SIM-DATA-ONLY-5GB"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "5GB"
SIM_Plan_Type__c: "Data-only"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 1
WHMCS_Product_Id__c: 97
Name: "SIM Data-only 10GB"
SKU__c: "SIM-DATA-ONLY-10GB"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "10GB"
SIM_Plan_Type__c: "Data-only"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 2
WHMCS_Product_Id__c: 219
Name: "SIM Data-only 25GB"
SKU__c: "SIM-DATA-ONLY-25GB"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "25GB"
SIM_Plan_Type__c: "Data-only"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 3
WHMCS_Product_Id__c: 248
Name: "SIM Data-only 30GB (3GB/3days)"
SKU__c: "SIM-DATA-ONLY-30GB-3DAY"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "30GB"
SIM_Plan_Type__c: "Data-only"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 4
WHMCS_Product_Id__c: 98
Name: "SIM Data-only 50GB"
SKU__c: "SIM-DATA-ONLY-50GB"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "50GB"
SIM_Plan_Type__c: "Data-only"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 5
WHMCS_Product_Id__c: 252
```
### Data+SMS Plans
```
Name: "SIM Data+SMS 5GB"
SKU__c: "SIM-DATA-SMS-5GB"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "5GB"
SIM_Plan_Type__c: "Data+SMS"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 1
WHMCS_Product_Id__c: 104
Name: "SIM Data+SMS 10GB"
SKU__c: "SIM-DATA-SMS-10GB"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "10GB"
SIM_Plan_Type__c: "Data+SMS"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 2
WHMCS_Product_Id__c: 218
Name: "SIM Data+SMS 30GB (3GB/3days)"
SKU__c: "SIM-DATA-SMS-30GB-3DAY"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "30GB"
SIM_Plan_Type__c: "Data+SMS"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 4
WHMCS_Product_Id__c: 106
```
### Data+Voice Plans (Regular)
```
Name: "SIM Data+Voice 5GB"
SKU__c: "SIM-DATA-VOICE-5GB"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "5GB"
SIM_Plan_Type__c: "Data+Voice"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 1
WHMCS_Product_Id__c: 105
Name: "SIM Data+Voice 10GB"
SKU__c: "SIM-DATA-VOICE-10GB"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "10GB"
SIM_Plan_Type__c: "Data+Voice"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 2
WHMCS_Product_Id__c: 216
Name: "SIM Data+Voice 25GB"
SKU__c: "SIM-DATA-VOICE-25GB"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "25GB"
SIM_Plan_Type__c: "Data+Voice"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 3
WHMCS_Product_Id__c: 247
Name: "SIM Data+Voice 30GB (3GB/3days)"
SKU__c: "SIM-DATA-VOICE-30GB-3DAY"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "30GB"
SIM_Plan_Type__c: "Data+Voice"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 4
WHMCS_Product_Id__c: 107
Name: "SIM Data+Voice 50GB"
SKU__c: "SIM-DATA-VOICE-50GB"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "50GB"
SIM_Plan_Type__c: "Data+Voice"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 5
WHMCS_Product_Id__c: 250
```
### Voice-Only Plan
```
Name: "SIM Voice-Only"
SKU__c: "SIM-VOICE-ONLY"
Portal_Category__c: "SIM"
Portal_Visible__c: true
Item_Class__c: "Service"
SIM_Data_Size__c: "Voice-Only"
SIM_Plan_Type__c: "Voice-Only"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 0
WHMCS_Product_Id__c: 142
```
## Family Discount Plans (Portal_Visible__c = false)
These are used automatically when customer has existing SIM:
### Data+Voice Family Discount Plans
```
Name: "SIM Data+Voice 5GB (Family Discount)"
SKU__c: "SIM-DATA-VOICE-5GB-FAMILY"
Portal_Category__c: "SIM"
Portal_Visible__c: false
Item_Class__c: "Service"
SIM_Data_Size__c: "5GB"
SIM_Plan_Type__c: "Data+Voice"
SIM_Has_Family_Discount__c: true
SIM_Display_Order__c: 1
WHMCS_Product_Id__c: 108
Name: "SIM Data+Voice 10GB (Family Discount)"
SKU__c: "SIM-DATA-VOICE-10GB-FAMILY"
Portal_Category__c: "SIM"
Portal_Visible__c: false
Item_Class__c: "Service"
SIM_Data_Size__c: "10GB"
SIM_Plan_Type__c: "Data+Voice"
SIM_Has_Family_Discount__c: true
SIM_Display_Order__c: 2
WHMCS_Product_Id__c: 217
Name: "SIM Data+Voice 25GB (Family Discount)"
SKU__c: "SIM-DATA-VOICE-25GB-FAMILY"
Portal_Category__c: "SIM"
Portal_Visible__c: false
Item_Class__c: "Service"
SIM_Data_Size__c: "25GB"
SIM_Plan_Type__c: "Data+Voice"
SIM_Has_Family_Discount__c: true
SIM_Display_Order__c: 3
WHMCS_Product_Id__c: 249
Name: "SIM Data+Voice 30GB (3GB/3days) (Family Discount)"
SKU__c: "SIM-DATA-VOICE-30GB-3DAY-FAMILY"
Portal_Category__c: "SIM"
Portal_Visible__c: false
Item_Class__c: "Service"
SIM_Data_Size__c: "30GB"
SIM_Plan_Type__c: "Data+Voice"
SIM_Has_Family_Discount__c: true
SIM_Display_Order__c: 4
WHMCS_Product_Id__c: 109
Name: "SIM Data+Voice 50GB (Family Discount)"
SKU__c: "SIM-DATA-VOICE-50GB-FAMILY"
Portal_Category__c: "SIM"
Portal_Visible__c: false
Item_Class__c: "Service"
SIM_Data_Size__c: "50GB"
SIM_Plan_Type__c: "Data+Voice"
SIM_Has_Family_Discount__c: true
SIM_Display_Order__c: 5
WHMCS_Product_Id__c: 251
```
## Add-on Services (Portal_Visible__c = false)
These are shown as checkboxes for Data+Voice plans:
```
Name: "SIM Voice Mail Option"
SKU__c: "SIM-ADDON-VOICE-MAIL"
Portal_Category__c: "SIM"
Portal_Visible__c: false
Item_Class__c: "Add-on"
SIM_Data_Size__c: ""
SIM_Plan_Type__c: "Add-on"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 1
WHMCS_Product_Id__c: 119
Name: "SIM Call Waiting Option"
SKU__c: "SIM-ADDON-CALL-WAITING"
Portal_Category__c: "SIM"
Portal_Visible__c: false
Item_Class__c: "Add-on"
SIM_Data_Size__c: ""
SIM_Plan_Type__c: "Add-on"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 2
WHMCS_Product_Id__c: 123
Name: "SIM Unlimited 15 (Domestic) Free Calling Option"
SKU__c: "SIM-ADDON-UNLIMITED-CALLING"
Portal_Category__c: "SIM"
Portal_Visible__c: false
Item_Class__c: "Add-on"
SIM_Data_Size__c: ""
SIM_Plan_Type__c: "Add-on"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 3
WHMCS_Product_Id__c: 125
Name: "SIM Unlimited Calling Option"
SKU__c: "SIM-ADDON-UNLIMITED-CALLING-V2"
Portal_Category__c: "SIM"
Portal_Visible__c: false
Item_Class__c: "Add-on"
SIM_Data_Size__c: ""
SIM_Plan_Type__c: "Add-on"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 4
WHMCS_Product_Id__c: 259
```
## Activation Fee (Portal_Visible__c = false)
```
Name: "SIM Activation Fee"
SKU__c: "SIM-ACTIVATION-FEE"
Portal_Category__c: "SIM"
Portal_Visible__c: false
Item_Class__c: "Activation"
SIM_Data_Size__c: ""
SIM_Plan_Type__c: "Activation"
SIM_Has_Family_Discount__c: false
SIM_Display_Order__c: 0
WHMCS_Product_Id__c: 99
```
## VPN Products (Simplified)
```
-- VPN Service (Region-agnostic)
Name: "VPN Premium Service"
SKU__c: "VPN-PREMIUM"
Portal_Category__c: "VPN"
Portal_Visible__c: true
Item_Class__c: "Service"
VPN_Region__c: "Global" -- Customer chooses region at order time
VPN_Display_Order__c: 1
WHMCS_Product_Id__c: 33
-- VPN Activation Fee
Name: "VPN Activation Fee"
SKU__c: "VPN-ACTIVATION"
Portal_Category__c: "VPN"
Portal_Visible__c: false
Item_Class__c: "Activation"
WHMCS_Product_Id__c: 37
```
## Salesforce Configuration Flow (Internet Gold/Platinum)
### Order Status Flow:
1. **Draft** → Customer selecting options
2. **Pending Configuration** → Sent to Salesforce for configuration
3. **Configured** → Salesforce determined products and WHMCS IDs
4. **Pending Review** → Ready for operator approval
5. **Approved** → Ready for provisioning
### Salesforce Flow Logic:
```apex
// When Order.Status = "Pending Configuration"
// AND Internet_Plan_Tier__c IN ("Gold", "Platinum")
1. Get Account.Internet_Eligibility__c
2. Check Account location/infrastructure
3. Determine configuration:
- Fiber + Gateway available → IPoE-HGW (WHMCS ID: 183)
- Fiber only → IPoE-BYOR (WHMCS ID: 185)
- Legacy → PPPoE (WHMCS ID: 187)
4. Call Portal: POST /orders/{orderId}/configure
```
### Configuration API Response:
```json
{
"configuredProducts": [
{
"sku": "INTERNET-PLATINUM-CONFIGURED",
"whmcsProductId": 183,
"accessMode": "IPoE-HGW",
"includesGateway": true,
"monthlyPrice": 5300
}
],
"configurationReason": "Location supports fiber with gateway"
}
```
## Family Discount Logic (SIM)
### Catalog-Driven Approach:
1. **GET /catalog/personalized** checks existing SIM services
2. **If customer has SIM** → Show family discount products
3. **If new customer** → Show regular products
4. **Frontend sends correct SKU** from catalog selection
### Example:
- **New Customer** sees: "SIM Data+Voice 50GB" (4,180 JPY) → SKU: "SIM-DATA-VOICE-50GB"
- **Existing Customer** sees: "SIM Data+Voice 50GB (Family Discount)" (3,680 JPY) → SKU: "SIM-DATA-VOICE-50GB-FAMILY"