Assist_Design/docs/SALESFORCE-PRODUCTS.md
T. Narantuya 0bf872e249 Refactor code formatting and improve documentation clarity
- Adjusted YAML and JSON files for consistent formatting, including healthcheck commands and package exports.
- Enhanced readability in various TypeScript files by standardizing string quotes and improving line breaks.
- Updated documentation across multiple files to improve clarity and consistency, including address system and logging levels.
- Removed unnecessary package-lock.json from shared package directory to streamline dependencies.
2025-09-09 18:19:54 +09:00

26 KiB

Salesforce Product2 Setup - Complete Portal Products

This document provides the complete list of Product2 records to create in Salesforce with all field values specified, including edge case handling and validation rules.

Core Fields Reference

All products require these core fields:

  • StockKeepingUnit (Text, 255) - External ID, Unique (standard Salesforce field)
  • Product2Categories1__c (Picklist) - "Internet", "SIM", "VPN", "Other"
  • Portal_Catalog__c (Checkbox) - Show in main catalog
  • Portal_Accessible__c (Checkbox) - Can be used in orders
  • Item_Class__c (Picklist) - "Service", "Installation", "Add-on", "Activation"
  • Billing_Cycle__c (Picklist) - "Monthly", "Onetime"
  • WH_Product_ID__c (Number, 18, 0) - WHMCS Product ID
  • WH_Product_Name__c (Text, 255) - WHMCS Product Name

Edge Case Handling Fields

Product Disambiguation Fields

-- Handle multiple activation fees or installation options
Is_Default__c           Checkbox         -- Default choice when multiple options exist
Display_Order__c        Number(18,0)     -- Ordering for UI selection (0 = first)
Auto_Add__c            Checkbox         -- Automatically add to orders (required fees)

Regional/Conditional Fields

-- Handle region-specific products (VPN, Internet eligibility)
VPN_Region__c           Picklist         -- "USA-SF", "UK-London", "Global", null
Internet_Region__c      Text(255)        -- Geographic restriction
Eligibility_Condition__c Text(1000)      -- JSON conditions for availability

Product Relationship Fields

-- Handle complex dependencies and conflicts
Required_Products__c    Text(1000)       -- JSON array of required SKUs
Dependent_Products__c   Text(1000)       -- JSON array of auto-added SKUs
Mutually_Exclusive__c   Text(1000)       -- JSON array of conflicting SKUs

Internet Products

Main Service Plans

Internet Silver - Home 1G

Name: Internet Silver Plan (Home 1G)
StockKeepingUnit: INTERNET-SILVER-HOME-1G
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 181
WH_Product_Name__c: SonixNet via NTT Optical Fiber (Home 1G) [SILVER]
Internet_Plan_Tier__c: Silver
Internet_Offering_Type__c: Home 1G
Internet_Monthly_Price__c: 6000
Display_Order__c: 1

Internet Gold - Home 1G

Name: Internet Gold Plan (Home 1G)
StockKeepingUnit: INTERNET-GOLD-HOME-1G
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 182
WH_Product_Name__c: SonixNet via NTT Optical Fiber (Home 1G) [GOLD]
Internet_Plan_Tier__c: Gold
Internet_Offering_Type__c: Home 1G
Internet_Monthly_Price__c: 6500
Display_Order__c: 2

Internet Platinum - Home 1G

Name: Internet Platinum Plan (Home 1G)
StockKeepingUnit: INTERNET-PLATINUM-HOME-1G
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 183
WH_Product_Name__c: SonixNet via NTT Optical Fiber (Home 1G) [PLATINUM - Base Plan]
Internet_Plan_Tier__c: Platinum
Internet_Offering_Type__c: Home 1G
Internet_Monthly_Price__c: 6500
Display_Order__c: 3

Internet Silver - Apartment 1G

Name: Internet Silver Plan (Apartment 1G)
StockKeepingUnit: INTERNET-SILVER-APT-1G
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 184
WH_Product_Name__c: SonixNet via NTT Optical Fiber (APT 1G) [SILVER]
Internet_Plan_Tier__c: Silver
Internet_Offering_Type__c: Apartment 1G
Internet_Monthly_Price__c: 4800
Display_Order__c: 4

Internet Gold - Apartment 1G

