๐Ÿ”ฌ Lesson 01b โ€” Hands-On Lab ๐Ÿ‡ฆ๐Ÿ‡ท Comuniqa โšก CML-First

Product Catalog
Hands-On Lab

Build Comuniqa's full B2C product catalog from scratch โ€” attributes, classifications, simple products, bundles, selling models, and qualification rules. Each task shows the expected outcome; click Hint if you need step-by-step guidance.

๐Ÿ“‹ Business Context

Business Requirements & Product Model

Before touching the platform, understand what Comuniqa needs to achieve commercially and why the catalog is structured the way it is. Every task in this lab maps directly to one or more of the requirements below.

The Comuniqa Catalog Challenge

Comuniqa is an Argentine B2C telco launching its new digital sales platform on Salesforce Revenue Cloud Advanced. Their product catalog has four layers of complexity that must all work together before a single quote can be created:

๐Ÿ“ฆ
Bundle Complexity

A configurable bundle (Comuniqa Go! Vida Digital) with 5 groups, 9 child products, required/optional rules, and a nested sub-bundle (Vida Digital Pass).

๐Ÿท๏ธ
Rich Attributes

18 attributes across 5 product types โ€” agent-configurable, fulfillment-populated, and read-only โ€” each requiring correct data type and visibility settings.

๐Ÿ”„
Selling Models

Three commitment options on a single product: No Contract (Evergreen), 12-Month (Term-Defined), and 24-Month (Term-Defined) โ€” each driving different billing and renewal behaviour.

โœ…
Eligibility Rules

6 qualification rules gate product availability: age, debt balance, credit score, max active lines, Vida Digital bundle composition, and YouTube account validation.

Key Products to Build

ProductTypeDescriptionSell Standalone
Comuniqa Go! (Comuniqa Vida Digital)Bundle RootMaster bundle โ€” mobile plan + optional Vida Digital Pass subscriptionโœ… Yes
Comuniqa Go!Simple (configurable)Base mobile plan โ€” unlimited voice, SMS, data. Postpaid, individual.โœ… Yes
Comuniqa Go! YouthSimple (configurable)Youth variant (age โ‰ค18) โ€” same inclusions, restricted by qualification ruleโœ… Yes
SIM CardSimple (configurable)Physical SIM or eSIM. Required component. Free of charge.โŒ Sub-component only
Phone NumberSimple (configurable)Auto-assigned or customer-selected. Required component.โŒ Sub-component only
Phone Number PortabilitySimple (configurable)Optional port-in service from another carrierโŒ Sub-component only
Comuniqa Family Go! Data BundleSimple (configurable)Data sharing for 2โ€“5 family members. Free of charge.โŒ Sub-component only
Comuniqa Go! TwoSimple (configurable)Watch connectivity service โ€” Apple Watch or Samsung Galaxy WatchโŒ Sub-component only
Comuniqa Go! Shared TwoSimple (configurable)Alternative watch service variant for shared linesโŒ Sub-component only
MoviMundo Plus+Simple (static)Premium streaming partner โ€” FHD, 2 devices. ARS 13,900/month.โœ… Yes
MoviMundo Basic+Simple (static)Standard streaming partner. ARS 7,900/month.โœ… Yes
Comuniqa Vida Digital Pass C&CBundle (configurable)Retail & cafรฉ discount pass with 1โ€“2 optional streaming add-ons. ARS 9,900/month.โŒ Sub-component only
Mi Coto DiscountSimple (static)Mandatory benefit inside Vida Digital Pass โ€” up to 30% off Mi Coto storesโŒ Sub-component only
Club Dรญa DiscountSimple (static)Mandatory benefit inside Vida Digital Pass โ€” up to 30% off Club Dรญa storesโŒ Sub-component only

Bundle Architecture โ€” What You Are Building

Comuniqa Go! (Vida Digital) โ€” Bundle Structure Summary
Group: Base Mobile Plan (Min 1, Max 1) โ†’ Comuniqa Go! [Required, Default]
  โ†ณ Group: SIM (Min 1, Max 1) โ†’ SIM Card [Required, Default]
  โ†ณ Group: Phone Number & Portability (Min 1, Max 1) โ†’ Phone Number [Required, Default] | Portability [Optional]
  โ†ณ Group: Value-Added Services (Min 0, Max 3) โ†’ Family Bundle | Go! Two | Shared Two [all Optional]
  โ†ณ Group: Partner VAS (Min 0, Max 1) โ†’ MoviMundo Plus+ | MoviMundo Basic+ [Optional โ€” mutually exclusive]
