2949
Store IH Reporting fields in IH Reporting table
Description
HouseKeeping CaseType delete the records from tables in Purge Historical Data activity by connecting PurgeData connector acourding to
HouseKeepingRetentionPeriodDay value for IH in AOMConfig.
Change Set
1.Create a new class is called VFUK-FW-AOMFW-Data-InteractionHistoryReporting
This class is mapped to interaction_history_reporting_v  view that is created from pr_data_ih_fact_reporting database table.
Column name Column Type Property name Property Type
ihrid (PK) VARCHAR IHRId Text
subscriptionid VARCHAR SubscriptionId Text
outcometime TIMESTAMP OutcomeTime DateTime
createts TIMESTAMP CreateTs DateTime
interactionid NUMERIC InteractionId Decimal
caseid VARCHAR CaseId Text
currentaddonlist VARCHAR CurrentAddonList Text
recommendedaddonlist VARCHAR RecommendedAddonList Text
simopathwaymodelattributes VARCHAR SIMOPathwayModelAttributes Text
ivrcallreason VARCHAR IVRCallReason Text
prepaypostpaytype VARCHAR PrepayPostpayType Text
consumerenterpriseflag CHAR ConsumerEnterpriseFlag Text
mmsmarketingconsentflag CHAR MMSMarketingConsentFlag Text
smsmarketingconsentflag CHAR SMSMarketingConsentFlag Text
obcmarketingconsentflag CHAR OBCMarketingConsentFlag Text
locationdataconsentflag CHAR LocationDataConsentFlag Text
trafficdataconsentflag CHAR TrafficDataConsentFlag Text
profilingconsentflag CHAR ProfilingConsentFlag Text
emailmarketingconsentflag VARCHAR EmailMarketingConsentFlag Text
whitemailmarketingconsentflag VARCHAR WhiteMailMarketingConsentFlagText
deceasedflag VARCHAR DeceasedFlag TextClass Mapping


2950
2. Update  VFUK-FW-AOMFW-Data-InteractionHistory • PostgreSQL • PurgeData SQL Connector to delete some records from new db
table is called pr_data_ih_fact_reporting according to value, comes from AOM Config Type as
HousekeepingRetentionPeriod
There are no changes in AOMConfig value so inputs are same like the existing for IH.

 surveymarketingconsentflag VARCHAR SurveyMarketingConsentFlag Text
digitalflag VARCHAR DigitalFlag Text
voicebiometricflag VARCHAR VoiceBiometricFlag Text
socialmediaconsentflag VARCHAR SocialMediaConsentFlag Text
parentdivision VARCHAR ParentDivision Text
parentposition VARCHAR ParentPosition Text


2951
Case Dependencies
SpineLoader SpineLoader,MSLoader,SpineV2Loader,Batch
NBAMultiple SpineLoaders should not be running in-parallel and
they update the same tables
BatchNBA which uses the Spine data should not be running
when the SpineLoader is running as the data might be
updated during the process which will push the system into
data in-consistency
MSLoader- <<TBD>>
SpineV2Loader-<<TBD>>
SpineV2Loader SpineLoader,MSLoader,SpineV2Loader,Batch
NBAMultiple SpineLoadersV2 should not be running in parallel
and they update the same tables
BatchNBA which uses the SpineV2 data should not be
running when the SpineLoaderV2 is running as the data
might be updated during the process which will push the
system into data in-consistency and un-intended results.
MSLoader- <<TBD>>
SpineLoader-<<TBD>>
MSLoader MSLoader,SpineLoader,SpineV2Loader,Batch
NBAMultiple MSLoader should not be running in parallel and they
update the same tables
BatchNBA uses the Model data as part of processing hence
the data should not be running in the due course to avoid
any in-consistencies
SpineLoader- <<TBD>>
SpineLoader-<<TBD>>
CCRLoader CCRLoader Multiple CCRLoader should not be running in parallel and
they update the same tables

EventLoader EventLoader Multiple EventLoader should not be running in parallel and
they update the same tables
BatchNBA BatchNBA,SpineLoader,SpineV2Loader,MSLo


BatchNBA BatchNBA,SpineLoader,SpineV2Loader,MSLo
aderBatchNBA- Multiple BatchNBA cases should not be running
as source and target data sources are configured to be used
by parallel process.
SpineLoader/SpineV2Loader/MSLoader which updates the
Spine data should not be running when the BatchNBA which
is performing decisions against data which can’t be updated
during the process which will push the system into data in-
consistency and un-intended results.
IHExtractor IHExtractor,SpineLoader,SpineV2Loader SpineLoader and SpineV2Loader would load the responses
from different channel which should not be picked up by the
extractor which is running in the due-courseConfigName ConfigValue Dependency Reasons


2952
 BatchNBAExtractor BatchNBAExtractor,CCDExtractor,SpineLoader
,SpineV2Loader,BatchNBABatchNBAExtractor- Multiple BatchNBAExtractor cases
should not be running as the source and target data sources
are not configured to be used by parallel processes by
design and requirement
CCDExtractor CCDExtractor,SpineLoader,SpineV2Loader,Bat
chNBATBD
T2SExtractor T2SExtractor TBD
HousekeepingPurgeDa
taHousekeepingPurgeData HousekeepingPurgeData-Multiple HousekeepingPurgeData
should not be running in parallel and they delete/update the
same tables
PurgeDataHousekeepi
ngPurgeDataHousekeeping PurgeDataHousekeeping-Multiple PurgeDataHousekeeping
should not be running in parallel and they delete/update the
same tables
PurgeFilesHousekeepi
ngPurgeFilesHousekeeping PurgeFilesHousekeeping-Multiple PurgeFilesHousekeeping
should not be running in parallel and they delete/update the
same file
RefreshSpinesHousek
eepingRefreshSpinesHousekeeping RefreshSpinesHousekeeping-Multiple
RefreshSpinesHousekeeping should not be running in
parallel and they  delete/update the same tables


2953
GetNBA Response Mapping For IVR
Definition
Implementation
Detail Section
Actions Section
Definition
IVR integration requires to populate list of values for ActionList.Detail & ActionList.Actions sections.
Related attributes should be set by logic & App work required to use those values to generate the response.
ActionList Update
Detail
Will be mapped from TreatmentAttributes field - complex repeating - optional
Name-value pair
{"MSG_ID": "1320487", "App-tag": "393746"}
AdoptJSON throwing error with keys contains '-', we should not use that char
Actions
Will be mapped with new Response type: TreatmentActions
ActionTemplateId
ActionTemplateType
ActionOutcome
ActionTemplateDetail - Complex Repeating - Optional
Implementation
Detail Section
Step 11.7 - Map Detail property under ActionList page, by adopting json from SR.TreatmentAttributes
After the Step 11.7:
Create a new Work page to setup Detail
Call AdoptJSONIntoProperty function to process json input (SR.TreatmentAttributes into TextValueGroup property)
After call the function, there is error handling step checks the inputs came from DataFlow as a response if the inputs are not propery throw an error with the existing 2004 ErrorCode and new
ErrorMessage as below:
Error in GetNextBestActions: Error in AdoptJSONIntoProperty: Failure whilst adopting json- ACT TESTTTT Invalid clipboard stream detected in module (unspecified). Reason: (unspecified)"
ErrorMessage
ACT TESTTTT is what returns form logic as SR.TreatmentAttributes
Loop through the TextValueGroup


2954
Create Detail page and Update values from TextValueGroup
Append the page to ActionList- ActionList.Detail(<APPEND>)
Do above work only if SR.TreatmentAttributes is not empty

Actions Section
Step 11.6 - Add a new Response type handler , jump to a new step called ‘TAC’
ResponseType : TreatmentActions
Step 11.14 - Update to jump ALG
TAC step - Add a new step just right after 11.14 to handle TreatmentActions response Type
Create new page called Actions within the class: VFUK-AOM-Int-Actions
Map below parameters from SR under Actions page
Id from SR.ActionTemplateId
Outcome from SR.ActionOutcome
Type from SR.ActionTemplateType
 Map Detail property under Actions page, by adopting json from SR.ActionTemplateDetail
Create a new Work page to setup Detail
Call AdoptJSON function to process json input (SR.ActionTemplateDetail and Work page)   and return JSONArrayList
After call the function, there is error handling step checks the inputs came from DataFlow as a response if the inputs are not propery throw an error with the existing 2004 ErrorCode and
new ErrorMessage as below:
Error in GetNextBestActions: Error in AdoptJSON: Failure whilst adopting json- TAC TESTTTTTT Invalid clipboard stream detected in module (unspecified). Reason: (unspecified)"
ErrorMessage
TAC TESTTTTT  is what returns form logic as SR.ActionTemplateDetail
Loop through the JSONArrayList in the  Work page that is created for setup
Create Detail page and Update values from JSONArrayList
Append the page to Actions- Actions.Detail(<APPEND>)
Do above work only if SR.ActionTemplateDetail is not empty
Map Actions page to ActionList.Actions (Similar to ICP step) and jump to ALG step


2955
Apply Volume Constraints for Customers in Control Group
CreateTreatmentVolumeConfig Activity
New properties to added onto  VFUK-FW-AOMFW-Data-TreatmentVolumeConfig and  VFUK-FW-AOMFW-Data-SubChannelVolume
Below are the property
ControlVolume Property to be added on VFUK-FW-AOMFW-Data-SubChannelVolume
TotalControlVolume Property to be added on VFUK-FW-AOMFW-Data-TreatmentVolumeConfig
Rename old Properties, TotalVolume on VFUK-FW-AOMFW-Data-TreatmentVolumeConfig to TotalTargetVolume
Rename old Properties, Volume on VFUK-FW-AOMFW-Data-SubChannelVolume to TargetVolume
Actvitty will re-use the existing logic to prepare data volume data for both control and target for each treatment.
ApplyVolumeConstraints Flow

New Sub-flow, ApplyVolumeDistribution is introduced which applies the distribution logic for both control group and target group
customers.VFUK-FW-AOMFW-Data-
TreatmentVolumeConfigTreatmentName
SubChannelCount
TotalTargetVolume (Renamed from Total Volume )
TotalControlVolume (New Property)
SubChannelVolumeList (VFUK-FW-AOMFW-Data-SubChannelVolume)
Name
TargetVolume (Renamed from Volume )
ControlVolume (New Property)
Activity CreateTreatmentVolumeConfig- Need to be modified to caclulcate the new values for control using
the TreatmentsForOB DatasetClass Name Properties


2956

Existing Activity, ApplyOutboundVolumeLimit has a new parameter VolumeType.
If VolumeType is “Control” then ApplyOutboundVolumeLimit truncates VolumeConstrainedData and applies the distribution for
customers in Control group.
If VolumeType is “Target” then ApplyOutboundVolumeLimit which applies the distribution for customers in Target group.
Activity with above two parameters will update VolumeConstrainedData dataset post distribution logic applies and the
TargetSubChannel will be set as output of this activity for all the customer which are well with-in total volume for the respective control or
target groups.
Data will be picked-up by TreatmentName and PotentialControlFlag for each treatment in TreatmentVolumeConfig Page and the
distribution logic is applied for the control which will be driven by the value in  PotentialControlFlag,
ApplyOutboundVolumeLimit with Control parameter activity apply distribution for the control group when PotentialControlFlag value
as ‘Control’,
ApplyOutboundVolumeLimit with Target parameter activity apply distribution for the Target group when PotentialControlFlag value
as ‘Target’
New Column to be added
TreatmentsForOB
This dataset has treatments, sub-channels and their volume limit:
Class Name VFUK-FW-AOMFW-Data-TreatmentsAfterDedupe
Columns TreatmentName (required) - text
SubscriptionId (required) - text
OfferVariant (required) - text
TreatmentVariant (required) - text
VolumeConstraintsPriority - double
OfferName- text
Channel- text
TargetSubChannel - text
PotentialControlFlag- text  (Control/Target)
Table Name treatments_after_dedupe
Dataset Names TreatmentsAfterDedupe
VolumeConstrainedDataRule Type Name


2957
Below is the TreatmentsForOB Dataset sample data view for single treatment( Source/Input data for the CreateTreatmentVolumeConfig
activity)
TreatmentVolumeConfigList
Below is the TreatmentVolumeConfigList sample data veiw for single treatment( Target/Output data of the
CreateTreatmentVolumeConfig activity)
BestOBTreatmentsAfterDedupe
This dataset contains only OutboundCC treatments or Treatments with subchannel recordsAddMobilewithhandset_Outboun
dCCConcentrix 18 2
AddMobilewithhandset_Outboun
dCCResq 27 3
AddMobilewithhandset_Outboun
dCCWebhelp 36 4
SummerDiscount_OutboundCC NA 90 10pyName (TreamentName) TargetSubChannel TargetVolumeLimit ControlVolumeLimit
AddMobilewithh
andset_Outbou
ndCC3 81 9 SubChannelsVolumeList {Name: ResQ; TargetVolume
:18,ControlVolume :2}
SubChannelsVolumeList {Name: Concentrix; TargetVolume
:27,ControlVolume :3}
SubChannelsVolumeList {Name: Webhelp; TargetVolume
:36,ControlVolume :4}
SummerDiscou
nt_OutboundCC0 90 10 SubChannelsVolumeList {}TreatmentNam
eSubChannelsC
ountTotalTargetVo
lumeTotalControlVol
umeSubChannelsVolumeList
AddMobile
withhands
et_Outbou
ndCC1-
HLZKOO
39OfferVaria
ntDefaultAdCons 86.16677
76Outbound
CCUnknown-
InLife44753454
7908XSL009-
T0004Control
AddMobile
withhands
et_Outbou
ndCC1-
HLZKOO
38OfferVaria