Name: Internet Gold Plan (Apartment 1G)
StockKeepingUnit: INTERNET-GOLD-APT-1G
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 185
WH_Product_Name__c: SonixNet via NTT Optical Fiber (APT 1G) [GOLD]
Internet_Plan_Tier__c: Gold
Internet_Offering_Type__c: Apartment 1G
Internet_Monthly_Price__c: 5300
Display_Order__c: 5

Internet Platinum - Apartment 1G

Name: Internet Platinum Plan (Apartment 1G)
StockKeepingUnit: INTERNET-PLATINUM-APT-1G
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 186
WH_Product_Name__c: SonixNet via NTT Optical Fiber (APT 1G) [PLATINUM - Base Plan]
Internet_Plan_Tier__c: Platinum
Internet_Offering_Type__c: Apartment 1G
Internet_Monthly_Price__c: 5300
Display_Order__c: 6

Internet Silver - Apartment 100M

Name: Internet Silver Plan (Apartment 100M)
StockKeepingUnit: INTERNET-SILVER-APT-100M
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 187
WH_Product_Name__c: SonixNet via NTT Optical Fiber (APT 100M) [SILVER]
Internet_Plan_Tier__c: Silver
Internet_Offering_Type__c: Apartment 100M
Internet_Monthly_Price__c: 4800
Display_Order__c: 7

Internet Gold - Apartment 100M

Name: Internet Gold Plan (Apartment 100M)
StockKeepingUnit: INTERNET-GOLD-APT-100M
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 188
WH_Product_Name__c: SonixNet via NTT Optical Fiber (APT 100M) [GOLD]
Internet_Plan_Tier__c: Gold
Internet_Offering_Type__c: Apartment 100M
Internet_Monthly_Price__c: 5300
Display_Order__c: 8

Internet Platinum - Apartment 100M

Name: Internet Platinum Plan (Apartment 100M)
StockKeepingUnit: INTERNET-PLATINUM-APT-100M
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 189
WH_Product_Name__c: SonixNet via NTT Optical Fiber (APT 100M) [PLATINUM - Base Plan]
Internet_Plan_Tier__c: Platinum
Internet_Offering_Type__c: Apartment 100M
Internet_Monthly_Price__c: 5300
Display_Order__c: 9

Internet Silver - Flets X (Home 10G)

Name: Internet Silver Plan (Flets X)
StockKeepingUnit: INTERNET-SILVER-FLETS-X
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 239
WH_Product_Name__c: SonixNet via NTT Optical Fiber (Flets X) [SILVER]
Internet_Plan_Tier__c: Silver
Internet_Offering_Type__c: Home 10G
Internet_Monthly_Price__c: 8000
Display_Order__c: 10

Internet Gold - Flets X (Home 10G)

Name: Internet Gold Plan (Flets X)
StockKeepingUnit: INTERNET-GOLD-FLETS-X
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 214
WH_Product_Name__c: SonixNet via NTT Optical Fiber (Flets X) [GOLD]
Internet_Plan_Tier__c: Gold
Internet_Offering_Type__c: Home 10G
Internet_Monthly_Price__c: 8500
Display_Order__c: 11

Internet Platinum - Flets X (Home 10G)

Name: Internet Platinum Plan (Flets X)
StockKeepingUnit: INTERNET-PLATINUM-FLETS-X
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 213
WH_Product_Name__c: SonixNet via NTT Optical Fiber (Flets X) [PLATINUM - Base Plan]
Internet_Plan_Tier__c: Platinum
Internet_Offering_Type__c: Home 10G
Internet_Monthly_Price__c: 8500
Display_Order__c: 12

Installation Options

Single Installation

Name: NTT Installation Fee (Single Payment)
StockKeepingUnit: INTERNET-INSTALL-SINGLE
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Installation
Billing_Cycle__c: Onetime
WH_Product_ID__c: 242
WH_Product_Name__c: NTT Installation Fee (Single Installment)
Is_Default__c: true
Auto_Add__c: false
Display_Order__c: 1

12-Month Installation

Name: NTT Installation Fee (12-Month Plan)
StockKeepingUnit: INTERNET-INSTALL-12M
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Installation
Billing_Cycle__c: Monthly
WH_Product_ID__c: 243
WH_Product_Name__c: NTT Installation Fee (12-Month Installment)
Is_Default__c: false
Auto_Add__c: false
Display_Order__c: 2