Group: Subscriptions (Min 0, Max 1) โ†’ Vida Digital Pass [Optional]
  โ†ณ Group: Base Benefits (Min 2, Max 2) โ†’ Mi Coto [Required] | Club Dรญa [Required]
  โ†ณ Group: Additional Benefits (Min 1, Max 2) โ†’ Streaming add-ons [Optional]

Qualification Rules to Implement

#Rule NameLogicProducts Affected
1Customer Age Validationage > 18 โ†’ FailComuniqa Go! Youth only
2Outstanding AmountoutstandingAmount > 0 โ†’ FailAll mobile plan products
3Max Active Mobile LinesactiveLines โ‰ฅ maxLines โ†’ FailAll mobile plan products
4Credit Score CheckcreditScore < 600 โ†’ FailTerm-based subscriptions
5Vida Digital Add-On ValidationCount(mandatory) โ‰  2 OR Count(optional) โ‰  1 โ†’ FailVida Digital Pass
6YouTube Mundo Google AccountGoogleEmail null or invalid โ†’ FailYouTube Mundo add-on
๐Ÿ‡ฆ๐Ÿ‡ท Implementation Approach In this lab you will build Tasks 1โ€“6 covering the full catalog: attribute foundation โ†’ simple products โ†’ Comuniqa Go! bundle โ†’ selling models โ†’ Vida Digital Pass โ†’ qualification rules (CML). This is the foundation that every other lesson (Pricing, Configurator, DRO, Billing) reads from. A misconfigured catalog breaks all downstream processes.
โš™ Pre-Lab

Pre-Lab Setup

Before starting, confirm your org is ready and you understand the scope. Check off each item below.

Salesforce org access confirmed โ€” You have System Administrator profile or equivalent permissions in your Revenue Cloud training org.
Revenue Cloud Advanced (RCA) is installed โ€” Navigate to Setup โ†’ Installed Packages and confirm Salesforce Revenue Cloud Advanced is present.
Product Discovery is enabled โ€” Setup โ†’ Product Discovery Settings โ†’ confirm "Enable Product Discovery" is toggled on.
You have reviewed Lesson 1a โ€” You understand PCM concepts: catalogs, classifications, bundles, cardinality, and selling models.
Comuniqa product model is understood โ€” You are familiar with the Comuniqa Go! bundle structure: 4 groups, 8 child components, and the Vida Digital Pass subscription.
CML is available in your org โ€” Navigate to Setup โ†’ Contextual Mapping Language and confirm it is accessible. CML will be used for qualification rules in Task 6.
Lab Scope This lab builds the full Comuniqa B2C catalog: 1 catalog, 4 categories, 7 attribute picklists, ~14 attribute definitions, 5 product classifications, 12 simple products, 2 bundle products, 3 selling model options, and 3 qualification rules. Estimated time: 3โ€“4 hours for a first build.
โšก CML-First Policy

This lab prioritises Contextual Mapping Language (CML) over the Business Rules Engine (BRE) wherever rule logic is required โ€” specifically for qualification procedures in Task 6. CML provides cleaner separation of concerns, better testability, and is the recommended approach for all advanced ARM implementations. BRE alternatives are noted where applicable but not the primary path.

01 Task

Task 1 โ€” Build the Attribute Foundation

1
Task 1a
Create the B2C Catalog & Categories
To Do
ObjectiveCreate the top-level B2C catalog and the four product categories that will organise Comuniqa's commercial products in Browse Catalogs.
โœ“ Expected Outcome
  • Catalog named "B2C Mรณvil Argentina" exists with Status = Active
  • 4 categories created: Mobile Plans (sort โˆ’1), Add-On Services (sort 0), Partner Content (sort 1), Subscriptions (sort 2)
  • All categories linked to the B2C Mรณvil Argentina catalog
1
Navigate to Revenue Cloud app โ†’ Product Catalog Management โ†’ Catalogs โ†’ click New.
2
Set Name = B2C Mรณvil Argentina, Code = CQ-B2C-MOB, Type = Sales, Effective Start Date = today. Leave End Date blank. Save.
3
In the Catalog record, scroll to the Categories related list โ†’ click New Category.
4
Create each category: Name, Code (e.g. MOB-PLANS), Sort Order as listed in the expected outcome. Leave Parent Category blank for all four (these are top-level). Save each.
5
Confirm all 4 categories appear in the catalog's Categories related list.
โš  Common Error: Catalog Type set to "Service Process"

