# 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"