24-Month Installation

Name: NTT Installation Fee (24-Month Plan)
StockKeepingUnit: INTERNET-INSTALL-24M
Product2Categories1__c: Internet
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Installation
Billing_Cycle__c: Monthly
WH_Product_ID__c: 244
WH_Product_Name__c: NTT Installation Fee (24-Month Installment)
Is_Default__c: false
Auto_Add__c: false
Display_Order__c: 3

Internet Add-ons (Hidden from Catalog)

Weekend Installation

Name: NTT Weekend Installation Fee
StockKeepingUnit: INTERNET-INSTALL-WEEKEND
Product2Categories1__c: Internet
Portal_Catalog__c: false
Portal_Accessible__c: true
Item_Class__c: Add-on
Billing_Cycle__c: Onetime
WH_Product_ID__c: 245
WH_Product_Name__c: NTT Installation Fee (Weekend Additional)
Auto_Add__c: true
Mutually_Exclusive__c: ["INTERNET-INSTALL-WEEKDAY"]

Hikari Denwa Service

Name: Hikari Denwa (Home Phone)
StockKeepingUnit: INTERNET-ADDON-HOME-PHONE
Product2Categories1__c: Internet
Portal_Catalog__c: false
Portal_Accessible__c: true
Item_Class__c: Add-on
Billing_Cycle__c: Monthly
WH_Product_ID__c: 246
WH_Product_Name__c: Hikari Denwa Monthly Service
Required_Products__c: ["INTERNET-ADDON-HIKARI-DENWA-INSTALL"]

Hikari Denwa Installation

Name: Hikari Denwa Installation Fee
StockKeepingUnit: INTERNET-ADDON-HIKARI-DENWA-INSTALL
Product2Categories1__c: Internet
Portal_Catalog__c: false
Portal_Accessible__c: true
Item_Class__c: Add-on
Billing_Cycle__c: Onetime
WH_Product_ID__c: 247
WH_Product_Name__c: Hikari Denwa Installation Fee
Auto_Add__c: true

SIM Products

Data-only Plans

SIM Data-only 5GB

Name: SIM Data-only 5GB
StockKeepingUnit: SIM-DATA-ONLY-5GB
Product2Categories1__c: SIM
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 97
WH_Product_Name__c: SonixNet SIM Service Data-only/5GB (Monthly)
SIM_Data_Size__c: 5GB
SIM_Plan_Type__c: DataOnly
SIM_Has_Family_Discount__c: false
Display_Order__c: 1

SIM Data-only 10GB

Name: SIM Data-only 10GB
StockKeepingUnit: SIM-DATA-ONLY-10GB
Product2Categories1__c: SIM
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 219
WH_Product_Name__c: SonixNet SIM Service Data-only/10GB (Monthly)
SIM_Data_Size__c: 10GB
SIM_Plan_Type__c: DataOnly
SIM_Has_Family_Discount__c: false
Display_Order__c: 2

SIM Data-only 25GB

Name: SIM Data-only 25GB
StockKeepingUnit: SIM-DATA-ONLY-25GB
Product2Categories1__c: SIM
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 248
WH_Product_Name__c: SonixNet SIM Service Data-only/25GB (Monthly)
SIM_Data_Size__c: 25GB
SIM_Plan_Type__c: DataOnly
SIM_Has_Family_Discount__c: false
Display_Order__c: 3

SIM Data-only 30GB (3GB/3days)

Name: SIM Data-only 30GB (3GB/3days)
StockKeepingUnit: SIM-DATA-ONLY-30GB-3DAY
Product2Categories1__c: SIM
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 98
WH_Product_Name__c: SonixNet SIM Service Data-only/30GB (3GB/3days) (Monthly)
SIM_Data_Size__c: 30GB
SIM_Plan_Type__c: DataOnly
SIM_Has_Family_Discount__c: false
Display_Order__c: 4

SIM Data-only 50GB

Name: SIM Data-only 50GB
StockKeepingUnit: SIM-DATA-ONLY-50GB
Product2Categories1__c: SIM
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 252
WH_Product_Name__c: SonixNet SIM Service Data-only/50GB (Monthly)
SIM_Data_Size__c: 50GB
SIM_Plan_Type__c: DataOnly
SIM_Has_Family_Discount__c: false
Display_Order__c: 5