This hides the catalog from Product Discovery entirely. Always use Sales for commercial B2C catalogs.

1
Task 1b
Create Attribute Picklists
To Do
ObjectiveCreate the 7 reusable picklists that will be referenced by Picklist-type attribute definitions. Picklists must exist before attribute definitions.
โœ“ Expected Outcome
  • Contract Term โ€” values: No Contract (default), 12 Months, 24 Months
  • SIM Card Format โ€” values: Physical SIM (default), eSIM
  • Sharing Mode โ€” values: Immediate (default), Monthly (1st of month)
  • Watch Device Type โ€” values: Apple Watch, Samsung Galaxy Watch
  • Phone Number Type โ€” values: Standard (default), Premium
  • Phone Number Category โ€” values: Bronze (default), Silver, Gold
  • Billing Frequency โ€” values: Monthly (default), Annual
1
Navigate to PCM โ†’ Attribute Picklists โ†’ click New.
2
For Contract Term: Name = Contract Term, Data Type = Text. Save. Then in the Picklist Values related list, add three values. Set Sequence: No Contract = 10, 12 Months = 20, 24 Months = 30. Check Default on "No Contract".
3
Repeat for each picklist. Use Data Type = Text for all. For each value, always set a Sequence (10, 20, 30โ€ฆ) and mark exactly one value as Default.
4
For Phone Number Category: only appears if Phone Number Type = Premium. You will configure this dependency in the attribute definition, not in the picklist itself.
โš  Common Error: No default value set

If no picklist value is marked as Default, the attribute will appear blank at order time and agents will be confused. Always set a sensible default.

1
Task 1c
Create Attribute Definitions & Classifications
To Do
ObjectiveCreate the attribute definitions for each product type, group them into attribute categories, and build the 5 product classifications that will serve as attribute templates.

Attribute Definitions to Create

AttributeTypeRequiredPrice ImpactingNotes
Voice Calls IncludedTextNoNoStatic descriptor
SMS/MMS IncludedTextNoNoStatic descriptor
Data IncludedTextNoNoStatic descriptor
Data Speed Beyond AllowanceTextNoNoStatic descriptor
Contract TermPicklistYesYesDrives pricing discount
SIM Card FormatPicklistYesNoAgent selects at order time
ICCIDTextNoNoReadOnly, fulfillment-populated
Phone NumberTextNoNoReadOnly, fulfillment-populated
Phone Number TypePicklistYesNo
Watch Device TypePicklistYesNo
Watch IMEITextNoNoReadOnly, fulfillment-populated
Paired Mobile NumberTextNoNoReadOnly
Group NameTextNoNoFamily bundle group label
Sharing ModePicklistYesNo
Member CountNumberYesNoMin 2, Max 5
GoogleEmailTextYesNoRequired for YouTube Mundo activation
ActivationStatusTextNoNoReadOnly, partner API callback
Billing FrequencyPicklistYesNoSubscription pass billing

Product Classifications to Create

Classification NameAttributes to Assign
Mobile Plan AttributesVoice Calls Included, SMS/MMS Included, Data Included, Data Speed Beyond Allowance, Contract Term, SIM Card Format, ICCID, Phone Number
Watch Service AttributesWatch Device Type, Watch IMEI, Paired Mobile Number
Family Bundle AttributesGroup Name, Sharing Mode, Member Count
Streaming Pass AttributesGoogleEmail, ActivationStatus, Billing Frequency
Phone Number AttributesPhone Number, Phone Number Type
โœ“ Expected Outcome
  • 18 attribute definitions created with correct data types and settings
  • ICCID, Phone Number, Watch IMEI, Paired Mobile Number, ActivationStatus all set to IsReadOnly = true
  • Contract Term has Is Price Impacting = true
  • 5 product classifications created in Active status
  • Each classification has the correct attributes assigned
1
Navigate to PCM โ†’ Attribute Definitions โ†’ New. For each attribute, set Name, Data Type, and for Picklist types select the corresponding picklist from the lookup.
2
For Contract Term: check Is Price Impacting = true. This is required for the Pricing Procedure to read this attribute when applying contract discounts.
3
For read-only fulfillment attributes (ICCID, Watch IMEI, Phone Number, ActivationStatus): check Is Read Only = true. Do NOT check Required for these โ€” they are populated by systems, not agents.
4
Navigate to Product Classifications โ†’ New. Set Name and Code. Leave Status = Draft initially.
5
Open each classification โ†’ go to the Product Attribute Definitions related list โ†’ click Add Attributes. Select the attributes listed in the table above for that classification.
6
Once attributes are assigned and verified, change classification Status from Draft to Active. You cannot use a Draft classification on a product.
โš  Common Error: Activating classification before verifying attribute assignments

