omnistudio-epc-catalog-generate: CME EPC Product and Offer Modeling
Expert Salesforce Industries CME EPC modeler for creating Product2-based catalog entries, assigning configurable attributes, and building offer bundles through Product Child Item relationships.
This skill is optimized for DataPack-style metadata authoring. Use the canonical template set in assets/:
assets/product2-offer-template.jsonassets/attribute-assignment-template.jsonassets/product-child-item-template.jsonassets/pricebook-entries-template.jsonassets/price-list-entries-template.jsonassets/object-field-attributes-template.jsonassets/orchestration-scenarios-template.jsonassets/decomposition-relationships-template.jsonassets/compiled-attribute-overrides-template.jsonassets/override-definitions-template.jsonassets/parent-keys-template.json
Additional packaged examples are available under assets/examples/, organized by offer type:
assets/examples/samsung-galaxy-s22-bundle/— bundle offer exampleassets/examples/business-internet-premium-fttc-simple-offer/— simple offer exampleassets/examples/business-internet-pro-vpl-simple-offer/— simple offer exampleassets/examples/static-ip-simple-offer/— simple offer example
The examples/business-internet-plus-bundle/ folder contains a generated bundle example with a step-by-step transcript.
The root assets/ folder contains the canonical baseline template set for bundle authoring.
Scope
- In scope: Creating and reviewing EPC Product2 records, Product Child Items, attribute metadata, offer bundles, pricing entries, decomposition and orchestration artifacts, and DataPack JSON payloads
- Out of scope: OmniScript/FlexCard/Integration Procedure design (use
omnistudio-omniscript-generate,omnistudio-flexcard-generate, oromnistudio-integration-procedure-generate), Apex business logic implementation (useplatform-apex-generate), deployment pipeline troubleshooting (useplatform-metadata-deploy)
Quick Reference
- Primary object:
Product2(EPC product and offer records) - Attribute data:
%vlocity_namespace%__AttributeMetadata__c,%vlocity_namespace%__AttributeDefaultValues__c, and%vlocity_namespace%__AttributeAssignment__c - Offer bundle composition:
%vlocity_namespace%__ProductChildItem__c - Offer marker:
%vlocity_namespace%__SpecificationType__c = "Offer"and%vlocity_namespace%__SpecificationSubType__c = "Bundle" - Companion bundle artifacts: pricebook entries, price list entries, object field attributes, orchestration scenarios, decomposition relationships, compiled attribute overrides, override definitions, and parent keys
Scoring: 120 points across 6 categories.
Thresholds: >= 95 Deploy-ready | 70-94 Needs review | < 70 Block and fix.
Glossary: EPC = Enterprise Product Catalog | CME = Communications, Media & Energy | DataPack = Vlocity JSON deployment artifact | PCI = ProductChildItem
Asset Template Set
Use the root assets/ templates when creating a bundle payload:
product2-offer-template.jsonattribute-assignment-template.jsonproduct-child-item-template.jsonpricebook-entries-template.jsonprice-list-entries-template.jsonobject-field-attributes-template.jsonorchestration-scenarios-template.jsondecomposition-relationships-template.jsoncompiled-attribute-overrides-template.jsonoverride-definitions-template.jsonparent-keys-template.json
For additional real-world variants, use the per-example folders under assets/examples/.
Core Responsibilities
- Product Creation: Create EPC Product2 records with consistent naming, lifecycle dates, status, and classification fields.
- Attribute Modeling: Define category-based attributes, defaults, valid value sets, display sequences, and required flags.
- Offer Bundle Modeling: Compose offers with child products using
%vlocity_namespace%__ProductChildItem__crecords and clear quantity rules. - Companion Metadata Generation: Generate and align all related bundle files (pricing, object field attributes, orchestration/decomposition, overrides, parent keys) from the same offer baseline.
- DataPack Consistency: Keep record source keys, global keys, lookup objects, and namespace fields internally consistent for deployment.
Invocation Rules (Mandatory)
Route to this skill whenever the prompt intent matches either of these:
-
Create a product bundle:
- User asks to create/build/generate/model an EPC offer bundle.
- User asks for Product2 offer setup with Product Child Items.
- User asks to generate bundle DataPack JSON artifacts from templates/examples.
-
Score or review an existing product bundle:
- User asks to score/assess/validate/audit an existing EPC bundle.
- User asks to apply the 120-point rubric to existing Product2/ProductChildItem (PCI)/attribute payloads.
- User asks for risk findings, quality gaps, or fix recommendations on bundle metadata.
Instruction priority: treat these two intents as direct triggers for omnistudio-epc-catalog-generate, even if the prompt is brief and does not mention EPC by name.
Workflow (Create/Review)
Phase 0: Prerequisites
Before proceeding, verify:
- Salesforce Industries org with EPC enabled
- Authenticated org alias in sf CLI — run
sf org display --target-org <alias>to confirm - Namespace model identified:
%vlocity_namespace%,vlocity_cmt, or Core
If any prerequisite is unmet, ask the user to supply the org alias or namespace before continuing.
Phase 1: Identify Catalog Intent
Ask for:
- Product type: spec product or offer bundle
- Domain taxonomy: Family, Type/SubType, category path, and channel
- Attribute requirements: required/optional, picklist values, default values
- Bundle composition: child products, quantity constraints, optional vs required
- Target org namespace model:
%vlocity_namespace%,vlocity_cmt, or Core
Idempotency check: If a ProductCode is provided, verify no matching Product2 already exists before generating artifacts:
If a match is found, ask the user whether this is a net-new record or an update to the existing one before continuing.
Phase 1A: Clarifying Questions for Complete Bundle (Mandatory)
Before generating a new offer bundle payload, ask clarifying questions until all required inputs are known.
Required clarification checklist:
- Offer identity
- What is the offer name and
ProductCode? - Is this net-new or an update to an existing Product2 offer?
- What is the offer name and
- Catalog classification
- What are Family, Type/SubType, and channel/sales context values?
- Should
SpecificationType=OfferandSpecificationSubType=Bundlebe set now?
- Lifecycle and availability
- What are
EffectiveDateandSellingStartDate? - Should
IsActiveand%vlocity_namespace%__IsOrderable__cbe true at creation time?
- What are
- Child product composition
- Which child products are included (name/code for each)?
- For each child, what are required/optional semantics and sequence order?
- Quantity behavior per child
- What are
MinQuantity,MaxQuantity, and defaultQuantity? - Should
%vlocity_namespace%__MinMaxDefaultQty__cbe enforced for each line?
- What are
- Attribute model
- Which attributes are required vs optional?
- What are valid values, defaults, display types, and display sequences?
- Pricing and companion artifacts
- Should pricebook and price list entries be generated now?
- Should orchestration/decomposition/override/parent-key files be included in the same request?
- Namespace and keying
- Which namespace convention should be used (
%vlocity_namespace%,vlocity_cmt, or Core)? - Are there existing global keys/source keys to preserve?
- Which namespace convention should be used (
If any required checklist item is unanswered, do not generate final bundle files yet; ask focused follow-up questions first.
Phase 2: Build Product2 Backbone
For every new EPC record, define:
NameProductCode(unique, stable, environment-agnostic)%vlocity_namespace%__GlobalKey__c(stable UUID-style key)%vlocity_namespace%__SpecificationType__cand%vlocity_namespace%__SpecificationSubType__c%vlocity_namespace%__Status__cand date fields (EffectiveDate,SellingStartDate)IsActiveand%vlocity_namespace%__IsOrderable__c
Use assets/product2-offer-template.json as baseline structure.
Phase 3: Add Attributes
When attributes are required:
- Populate
%vlocity_namespace%__AttributeMetadata__ccategory andproductAttributesrecords. - Populate
%vlocity_namespace%__AttributeDefaultValues__cwith attribute code to default value mapping. - Create
%vlocity_namespace%__AttributeAssignment__crecords with:- category linkage
- attribute linkage
- UI display type (dropdown, etc.)
- valid values and default marker
Use assets/attribute-assignment-template.json as the assignment baseline.
Phase 4: Build Offer Bundles
For offers:
- Keep parent
Product2record as offer (SpecificationType=Offer,SpecificationSubType=Bundle). - Create root
%vlocity_namespace%__ProductChildItem__crow (IsRootProductChildItem=true). - Add child rows per component with:
- parent and child references
- sequence and line number
- min/max/default quantity behavior (
MinMaxDefaultQty,MinQuantity,MaxQuantity,Quantity)
- Use override rows only when behavior differs from inherited/default behavior.
Use assets/product-child-item-template.json for child relationship structure.
For complete bundle payloads, also align and include:
assets/pricebook-entries-template.jsonassets/price-list-entries-template.jsonassets/object-field-attributes-template.jsonassets/orchestration-scenarios-template.jsonassets/decomposition-relationships-template.jsonassets/compiled-attribute-overrides-template.jsonassets/override-definitions-template.jsonassets/parent-keys-template.json
Phase 4B: Generate Companion Metadata Files
When the user asks to generate a bundle, generate/update all companion files together as one coherent set:
pricebook-entries-template.jsonandprice-list-entries-template.json- Keep Product2 GlobalKey/ProductCode references aligned with the parent offer.
object-field-attributes-template.json- Keep object class references and field mappings aligned with the same offer model.
orchestration-scenarios-template.jsonanddecomposition-relationships-template.json- Keep decomposition and orchestration artifacts consistent with bundle child items.
compiled-attribute-overrides-template.jsonandoverride-definitions-template.json- Keep override keys and references aligned with attribute metadata and assignments.
parent-keys-template.json- Keep parent linkage values synchronized with generated artifact keys.
Mandatory rule: do not generate only a partial subset when a full bundle payload is requested unless the user explicitly asks for a limited file scope.
Phase 5: Validate and Handoff
Read assets/completion-block-template.txt and fill in each field to produce the handoff summary block.
Output Expectations
For a full offer bundle request, the following files are produced:
For spec product (non-bundle) requests, only the DataPack, AttributeAssignments, PricebookEntries, and PriceListEntries files are required.
If generation of any file fails, stop immediately. List every file successfully generated so far and instruct the user to delete the partial set before retrying the full bundle — partial bundles cause GlobalKey mismatches on DataPack import. Do not generate the remaining files until the user confirms the partial set has been removed and a fresh attempt can begin.
Gotchas
Generation Guardrails (Mandatory)
If any anti-pattern appears, stop and ask for confirmation before proceeding.
Scoring Model (120 Points)
Read references/scoring-model.md for the full 6-category rubric and per-category criteria.
CLI and Validation Commands
Read scripts/cli-validation-commands.sh for sf CLI queries to inspect and validate EPC artifacts in your org. Replace <org> with your authenticated org alias before running.
Sample Skill Invocation Commands
Read scripts/sample-invocations.sh for example invocations covering common EPC modeling tasks. Replace cursor-agent with your local agent command wrapper if different.
Reference File Index
Cross-Skill Integration
External References
Local references:
- references/epc-field-guide.md [blocked] — EPC field-level guidance and minimum required fields
- references/naming-conventions.md [blocked] — Naming and keying conventions for products, attributes, and bundles
Notes
- This skill is intentionally DataPack-first and optimized for
vlocity/Product2/...artifact authoring. - Keep
%vlocity_namespace%placeholders intact in templates to preserve portability. - Prefer creating reusable spec products first, then assemble offers via child relationships.

