# Addon and Installation Logic - Clear Business Rules

## Product Classification in Salesforce

### Item_Class\_\_c Values

- **Service**: Main customer-selectable products (Internet plans, SIM plans, VPN)
- **Installation**: Installation options for services (one-time or monthly)
- **Add-on**: Optional additional services that can be standalone or bundled
- **Activation**: Required one-time activation fees

## Addon Logic

### Standalone Addons

Addons can exist independently without bundling:

```typescript
// Example: Voice Mail addon for SIM
{
  sku: "SIM-ADDON-VOICE-MAIL",
  itemClass: "Add-on",
  billingCycle: "Monthly",
  isBundledAddon: false,
  bundledAddonId: null
}
```

### Bundled Addons

Addons can be bundled with their installation/setup:

```typescript
// Monthly service addon
{
  sku: "INTERNET-ADDON-HIKARI-DENWA",
  itemClass: "Add-on",
  billingCycle: "Monthly",
  isBundledAddon: true,
  bundledAddonId: "a0X4x000000INSTALL123" // Points to installation product
}

// Installation for the addon
{
  sku: "INTERNET-ADDON-HIKARI-DENWA-INSTALL",
  itemClass: "Add-on", // Note: Installation for addon is still classified as Add-on
  billingCycle: "Onetime",
  isBundledAddon: true,
  bundledAddonId: "a0X4x000000SERVICE456" // Points back to monthly service
}
```

## Installation Logic

### Service Installations

Main service installations are classified as "Installation":

```typescript
// Internet service installation
{
  sku: "INTERNET-INSTALL-SINGLE",
  itemClass: "Installation", // Classified as Installation
  billingCycle: "Onetime",
  isBundledAddon: false,
  bundledAddonId: null
}
```

### Addon Installations

Addon installations remain classified as "Add-on":

```typescript
// Addon installation (not classified as Installation)
{
  sku: "INTERNET-ADDON-HIKARI-DENWA-INSTALL",
  itemClass: "Add-on", // Still Add-on, not Installation
  billingCycle: "Onetime",
  isBundledAddon: true,
  bundledAddonId: "a0X4x000000SERVICE456"
}
```

## Frontend Bundle Display Logic

The `AddonGroup.tsx` component handles bundling:

1. **Identifies bundled pairs**: Looks for products with `isBundledAddon: true` and matching `bundledAddonId`
2. **Groups by billing cycle**:
   - Monthly addon + Onetime installation = Bundle
   - Standalone addon = Individual item
3. **Display logic**:
   - Bundle: Shows combined name, monthly price + activation price
   - Standalone: Shows individual addon with its price

## Business Rules

### Bundling Rules

- Only addons can be bundled (Item_Class\_\_c = "Add-on")
- Service installations are separate (Item_Class\_\_c = "Installation")
- Bundled addons must have matching `bundledAddonId` references
- Bundle pairs: One Monthly + One Onetime with same bundle relationship

### SKU Patterns

- Service installations: `*-INSTALL-*` with Item_Class\_\_c = "Installation"
- Addon installations: `*-ADDON-*-INSTALL` with Item_Class\_\_c = "Add-on"
- Monthly addons: `*-ADDON-*` (no INSTALL suffix) with Item_Class\_\_c = "Add-on"

### Validation Logic

```typescript
// Service vs Addon installation detection
function isServiceInstallation(product) {
  return product.itemClass === "Installation";
}

function isAddonInstallation(product) {
  return (
    product.itemClass === "Add-on" &&
    product.sku.includes("INSTALL") &&
    product.billingCycle === "Onetime"
  );
}

function isMonthlyAddon(product) {
  return product.itemClass === "Add-on" && product.billingCycle === "Monthly";
}
```

This clarifies that:

1. **No featureList/featureSet fields** - removed from field mapping
2. **Addons can be standalone or bundled** with their installations
3. **Service installations** use Item_Class\_\_c = "Installation"
4. **Addon installations** use Item_Class\_\_c = "Add-on" (not "Installation")
5. **Bundle logic** is based on `isBundledAddon` + `bundledAddonId` fields, not SKU patterns