Once Active, a classification cannot be moved back to Draft. Always review the attribute list carefully before activating.

โœ… Checkpoint 1 โ€” Before Proceeding to Task 2
  • Catalog "B2C Mรณvil Argentina" is Active and has 4 categories
  • All 7 picklists exist with correct values and defaults
  • All 18 attribute definitions created with correct types, Required flags, and ReadOnly flags
  • Contract Term has Is Price Impacting = true
  • All 5 product classifications are in Active status
  • No attribute is assigned directly to a product yet โ€” classifications only at this stage
02 Task

Task 2 โ€” Create Simple Products

2
Task 2
Build All Simple Products
To Do
ObjectiveCreate all standalone commercial products. These will later become components inside the Comuniqa Go! bundle. All products must be assetizable and linked to the correct classification and category.
Product NameClassificationCategoryConfig?Sell Only With OthersSpec Type
Comuniqa Go!Mobile Plan AttributesMobile Plansโœ… AllowedNoCommercial
SIM CardMobile Plan AttributesAdd-On Servicesโœ… Allowedโœ… YesCommercial
Phone NumberPhone Number AttributesAdd-On Servicesโœ… Allowedโœ… YesCommercial
Phone Number PortabilityPhone Number AttributesAdd-On Servicesโœ… Allowedโœ… YesCommercial
Comuniqa Family Go! Data BundleFamily Bundle AttributesAdd-On Servicesโœ… Allowedโœ… YesCommercial
Comuniqa Go! TwoWatch Service AttributesAdd-On Servicesโœ… Allowedโœ… YesCommercial
Comuniqa Go! Shared TwoWatch Service AttributesAdd-On Servicesโœ… Allowedโœ… YesCommercial
MoviMundo Plus+Streaming Pass AttributesPartner ContentโŒ Not AllowedNoCommercial
MoviMundo Basic+Streaming Pass AttributesPartner ContentโŒ Not AllowedNoCommercial
Mi Coto DiscountStreaming Pass AttributesSubscriptionsโŒ Not Allowedโœ… YesCommercial
Club Dรญa DiscountStreaming Pass AttributesSubscriptionsโŒ Not Allowedโœ… YesCommercial
โš  Is Assetizable โ€” Critical Flag Set Is Assetizable = true on ALL products above without exception. This ensures DRO creates asset records after activation, enabling amendments, renewals, and the customer account view.
โœ“ Expected Outcome
  • 11 simple products created in Active status
  • Each product linked to correct classification via the "Based On" field
  • Each product assigned to the correct catalog category
  • All products: Is Assetizable = true, Specification Type = Commercial
  • SIM Card, Phone Number, Portability, Family Bundle, Go! Two, Shared Two, Mi Coto, Club Dรญa: Sell Only With Other Products = true
  • Comuniqa Go! attribute values set: Voice Calls = "Unlimited", SMS/MMS = "Unlimited", Data = "Unlimited", Data Speed = "5Mbps"
1
Navigate to PCM โ†’ Products โ†’ New. Set Name, Product Code (e.g. CQ-GO-001), Product Type = None (for simple products).
2
In the Based On field, search for and select the correct Product Classification from the table above.
3
Set Configure During Sale: "Allowed" for products that need agent configuration (SIM Format, Contract Term). "Not Allowed" for static products (MoviMundo Plus+, Mi Coto Discount).
4
Set Specification Type = Commercial for all products. Set Is Assetizable = true.
5
For sub-components: check Sell Only With Other Products. This prevents agents from adding a SIM Card to a quote without a mobile plan.
6
Assign each product to its catalog category: click the Categories related list โ†’ Add to Category โ†’ select the correct one from the table above.
7
For Comuniqa Go!: after saving, go to the Product Attributes related list and set static values: Voice Calls Included = Unlimited, SMS/MMS = Unlimited, Data = Unlimited, Data Speed = 5Mbps.
โš  Common Error: Setting Product Type = "Bundle" on simple products

Product Type should be None for simple products. Only the two bundle root products (Comuniqa Go! wrapper and Vida Digital Pass) use "Bundle". This is set separately in Task 3.