withhands
et_Outbou
ndCC1-
HLZKOO
38OfferVaria
ntDefaultAdCons 49.84937
49Outbound
CCUnknown-
InLife44753454
7907XSL009-
T0004Control
AddMobile
withhands1-
HLZKOOOfferVaria
ntDefaultAdCons 76.84657
69Outbound
CCUnknown-
InLife44753454
7906XSL009-
T0004Control  pyName
(Treatme
ntName)pySubjec
tId
(Subscri
ptionId)OfferVari
antTreatmen
tVariantVolumeC
onstraint
sPriorityChannelIntent ServiceIdTreatmen
tIdPotential
ControlFl
ag<<Rest
of SR
Propertie
s>>


2958
TreatmentsAfterDedupe
This new database table dataset is skinny version of above dataset with limited properties required to perform volume constraints.et_Outbou
ndCC37
AddMobile
withhands
et_Outbou
ndCC1-
HLZKOO
36OfferVaria
ntDefaultAdCons 93.75869
34Outbound
CCUnknown-
InLife44753454
7905XSL009-
T0004Target
AddMobile
withhands
et_Outbou
ndCC1-
HLZKOO
35OfferVaria
ntDefaultAdCons 67.75893
19Outbound
CCUnknown-
InLife44753454
7904XSL009-
T0004Target
AddMobile
withhands
et_Outbou
ndCC1-
HLZKOO
34OfferVaria
ntDefaultAdCons 21.95760
28Outbound
CCUnknown-
InLife44753454
7903XSL009-
T0004Target
AddMobile
withhands
et_Outbou
ndCC1-
HLZKOO
33OfferVaria
ntDefaultAdCons 81.85948
30Outbound
CCUnknown-
InLife44753454
7902XSL009-
T0004Target
AddMobile
withhands
et_Outbou
ndCC1-
HLZKOO
32OfferVaria
ntDefaultAdCons 81.28495
03Outbound
CCUnknown-
InLife44753454
7901XSL009-
T0004Target
AddMobile
withhandse
t_Outbound
CC1-
HLZKOO39OfferVariant
DefaultAdCons 86.1667776AddMobil
ewithhan
dsetOutbou


DefaultAdCons 86.1667776AddMobil
ewithhan
dsetOutbou
ndCCControl
AddMobile
withhandse
t_Outbound
CC1-
HLZKOO38OfferVariant
DefaultAdCons 49.8493749AddMobil
ewithhan
dsetOutbou
ndCCControl
AddMobile
withhandse
t_Outbound
CC1-
HLZKOO37OfferVariant
DefaultAdCons 76.8465769AddMobil
ewithhan
dsetOutbou
ndCCControl
AddMobile
withhandse
t_Outbound
CC1-
HLZKOO36OfferVariant
DefaultAdCons 93.7586934AddMobil
ewithhan
dsetOutbou
ndCCControl  Treatment
Name Subscripti
onIdOfferVaria
ntTreatment
VariantVolumeCo
nstraintsPr
iorityOfferNa
meChanne
lPotentialControlFlag TargetSubChan
nel


2959
Inside the existing activity ApplyOutboundVolumeLimit:
Pick a treatment AddMobilewithhandset_OutboundCC from TreatmentsForOB dataset and browse records in TreatmentsAfterDedupe
dataset and sort them by using VolumeConstraintsPriority value and store it in page list TreatmentsAfterDedupe.pxResults as shown
below:
TreatmentsAfterDedupe: Data Limited by VolumeLimit and Sorted by Priority for a given
treatment AddMobile
withhandse
t_Outbound
CC1-
HLZKOO35OfferVariant
DefaultAdCons 67.7589319AddMobil
ewithhan
dsetOutbou
ndCCTarget
AddMobile
withhandse
t_Outbound
CC1-
HLZKOO34OfferVariant
DefaultAdCons 21.9576028AddMobil
ewithhan
dsetOutbou
ndCCTarget
AddMobile
withhandse
t_Outbound
CC1-
HLZKOO33OfferVariant
DefaultAdCons 81.8594830AddMobil
ewithhan
dsetOutbou
ndCCTarget
AddMobile
withhandse
t_Outbound
CC1-
HLZKOO32OfferVariant
DefaultAdCons 81.2849503AddMobil
ewithhan
dsetOutbou
ndCCTarget
AddMobile
withhandse
t_Outbound
CC1-
HLZK
OO36OfferVari
antDefaul
tAdCons 93.7586934 AddMobilewit
hhandsetOutbou
ndCCControl
AddMobile
withhandse
t_Outbound
CC1-
HLZK
OO39OfferVari
antDefaul
tAdCons 86.1667776 AddMobilewit


OO39OfferVari
antDefaul
tAdCons 86.1667776 AddMobilewit
hhandsetOutbou
ndCCControl
AddMobile
withhandse
t_Outbound
CC1-
HLZK
OO33OfferVari
antDefaul
tAdCons 81.8594830 AddMobilewit
hhandsetOutbou
ndCCControl
AddMobile
withhandse
t_Outbound
CC1-
HLZK
OO32OfferVari
antDefaul
tAdCons 81.2849503 AddMobilewit
hhandsetOutbou
ndCCControl
AddMobile
withhandse1-
HLZK
OO37OfferVari
antDefaul
tAdCons 76.8465769 AddMobilewit
hhandsetOutbou
ndCCTarget  Treatment
Name Subs
cripti
onIdOfferVar
iantTreatmen
tVariantVolumeConstrain
tsPriorityOfferName Chann
elPotentialControlFlag TargetSubCha
nnel


2960
Existing Round-Robin distribution logic is re-used and set TargetSubChannel to each record and subset of data is pushed into new dataset
named VolumeConstrainedData
VolumeConstrainedData Datasett_Outbound
CC
AddMobile
withhandse
t_Outbound
CC1-
HLZK
OO35OfferVari
antDefaul
tAdCons 67.7589319 AddMobilewit
hhandsetOutbou
ndCCTarget
AddMobile
withhandse
t_Outbound
CC1-
HLZK
OO38OfferVari
antDefaul
tAdCons 49.8493749 AddMobilewit
hhandsetOutbou
ndCCTarget
AddMobile
withhandse
t_Outbound
CC1-
HLZK
OO34OfferVari
antDefaul
tAdCons 21.9576028 AddMobilewit
hhandsetOutbou
ndCCTarget
AddM
obilew
ithhan
dset_
Outbo
undC
C1-
HLZK
OO36OfferV
ariant
Defaul
tAdCons 93.7586934 AddMobilewithhands
etOutboundCC Concentrix
AddM
obilew
ithhan
dset_
Outbo
undC
C1-
HLZK
OO39OfferV
ariant
Defaul
tAdCons 86.1667776 AddMobilewithhands
etOutboundCC Resq
AddM
obilew
ithhan
dset_
Outbo
undC
C1-
HLZK
OO33OfferV
ariant
Defaul
tAdCons 81.8594830 AddMobilewithhands
etOutboundCC Webhelp
AddM
obilew
ithhan
dset_


etOutboundCC Webhelp
AddM
obilew
ithhan
dset_
Outbo1-
HLZK
OO32OfferV
ariant
Defaul
tAdCons 81.2849503 AddMobilewithhands
etOutboundCC ConcentrixTreat
ment
Name Subs
cripti
onIdOffer
Varia
ntTreatmentVariant VolumeConstraints
PriorityOfferName Channel TargetSubChannel


2961
Then a new dataflow AugmentVolumeConstrained in the next process needs to loop through VolumeConstrainedData dataset and
which will have Keys along with TargetSubChannel property to select full SR record available in BestOBTreatmentsAfterDedupe dataset
and copy the combined SR page (which will have TargetSubChannel) into BestOBTreatmentsAsTarget and BestOBTreatmentsAsControl
datasets as shown below:
BestOBTreatmentsAsTarget DatasetundC
C
AddM
obilew
ithhan
dset_
Outbo
undC
C1-
HLZK
OO37OfferV
ariant
Defaul
tAdCons 76.8465769 AddMobilewithhands
etOutboundCC Resq
AddM
obilew
ithhan
dset_
Outbo
undC
C1-
HLZK
OO35OfferV
ariant
Defaul
tAdCons 67.7589319 AddMobilewithhands
etOutboundCC Webhelp
AddM
obilew
ithhan
dset_
Outbo
undC
C1-
HLZK
OO38OfferV
ariant
Defaul
tAdCons 49.8493749 AddMobilewithhands
etOutboundCC Resq
AddMobilewith
handset_Outb
oundCC1-
HLZKO
O37OfferV
ariant
Defaul
tAdCo
ns76.84
65769Resq Outbo
undC
CUnkno
wn-
InLife44753
45479
06XSL00
9-
T0004Target
AddMobilewith
handset_Outb
oundCC1-
HLZKO
O35OfferV
ariant
Defaul
tAdCo
ns67.75


HLZKO
O35OfferV
ariant
Defaul
tAdCo
ns67.75
89319WebhelpOutbo
undC
CUnkno
wn-
InLife44753
45479
04XSL00
9-
T0004Target
AddMobilewith
handset_Outb
oundCC1-
HLZKO
O38OfferV
ariant
Defaul
tAdCo
ns49.84
93749Resq Outbo
undC
CUnkno
wn-
InLife44753
45479
07XSL00
9-
T0004Target  pyName
(TreatmentNa
me )pySubj
ectId
(Subscr
iptionId
)Offer
Varia
ntTreat
ment
Varia
ntVolu
meCo
nstrai
ntsPri
orityTargetSu
bChann
elChan
nelIntentServic
eIdTreat
mentI
dPotentialCo
ntrolFlag<<Rest of SR
Properties>>


2962
BestOBTreatmentsAsControl Dataset
 AddMobilewith
handset_Outb
oundCC1-
HLZKO
O36OfferV
ariant
Defaul
tAdCo
ns93.75
86934Concentri
xOutbo
undC
CUnkno
wn-
InLife44753
45479
05XSL00
9-
T0004Control
AddMobilewith
handset_Outb
oundCC1-
HLZKO
O39OfferV
ariant
Defaul
tAdCo
ns86.16
67776Resq Outbo
undC
CUnkno
wn-
InLife44753
45479
07XSL00
9-
T0004Control
AddMobilewith
handset_Outb
oundCC1-
HLZKO
O33OfferV
ariant
Defaul
tAdCo
ns81.85
94830WebhelpOutbo
undC
CUnkno
wn-
InLife44753
45479
02XSL00
9-
T0004Control
AddMobilewith
handset_Outb
oundCC1-
HLZKO
O32OfferV
ariant
Defaul
tAdCo
ns81.28
49503Concentri
xOutbo
undC
CUnkno
wn-
InLife44753
45479
01XSL00
9-
T0004Control  pyName
(TreatmentNa
me )pySubj
ectId
(Subscr
iptionId
)Offer
Varia
ntTreat
ment
Varia
ntVolu
meCo
nstrai
ntsPri
orityTargetSu
bChann
elChan
nelIntentServic
eIdTreat


orityTargetSu
bChann
elChan
nelIntentServic
eIdTreat
mentI
dPotentialCo
ntrolFlag<<Rest of SR
Properties>>


2963
Extend BundleEventAPI for Additional Parameters
Description
Changes to BundleEvent API
8.4 REST  Service Updates
Detail Section Mapping
Log Bundle Event - Detail Section
8.4 Service Features (POC)
Service Monitoring
Open API
Enable service SLA  with fallback activity
Use fast processing
Description
Update Bundle Event API with 8.4 REST Service capabilities and enhance it to handle new parameters and log them.
Changes to BundleEvent API
8.4 REST Service Updates
Move existing service to Pega 8.4 REST structure
Use Primary page instead of  AOMIntService - Both Activity & Data Transforms will be updated
Detail Section Mapping
Create Detail property under VFUK-AOM-Int-BundleEvent-Request class: Type as Page List, Page Definition as VFUK-AOM-Int-
NameValuePair (No need to add that to Request validation)
Set Subscription Context Properties for Detail
Loop through Detail page list
Replace ‘-' with '_’ in Name value
Map Value to Context (Name) in Subscription Page
Log Bundle Event - Detail Section
Log update


2964
Create a column in bundle_event table to keep - called ‘detail’  -@Shrin
Data Type: Text
Not Null: Disabled (It can be null)
Create a property within Pega
Name: Detail
Class: VFUK-FW-AOMFW-Data-BundleEvent
Type: Text
Update LogEvent Activity to get Detail as an input
Pass Detail data into LogEvent activity (GetBundleEventDecisionDetails)
8.4 Service Features (POC)
Service Monitoring
 To enable monitoring for this rule, in the Select service monitoring field, select Yes.