Data+Voice Plans (Regular)

SIM Data+Voice 5GB

Name: SIM Data+Voice 5GB
StockKeepingUnit: SIM-DATA-VOICE-5GB
Product2Categories1__c: SIM
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 105
WH_Product_Name__c: SonixNet SIM Service Data+Voice/5GB (Monthly)
SIM_Data_Size__c: 5GB
SIM_Plan_Type__c: DataSmsVoice
SIM_Has_Family_Discount__c: false
Display_Order__c: 1

SIM Data+Voice 10GB

Name: SIM Data+Voice 10GB
StockKeepingUnit: SIM-DATA-VOICE-10GB
Product2Categories1__c: SIM
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 216
WH_Product_Name__c: SonixNet SIM Service Data+Voice/10GB (Monthly)
SIM_Data_Size__c: 10GB
SIM_Plan_Type__c: DataSmsVoice
SIM_Has_Family_Discount__c: false
Display_Order__c: 2

SIM Data+Voice 25GB

Name: SIM Data+Voice 25GB
StockKeepingUnit: SIM-DATA-VOICE-25GB
Product2Categories1__c: SIM
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 247
WH_Product_Name__c: SonixNet SIM Service Data+Voice/25GB (Monthly)
SIM_Data_Size__c: 25GB
SIM_Plan_Type__c: DataSmsVoice
SIM_Has_Family_Discount__c: false
Display_Order__c: 3

SIM Data+Voice 30GB (3GB/3days)

Name: SIM Data+Voice 30GB (3GB/3days)
StockKeepingUnit: SIM-DATA-VOICE-30GB-3DAY
Product2Categories1__c: SIM
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 107
WH_Product_Name__c: SonixNet SIM Service Data+Voice/30GB (3GB/3days) (Monthly)
SIM_Data_Size__c: 30GB
SIM_Plan_Type__c: DataSmsVoice
SIM_Has_Family_Discount__c: false
Display_Order__c: 4

SIM Data+Voice 50GB

Name: SIM Data+Voice 50GB
StockKeepingUnit: SIM-DATA-VOICE-50GB
Product2Categories1__c: SIM
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 250
WH_Product_Name__c: SonixNet SIM Service Data+Voice/50GB (Monthly)
SIM_Data_Size__c: 50GB
SIM_Plan_Type__c: DataSmsVoice
SIM_Has_Family_Discount__c: false
Display_Order__c: 5

Voice-Only Plan

SIM Voice-Only

Name: SIM Voice-Only
StockKeepingUnit: SIM-VOICE-ONLY
Product2Categories1__c: SIM
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 142
WH_Product_Name__c: SonixNet SIM Service Voice-Only (Monthly)
SIM_Data_Size__c: Voice-Only
SIM_Plan_Type__c: VoiceOnly
SIM_Has_Family_Discount__c: false
Display_Order__c: 0

Family Discount Plans (Hidden from Catalog)

SIM Data+Voice 5GB (Family)

Name: SIM Data+Voice 5GB (Family Discount)
StockKeepingUnit: SIM-DATA-VOICE-5GB-FAMILY
Product2Categories1__c: SIM
Portal_Catalog__c: false
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 108
WH_Product_Name__c: SonixNet SIM Service Data+Voice/5GB (Family Discount/Monthly)
SIM_Data_Size__c: 5GB
SIM_Plan_Type__c: DataSmsVoice
SIM_Has_Family_Discount__c: true
Display_Order__c: 1

SIM Data+Voice 10GB (Family)

Name: SIM Data+Voice 10GB (Family Discount)
StockKeepingUnit: SIM-DATA-VOICE-10GB-FAMILY
Product2Categories1__c: SIM
Portal_Catalog__c: false
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 217
WH_Product_Name__c: SonixNet SIM Service Data+Voice/10GB (Family Discount/Monthly)
SIM_Data_Size__c: 10GB
SIM_Plan_Type__c: DataSmsVoice
SIM_Has_Family_Discount__c: true
Display_Order__c: 2

SIM Data+Voice 25GB (Family)