โœ… Checkpoint 2 โ€” Before Proceeding to Task 3
  • 11 simple products exist and are Active
  • Every product has Is Assetizable = true and Specification Type = Commercial
  • Comuniqa Go! has all 4 static attribute values populated
  • All sub-components have Sell Only With Other Products = true
  • Navigate to Browse Catalogs โ€” Comuniqa Go! should appear under Mobile Plans (may need index rebuild)
03 Task

Task 3 โ€” Assemble the Comuniqa Go! Bundle

3
Task 3
Build the Comuniqa Go! (Comuniqa Vida Digital) Bundle
To Do
ObjectiveCreate the "Comuniqa Go! (Comuniqa Vida Digital)" configurable bundle root product, then build the product group structure with correct cardinality and assign all child components.

Bundle Structure to Build

Group NameMinMaxChild ProductDefaultRequiredSeq
Base Mobile Plan11Comuniqa Go!โœ…โœ…10
SIM11SIM Cardโœ…โœ…10
Phone Number & Portability11Phone Numberโœ…โœ…10
Phone Number & Portabilityโ€”โ€”Phone Number PortabilityโŒโŒ20
Value-Added Services03Comuniqa Family Go! Data BundleโŒโŒ10
Value-Added Servicesโ€”โ€”Comuniqa Go! TwoโŒโŒ20
Value-Added Servicesโ€”โ€”Comuniqa Go! Shared TwoโŒโŒ30
Partner Value-Added Services01MoviMundo Plus+โŒโŒ20
Partner Value-Added Servicesโ€”โ€”MoviMundo Basic+โŒโŒ30
Subscriptions01Comuniqa Vida Digital Pass C&CโŒโŒ20
Mutual Exclusivity via Cardinality The Partner Value-Added Services group Max = 1 enforces that a customer can select ONLY ONE of MoviMundo Plus+, MoviMundo Basic+, or (via the bundle) Comuniqa Vida Digital Pass. This is the PCM mechanism โ€” the Configurator enforces it at runtime by reading this cardinality setting.
โœ“ Expected Outcome
  • Bundle root product "Comuniqa Go! (Comuniqa Vida Digital)" exists, Product Type = Bundle, Configure During Sale = Allowed
  • 4 product groups created with correct cardinality settings
  • All 9 child components assigned to correct groups with correct Required/Default/Sequence settings
  • Run "Validate Product Definition" โ€” zero errors returned
  • Is Assetizable = true on the bundle root
1
Navigate to PCM โ†’ Products โ†’ New. Name = Comuniqa Go! (Comuniqa Vida Digital), Product Type = Bundle, Configure During Sale = Allowed. Set Is Assetizable = true. Save.
2
Open the bundle product. Click the Structure tab. You will see an empty canvas โ€” this is where you build the group hierarchy.
3
Click Add Group. Name = Base Mobile Plan. Set Min Number of Components = 1, Max = 1, Sequence = 10. Save the group.
4
Inside the Base Mobile Plan group, click Add Product. Search for Comuniqa Go!. Set Include by Default = true, Required = true, Sequence = 10. Save.
5
Repeat: create groups "SIM", "Phone Number & Portability", "Value-Added Services" (Max=3), "Partner Value-Added Services" (Max=1), "Subscriptions" (Max=1). Use the cardinality table above for each.
6
Add child products to each group as per the table. For optional products: Include by Default = false, Required = false.
7
After all components are added, click the Actions menu on the bundle product โ†’ select Validate Product Definition. Review results. Fix any reported issues before proceeding.
โš  Common Error: Adding products directly under bundle root (not under a group)

In a configurable bundle, ALL child products must be inside a Product Group. Attempting to add a component directly to the root will be blocked by the platform or produce validation errors.

โš  Common Error: Required component not set as Include by Default

If a component is Required but Include by Default = false, the validation will fail. Required components are always auto-included โ€” they must also have the default flag set.

โœ… Checkpoint 3 โ€” Before Proceeding to Task 4
  • Bundle root product exists with Product Type = Bundle, Configure During Sale = Allowed
  • 5 groups created with correct group cardinality (Min/Max)
  • All child products assigned with correct Required, Default, and Sequence values
  • "Validate Product Definition" returns zero errors
  • In Browse Catalogs โ€” selecting Comuniqa Go! (Vida Digital) auto-adds SIM and Phone Number but not optional add-ons
04 Task

Task 4 โ€” Configure Product Selling Models