a.  If you enable monitoring and you want to include the state of the primary data page in the monitoring results, in the Capture
clipboard state field, select Yes.
b.  Click Submit.


2965
Open API
Use the OpenAPI tab to view the auto-generated OpenAPI Specification (OAS) documentation that describes the REST services that are
included in your service package. The OpenAPI tab displays the REST services in YAML and Swagger.
→ Note that the properties of page list parameters are NA in the document & it should be raised to Pega


2966
Enable service SLA with fallback activity
With below configuration:
After 5 API calls that exceed the maximum duration configured (1 millisecond in that case), it calls Fallback activity until the retry interval
is passed (7 seconds)
Then, retries and calls the API activity again, and calls fallback again if the duration exceeds again and waits for 7 seconds


2967
Use fast processing
Enable the 'Use Fast Processing' option in the Connect-REST Response tab for a method as applicable. This field is displayed when JSON
is selected in the 'Map from' field.
When we use that option in the Response mapping, pxObjClass parameter is returned within the response object. So, we are not
using that within the response mapping
(See the example response below)


2968
AOM RT Aggregated Event Store
Description
As part of relevant system changes AOM needs to support a process to deliver a New Event Store which is easier consumed by Logic.
Implementation / Rules
Class: VFUK-FW-AOMFW-Data-CustomerEvent
Data Sets
Config
Add a new property on ETC  and Mapped EventTypeConfig class SubscriptionId Text  315490593
PrimaryContext Text 291
SecondaryContext Text Undefined
EventTimestamp Text 20181218T170110.000 GMT
Status Text New
Channel Text TIL
Context Text  Property Name Proeperty Type Example Value
CustomerEvents VFUK-FW-AOMFW-Data-CustomerEvent SubscriptionIdStream Data Set Class Key
SubEventType SubEventType EventTypeConfig Text(Single) Key
Read-onlyProperty Name ID Scope Type Options


2969
Track Trigger Event Processes Into New Event Store Process
Description
Update Trigger Event Activity to save events to new Stream Dataset and store events to the new DB table.
Implementation / Rules
Activity
SaveCustomerEvents Activity
The aim of creating the activity is that save records to the new CustomerEvents Dataset.
Paased these values while calling SaveCustomerEvents activity from EventHandler activity as below:
CustomerEASEntry Activity
The aim of creating the activity is that save records to the event_analysis_store DB table.
For more info
Changes on Event Handler Activity
Delete the LoadSubscription step from EventHandlerDataFlows Activty
Add the LoadSubscription step in EventHandler activity to get SubscriptionId to pass as a parameter while Invoking the
SaveCustomerEvents activity.
Call the SaveCustomerEvents activity and check below:
If  SkipLogic. is false then call the SaveCustomerEvents activity else does not call the activity.
if ETC.CIS is true then call the SaveCustomerEvents activity else does not call the activity.
After calling the SaveCustomerEvents activity and CreateEASEntry activity check below:SubscriptionId Subscription.CustomerID
PrimaryContext Primary.EventType
SecondaryContext Primary.SubEventType
EventTimeStamp Primary.EventTimestamp
Channel Local.Channel
Status Local.Status
Context @AOMUtilities.GetJSONOfPage(Work.TextValueGroup)
ErrorStackTrace Work.ErrorStackTraceName Value


2970
IF stepStatusFail or Work.ErrorStackTrace is not null or empty jump to the Error step.
After calling the LoadSubscription activity check below:
If Work.ErrorStackTrace is not null or empty continue to the next step and update status=” Error”  then jump to the Error Step
If Subscription is not found, it makes Activity fail as below:
 There will be ErrorStackTrace property set in LoadSubscription activity.
After calling this activity in EventHandler activity, JUMP Check makes it jump to the Error Step.
Add an error structure on EventHandler Activity as below:
 1075 Error in handled SaveCustomerEvents activity
1076 Error in handled EventHandler activity to catch Primary Error
1077 Error in handled EventHandler activity to handle EventTypeConfig ErrorErrorCode Description


2971
Track BundleEvent Processes into New Event Store Process
Description
Update Bundle Event Process to save events to new Stream Dataset and store events to the new DB table.
Implementation / Rules
Activity
Create an activity SaveCustomerEvents  invoked  from GetBundleEventDecisionDetails Activity
 The aim of creating the activity is that save records to the new CustomerEvents Dataset.
Passed these values while calling SaveCustomerEvents activity as below:
Changes on GetBundleEventDecisionDetails Activty
Invoked  SaveCustomerEvents  activity to save records to CustomerEvents Dataset by using queue
If QueuedBundleFlag is False call the activity, else do not call it.
Invoked CreateEASEntry activity to store records to the  event_analysis_store  db table by using queue
 SubscriptionId Subscription.CustomerID
PrimaryContext Primary.EventType
SecondaryContext Primary.SubEventType
EventTimeStamp Primary.EventTimestamp
Channel Local.Channel
Status Local.Status
Context @AOMUtilities.GetJSONOfPage(Work.TextValueGroup)
ErrorStackTrace  Name Value
1075 Error in handled SaveCustomerEvents activityErrorCode Description


2972
Extend Trigger Event for Sales Order Events
Description
In order to support AOM Visibility of Orders made in varying channels - AOM should provide relative endpoint and structure to be able to
recieve data from source.
The data will need to be stored offline in an event level analysis store for future analysis and requirement building.
Acceptence Criteria
AOM is able to accept Sales Order Events via Trigger Event Interface
AOM is able to log Siebel Order Events in relative Analysis Store
Class Structure & Request Validation
New properties will be added into VFUK-AOM-Int-TriggerEvent class as specified within AOM Interface Spec
Related new classes should be created as below before adding the properties
New Data Transform will be created to make SalesOrder Validation : SalesOrderRequestValidation
AccountNumber mandatory check
SalesOrder section mandatory check
OrderNumber mandatory check
TriggerEventRequestValidation DT will be updated with SalesOrderRequestValidation
ServiceNumber Mandatory condition should be discarded for SalesOrder EventType
EventTypeConfig - New Records
Add below new items to Event Type config data type with a new flag as enabled (For each EventType-SubEventType pairs)
→ StoreRawEvent enabledEventDetail.SalesOrder Create new class VFUK-AOM-Int-TriggerEvent-SalesOrder
EventDetail.SalesOrder.LineItem Create new class VFUK-AOM-Int-TriggerEvent-LineItem
EventDetail.SalesOrder.LineItem.Detail Use existing VFUK-AOM-Int-NameValuePair
EventDetail.SalesOrder.LineItem.Amount Create new class VFUK-AOM-Int-TriggerEvent-Amount
EventDetail.SalesOrder.LineItem.Amount.Pri
ceUse existing class VFUK-AOM-Int-Price
EventDetail.SalesOrder.LineItem.Amount.Dis
countUse existing class VFUK-AOM-Int-Price
EventDetail.SalesOrder.LineItem.ServiceSpe


countUse existing class VFUK-AOM-Int-Price
EventDetail.SalesOrder.LineItem.ServiceSpe
cificationCreate new class VFUK-AOM-Int-TriggerEvent-
ServiceSpecification
EventDetail.SalesOrder.LineItem.ServiceSpe
cification.ServiceLineCreate new class VFUK-AOM-Int-TriggerEvent-ServiceLineRequest Body Section Action Class


2973
(Prepare a csv)
Trigger Event API updates
ProcessTriggerEvent activity
Handle the new EventType = SalesOrder
Set Payload & Event Status parameters
Setup Error Codes for Internal Error Management
Event Processing Updates
ProcessPayload Activity
Handle Sales Order with a new activity: SalesOrderPayloadHandler
Within the SalesOrderPayloadHandler activity, set the SourceIdType & SkipLogic
Setup Error Codes for Internal Error Management

EventHandler Activity
Handle StoreRawEvent  enabled option (Similar to SaveCISEntry) , with a new activity: CreateEASEntry
Update the Event Analysis Store DB with below parameters within the page using input params
EventId (PK) GUID
Identifier (Index) Identifier.AccountNumber
PrimaryContext (Index) Event.Type
SecondaryContext Event.SubEventType
Status Event.Status
Channel Event.Channel
EventTimestamp (Index) Event.EventTimestamp
Payload EventDetail.SalesOrder
Setup Error Codes for Internal Error Management


2974
Event Analysis Store
Below are the details to create event_detail_analysis table
After creation of event_analysis_store table, create a Class, Database Table rule and properties from External Database Class Mappings
wizard.
Create an activity CreateEASEntry which takes all the columns mentioned above as parameters, set default values if any of them are
null/empty and save event_analysis_store table using obj-save method.

Housekeeping:
Create a Connect-SQL rule PurgeData on VFUK-FW-AOMFW-Data-EventAnalysisStore class.
{SQLPage:SQLDiagnostics}
select purge_data('event_detail_analysis', 'event_timestamp',{.RetentionPeriod}::integer)
Add below records in AOMConfig data type to retain data for last 30 days.
 Class Name VFUK-FW-AOMFW-Data-EventAnalysisStore
Columns event_id (pk) - varchar(255) - pyGUID
source_id_type - varchar(255)
source_id (Index) - varchar(255)
primary_context (Index) - varchar(255)
secondary_context  - varchar(255)
status  - varchar(255)
channel - varchar(255)
event_timestamp (Index) - timestamp
payload - text
Table Name event_analysis_storeRule Type Name
HousekeepingRetentionPeriod EventDetailAnalysis 30
HousekeepingSQL EventDetailAnalysis VFUK-FW-AOMFW-Data-
EventAnalysisStoreConfigType ConfigName ConfigValue


2975
Extend parallel spine loads to all spines
Currently, Product Catalogue & Offer Catalogue Loaders have the ability to load the spines parallelly, to be able to continue the load
process if one of the spine load fails.
This update will be applied to all spines, within the Loader case.
Acceptance Criteria:
1. Spines can be loaded in parallel.
2. If one spine load fails (various scenarios to be tested) the other continue to completion
Completed work in DB Level:
Removed entity type - "others"
Configured entity type MS for model_score
Configured entity type SpineV2 for unica_campaign_history
Configured entity type Spine for
account,address,contact,device,product_holding,product_reference,subs_flex_attribute,subs_invoice_charge,subscription,tps

Platform work to do:
Remove "others" and create loader case for MS, Spine, SpiveV2 to run in parallel
With the implementation of this, the following loader entity type can run in parallel - ProductCatalogue, OfferCatalogue, MS, Spine,
SpineV2.
We should call ‘Cancel Loader Case’ process if the case is Aborted/Elapsed  after the Digest Process Started
 For all development, confirmation needed from Shrin


2976
Recommendations Portal
Overview
 Activity changes
GetAgentRecommendations Activity
GetRecommendations Activity
IdentifyPrimarySubscriptionForGR  Activity
Access Management
UI Changes - Recommendations Portal
Screen/Section Details
Assisted Recommendations Input
AOM Management Portal
Assisted Recommendations Error
 Portal Landing Page
Classes
Input
Output
Product
Config
AOM Config
WatchDog Config
Scheduler Config
Alert Config
Overview
  VF Call Centre Agent needs to securely access the AOM Recommendations Portal and retrieve the top two recommendation by entering
the ServiceNumber, AccountNumber, Agent Team to the decisioning layer and displayed as mentioned in the mockup UI
 Activity changes
 Move the common logic/code from AssistedUpgradeTH Activity into VFUK-FW-AOMFW-UI-Assisted.GetRecommendations activity
to support existing Test Harness and UI requests.
AssistedUpgradeTH will be modified to include the invocation to VFUK-FW-AOMFW-UI-Assisted.GetRecommendations activity.
GetAgentRecommendations activity will be invoked from the only UI and this activity will invoke GetRecommendations activity.
Withdraw the existing AssistedUpgradeTH  Activity.
This activity gets invoked by when agent clicks the submit button on recommendation portal that invokes GetRecommendations activity and
filters the recommendation responses on Product Types for Tariff/AddOn/Discount/Handset/Data Device and sorts the list by Recommended
Position and Product Recommendation Type.
Applies To VFUK-FW-AOMFW-UI-Assisted
Ruleset AOMFW-UI
Error Handling Primary Error handler logs the error via CreateErrorLog activity
Setting DisplayMesage returned by logic to display to PortalGetAgentRecommendations Activity


2977
Access Management
Access Group Name:  AOMFW: AssistedAgents
Operator: VFUK.AssistedAgent
Requirements
User should only have access to the Portal
User should have no access to Pega UI Tools - Tracer, Live UI, etc
User should have no access to other areas of Pega outside UI Portal
The portal should be accessible to Business Access Groups.
Access to PilotUI moved to AOM Management Portal
All users having access to AOM Management will have access to PilotUI