Name: SIM Data+Voice 25GB (Family Discount)
StockKeepingUnit: SIM-DATA-VOICE-25GB-FAMILY
Product2Categories1__c: SIM
Portal_Catalog__c: false
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 249
WH_Product_Name__c: SonixNet SIM Service Data+Voice/25GB (Family Discount/Monthly)
SIM_Data_Size__c: 25GB
SIM_Plan_Type__c: DataSmsVoice
SIM_Has_Family_Discount__c: true
Display_Order__c: 3

SIM Data+Voice 30GB (Family)

Name: SIM Data+Voice 30GB (Family Discount)
StockKeepingUnit: SIM-DATA-VOICE-30GB-3DAY-FAMILY
Product2Categories1__c: SIM
Portal_Catalog__c: false
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 109
WH_Product_Name__c: SonixNet SIM Service Data+Voice/30GB (3GB/3days) (Family Discount/Monthly)
SIM_Data_Size__c: 30GB
SIM_Plan_Type__c: DataSmsVoice
SIM_Has_Family_Discount__c: true
Display_Order__c: 4

SIM Data+Voice 50GB (Family)

Name: SIM Data+Voice 50GB (Family Discount)
StockKeepingUnit: SIM-DATA-VOICE-50GB-FAMILY
Product2Categories1__c: SIM
Portal_Catalog__c: false
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 251
WH_Product_Name__c: SonixNet SIM Service Data+Voice/50GB (Family Discount/Monthly)
SIM_Data_Size__c: 50GB
SIM_Plan_Type__c: DataSmsVoice
SIM_Has_Family_Discount__c: true
Display_Order__c: 5

SIM Add-ons (Hidden from Catalog)

Voice Mail Option

Name: SIM Voice Mail Option
StockKeepingUnit: SIM-ADDON-VOICE-MAIL
Product2Categories1__c: SIM
Portal_Catalog__c: false
Portal_Accessible__c: true
Item_Class__c: Add-on
Billing_Cycle__c: Monthly
WH_Product_ID__c: 119
WH_Product_Name__c: SonixNet SIM Service Voice Mail Option (Monthly)
SIM_Plan_Type__c: Add-on
Display_Order__c: 1

Call Waiting Option

Name: SIM Call Waiting Option
StockKeepingUnit: SIM-ADDON-CALL-WAITING
Product2Categories1__c: SIM
Portal_Catalog__c: false
Portal_Accessible__c: true
Item_Class__c: Add-on
Billing_Cycle__c: Monthly
WH_Product_ID__c: 123
WH_Product_Name__c: SonixNet SIM Service Call Waiting Option (Monthly)
SIM_Plan_Type__c: Add-on
Display_Order__c: 2

Unlimited Calling Option (Clean naming - no V2)

Name: SIM Unlimited Calling Option
StockKeepingUnit: SIM-ADDON-UNLIMITED-CALLING
Product2Categories1__c: SIM
Portal_Catalog__c: false
Portal_Accessible__c: true
Item_Class__c: Add-on
Billing_Cycle__c: Monthly
WH_Product_ID__c: 125
WH_Product_Name__c: SonixNet SIM Service Unlimited 15 (Domestic) Free Calling Option (Monthly)
SIM_Plan_Type__c: Add-on
Display_Order__c: 3

SIM Activation Fee (Hidden from Catalog)

SIM Activation Fee

Name: SIM Activation Fee
StockKeepingUnit: SIM-ACTIVATION-FEE
Product2Categories1__c: SIM
Portal_Catalog__c: false
Portal_Accessible__c: true
Item_Class__c: Activation
Billing_Cycle__c: Onetime
WH_Product_ID__c: 99
WH_Product_Name__c: SonixNet SIM Service (Activation Fee)
Is_Default__c: true
Auto_Add__c: true
Display_Order__c: 1

VPN Products

VPN Service Plans

VPN USA-SF

Name: VPN Remote Access (USA-SF)
StockKeepingUnit: VPN-REMOTE-ACCESS-USA-SF
Product2Categories1__c: VPN
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 33
WH_Product_Name__c: SonixNet USA Remote Access VPN Service (Monthly)
VPN_Region__c: USA-SF
Display_Order__c: 1

VPN UK-London