4
Task 4
Create Selling Model Options for Comuniqa Go!
To Do
ObjectiveCreate the three selling model options for Comuniqa Go! representing the three commitment levels. Also assign Evergreen selling models to sub-component products.
ProductSelling Model NameTypePricing TermUnitAuto-RenewProration
Comuniqa Go!No Contract (Monthly)Evergreen1MonthN/ADaily
Comuniqa Go!12-Month ContractTerm-Defined12Monthโœ… TrueDaily
Comuniqa Go!24-Month ContractTerm-Defined24Monthโœ… TrueDaily
SIM CardSIM EvergreenEvergreen1MonthN/ADaily
Phone NumberPhone Number EvergreenEvergreen1MonthN/ADaily
MoviMundo Plus+MoviMundo MonthlyEvergreen1MonthN/ADaily
MoviMundo Basic+MoviMundo Basic MonthlyEvergreen1MonthN/ADaily
๐Ÿ”ด Warning โ€” Selling Models Cannot Be Changed After Price Book Entry Once you create a Price Book Entry linking a product to a selling model, the selling model assignment is permanent. Validate all selling model configurations in sandbox before creating any Price Book Entries.
โœ“ Expected Outcome
  • Comuniqa Go! has 3 Selling Model Options visible in its Product Selling Models related list
  • Both Term-Defined models have Automatically Renew Asset by Default = true
  • All Evergreen models have Pricing Term = 1, Unit = Month
  • All selling models have Proration Policy = Daily
1
Navigate to PCM โ†’ Product Selling Models โ†’ New. Name = No Contract (Monthly), Selling Model Type = Evergreen, Pricing Term = 1, Pricing Term Unit = Month, Proration Policy = Daily. Save.
2
Create the second: Name = 12-Month Contract, Type = Term-Defined, Pricing Term = 12, Unit = Month, check Automatically Renew Asset by Default = true, Proration = Daily. Save.
3
Create the third: Name = 24-Month Contract, Type = Term-Defined, Pricing Term = 24, Unit = Month, Auto-Renew = true, Proration = Daily. Save.
4
Open the Comuniqa Go! product. In the Product Selling Models related list, click Add Selling Model. Add all three models. This creates the Selling Model Options on the product.
5
Repeat: create Evergreen models for SIM Card, Phone Number, MoviMundo Plus+, MoviMundo Basic+. Add each to the corresponding product's Selling Models related list.
โœ… Checkpoint 4 โ€” Before Proceeding to Task 5
  • Comuniqa Go! shows 3 selling model options in its related list
  • Both Term-Defined models have Auto-Renew = true
  • All Evergreen models use Pricing Term = 1, Month
  • SIM, Phone Number, MoviMundo Plus+, MoviMundo Basic+ each have 1 Evergreen selling model assigned
  • No Price Book Entries created yet โ€” selling models only at this stage
05 Task

Task 5 โ€” Build the Comuniqa Vida Digital Pass

5
Task 5
Vida Digital Pass โ€” Bundle with Cardinality Enforcement
To Do
ObjectiveCreate the Comuniqa Vida Digital Pass Convenience Store & Cafรฉ as a configurable bundle product with two groups: Base Benefits (exactly 2 required) and Additional Benefits (min 1, max 2 optional). This product is a child component inside the main Comuniqa Go! bundle.

Vida Digital Pass Bundle Structure

GroupMinMaxChild ProductDefaultRequired
Base Benefits22Mi Coto Discountโœ…โœ…
Base Benefitsโ€”โ€”Club Dรญa Discountโœ…โœ…
Additional Benefits12(Streaming add-ons โ€” placeholder products)โŒโŒ
โš  Cardinality Design โ€” Additional Benefits Group Min = 1, Max = 2 means the customer MUST select at least 1 optional streaming add-on, but no more than 2. This is enforced by the Configurator reading PCM group cardinality at runtime. Getting this wrong (e.g. Min = 0, Max = 5) allows invalid subscriptions and causes billing and fulfillment issues.
โœ“ Expected Outcome
  • "Comuniqa Vida Digital Pass Convenience Store & Cafรฉ" bundle product created
  • Product Code = PR00012109
  • Base Benefits group: Min = 2, Max = 2 with both Mi Coto and Club Dรญa as Required + Default
  • Additional Benefits group: Min = 1, Max = 2 with optional streaming add-ons (not default)
  • Validate Product Definition returns zero errors
  • This product added as optional component in the "Subscriptions" group of Comuniqa Go! (Vida Digital) bundle