UI Changes - Recommendations Portal
Create a new harness that acts as a UI for an agent to search for recommendations. Then create a new portal with the following
configuration
Harness Name: Recommendations
AppliesToClass:  VFUK-FW-AOMFW-UI-Assisted
Portal Name: AssistedRecommendations
Screen/Section Details
Below are the various sections and respective detailsThis activity populates the Subscription, Retention Eligibility by invoking GetRetentionEligibility activity which invokes TIL CRE and current
product holding by invoking TIL GPSL for the requested subscription.  It populates the Primary Subscription for watch upgrade customers by
invoking IdentifyPrimarySubscriptionForGR and populate SubscriptionXCAR for both Primary and secondary subscription.
Applies To VFUK-FW-AOMFW-UI-Assisted
Ruleset AOMFW-UI
Error Handling Primary Error handler logs the error via CreateErrorLog activity
Setting ErrorMessage to display to Portal if SRList is empty
Setting ErrorMessage to display to Portal if SRList contains Logic ErrorsGetRecommendations Activity
This activity populates the current product holding that checks if there is one number secondary product exists in child products for the
upgrading subscription by checking the configured product codes in AOMBusiness Config (ConfigType:OneNumberProductList,
ConfigName:Secondary)


ConfigName:Secondary)
Applies To VFUK-FW-AOMFW-UI-Assisted
Ruleset AOMFW-UI
Error Handling Primary Error handler logs the error via CreateErrorLog activityIdentifyPrimarySubscriptionForGR  Activity


2978
Assisted Recommendations Input
This section will capture inputs need to get the recommendations
ButtonsSearchRecommendations Output,Input, Error VFUK-FW-AOMFW-UI-Assisted Contains input, output and
error sections
Input N/A VFUK-FW-AOMFW-UI-Assisted All the input
Output Recommendation

 VFUK-FW-AOMFW-UI-Assisted Contains Recomandation
section to display every
recomendations
Recommendation Product VFUK-FW-AOMFW-UI-
RecommendationContain all values for each
recommendation
Product N/A VFUK-FW-AOMFW-UI-Product Contain ProductType,
ProductName, Cost,
ProductID and Tenure value
Error N/A VFUK-FW-AOMFW-UI-Assisted Contains error details
Header N/A VFUK-FW-AOMFW-UI-Assisted Contain Header for portalSection Name Sub Sections Class Details
ServiceNumber Integer TextBox Should be a number and
of 447 formats
Should be 12digitsY
AccountNumber Integer TextBox Should be a number Y
AgentDepartment String DropDown LOV: Pro Active
Retention, In-Life
Retention, Retail,
Outbound Retention,
Customer Saves,
Wepchat Upgrades, High
Value Retention, Pilot
Division 1, Vodafone
Black Sales, Webchat In-
life, Hypercare,
FUT,Customer Relations,
Customer Retention,
Webchat SavesY: Required If Channel
is Retail or InboundCC

Channel String DropDown LOV: InboundCC, Web,
RetailY
SubChannel String DropDown LOV: PilotIUI, VADR Y
PrimaryContext String NA Default disappear from UI


PrimaryContext String NA Default disappear from UI
SecondaryContext String NA Default NBA disappear from UIName Type UI Component Validation Mandatory


2979
Submit - OnSubmit will invoke VFUK-FW-AOMFW-UI-Assisted.GetAgentRecommendations activity.
While GetAgentRecommendations activity is invoking, AccountNumber, ServiceNumber, and AgentDepartment properties are
mapped to parameters of this activity, and "PilotUI" static value is set to Subchannel parameter.
Clear - OnSubmit  will clear the input, output, and error data so that the user can check the recommendations for another
customer/account

AOM Management Portal
There is a Menu Item for Pilot UI - Assisted in AOM Management Portal for where agent navigates to Search Recommendations section,
The recommendation is the sections to display the output data as in the below.


2980

Assisted Recommendations Error
 It is an optional section that will be displayed in case of any error in retrieving the recommendations for the input data.
Error Message will be populated what is set in ErrorStackTrace coming from GetRecommendation Activity.
The warning that is red color in the below is displaying for validation error, and submit button will not able to click in till enter validate number
into the Customer MSISDN field and Customer Owner Account Number.

 Portal Landing Page


2981
Classes
Input
Class structure for the Recommendations input
ClassName: VFUK-FW-AOMFW-UI-Assisted
Properties:
ServiceNumber
AccountNumber
AgentDepartment
Channel
PrimaryContext
SecondaryContext
Output
Class structure for the Recommendations Output
ClassName: VFUK-FW-AOMFW-UI-Recommendation
Properties:
Rank
Type
TotalCost
Products ( List of Products of type VFUK-FW-AOMFW-UI-Product)
Product
Class structure for Product
ClassName: VFUK-FW-AOMFW-UI-Product
Properties:
Cost
ProductID
ProductName
ProductType
Tenure
IsPromotion
Config
AOM Config
WatchDog ConfigCaseId AssistedRecommendationErrorsWatchDog
CaseStatus AssistedRecommendationErrorsWatchDog Completed
SkipCaseFinaliseEmail AssistedRecommendationErrorsWatchDog TRUEConfigType ConfigName ConfigValue