Name: VPN Remote Access (UK-London)
StockKeepingUnit: VPN-REMOTE-ACCESS-UK-LONDON
Product2Categories1__c: VPN
Portal_Catalog__c: true
Portal_Accessible__c: true
Item_Class__c: Service
Billing_Cycle__c: Monthly
WH_Product_ID__c: 54
WH_Product_Name__c: SonixNet UK Remote Access VPN Service (Monthly)
VPN_Region__c: UK-London
Display_Order__c: 2

VPN Activation Fee (Hidden from Catalog)

VPN Activation Fee

Name: VPN Account Activation Fee
StockKeepingUnit: VPN-ACTIVATION-FEE
Product2Categories1__c: VPN
Portal_Catalog__c: false
Portal_Accessible__c: true
Item_Class__c: Activation
Billing_Cycle__c: Onetime
WH_Product_ID__c: 37
WH_Product_Name__c: SonixNet VPN Services (Account Activation Fee)
Is_Default__c: true
Auto_Add__c: true
Display_Order__c: 1

Edge Case Examples

Multiple Activation Fees

-- SIM Activation Fee (default)
Name: "SIM Activation Fee"
StockKeepingUnit: "SIM-ACTIVATION-FEE"
Item_Class__c: "Activation"
Is_Default__c: true
Auto_Add__c: true
Display_Order__c: 1

-- SIM Premium Activation (optional upgrade)
Name: "SIM Premium Activation"
StockKeepingUnit: "SIM-ACTIVATION-PREMIUM"
Item_Class__c: "Activation"
Is_Default__c: false
Auto_Add__c: false
Display_Order__c: 2

Regional Products

-- VPN Activation for USA
Name: "VPN Activation Fee (USA)"
StockKeepingUnit: "VPN-ACTIVATION-USA"
VPN_Region__c: "USA-SF"
Is_Default__c: true

-- Global VPN Activation (fallback)
Name: "VPN Activation Fee"
StockKeepingUnit: "VPN-ACTIVATION-GLOBAL"
VPN_Region__c: "Global"
Is_Default__c: false
Display_Order__c: 2

Product Dependencies

-- Hikari Denwa service requires installation
Name: "Hikari Denwa (Home Phone)"
StockKeepingUnit: "INTERNET-ADDON-HOME-PHONE"
Required_Products__c: '["INTERNET-ADDON-HIKARI-DENWA-INSTALL"]'

-- Weekend installation conflicts with weekday
Name: "Weekend Installation"
StockKeepingUnit: "INTERNET-INSTALL-WEEKEND"
Mutually_Exclusive__c: '["INTERNET-INSTALL-WEEKDAY"]'

-- Premium SIM includes voice mail
Name: "SIM Premium Plan"
StockKeepingUnit: "SIM-PREMIUM-10GB"
Dependent_Products__c: '["SIM-ADDON-VOICE-MAIL"]'

Setup Instructions

1. Create Custom Fields

First, create these custom fields on the Product2 object:

Core Fields

  • StockKeepingUnit (Text, 255, External ID, Unique) - Standard Salesforce field
  • Product2Categories1__c (Picklist: Internet, SIM, VPN, Other)
  • Portal_Catalog__c (Checkbox, Default: false)
  • Portal_Accessible__c (Checkbox, Default: true)
  • Item_Class__c (Picklist: Service, Installation, Add-on, Activation)
  • Billing_Cycle__c (Picklist: Monthly, Onetime)
  • WH_Product_ID__c (Number, 18, 0)
  • WH_Product_Name__c (Text, 255)

Edge Case Handling Fields

  • Is_Default__c (Checkbox, Default: false)
  • Display_Order__c (Number, 18, 0)
  • Auto_Add__c (Checkbox, Default: false)
  • VPN_Region__c (Picklist: USA-SF, UK-London, Global)
  • Internet_Region__c (Text, 255)
  • Required_Products__c (Text, 1000)
  • Dependent_Products__c (Text, 1000)
  • Mutually_Exclusive__c (Text, 1000)

Internet Fields

  • Internet_Plan_Tier__c (Picklist: Silver, Gold, Platinum)
  • Internet_Offering_Type__c (Picklist: Home 1G, Home 10G, Apartment 1G, Apartment 100M)
  • Internet_Monthly_Price__c (Currency)

