3119

Fetch Offers Activity
Perform Flow
 If there is an error, Set NextScenario as
“FailureScenario”, skip CaptureResponse DF call
and log the error into aom error table
Else set NextScenario as “SuccessScenario”
Call CaptureResponse data flow by populating
selected offer sr properties with orderid picked up
from CSO request. Use TaskStatus Queue for
this.
Call GetNextBestContent Activity to invoke
GetNextBestContent DF on .Subscription
Process output from the dataflow so that offers
can be presented on the Show Next page. Refer
SR Mappings
On Failure of GetNextBestContent Data Flow
On CSO Success:
Show Default Confirmation Page
On CSO Failure
Show Default Failure Page
Uses the context populated by the CaptureCustomerResponse activity to run IdentifyBestMicrositeTreatments data flow . Processing the
output from IdentifyBestMicrositeTreatments dataflow so that offers can be presented on the landing page. Processing includes :
Validating the SRList output from IdentifyBestMicrositeTreatments . Please refer Error Scenarios
Data Token Population
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW
Input Parameter N/A
Output Parameter N/A
Error Handling Primary Catch-all Error Handler
Log to Error LogFetchOffers


3120

Get Next Best Content Activity
Error Scenarios
Uses the context populated by the SetSubscriptionContext DT and set Context("NextScenario") to run GetNextBestContent data flow .
Processing the output from GetNextBestContent dataflow so that offers can be presented on the landing page. Processing includes :
Validating the SRList output from GetNextBestContent . Please refer Error Scenarios
Data Token Population
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW
Input Parameter N/A
Output Parameter N/A
Error Handling Primary Catch-all Error Handler
Log to Error LogGetNextBestContent
If SRList Contains “PARENT” and ErrorMessage is not null
If SRList Contains "PARENT" and None of Type "CHILD"
If SRList Contains "CHILD" and None of Type "PARENT"
If SRList Contains More Than one "PARENT"
If SRList Contains "INDEPENDENT" &  also Either “PARENT” / “CHILD”
If Section Rule Name is missing in Parent / Child / Independent SRPage
If Rank is missing if Type "CHILD"Scenario


3121
Click Tracking on URLS
This describe the tracking of clicked links or images on landing page and capture interaction history with Outcome clicked.
TrackClickedURL Activity
Sample Request
T&C OR PRIVACY
 Call the CaptureResponse data flow, to store IH for Outcome clicked and for the ClickedURL
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW
Input Parameter N/A
Output Parameter N/A
Error Handling Primary Catch-all Error Handler
Log to Error LogTrackClickedUrl
1
2
3
4
5
6
7
8
9
10
11
12{
"InteractionId" : "-119585767102077807" ,
"CustomerId" : "1-HLZKOO39" ,
"Channel" : "Microsite" ,
"SubChannel" : "",
"OfferName" : "AddTablet" ,
"OfferVariant" : "OfferVariantDefault" ,
"TreatmentName" : "AddTablet_Microsite" ,
"TreatmentVariant" : "AdCons" ,
"Outcome" : "Clicked" , //App Team sets the Outcome
"ClickedURL" :"Vodafone – Our Best Ever Network | Now With 5G "  //vodafone.co.uk
}


3122
Landing pages & Exception Message Handling
Exception Message Handling
Offers Case -  Exception flow. Section MicrositeException.
Content of Offers error page is dynamically loaded from AOMConfig.
Record in AOMConfig with example ConfigValue:
ConfigType: ExceptionTemplateAttributes
ConfigName: OffersMicrosite
ConfigValue:
{
  "PageTitle": "Oops",
  "Header": "Sorry, that didn't work",
  "Body": "We're sorry, we weren't able to process your request. Please click below to check out your options",
  "ExtraLargeImageURL":
"https://cdn.vodafone.co.uk/en/assets/images/extralarge/IMG_vodafone_secondline_aom_v1.jpg",
  "LargeImageURL": "https://cdn.vodafone.co.uk/en/assets/images/large/IMG_vodafone_secondline_aom_v1.jpg",
  "MediumImageURL": "https://cdn.vodafone.co.uk/en/assets/images/medium/IMG_vodafone_secondline_aom_v1.jpg",
  "ButtonText": "Explore My Options",
  "ButtonURL": "https://www.vodafone.co.uk/mobile/extras"
}
Property ExceptionTemplateAttributes on PegaMKT-Work-Microsite-Offers (type Value Group).
Gets ExceptionTemplateAttributes from AOMConfig
Stores attributes in Value Group ExceptionTemplateAttributes
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW
Input Parameter N/A
Output Parameter N/A
Error Handling Primary Catch-all Error Handler
Log to Error LogActivity - GetExceptionTemplateAttributes
Section configuration - Section - MicrositeException
Applies To PegaMKT-Work-Microsite-Offers Flow Action - Exception


3123

Personalised offer landing page
Section name to display will be returned in case level property TreatmentAttibutes as SectionName.
Parent Templating
Child TemplateRuleset AOMFW
This section will retrieve the attributes from AOMConfig to display
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW-UI
Attributes Attributes from AOMConfig - ExceptionTemplateAttributes
PageTitle
Header
Body
ExtraLargeImageURL
LargeImageURL
MediumImageURL
ButtonText
ButtonURL Section - MicrositeException
Section for display in Offers flow.
Needs to be able to dynamically reference Header Section Rule if it is provided
Needs to be able to dynamically reference Footer Section Rule if it is provided
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW-UI
Attributes Attributes are returned from data flow call as name value pairs in the case level property TreatmentAttributes:
HeaderSectionRule
Header
Body
ExtraLargeImageURL
LargeImageURL
MediumImageURL
FooterSectionRule  Section - SingleActionInformationPage