1
Create a new Product: Name = Comuniqa Vida Digital Pass Convenience Store & Cafรฉ, Code = PR00012109, Product Type = Bundle, Configure During Sale = Allowed, Is Assetizable = true.
2
Open the Structure tab. Click Add Group โ†’ Name = Base Benefits, Min = 2, Max = 2. Add Mi Coto Discount and Club Dรญa Discount โ€” both Required = true, Include by Default = true.
3
Add second group: Additional Benefits, Min = 1, Max = 2. Add your streaming add-on placeholder products as Optional (Required = false, Default = false).
4
Run Validate Product Definition on this bundle. Confirm zero errors.
5
Open the Comuniqa Go! (Comuniqa Vida Digital) bundle โ†’ Structure tab โ†’ Subscriptions group โ†’ Add Product โ†’ search for the Vida Digital Pass and add it as Optional, Default = false, Sequence = 20.
6
Re-run Validate Product Definition on the parent bundle after adding the Vida Digital Pass. Confirm still zero errors.
โœ… Checkpoint 5 โ€” Before Proceeding to Task 6
  • Vida Digital Pass bundle created with Product Code PR00012109
  • Base Benefits group: exactly 2 required components, both default
  • Additional Benefits group: Min=1, Max=2 with optional add-ons
  • Vida Digital Pass added as optional component in parent bundle's Subscriptions group
  • Both bundles pass Validate Product Definition with zero errors
06 Task ยท CML

Task 6 โ€” Build Qualification Rules (CML-First)

โšก CML Approach โ€” Why Not BRE Here

Qualification rules in ARM can be implemented via the Business Rules Engine (BRE) or Contextual Mapping Language (CML). We use CML because it provides a cleaner context mapping pattern, is more readable for complex multi-condition rules, separates input context from rule logic more cleanly, and is the recommended approach for all advanced ARM implementations. BRE qualification procedures are still functional but are considered the legacy path.

6
Task 6a โ€” Context Setup
Extend the Product Discovery Context Definition
To Do
ObjectiveExtend the ProductDiscoveryContext to include the customer data fields that qualification rules will read: customer age, outstanding balance, active line count, and credit score.
โœ“ Expected Outcome
  • Custom context definition extending ProductDiscoveryContext
  • Input fields mapped: customerAge (Number), outstandingAmount (Currency), activeLines (Number), creditScore (Number)
  • Each field mapped to the correct source object/field on the Account or Contact
  • Context saved and activated
1
Navigate to Setup โ†’ Context Service โ†’ Context Definitions. Find ProductDiscoveryContext. Click New Version or extend it via a custom definition depending on your org configuration.
2
Add Node: customerAge, Data Type = Number. Map the source to Account.PersonBirthdate โ†’ configure a formula to calculate age = today - birthdate in years.
3
Add Node: outstandingAmount, Data Type = Currency. Map to Account.Outstanding_Balance__c (or equivalent custom field in your training org).
4
Add Node: activeLines, Data Type = Number. Map to a rollup or formula field representing active subscriptions count on the Account.
5
Add Node: creditScore, Data Type = Number. Map to Account.Credit_Score__c (simulated field in your training org).
6
Save and Activate the context definition. Unactivated context definitions are not available to qualification procedures.
6
Task 6b โ€” Qualification Rules
Build 3 Qualification Rules via CML
To Do
ObjectiveBuild the following three qualification rules using CML Expression Sets with Decision Tables. Assign the procedure to Product Discovery Settings on completion.

Rule 1 โ€” Customer Age Validation

Logic Retrieve customerAge from context. If customerAge > 18 โ†’ Fail (product hidden). Else โ†’ Pass. Applied to: Comuniqa Go! Youth product only.

Rule 2 โ€” Outstanding Amount Check

Logic Retrieve outstandingAmount from context. If outstandingAmount > 0 โ†’ Fail (block all new subscriptions). Else โ†’ Pass. Applied to: all Comuniqa mobile plan products.

Rule 3 โ€” Credit Score Check

Logic Retrieve creditScore from context. Look up minCreditScore = 600 from Decision Table. If creditScore < minCreditScore โ†’ Fail. Else โ†’ Pass. Applied to: Term-Defined (contract) selling model options.
โœ“ Expected Outcome
  • 3 CML Expression Sets created and activated โ€” one per rule
  • Each Expression Set has an associated Decision Table with correct criteria rows
  • Decision Tables are refreshed (data populated) before activation
  • Qualification Procedure created in Product Discovery Settings referencing all 3 rules
  • Test: In Browse Catalogs with a customer aged 20 โ€” Comuniqa Go! Youth does NOT appear
  • Test: In Browse Catalogs with outstandingAmount = 500 โ€” all plan products are blocked