SIM Fields

  • SIM_Data_Size__c (Text, 50)
  • SIM_Plan_Type__c (Picklist: DataOnly, DataSmsVoice, VoiceOnly, Add-on)
  • SIM_Has_Family_Discount__c (Checkbox, Default: false)

2. Create Products

Use the product definitions above to create each Product2 record with the specified field values.

3. Create Pricebook Entries

For each product, create a PricebookEntry in the "Portal" pricebook with appropriate pricing.

4. Migration from Existing Data

Phase 1: Add New Fields (Non-Breaking)

-- Add new fields to Product2 object
ALTER TABLE Product2 ADD COLUMN Is_Default__c BOOLEAN DEFAULT false;
ALTER TABLE Product2 ADD COLUMN Display_Order__c NUMBER(18,0);
ALTER TABLE Product2 ADD COLUMN Auto_Add__c BOOLEAN DEFAULT false;
ALTER TABLE Product2 ADD COLUMN VPN_Region__c VARCHAR(255);
ALTER TABLE Product2 ADD COLUMN Required_Products__c VARCHAR(1000);
ALTER TABLE Product2 ADD COLUMN Dependent_Products__c VARCHAR(1000);
ALTER TABLE Product2 ADD COLUMN Mutually_Exclusive__c VARCHAR(1000);

Phase 2: Populate Default Values

-- Mark existing activation fees as default
UPDATE Product2
SET Is_Default__c = true, Auto_Add__c = true, Display_Order__c = 1
WHERE Item_Class__c = 'Activation'
AND StockKeepingUnit IN ('SIM-ACTIVATION-FEE', 'VPN-ACTIVATION-FEE', 'INTERNET-INSTALL-SINGLE');

-- Set VPN regions
UPDATE Product2
SET VPN_Region__c = 'Global'
WHERE Product2Categories1__c = 'VPN' AND VPN_Region__c IS NULL;

Phase 3: Add Product Relationships

-- Hikari Denwa requires installation
UPDATE Product2
SET Required_Products__c = '["INTERNET-ADDON-HIKARI-DENWA-INSTALL"]'
WHERE StockKeepingUnit = 'INTERNET-ADDON-HOME-PHONE';

-- Weekend installation conflicts
UPDATE Product2
SET Mutually_Exclusive__c = '["INTERNET-INSTALL-WEEKDAY"]'
WHERE StockKeepingUnit = 'INTERNET-INSTALL-WEEKEND';

Validation Rules

1. Default Product Validation

-- Ensure only one default per category/class combination
-- Salesforce Validation Rule
AND(
  Is_Default__c = true,
  ISBLANK(
    VLOOKUP(
      Product2Categories1__c & Item_Class__c,
      $CustomObject.Product_Defaults__c.Category_Class__c,
      $CustomObject.Product_Defaults__c.Default_SKU__c
    )
  )
)

2. JSON Field Validation

-- Validate JSON format in relationship fields
-- Apex Trigger validation
if (trigger.isInsert || trigger.isUpdate) {
  for (Product2 p : trigger.new) {
    if (p.Required_Products__c != null) {
      try {
        List<String> skus = (List<String>) JSON.deserialize(p.Required_Products__c, List<String>.class);
      } catch (Exception e) {
        p.addError('Required_Products__c must be valid JSON array');
      }
    }
  }
}

Validation Checklist

After creating all products, verify:

  • All SKUs use detailed format (e.g., INTERNET-SILVER-APT-1G)
  • All catalog products have Portal_Catalog__c = true
  • All add-ons have Portal_Catalog__c = false, Portal_Accessible__c = true
  • All activation fees have Is_Default__c = true, Auto_Add__c = true
  • All WHMCS Product IDs match your WHMCS setup
  • All products have corresponding PricebookEntry records
  • No V2 suffixes in clean product naming
  • All field names use correct Salesforce conventions

Summary

Total Products to Create: 48

  • Internet: 15 products (12 services + 3 installations + 3 add-ons)
  • SIM: 30 products (11 main + 5 family + 3 add-ons + 1 activation)
  • VPN: 3 products (2 services + 1 activation)

This setup provides a complete product catalog with proper edge case handling, validation rules, and detailed SKU naming strategy for your portal.