Product Catalog
Management (PCM)
A structured, architect-level deep-dive into the PCM module of Agentforce Revenue Management — grounded in Comuniqa's actual product model. Covers catalog design, attribute architecture, product classification, bundle structure, cardinality, selling models, qualification rules, and how it all feeds downstream.
Foundational Definitions
PCM is the master data layer for everything sold in Agentforce Revenue Management. Before any quote is created, any price is calculated, or any order is fulfilled, the platform reads from the product catalog. Understanding PCM vocabulary is essential for every downstream design decision.
Catalog
The top-level container for products. Comuniqa would have at least one catalog (e.g., "B2C Móvil") organized into categories. A catalog has an effective start and end date — it is time-bounded.
Category
A hierarchical grouping within a catalog. Up to 5 levels deep. Categories organize products for browsing in Product Discovery. Comuniqa examples: "Mobile Plans", "Add-On Services", "Partner Content".
Product Classification
A reusable attribute template. Define attributes once on a classification; all products based on it inherit those attributes automatically. Acts as a "product type" template.
Attribute Definition
A single characteristic of a product (text, picklist, number, date, checkbox). Examples: "Contract Term", "SIM Format", "Data Allowance". Defined once, reused across many products via classifications.
Simple Product
A standalone product with no child dependencies. Can be static or configurable. Comuniqa examples: SIM Card, Phone Number, MoviMundo Plus+.
Bundle Product
A group of products sold together as one unit. Contains product groups and child components. Comuniqa example: "Comuniqa Go! (Comuniqa Vida Digital)".
Product Group
Mandatory structural container inside a configurable bundle. Groups organize child components and define cardinality (min/max selection). Comuniqa groups: "Base Mobile Plan", "Value-Added Services".
Cardinality
Rules defining how many components a user can select from a group (group cardinality) and how many instances of a product they can add (local cardinality).
Product Selling Model
Defines HOW a product is sold: One Time, Term-Defined (subscription with end date), or Evergreen (subscription until cancelled).
Qualification Rule
A BRE-powered rule that determines whether a product is eligible for sale to a specific customer. Runs BEFORE product selection.
Product Discovery
The runtime browsing experience — the "Browse Catalogs" flow that sales agents use to find and add products to a quote or order. Reads from PCM, applies qualification rules, shows prices from the Pricing engine.
Specification Type
Labels products as Commercial (customer-facing) or Technical (internal/fulfillment). Only Commercial products appear in Product Discovery.
How These Concepts Relate
Detailed Functional Explanation
What PCM Does — Conceptually
PCM is not just a product list. It is an operational engine that every downstream Revenue Cloud module reads from. The configurator reads bundle structure. The pricing engine reads product attributes and selling models. The order management engine reads assetization flags and fulfillment decomposition scope. The billing engine reads selling model billing terms. A poorly designed catalog produces cascading errors in every downstream system.
Comuniqa Product Hierarchy
How PCM Is Used Across the Revenue Lifecycle
Product Discovery reads PCM to populate Browse Catalogs:
- Agent opens a quote for a Comuniqa customer → clicks "Browse Catalogs"
- PCM catalog "B2C Móvil Argentina" loads. Qualification procedures run: customer age ≤18? Active lines < max? Credit check passed?
- Qualified products appear. Agent selects "Comuniqa Go!" — bundle structure is read from PCM: SIM and Phone Number auto-added (required, default), optional groups displayed
- Agent selects MoviMundo Plus+ from Partner VAS group. Configurator (reading PCM cardinality rules) enforces that MoviMundo Basic+ cannot also be selected
- Pricing engine reads product attribute values (Contract Term = 12 months) and selling model (Term-Defined) to calculate the ARS 51,750 net price
Order activation reads PCM for fulfillment decomposition:
- Order is submitted. DRO (Dynamic Revenue Orchestrator) reads the PCM product records for decomposition scope
- SIM Card: Is Assetizable = true → DRO creates an asset record. Fulfillment task: provision ICCID from inventory system
- Phone Number: Is Assetizable = true → DRO creates an asset. Fulfillment task: allocate number from number management platform
- Comuniqa Go! (bundle root): Is Assetizable = true → creates parent asset. Child assets for each component inherit assetization from root
- Technical products (network provisioning codes, routing IDs) are read from the technical catalog — hidden from the commercial order view
Amendment reads PCM to understand what can change:
- Customer wants to upgrade from MoviMundo Basic+ to MoviMundo Plus+. Agent opens amendment flow
- PCM bundle structure is re-read to understand the current configuration context and valid options
- Cardinality rules confirm: exactly 1 partner VAS can be selected. Removing Basic+ and adding Plus+ is valid
- PCM product record must be ACTIVE for amendments to proceed. Discontinued products block amendment selection
- Selling model on the amended line is re-read to calculate proration for mid-cycle amendment
Agentforce quote agent reads PCM headlessly via API:
- Agent types: "Quote Comuniqa Go! with MoviMundo Plus+ for a youth customer, 12-month contract, eSIM"
- Agentforce calls the Product Details API → reads PCM product record for "Comuniqa Go!", its bundle structure, and valid selling models
- Attribute values are set: SIM Format = "eSIM", Contract Term = "12 Months" — read from PCM attribute definitions and picklist values
- Qualification procedure runs via API: age check passes, credit check passes → Comuniqa Go! is qualified
- PCM caching is critical: the Product Details API uses a cache layer so the agent gets near-instant product data
Comuniqa Attribute Architecture
| Attribute | Product | Type | Category | Who Populates |
|---|---|---|---|---|
| Voice Calls Included | Comuniqa Go! | Text | Descriptive | Catalog admin (static) |
| Contract Term | Comuniqa Go! | Picklist | Configuration | Agent at order time |
| SIM Card Format | SIM Card | Picklist | Configuration | Agent at order time |
| ICCID | SIM Card | Text | Fulfillment-Populated | Inventory system post-activation |
| Phone Number | Phone Number | Text | Fulfillment-Populated | Number management system |
| Sharing Mode | Family Go! Bundle | Picklist | Configuration | Agent (Immediate / Monthly) |
| Watch Device Type | Go! Two | Picklist | Configuration | Agent (Apple / Samsung) |
| Watch IMEI | Go! Two | Text | Fulfillment-Populated | Device pairing system |
| GoogleEmail | YouTube Mundo | Text | Configuration | Customer-provided |
| ActivationStatus | YouTube Mundo / Netflix | Text | Fulfillment-Populated | Partner API callback |
| Port Date | Phone Number Portability | Date | Operational | Portability system |
| Authorization Code | Phone Number Portability | Text | Configuration | Customer provides |
PCM Building Blocks — Setup Sequence & Dependency Chain
PCM has a strict build order. Each layer depends on the one above it. Understanding this dependency chain prevents the most common implementation mistakes.
What it is: A Catalog is the highest-level organisational container for all products. You must create at least one catalog before creating categories or assigning products.
| Field | Decision | Comuniqa |
|---|---|---|
| Name | Should reflect the business domain or channel | "B2C Móvil Argentina" |
| Catalog Code | Unique code — used in API references | "CQ-B2C-MOB" |
| Type | Sales (products for purchase) or Service Process | Sales |
| Effective Start / End Date | Catalogs are time-bounded. Leave end date blank for open-ended catalogs. | Start: go-live date. End: blank. |
What it is: Categories are hierarchical groupings within a catalog. Up to 5 levels deep. A product can be assigned to more than one category.
| Field | Decision | Comuniqa |
|---|---|---|
| Name & Code | Short, clear names. Code used in APIs. | "Mobile Plans", "Add-On Services", "Partner Content", "Subscriptions" |
| Parent Category | Leave blank for top-level. Set for subcategories. | "Streaming Services" as a subcategory under "Add-On Services" |
| Sort Order | Controls display order in Browse Catalogs. Plan before go-live. | Mobile Plans = −1 (shows first), Add-Ons = 0, Partner Content = 1 |
What it is: A Product Classification is a reusable attribute template. Products based on a classification automatically inherit all its attributes. It is the primary mechanism for assigning attributes to products.
| Field | Decision | Comuniqa |
|---|---|---|
| Name & Code | Name after the product type it represents, not a specific product. | "Mobile Plan Attributes", "Watch Service Attributes", "Streaming Pass Attributes" |
| Status | Draft → Active → Inactive. Design and test in Draft before activating. | All Comuniqa classifications start in Draft; activated only after UAT. |
| Sub-classifications | Up to 3 levels. Sub-classifications inherit all parent attributes automatically. | Parent: "Mobile Plan Attributes" → Sub: "Youth Plan Attributes" (adds Age Verification flag) |
What it is: A Bundle Product groups multiple products sold together. In a configurable bundle, agents and customers choose which optional components to include.
| Decision Point | Rule | Comuniqa Application |
|---|---|---|
| Product Groups | Mandatory in configurable bundles. Each group has its own cardinality. | Groups: "SIM", "Phone Number & Portability", "Value-Added Services", "Partner Value-Added Services" |
| Required vs Optional | Required = solid line, must always be included. Optional = dashed line. | SIM = Required + Default. MoviMundo Plus+/Basic+ = Optional, not default. |
| Group Cardinality (Min/Max) | Controls how many distinct child products a customer can select from a group. Max=1 enforces mutual exclusivity. | Partner VAS group: Min=0, Max=1 — only ONE of MoviMundo Basic+, Plus+ can be selected. |
| Local Cardinality | Controls how many instances of a specific component can be added. | Comuniqa Go! Two: Min=0, Max=1 — at most one watch service per line. |
What it is: A Product Selling Model defines how a product is sold: One Time, Term-Defined (subscription with end date), or Evergreen (until cancelled). Selling models directly govern billing cadence, proration behaviour, and renewal eligibility.
| Type | When to use | Comuniqa Products |
|---|---|---|
| One Time | Single charge, no recurring billing. | Phone Number Portability (one-time port fee); device purchases. |
| Term-Defined | Subscription with a defined end date. Enables auto-renewal flag. | Comuniqa Go! with 12-month or 24-month contract. |
| Evergreen | Subscription with no end date — continues until explicitly cancelled. | Comuniqa Go! no contract (billed monthly until cancelled). MoviMundo Plus+. |
What it is: Qualification Rules determine which products are eligible for a specific customer at runtime — before any product selection, configuration, or pricing occurs.
| Type | Logic | Comuniqa Example |
|---|---|---|
| Qualification | Product IS qualified when criteria ARE met. | Comuniqa Go! Youth: qualified ONLY when customer age ≤ 18. |
| Disqualification | Product IS disqualified when criteria ARE met. | Product hidden for accounts with outstanding debt balance > 0. |
- Customer Age Validation: age > 18 → Fail (blocks Comuniqa Go! Youth)
- Outstanding Amount: outstandingAmount > 0 → Fail
- Max Active Mobile Lines: activeLines ≥ maxLines → Fail
- Credit Check: creditScore < minCreditScore → Fail
- Vida Digital Add-On Validation: Count(mandatory) ≠ 2 OR Count(optional) ≠ 1 → Fail
- YouTube Mundo Google Account Validation: GoogleEmail null or invalid → Fail
Capabilities Breakdown
Core Capabilities
Advanced / Extended Capabilities
Cardinality Design — Comuniqa Vida Digital Pass
| Level | Cardinality Type | Min | Max | Comuniqa Design |
|---|---|---|---|---|
| Additional Benefits Group | Group Cardinality | 1 | 2 | Customer must pick at least 1, at most 2 optional components |
| Each Optional Component | Local Cardinality | 0 | 1 | Each individual add-on: optional, not default, max 1 instance |
| Base Benefits Group (Mi Coto + Club Día) | Group + Local | 2 | 2 | Both required and default — customer cannot deselect them |
Limitations & Constraints
Documented Platform Limits
Architectural Constraints
Common Implementation Challenges
⚠ Real-World Mistakes — Comuniqa Context
- Technical Attributes on Commercial Products: The team adds ICCID, provisioning codes, and network routing IDs to the Comuniqa Go! commercial product "for convenience." The commercial catalog becomes cluttered, agents see irrelevant fields, and the Product Discovery UX degrades. Rule: technical attributes belong on Technical specification type products only.
- Skipping Product Classifications: Products are built by assigning attributes directly. When 20 mobile plans need the same "Contract Term" attribute updated, it must be changed on each product individually. Always use classifications as the primary attribute assignment mechanism.
- Wrong Cardinality on Additional Benefits Group: Configured with Min=0, Max=5 instead of Min=1, Max=2. Customers can now subscribe to all 5 optional add-ons, and some choose 0 (violating bundle completeness). Cardinality must be UAT-tested with all boundary conditions before go-live.
- Bundle Root Is Not Assetizable: Team deselects "Is Assetizable" on the bundle root. DRO cannot create a parent asset, breaking the customer's account view and amendment flows. Is Assetizable on the root product applies to ALL child components in the bundle.
- Mutual Exclusivity Not Enforced in PCM: Team assumes the pricing engine will handle the MoviMundo Plus+ / Basic+ mutual exclusivity. The correct design is a Configurator compatibility rule reading from PCM group cardinality (Partner VAS group: Max=1). PCM defines the structure; the Configurator enforces it.
- No Effective Dates on Products: Comuniqa launches a promotional plan without setting Discontinued Date. When the promotion ends, agents continue adding the product to new orders. Availability Date and Discontinued Date must be part of every product launch governance process.
- Catalog Not Indexed After Bulk Product Import: Team imports 50 new products via CSV. Agents browse the catalog and see stale data — new products don't appear. After bulk changes, a partial or full index rebuild is required.
- Sub-classification Not Used for Youth vs Adult Plans: Two entirely separate classifications are created, duplicating 8 shared attributes. When shared attributes need updating, both classifications must be modified. Sub-classifications exist precisely to prevent this.
Downstream Impact — What a Bad Catalog Design Breaks
| PCM Design Error | Downstream Impact |
|---|---|
| Wrong cardinality on add-on group | Configurator allows invalid combinations → invalid orders → fulfillment failures → billing errors |
| Missing selling model assignment | Pricing engine cannot calculate subscription charges → quote shows zero price → billing generates no schedules |
| Is Assetizable = false on bundle root | DRO cannot create asset hierarchy → amendments and renewals break for all customers on that product |
| Technical attributes on commercial product | Agents accidentally modify provisioning codes → network activation fails → customer can't use their service |
| Product not active / discontinued date in past | Product invisible in Browse Catalogs → agents call support → conversion loss |
| Missing picklist value (e.g., "eSIM" not on SIM Format) | Agent cannot set required attribute → order blocks at validation → customer sale lost |
What This Functionality Cannot Cover
| Comuniqa Scenario | Why PCM Is NOT the Answer | Correct Engine |
|---|---|---|
| Blocking a customer aged 19+ from subscribing to Comuniqa Go! Youth | Age-based eligibility gating is a runtime qualification rule — not a PCM catalog property. | Qualification Rules (BRE + Context) |
| Enforcing that MoviMundo Plus+ and Basic+ cannot both be on the same order | PCM defines the Partner VAS group with Max=1, but enforcement at runtime is the Configurator's job. | Product Configurator (Advanced Config) |
| Calculating the 25% contract discount on Comuniqa Go! | PCM defines the "Contract Term" attribute and selling model. The discount calculation is a Pricing Procedure + Decision Table concern. | Salesforce Pricing Engine |
| Provisioning the ICCID from the inventory system | ICCID is a fulfillment-populated attribute in PCM (the slot exists). The actual provisioning is a DRO fulfillment task. | DRO + Inventory Integration |
| Generating a monthly ARS invoice for Comuniqa Go! | PCM defines the selling model. Billing schedule generation and invoice creation happen in Salesforce Billing. | Salesforce Billing |
| Storing the customer's usage data (how many MB consumed) | PCM defines usage product attributes but does not process or store usage events. | External Usage Mediation / Rate Management |
Architectural Decision Guidance
Decision Patterns for Comuniqa
Best-Practice Design Patterns
When NOT to Use PCM Features
Knowledge Check — 10 Questions
All questions are grounded in the Comuniqa product model. Architect-level reasoning required.