3124
Information Action TemplateNeeds to be able to identify whether to include Sash Text based on Availability of ImageSashText Property
Needs to be able to link into SingleActionCard
Applies To VFUK-FW-AOMFW-UI-Microsite-Offers
Ruleset AOMFW-UI
Attributes Attributes are returned from data flow call as name value pairs in the case level property TreatmentAttributes:
ImageSashText (Optional)
Header
Body
LargeImageURL
MediumImageURL
Footer  Section - SingleActionDefaultCard
Be able to support varying Action Types
ActionTemplateType Product Add On Proceeds to Modify Order Flow in Case Step Action
ActionTemplateType Redirect URL Opens relative Link in browser window
Both Actions need to be able to capture Outcome defined as part of Action through Capture Response
Applies To VFUK-FW-AOMFW-UI-Microsite-Offers
Ruleset AOMFW-UI
Attributes Attributes are returned from data flow call as name value pairs in the case level property TreatmentAttributes:
ActionType
ButtonText
RedirectURL(Optional)
Outcome  Section - SingleActionCard
Be able to support varying Action Types
ActionTemplateType Product Add On Proceeds to Modify Order Flow in Case Step Action
ActionTemplateType Redirect URL Opens relative Link in browser window
Both Actions need to be able to capture Outcome defined as part of Action through Capture Response
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW-UI
Attributes Attributes are returned from data flow call as name value pairs in the case level property TreatmentAttributes:
ActionType
ButtonText
RedirectURL(Optional
Outcome  Section - SingleActionInformation


3125

Call to GetNextBestContent following CSO( Show Next)
Template for landing page
Parent Template With ChildrenOn Click of LI Items (Links) Capture Response Against the Primary/Independent Offer/Treatment
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW-UI
Attributes Attributes are returned from data flow call as name value pairs in the case level property TreatmentAttributes:
InteractionId
TreatmentName  Section - FooterDefault
Be able to render a particular Confirmation Page based on the Content passed from the Treatment as a dedicated Scenario
Needs to be able to dynamically reference Header Section Rule if it is provided
Needs to be able to dynamically reference Footer Section Rule if it is provided
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW-UI
Attributes Attributes are returned from data flow call as name value pairs in the case level property TreatmentAttributes:
HeaderSectionRule
Header
Body
ExtraLargeImageURL
LargeImageURL
MediumImageURL
FooterSectionRule Section - NoActionInformationPage
Needs to be able to dynamically reference Header Section Rule if it is provided
For Each Child Offer Presented
Be able to Dynamically Load Section Rule of Child
Needs to be able to dynamically reference Footer Section Rule if it is provided
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW-UI
Attributes Attributes are returned from data flow call as name value pairs in the case level property TreatmentAttributes:
HeaderSectionRule
Header Section - ParentWithCardChildren


3126
TemplatingBody
ExtraLargeImageURL
LargeImageURL
MediumImageURL
BodyHeader
FooterSectionRule
On Click of the Vodafone Logo/Link Capture Response Against Primary Offer/Treatment
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW-UI
Parameters Attributes are returned from data flow call as name value pairs in the case level property TreatmentAttributes:
IdentifierLine Section - HeaderAlignRight


3127
Personalized Video


3128
Generate Video From Storyboard API (Idomoo)

Class Structure:

GenerateVideo Connect ActivityVFUK-FW-AOMFW-Int-Idomoo Top Level Class for all Idomoo API Services
VFUK-FW-AOMFW-Int-Idomoo-GV Class for all Generate
VFUK-FW-AOMFW-Int-Idomoo-Error Error Class for all Idomoo API
VFUK-FW-AOMFW-Int-Idomoo-RequestHeader Request Header Class for Generate
VFUK-FW-AOMFW-Int-Idomoo-ResponsetHeader Response Header Class for Generate
VFUK-FW-AOMFW-Int-Idomoo-GV-Link Class For Link
VFUK-FW-AOMFW-Int-Idomoo-GV-Video Class for Video
VFUK-FW-AOMFW-Int-Idomoo-GV-GIF Class for GIF
VFUK-FW-AOMFW-Int-Idomoo-GV-JPG Class for JPG
VFUK-FW-AOMFW-Int-Idomoo-GV-Audio Class for Audio
VFUK-FW-AOMFW-Int-Idomoo-GV-Accessibilty Class for Accessibility
VFUK-FW-AOMFW-Int-Idomoo-GV-Output Class for Output
VFUK-FW-AOMFW-Int-Idomoo-GV-StoryboardAPI Class for Storyboard Service
VFUK-FW-AOMFW-Int-Idomoo-GV-StoryboardAPI-Request Request Class for StroyboardAPI
VFUK-FW-AOMFW-Int-Idomoo-GV-StoryboardAPI-Response Response Class for StroyboardAPI
VFUK-FW-AOMFW-Int-Idomoo-GV-StoryboardAPI-RequestBody Request Body Class for StoryboardAPI


VFUK-FW-AOMFW-Int-Idomoo-GV-StoryboardAPI-ResponseBody Response Body Class for StoryboardAPI
VFUK-FW-AOMFW-Int-Idomoo-KeyValue Class for KeyValueClass Name Description
This activity connector activity, which will invoke the connector rule and process the response
Applies To VFUK-FW-AOMFW-Int-Idomoo-Generate-StoryboardAPI
Ruleset AOMFW-IntGenerateVideo Activity


3129

 Error Handling Includes below error handlers to catch the errors and capture the error info in the log. Primary Error handler
Service Error Handler
Connect Rest VFUK-FW-AOMFW-Int-Generate-StoryboardAPI.GenerateVideo
Activity Logic TBC(JWC Token)
Do request validation by calling VFUK-FW-AOMFW-Int-Idomoo-Generate-StroyboardAPI.RequestValidation
DataTransform .
Call GenerateVideo Connect-REST rule
Check the Response for any Errors and Process the Response for Success Response
Do the Error and Audit Logging


3130
Offer Case Changes

HandOverAction Sample Decision Data
OfferName= AddSmartWatch
OfferVariant= AddSmartWatch_Variant1
TreatmentName= AddSmartWatch_Email
TreatmentVariant= AddSmartWatch_Variant1_Email
Action=Video
ActionAttributes= {
    storyboard_id
    output_config_id
    statistic_id: [TreatmentName]
    videoFormat:hls/mp4
    redirect : true/false (Defaulted to True)
    redirectTo : idomoo/external
    redirecturl: (optional - mandatory) https://vodafone.co.uk/video?video_url=[IdomooVideoURL]
}
TemplateAttributes = {
FirstName: [FirstName]
LastName: [LastName]
DataAllowance: [DataAllowance]
}
Initialise
GetOffersMetadata Activity
After getting data from OffersMetadata dataset by OfferId, and storing metadata to OfferMetdata ValueGroup property
Check OffersMetadata(“VideoHandOverActionId“) has value and populate PegaMKT-Work-Microsite-Offers.HasHandoverAction to
true.
Populated PegaMKT-Work-Microsite-Offers.IsSeedUser property by checking OffersMetadata(“SeedUser“).
Prepare
Skip this process when IsSeedUser is true
GetCustomerDetails Activity
Skip GPSL Call when HasHandoverAction  is true.
CaptureResponse
This process need to be skipped when IsSeedUser user is true or OffersMetadata(“Channel“)  is not SMS.
Add new When condition SkipCaptureResponse


3131
New Changes
ProcessPersonalizedVideo/GeneratePersonalizedVideo Process
Skip this process HasHandoverAction is false.
ProcessPersonalizedVideo/GeneratePersonalizedVideo Activity
 This activity generates personalized video URL by calling VFUK-FW-AOMFW-Int-Generate-
StoryboardAPI.GenerateVideo(GenereateVideoFromStoryboard Service)
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW
Input
ParametersNA
Output
ParametersNA
Error
HandlingPrimary Catch-all Error Handler
No HandOverMetadata Error Handle
Redirect Error Handler
Service Error Handler
Activity
LogicBrowse the VFUK-FW-AOMFW-Data-OffersMetadata.OffersMetadata by OfferMetadata(“VideoHandOverActionId“)  and
store the metadata on PegaMKT-Work-Microsite-Offers.HandOverMetadata
Create PegaMKT-Work-Microsite-Offers.ActionAttributes a ValueGroup Property and store data into it by calling function
@AOMUtilities.AdoptJSONIntoProperty() with VideoMetadata(“ActionAttributes”) and PegaMKT-Work-Microsite-
Offers.ActionAttributes
Check ActionAttributes(“Redirect“) value,If it false, write an explicit Error code.
Call  PegaMKT-Work-Microsite-Offers.PrepareGenerateVideoRequest Helper Activity
Call  VFUK-FW-AOMFW-Int-Idommo-Generate-StoryboardAPI.GenerateVideo connector activity
Process the Response from the Connect-Rest
On API Successful response
Check video object in response
Empty Array Display existing common error page
If length is 1, use it as response
If length is>1, use first entry matches the format defined in ActionDetail
If redirectTo of ActionAttributes is Idommo, then use links->landing_page_url property from the API response as re-


directURL
If redirectTo=external, then redirecturl property as re-direct URL & by replacing data IdommoVideoURL token with
links->url property from the API response
On API Failure, Display existing common error page
On success Generation of Video URL Queue to VFUK-FW-AOMFW-Data-IdomooVideoOutcome.Save to insert the record
to db table.
 ProcessPersonalizedVideo/GeneratePersonalizedVideo Activity


3132
PreparePersonalisedVideoURL
 This activity uses response from service and prepare RedirectURL and VideoUrl based on redirect value on ActionAttributes
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW
Input
ParametersNA
Output
ParametersNA
Error
HandlingNo video Response Error Handler
Null VideoFormat Error Handler
Empty Links error handler
No Video Match Error Handler
Activity
LogicBased length of pagelist property video  of response output
If Video length is single page, select that as video
If video has no more than one page , select first page that matches format of page with VideoFormat of
ActionAttributes
IF there are no video response,throw errormessage
Check selected video page has both url and landing_page_url,else populate ErrorMessage.
Based on RedirectTo value of ActionAttributes prepare RedirectURL and VideoURL
 If RedirectTo=Idommo, then use l i n k s -> l a n d i n g _ p a g e _ u r l property from the API response as RedirectURL
If RedirectTo=external, then use RedirectURL of ActionAttributes property as RedirectURL &  by replace data
IdomooVideoURL token with l i n k s-> u r l property from the API responsePreparePersonalisedVideoURL Activity


3133
Store Idomoo Video Outcome

Class
VFUK-FW-AOMFW-Data-PersonalizedVideoAudit
DatabaseTable

Save ActivityClass VFUK-FW-AOMFW-Data-PersonalizedVideoAudit
Column Name Column Type Property Name Property Type Description Constraints
interaction_id numeric InteractionId Decimal Interaction id PK - NOT
NULL
subscription_id varchar(255) SubscriptionId Text Unique Subcription id PK - NOT
NULL
video_url varchar(1000) VideoURL Text Video URL received from
Idommo responsePK - NOT
NULL
offer_name varchar(255) OfferName Text Offer Name
offer_variant varchar(255) OfferVariant Text Offer Variant
treatment_name varchar(255) TreatmentName Text Treatment Name
treatment_variantvarchar(255) TreatmentVariant Text Treatment Variant
redirect_url varchar(1000) RedirectURL Text Complete Personalized video
URL to redirectNOT NULL
status_url varchar(1000) StatusURL Text Status of the video URL
request_timestam
ptimestamp RequestTimestamp DateTime Request Timestamp for video
generationNOT NULLTable Name personalized_video_audit
This activity take input parameters and save the record to the table
Applies To VFUK-FW-AOMFW-Data-PersonalizedVideoAudit
Ruleset AOMFW
Input
ParametersCheck belowSave Activity


3134
InputParameters
 Output
ParametersNA
Error
HandlingPrimary Catch-all Error Handler and write to Error log
Mandatory field missing Error Handler
InteractionId YES String Interaction id
SubscriptionId YES String Unique subcription id
VideoURL YES String Video URL received from Idommo
response
OfferName NO String Offer Name
OfferVariant NO String Offer Variant
TreatmentName NO String Treatment Name
TreatmentVariant NO String Treatment Variant
RedirectURL YES String Complete Personalized video URL
to redirect
StatusURL NO String Status of the video URL
RequestTimestamp Yes DateTime Request Timestamp of video
generatedInput Parameter Mandatory Data Type Description


3135
Seed Testing
Assumptions
Design Approach
Case Changes
Display
Fetch Of fers
SeedT estScenarios
SeedT est Acion Scenarios
This page describes how to seed test the Offer microsite. The journey starts when an SMS with microsite link is send to seed user. The
OffersMeta Data has SeedUser property to identify it is a seed user flow

Assumptions
The new Seedtest DF will send all SR pages related to all the scenarios.
Each scenario might have more than one SR page.
Logic will send a new SR Property, S c e n a r i o, which will determine the SR page related to a scenario. List are scenarios are listed
below:
We need to handle the below Offer scenarios:
1. Default
2. Inactive
3. Ineligible
4. Expired
And below are scenarios for only Default offer scenarios. For the remaining scenarios there will be no Action scenarios.
1. Positive
2. Negative
Design Approach
We need to call a new DF (Seedtest- TBD) to get all the SRL lists for each scenario.
Based on the user click we need to get the appropriate SR list based on new “Scenario” SR Property. CaseThen Call the existing
“ProcessOffers”activity which will process the SRList to get the hierarchy needs to be shown on Offer Screen
Case Changes
Stage Process Condition Details


3136
Display Fetch Offers
  If It is not seed user
Set OffersMetadata textvaluegroup
property into Subscription.Context
property
Set id into the Subscription.Context
Call IdentifyBestMicrositeTreatments (It
will be created by logic team) Dataflow
with Subscription page
Process output from the dataflow so that
offers can be presented on the landing
page. Refer SR Mappings
If SeedUser
Call new SeedUser( TBD) DF
Copy all SR pages into SeedUserSRList
If there is an error, go to exception flow with
error message
Seed User Layout IsSeedUser =
trueCall Scenarios Section and show scenarios
to user
When user clicks on any scenario set
Scenario value
Get SR pages from SeedUserSRList based
on Scenario and append in SRList
Process output from the SRList so that offers
can be presented on the landing page. Refer
SR Mappings
Layout  IsSeedUser =
falseCall Offers section and populate the table
from Offers page list
If user clicks accept button for an offer,
populate Outcome as Accepted and
ProductId for the selected offer in case level
property
Action Perform   IsSeedUser =
falseCall ModifyCSOOrderRequest(save as from
ModifyOrderRequestTH and remove TH
related steps) activity for the selected
ProductId and populate action code as New
in LineItems
If there is an error, Set NextScenario as
“FailureScenario”, skip CaptureResponse DF
call and log the error into aom error table
Else set NextScenario as
“SuccessScenario”
Call CaptureResponse data flow by
populating selected offer sr properties with
orderid picked up from CSO request. Use
TaskStatus Queue for this.


orderid picked up from CSO request. Use
TaskStatus Queue for this.
Call GetNextBestContent Activity to invoke
GetNextBestContent DF on .Subscription


3137

Display
Fetch Offers
Call the FetchSeedTestOffers activity when it is SeedUser
Copy all SR pages into SeedUserSRList

SeedTestScenarios
1. Show scenrios to the user
2. Get the SRList ffrom SeedUserSRList based on selected scenario
3. Process output from the SRList so that offers can be presented on the landing page.
4. In case of failures Abort the case
5. Show Offers for the selected scenario
6. In case of “Back”  set “BackedSelected” to true  and Navigate back to Show scenarios
a. else continue
7. Based on action (if any) for the selected scenario route to Fetch Action Scenario. Assumption is we get into action scenario for only
“Default” scenario.Process output from the dataflow so that
offers can be presented on the Show Next
page. Refer SR Mappings
On Failure of GetNextBestContent Data
Flow
On CSO Success:
Show Default Confirmation Page
On CSO Failure
Show Default Failure Page
Call new SeedUser( TBD) DF and copy all the SR pages into SeedUserSRList
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW
Input Parameter N/A
Output Parameter N/A
Error Handling Primary Catch-all Error Handler
No results from DF
Both log to Error LogFetchSeedTestOffers Activity


3138
8. In case of “BackedSelected” to true  and Navigate back to Show scenarios
a. else End the flow

SeedTest Acion Scenarios
1. Show Action scenarios to the user
2. In case of “Back” set “BackedSelected” to true and end the flow
a. else continue
3. Get the SRList ffrom SeedUserSRList based on selected Action scenario
4. Process output from the SRList so that offers can be presented on the landing page.
5. Show Offers for the selected action scenario
6. In case of failures Abort the case
Build the SRList for the selected Scenario and Call ProcessOffer activity to process output from the SRList so that offers can be presented
on the landing page.
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW
Input Parameter N/A
Output Parameter N/A
Error Handling Primary Catch-all Error Handler
No SR pages for the scenario
Both log to Error LogFetchSeedTestScenarios - Activity


3139

Build the SRList for the selected Action Scenario and Call ProcessOffer activity to process output from the SRList so that offers can be
presented on the landing page.
Applies To PegaMKT-Work-Microsite-Offers
Ruleset AOMFW
Input Parameter N/A
Output Parameter N/A
Error Handling Primary Catch-all Error Handler
No SR pages for the Action scenario
Both log to Error LogFetchSeedTestActionScenarios - Activity


3140
Decision Metadata for GR and GPL APIs
Activities
VFUK-AOM-Int-Services.PrepareRecommendations
VFUK-AOM-Int-Services.GetProductList
Activities
VFUK-AOM-Int-Services.PrepareRecommendations
Add a Work page from VFUK-FW-AOMFW-Work to the Pages and Classes section
Add the following set of steps as part of the loop that uses the SRList page:
Get SR.DecisionMetadataProperties and split each separated property key into a new item in the Work.TextValueList list
Loop through Work.TextValueList for each property key:
If that property key does not exist in the VFUK-AOMFW-SR class, perform error handling
Otherwise, set the current Recommendation’s LineItem’s DecisionMetadata value for the current property key to the matching
property value in the SR page (I.E. When the current Work.TextValueList item is OfferName, DecisionMetadata(“OfferName”) will
be equal to SR.OfferName)
VFUK-AOM-Int-Services.GetProductList
Add a Work page from VFUK-FW-AOMFW-Work to the Pages and Classes section
Add the following set of steps as part of the loop that uses the SRList page:
Get SR.DecisionMetadataProperties and split each separated property key into a new item in the Work.TextValueList list
Loop through Work.TextValueList for each property key:
If that property key does not exist in the VFUK-AOMFW-SR class, perform error handling
Set the current Lineitem’s DecisionMetadata value for the current property key to the matching property value in the SR page
(I.E. When the current Work.TextValueList item is OfferName, DecisionMetadata(“OfferName”) will be equal to SR.OfferName)


3141
Submit Basket Request Body Additional Attributes
Properties
AOM
VADR
Activities
VFUK-V ADR-W ork-Upgrade.SubmitBasket
Data Transforms
VFUK-AOM-Int-Services.SubmitBasketRequestV alidation
VFUK-V ADR-Int-SB-API.V alidateRequest
Properties
AOM
VADR
Activities
VFUK-VADR-Work-Upgrade.SubmitBasket
Add the following properties into the step that sets the other request body properties:
RecommendationPosition
RecommendationPriority
RecommendationPropensity
Add the following properties into the step that sets the other request body LineItem and ChildLineItem properties:
Propensity
Position
Priority
MinimumTenure
MaximumTenureRecommendationPosition VFUK-AOM-Int-SB-Request Integer
RecommendationPriority VFUK-AOM-Int-SB-Request Double
RecommendationPropensity VFUK-AOM-Int-SB-Request DoubleName Applies To Type
RecommendationPosition VFUK-VADR-Int-SB-RequestBody Integer
RecommendationPriority VFUK-VADR-Int-SB-RequestBody Double
RecommendationPropensity VFUK-VADR-Int-SB-RequestBody DoubleName Applies To Type


3142
MinimumUpfrontCost
MaximumUpfrontCost
Tenure
FixedPrice
Classification
Data Transforms
VFUK-AOM-Int-Services.SubmitBasketRequestValidation
Add validation check for mandatory RecommendationPosition property, passing and continuing with the data transform if the property is
populated, but failing and setting the error response message to an appropriate response and the status code to 400 before exiting if the
property is null or empty
VFUK-VADR-Int-SB-API.ValidateRequest
Add validation check for mandatory RecommendationPosition property, passing and continuing with the data transform if the property is
populated, but failing and setting the error response message to an appropriate response before exiting if the property is null or empty


3143
Tasker Case
Design
Implementation
Case Life Cycle
Setup
InitialiseT asker
Process
ProcessCUH
CustomerUsageHistory Cassandra Data Set
StartProcessCUHDF Activity
ProcessCUH Data Flow
CheckProcessCUHDFStatus Activity
DeleteCUH Activity
UsageHistory Decision Data Store Data Set
Process Process AggregateIH Flow & Activity
Process Aggreagte RI Flow
End
Finalise
Abort
Finalise
AOM Config
Design
The Case Ignitor for this Case type can be used to create an instance of this case by passing the CaseSubType and CaseID as a
paramater.
Setup Initialise Tasker Set case status as “Open-New”
Set case start time
Calls Initialise flow
Process Prepare Data For Process CUH Process for Getting Customer Usage History data
Start process when CaseSubType = 'CUH'
Calls ProcessCUH data flow
Check progress of data flow
Call Notify Support flow in event of errors
Call DeleteCUH activity
Process Process Aggregate IH Process for writing aggregate data to splunk
Start process when CaseSubType = “AggregateIH”
Calls ProcessAggregateIH activity which calls LogAggregateIH sub
activity
Call Notify Support flow in event of errors
Process Process Aggregate RI Start the Process when CaseSubType =”AggregateRI”
Calls ProcessAggregateIHStage Process Details


3144
Implementation
Case Life Cycle
 Call Notify Support flow in event of errors
End Finalise Update case status to ‘Resolved-Completed’
Set case end time
Calls Finalise flow
Handle any errors by invoking NotifySupport sub flow.
Abort Finalise Update case status to ‘Resolved-Completed’
Set case end time
Calls Finalise flow
Handle any errors by invoking NotifySupport sub flow.


3145
Setup
InitialiseTasker
Set case status as “Open-New”
Set case start time
Calls Initialise flow
Process
ProcessCUH

Process for Getting Customer Usage History data
Populated with Customer Usage History data for charge type = 'USAGE_CHARGE'
Applies To VFUK-FW-AOMFW-Data-SubscriptionInvoiceChargeHolding
Ruleset AOMFW-DataBase
Keys CaseId
Data to capture SubscriptionId
UsageCategoryId
UsageSubCategoryId
InvoiceDate
UsageAmount
UsageCount
OutsideBundleUsedAmount
TimeToLive
PartitionKeyCustomerUsageHistory Cassandra Data Set


3146
Start process when CaseSubType = 'CUH'
Calls ProcessCUH data flow

Check progress of data flow
Call Notify Support flow in event of errors
Call DeleteCUH activitySets .DataFlowWorkItemId from AOMConfig and calls ProcessCUH data flow
Applies To VFUK-FW-AOMFW-Work-Tasker
Ruleset AOMFW
Input Parameter N/A
Output Parameter N/A
Error Handling Primary Catch-all
Error Handler
Logs to Error LogStartProcessCUHDF Activity
Retrieves customer usage data from subs_invoice_charge_holding
Write to UsageHistory Cassandra Data Set
Applies To VFUK-FW-AOMFW-Data-SubscriptionInvoiceChargeHolding
Ruleset AOMFW
Input Parameter N/A
Output Parameter N/A
Error Handling Primary Catch-all Error Handler
Logs to Error LogProcessCUH Data Flow
Checks ProcessCUH data flow status and logs any error or diagnostic messages
Applies To VFUK-FW-AOMFW-Work-Tasker
Ruleset AOMFW
Input Parameter N/A
Output Parameter N/A
Error Handling Primary Catch-all Error Handler
Logs to Error LogCheckProcessCUHDFStatus Activity


3147

Process
Process AggregateIH Flow & Activity
Process Aggreagte RI Flow
End
Finalise
Update case status to ‘Resolved-Completed’
Set case end time
Calls Finalise flow
Handle any errors by invoking NotifySupport sub flow.Handle deletion of data from holding table - subs_invoice_charge_holding by CaseId
Applies To VFUK-FW-AOMFW-Work-Tasker
Ruleset AOMFW
Input Parameter N/A
Output Parameter N/A
Error Handling Primary Catch-all Error Handler
Logs to Error LogDeleteCUH Activity
Populated from ProcessCUH data flow
Applies To VFUK-FW-AOMFW-Data-CustomerUsageHistory
Ruleset AOMFW-DataBase
Keys SubscriptionId
UsageCategoryId
UsageSubCategoryId
InvoiceDate
Data to capture TotalUsageAmount
TotalUsageCount
OutOfBundleUsage
TimeToLiveUsageHistory Decision Data Store Data Set


3148

Abort
Finalise
Update case status to ‘Resolved-Completed’
Set case end time
Calls Finalise flow
Handle any errors by invoking NotifySupport sub flow.

AOM Config

TimeToLive CustomerUsageHistory  34190000
Case ID CUHTasker
CaseDependencies CUHTasker
CaseStatus CUHTasker
PauseCase CUHTasker FALSE
SkipCaseFinaliseEmail CUHTasker TRUE
DataFlowWorkItemId ProcessCUH DF-281726ConfigType ConfigName ConfigValue


3149
896436 - AggregateIH - New case subtype in Tasker case
New case subtype in Tasker case (AggregateIH) - new when condition IsProcessAggregateIHRunnable
New Flow : Process Aggregate IH
New class which extends from InteractionHistory class
Parent Class VFUK-FW-AOMFW-Data-InteractionHistory
PropertyName Property Type Description ConstraintsSource Inherited
TreatmentNameText Name of the Treatment NOT NULL InteractionHistory class Y
TreatmentVarian
tText Name of the Treatment
VariantNOT NULL InteractionHistory class Y
OfferName Text Name of the Offer NOT NULL InteractionHistory class Y
OfferVariant Text Name of the Offer VariantNOT NULL InteractionHistory class Y
AggregateOutco
meDateString Date extracted from
CaseStartTimeNOT NULL  N
AggregateOutco
meHourInteger Extracted hour from
CaseStartTimeNOT NULL  N
TargetChannel Text Name of the Target
ChannelNOT NULL InteractionHistory class Y
TargetSubChan
nelText Name of the Target
SubChannelNOT NULL InteractionHistory class Y
InControlGroup Boolean If it is in control Group NOT NULL InteractionHistory class Y
NTID Integer NTID NOT NULL InteractionHistory class Y
TILResponse Text Name of the TILResponseNOT NULL InteractionHistory class Y
EventType Text Name of the Event Type NOT NULL InteractionHistory class YClass Name VFUK-FW-AOMFW-Data-AggregateIH


3150
Function:SubEventType Text Name of the Sub Event
TypeNOT NULL InteractionHistory class Y
Intent Text Name of the Intent NOT NULL InteractionHistory class Y
ExecutionMode Text Name of the
ExecutionModeNOT NULL InteractionHistory class Y
Count Integer Number of columns in totalNOT NULL  N
Logs each IH Record within a specific start and end time
Applies To VFUK-FW-AOMFW-Work-Tasker
Ruleset AOMFW
Input Parameter N/A
Output Parameter N/A
Main Get the CaseStartTime and extract the date and hour from the string value
Call LogAggregatedIH activity - pass the extracted date and hour parameters to the activity
Error Handling Primary Catch-all
Error Handler
Logs to Error LogProcess Aggregate IH Activity
Logs each IH Record within a specific start and end time
Applies To VFUK-FW-AOMFW-Work-Tasker
Ruleset AOMFW
Input Parameter InputDate - String (format yyyy-mm-dd) (Mandatory)
 Hour - String (format HH) (Mandatory)
Output Parameter N/A
Main Child activity called from Process Aggregate IH activity
Set the parameters passed from ProcessAggregateIH activity for the ConnectSQL
Call ConnectSQL to get the aggregated IH from DB which will accept the date and hour values as inputs
Loop for each result and write each result from ConnectSQL into the log using CreateAuditLog activity–
should not to DB → Set SkipAuditLoggingIntoDatabase in the AOMConfig to true. (AuditLog activity
uses this to not log into the DB)
Error Handling Primary Catch-all
Error Handler
Logs to Error LogLog Aggregated IH Activity


3151
AOMConfig Update:

ConnectSQL:The function will convert String value("28-07-2022_12-42-03-604") to a date value: 2022-07-28
Parameters dateTime Input DateTime in DTF
format
Returns returns a string of date format
Throws UnsupportedOperationException This is thrown if parsing is
not supported which most
likely be due to invalid DTF
static variable in the library
definition
IllegalArgumentException Error thrown if the text to
parse is invalidString ConvertDTFToYYYYMMDD(String dateTime)

SkipAuditLoggingIntoDat
abaseProcessAggregateI
HTrue To skip logs from logging into the DB`
Case ID AggregateIHTasker Case ID of the current case run
CaseDependencies AggregateIHTaskerAggregateIHTasker Other case Dependencies in which this case should
not run if they are currently running
CaseStatus AggregateIHTasker Status of the current case run
PauseCase AggregateIHTaskerFALSE Pause Case
SkipCaseFinaliseEmail AggregateIHTaskerTRUE Skip Case Finalise EmailConfigType ConfigName ConfigValue Notes
This connect sql rules gets the aggregated IH from InteractionHistory DB which will accept start date and hour from CaseStartTime as inputs
Applies To VFUK-FW-AOMFW-Data-AggregateIH
Ruleset AOMFW-Database
Input
ParametersInputDate, Hour
Output
ParametersNA
ConnectSQLGetHourlyAggregatedIH ConnectSQL


3152
896465 - New Scheduler for AggregateIH
Cron Expression to set for 1 hour starting from 00
0 0 0 ? * * *
Config:

1
2
3
4
5
6
7
8
9
10
11
12
13
14{SQLPage:SQLDiagnostics}
select offername as ".OfferName", offervariant as ".OfferVariant", treatmentname as ".TreatmentName
cast(outcomedate as date) as ".OutcomeDateSS", extract(hour from outcomedate) as ".OutcomeHour", ta
incontrolgroup as ".InControlGroup", ntid as ".NTID", tilresponse as ".TILResponse", eventtype as "
executionmode as ".ExecutionMode", count(*) as ".Count"
from interaction_history_v
where cast(outcomedate as date) = '{ASIS: AggregateOutcomeDate}'
and extract(hour from outcomedate) = '{ASIS: AggregateOutcomeHour}'
and outcome in ('Selected','Pending')
group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15order by offername, offervariant, treatmentname, treatm
CaseIgnitor{"CaseSubType":"AggregateIH"}VFUK-FW-AOMFW-Work-Tasker 0 0 0 ? * * * FALSE TaskerActivityNa
meActivityParameters ClassName CronExpressionEnabled Type


3153
921213: How we identify Top selling MBB products
Tasker Case
Case Subtype - AggregateRI
 New when condition IsProcessAggregateRIRunnable

Flow:
Create ProcessAggregateRI flow in Process Stage with a when condition IsProcessAggregateRIRunnable.

Aggregates recommendation items and write the aggregated data into AggregateRI dataset
Applies To VFUK-FW-AOMFW-Work-Tasker
Ruleset AOMFW
Input Parameter N/A
Output Parameter N/A
Main Call ConnectSQL to get the aggregated Product count for each product from recommendation_items DB
table within last 30 days
Write the aggregated data into Aggregates dataset with TTL configuration.
Error Handling Primary Catch-all Error Handler
Logs to Error LogProcess Aggregate RI Activity


3154
Class:
Create VFUK-FW-AOMFW-Data-AggregateRI class
Create following properties in VFUK-FW-AOMFW-Data-AggregateRI class
ProductId - Text
Count - Integer
ErrorMessage - Text
WarningMessage - Text
Page - Page
Dataset:
Create Aggregates Cassandra dataset with ProductId as key
Connect SQL:
Create GetAggregatedRI in VFUK-FW-AOMFW-Data-AggregateRI class with below sql query
select productrecommendation , count(*) from recommendation_items_v riv  where outcomedate >=current_date -30 and  outcomedate
< current_date group by productrecommendation;
Scheduler Config for AggregateRI
Schedule the AggregateRI tasker case to run daily at 02:00 AM
AOM Config Updates

DataPage:
Create D_MostSoldProduct datapage on requestor level with list of ProductIds - text (comma separated) as parameterCaseIgnitor{"CaseSubType":"AggregateRI"}VFUK-FW-AOMFW-Work-
Tasker * 0 2 ? * * * FALSE TaskerActivityNa
meActivityParameters ClassName CronExpressionEnabled Type
TTL AggregateRI 86400 Time to live in seconds for AggregateRI data set
Case ID AggregateRITasker Case ID of the current case run
CaseDependencies AggregateRITaskerAggregateRITasker Other case Dependencies in which this case should
not run if they are currently running
CaseStatus AggregateRITasker Status of the current case run
PauseCase AggregateRITaskerFALSE Pause Case
SkipCaseFinaliseEmail AggregateRITaskerTRUE Skip Case Finalise EmailConfigType ConfigName ConfigValue Notes


3155
Splits the ProductIds by comma and loop through each of them to get the count from AggregateRI dataset and find the max count ProductId
in the dataset and return it.
Applies To VFUK-FW-AOMFW-Data-AggregateRI
Ruleset AOMFW
Input Parameter ProductIds
Output Parameter N/A
Main Split the comma separated ProductIds by using SplitStringByComma function.
Loop through the list of ProductIds
Check the ProductId is present in Aggregates cassandra dataset.
If yes, get the count from dataset.
Otherwise, append to WarningMessage.
Identify the max count from all the list of ProductIds.
Return max count ProductId.
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Don’t let Datapage fail in any situation, need to handle the error and write to ErrorMessage and return it.GetMostSoldProduct Activity


3156
Handle Business Logic Error In GetNBA API - 526157
GetNextBestActions Activity
On SR.ErrorMessage:
Include SR.ErrorMessage in .ErrorResponse.Error
GetNextBestActionsV2 Activity
While looping through SRList:
When SR.ErrorMessage = “No Decision”, set response status to 204 then jump to QAL. Otherwise, if SR.ErrorMessage is not empty
with any other message, throw a Business Logic Error, else continue.


3157
Calling Capture Response in Offers Setup Stage
Flow
PegaMKT -Work-Microsite-Of fers.CaptureResponse
Activity
PegaMKT -Work-Microsite-Of fers.CaptureCustomerResponse
Case Type
PegaMKT -Work-Microsite-Of fers.pyDefault
Flow
PegaMKT-Work-Microsite-Offers.CaptureResponse
Call new activity: CaptureCustomerResponse
Check if the CaptureCustomerResponse activity has populated the ErrorStackTrace property
If it did, then change stage to the Abort stage
Otherwise, continue onto the next part of the Offers case
Activity
PegaMKT-Work-Microsite-Offers.CaptureCustomerResponse
Set the case level Subscription page’s context property to be equal to the OffersMetadata text value group populated earlier in the case.
Set the Subscription context property’s value for the SubEventType key to be equal to “Clicked”
Set the Subscription context property’s value for the MetadataGUID key to be equal to the OfferId property populated by the URL
entered by the user
Call the CaptureResponse data flow, using the Subscription page as an input and outputting the results into an SRList page
If there are any failures in the data flow or if the SRList returns an error message, perform error handling
Otherwise, finish the activity
Case Type
PegaMKT-Work-Microsite-Offers.pyDefault
In the Stages tab, add CaptureResponse as a process in the Setup stage with default settings


3158
Get Product List V2 Enhancements
XCAR Population on Non V ADR Call
GetSubscriptionFromXCAR Activity
Call Logic Data Flow
Ability to Keep it as Stub Mode
AOM Config
Get Product List - VF Together Of fer Mapping:
Populate XCAR Decision Data store
XCAR Population on Non VADR Call
GetProductListV2 will query the SubscriptionXCAR data set using a new activity called GetSubscriptionFromXCAR, based on the
SubscriptionId or ServiceNumber from the request.
If SubscriptionXCAR does not have the relevant record, a new record will be created.
 This activity queries the SubscriptionXCAR data set using the input parameter called SubscriptionId. If the record does not exist this activity
will call AssembleSubscriptionXCAR dataflow to create a new record. GetSubscriptionFromXCAR returns the subscription page as the
primary page.
Applies To VFUK-FW-AOMFW-Data-Subscription
Ruleset AOMFW
Input
ParametersSubscriptionId [String]
Output
ParametersErrorStackTrace [String]
StatusCode [String]
Error
HandlingSubscription Not Found (SNF)
Activity-Set-Status (Error Handler)GetSubscriptionFromXCAR Activity


3159

Call Logic Data Flow
GetProductList data flow will be triggered and response will be mapped with the results from it.
Ability to Keep it as Stub Mode
AOM Config
A new aom config is used to enable/disable the stub response for GPL V2 API.
Get Product List - VF Together Offer Mapping:
1. Iterate through the SRList
a. Copy current page to SR Page
b. Check if SR.Offers is not empty, continue else jump to EOL
c. Iterate through list of offers
i. Map the below properties
1. CombiOfferId
2. Name
3. Category
4. SubCategory
5. Classification
6. OfferDescription
7. QualifyingCriteria
a. QualifyingCriteriaId
b. PromotionId
c. AssetIntegrationId
8. Rewards
a. ProductId
b. QualifyingCriteriaId

Populate XCAR Decision Data store
1. Create Subscription Page
2. Populate Subscription.Context parameters from the request parameters (Detail NameValue Pair)
3. Call GetServiceList activity which will call GPSL API.
4. Append Subscription Page to SubsriptionPageList
5. Call existing activity AssembleSubscriptionXCAR using below parameters and SubscriptionList Page
a. AgentDepartment - Existing Parameter - Set to “N/A“ when Channel=”Web”Stub GetProductListV2 true/false Ability to Keep it as Stub Mode
TimeToLive SingleSubscriptionXCAR 26100 Time to live as six hours (in
seconds) for
SingleSubscriptionXCAR data setConfigType ConfigName ConfigValue


3160
b. Channel=”Web” - New Parameter
c. UpgradeType = value of UPGADE_TYPE key from Detail NameValue Pair - New parameter
d. Modify the AssembleSubscriptionXCAR activity to skip the CRE call if the channel is Web.
e. Update RetentionEligibility Type of XCAR dataset to value of Subscription.Context(“UPGRADE_TYPE”) before saving data set.
6. Create new XCARSubscription page and copy resulting Subscription from AssembleSubscriptionXCAR  into this page.
7. Call GetProductList Data Flow using the XCARSubscription page.
8. When Channel=”Web”, then UPGRADE_TYPE is mandatory. So Detail name/value pair should exist with name = “UPGRADE_TYPE“.


3161
Product Cataogue Data Page & Catalogue Sync Changes

557804 AOM - Understand if the recommended tariff is part of a promotion
D_Tariff: Remove the configuration from PropertyNames
D_EligibleTariffs: Remove the configuration from PropertyNames

Note: Dependancy on 557813
557805 AOM -Update the way we identify a promo in the Pick & Mix logic
D_ServicesForTariff: Remove the configuration from PropertyNames config
Add promotion_start_dt & promotion_end_dt to PropertyNames config.
Note: Dependancy on 557813, 557812
557808 AOM -Update the way a promo discount is identified when changing a promo discount in the Edit Screen

D_DiscountsForTariff: Remove the configuration from PropertyNames
Add promotion_start_dt & promotion_end_dt to PropertyNames config.
Note: Dependancy on 557814, 557813

557811 AOM -Remove the promotion indicator from the promotion product catalogue information
1. Change in CatalogueSync API, Add promotion_start_dt, promotion_end_dt attributes.
2. Updated TariffStaging Data table and include promotion_start_dt, promotion_end_dt in mapping
3. Changes to InvokeTariffCatalogueSync API
a. Add PromotionStartDate, PromotionEndDate in Obj-Browse
b. Add in attributes for the CatalogueData request.
557812 AOM -Update the Tariff to Service Compatibility Data
1. Remove promotion_ind from pc_service_tariff_v view definition. (recreate the view without this field)
2. Remove the property mapping for PromotionIndicator for Class TariffsForService.
3. Update Database Table, class mapping
Note: DB Changes (service_tariff_comp)
557813 AOM -Remove the promotion indicator from the Tariff Data
Remove promotion_ind from Class Definition and Database


557813 AOM -Remove the promotion indicator from the Tariff Data
Remove promotion_ind from Class Definition and Database
Remove the mapping once removed from the DB.
Note: DB Changes (pc_tariff)


3162
557814 AOM -Update the Tariff to Discount Compatibility Data
1. Remove promotion_ind from pc_discount_tariff_v view definition. (recreate the view without this field)
2. Remove the property mapping for Promotion_indicator for Class DiscountsForTariff
3. Update Database Table, class mapping
Note: DB Changes (discount_tariff_comp)
PropertyDetails:
Clarifications:
Tariff to Handset
Handset to Tariffpromotion_start_dt PromotionStartDate Add DiscountForTariff,
ServicesForTariff
promotion_end_dt PromotionEndDate Add ServicesForTariff,
DiscountForTariff
promotion_ind PromotionIndicator Remove TariffDB Column Name PropertyName Action ClassName


3163
Store Dataflow Response
AOM need to store dataflow response(SRList) which helps a lot in debugging the issues. Storing would be config driven for a given process
name, store only if the config is enabled or skip if it's disabled or config doesn’t exist.

 Columns Id - varchar(255) (GUID) Primary Key
transactionId-varchar(255)
identifier -varchar(255)
identifier_type -varchar(255)
process_name -varchar(255)
request_timestamp (timestamp)
srlist (text)Table Name strategy_results
Properties Id- Text
TransactionId - Text
Identifier - Text
IdentifierType- Text
ProcessName- Text
RequestTimestamp - Datetime
SRList - TextClass Name VFUK-FW-AOMFW-Data-StrategyResults
Activity store the SRList data passed in as input parameter for a given processname and request timestamp
Applies To VFUK-FW-AOMFW      (to support both Work, Int Classes)
Ruleset AOMFW
Input Parameter Id (identifier)
TrancsactionId
Identifier
IdentifierType
ProcessName
RequestTimestamp
SRList
Output
ParameterN/A
 Avoid saving data into table, if SRList is emptyActivity Name : StoreStrategyResults


3164
HouseKeeping
AOMConfig
 HousekeepingRetentionPeriod StrategyResults 2
HousekeepingSQL StrategyResults VFUK-FW-AOMFW-Data-StrategyResultsConfigType ConfigName ConfigValue
StoreStrategyResults GetRecommendations true
StoreStrategyResults GetProductList falseConfigType ConfigName ConfigValue


3165
Async Capture Response
In the VADR Basket Summary screen an Agent, press 'Continue', Submit Basket is invoked and CSO is successful
and IH update fails, which is failing the complete submit basket process
The IH update record is placed into a queue and the Submit Basket returns a success response allowing the agent to continue with the
Upgrade. A background process inserts the queued IH record into IH
If the insert fails X times, an error message is raised to the Support teams and the failure is managed manually by these teams.
Need to add the new handler as part of TaskQueue process framework to process Async Capture Response

VFUK-AOM-Int-Services.SubmitBasket Activity Changes
Add new setup to invoke InitialiseTaskStatus after Step 7 ( CreateSalesOrder)
SourceId : Parimary.SubscrptionId
SourceType : “SubscrptionId”
TaskType: CaptureResponse
TaskTimestamp: @DateTime.getCurrentTimeStamp()
MetaData : << No Need to Pass>>
Payload : @AOMUtilities.GetJSONOfPage(Subscrption)
Handle the failures with the error codes
VFUK-FW-AOMFW-Data-TaskStatus. InitialiseTaskStatus Activity Changes
Update MetaData  as Optional input parameter
VFUK-FW-AOMFW-Data-TaskStatus. ProcessQueueItem Activity Changes
Update When rules in Step 9 for Task Handler Router to check new TaskType CaptureResponse and jump to step 13
Add a new Step to invoke the new CaptureResponseHandler Activity (Step 13)
Handle the failures with the error codes
VFUK-FW-AOMFW-Data-TaskStatus. CaptureResponseHandler Activity (NEW)
Use @AOMUtilities.GetJSONOfPage(Payload) to populate a new subscription page
Invoke the CaptureDealResponse Dataflow passing the Subscription page as input
Retry once by default in case of any failure


Retry once by default in case of any failure
Handle the failures with the error codes

Activities
This activity validates the REST Service request, prepares and creates a SalesOrder request, then calling InitialiseTaskStatus with
CaptureResponse task typeSubmitBasket


3166
Applies To VFUK-FW-AOM-Int-Services
Ruleset AOM-Int
Input
ParametersErrorCode: Error Code
Output
ParametersStatusCode: Status Code
ErrorMessage: Error Message
Error Handling Primary Catch-all Error Handler: Catches all the unhandled Exceptions or Errors in the activity
Subscription Not Found
Initialise the TaskStatus page properties from parameters and pass the page to the task queue
Applies To VFUK-FW-AOMFW-Data-TaskStatus
Ruleset AOMFW
Input
ParametersSourceId
SourceIdType
TaskType
TaskTimestamp
MetaData
Payload
Output
ParametersN/A
Error Handling Primary Catch-all Error Handler: Catches all the unhandled Exceptions or Errors in the activityInitialiseTaskStatus
Use the TaskStatus page from InitialiseTaskStatus to run task of type TaskType and persist the primary page
Applies To VFUK-FW-AOMFW-Data-TaskStatus
Ruleset AOMFW
Input
ParametersN/A
Output
ParametersN/A
Error Handling Primary Catch-all Error Handler: Catches all the unhandled Exceptions or Errors in the activity
Obj-Save Error
Unsupported Task Type errorProccessQueueItem


3167
Use Subscription data flow Payload and from GetSubscription to run CaptureDealResponse which will populate Interaction History
Applies To VFUK-FW-AOMFW-Data-TaskStatus
Ruleset AOMFW
Input
ParametersN/A
Output
ParametersN/A
Error Handling Primary Catch-all Error Handler: Catches all the unhandled Exceptions or Errors in the activityCaptureResponseHandler


3168
Branching
Working with PRPC Branching
How to setup new Branch
Guidelines for Merging Branches
Guidelines for Testing using Branch Application
Branching Approach


3169
Working with PRPC Branching
Overview
Access Groups
Branch Application
Rule Checkout to Branch (Existing Rule)
Rule Creation in Branch (New Rule)
Decision Data Checkout to Branch (Existing Rule)
PM Push into AOM Branch
Merging Branch into Trunk
Overview
The below document is targeted for the Optimation users/Business Users/Logic User who on how to working using PRPC branching for the
various aspects of AOM development like updating strategies, decision data, and PM Push etc.
Access Groups
Below are the Trunk and Branch application rules and their respective access groups. Operators should be updated with the applicable
Access group for either trunk or branch application access.
Branch Application
The operator should be updated with the Branch Access group to view below application rule on Dev2AOMFW:BranchMarketManager
AOMFW:BranchAdministrators
AOMFW:BranchPegaMarketManager
  AOMFW:01-03-02 Branch
AOMFW:MarketManager
AOMFW:Administrators
AOMFW:PegaMarketManager   AOMFW:01-03-01 TrunkAccess Group Application Rule Version Application Type


3170
 Below is the description of the highlighted areas in the screenshot above.
1. Branch Name or the Branch Created in that application
2. Application Version in where the branch is created
3. Name of the Application where the branch is created
Rule Checkout to Branch (Existing Rule)
If the operator default access group is pointed to Branch as detailed in the section above. Then the operator will see the Check out to
Branch option to check out the rule into the branch.


3171
When the user clicks on the Check out to Branch button on the rule, the below dialogue box is popped up to select the applicable branch
to check out the rule.
Note: MVP_Migration branch is already created in Dev2.

 When the user selects the appropriate branch and clicks on Check out to Branch. The rule will be created in the branch ruleset.
 A new ruleset will be created at the back end along with the source ruleset name, branch key word and branch name which should not be
applicable to the user. The user just needs to check out the rules in the applicable branch and continue working as usual.
 The ruleset Created in this case is AOMFW-Business-Artifacts_Branch_MVP_Migration
Source Ruleset Name of the Checked-out rule: AOMFW-Business-Artifacts
Branch Name: MVP_Migration


3172

Rule Creation in Branch (New Rule)
When a user is creating new rules in the branch, the user needs to select the applicable branch and target ruleset as shown below.
Decision Data Checkout to Branch (Existing Rule)
Search for the required decision data rule and open it.
From the options on the Check-out button. Use Check out to Branch to save the rule into the required branch.
*** Please don't use Save as Option ****


3173
PM Push into AOM Branch
PM Push will work based on the pega rule resolution if it finds the required decision data in Branch it will push the data else it will search for
that rule in Trunk (Main Application) and push the data.
Please select the below environment name to push the PMTool data into branch decision data from the PMTool Push Screen.

Merging Branch into Trunk
 From the branch application rule, user can click on the branch and open the actual branch

Below are the branch and it's rules view which is the UI displayed when the user clicks on the branch name in the above screen.


3174
 From action, users can do multiple actions like Lock, Merge, Package etc.
 When we click on the merger below the dialogue box, we see to merge
 Clicking on Proceed button will display the below screen to do the actual merge.
 All branch rules will be merged into a new ruleset version of the respective source ruleset which will be created by the merger process.
If there are any conflicts while merging, this process will prompt and should be dealt with manually.
 Note: Please involve the App team in creating a new branch and merging.


3175
How to setup new Branch

Below is the list of activities that need to be performed for creating a new branch application.
Please refer to the AOMBuild Log -->Branches Tab to verify if there is an existing branch that suites requirement
Create Branch
Automation
Create Rulesets in Branch
Manually
Application Rule
Create Branch
Access Groups
Operators
Create Rulesets in Branch
Microsite
Delete Branch
Create Branch
Automation
Run the activity CreateBranch with the branch name as a parameter which creates the following rules
Application rule
Access groups
API Operators
Create Rulesets in Branch
Please check the details here.
pxDecisionClass rule which will be created in the AOMFW-Artefacts ruleset needs to be saved again manually to the Aom-Testing ruleset.
Manually
Application Rule
Create the application rule for a branch with the following details
1. Application Name: AOM_<<Branch_Name>> ( Use names as generic so that the application and access groups can be reused)
2. Description: Describe what the branch is for example Branch2: Upgrade / Branch1: Simulation
3. Building on Application: Pick up the latest version of the AOM Application rule
4. Application Ruleset: Add the latest version of AOM-Testing
5. Update the Application rule ruleset to AOM-Testing
6. Include in background processing should be enabled on the Definition--> Advanced Tab of the application rule
( This is required for the System runtime context to be updated so that the Job Schedulers and QueueProcessors are picked up from the
branch application)


3176
Create Branch
Create the new branch from the branch application created above
1. On Application Rule, Under Development Branches--> Click on Add Branch
2. Give a unique name to identify the branch. Example: Simulaiton/Digital
3. Save the branch application rule
4. To fix the access group issue for the logic team, create the logic ruleset in the branch by running an activity <<TBD>>


3177

Access Groups
create a new access group for branch applications reusing the existing trunk access groups
1. Save-as AOMFW: MarketManager access group with the relevant branch name.  Example : AOM:Branch2MarketManager  into
AOM-Testing ruleset ( as its un-versioned no ruleset version is required
2. Save-as AOMFW: Administrators access group with the relevant branch name.  Example : AOM:Branch2Admins into  AOM-Testing
ruleset ( as its un-versioned no ruleset version is required)
3. Save-as AOM:API access group with the relevant branch name.  Example : AOM:Branch2API into  AOM-Testing ruleset ( as its un-
versioned no ruleset version is required)
Operators
create a new operator for branch applications by reusing the existing trunk operators
1. Save-as VFUK.TIL operator with the relevant branch name. Example: AOMBranch2.VFUK.TIL  into  AOM-Testing ruleset ( as its un-
versioned no ruleset version is required
2. Update the Operators of the develops to point to the right access group to access the relevant branch
Create Rulesets in Branch
Any check-out to the branch by the Logic team is not updating the ruleset stack hence it has to be done by the Administrators access group
Tried the Programmatic way which did not work. Hence below rulesets needs to be created for the logic team to start using the branch
AOMFW-Artifacts
AOMFW-Business-Artifacts
AOMFW-PM-Catalogue
AOMFW-Testing
Need to do a check-out to branch for any relevant rule in the respective rulesets using the Administrators for that branch and then delete it
once the ruleset version is created.


once the ruleset version is created.
Verify the ruleset stack, if it's not updated. Save the application rule to reflect the changes in the ruleset stack
Below is the screenshot on how to navigate to the Ruleset Stack


3178
Below is the updated ruleset stack with all the relevant branch rulesets being created and available as part of ruleset stack

Microsite
Microsite depends on the below Dynamic System Settings. One of the important ones below is the Application Name. Any change to this
DSS setting would need to restart to avoid this, we need to add the relevant branch to the applicable rule to conduct the tests.
Delete Branch
Open the branch from the application rule as shown below


3179

From action on the branch as shown below delete the branch from the system, which will delete all the rules and rulesets from the branch.
Run the activity DeleteBranch with the branch name as a parameter which deletes the following rules
API Operators
Access groups
Application rule


3181
Guidelines for Merging Branches
Below are the key points to be noticed or taken care of while merging branch code into the trunk
1. All rules should be reviewed using the Pega review process available in the branch
2. No rule should be checked-out before the merge
3. Need to resolve the merge conflicts manually
4. Code can be merged into an existing ruleset version or a new ruleset version
5. Access group needs to be updated once the Data page is merged into the trunk
6. Updated access group for Service package if it's updated in Branch
7. Update the Application rule for any Case Type changes
8. Verify/Update the Database Table rules to point to the right trunk ruleset and schema name should be empty
9. Any new datatype relevant records post-merge are still mapped to branch ruleset, manually update them to  appropriate ruleset name
and this rule is un-versioned


3182
Guidelines for Testing using Branch Application
Overview
To manage the independent development of features that share rulesets, each Pega development team creates its own branch and branch
rulesets.

GuideLines
Branching is applicable to only the code/rules in the Pega application and not to the database/data layer
Please refer to the AOMBuild Log -->Branches Tab for Branch Application and Access details
Update the operator(s) which are being used for testing the branch features to the right branch application access as primary access or
switch to the required access-group before starting the tests.
Please verify if the System runtime context is updated with the new application to pick up the changes from the branch. System runtime
context update is required for the Job schedulers and Queue Processor to pick up the latest changes from the branch if any
All API Tests should be conducted using the API operator dedicated to that branch application


3183
Branching Approach
When to Branch
When to Merge the Branch
Impact of using Branching
When to Branch
When a functionality/feature needs to be developed over multiple releases.
Example:  Simulation, Channel management
When a functionality needs to be developed for a specific set of users only
Example :  PostMVP, DigitalUpgrade
When business is not sure when the functionality will be used on PROD
Example: Digital Changes
To support parallel/isolated development
Example: Release and Bug fixing Branches
To work on proof of concept.
To accommodate Emergency / Adhoc releases.
Example:  AUSpecialPackage
When to Merge the Branch
After the features developed on the branch are tested and approved by the business
e.g. PostMVP, DigitalUpgrade
After the functionality developed over multiple releases is completed and is testable.
e.g. Simulation, Channel management
When an Emergency / Adhoc releases are ready to be tested by the QA team
e.g. AUSpecialPackage
Impact of using Branching
Using branches would add the overhead to using separate access controls
Developers and Testers need to be aware of the right access controls
Additional efforts need to be dedicated for the below activities
Creating branch
Merging branch
Resolving the merge conflicts
Deleting the branch
During the code merge
Pega will alert all the merge conflicts which need to be dealt with manually
Needs to allocate efforts for resolving merge conflicts


3184
Channel Management
Design Overview
Treatment Send Config
User Interface
Email
SMS
App Push


3185
Design Overview
Overview
Apply Decisioning
TretmentConfig
Selection Process
Input Parameters
Selection Logic
Process Send
Channel Management Portal
Manage Channel
Manage Treatment
Glossary

Overview
Channel management is the framework and provides the ability for businesses to control outbound communications like pausing outbound
communications for a specific channel or cancelling all communications specific to a treatment.

Apply Decisioning
Identifies the eligible customers by evaluating the customer data against the eligibility rules and populates the customer and treatment data
into a channel-specific staging table(  sms_saging/email_staging)
TretmentConfig
The table where all the treatment-related configuration is stored. Information like treatment limit ( throttle limit), social hours, scheduled date,
expiry date, active/pause/suspend etc and business can always update/override these details at any point of time during the sending
process( PM Too can push this data)


3186
Selection Process
A process needs to be run periodically to select the customers in staging for each treatment in TreatmentConfig satisfying the validations
below. All these selected records will be pushed into a new table called Send
Input Parameters
Channel: Name of the channel
ParitionKey : calculated value using the ThrottlePartitionSize config value for the channel in context and GetNextPartitionKey() Function
RunId: Unique Id to Identify each invocation of the prepare_channel_send() SQL function and used later by the process to queue the
items for actual send
MaxRecords:  Calculated value by diving the Channel ThrottleRateLimit config by Channel ThrottlePartitionSize to get the Max records
for each execution/iteration.
Selection Logic
Treatment status is Active
Current Date Time is less than Treatment Expiry Date and Expiry Date is null/empty
Current System Time is between is Treatment Social Starttime and Social Endtime
Current System Date Time is between is Treatment Schedule Starttime and Schedule Endtime
The treatment throttle limit is not reached
Total selected customers should be less than max records input parameters
All the selected records for each execution should be with ParitionKey passed as input parameter
Process Send
For each record, ProcessSend needs to format the channel-specific data and sends out the communication.
Before sending out the communication, we need to check if there are any channel level threshold limits reached
If the threshold is reached then return the record to the staging table
If the threshold is not reached, send out the communication and consume the token/reduce the counter using the bucket4j
framework.
Any error while processing the record, should be updated using the status in the same Send Table which will be addressed later either
by re-queueing or cancelling from channel management UI.
Once the outbound communication is sent successfully.
Record the communication in the Interaction history


Once the outbound communication is sent successfully.
Record the communication in the Interaction history
Record communication in the OutboundComms Store
Record the communication in the Sent Table
Delete the record from the staging so that it's not re-processed
Channel Management Portal
Manage Channel
Channel Dashboard will display the aggregated data like In-Queue, Sent in the Last 24 hours, Processing, Errors
Manage Button
Users can Enable or Disable Channel only from the Manage screen
Values like Throttle Rate, Bucket Window, RetryCount, Controller etc are read-only and will be fetched from AOMConfig
View Error
All the errors for that particular channel are displayed
Users can view the errors for each treatment/treatment variant
Users can either Re-Queue or Cancel the Errors


3187

Manage Treatment
The treatment table will display the aggregated data like Queued, Sent in the Last 24 hours, Errors
All the updates onto the treatment_send_config would be picked up by the next scheduled selection process ( QueueSelection Job
Scheduler)
Manage Treatment Icon
Manage Treatment Properties dialog box would be displayed
Use should be able to modify Social Hours/Flow Rate/Schedule Start & End Date/Priority
All updates would be recorded into the treatment_send_config table along with the status_update_datetime as the current timestamp
View Errors
All the errors for that particular treatment are displayed
Users can either Re-Queue or Cancel the Errors for that particular treatment
Re-Queue
Moves the records from the queue table back to the staging table
Cancel
Moves the records from the queue table back to the cancelled table
Pause/Resume/Cancel Treatments
User should be able to Pause a treatment, which would hold all the further communications for that treatment
the status column in treatment_send_config would be updated as Paused so that the selection process ignores these records
Only Paused treatments can be cancelled
the status column in treatment_send_config would be updated as Cancelled so that the selection process ignores these records
All the records from the staging table would be moved to the cancelled table for auditing purposes
Resume
the status column in treatment_send_config would be updated as Active so that the selection process includes these records
All the sends for that treatment would be resumed


3188
Glossary
Staging Table: Holds customer data along with the eligible treatment information to be sent out as communication in the customer
opted channel
sms_staging is the table for the SMS channel
email_staging is the table for the Email channel
Queue Table: Holds customer data along with the eligible treatment information that passed the selection process
sms_send_queue is the queue table for the SMS channel
email_send _queue is the queue table for the Email channel
Treatment Config: The treatment config table is where all the treatment information is stored ( Pushed by PM Tool)
Sent Table: Holds customer data along with the eligible treatment information once the send is successful
sms_sent is the table to store all the sent records data for the SMS channel for auditing purposes
email_sent is the table to store all the sent records data for the Email channel for auditing purposes
Cancelled Table: Holds customer data along with the eligible treatment information for the cancelled records
sms_cancelled  is the table to store all the cancelled records for the SMS channel
email_cancelled is the table to store all the cancelled records for the Email channel
Treatment Audit: Hold the information about the treatment config updates like treatment paused/resumed/cancelled for auditing
purposes
Throttling: throttling is a method of minimizing the chances of hitting the rate limit set by the third-party provider. Instead of sending out
a lot of communications like Email or SMS all at once, will be sent out over time.


3190
Treatment Send Config
Treatment Config
Overview
Table Definition
Sample Data
Treatment Send Config Audit
Overview
Table Definition
Sample Data
Treatment Config
Overview

Table Definition
Class Name VFUK-FW-AOMFW-Data-TreatmentSendConfig
Column
NameColumn
TypeProperty Name Property TypeDescription ConstraintsSource
treatment_na
mevarchar(255)TreatmentName Text Name of the Treatment PK - NOT
NULLTreatment Data
treatment_var
iantvarchar(255)TreatmentVariantText Name of the Treatment
VariantPK - NOT
NULLTreatment Data
offer_name varchar(255)OfferName Text Name of the Offer PK - NOT
NULLTreatment Data
offer_variant varchar(255)OfferVariant Text Name of the Offer VariantPK - NOT
NULLTreatment Data
channel varchar(255)channel Text Channel NOT NULL
priority Number Priority Double 2-10 NOT NULL
throttle_rate Number ThrottleRate Integer 1-9999999 NOT NULL
status varchar(255)Status Text Active
Paused
CancelledNOT NULL
schedule_star
t_datetimetimestamp ScheduleStartDat
eTimeDateTime 2021-01-16T09:00:00 NOT NULL
social_hour_s
tartvarchar(5) SocialHourStart Text 05:00 NOT NULL  Table Name treatment_send_config


3191
Sample Data
Treatment Send Config Audit
Overview
Holds the information about the treatment config updates like treatment paused/resumed/cancelled for auditing purposes
Table Definitionsocial_hour_e
ndvarchar(5) SocialHourEnd Text 23:00 NOT NULL
account_poolvarchar(255)AccountPool Text SMPP Account List
Reference (R3.02)NOT NULL PMTool
sender_alias varchar(255)SenderAlias Text Sender Identifier of
Treatment (R3.02)NOT NULL PMTool
schedule_end
_datetimetimestamp ScheduleEndDate
TimeDateTime 2021-02-28T09:00:00
(R3.02)NOT NULL PMTool
status_update
_datetimetimestamp StatusUpdateDate
TimeDateTime 2021-02-28T09:00:00
(R3.02) PMTool
DataExtra
_SMSVarian
tDataExtr
a1GB SMS 1 200000 Pause
d2022-
03-03
19:09:
37.00008:00 17:30 2022-
05-25
07:29:
50.0002022-
03-31
14:06:
52.9572KB5e
0OSzb
UpgradeP
hone_SM
SDefaul
tUpgrade
Phone2GB SMS 4 300000 Active 2022-
02-04
16:14:
57.95708:00 19:00 2022-
03-31
12:24:
39.0002022-
03-22
14:23:
10.270yF0s9y
OL8X
DataExtra
_SMSDefaul
tDataExtr
a1GB AppP
ush3 100000 Cancel
led2022-


tDataExtr
a1GB AppP
ush3 100000 Cancel
led2022-
04-04
00:38:
41.00016:30 20:00 2022-
04-30
19:22:
33.0002022-
03-30
12:52:
03.422EFr4m
wMi1Rtreatment
_nametreat
ment_
varian
toffer_n
ameoffer_
varian
tchann
elpriorit
ythrottle_ra
testatussched
ule_st
art_da
tetimesocial
_hour
_startsocial
_hour
_endsched
ule_en
d_date
timestatus
_upda
te_dat
etimesende
r_alias
Class Name VFUK-FW-AOMFW-Data-TreatmentSendConfigAudit
Column Name Column Type Property Name Property Type Description Constraints Source
tsca_id varchar(255) TSCAId Text Unique Record
for the Line ItemPK - NOT NULL GUID using a
function
offer_name varchar(255) OfferName Text Name of the OfferNOT NULL SR
offer_variant varchar(255) OfferVariant Text Name of the Offer
VariantNOT NULL SRTable Name treatment_send_config_audit


3192
Sample Datatreatment_name varchar(255) TreatmentName Text Name of the
TreatmentNOT NULL SR
treatment_variantvarchar(255) TreatmentVariantText Name of the
Treatment VariantNOT NULL SR
action varchar(255) Action Text The action taken NOT NULL On UI entry
update_timestam
ptimestamp UpdateTimestam
pDateTime Date Time
updated to the
treatmentNOT NULL Current
timestamp using
a function
update_operatorvarchar(255) UpdateOperator Text Name of the
Operator who
updated the
treatmentNOT NULL pxRequestor
system page
cb58c844-
b77d-4353-
8cf6-
a71c64b9f744DataExtra 2GB DataExtra_SM
S2GB Active 2022-04-18
14:09:45.898neslihan.turkoz
u@adqura.co
m
6954a9ed-
65a3-43a8-
9332-
8c6b697ad286UpgradePhone1GB UpgradePhone
_SMS1GB Paused 2022-04-18
14:22:47.112neslihan.turkoz
u@adqura.co
m
926e5359-
5b43-42f6-
94cf-
d5f46969c3d8UpgradePhone1GB UpgradePhone
_SMS1GB Cancelled 2022-04-18
14:24:36.775neslihan.turkoz
u@adqura.co
mtsca_id offer_name offer_variant treatment_na
metreatment_var
iantaction update_timest
ampupdate_opera
tor


3193
User Interface
Channel Management Navigation Menu Item
Navigation - MainNavigation
Section - OutboundChannelManagement
Activity Name: GetChannelManagementDetails
Activity Name: GetOutboundT reatmentComms
Activity Name: GetChannelSummary
Error Records management  - Treatment Level
Section - OutboundT reatmentErrors
Activity Name: GetT reatmentErrorDetails
Error Records management  - Channel Level
Section - OutboundChannelErrors
Activity Name: GetChannelErrorDetails
Activity Name: UpdateT reatmentStatus
Activity Name: CancelT reatment
Activity Name: RequeueSelectedOutboundT reatments
Activity Name: RequeueAllOutboundT reatments
Activity Name: ResendOutboundT reatments
Activity Name: CancelSelectedOutboundT reatments
Activity Name: CancelAllOutboundT reatments
Classes
Section - ChannelConfiguration
Activity - GetChannelConfig
Activity - SaveChannelConfig
Description
Implementation
Section
Section Name: Manage Treatment Properties
Activity
Activity Name: CalculateT reatmentProperties
Activity Name: V alidateT reatmentProperties
Activity Name: UpdateT reatmentProperties
Channel Management is accessed from the Launch portal → AOMManagment option. This opens the AOM Management Portal.


3194
Channel Management Navigation Menu Item
Existing Navigation rule. Add new menu item for Channel management
Applies ToData-Portal-AOMManagement
Ruleset AOMFW-UI
Settings Label: Channel Management
Action: Calls GetChannelManagementDetails Activity. Displays OutboundChannelManagement Section.
 Access: All users.
Icon: Send icon
Action: Open Channel Management dashboard UI.Navigation - MainNavigation
The main Section for Channel Management.
Applies ToData-Portal-AOMManagement
Ruleset AOMFW-UI
Display Displays Last Refreshed Date/Time - update this to current date/time when page refreshed.
Displays Refresh button with icon. This will update date/time when clicked.
Includes Summary Section for each active channel; SMS, Email, App Push. Pass parameter Channel_Name to
Summary Section. These are displayed horizontally next to each other.
There is the option to filter the results of these summarise by account pool, displaying different data to line up with the
given account pool
Displays Table as below
Table
columnsOffer Name
Offer VariantSection - OutboundChannelManagement


3195
Treatment Name
Treatment Variant
Channel
Priority
Status - Value is derived from one the following:
As per Treatment Config table
If CurrentHour < SocialHourStart or CurrentHour > SocialHourEnd THEN "Outside Social Hours"
If CurrentDateTime < ScheduledStartTime THEN "Scheduled"
If CurrentDateTime > ScheduledEndTime THEN "Expired"
Queued Cases
Sent in Last 24 Hours
Error Count
Actions
This column contains icon buttons for the following actions:
Manage
View Errors - View Treatment Error Records page (Section - User Interface | Error Records management   Tre
atment Level )
Pause Execution
Display Pause icon if the treatment is not paused and enable button if not cancelled, not scheduled, not expired.
On click
Update TreatmentSendConfig by setting Status=Paused for that treatment.
Refresh the table row status column and update Action buttons.
Resume Execution
Display Play icon if the treatment is paused and enable button if not cancelled, not scheduled, not expired.
On click
Update TreatmentSendConfig by setting Status=Active and StatusUpdateDateTime= CurrentDateTime for
that treatment.
Refresh the table row status column and update Action buttons.
Cancel Execution
Enable Cancel icon only if the treatment is paused, and not cancelled, not scheduled and not expired.
On click
Show Cancel confirmation.
Update TreatmentSendConfig by setting Status=Cancelled and StatusUpdateDateTime= CurrentDateTime
for that treatment.
Refresh the table row status column and update Action buttons.
Table
requireme
ntsSet property to display as .OutboundTreatmentCommsList property (VFUK-FW-AOMFW-UI-OutboundTreatmentComms)
View All toggle switch:
If the toggle is enabled, show all treatments from the TreatmentSendConfig
Re-Runs Query but ignore query count (TBD)
Default Filter Query where Queue Count is > 0


Re-Runs Query but ignore query count (TBD)
Default Filter Query where Queue Count is > 0
Records are ordered by Priority ascending
Propositions must have > 0 Record in Queue (Don’t show propositions without any Queued Records)
Calls activites for UI display.Activity Name: GetChannelManagementDetails


3196
Applies To Data-Portal-AOMManagement
Ruleset AOMFW-UI
Input Parameter NA
Output Parameter NA
Pages and Classes OutboundTreatmentComms - VFUK-FW-AOMFW-UI-OutboundTreatmentComms
OutboundTreatmentCommsList - Code-Pega-List
pyDisplayHarness - Data-Portal-AOMManagement
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Activity Logic Set .CurrentDisplayTime property for Last Refreshed field on UI.
Call GetOutboundTreatmentComms activity to get treatment details for main table.
Call GetChannelSummary activity to get details for Summary section(s).
Gets details required for Channel Management table
Applies To Data-Portal-AOMManagement
Ruleset AOMFW-UI
Input Parameter NA
Output Parameter NA
Pages and Classes OutboundTreatmentComms - VFUK-FW-AOMFW-UI-OutboundTreatmentComms
OutboundTreatmentCommsList - Code-Pega-List
pyDisplayHarness - Data-Portal-AOMManagement
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Activity Logic Call SQL rule GetOutboundTreatmentComms to populate OutboundTreatmentCommsList property.
For each treatment:
If ScheduledStartDateTime is greater than CurrentDateTime then set Status to "Scheduled"
If ScheduledEndDateTime is less than CurrentDateTime then set Status to "Expired"
If current time is outside of Social Hours, set Status to "Outside Social Hours"Activity Name: GetOutboundTreatmentComms
Gets details required for Summary sections
Applies To Data-Portal-AOMManagement
Ruleset AOMFW-UI
Input Parameter NAActivity Name: GetChannelSummary


3197
Error Records management - Treatment Level
This screen is displayed when the View Errors icon button is selected from the Actions column on the main page.
 Output Parameter NA
Pages and Classes NA
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Activity Logic Get Status from AOMConfig
ConfigType: OutboundCommsEnabled
ConfigName : <<Channel_Name>>
ConfigValue : true/false
SQL call to populate ChannelCommsProperties properties - QueueCount, ProcessingCount, ErrorCount,
Last24HoursSentCount
This Section displays and handles Errors for a specific Treatment. GetTreatmentErrorDetails activity is called to populated this Section.
Applies ToData-Portal-AOMManagement
Ruleset AOMFW-UI
Pages &
ClassesOutboundTreatmentComms - VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Display Display OfferName, OfferVariant, TreatmentName, TreatmentVariant, Channel above table
Table:
Check box to select row
Interaction Id
Subscription Id
Destination Address - ServiceNumber
Error Date- Last attempted date/time
ReasonSection - OutboundTreatmentErrors


3198
Requireme
ntsRecords are ordered by Error Date ascending
User should be able to filter and sort on any column
Actions Rows are selectable using the check box.
Actions buttons:
Requeue Selected - Enabled if any rows are selected. Disabled otherwise.
When clicked:
Requeue selected Items
Invoke the SQL function Build #715162
Refresh UI
Resend Selected - Enabled if any rows are selected. Disabled otherwise.
When clicked:
Resend selected Items immediately
Send item with the realtime implementation
Refresh UI
Cancel Selected - Enabled if any rows are selected. Disabled otherwise.
When clicked:
Remove selected Items-
Invoke the SQL function Build #712392
Refresh UI
Requeue All - Enabled.
Requeue all Items
Invoke the SQL function Build #715162
Refresh UI
Resend Selected - Enabled.
Resend all Items
Send item with the realtime implementation
Refresh UI
Cancel All - Enabled.
Delete all Items
Invoke the SQL function Build #712392
Refresh UI
Gets details for OutboundTreatmentErrors UI.
Applies To VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Ruleset AOMFW-UI
Input Parameter NA
Output Parameter NA
Pages and Classes OTCErrorsList -  Code-Pega-List
OutboundTreatmentComms - VFUK-FW-AOMFW-UI-OutboundTreatmentComms
OTC - VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Error Handling Primary Catch-all Error HandlerActivity Name: GetTreatmentErrorDetails


3199
Error Records management - Channel Level
This screen is displayed when the View Errors is selected from the Channel Summary section on the main page.
 Logs to Error Log
Activity Logic Call GetOutboundTreatmentErrors SQL rule to populate OutboundTreatmentComms page
This Section displays and handles Errors for a specific Channel. GetChannelErrorDetails activity is called to populated this Section.
Applies ToData-Portal-AOMManagement
Ruleset AOMFW-UI
Pages &
ClassesOutboundChannelComms - VFUK-FW-AOMFW-UI-OutboundChannelComms
Display Offer Name
Offer Variant
Treatment Name
Treatment Variant
Error Count
First Recorded Error
Last Recorded Error
Actions
This column contains icon buttons for the following actions:
View Errors - View Treatment Error Records page (Section - User Interface | Error Records management   Tre
atment Level )
Requeue
Resend
Cancel
Requireme
ntsRecords are ordered by First Recorded Error ascending
User should be able to filter and sort on any column Section - OutboundChannelErrors


3200
Gets details required for OUtboundChannelErrors Section.
Applies To VFUK-FW-AOMFW-UI-OutboundChannelComms
Ruleset AOMFW-UI
Input Parameter NA
Output Parameter NA
Pages & Classes OTCErrorsList - Code-Pega-List
OutboundChannelComms - VFUK-FW-AOMFW-UI-OutboundChannelComms
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Activity Logic Call GetChannelErrors SQL rule call to populate OutboundChannelComms page.Activity Name: GetChannelErrorDetails
Updates status and status_update_time on treatment_send_config db table from Action buttons on Channel Management UI
Applies To VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Ruleset AOMFW-UI
Input Parameter NewStatus
Output Parameter NA
Pages & Classes TreatmentSendConfig - VFUK-FW-AOMFW-Data-TreatmentSendConfig
TreatmentSendConfigAudit - VFUK-FW-AOMFW-Data-TreatmentSendConfigAudit
pyDisplayHarness - Data-Portal-AOMManagement
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Activity Logic Call Obj-Save to update treatment_send_config db table
Call Save activity to append treatment config update into the database for auditing purposeActivity Name: UpdateTreatmentStatus
Updates status to Cancel and cancels treatment - called from Cancel icon button on Channel Management table Actions column.
Applies To VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Ruleset AOMFW-UI
Input Parameter NewStatus
Output Parameter NA
Pages & Classes pyDisplayHarness- Data-Portal-AOMManagementActivity Name: CancelTreatment


3201
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Activity Logic Call UpdateTreatmentStatus activity passing NewStatus parameter as Cancelled
Call SQL rule CancelTreatment which calls sql function cancel_outbound_comms
Requeues selected treatments - called from OutboundTreatmentErrors UI, Requeue Selected button
Applies To VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Ruleset AOMFW-UI
Output Parameter NA
Pages & Classes OutboundTreatmentComms - VFUK-FW-AOMFW-UI-OutboundTreatmentComms
CurrentOTC - VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Activity Logic Get all treatments that were selected in UI. Get each QueueId and add to Local.SelectedQueueIds.
Call SQL rule RequeueSelectedTreatments which calls sql function requeue_outbound_error_comms,
passing in Local.SelectedQueueIds.
Call GetTreatmentErrorDetails activity in order to refresh UI screen.Activity Name: RequeueSelectedOutboundTreatments
Requeues all treatments - called from OutboundTreatmentErrors UI, Requeue All button
Applies To VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Ruleset AOMFW-UI
Output Parameter NA
Pages & Classes SMSSendQueue - VFUK-FW-AOMFW-Data-SMSSendQueue
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Activity Logic Call SQL rule RequeueAllTreatments which calls sql function requeue_outbound_error_comms.
Call GetTreatmentErrorDetails activity in order to refresh UI screen.Activity Name: RequeueAllOutboundTreatments
Resends either selected or all treatments, dependent on input params - called from OutboundTreatmentErrors UI Resend buttons, or from
OutboundChanelErrors UI Resend button


OutboundChanelErrors UI Resend button
Applies To VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Ruleset AOMFW-UI
Output Parameter NAActivity Name: ResendOutboundTreatments


3202
Pages & Classes OutboundTreatmentComms - VFUK-FW-AOMFW-UI-OutboundTreatmentComms
OutboundChannelComms - VFUK-FW-AOMFW-UI-OutboundChannelComms
TreatmentError - VFUK-FW-AOMFW-UI-OutboundTreatmentComms
SQ - VFUK-FW-AOMFW-Data-SMSSendQueue
SR - VFUK-AOMFW-SR
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Activity Logic Get all treatments that were in UI and go through them in a list, processing all records in All case or only
selected records in Selected case
Use the queue id of the current iteration to grab the records for the treatment and set the current requeue
count to 0
Call RealtimeSMSQueueProcessor queue processor on each selected record
Call GetTreatmentErrorDetails activity in order to refresh UI screen
Cancels selected treatments - called from OutboundTreatmentErrors UI, Cancel Selected button
Applies To VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Ruleset AOMFW-UI
Output Parameter NA
Pages & Classes OutboundTreatmentComms - VFUK-FW-AOMFW-UI-OutboundTreatmentComms
CurrentOTC - VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Activity Logic Call SQL rule CancelAllErrors which calls sql function cancel_outbound_error_comms.
Call GetTreatmentErrorDetails activity in order to refresh UI screen.Activity Name: CancelSelectedOutboundTreatments
Cancels all treatments - called from OutboundTreatmentErrors UI, Cancel All button
Applies To VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Ruleset AOMFW-UI


Ruleset AOMFW-UI
Input Parameter IsOutboundChannelComms - to indicate which ErrorDisplayButton to populate based on the class the calling
section applies to
Pages & Classes OutboundChannelComms - VFUK-FW-AOMFW-UI-OutboundChannelComms
Error Handling Two different Primary Catch-all Error Handler based on IsOutboundChannelComms parameter
Logs to Error Log
Activity Logic Call SQL rule CancelAllErrors which calls sql function cancel_outbound_error_comms.Activity Name: CancelAllOutboundTreatments


3203
Classes
 Property Name Type Notes
Active truefalse
QueueCount Integer
ProcessingCount Integer
Last24HoursSentCount Integer
ErrorCount Integer
Channel Text
ErrorDisplayMessage Text Used for display errors to user on UI
UpdateDateTime DateTime  Class Name VFUK-FW-AOMFW-UI-OutboundChannelComms
Property Name Type Notes
QueueId Text
OfferName Text
OfferVariant Text
TreatmentName Text
TreatmentVariant Text
Channel Text
Priority Text
QueueCount Integer
Last24HoursSentCount Integer
ErrorCount Integer
Status Text
ScheduledStartDateTime DateTime
ScheduledEndDateTime DateTime
SocialHourStart Text
SocialHourEnd Text
ErrorTimestamp DateTime
Reason Text
InteractionId Text  Class Name VFUK-FW-AOMFW-UI-OutboundTreatmentComms


3204

 DestinationAddress Text
This section is the popup that shows up on clicking Manage for one of the channels
Applies To VFUK-FW-AOMFW-UI-OutboundChannelConfig
Ruleset AOMFW-UI
Read-Only Throttle Management
View Throttle @Hour Rate = (@ThrottleRate/@ThrottleDuration) * 60
View Duration Window in Minutes
Display Throttle Rate as per config
Display Relevant Label "<Throttle Duration> Minute Throttle Rate"
Specify Retry Count
Specify Retry Interval In Seconds
Specify No of Controllers
Actions Queue Enabled -Toggle Switch
Available to ALL
Closing the window is Cancel action and should not Commit the changes
Click on the Save button  should Commit Changes to Config
Channel Enablement
Type: OutboundCommsEnabled
Name: <Channel> (SMS,AppPush….)
Value: true/falseSection - ChannelConfiguration
Activity - GetChannelConfig


3205
Description
There are new requirements that will be applied to be able to configure/update the Treatment Config table.Gets details required for ChannelConfiguration Section
Applies To VFUK-FW-AOMFW-UI-OutboundChannelComms
Ruleset AOMFW-UI
Input Parameter Channel (SMS,AppPush…)
Output Parameter NA
Pages and Classes NA
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Activity Logic Get Enabled, ThrottleDuration, ThrottleRate, RetryCount, RetryInterval, ThrottleRate values from AOM Config
Gets Channel Status from ChannelConfiguration Section and Sets it in AOM Config
Applies To VFUK-FW-AOMFW-UI-OutboundChannelComms
Ruleset AOMFW-UI
Input Parameter Channel (SMS,AppPush…)
Enabled (Channel Status)
Output Parameter NA
Pages and Classes pyDisplayHarness - Data-Portal-AOMManagement
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Activity Logic Get Channel and Enabled from ChannelConfiguration UI and save it into AOM Config
Save the new channel status to Active property for summary box to be refreshed with the new valueActivity - SaveChannelConfig


3206
Implementation
Section


3207
Activity
This section is the popup that shows up on clicking Manage for one of the treatments in the table which is populated by
treatment_send_config db table
Applies ToVFUK-FW-AOMFW-UI-OutboundTreatmentComms
Ruleset AOMFW-UI
Action Social Hours - Text picker: Client-side Validation: Both properties should be in ‘hh:mm’ format and End Time should
be after Start Time
Start Time
End Time
FlowRate
Unlimited = ON   this stands for Status in the db when it is enabled i means active, disable means paused.
Throttle Limit: Disabled, set to -1 when saving
Bucket Rate: Disabled
Unlimited = OFF
Throttle Limit - Integer picker: Client-side Validation: NOT NULL
Bucket Rate: Calculated based on Throttle Limit this is a calculation based on Trottle Limit but Raju will ask do we
need etc.
Schedule - DateTime picker: Client-side Validation: End should be after Start
Start Raju will ask will it be future or past
End
Priority  - Dropdown list which contains below values:
High - 1
Medium- 5
Low - 10
Save Button: Invoke new UpdateTreatmentProperties activity to replace current values in the TreatmentSendConfig record
with the new input values.
Cancel Button: Exit the popup without saving the propertiesSection Name: Manage Treatment Properties


3208
 Once Manage button is clicked: Set the unlimited flow rate flag, throttle limit, bucket rate and priority to appropriate values based on their
current values in the record
Applies To VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Ruleset AOMFW-UI
Input Parameter NA
Output Parameter NA
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Populates Displayed Error Message
Activity Logic Get the treatment_send_config record that is currently being edited
Check whether throttle limit is set to -1 or not
If set to -1, leave throttle limit and bucket rate as blank and enable the unlimited flow rate flag
Otherwise, set the throttle limit and calculate the bucket rate based on the throttle limits value
Round the priority to the nearest value in the dropdown listActivity Name: CalculateTreatmentProperties
 Once a property with an associated Edit Validate rule is changed: Check which property was updated and call the appropriate Edit Validate
rule
Applies To VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Ruleset AOMFW-UI
Input Parameter Property Name
Output Parameter NA
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Populates Displayed Error Message
Activity Logic Use the PropertyName input parameter to determine which property is being edited and jump to the step
for that property
In each of these steps, call the correct Edit Validate rule for that property particularActivity Name: ValidateTreatmentProperties
 Once Save button is clicked: Update the changes that end user entered from UI into corresponding db table which is treatment_send_config
db table and update AOM config.
Applies To VFUK-FW-AOMFW-UI-OutboundTreatmentComms
Ruleset AOMFW-UI
Input Parameter NAActivity Name: UpdateTreatmentProperties


3209

 Output Parameter NA
Error Handling Primary Catch-all Error Handler
Logs to Error Log
Populates Displayed Error Message
Activity Logic Get the treatment_send_config record that is currently being edited
Replace the current values in the record with the newly input values
Save the record back into the DB table


3210
Email


3211
Email Data Model
Email Staging
Overview
Table Definition
Sample Data
Payload
Email Queue
Overview
Table Definition
Sample Data
Email Sent
Overview
Table Definition
Sample Data
Email Cancelled
Overview
Table Definition
Sample Data
AOMConfig V alues
WatchdogConfig V alues
SchedulerConfig V alues
AlertConfig V alues
Email Staging
Overview
Holds customer data along with the eligible treatment information(payload column) to be sent out as communication in the customer opted
channel.
Table Definition
Class Name VFUK-FW-AOMFW-Data-EmailStaging
Dataset
NameEmailStaging
Column
NameColumn Type Property NameProperty Type Description Constraint
sSource
queue_id varchar(255) QueueId Text Unique Record for the
Line ItemPK - NOT
NULL Auto Generated ID
using a function
interaction_id number InteractionId Decimal Record of Interaction NOT NULLSR
treatment_na
mevarchar(255) TreatmentNameText Name of the TreatmentNOT NULLSR
treatment_vari
antvarchar(255) TreatmentVarian
tText Name of the Treatment
VariantNOT NULLSRTable Name email_staging


3212

Sample Dataoffer_name varchar(255) OfferName Text Name of the Offer NOT NULLSR
offer_variant varchar(255) OfferVariant Text Name of the Offer
VariantNOT NULLSR
create_dateti
metimestamp CreateDateTimeDateTime Date Time Entered to
QueueNOT NULLOn Entry
payload text Payload Text JSON Payload of
Required SR DataNOT NULLJSON of SR
priority number Priority Double Priority of the treatment NOT NULLSR
partition_key number PartitionKey Integer Partition Key for multi
node selectionNOT NULLSR
expiry_datetim
etimestamp ExpiryDateTimeDateTime Expiry date of
interaction SR
account_poolvarchar(255) AccountPool Text Account List Reference
(R3.02)NOT NULLTreatment Config
sender_alias varchar(255) SenderAlias Text Sender Identifier for
Message Send (R3.02)NOT NULLTreatment Config
destination_ad
dressvarchar(255) DestinationAddr
essText The number being used
as the destination within
the session (R3.02)NOT NULLTreatment Config
1e438
c6f-
8c00-
498d-
bfe6-
ffb274
74d50f45918
39993
13227
8300DataExtr
a_EmailVariant1 DataExtr
a2GB Payload 2 5 2022-03-
25
16:19:40
.6682022-
04-14
17:19:40
.6688.0 4418102
03110
e107b
5a2-
9f16-
463d-
aaca-
5717a
e7e0e
e414401
99328
91295
5390Upgrade
Phone_
EmailVariant2 Upgrade
Phone1GB Payload 1 2 2022-03-
25


EmailVariant2 Upgrade
Phone1GB Payload 1 2 2022-03-
25
16:19:40
.8302022-
04-14
17:19:40
.8304.0 4417510
51467
22c53
548-
5a7f-47093
53426Upgrade
Insuranc
e_EmailVariant3 Upgrade
Insuranc
eUpgra
deInsuPayload 5 4 2022-03-
23 2022-
04-12 5.0 4477339
35015queue
_idintera
ction_i
dtreatme
nt_nam
etreatme
nt_varia
ntoffer_n
ameoffer_
varian
tpayload priorit
ypartiti
on_ke
ycreate_d
atetimeexpiry_
datetim
eaccou
nt_po
oldestinat
ion_add
ress


3213
Payload
{ "Channel": "Web",  "Classification": "EMPTY",  "ConnectionType": "4G",  "CostExVAT": "0.0000000",  "CostIncludingVAT": "0",
"CostIncVat": "4999",  "DecisionMetadataProperties":
"OfferName,OfferVariant,TreatmentName,TreatmentVariant,OfferID,TreatmentID,DeviceLoanS15Benefit",  "DefaultUpfrontCost": "0",
"DeviceColour": "Black",  "DeviceLoanS15Benefit": "-4457.441666631",  "DeviceName": "Doro 8050",  "DeviceStorageInteger": "0",
"DeviceType": "Handset",  "DisplayName": "Doro 8050",  "Duration": "0",  "FixedProductEnabledChannel": "InboundCC|Web",
"FixedProductEnabledOrderTypes": "Upgrade|Flexi Upgrade|New Acquisition",  "FixedProductEnabledTeam": "Save|SuperSave|Omni",
"HandsetCost": "4999",  "HandsetCostExVAT": "4165.8333333",  "HandsetLoanPrice": "0",  "HandsetLoanPriceExVAT": "0.0000000",
"HandsetModel": "Doro Placeholder",  "Identifier": "H_201769",  "Index": "1",  "IsFixed": "false",  "IsRecommended": "false",
"IsWatchSubscription": "false",  "MaxTenure": "0",  "MaxUpfrontCost": "0",  "MinTenure": "0",  "MinUpfrontCost": "0",  "Name": "Doro


Placeholder",  "NearlyNew": "false",  "PriceType": "TOTAL_COST",  "ProductCode": "201769",  "ProductName": "Doro Placeholder",
"ProductRecommendationType": "Handset",  "pxDecisionReference": "-212978131 1672641303433123110",  "pxDecisionTime":
"20220218T064317.494 GMT",  "pxIdentifier": "///",  "pxInteractionID": "1672641303433123110",  "pxObjClass": "VFUK-AOMFW-SR",
"pxPriority": "141501.0",  "pxRank": "1",  "pxUpdateDateTime": "20220218T063034.102 GMT",  "pyApplication": "AOM_Branch2",
"pyApplicationVersion": "01.01.01",  "pyComponent": "Check If any Record Available",  "pyDivision": "Consumer",  "pyInteraction":
"GetProductList",  "pyOperator": "hemanth.gaddam@adqura.com",  "pyOrganization": "VFUK",  "pyPreviousComponent": "Check If any
Record Available",  "pyStrategy": "GetProductList",  "pySubjectID": "-212978131",  "pySubjectType": "VFUK-FW-AOMFW-Data-
Subscription",  "pyUnit": "BaseMarketing",  "pzADMInputSource": "modelReferences",  "pzMarkers": null,  "RankPosition": "1",
"RecommendedDeviceIsFixed": "false",  "ResponseType": "Item",  "Team": "Save",  "UpliftCost": "291.608333331",  "ValueDecimal": "0",