2982
Scheduler Config
Alert ConfigAssistedR
ecommend
ationErrorsVFUK-FW-
AOMFW-Data-
AOMError IdentifyBusinessL
ogicErrorsError Identification of
Errors while
retrieving
Assisted
Upgrade
Recommendatio
ns{"IntervalPeri
od":"1","Inter
valType":"ho
urs","ErrorCo
des":"\"1105\"
,\"1106\",\"11
07\""}TRUE CSVName ClassName SQLR
uleReportDefinition SeverityDescription DynamicPara
metersIncludeAsAtta
chmentAttachmentTyp
e
CaseIgnitor {"CaseSubType":"As
sistedRecommendati
onErrors"}VFUK-FW-AOMFW-
Work-WatchDog* 0 * ? * * * FALSE WatchDogActivityName ActivityParameters ClassName CronExpression Enabled Type
AssistedRecommendationErrors WatchDog All
AssistedRecommendationErrors WatchDog Error
AssistedRecommendationErrors WatchDog Fatal
AssistedRecommendationErrors WatchDog Info
AssistedRecommendationErrors WatchDog Success
AssistedRecommendationErrors WatchDog WarningAlert Process Severity


2983
651840 & 651806 - Enable Device & Watch Recommendations
Remove Filter of SR Page Results to allow inclusion of Handset.

Applies To VFUK-FW-AOMFW-UI-Assisted
Ruleset AOMFW-UI
 Update filter of SR results so that Handset is included as well as Tariff, Discount and AddOn (Step 4).( Add
ResponseType= Handset to filter)
For Handset, need to default Cost to 0 (if value is returned in SR). (Step 6.4)Activity- GetAgentRecommendations

Applies To VFUK-FW-AOMFW-UI-Assisted
Ruleset AOMFW-UI
Changes Replace GetSubscription with GetSubscriptionsForOwnerAccount ( Ref to VFUK-AOM-Int-
Services.GetCustomer Activity )
Remove Step 6 and 7 ( Invoking GetRetentionEligibility API and Append the RetentionEligibility Page onto
Subscription Page)
Remove Step 9 to 15 and replace with AssembleSubscriptionXCAR Activity
Update Step 16 to retrieve the data for the Param.ServiceNumber from XCAR
Add Logic to Set the Watch
Get the config values from AOMBusinessConfig for Type: OneNumberProductList - Secondary
Split the products with comma, store in text value list called SecondaryProductList
Iterate through the ProductRoot List of the Upgrading Subscription loaded
Check for @String.equalsIgnoreCase(ProductRoot.FulfilmentItemCode,"Mobile Service")
Iterate through the child products matching the above product
If Product Id of ChildProduct matches SecondaryProductList value
Call GetSubscription for the ChildProduct.InstallId
Set Subscription .Context("PrimarySubscriptionId")=WatchSubscription.SubscriptionId Activity- GetRecommendations


2984
Provide the ability to define and manage an effective FUT Cohort within AOM for
Treatments
D_GetSeedUserFromTagList Datapage:
Parameters:
ServiceNumber
SeedUserTags (Comma Separated)
Cache:
1 Day
Source:
GetSeedUserFromTagList Activity
GetSeedUserFromTagList Activity:
Browse Seed User data with given ServiceNumber parameter.
Loop through browse results.
Check if SeedUserTags parameter values exists in Tags column values in current SeedUser record in datatype.
If exists, then copy current seed user page to datapage D_GetSeedUserFromTagList and exit from the loop.
Otherwise check the same for all the browse results.


2985
Provide Better Alignment of AOM Logging Processes (AOM-1797)
New property definitions:
audit_id - this is a unique reference to the audit log entry to provide a unique primary key on table
process_name - this is the name of the overlaying service
ProcessSMSOrderDetails
ProcessTriggerEvent
GetBundleEventDecisionDetails
GetNextBestAction
SetNextBestAction
GetRecommendedProductList
TealiumWebhook
MailjetWebhook
source_id_type - this is the type of source id present in the system
source_id - this if present should be the transaction id from the service or relative identifier of the audit from 3rd party
identifier_type - this is the identifier type present in the request
identifier - this is the identifier of the individual transaction if needed
request_ts - this is the timestamp from the originating system
start_timestamp - this is the timestamp from when AOM started processing request
end_timestamp - this is the timestamp from when AOM completed processing request
channel_context - this is the channel in which originated the call - this is only relevant for channels when passed into the request itself
subchannel_context - this is the sub channel in which originated the call
primary_context - this is the top level primary context of the request
GetBundleEventDecisionDetails: NTID
GetNextBestAction: PrimaryContext
ProcessTriggerEvent: EventType
TealiumWebhook: PageURL
MailjetWebhook: EventType
secondary_context - this is the second level context of the request
GetBundleEventDecisionDetails: BundleID if NTID 241
GetNextBestAction: SecondaryContext
ProcessTriggerEvent: SubEventType
TealiumWebhook: PageName
status - this is the overaching status code of the request
status_code - HTTP status code
status_message - any relevant status message required


status_code - HTTP status code
status_message - any relevant status message required
metadata - this is the request body itself
Logging Standards:
Type Audit
LogError
LogSourceIdType Identifier Type


2986

Additional Columns/Properties added to aom_audit table and AOMAudit class:
Changes to CreateAuditLog activity:
Added all the above properties as additional parameters
Existing Status parameter is deprecated hence whatever the value passed to Status will come into StatusCode (HTTP code). Eventually
Status column/Property will be removed.
Prepared a string outputted similar to below key value pair in a Log-Message method with Logging Level as InfoForced
Metadata Column should not be presented.
Key Names Should be unique
Values should be encapsulated in Quotes.
Example:
PROCESS_NAME="GetNextBestActions", SOURCE_ID_TYPE="TransactionId", SOURCE_ID="4a8a9851-8091-4995-bc27-
f55154392f6a6", IDENTIFIER_TYPE="AccountNumber", IDENTIFIER="204521548", REQUEST_TS="20200329T004604.117 GMT",
START_TS="20210331T093825.225 GMT", END_TS="20210331T093829.041 GMT", SOURCE_SYSTEM="TIL", CHANNEL="Retail",
SUBCHANNEL="Basket", PRIMARY_CONTEXT="TradeIn", SECONDARY_CONTEXT="Upgrade", STATUS_CODE="520",
STATUS_MESSAGE="Error in GetNextBestActions: Business Logic Error: NO Decision"
Additional Columns/Properties added to aom_error table and AOMError class:Inbound API Requests yes yes TransactionId (Request
TransactionId)ServiceNumber or AccountNumber as relevant Determined
by Service
Outbound API Requests yes yes TransactionId (AOM
Generated TransactionId)ServiceNumber or AccountNumber as relevant Determined
by Service
Case Processing no yes CaseId
File Loading yes yes FileName
File Extraction no yes FileName
Internal Processing no yes ?
source_id_type varchar(100) no SourceIdType


Internal Processing no yes ?
source_id_type varchar(100) no SourceIdType
identifier_type varchar(100) no IdentifierType
identifier varchar(100) no Identifier
request_ts timestamp no RequestTimestamp
channel_context varchar(100) no ChannelContext
subchannel_context varchar(100) no SubchannelContext
primary_context varchar(255) no PrimaryContext
secondary_context varchar(255) no SecondaryContext
status_code varchar(100) no StatusCode
status_message text no StatusMessage
metadata text no MetadataColumn Name Type Mandatory Property Name


2987
Changes to CreateErrorLog activity:
Added all the above properties as additional parameters
Existing MSISDN, NTID parameters are deprecated hence wherever these values are not null then copying them into Identifier and
PrimaryContext. Eventually MSISDN, NTID Columns/Properties will be removed.
Prepared a string outputted similar to below key value pair in a Log-Message method with Logging Level as InfoForced
Metadata Column should not be presented.
Key Names Should be unique
Values should be encapsulated in Quotes.

Example:
PROCESS_NAME="GetNextBestActions", SOURCE_ID_TYPE="TransactionId", SOURCE_ID="4a8a9851-8091-4995-bc27-
f55154392f6a6", IDENTIFIER_TYPE="AccountNumber", IDENTIFIER="204521548", REQUEST_TS="20200329T004604.117 GMT",
ERROR_TS="20210331T093829.039 GMT", SOURCE_SYSTEM="TIL", CHANNEL="Retail", SUBCHANNEL="Basket",
PRIMARY_CONTEXT="TradeIn", SECONDARY_CONTEXT="Upgrade", ERROR_CODE="2005", ERROR_MESSAGE="Error Message is
not displayed as it contains PII data. Please check aom_error database table for actual error message"
If SkipLogToFile parameter is true, then display relevant message  in logs as shown above instead of displaying actual error message
Changes to GetNextBestActions activity:
Populate/Pass all the required values for the new parameters in CreateAuditLog and CreateErrorLog activities.
Relevant Watchdog report definition updates:process_name varchar(255) no ProcessName
source_id_type varchar(100) no SourceIdType
source_system varchar(100) no SourceSystem
identifier_type varchar(100) no IdentifierType
identifier varchar(100) no Identifier
request_ts timestamp no RequestTimestamp
channel_context varchar(100) no ChannelContext


request_ts timestamp no RequestTimestamp
channel_context varchar(100) no ChannelContext
subchannel_context varchar(100) no SubchannelContext
primary_context varchar(255) no PrimaryContext
secondary_context varchar(255) no SecondaryContextColumn Name Type Mandatory Property Name
IdentifyBusinessLogicErrors MSISDN IdentifierType,Identifier Error
IdentifyFailedRecords MSISDN IdentifierType,Identifier Error
IdentifyInvalidParameterRecordsMSISDN IdentifierType,Identifier Error
IdentifyNBABusinessLogicErrorsMSISDN IdentifierType,Identifier Error
IdentifyNBAInvalidRequests MSISDN IdentifierType,Identifier ErrorWatchDog RD's Existing Column New Column to replace On Class


2988

 IdentifyLongRunningProcess Status StatusCode Audit


2989
Simulation Orchestration

Overview
Types
Execution Modes
Inputs
Simulation Case
Audiance
BatchNBA:
Build Subscription V iew
Inbound :
GetNBA
TIL
Baseline Runs
Dataset
DataFlow
Customer Run
Output
Post Processing Queries
For Distribution Simulation
For Funnel Simulation
For Customer Simulation
HouseKeeping
inbound_subscription_context table
bundle_event_context table
simulation_funnel_audit, simulation_funnel_batchnba, simulation_funnel_getnba, simulation_funnel_til
AOM Config

Overview
We use simulation to simulate the decisioning for customers in batch and realtime customers. The OOB need some manual steps to get the
desired summary output. The Simulation case automates the process.
Types
Currently, the simulation case supports 3 types of simulation Types
1. Funnel
2. Distribution
3. Customer
Execution Modes
The simulation supports following execution modes:
1. BatchNBA : Simulation is executed for the selected customers who are in AOM subscription spine
Segments are used for customer selection
2. GetNBA: Simulation is executed for the selected customer who have interacted via GetNBA API.


2990
Customer along with context are stored in inbound_subscription_context table as part of GetNBA call which will be source for
GetNBA simulation.
3. TIL: Simulation is executed for the selected customer who have interacted via GetBundleEvent API.
Customer along with context are stored in bundle_event_context table as part of call which will be source for TIL simulation.
Inputs
Below are the inputs from the caseignitor to the simulation case
Simulation Case Segment Y - If Execution Mode = BatchNBA This is the segment name on which the
simulation needs to be run.
RefreshSegment N This says whether we need to run the
segment, either True or False
SimulationType Y This says which type of simulation we need
to run, either Funnel or Distribution or
Customer
BaseLineRun N The boolean says whether the current
simulation is baseline run
ExecutionMode Y This says whether we need to run BatchNBA
or GetNBA or TIL
Channel Y - if Execution Mode = GetNBA Channel for Simulation Test
SubChannel Y - if Execution Mode = GetNBA Sub Channel for Simulation Test
PrimaryContext N Primary Context for Simulation Test
SecondaryContext N Secondary Context for Simulation Test
NITD Y - if Execution Mode = TIL NITD for Simulation Test
RequestStartDate Y - if Execution Mode = GetNBA / TIL Start Date of Records to Run
RequestEndDate Y - if Execution Mode = GetNBA / TIL End Date of Records to Run Parameter Mandatory Description
Setup
 Initialise Simula
tion
 Sets the values required for the case to on the case
page
Check if any simulation running
Sets ConfigValue = true for ConfigName
CataloguePush
 Always Snooze
Configurable
Loop Count
 Elapse Call existing


CataloguePush
 Always Snooze
Configurable
Loop Count
 Elapse Call existing
Initialise flow

Truncate
Baseline DataTruncate BaselineSimulation and
BaselineSimulationExport Data SetBaselineRun
is trueNotify
Support  Stage Step Functionality Condition Error/Adver
se Process Comments


2991
&
ExecutionMo
de =
BatchNBA
Truncate
Inbound
Baseline DataIf ExecutionMode = “GetNBA”
Truncate BaselineSubscriptionDataForGetNBA and
BaselineGetNBASimulationExport DataSet
Else If ExecutionMode = “TIL”
Truncate BaselineSubscriptionDataForTIL and
BaselineTILSimulationExport DataSetBaselineRun
is true
&
ExecutionMo
de =
GetNBA or
TILNotify
Support flow
Truncate
Customer
SimulationIf CustomerSimulation is true, then Stop
ProcessSimulationDropOffStatus Data flow and
Truncate SimulationDropOff dataset
SimulationTy
pe =
Customer New Step
Pre-Process
 Check Baseline
Data SetCheck if BaselineSimulation dataset has data UseBaseline
Data is true
&
ExecutionMo
de =
BatchNBA
 If no Data
Present,Abo
rt Case
Notify
Support if
error occurs
Check Inbound
Baseline Data
Set If ExecutionMode = “GetNBA”
Check if BaselineSubscriptionDataForGetNBA
dataset has data
Else If ExecutionMode = “TIL”
Check if BaselineSubscriptionDataForTIL data set
has dataUseBaseline
Data is true
&
ExecutionMo
de =
GetNBA or
TIL
Check Segment Call activity CheckSegment where it checks
If segment exists and
if RefreshSegment is false check Segment
does run today (2.8)
Call activity CheckSegmentRunStatus where it
checks if segment is still running
Snooze while Segment is runningIf
UseBaseline
Data is false
and Paramet
er for
Refresh
Segment is
true


Data is false
and Paramet
er for
Refresh
Segment is
true
&
ExecutionMo
de =
BatchNBA
 If the
segment
does not
exist and
has not
been Run
elapse the
case
Notify
Support if
Still Running
for a long
time  .
Run Segment Executes segment rule with the name passed in
SegmentName parameterUseBaseline
Data is If Segment
Doesn’t


2992
Call Activity RunSegment, which calls Rule-Obj-
Report-Definition-Segment.ExecuteSegment activity
by passing the SegmentName.false &
RefreshSeg
ment is true
&
ExecutionMo
de =
BatchNBA Exist: Abort
Flow
If Segment
Run Fails
Notify
Support
Call activity CheckSegmentRunStatus where it
checks if the segment is still running
Snooze while Segment is runningParameter
for Refresh
Segment is
true and
UseBaseline
Data is falseNotify
Support if
Still Running
for a long
time

Build
Subscription
 Activity UpdataSubscriptionView will call database
function, update_subscription_v(), to update the
Subscription view
See section Database Functions.UseBaseline
Data is false
&
ExecutionMo
de =
BatchNBA Notify
Support
Build Inbound
Subscription Co
ntextBuild Subscription Data Sets for different simulations
based on Execution mode
If Execution Mode is GetNBA
BuildInboundSubscription activity calls
PrepareSubscriptionsForGetNBASimulation activity
to prepare GetNBA Subscriptions by calling
PrepareSubscriptionsForInboundSimulation DF
If Execution Mode is TIL
BuildInboundSubscription activity calls
PrepareSubscriptionsForTILSimulation activity to
Prepare TIL Subscriptions by calling
PrepareSubscriptionsForTILSimulation
DataFlow
 UseBaseline
Data is false
&&
ExecutionMo
de =
GetNBA or
TILNotify
Support
Setup
Treatment DataUse InitialiseTreatmentBuckets flow
Sets BucketsInitialised to trueAlways Notify
Support

Process  Setup Simulatio
nLoad SubscriptionDataForBatchNBA dataset  by


Process  Setup Simulatio
nLoad SubscriptionDataForBatchNBA dataset  by
executing PrepareDataForBatchNBA dataflow
Snooze while DF is running and Check Status BaselineRun
is false and
UseBaseline
Data is false
&Notify
Support


2993
ExecutionMo
de =
BatchNBA
Setup Baseline
SimulationLoad BaselineSimulation dataset  by executing
PrepareDataForSimulation dataflow,
Snooze while DF is running and Check Status BaselineRun
is true
&
ExecutionMo
de =
BatchNBA  Notify
Support
Setup Inbound
Simulation In the Prepare Data For Inbound Simulation activity
(Start Data Flow):
Truncate SubscriptionDataForGetNBA dataset and
Load SubscriptionDataForGetNBA dataset  by
executing PrepareDataForGetNBA dataflow.
Then, Snooze while is running and Check StatusBaselineRun
is false &
UseBaseline
Data is false
&
ExecutionMo
de =
GetNBA Notify
Support
Wait for a
specific time
while
DataFlow is
running
Setup Inbound
Baseline
Simulation If Execution Mode is GetNBA
Load BaselineSubscriptionDataForGetNBA
dataset  by executing
PrepareBaselineDataForGetNBA dataflow
Snooze while DataFlow is running and Check
Status
Else if Execution Mode is TIL
Load BaselineSubscriptionDataForTIL dataset  by
executing PrepareBaselineDataForTIL dataflow
Snooze while DataFlow is running and Check
Status BaselineRun
is true
&
ExecutionMo
de =
GetNBA or
TILNotify
Support
Wait for a
specific time
while
DataFlow is
running
Create
SimulationCall the CreateSimulation activity which will set
pyOptions, pyDataSource, pyStrategy, and
pyDestinations pages of Data-Decision-Simulations


pyDestinations pages of Data-Decision-Simulations
for running a simulation based on SimulationType
and SimulaitonName parameter. Then call
pzCreateSimulation activity to create work-item and
set SimulationRunID.SimulationTy
pe !=
CustomerNotify
Support If
ExecutionMod
e = BatchNBA
and If
 BaselineRun
or
BaselineData
Run is true
In the
SetSimulationDat
a Data Transform
->
Set dataset to
BaselineSimulat
ion and strategy
to
IdentifyBestOBT


2994
reatmentsByBat
ch
Else if
ExecutionMod
e = BatchNBA
and If
 BaselineRun
or
BaselineData
Run is false
Set dataset to
SubscriptionDat
aForBatchNBA
and Strategy to
IdentifyBestOBT
reatmentsByBat
ch
Else if
ExecutionMod
e = GetNBA
and If
 BaselineRun
or
BaselineData
Run is false
Set dataset to
SubscriptionDat
aForGetNBA and
Strategy to
GetNBAWithInte
nt
Else if
ExecutionMod
e = GetNBA
and If
 BaselineRun
or
BaselineData
Run is true
Set dataset to
BaselineSubscri
ptionDataForGet
NBA and
Strategy to
GetNBAWithInte
nt
Else if
ExecutionMod
e = TIL and If


2995
 BaselineRun
or
BaselineData
Run is true
Set dataset to
BaselineSubscri
ptionDataForTIL
and Strategy to
IdentifyBestTrea
tmentsByTrigge
rs
Else if
ExecutionMod
e = TIL and If
 BaselineRun
or
BaselineData
Run is false
Set dataset to
SubscriptionDat
aForTIL and
Strategy to
IdentifyBestTrea
tmentsByTrigge
rs
Execute
SimulationActivity RunSimulation calls pxSubmitAndRun
activity by passing SimulaitonRunID which runs the
simulation
 SimulationTy
pe !=
CustomerNotify
Support
Call the activity CheckSimulationRun which calls
pxSubmitAndRun activity by passing
SimulaitonRunID which returns the simulation status
Snooze while Simulation is runningSimulationTy
pe !=
CustomerNotify
Support
Execute
Customer
SimulationStart ProcessSimulationDropOffStatus Data flow
If Baseline is True or If Use Baseline Data Set is
true run the
CustomerBaseLineSimulation DF
Otherwise run the
CustomerSimulation DFSimulationTy
pe =
Customer
&
ExecutionMo
de =
BatchNBA Notify
Support
Execute
Inbound
Customer
Simulation Start ProcessSimulationDropOffStatus Data flow
In the Execute Inbound Simulation Activity
If Execution Mode is GetNBA
If Baseline is True or If UseBaselineData Set
is true run the  Call SimulationTy
pe =
Customer
&
ExecutionMo
de = Notify
Support


2996
CustomerBaseLineSimulationForGetNBA
DF
Otherwise run the
CustomerSimulationForGetNBA DF
If Execution Mode is TIL
If Baseline is True or If UseBaselineData Set
is true run the
Call CustomerBaseLineSimulationForTIL
Otherwise run CustomerSimulationForTIL
DFGetNBA or
TIL
Post-Process Export Baseline
SimulationExport data to baseline_simulation_export table
using ExportBaselineSimulation DF
 BaselineRun
= true
&
ExecutionMo
de =
BatchNBA
Export Inbound
Baseline
SimulationIf Execution Mode is GetNBA
Export data to baseline_getnba_simulation_export
table using ExportGetNBABaselineSimulation DF
Else If Execution Mode is TIL
Export data to baseline_til_simulation_export table
using ExportTILBaselineSimulation DFBaselineRun
is true
&
ExecutionMo
de =
GetNBA or
TIL
Setup
Proposition
LookupLoad simulation_lookup table by calling
InsertSimulationLookupData activity which
executes the InsertSimulationLookUpData
Dataflow. SimulationTy
pe !=
CustomerNotify
Support Call
SimulationPrePro
cess activity
Generate
SummaryCall GenerateSummary activity which will run post-
process database function,
populate_simulation_summary(), for either funnel or
distribution based on SimulationType and
SimulationRunID
See section Database Functions.SimulationTy
pe !=
CustomerNotify
Support
Generate
Customer
SummaryCall CheckProcessSimulationDropOffStatus Flow
and wait until it completes
Call GenerateCustomerSummary activity which will
run post-process database function,
populate_simulation_funnel_target(),with
SimulationRunID and ExecutionMode


populate_simulation_funnel_target(),with
SimulationRunID and ExecutionMode
(BatchNBA/GetNBA/TIL)
See section Database Functions.SimulationTy
pe =
CustomerNotify
Support
End Clean Up If CustomerSimulation is true, then Stop
ProcessSimulationDropOffStatus Data flow and
Truncate SimulationDropOff datasetAlways Notify
Support


2997

Audiance
Input Audiance for the simulation for batchNBA and
BatchNBA:
Segments are used as audiance for BatchNBA simulation. BuildSubscription ConnectSQL, which will recreates the
extmktdata.subscription_v view restricting the subscriptions to that exist in the <segment table name> passed to it.
Build Subscription View
Create BuildSubscription ConnectSQL will execute the  update_subscription_v() function.
The signature is update_subscription_v(<segment_table_name>), where <segment_table_name> is the name of the segment table.
This function recreates the extmktdata.subscription_v view restricting the subscriptions to that exist in the <segment table name> passed to
it.
This function without any parameter will reset the extmktdata.subscription_v back to its original state i.e. will output all subscriptions.
Inbound :
GetNBA
Records from inbound_subscription_context table, which are from GetNBA call, will be considered for GetNBA Simulation. The case
parameters Channel, Subchannel, Primary/Secondary Context and Request Start/End date are used to query the
inbound_subscription_context table. The records which will be participated in simulation needs to follow below query:Reset Subscription View
It cleans up and destroys the treatment bucket map
“BatchNBAVolumeConstraints“which was created
Sets ConfigValue = false for ConfigName
CataloguePush
Finalise Call Finalise Flow Always
Elapsed Clean Up If CustomerSimulation is true, then Stop
ProcessSimulationDropOffStatus Data flow and
Truncate SimulationDropOff dataset
Reset Subscription View
It cleans up and destroys the treatment bucket map
“BatchNBAVolumeConstraints“which was created
Sets ConfigValue = true for ConfigName
CataloguePushAlways  Notify
Support
Finalise Call Finalise Flow Always


CataloguePushAlways  Notify
Support
Finalise Call Finalise Flow Always
Abort Clean Up If CustomerSimulation is true, then Stop
ProcessSimulationDropOffStatus Data flow and
Truncate SimulationDropOff dataset
Reset Subscription View
It cleans up and destroys the treatment bucket map
“BatchNBAVolumeConstraints“which was created
Sets ConfigValue = true for ConfigName
CataloguePushAlways  Notify
Support
Finalise Call Finalise Flow Always


2998
We need to get at-most 1 record for SubscriptionId, Channel, SubChannel, PrimaryContext, SecondaryContext combination. We always
need to consider the latest one of RequestDate .
SELECT * FROM inbound_subscription_context a
inner join (
SELECT
SubscriptionId
Channel
SubChannel
PrimaryContext
SecondaryContext
Max(RequestDate)
FROM inbound_subscription_context
WHERE Channel = X
AND SubChannel = X
AND Primary Context = X -- Can be null (if null check with N/A)
AND Secondary Context = X -- Can be null (if null check with N/A)
AND RequestDate Between Y AND Z
group by 1,2,3,4,5
) b on a.subscription_id = b.subscription_id and a.request_date = b.max_request_date
TIL
Inserting records to bundle_event_context DB table,each time when GetBundleEvents API is called.Fetch all subscriptions from this table
for given NTID and range of Dates by following below SQL query
Query will fetch at-most 1 record for SubscriptionId for given NTID.
select
*
from
bundle_event_context a
inner join (
select
subscription_id, ntid, MAX(request_date) maxrequestdate
from
bundle_event_context
where
ntid= X
and RequestDate Between Y AND Z
group by
1, 2 ) b on
a.subscription_id = b.subscription_id
and a.request_date = b.maxrequestdate
Baseline Runs
There will be 2 types for base line simulation
Run simulation with Baseline data creation and
Run Simulation using Baseline Data


2999
Dataset
The new dataset BaselineSimulation which is similar to SubscriptionDataForBatchNBA will be populated and use same dataset keys
DataFlow
The dataflow PrepareDataForSimulation which is similar to PrepareDataForBatchNBA and destination is BaselineSimulation dataset will
be used as part of setup simulation
Customer Run
Here the OOTB simulation will not be run instead CustomerSimulation / CustomerBaseLineSimulation DF will be run based on
BaseLineRun flag. The data will be written to the simulation_funnel_audit database table
Output data: SimulationFunnelAudit Database Table data set (linked to simulation_funnel_audit database table)

Output
Based on type and execution mode, simulation case output the results to different table. Below are the details
Post Processing Queries
In Post-Process, function populate_simulation_summary(<simulation_id>, <simulation_run_type>) is called to populate appropriate
simulation summary tables.
where, <simulation_run_type> is ‘simulation_distribution_summary’ or ‘simulation_funnel_summary’ based on the simulation run.
For Distribution Simulation
Create GenerateDistributionSummary ConnectSQL will execute populate_simulation_summary() function passing
'simulation_distribution_summary' table name
For example - populate_simulation_summary('DistrubutionSim-7004', 'simulation_distribution_summary')
The simulation source is dataschema.distributionsimulation wrapped in function simulation_distribution_summary_srv() and the target table
is (apps/aom).simulation_distribution_summary.
For Funnel Simulation
Create GenerateFunnelSummary ConnectSQL will execute populate_simulation_summary() function passing 'simulation_funnel_summary'
table name
For example - populate_simulation_summary('FunnelSim-2001', 'simulation_funnel_summary')
The simulation source is dataschema.pr_data_explain_simulation wrapped in function simulation_funnel_summary_srv() and the target


table is (apps/aom).simulation_funnel_summary.Funnel All simulation_funnel_summary
Distribution All simulation_distribution_summary
Customer BatchNBA simulation_funnel_batchnba
GetNBA simulation_funnel_getnba
TIL simulation_funnel_tilType ExecutionMode Output Table


3000
For Customer Simulation
Function populate_simulation_funnel_target(<case_id>, <execution_mode>) is called to populate appropriate simulation funnel tables.
where, <execution_mode> is ‘BatchNBA’ or ‘GetNBA’ or  'TIL' based on the simulation run.
For example populate_simulation_funnel_target('CusSim-234', 'BatchNBA')
For any ExecutionMode function takes source data from simulation_funnel_audit table and writes to target table– simulation_funnel_batch,
simulation_funnel_getnba, and simulation_funnel_til based on the execution mode passed as one of the parameter.
HouseKeeping
inbound_subscription_context table
The inbound_subscription_context table needs housekeeping and below are the details:

bundle_event_context table
The bundle_event_context table needs housekeeping and below are the details:

simulation_funnel_audit, simulation_funnel_batchnba, simulation_funnel_getnba, simulation_funnel_til
The bundle_event_context table needs housekeeping and below are the details:Delete SQL - Delete records within the retention period that is set in the config
Applies To VFUK-FW-AOMFW-Data-InboundSubscriptionContext
Ruleset AOMFW-Database
RequestTyp
ePurgeDataPostgreSQL
Delete SQL - Delete records within the retention period that is set in the config
Applies To VFUK-FW-AOMFW-Data-BundleEventContext
Ruleset AOMFW-Database
RequestTyp
ePurgeDataPostgreSQL
Delete SQL - Delete records from simulation_funnel_audit, simulation_funnel_batchnba, simulation_funnel_getnba, simulation_funnel_til
within the retention period that is set in the config
Applies To VFUK-FW-AOMFW-Data-SimulationFunnelAuditPostgreSQL


3001

AOM ConfigRuleset AOMFW-Database
RequestTyp
ePurgeData
CaseDependencies CustomerSimulation DistributionSimulation,FunnelSimulation,Batc
hNBA,CustomerSimulation
CaseId CustomerSimulation S-
CaseStatus CustomerSimulation Completed
SkipCaseFinaliseEmail CustomerSimulation TRUE
CaseDependencies DistributionSimulation DistributionSimulation,FunnelSimulation,Batc
hNBA,CustomerSimulation
CaseId DistributionSimulation S-
CaseStatus DistributionSimulation Completed
PauseCase DistributionSimulation FALSE
SkipCaseFinaliseEmail DistributionSimulation FALSE
CaseDependencies FunnelSimulation DistributionSimulation,FunnelSimulation,Batc
hNBA,CustomerSimulation
CaseId FunnelSimulation S-
CaseStatus FunnelSimulation Completed
PauseCase FunnelSimulation FALSE
SkipCaseFinaliseEmail FunnelSimulation FALSE
SimulationLoopLimit Customer 100
SimulationLoopLimit DistributionSimulation 100
SimulationLoopLimit FunnelSimulation 100
DataFlowWorkItemId PrepareDataForBatchNBA
DataFlowWorkItemId PrepareDataForBaselineSimulation
DataFlowWorkItemId ExportBaselineSimulation
DataFlowWorkItemId CustomerBaseLineSimulationGetNBA
DataFlowWorkItemId CustomerSimulationForGetNBA
DataFlowWorkItemId ExportGetNBABaselineSimulation
DataFlowWorkItemId PrepareBaselineDataForGetNBA
DataFlowWorkItemId PrepareDataForGetNBA  ConfigType ConfigName ConfigValue


3002
 DataFlowWorkItemId PrepareSubscriptionsForInboundSimulation
DataFlowWorkItemId CustomerBaseLineSimulationForTIL
DataFlowWorkItemId CustomerSimulationForTIL
DataFlowWorkItemId ExportTILBaselineSimulation
DataFlowWorkItemId PrepareBaselineDataForTIL
DataFlowWorkItemId PrepareDataForTIL
DataFlowWorkItemId PrepareSubscriptionsForTILSimulation
HousekeepingRetentionPeriod InboundSubscriptionContext 45
HousekeepingSQL InboundSubscriptionContext VFUK-FW-AOMFW-Data-
InboundSubscriptionContext
HousekeepingRetentionPeriod BundleEventContext 90
HousekeepingSQL BundleEventContext VFUK-FW-AOMFW-Data-
BundleEventContext
HousekeepingRetentionPeriod SimulationFunnelAudit 30
HousekeepingSQL SimulationFunnelAudit VFUK-FW-AOMFW-Data-
SimulationFunnelAudit
HousekeepingRetentionPeriod SimulationMaster 30
HousekeepingSQL SimulationMaster VFUK-FW-AOMFW-Data-SimulationMaster
DataFlowWorkItemId ProcessSimulationDropOff
DataflowIdleTimeDuration ProcessSimulationDropOff 300(in seconds)


3003
Case Details
[ Setup  ] [ PreProcess  ] [ Process  ] [ PostProcess  ] [ End ] [ Elapse  ] [ Abort  ]
Setup
Initialise Simulation Process

Invokes a SubFlow is called Initialise Flows. When invokes the flow, pass values as below.
Then calls the InitialiseSimulation Activity to set SimulationLoopLimit, Init the LoopCounter, SnoozeTime and locks CataloguePush
Check;
If ErrorStackTrace is Null or Empty, it is successful. Then, it will be routed to End.
Else, it will be routed to the NotifySupport SubFlow.
SupportEmailSubject AOM: Issue in Simulation Case
CheckpointCheck true
Wait yesParameter Name Parameter Value


3004
Truncate Baseline Simulation
Invoke Truncate Baseline Simulation, where an activity TruncateBaselineSimulation is called that does the following:
Truncate the BaselineSimulation data set
Truncate the BaselineSimulationExport data set
If it is successful, it will be routed to End as Success/Failure path.
Else, it will be routed to the NotifySupport SubFlow and End.
Truncate Inbound Baseline Data
Invoke Truncate Inbound Baseline Simulation, where an activity TruncateInboundBaselineData is called that does the following:
Truncate the BaselineSubscriptionDataForGetNBA and BaselineGetNBASimulationExport data sets for GetNBA Execution Mode
Truncate the BaselineSubscriptionDataForTIL and BaselineTILSimulationExport data sets for TIL Execution Mode
If it is successful, it will be routed to End as Success/Failure path.
Else, it will be routed to the NotifySupport SubFlow and End.


3005
PreProcess
Check Baseline Simulation


3006
Invoke Check Baseline Simulation, where an activity CheckBaselineSimulation is called which browses the BaselineSimulation data set
and checks if it’s populated as a boolean DoesBaselineSimulationExist.
If Baseline Simulation exists then Case will be routed to End as Yes/No path.
Else, it is moved to the abort stage.
Check Inbound Baseline Simulation
Invoke Check Inbound Baseline Simulation, where an activity CheckInboundBaselineSimulation is called which does the following:
Browses the BaselineSubscriptionDataForGetNBA data set for GetNBA Execution Mode and checks if it’s empty and checks if it’s
populated as a boolean DoesInboundBaselineSimulationExist
Browses the BaselineSubscriptionDataForTIL data set for TIL Execution Mode and checks if it’s empty and checks if it’s populated as a
boolean DoesInboundBaselineSimulationExist
If Inbound Baseline Simulation exists then Case will be routed to End as Yes/No path.
Else, it is moved to the abort stage.


3007
Check Segment


3008
This Flow invokes the CheckSegment activity which checks if the segment exists and is in a valid state, namely:
When RefreshSegment is false and there are no segment runs
When RefreshSegment is false and the latest segment run status is Failed
Abort?;
If the segment is not in a valid state then Case is moved to the abort stage.
Else, proceed to check the segment run status
Segment Run Inprogress?;
If the segment run is in progress then continue to the next steps where the case needs to wait until the segment run is completed
Else, it will be routed to End.
The CheckRunSegmentStatus activity checks if the segment in the SegmentName parameter is in a running state and sets
IsSegmentRunning to true if the segment is still running
Check;
If IsSegmentRunning is true, it will be routed to Snooze again as In Progress path. Then, it invokes Check Segment Run Status and does
the same steps as in CheckRunSegmentStatus again.
Else, it will be routed to End as Success/Failure path.

Run Segment


3009

This flow will be called conditionally based on the RefreshSegment parameter. Invokes Run Segment, where an activity RunSegment is
called, which calls Rule-Obj-Report-Definition-Segment.ExecuteSegment bypassing the SegmentName.
If it is successful, it invokes Check Segment Run Status, where an activity CheckSegmentRunStatus is called.
Else, it will be routed to End as Failure path.
The CheckSegmentRunStatus activity checks if the segment in the SegmentName parameter is in a running state.
Check;
If SegmentRunComplete is false, wait 5 minutes as In Progress path. Then, it invokes Check Segment Run Status and does the same
steps as in CheckSegmentRunStatus again.
Else, it will be routed to End as Success/Failure path.
Build Subscription
This flow is a common flow that will be invoked as part of BuildSubscription and as part of the CleanUp step. The flow accepts the
parameter Reset of type Boolean.
This flow is invoked with Rest as false and invokes an activity BuildSubcription, which calls the update_subscription_v procedure by passing
the SegmentName. This will update the subscription_v view in DB
Check:
If ErrorStackTrace is Null or Empty, it is successful. Then, it will be routed to End.
Else, it will be routed to the NotifySupport SubFlow.


3010
Build Inbound Subscription
Invoke Build Inbound Subscription which calls an activity BuildInboundSubscription that either:
Calls PrepareSubscriptionsForGetNBASimulation for GetNBA Execution Mode
Calls PrepareSubscriptionsForTILSimulation for TIL Execution Mode
If it is successful, it will be routed to snooze.
Invoke Check Data Flow Status where an activity CheckPrepareSubscriptionsForInboundSimulationDFStatus is called which does the
following:
Check the progress of PrepareSubscriptionsForInboundSimulation for GetNBA Execution Mode
Check the progress of PrepareSubscriptionsForTILSimulation for TIL Execution Mode
Set the DataFlow status from Primary.DataFlowProgress.pyStatus
Check:
1. DataFlowStatus != "Completed" (DataFlowStatus is not “Completed“)
2. DataFlowStatus != "Failed" (DataFlowStatus is not “Failed“)
3. DataFlowStatus != "Stopped" (DataFlowStatus is not “Stopped“)
4. ErrorStackTrace=”” (Does not have any error in the last rule)
If they are equal as above, the case will be routed to Snooze again as In Progress path. Then, it invokes Check Data Flow Status and does
the same steps as in CheckPrepareSubscriptionsForInboundSimulationDFStatus again.
Else, it will be routed to End as Success/Failure path.
In case of failure, it will be routed to the NotifySupport SubFlow and End.
Setup Treatment Data


3011
This flow will get the maximum capacity for each active treatment and set up the buckets within the Hazelcast instance for the provided Map
Name(BatchNBAVolumeConstraints) using the specified capacity & refill amount. Please refer to Initialise Treatment Buckets
Set BucketsInitialised value to true
Process
Setup Simulation
Invokes Start Data Flow, where an activity PrepareDataForBatchNBA is called which does the following:
Truncate the SubscriptionDataForBatchNBA
Execute PrepareDataForBatchNBA dataflow.
If it is successful, it invokes Check Data Flow Status, where an activity CheckPrepareDataForBatchNBADFStatus is called.
Else, it will be routed to End as Failure path.
Do the steps in the CheckPrepareDataForBatchNBADFStatus activity as below:
Execute the PrepareDataForBatchNBA DataFlow
Set the DataFlow status from Primary.DataFlowProgress.pyStatus
Check:
1. DataFlowStatus != "Completed" (DataFlowStatus is not “Completed“)
2. DataFlowStatus != "Failed" (DataFlowStatus is not “Failed“)
3. DataFlowStatus != "Stopped" (DataFlowStatus is not “Stopped“)
4. ErrorStackTrace=”” (Does not have any error in the last rule)
If they are equal as above, the case needs to wait until the segment run is completed as In Progress path. Then, it invokes Check Data
Flow Status and does the same steps as in CheckPrepareDataForBatchNBADFStatus again.
Else, it will be routed to End as Success path.
In case of failure, it will be routed to the NotifySupport SubFlow and End.


3012
Setup Baseline Simulation


3013

Invoke Start Data Flow, where an activity PrepareDataForBaselineSimulation is called which calls the PrepareDataForBaselineSimulation
data flow.
If it is successful, it invokes Check Data Flow Status, where an activity CheckPrepareDataForBaselineSimuationDFStatus is called
which does the following:
Checks the progress of the PrepareDataForBaselineSimulation Data Flow
Set the DataFlow status from Primary.DataFlowProgress.pyStatus
Check:
1. DataFlowStatus != "Completed" (DataFlowStatus is not “Completed“)
2. DataFlowStatus != "Failed" (DataFlowStatus is not “Failed“)
3. DataFlowStatus != "Stopped" (DataFlowStatus is not “Stopped“)
4. ErrorStackTrace=”” (Does not have any error in the last rule)
If they are equal as above, the case needs to wait until the segment run is completed as In Progress path. Then, it invokes Check Data
Flow Status and does the same steps as in CheckPrepareDataForBaselineSimuationDFStatus again.
Else, it will be routed to End as Success path.
In case of failure, it will be routed to the NotifySupport SubFlow and End.
Setup Inbound Simulation

Invoke Start Data Flow, where an activity PrepareDataForInboundSimulation is called which does the following:
Truncate SubscriptionDataForGetNBA and Start the PrepareDataForGetNBA data flow for GetNBA Execution Mode
Truncate SubscriptionDataForTIL and Start the PrepareDataForTIL data flow for TIL Execution Mode


3014
If it is successful, it invokes Check Data Flow Status, where an activity CheckPrepareDataForInboundSimulationDFStatus is called
which does the following:
Checks the progress of the PrepareDataForGetNBA Data Flow for GetNBA Execution Mode
Checks the progress of the PrepareDataForTIL Data Flow for TIL Execution Mode
Set the DataFlow status from Primary.DataFlowProgress.pyStatus
Check:
1. DataFlowStatus != "Completed" (DataFlowStatus is not “Completed“)
2. DataFlowStatus != "Failed" (DataFlowStatus is not “Failed“)
3. DataFlowStatus != "Stopped" (DataFlowStatus is not “Stopped“)
4. ErrorStackTrace=”” (Does not have any error in the last rule)
If they are equal as above, the case needs to wait until the segment run is completed as In Progress path. Then, it invokes Check Data
Flow Status and does the same steps as in CheckPrepareDataForInboundSimulationDFStatus again.
Else, it will be routed to End as Success path.
In case of failure, it will be routed to the NotifySupport SubFlow and End.
Setup Inbound Baseline Simulation

Invoke Start Data Flow, where an activity PrepareDataForInboundBaselineSimulation is called which does the following:
Start the PrepareBaselineDataForGetNBA data flow for GetNBA Execution Mode
Start the PrepareBaselineDataForTIL data flow for TIL Execution Mode
If it is successful, it invokes Check Data Flow Status, where an activity CheckPrepareDataForInboundSimulationDFStatus is called
which does the following:
Checks the progress of the PrepareBaselineDataForGetNBA Data Flow for GetNBA Execution Mode
Checks the progress of the PrepareBaselineDataForTIL Data Flow for TIL Execution Mode


Checks the progress of the PrepareBaselineDataForTIL Data Flow for TIL Execution Mode
Set the DataFlow status from Primary.DataFlowProgress.pyStatus
Check:
1. DataFlowStatus != "Completed" (DataFlowStatus is not “Completed“)
2. DataFlowStatus != "Failed" (DataFlowStatus is not “Failed“)
3. DataFlowStatus != "Stopped" (DataFlowStatus is not “Stopped“)
4. ErrorStackTrace=”” (Does not have any error in the last rule)


3015
If they are equal as above, the case needs to wait until the segment run is completed as In Progress path. Then, it invokes Check Data
Flow Status and does the same steps as in CheckPrepareDataForInboundSimulationDFStatus again.
Else, it will be routed to End as Success path.
In case of failure, it will be routed to the NotifySupport SubFlow and End.
Create Simulation

Invokes Create Simulation Work Item, where an activity CreateSimulation is called. Then the activity will set pyOptions, pyDataSource,
pyStrategy, and pyDestinations pages of Data-Decision-Simulations for running a simulation based on SimulationType and SimulaitonName
parameters. Then create and run the simulation work item and set SimulationRunID
Check;
In case of failure, it will be routed to the NotifySupport SubFlow
Else it will be routed to End as Success path.
Execute Simulation


3016
Invokes Run Simulation, where an activity RunSimulation calls the pxSubmitAndRun activity passing SimulationRunID so that the
corresponding Simulation gets started.
If it is successful, invoke Check Simulation Run Status, where an activity CheckSimulationRunStatus is called and do as below:
Call the pxSimulationLoadProgress activity
Set SimulationStatus property
Else, it will be routed to End as Failure path.
Check;
If SimulationRunComplete is true, it will be routed to End as Success/Failure path.
If SimulationRunFailed is true, it will be routed to End as Failure path.
In case of failure, it will be routed to the NotifySupport SubFlow and End
Else, wait until the simulation run is completed as In Progress path. Then invoke Check Simulation Run Status again.
Execute Customer Simulation
Invokes Execute Customer Simulation, where an activity ExecuteCustomerSimulation is called which does the following:
For BaselineRun or UseBaselineData, Start the CustomerBaseLineSimulation data flow
Else, Start the CustomerSimulation data flow
If it is successful, it invokes Check Customer Simulation Status, where an activity CheckCustomerSimulationDFStatus is called which
does the following:
For BaselineRun or UseBaselineData, Check the progress of CustomerBaseLineSimulation
Else, check the progress of CustomerSimulation
Set the DataFlow status from Primary.DataFlowProgress.pyStatus
Check:
1. DataFlowStatus != "Completed" (DataFlowStatus is not “Completed“)
2. DataFlowStatus != "Failed" (DataFlowStatus is not “Failed“)
3. DataFlowStatus != "Stopped" (DataFlowStatus is not “Stopped“)
4. ErrorStackTrace=”” (Does not have any error in the last rule)


4. ErrorStackTrace=”” (Does not have any error in the last rule)
If they are equal as above, the case needs to wait until the segment run is completed as In Progress path. Then, it invokes Check Customer
Simulation Status and does the same steps as in CheckCustomerSimulationDFStatus again.
Else, it will be routed to End as Success path.
In case of failure, it will be routed to the NotifySupport SubFlow and End.


3017
Execute Inbound Customer Simulation
Invokes Execute Inbound Customer Simulation, where an activity ExecuteInboundCustomerSimulation is called which does the
following:
For GetNBA Execution Mode,
For BaselineRun or UseBaselineData, Start the CustomerBaseLineSimulationGetNBA data flow
Else, Start the CustomerSimulationForGetNBA data flow
For TIL Execution Mode,
For BaselineRun or UseBaselineData, Start the CustomerBaseLineSimulationForTIL data flow
Else, Start the CustomerSimulationForTIL data flow
If it is successful, it invokes Check Inbound Customer Simulation Status, where an activity CheckInboundCustomerSimulationDFStatus
is called which does the following:
For GetNBA Execution Mode,
For BaselineRun or UseBaselineData, check the progress of CustomerBaseLineSimulationGetNBA
Else, check the progress of CustomerSimulationForGetNBA
For TIL Execution Mode,
For BaselineRun or UseBaselineData, check the progress of CustomerBaseLineSimulationForTIL
Else, check the progress of CustomerSimulationForTIL
Set the DataFlow status from Primary.DataFlowProgress.pyStatus
Check:
1. DataFlowStatus != "Completed" (DataFlowStatus is not “Completed“)
2. DataFlowStatus != "Failed" (DataFlowStatus is not “Failed“)
3. DataFlowStatus != "Stopped" (DataFlowStatus is not “Stopped“)
4. ErrorStackTrace=”” (Does not have any error in the last rule)
If they are equal as above, the case needs to wait until the segment run is completed as In Progress path. Then, it invokes Check Inbound
Customer Simulation Status and does the same steps as in CheckInboundCustomerSimulationDFStatus again.
Else, it will be routed to End as Success path.


Else, it will be routed to End as Success path.
In case of failure, it will be routed to the NotifySupport SubFlow and End.


3018
PostProcess
Export Baseline Simulation


3019
Invoke Export Baseline Simulation, where an activity ExportBaselineSimulation is called which Starts the ExportBaselineSimulation data
flow.
Check;
In case of failure, it will be routed to the NotifySupport SubFlow.
Else, it will be routed to End as Success path.
Export Inbound Baseline Simulation
Invoke Export Inbound Baseline Simulation, where an activity ExportInboundBaselineSimulation is called which does the following:
Start the ExportGetNBABaselineSimulation data flow for GetNBA ExecutionMode
Start the ExportTILBaselineSimulation data flow for TIL ExecutionMode
Check;
In case of failure, it will be routed to the NotifySupport SubFlow.
Else, it will be routed to End as Success path.


3020
Setup Proposition Lookup


3021

Invokes Setup Proposition Lookup, where an activity InsertSimulationLookupData is called which does the following:
Truncate the SimulationLookup dataset
Execute InsertSimulationLookupData dataflow
Wait 10sec for InsertSimulationLookupData DF to complete
Check;
In case of failure, it will be routed to the NotifySupport SubFlow.
Else, it will be routed to End as Success path.
Generate Summary
Invokes Generate Summary, where an activity GenerateSummary is called which does RDB-Save GenerateSummary with SimulationType
simulation_funnel_summary or simulation_distribution_summary.
Check;
In case of failure, it will be routed to the NotifySupport SubFlow.
Else, it will be routed to End as Success path.


3022
Generate Customer Summary


3023
Invokes Generate Customer Summary, where an activity GenerateCustomerSummary is called which does RDB-Save
GenerateCustomerSummary.
Check;
In case of failure, it will be routed to the NotifySupport SubFlow.
Else, it will be routed to End as Success path.
End
Clean Up
Invoke UnLock Catalogue Push, where an activity UnlockCataloguePush is called which sets CataloguePush to false.
Check;
In case of failure, it will be routed to the NotifySupport SubFlow.
Else, proceed for checking if Execution Mode is BatchNBA as Success path.
If no, it will be routed to End as No path.
Else, invoke Delete Treatment Buckets SubFlow which removes Hazelcast map BatchNBAVolumeConstraints. Next, run the Build
Subscription SubFlow.
Finalise
For detailed information please refer Finalise page.
Elapse
This flow has Elapse Stage as the parameter. For detailed information please refer Finalise page.


3024
Abort
This flow has Abort Stage as the parameter. For detailed information please refer Finalise page.


3025
Base Line Simulation
Overview
Simulation case properties
Dataset
DataFlow
Simulation Case Changes
Case Ignitor
Overview
This document will cover how to run Baseline simulation and updates to the existing Simulation case.
There will be 2 types for base line simulation
Run simulation with Baseline data creation and
Run Simulation using Baseline Data
Simulation case properties
Dataset
Create a new dataset BaselineSimulation which is similar to SubscriptionDataForBatchNBA and use same dataset keys
DataFlow
Create a new dataflow PrepareDataForSimulation which is similar to PrepareDataForBatchNBA and destination is
BaselineSimulation dataset
Simulation Case ChangesBaselineRun Boolean false
UseBaselineData Boolean falseName Type Default
Setup
 Initialise Simula
tion
 Sets the values required for the case to on the case
page
Check if any simulation running
Sets ConfigValue = true for ConfigName
CataloguePush
 Always Snooze
Configurable
Loop Count
 Elapse Call existing
Initialise flow

Truncate
Baseline DataTruncate BaselineSimulation and
BaselineSimulationExport Data SetBaselineRun
is trueNotify
Support New StepStage Step Functionality Condition Error/Adver
se Process Comments


3026
Pre-Process
 Check Baseline
Data SetCheck if BaselineSimulation dataset has data UseBaseline
Data is trueIf no Data
Present,Abor
t Case
Notify
Support if
error occurs New Step
Check Segment Call activity CheckSegment where it checks
If segment exists and
if RefreshSegment is false check Segment
does run today (2.8)
Call activity CheckSegmentRunStatus where it
checks if segment is still running
Snooze while Segment is runningif
UseBaseline
Data is falseIf the
segment
does not
exist and has
not been
Run elapse
the case
Notify
Support if
Still Running
for a long
time  .
Run Segment Executes segment rule with the name passed in
SegmentName parameter
Call Activity RunSegment, which calls Rule-Obj-
Report-Definition-Segment.ExecuteSegment activity
by passing the SegmentName.Parameter
for Refresh
Segment is
true and
UseBaseline
Data is falseIf Segment
Doesn’t
Exist: Abort
Flow
If Segment
Run Fails
Notify
Support
Call activity CheckSegmentRunStatus where it
checks if the segment is still running
Snooze while Segment is runningParameter
for Refresh
Segment is
true and
UseBaseline
Data is falseNotify
Support if
Still Running
for a long
time

Build
Subscription
 Activity UpdataSubscriptionView will call database
function, update_subscription_v(), to update the
Subscription view
See section Database Functions.UseBaseline
Data is falseNotify
Support
Setup
Treatment DataUse InitialiseTreatmentBuckets flow


Data is falseNotify
Support
Setup
Treatment DataUse InitialiseTreatmentBuckets flow
Sets BucketsInitialised to trueAlways Notify
Support

Process  Setup Simulatio
nLoad SubscriptionDataForBatchNBA dataset  by
executing PrepareDataForBatchNBA dataflow,
Snooze while DF is running and Check Status BaselineRun
is false and
UseBaseline
Data is falseNotify
Support
Setup Baseline
SimulationLoad BaselineSimulation dataset  by executing
PrepareDataForSimulation dataflow, BaselineRun
is true


3027
Case Ignitor
Add two new input boolean parameters BaselineRun and UseBaselineData. In Activity set UseBaselineData only when BaselineRun is
false.
Make input parameter segment as optional.
 Snooze while DF is running and Check Status
Create
SimulationCall the CreateSimulation activity which will set
pyOptions, pyDataSource, pyStrategy, and
pyDestinations pages of Data-Decision-Simulations
for running a simulation based on SimulationType
and SimulaitonName parameter. Then call
pzCreateSimulation activity to create work-item and
set SimulationRunID.Always Notify
Support If  BaselineRun or
BaselineDataRun
is true
Set
RunSimulation.py
DataSource.pyRu
leName to
BaselineSimulatio
n
Else
Set
RunSimulation.py
DataSource.pyRu
leName to
SubscriptionData
ForBatchNBA
Generate
SummaryCall GenerateSummary activity which will run post-
process database function,
populate_simulation_summary(), for either funnel or
distribution based on SimulationType and
SimulationRunID
See section Database Functions.Always Notify
Support
Post-ProcessExport Baseline
DataCall ExportBaselineSimulation which will export
the data in to baseline_simulation_export DB tableeBaselineRun
is trueNotify
Support New Step
End Clean Up Reset Subscription View
It cleans up and destroys the treatment bucket map
“BatchNBAVolumeConstraints“which was created
Sets ConfigValue = false for ConfigName
CataloguePushAlways Notify
Support Call
DeleteTreatment
Buckets activity
Finalise Call Finalise Flow Always


3028
Customer Simulation
This page covers on how to run the customer type simulation
The input SimulationType parameter now will have new type ‘Customer’
Simulation Case Changes
Setup
 Initialise Simula
tion
 Sets the values required for the case to on the case
page
Check if any simulation running
Sets ConfigValue = true for ConfigName
CataloguePush
 Always Snooze
Configurable
Loop Count
 Elapse Call existing
Initialise flow

Truncate
Baseline DataTruncate BaselineSimulation and
BaselineSimulationExport Data SetUseBaseline
Data is trueNotify
Support New Step
Process  Setup Simulatio
nLoad SubscriptionDataForBatchNBA dataset  by
executing PrepareDataForBatchNBA dataflow
Snooze while DF is running and Check Status BaselineRun
is false and
BaselineDat
aRun is falseNotify
Support
Setup Baseline
SimulationLoad BaselineSimulation dataset  by executing
PrepareDataForSimulation dataflow,
Snooze while DF is running and Check Status BaselineRun
is true Notify
Support
Create
SimulationCall the CreateSimulation activity which will set
pyOptions, pyDataSource, pyStrategy, and
pyDestinations pages of Data-Decision-Simulations
for running a simulation based on SimulationType
and SimulaitonName parameter. Then call
pzCreateSimulation activity to create work-item and
set SimulationRunID.SimulationTy
pe !=
CustomerNotify
Support  Set
RunSimulation.py
Options.pyUseCu
rrentOperator to
false
Set
RunSimulation.py
Options.pySimula
tionType =
‘Explain’ for
funnel Simulation
Execute


Options.pySimula
tionType =
‘Explain’ for
funnel Simulation
Execute
SimulationActivity RunSimulation calls pxSubmitAndRun
activity by passing SimulaitonRunID which runs the
simulation
 SimulationTy
pe !=
CustomerNotify
Support

Call the activity CheckSimulationRun which calls
pxSubmitAndRun activity by passing SimulationTy
pe !=
CustomerNotify
Support  Stage Step Functionality Condition Error/Adver
se Process Comments


3029
New Data Flows
 SimulaitonRunID which returns the simulation status
Snooze while Simulation is running
 Execute
Customer
SimulationIf Baseline is True or If Use Baseline Data Set is
true run the
CustomerBaseLineSimulation DF
Otherwise run the
CustomerSimulation DFSimulationTy
pe =
CustomerNotify
Support New Step.

Post-Process Setup
Proposition
LookupLoad simulation_lookup table by calling
InsertSimulationLookupData activity which
executes the InsertSimulationLookUpData Dataflow. SimulationTy
pe !=
CustomerNotify
Support Call
SimulationPrePro
cess activity
Generate
SummaryCall GenerateSummary activity which will run post-
process database function,
populate_simulation_summary(), for either funnel or
distribution based on SimulationType and
SimulationRunID
See section Database Functions.SimulationTy
pe !=
CustomerNotify
Support
End Clean Up Reset Subscription View
It cleans up and destroys the treatment bucket map
“BatchNBAVolumeConstraints“which was created
Sets ConfigValue = false for ConfigName
CataloguePushAlways Notify
Support Call
DeleteTreatment
Buckets activity
Finalise Call Finalise Flow Always
Elapsed Clean Up Reset Subscription View
It cleans up and destroys the treatment bucket map
“BatchNBAVolumeConstraints“which was created
Sets ConfigValue = true for ConfigName
CataloguePushAlways  Notify
Support
Finalise Call Finalise Flow Always
Abort Clean Up Reset Subscription View
It cleans up and destroys the treatment bucket map
“BatchNBAVolumeConstraints“which was created
Sets ConfigValue = true for ConfigName
CataloguePushAlways  Notify
Support
Finalise Call Finalise Flow Always


3030

CaptureSimulationDropOff
Captures simulation dropoff SR page into the SimulationFunnelAudit table
Paramet
ersfunnelName Data Flow Funnel Name
sr SR page
Returns Unique GUID of the record inserted
Throws RuntimeException CaptureSimulationDropOff


3031
Inbound Simulation
Overview
Inbound Simulation Changes
Inbound Subscription Context table
Baseline GetNBA  SimulationExport Table
 CaseIgnitor
Simulation Case Changes
New Process for Inbound Simulation:
Build Inbound Subscription
BuildInboundSubscription process:
BuildInboundSubscription Activity :
PrepareSubscriptionsForInboundSimulation Dataflow:
InboundSimulationSubscription :
SubscriptionsForInboundSimulation:
Setup Inbound Simulation
Execute Inbound Simulation
HouseKeeping
Overview
This section briefs on Simulation for the Context of Inbound NBA Requests. The customers participated in GetNBA call are stored in a new
table with contextual information and we need to run simulation for these customers based on inputs provided to the simulation case.
Inbound Simulation Changes
Convert output of Subscription participated in GetNBA into New Class Instance as below. We need to use data transform to do this and use
GetJSONOfPage function.
Data Transform: InboundSimulationRequest
Class : VFUK-FW-AOMFW-Data-InboundSubscriptionContext
 SubscriptionId .SubscriptionId
Channel .Context("Channel")
SubChannel .Context("SubChannel")
PrimaryContext .Context("PrimaryContext")
SecondaryContext .Context("SecondaryContext")
RequestTimestamp CurrentDate
Context @AOMUtilities.GetJSONOfPage(.Context)
ProductDetails @AOMUtilities.GetJSONOfPage(.ProductDetails)
RecommendationRequestDetails @AOMUtilities.GetJSONOfPage(.RecommendationRequestDetails) Data Set Property Name Converted From