1
Navigate to Setup โ†’ Expression Sets โ†’ New. Name = CQ-Qual-AgeValidation. Set Context Definition = your extended ProductDiscoveryContext. Type = Qualification.
2
Inside the Expression Set, add a Decision Table step. Create a new Decision Table: input column = customerAge (Number), output column = isQualified (Boolean). Add row: if customerAge <= 18 โ†’ isQualified = true. All other rows โ†’ isQualified = false.
3
Refresh the Decision Table data โ€” this is mandatory after any row additions. Without refresh, the table returns no results at runtime.
4
Add an output step: map isQualified to the Qualification output node. Activate the Expression Set.
5
Repeat steps 1โ€“4 for Rule 2 (Outstanding Amount) and Rule 3 (Credit Score). For Rule 3, the Decision Table has a lookup: input = creditScore, output = pass/fail based on threshold 600.
6
Navigate to Product Discovery Settings โ†’ Qualification Procedure โ†’ select your combined procedure (or create a Procedure Plan referencing all 3 expression sets in sequence).
7
Assign Rule 1 specifically to the Comuniqa Go! Youth product record (Product Qualification related list). Rules 2 and 3 are applied globally via the Procedure Plan.
โš  Common Error: Decision Table not refreshed after data entry

Decision Tables must be explicitly refreshed after any row additions or updates. An unrefreshed table returns no results at runtime, causing ALL customers to pass (or fail) the rule regardless of their data.

โš  Common Error: Expression Set not Activated

Draft Expression Sets are invisible to the Product Discovery runtime. Always check that each Expression Set shows Status = Active before testing in Browse Catalogs.

โœ… Checkpoint 6 โ€” Final Task Checkpoint
  • Context definition extended with 4 input fields and activated
  • 3 CML Expression Sets created, all in Active status
  • All Decision Tables have been refreshed after data entry
  • Qualification Procedure Plan assigned in Product Discovery Settings
  • Browse Catalogs test: customer age 20 โ†’ Comuniqa Go! Youth hidden โœ“
  • Browse Catalogs test: outstandingAmount 500 โ†’ mobile plan products blocked โœ“
  • Browse Catalogs test: credit score 700 โ†’ plans visible โœ“
โœฆ Final

Final Lab Validation Checklist

Before calling this lab complete, work through every item below. This simulates the pre-go-live validation a solution architect would perform on a real Comuniqa implementation.

Catalog โ€” B2C Mรณvil Argentina is Active with 4 categories in correct sort order
Attributes โ€” 18 attribute definitions, correct types, ReadOnly flags set, Contract Term is Price Impacting
Classifications โ€” 5 classifications in Active status, each with correct attribute assignments
Simple Products โ€” 11 products Active, all Assetizable, correct classifications, sub-components flagged Sell Only With Others
Bundle โ€” Comuniqa Go! (Vida Digital) โ€” Passes Validate Product Definition with zero errors
Bundle โ€” Vida Digital Pass โ€” Passes Validate Product Definition. Min=1/Max=2 on Additional Benefits group
Selling Models โ€” Comuniqa Go! has 3 selling model options. Both Term-Defined have Auto-Renew = true
CML Rules โ€” 3 Expression Sets Active, Decision Tables refreshed, Procedure Plan assigned
Browse Catalogs test โ€” Comuniqa Go! (Vida Digital) appears under Mobile Plans, SIM and Phone Number auto-add on selection
Browse Catalogs test โ€” Partner VAS group only allows 1 selection (MoviMundo Plus+ OR Basic+, not both)
Qualification test โ€” Customer with age 20 cannot see Comuniqa Go! Youth
Qualification test โ€” Customer with outstanding balance is blocked from new subscriptions
โœ… Lab Complete If all 12 items are checked, you have successfully built Comuniqa's full B2C product catalog in Salesforce Revenue Cloud Advanced. You are now ready for Lesson 2 โ€” Pricing Engine, where you will build the pricing procedures that read this catalog.
โšก CML Recap โ€” What You Used CML For In this lab, CML was used for all 3 qualification rules (Age Validation, Outstanding Amount, Credit Score). These rules read from the extended ProductDiscoveryContext and evaluate conditions via Decision Tables. This is the CML pattern you will use in all advanced lessons โ€” the same approach applies to pricing procedures (Lesson 2), configurator rules (Lesson 4), and DRO orchestration rules (Lesson 7).