1591
Do not enable  “exclude”
In Property Mapping, set ValueInteger = 1
In the alternate path, add a Set property component “Record Dropped Propositions” and set the following properties
AdhocText1 = @if(.ValueInteger=1,"",@AOMUtilities.CaptureSimulationDropOff(“Pick Best Treatment For Customer“, MyStepPage))
In the alternate path, add a filter component “Eligible Propositions” with filter condition as ValueInteger = 1
In the main path, add a Switch component “Simulation Mode Check”
Select component “Eligible Propositions”, if Simulation Mode is ON
(@String.equalsIgnoreCase(Primary.Context("IsSimulationMode"),"true"))
Otherwise, select component IdentifyBestTreatmentForGetNBA
Connect to results
L2. Update Strategy - IdentifyBestTreatmentforSubscription
After component “ExecutionMode - GetNBA”, replace the sub-strategy component IdentifyBestTreatmentForGetNBA with the new sub-
strategy  IdentifyBestTreatmentForGetNBAForSimulation.
Please note that name of the sub-strategy component should not be updated as this name will be used in Pega OOTB Simulation Query


1592
NBA FW - Intent Redesign
Impact in Other areas
Dependencies
Logic Change
A. Update Strategy - EvaluateCustomerIntents
B. Update Strategy - IdentifyEligibleOf fers
C. New Strategy - IdentifyOf fersForEligibleIntents
Note: Need to raise ADO
Impact in Other areas
Dependencies
Logic Change
A. Update Strategy - EvaluateCustomerIntents
Replace Set Property component - “All Intens“ with a new Switch component - “Get intents by Intent Type“  and configure as follows -
Select “Set Intent Stated” component if SetIntentStated.pyName != ““
Otherwise, select “Set Intent Type Inferred“ component
Add the following in the set property component - “Set ConfidenceScoreRange“
.IntentScore = @divide(.IntentConfidenceScore,100)*.IntentWeight569160 Intent redesign
App No
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App No
DB No  Area Yes/No Comments


1593
B. Update Strategy - IdentifyEligibleOffers
After filter component - “Active Offers”, add a new filter component - “Execution Modes Without Intent Check” and use the following
condition -
@String.contains(@String.toUpperCase(.OfferExecutionMode),"LANDINGPAGES") ||
@String.contains(@String.toUpperCase(.OfferExecutionMode),"GRPL")
Connect to data join component - “ControlQuarantinePeriod from BusinessPurpose“
After filter component - “Active Offers”, add a new filter component - “Execution Modes With Intent Check” and use the following
condition -
!@String.contains(@String.toUpperCase(.OfferExecutionMode),"LANDINGPAGES") &&
!@String.contains(@String.toUpperCase(.OfferExecutionMode),"GRPL")
Add a new sub-strategy component - IdentifyOffersForEligibleIntents after filter component “Execution Modes With Intent Check”
Connect  sub-strategy component - IdentifyOffersForEligibleIntents to data join component - “ControlQuarantinePeriod from
BusinessPurpose“
Remove sub-strategy component - IdentifyOffersForEligibleIntents after the following filter components and connect to next relevant
components -
Offers For ExecutionMode - TIL
Offers For ExecutionMode - NBAA
Offers For ExecutionMode - GetNBA
Offers For ExecutionMode - ProcessEvent
Offers For ExecutionMode - Batch
Please note that the above change has impact on Simulation on following which are needed to be updated
Pega OOTB Decisioning Funnel Simulation Query For Batch
Pega OOTB Decisioning Funnel Simulation Query For GetNBA

C. New Strategy - IdentifyOffersForEligibleIntents
This strategy will be recreated from scratch based on the design detailed on Miro board - https://miro.com/app/board/uXjVOX8eGuE=/ -


Please note that following strategy components are suggested for the implementation as denoted by colours in the Miro board -
Teal - External Input
Blue - Decision Data (in main path)
Yellow - Data Import
Green - Filter
Dark Grey - Data Join
Brown - Sub-Strategy
Light Grey - Set Property
Red - Group By
Pink - Results
Connect your Miro account


1594
NBA FW - SubChannel Validation In Volume Limit Calculation
 Note: Need to create a new ADO for this defect
Impact in Other areas
Dependencies
Logic Changes
Notes:
A. New Strategy - CalculateT reatment VolumeLimits
B. Update Strategy - PopulateV olumeLimits
C. Update Strategy - AllTreatmentsForEligibleOf fers
Impact in Other areas
Dependencies

Logic Changes
Notes:
If TargetSubChannel is not present in the TreatmentToSubChannels decision then it should not
be present in VolumeConstraints Decision data.
To handle the scenario where Treatments  defined with subchannel and  removed subchannel from Volume Constraint screen. Always
Treatment Subchannels and Volume Constraints should be aligned. If  subchannel is removed from Treatment screen, then it should be
removed from Volume Constraint configuration. So, to cater this alignment this logic was added.
TreatmentToSubChannels and Volume Constraints decision data should be in sync.614224 Sub channel volume constraints cannot be managed through PM tool
App No
DB No
Knowledge Transfer No
PM Tool TBC
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool TBC
App No
DB No  Area Yes/No Comments


1595

A. New Strategy - CalculateTreatmentVolumeLimits
Save existing strategy PopulateVolumeLimits as CalculateVolumeLimits
Replace Data Import component - “Treatments“ with External Input
Remove the existing data join component "Get TargetSubChannel"
Connect the existing VolumeConstraints Decision Data to two new filters called "Treatments Having TargetSubChannel" and
"Treatments not having TargetSubchannel"
In the first filter, "Treatments Having TargetSubChannel" add the condition as !@IsNullOrEmpty(.TargetSubChannel)
In the second filter, "Treatments not having TargetSubchannel" add the condition as @IsNullOrEmpty(.TargetSubChannel)
Import decision data "TreatmentToSubChannels" using Decision data component.
Connect the first filter "Treatments Having TargetSubChannel" to the new data join. Name the data join as "Join Treatments having sub
channel with TreatmentToSubchannels" and join with "TreatmentToSubChannels" and add below join conditions as

Note: Check the checkbox for Exclude source component results that do not match join condition in the data join component.
Connect the existing data import component "Treatments" to the new data join called "Get TargetSubChannel with Treatments having
SubChannel" and add the below join condition as .TreatmentName = .TreatmentName
In the properties mapping tab map .TargetSubChannel = .TargetSubChannel and .VolumeLimit = .VolumeLimit
Join the above data join "Get TargetSubChannel with Treatments having SubChannel" to the new data join called "Get
TargetSubChannel with Treatments not having SubChannel" and and add the below join condition as .TreatmentName =
.TreatmentName
In the properties mapping tab map .TargetSubChannel = .TargetSubChannel and .VolumeLimit = .VolumeLimit


In the properties mapping tab map .TargetSubChannel = .TargetSubChannel and .VolumeLimit = .VolumeLimit
Connect the new data join called "Get TargetSubChannel with Treatments not having SubChannel" to the existing group by component
called "set volume limit at treatment level"
Update group by component called "set volume limit at treatment level" to add a new Aggregates as -
TreatmentVolumeLimit = Sum of VolumeLimit
Remove components - “Set  Derived VolumeLimit“ & “Override for Child Email Treatments“.TargetSubChannel .TargetSubChannel
.Channel .Channel.TreatmentName .TreatmentName


1596
Connect to Results

B. Update Strategy - PopulateVolumeLimits
Remove the existing data join component "Get TargetSubChannel"
Connect the existing VolumeConstraints Decision Data to two new filters called "Treatments Having TargetSubChannel" and
"Treatments not having TargetSubchannel"
In the first filter, "Treatments Having TargetSubChannel" add the condition as !@IsNullOrEmpty(.TargetSubChannel)
In the second filter, "Treatments not having TargetSubchannel" add the condition as @IsNullOrEmpty(.TargetSubChannel)
Import decision data "TreatmentToSubChannels" using Decision data component.
Connect the first filter "Treatments Having TargetSubChannel" to the new data join. Name the data join as "Join Treatments having sub
channel with TreatmentToSubchannels" and join with "TreatmentToSubChannels" and add below join conditions as

Note: Check the checkbox for Exclude source component results that do not match join condition in the data join component.
Connect the existing data import component "Treatments" to the new data join called "Get TargetSubChannel with Treatments having
SubChannel" and add the below join condition as .TreatmentName = .TreatmentName
In the properties mapping tab map .TargetSubChannel = .TargetSubChannel and .VolumeLimit = .VolumeLimit
Join the above data join "Get TargetSubChannel with Treatments having SubChannel" to the new data join called "Get
TargetSubChannel with Treatments not having SubChannel" and and add the below join condition as .TreatmentName =
.TreatmentName
In the properties mapping tab map .TargetSubChannel = .TargetSubChannel and .VolumeLimit = .VolumeLimit
Connect the new data join called "Get TargetSubChannel with Treatments not having SubChannel" to the existing group by component


called "set volume limit at treatment level"
Update set property component - “Set  Derived VolumeLimit“ as below -
VolumeLimit = @if(.VolumeLimit="",-1,.VolumeLimit).TargetSubChannel .TargetSubChannel
.Channel .Channel.TreatmentName .TreatmentName


1597
.IsValid = .VolumeLimit>0 || .TargetSubChannel!=""

C. Update Strategy - AllTreatmentsForEligibleOffers
Add a new set property component - “Batch Outbound Treatments“
Connect the following filter components to the new set property component - “Batch Outbound Treatments“ and disconnect from set
property component - “OutboundTreatmentsByBatch“
AppPush Treatments
OutboundCC Treatments
SMS Treatments
Email Treatments
DirectMail Treatments
RCS Treatments
MMS Treatments
After set property component - “Batch Outbound Treatments“, call sub-strategy “CalculateTreatmentVolumeLimits“
After sub-strategy “CalculateTreatmentVolumeLimits“, add new filter component - “Treatment Volume Limit Check” with condition as -
TreatmentVolumeLimit != 0
Connect to existing  set property component - “OutboundTreatmentsByBatch“


1598
NBA FW - Activate Global Contact Strategy
Impact in Other areas
Dependencies
Update strategy GlobalEligibilityRulesForBatch to test below scenarios:
Remove highlighted screenshot components.

Test Scenarios:604938 Activate Global Contact Strategy
App No
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App No
DB No  Area Yes/No Comments


1599

GlobalContactS …
14 Feb 2022, 03:00 PM01.xlsx


1600
NBA FW - 2nd Line Discount Eligibility
Impact in Other areas
Dependencies
Waiting for Rule Description and Rule Details from Matt
Notes: Need to use existing PF. It should be applied for both GetNBA and GetProductListForAdditionalLine
As per mail on 13th Jan 2022 , Rules and eligibility are optimization work anyway so for this sprint I suggest we leave this rule out of the
build and default the prop filter to true. I can propose an acceptable substitute rule to use for SIT and the like.
Logic Changes :
Update Strategy IdentifyDiscountPerTariff:
Remove the connection between the existing filter "ProductRecommendationType - Discount" and data join "Join Childs"
Connect the filter component to the existing proposition filter CrossSellWebTreatmentEligibility and join the proposition filter to the
existing data join "Join Childs".
Note : No need of any changes for GetNBA.
Web treatments eligibility is evaluated in the CrossSellWebTreatmentEligibility strategy
 569060 2nd Line Discount Eligibility
App No
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App No
DB No  Area Yes/No Comments


1601
NBA FW - Real-time Triage Tool
Please note that only the following APIs/Data Flows are in scope for this story -

Impact in Other areas
Dependencies
Logic Changes
A. Update Data Flow - GetBestT reatmentsByGetNBA  (DF - GetNBA/Api - GetNextBestAction)
C. Update Data Flow - ProcessOutboundCC (DF - IdentifyBestT reatmentsByT riggers/ Api - GetBundleEventDecisionDetails)
D. Update Data Flow - ProcessAppPush (DF - IdentifyBestT reatmentsByT riggers/ Api - GetBundleEventDecisionDetails)
E. Update Data Flow - GetProductListForCustomer (DF - GetProductList/ Api - GetProductList)
F. Update Data Flow - IdentifyBestIBCCT reatments (DF - GetAssistedUpgrade/ Api - GetRecommendations)
Impact in Other areas
Dependencies619575 Real Time Triage Tool
GetNextBestAction GetNBA
GetBundleEventDecisionDetails IdentifyBestTreatmentsByTriggers
GetProductList GetProductList
GetRecommendations GetAssistedUpgradeAPI Data Flow
App Yes  As per App design

DB Yes As directed by App
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App Yes  Logic E2E test can be done once app work is completed
DB Yes App Changes can be done once DB changes are finished.Area Yes/No Comments


1602
Logic Changes
Update Strategy SetDefaultValuesToIHProperties
Add below Properties Mapping in SetDefaultValuesforIHIfNotPopulated Component
            Create DVTMode SR Property
            and Map .DVTMode=Primary.Context(DVTMode)
A. Update Data Flow - GetBestTreatmentsByGetNBA (DF - GetNBA/Api - GetNextBestAction)
Update Filter component - “IH“ to add new condition as -
.DVTMode != true
Update Filter component - “IH Reporting“ to add new condition as -
.DVTMode != true
Update Filter component - “SMS“ to add new condition as -
.DVTMode != true
Add a new secondary destination - data set - DVTCommsStore
Add Filter component - DVT Mode check with condition as -
.DVTMode = true and .ErrorMessage =”” and @equalsIgnoreCase(.ResponseType,"Action")||
(@equalsIgnoreCase(.ResponseType,"Item")&&@equalsIgnoreCase(.ParentChild,"Child")) =true and .Channel !=SMS
Add Convert shape to convert the data from SR class to DVTCommsStore
In the convert shape, select top level and convert into VFUK-FW-AOMFW-Data-DVTCommsStore class and set below properties in
the convert shape
Join the above convert shape to the destination dataset. In this dataset configure the dataset DVTCommsStore
B. Update Data Flow - ProcessSMS (DF - IdentifyBestTreatmentsByTriggers/ Api - GetBundleEventDecisionDetails)
Update Filter component - “ErrorMessage is null“ to add new condition as -
.DVTMode != true
Update Filter component - “SaveSMSFlag“ to add new condition as -
.DVTMode != true
Update Filter component - “ErrorMessage is Null“ to add new condition as -
.DVTMode != true


1603
C. Update Data Flow - ProcessOutboundCC (DF - IdentifyBestTreatmentsByTriggers/ Api -
GetBundleEventDecisionDetails)
Update Filter component - “Write To BestOBTreatments1“ to add new condition as -
.DVTMode != true
Update Filter component - “Write To BestOBTreatments2“ to add new condition as -
.DVTMode != true
Add a new secondary destination - data set - DVTCommsStore
Add Filter component - DVT Mode check with condition as -
.DVTMode = true
Add Convert shape to convert the data from SR class to DVTCoDVTCommsStoremmsStore
In the converted shape, select top-level and convert into VFUK-FW-AOMFW-Data-DVTCommsStore class and set below properties
in the converted shape
Join the above convert shape to the destination dataset. In this dataset configure the dataset DVTCommsStore
D. Update Data Flow - ProcessAppPush (DF - IdentifyBestTreatmentsByTriggers/ Api -
GetBundleEventDecisionDetails)
Update Filter component - “Not In Control Group 2“ to add new condition as -
.DVTMode != true
Update Filter component - “ErrorMessage is null“ to add new condition as -
.DVTMode != true
Update Filter component - “ErrorMessage is Null“ to add new condition as -
.DVTMode != true
Add a new secondary destination - data set - DVTCommsStore
Add Filter component - DVT Mode check with condition as -
.DVTMode = true
Add Convert shape to convert the data from SR class to DVTCommsStore
In the converted shape, select top-level and convert into VFUK-FW-AOMFW-Data-DVTCommsStore class and set below properties


in the converted shape


1604
Join the above convert shape to the destination dataset. In this dataset configure the dataset DVTCommsStore
E. Update Data Flow - GetProductListForCustomer (DF - GetProductList/ Api - GetProductList)
Update Filter component - “Response Type check for IH“ to add new condition as -
.DVTMode != true
Update Filter component - “Response Type check for IHReporting“ to add new condition as -
.DVTMode != true
Add a new secondary destination - data set - DVTCommsStore
Add Filter component - DVT Mode check with condition as -
.DVTMode = true and .ResponseType!="ProductDetailsforSecondLine" && .ResponseType = "UniqueTreatmentsList"
Add Convert shape to convert the data from SR class to DVTCommsStore
In the converted shape, select top-level and convert into VFUK-FW-AOMFW-Data-DVTCommsStore class and set below properties
in the converted shape
Join the above convert shape to the destination dataset. In this dataset configure the dataset DVTCommsStore


1605
F. Update Data Flow - IdentifyBestIBCCTreatments (DF - GetAssistedUpgrade/ Api - GetRecommendations)
Update Filter component - “Parent Recommendation Item Only“ to add new condition as -
.DVTMode != true
Update Filter component - “Parent Recommendation Only 2“ to add new condition as -
.DVTMode != true
Update Filter component - “When Recommendation Available 2“ to add new condition as -
.DVTMode != true
Add a new secondary destination - data set - DVTCommsStore
Add Filter component - DVT Mode check with condition as -
.DVTMode = true and!(.ResponseType=="Reco") =true and @String.equalsIgnoreCase(.ParentChild,"Parent") =true and
@String.notEqualsIgnoreCase(.ResponseType,"Offer")&&@String.notEqualsIgnoreCase(.ResponseType,"Reward")&&@String.n
otEqualsIgnoreCase(.ResponseType,"Qualifier") =true
Add Convert shape to convert the data from SR class to DVTCommsStore
In the converted shape, select top-level and convert into VFUK-FW-AOMFW-Data-DVTCommsStore class and set below properties in
the converted shape
Join the above convert shape to the destination dataset. In this dataset configure the dataset DVTCommsStore


1606
NBA FW - Run-time Capacity Check before Channel Mix
Note : Need to create a new ADO for this defect

Impact in Other areas
Dependencies
Logic Changes
Notes:
A. Update Strategy - IdentifyBestT reatmentForBatch
B. Update Strategy - IdentifyBestEmailT reatmentForBatch
C. Update Strategy - AllTreatmentsForEligibleOf fers
D. Update Strategy - GetMaxCapacityForT reatments
Impact in Other areas
Dependencies

Logic Changes
Notes:
A channel mix can be configured against an offer. If there are x channels available for an offer(e.g. 5)  and we want to use the best y
channels (e.g 2), the logic will choose best y from x (e.g. best 2 from 5) based on the metadata configuration.xxx Defect in Max Capacity calculation614228 Volume Constraints Defect
App No
DB No
Knowledge Transfer Yes  Change to Simulation
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App No
DB No  Area Yes/No Comments


1607
Separately we can set a volume cap against a treatment, meaning that we will only send a limited number of offers through that channel,
per run, when in batch mode.

These two pieces of logic need to be compatible with one another. At the moment they conflict. We should consider available capacity when
choosing channel mix and only select channels that have capacity.
If a channel has reached its max capacity it should no longer be available but if there are other channels configured that a) have capacity
remaining, or b) have unlimited capacity, then that offer should still be available through those channels.

Logic needs to be updated to ensure these two logic steps work in harmony.

A. Update Strategy - IdentifyBestTreatmentForBatch
Remove sub-strategy component - CheckAvailableCapacityForTreatment
Connect filter component - “Non Email Channel” to filter components - “Mandatory“ & “Non Mandatory”
Please note that this change has an impact on the Pega OOTB Decisioning Funnel Simulation Query and Funnel Step Order.
B. Update Strategy - IdentifyBestEmailTreatmentForBatch
Remove sub-strategy component - CheckAvailableCapacityForTreatment
Connect filter component - “Apply All Contact Strategy To Parent Email Treatments” to set property components - “Set Parent”
Please note that this change has an impact on the Pega OOTB Decisioning Funnel Simulation Query and Funnel Step Order.
C. Update Strategy - AllTreatmentsForEligibleOffers
Add a new set property component - “Batch Outbound Treatments“
Connect the following filter components to the new set property component - “Batch Outbound Treatments“ and disconnect from set
property component - “OutboundTreatmentsByBatch“
AppPush Treatments
OutboundCC Treatments
SMS Treatments
Email Treatments
DirectMail Treatments
RCS Treatments


OutboundCC Treatments
SMS Treatments
Email Treatments
DirectMail Treatments
RCS Treatments
MMS Treatments
After set property component - “Batch Outbound Treatments“, call sub-strategy “CheckAvailableCapacityForTreatmentForSimulation“
and name the component as “CheckAvailableCapacityForTreatment“
Connect to existing set property component - “OutboundTreatmentsByBatch“
Please note that this change has an impact on the Pega OOTB Decisioning Funnel Simulation Query and Funnel Step Order.
Please also note, this design should be aligned with design NBA FW - SubChannel Validation In Volume Limit Calculation and if both
are being implemented in the same sprint, the sub-strategy component should be added after filter component - “Treatment Volume Limit
Check”.


1608
D. Update Strategy - GetMaxCapacityForTreatments
Add new set property component - “Set Treatment ControlGroup Percentage” after proposition import -  “ImportAllTreatments“ and set
as following -
.TreatmentControlGroupPercentage = .ControlGroupPercentage
Connect to data join - “Join Offers with Treatments to fetch CG”
Update property mapping in data join - “Join Offers with Treatments to fetch CG” as -
Remove .ControlGroupPercentage = .ControlGroupPercentage
Add .OfferControlGroupPercentage = .ControlGroupPercentage
Add new set property component - “Set ControlGroup Percentage” after data join - “Join Offers with Treatments to fetch CG” and set as
following -
.ControlGroupLevel = @if(.TreatmentControlGroupPercentage ="0","Offer","Treatment")
.ControlGroupPercentage = @if(.TreatmentControlGroupPercentage
="0",.OfferControlGroupPercentage,.TreatmentControlGroupPercentage)
Add sub-strategy component - “CalculateTreatmentVolumeLimits“ after set property component - “Set ControlGroup Percentage”
Remove the following components - “Get Volumelimit with Treatments having SubChannel“, “VolumeConstraints“, “Total VolumeLimit for
all sub channels per Treatment“ and connect sub-strategy component - “CalculateTreatmentVolumeLimits“  to filter component -
“Treatments Having VolumeLimit“
Update filter component - “Treatments Having VolumeLimit“ with condition as -
.TreatmentVolumeLimit>0
Update set property component - “Set MaxCapacity for SubChannels and Non Subchannels“ to update following set operation -
.AdjustedCapacity = .TreatmentVolumeLimit+(.TreatmentVolumeLimit*.ControlGroupPercentage)
Please also note, this design uses new sub-strategy CalculateTreatmentVolumeLimits from design NBA FW - SubChannel Validation In
Volume Limit Calculation .


1609
NBA FW - Dual Running Of Models (Old & New Pipeline)
Impact in Other areas
Dependencies
Logic Changes (In Scope)
A. Update Strategy - GetBDCPropensity
B. Update Strategy - IdentifyModelBasedIntents
Logic Changes (NOT  in Scope)
C. Update Strategy - CrossSellRules1
D.  Update Strategy - CrossSellRules2
E.  Update Strategy - EligibleAdConsDiscountChildPropositions
F. Update Strategy - CalculateChurnScoreRange
Future Logic Changes (NOT  in Scope)
G. Update Strategy - PickBestT reatmentForOf ferByChannelModel
H. Update Strategy - AtomicRulesSet3
I. Update Strategy - IdentifyEligibleUpsellOf fers
J. Update Strategy - PopulateOutputPropertiesForEmailByBatch
K. Update Strategy - PrioritiseCrossSellT reatmentV ariants
L. Update Strategy - TreatmentV ariationSKUCheckAgainstModelScore
M. Update Strategy - UpsellEligibility
N. Update Strategy - UpsellRules2
O. Update Strategy - CalculateChurnScoreBand
P. Update Strategy - GetCustomerStarRating
Q. Update Strategy - PickBestPathway
R. Update Strategy - RetentionRules3
Impact in Other areas
Dependencies613758 New BDC Pipeline - dual running
App No
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App No  Area Yes/No Comments


1610

Logic Changes (In Scope)
Note: The following strategies are to be updated with new pattern to support dual running of same models from old and new
pipeline as these strategies are using all models in the strategy and not specific models.
A. Update Strategy - GetBDCPropensity
Rename set property component - Populate Model data from PageGroup as “Model 967 from New Pipeline” and disconnect from set
property - “Join All Model Data“
Add new filter component - “Model 967 from Old Pipeline” after data import - ModelScore with condition as -
.ModelId = “967”
Disconnect data import - ModelScore from set property - “Join All Model Data“
Add new filter component - “Other Models from Old Pipeline” after data import - ModelScore with condition as -
.ModelId != “967”
Connect to set property - “Join All Model Data“
Add new switch component - “Model 967” and configure as follows -
Select component - “Model 967 from New Pipeline”, if Model967fromNewPipeline.ModelId != ““
Otherwise, select component - “Model 967 from Old Pipeline”
Connect to set property - “Join All Model Data“
B. Update Strategy - IdentifyModelBasedIntents
Rename set property component - Populate Model data from PageGroup as “Model 967 from New Pipeline” and disconnect from filter
component - “Valid Model Scores“
Add new filter component - “Model 967 from Old Pipeline” after data import - ModelScore with condition as -
.ModelId = “967”
Disconnect data import - ModelScore from filter component - “Valid Model Scores“
Add new filter component - “Other Models from Old Pipeline” after data import - ModelScore with condition as -
.ModelId != “967”
Connect to filter component - “Valid Model Scores“


.ModelId != “967”
Connect to filter component - “Valid Model Scores“
Add new switch component - “Model 967” and configure as follows -
Select component - “Model 967 from New Pipeline”, if Model967fromNewPipeline.ModelId != ““
Otherwise, select component - “Model 967 from Old Pipeline”
Connect to filter component - “Valid Model Scores“

Logic Changes (NOT in Scope)
Note: The following strategies are NOT to be updated with new pattern to support dual running of same models from old and new
pipeline as these strategies are using specific models in the strategy.
C. Update Strategy - CrossSellRules1
Uses Model 967 from new pipeline only.  DB No


1611
D.  Update Strategy - CrossSellRules2
Uses Model 967 from new pipeline only.
E.  Update Strategy - EligibleAdConsDiscountChildPropositions
Uses Model 967 from new pipeline only.
F. Update Strategy - CalculateChurnScoreRange
Uses Model 7 from new pipeline only.
Future Logic Changes (NOT in Scope)
These strategies should be updated following the same design pattern when the models are migrated from old to new pipeline.
G. Update Strategy - PickBestTreatmentForOfferByChannelModel
Uses Model 11 from old pipeline only.
H. Update Strategy - AtomicRulesSet3
Uses Model 2 from old pipeline only.
I. Update Strategy - IdentifyEligibleUpsellOffers
Uses Model 967046 from old pipeline only.
J. Update Strategy - PopulateOutputPropertiesForEmailByBatch
Uses Model 8002 from old pipeline only.
K. Update Strategy - PrioritiseCrossSellTreatmentVariants
Uses Model 6 from old pipeline only.
L. Update Strategy - TreatmentVariationSKUCheckAgainstModelScore
Uses Model 6 from old pipeline only.
M. Update Strategy - UpsellEligibility
Uses Model 2 from old pipeline only.
N. Update Strategy - UpsellRules2
Uses Model 2 from old pipeline only.
O. Update Strategy - CalculateChurnScoreBand
Uses Model 9 from old pipeline only.


1612
P. Update Strategy - GetCustomerStarRating
Uses Model 10 from old pipeline only.
Q. Update Strategy - PickBestPathway
Uses Model 9 from old pipeline only.
R. Update Strategy - RetentionRules3
Uses Model 9 from old pipeline only.


1613
NBA FW - Add New Channel eCare to GetNBA
Impact in Other areas
Dependencies
Change Description
Logic Changes
A. New Decision Datas for eCare Channel
B. New Strategy  - ImporteCareT reatments
C. Update Strategy - ImportAllT reatments
D. Update strategy - AllTreatmentsForEligibleOf fers
E. New Proposition Filters - XXXXXX eCareT reatmentEligibility
F. Update strategy - Apply XXXXXX TreatmentEligibility
G. New Strategy - IdentifyEligibleeCareT reatments
H. New Strategy - SeteCareT okens
I. New Strategy - PopulateOutputPropertiesForeCare
J. New Strategy - IdentifyBesteCareT reatmentsForSubscription
K. Update Strategy - GetNBA
L. New Strategy - SetIHForeCare
M. Update Strategy - SetIHPropertiesForAllChannels
Impact in Other areas
Dependencies
Change Description
Add “eCare” channel to GetNBA Execution Mode along with SubChannel “Dashboard”
Strategy FW will be updated to include eCare channel570075 Create new channel (eCare)
PM Tool Yes Add new channel - eCare
PM Tool KT Documentation Yes
Knowledge Transfer Yes
App No
DB No  Area Yes/No Comments
PM Tool Yes Configure new channel in PM Tool for E2E testing
App No
DB No  Area Yes/No Comments


1614

Logic Changes
A. New Decision Datas for eCare Channel
B. New Strategy  - ImporteCareTreatments
Save ImportAppTreatments structure as new strategy ImporteCareTreatments
Update the proposition import components to import new “eCare” group from respective Issues as below (screenshot from App strategy)
C. Update Strategy - ImportAllTreatments
Add ImporteCareTreatments sub-strategy and connect to results
D. Update strategy - AllTreatmentsForEligibleOffers
Connect sub-strategy component - “Apply Channel Control For GetNBA“ to a new channel filter  - “eCare Treatments” with condition:
.Channel = “eCare”
connect to Results
 eCare Care eCare
eCare CrossSell eCare
eCare Engagement eCare
eCare HBB eCare
eCare Loyalty eCare
eCare Renew eCare
eCare Retain eCare
eCare Retention eCare
eCare Service eCare
eCare TradeIn eCare
eCare Upsell eCareDecision Data Issue Group


1615
E. New Proposition Filters - XXXXXXeCareTreatmentEligibility
Create proposition filters as per the table below and set default behaviour as true
F. Update strategy - ApplyXXXXXXTreatmentEligibility
For each of the strategies as per the table below, make the following changes -
Add “eCare Channel” filter with condition: .Channel = “eCare”
Add a new filter - “Apply eCare Treatment Eligibility” and configure to use respective proposition filer as per the table below
Connect to main path
 Care eCare CareeCareTreatmentEligibility
CrossSell eCare CrossSelleCareTreatmentEligibility
Engagement eCare EngagementeCareTreatmentEligibility
HBB eCare HBBeCareTreatmentEligibility
Loyalty eCare LoyaltyeCareTreatmentEligibility
Renew eCare ReneweCareTreatmentEligibility
Retain eCare RetaineCareTreatmentEligibility
Retention eCare RetentioneCareTreatmentEligibility
Service eCare ServiceeCareTreatmentEligibility
TradeIn eCare TradeIneCareTreatmentEligibility
Upsell eCare UpselleCareTreatmentEligibilityIssue Group Proposition Filter
ApplyCareTreatmentEligibility CareeCareTreatmentEligibility
ApplyCrossSellTreatmentEligibility CrossSelleCareTreatmentEligibility
ApplyEngagementTreatmentEligibility EngagementeCareTreatmentEligibility
ApplyHBBTreatmentEligibility HBBeCareTreatmentEligibility
ApplyLoyaltyTreatmentEligibility LoyaltyeCareTreatmentEligibility
ApplyRenewTreatmentEligibility ReneweCareTreatmentEligibility
ApplyRetainTreatmentEligibility RetaineCareTreatmentEligibility
ApplyRetentionTreatmentEligibility RetentioneCareTreatmentEligibility
ApplyServiceTreatmentEligibility ServiceeCareTreatmentEligibility


ApplyServiceTreatmentEligibility ServiceeCareTreatmentEligibility
ApplyTradeInTreatmentEligibility TradeIneCareTreatmentEligibility
ApplyUpsellTreatmentEligibility UpselleCareTreatmentEligibilityStrategy Proposition Filter


1616

G. New Strategy - IdentifyEligibleeCareTreatments
Save existing strategy - IdentifyEligibleAppTreatments as IdentifyEligibleeCareTreatments
Rename sub-strategy component - “All App Treatments For Eligible Offers“ as “All eCare Treatments For Eligible Offers“ and configure it
to use component - “eCare Treatments” from sub-strategy AllTreatmentsForEligibleOffers
H. New Strategy - SeteCareTokens
Save existing strategy SetAppTokens as SeteCareTokens
Remove the set operation in set property component - “Attributes“
I. New Strategy - PopulateOutputPropertiesForeCare
Save existing strategy PopulateOutputPropertiesForApp as PopulateOutputPropertiesForeCare
Replace the sub-strategy - SetAppTokens with SeteCareTokens
J. New Strategy - IdentifyBesteCareTreatmentsForSubscription
Save existing strategy - IdentifyBestAppTreatmentsForSubscription as IdentifyBesteCareTreatmentsForSubscription
Remove sub-strategy component - ApplyTreatmentSelfContention
Replace sub-strategy - PopulateOutputPropertiesForApp with PopulateOutputPropertiesForeCare
Configure SubChannel “Dashboard” in TreatmentToSubChannels decision data for eCare treatments for sub-strategy
IdentifyTreatmentSubChannelForGetNBA
K. Update Strategy - GetNBA
Add new sub-strategy component - IdentifyBesteCareTreatmentsForSubscription
Update switch component - “Select Channel“ to add a new “Else Select” step before “Otherwise” as below -
Select component - IdentifyBestAppTreatmentsForSubscription if @equalsIgnoreCase(Primary.Context(Channel),"eCare")
L. New Strategy - SetIHForeCare
Save existing strategy - SetIHForApp as SetIHForeCare
M. Update Strategy - SetIHPropertiesForAllChannels


M. Update Strategy - SetIHPropertiesForAllChannels
After “SetGenericIHReportingAttributes” sub-strategy, add “eCare Channel” filter with condition:
.Channel = “eCare”
Call sub-strategy “SetIHForeCare“ and connect to channel filter
Connect to SetDefaultValuesToIHProperties sub-strategy call
Connect to Results


1618
NBA FW - Standard outcome - make all upcase
Impact in Other areas
Dependencies
Logic Development Changes

List of strategies to be updated469699 Standard outcome - make all CAPS
App No
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App No
DB No  Area Yes/No Comments
AtomicRulesSet4 SelectedOutcomes Selected
AtomicRulesSet5 SelectedOutcomes Selected, Pending
CaptureResponseForAppPush IHwithSelectedoutcome Selected
CaptureResponseForEmail Ihwithpendingoutcome Pending
CaptureResponseForSetNBA IHwithSelectedoutcome Selected
ContactRules1 SelectedorPending Selected, Pending
ContactRules2 SelectedorPending Selected, Pending
ContactRules2 Selected Outcomes in last 60 days PendingStrategy Component Response Values


1619

 CrossSellRules1 IHinlast4days Selected, Pending
CrossSellRules2 SelectedorPending Selected, Pending
GenerateInferredOutcomesT2S SelectedOutcomes30daysAgo Selected
GenerateInferredOutcomesT2S InferredOBCCResponses Inferred-Positive, Inferred-Negative
GenerateInferredOutcomesT2S InferrredSMSResponses Inferred-Positive, Inferred-Negative
ProcessSMSOutcomesT2S FilterT2SSMSSend Selected
UpsellEligibility SelectedOutcomesinlast28days Selected
UpsellRules4 SelectedOutcomesinlast28days Selected
AtomicRulesSet3 R0080Subscriptionhasbeenpresentedwithadata
offerinAoMinthelast1daySelected
GetIHAtCustomerLevel SelectionBySubscriptionPositive Inferred-Positive, DIALLED_SUCCESS,
Accepted
GetIHAtCustomerLevel SelectionBySubscriptionNegative Inferred-Negative,
DIALLED_NOT_ELIGIBLE,
DIALLED_DECLINE,
DIALLED_DECLINE_DNC, REJECTED,
Rejected, Rejected-Agent
GetIHAtCustomerLevel SelectionBySubscription Selected, Pending
IHAndTealiumValidation IHWithSelectedOutcome Selected
ProcessDiallerOutcomes IHwithSelectedOutcome Selected
ProcessSMSOutcomesT2S Primary.SubscriptionFlexAttribute - FlexiField CustomStringField206
ValidateIntentsWithIH EventToIntent (Decision Data) -
SecondaryContext where
.EventDataSource="IH"Selected
CaptureResponseForMMS IHwithSelectedoutcome Selected
CaptureResponseForRCS IHwithSelectedoutcome Selected
CaptureResponseForMicrosite IHwithSelectedoutcome Presented
CaptureResponseForSMS IHwithSelectedoutcome Selected
CaptureResponseForOutboundCC IHwithSelectedOutcome Selected


1620
NBA FW - Capture responses from eCare
Impact in Other areas
Dependencies
Change Description
Logic Changes
Impact in Other areas
Dependencies
Change Description
Add “eCare” channel to GetNBA Execution Mode along with SubChannel “Dashboard”
Strategy FW will be updated to include eCare channel

Logic Changes
Response from eCare will use the existing SetNBAResponse API and there is no logic change required (as the current story does not
specify any additional data to be recorded) other than configuring the OutcomeMapping decision data for eCare channel. However, the
setNBAResponse API and the logic will be dev-tested to validate that the new channel works.

The following responses/outcomes will be written to IH - 570081 Capture responses from eCare
PM Tool No Add new channel - eCare
PM Tool KT Documentation Yes
Knowledge Transfer Yes
App No
DB No  Area Yes/No Comments
PM Tool Yes Configure new channel in PM Tool for E2E testing
App No
DB No  Area Yes/No Comments
Response/Outcome Description API


1621
 Selected Offer is returned to Channel by AOM GetNBA
Shown Offer is presented on eCare channel SetNBAResponse
Clicked Customer has clicked on Accept button on eCare SetNBAResponse
Dismissed Customer has rejected the offer on eCare SetNBAResponse


1622
NBA FW - Introduce a decision mix capability for eCare channel
Impact in Other areas
Dependencies
Change Description
PM Tool Changes
A. Introduce a new level under “SubChannel” called “Division”
B. Update Treatment to SubChannel mapping
C. Update Of fer Decision Mix
Logic Changes
D. Update Decision Data - Of ferDecisionMix
E. New Decision Data - TreatmentT oSubChannels
F. Update Strategy - IdentifyT reatmentSubChannelForGetNBA
G. New Strategy - IdentifyBestT reatmentForT radeInOnGetNBA
H. New Strategy - IdentifyBestT reatmentForIVRSMSOnGetNBA
H. New Strategy - IdentifyBestT reatmentForAppOnGetNBA
J. New Strategy - IdentifyBestT reatmentForeCareOnGetNBA
K. Update Strategy - IdentifyBestT reatmentForGetNBA
H. Update Strategy - IdentifyBesteCareT reatmentsForSubscription
Impact in Other areas
Dependencies
Change Description
Add “eCare” channel to GetNBA Execution Mode along with SubChannel “Dashboard”
Introduce a new level under “SubChannel” called “Division” to reference NudgeBar1-5 in “Dashboard” for care channel570078 Introduce a decision mix capability for eCare channel
PM Tool Yes Add new channel - eCare & New Decision Mix Structure
PM Tool KT Documentation Yes
Knowledge Transfer Yes
App No
DB No  Area Yes/No Comments
PM Tool Yes Configure new channel & decision mix in PM Tool for E2E testing
App No
DB No  Area Yes/No Comments


1623
PM Tool Changes
A. Introduce a new level under “SubChannel” called “Division”
User should be able to “add” new “Division” for a “SubChannel”
Existing “Division” can be re-used for existing or new “SubChannel”
“Division” is an optional configuration for “SubChannel”
Example configuration for eCare

B. Update Treatment to SubChannel mapping
While selecting SubChannel for treatments, user should optionally be able to map one treatment to one Division only under the
selected SubChannel
The above mapping should be pushed to updated Decision Data - TreatmentToSubChannels as detailed in the logic section
Generate Unique Key and set to pyName/ pyLabel for each combination of ExecutionMode, TreatmentName, Channel,
TargetSubChannel, Division
C. Update Offer Decision Mix
Add 3 new columns to Offer Decision Mix
Channel : Text (Optional) - single value - refers to existing channels
SubChannel : Text (Optional) - single value - should only be available if Channel is selected and refers to  SubChannels for the
selected Channel
Division : Text (Optional) - single value - should only be available if SubChannel is selected and refers to  Divisions for the selected
SubChannel
MinOffers : Integer (Optional) - possible values - 0 or any positive integer
Generate Unique Key and set to pyName/ pyLabel for each combination of ExecutionMode, DecisionMixContext, Channel,
TargetSubChannel, Division, MaxOffers, MinOffers
Setting up SubChannel and Division level decision mix
To setup Division level entries, relevant SubChannel level entries should be created first
Validation of MaxOffers
MaxOffers field should be validated to enter 1 or positive numbers or can be marked as “Unlimited” which should send -1 as value to
relevant decision data


relevant decision data
If SubChannel level MaxOffers is setup,
sum of all the Division level MaxOffers (if setup without using Unlimited for any of the Division), should not exceed SubChannel
level MaxOffers
while setting up MaxOffers at relevant Division level, only one of the Division MaxOffers can be setup as Unlimited. Please Note
- This MaxOffers for such Division (at run-time) will be derived as SubChannel MaxOffers -  sum of all the Division (non eCare Dashboard NudgeBar1
NudgeBar2
NudgeBar3
NudgeBar4
NudgeBar5Channel SubChannel Division


1624
Unlimited) level selected treatments (Done in Logic)
If Division level entries exists, the relevant SubChannel level MaxOffers can not be marked as Unlimited
Validation of MinOffers
MinOffers is optional i.e. if not set, should be set to 0 and pushed to relevant decision data
MinOffers field, if entered, should be validated to enter 0 or positive numbers; it can not be marked as Unlimited
If SubChannel level MinOffers is setup,
sum of all the Division level MinOffers should be equal to SubChannel level MinOffers
Example configuration for eCare
Logic Changes
D. Update Decision Data - OfferDecisionMix
Add 3 new properties -
Channel (existing)
TargetSubChannel (existing)
Division (text)
MinOffers (integer)
Update the existing entries as follows - Generated -
UniqueGetNBA eCare eCare Dashboard  10 1
Generated -
UniqueGetNBA eCare eCare Dashboard NudgeBar2 2 0
Generated -
UniqueGetNBA eCare eCare Dashboard NudgeBar3 2 0
Generated -
UniqueGetNBA eCare eCare Dashboard NudgeBar4 2 0
Generated -
UniqueGetNBA eCare eCare Dashboard NudgeBar5 Unlimited (-1) 1pyName ExecutionM
odeDecisionMixConte
xtChannel TargetSubCh
annelDivision MaxOffers MinOffers
Generated -
UniqueBatch Default    1 0
Generated -
UniqueTIL Default    1 0
Generated -
UniqueGRPL Default    6 0pyName ExecutionM
odeDecisionMixConte
xtChannel SubChannel Division MaxOffers MinOffers


1625
Create entries for eCare channel in  OfferDecisionMix as follows -
E. New Decision Data - TreatmentToSubChannels
Add 1 new property -
Division (text)

F. Update Strategy - IdentifyTreatmentSubChannelForGetNBA
Remove data join component - “Join by Treatment Names“
Place decision data component - “TreatmentToSubChannels“ in the main path between ExternalInput and sub-strategy - “Apply
SubChannel Control For GetNBA“ with following configuration -
Conditions -
TreatmentName = pyName
Mapping -
Uncheck “Automatically map properties with identical names“
Check “Enable additional mapping“ and add mapping as below -
TreatmentName = TreatmentName
TargetSubChannel = TargetSubChannelGenerated -
UniqueGetNBA Default
IVR-SMS   1 0
Generated -
UniqueProcessEven
tDefault    1 0
Generated -
UniqueGetNBA TradeIn    5 0
Generated -
UniqueNBAA Default    3 0
Generated -
UniqueGetNBA MVA-App
AppApp   10 0
Generated -
UniqueGetNBA eCare eCare Dashboard  10 1
Generated -
UniqueGetNBA eCare eCare Dashboard NudgeBar2 2 0
Generated -
UniqueGetNBA eCare eCare Dashboard NudgeBar3 2 0
Generated -
UniqueGetNBA eCare eCare Dashboard NudgeBar4 2 0
Generated -
UniqueGetNBA eCare eCare Dashboard NudgeBar5 Unlimited (-1) 1pyName ExecutionM
odeDecisionMixConte
xtChannel SubChannel Division MaxOffers MinOffers


1626
Division = Division
G. New Strategy - IdentifyBestTreatmentForTradeInOnGetNBA
Save IdentifyBestTreatmentForGetNBA as IdentifyBestTreatmentForTradeInOnGetNBA
Remove all components other than highlighted in Red box below -
Rename Set property component - “Max Offers“ as “Max Offers for TradeIn“
Rename Decision Data component - “OfferDecisionMix“ as “OfferDecisionMix TradeIn“
H. New Strategy - IdentifyBestTreatmentForIVRSMSOnGetNBA
Save IdentifyBestTreatmentForGetNBA as IdentifyBestTreatmentForIVRSMSOnGetNBA
Remove all components other than highlighted in Red box below -


1627
Update the condition in decision data component - OfferDecisionMix IVR -
ExecutionMode = "GetNBA"
DecisionMixContext = “IVR-SMS”

H. New Strategy - IdentifyBestTreatmentForAppOnGetNBA
Save IdentifyBestTreatmentForGetNBA as IdentifyBestTreatmentForAppOnGetNBA
Remove all components other than highlighted in Red box below -
Update the condition in decision data component - OfferDecisionMix App -


1628
ExecutionMode = "GetNBA"
DecisionMixContext = “App”
Channel = “App”
Remove filter component - “App channel“ between Set property component - “Max Offers for App“ and Prioritise component - “Prioritize
App“
J. New Strategy - IdentifyBestTreatmentForeCareOnGetNBA
Create a new strategy based IdentifyBestTreatmentForeCareOnGetNBA & ApplyDecisionMixAtDivisionLevel on the design as per the
Miro Board - for eCare channel (https://miro.com/app/board/uXjVOQhdnSw=/ -  )
Please note that following strategy components are suggested for the implementation as denoted by colours in the Miro board -
Teal - External Input/ Results
Blue - Decision Data (in main path)
Yellow - Data Import
Green - Filter
Dark Grey - Data Join
Brown - Sub-Strategy
Light Grey - Set Property
Red - Group By
Pink - Prioritize
Purple - Sub-Strategy
White - Embedded Strategy

K. Update Strategy - IdentifyBestTreatmentForGetNBA
Remove the components highlighted in Red box as below -
Connect your Miro account


1629
Add new filter component - “TradeIn“ after ExternalInput with condition -
BusinessPurpose = “TradeIn“
Add a sub-strategy component - IdentifyBestTreatmentForTradeInOnGetNBA after the filter - “TradeIn” and connect to Results
Create an alternate path from External Input and add new filter component - “IVR and Deflection SMS“ with condition -
@equalsIgnoreCase(.Channel,IVR) || @equalsIgnoreCase(.Channel,SMS)
In the new alternate path, a sub-strategy component - IdentifyBestTreatmentForIVRSMSOnGetNBA after the filter - “IVR and Deflection
SMS“  and connect to Results
Create another alternate path from ExternalInput and add new filter component - “App“ with condition -
@equalsIgnoreCase(.Channel,App)
In the new alternate path, a sub-strategy component - IdentifyBestTreatmentForAppOnGetNBA after the filter - “App“  and connect to
Results
Create another alternate path from ExternalInput and add new filter component - “eCare“ with condition -
@equalsIgnoreCase(.Channel,eCare)
In the new alternate path, a sub-strategy component - IdentifyBestTreatmentForeCareOnGetNBA after the filter - “eCare“  and connect
to Results
H. Update Strategy - IdentifyBesteCareTreatmentsForSubscription
Update Set property - “Set ErrorMessage” to “Error Message - No Decision”
Set ErrorMessage = “No Decision”
Add new  Set property - “Error Message - MinOffers Check Failed”
Set ErrorMessage = “MinOffers Check Failed”
Update switch component - “Make Decision” as follows -
Select  Set property - “Error Message - MinOffers Check Failed”, if IdentifyBestTreatmentsForSubscription.pyName = ““


Select Set property - “Error Message - No Decision”, if SetIHPropertiesForAllChannels.pyName = ““
Otherwise, select sub-strategy SetIHPropertiesForAllChannels


1630
NBA FW - Prioritize List of Plans
Impact in Other areas
Dependencies
Revision:
To deliver this story, only one sort order should be built. This should be used for both SIMO and non-SIMO plans. Plans should be sorted in
the following order:
Hero Plan indicator (Y/N) - Descending (Y first)
Unlimited Plan indicator (Y/N) - Descending (Y first)
Evo Plan indicator (Y/N) - Descending (Y first)
Data Allowance - Ascending
Net Price - Ascending
Product ID - Ascending
Logic Changes:
Create new strategy PrioritizePlans
Enable External Input.
Join external input to three new filters , "Not Tariff" and "Tariff". In the filter named "Not Tariff" add the condition as
@String.notEqualsIgnoreCase(.ProductRecommendationType,"Tariff") and join this filter to the result component.
In the filter called "Tariff", add the condition as @String.equalsIgnoreCase(.ProductRecommendationType,"Tariff") and join this filter to
the new set property called “All Plans“
In the set property ,”All Plans” set the following properties
.DiscountAmount = @if(.DiscountAmount="",0,.DiscountAmount)
.RecommendedTariffData = @if(.RecommendedTariffData="",0,.RecommendedTariffData) and also set below properties as per below
image.484338 Prioritize List of Plans - Hero plan
App No
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App Yes
DB No  Area Yes/No Comments


1631

Create new set property, “HeroPlanId from Context“ and set .HeroPlanId= Primary.Context(HEROPLANID)
Join the set property to the three new filters ,”Hero Plan” , “Not Hero Unlimited Plan“ and “Not Hero Not Unlimited Plan“.
In the first filter called “Hero Plan”, add the condition as @String.equals(.ProductID,HeroPlanIdfromContext.HeroPlanId)
In the second filter “Not Hero Unlimited Plan“, add the condition as
@String.notEquals(.ProductID,HeroPlanIdfromContext.HeroPlanId)&&.RecommendedTariffData=9437184
In third filter ,”Not Hero Not Unlimited Plan” add the condition as
@String.notEquals(.ProductID,HeroPlanIdfromContext.HeroPlanId)&&.RecommendedTariffData!=9437184
Join the filter called “Hero Plan“ to the new set property component called “Priority for Hero Plan“ and set .ValueDecimal=1
Join the above set property named “Priority for Hero Plan“ to the new empty set property. Name the empty set property as “All“
Connect the other above created filter “Not Hero Unlimited Plan“ to the new Group by component called “Unlimited Plan Count“. In the
group by


1632
Connect the group by component “Unlimited Plan Count“ to the two new filters ,“One Unlimited“ and “Multiple Unlimited“
Set the condition as UnlimitedPlanCount.ValueInteger>1 in the filter called “One Unlimited“
Join this filter called “One Unlimited“ to the set property called “Priority for single Unlimited Plan“ and set properties .ValueDecimal=2
and .ValueInteger=0 and connect this set property to an existing empty set property component called “All“
Set the condition as UnlimitedPlanCount.ValueInteger>1 in the filter called “Multiple Unlimited“
Connect the filter called “Multiple Unlimited“ to the new filter called “Unlimited EVO“ and add the condition as
@String.equalsIgnoreCase(.SegmentofTariff,"Loan")
Join the above filter called “Unlimited EVO“ to the new group by component ,”Unlimited EVO Count”
Connect the group by component ,”Unlimited EVO Count” to new filter called “One Unlimited EVO“ and add the condition in the filter as
.ValueInteger=1 and connect this filter to the new set property “Priority for single Unlimited EVO“ and set .ValueDecimal=2 and
.ValueInteger=0 and Join this set property to the an existing set property called “All“
Connect an existing filter ,”Unlimited EVO” to the new filter called “Multiple Unlimited EVO“. In this filter add the condition as
UnlimitedPlanCount.ValueInteger>1
Connect the above filter “Multiple Unlimited EVO“ to new prioritize component called “Prioritize by DiscountAmount Unlimited EVO“. In
this prioritize component , prioritize by .DiscountAmount in ascending order
Connect the above prioritize component to the new set property, “Priority for Unlimited EVO“ and set .ValueDecimal=.pxRank+1 and
.pyName="UnlimitedEVO"


.pyName="UnlimitedEVO"
Join the set property “Priority for Unlimited EVO“ to two new group by components and the new datajoin.
In the group by , “Group By DiscountAmount and pyName“ apply the group by on .DiscountAmount and .pyName
Join the group by component ““Group By DiscountAmount and pyName“ “ to the four new filters. In the first filter called , “Unique
DiscountAmount Unlimited EVO“ add the condition as .ValueInteger=1&&.pyName="UnlimitedEVO" and Join this filter new an existing


1633
empty set property component “All“
Join the group by component “Group By DiscountAmount and pyName“ to the second filter. In the second filter called , “Same
DiscountAmount Unlimited EVO“ add the condition as .ValueInteger>1&&.pyName="UnlimitedEVO"
Connect the set property, “Priority for Unlimited EVO“ to the new data join name “Matching DiscountAmount Unlimited EVO“
In the data join , join with “Same DiscountAmount Unlimited EVO“
      and in the properties mapping map .ValueDecimal=.ValueDecimal
Join the filter, ”Multiple Unlimited” to the new filter called  “Unlimited Not EVO“ and the condition as
@String.notEqualsIgnoreCase(.SegmentofTariff,"Loan")||@AOMUtilities.IsNullOrEmpty(.SegmentofTariff) and join this filter to the new
prioritize component called “Prioritize by DiscountAmount Unlimited Not EVO“. Prioritize on .DiscountAmount in Ascending order and
select the output as All.
Connect the existing set property, ”Priority for Unlimited EVO” to the new group by component called “Max Rank for Unlimited EVO“ and
in this group by set .ValueInteger1= max of .ValueDecimal
Connect the above created set property, ”Prioritize by DiscountAmount Unlimited Not EVO” to the new set property called “Set Priority
Unlimited Not EVO“ and in this set property set the below fields as .ValueDecimal=MaxRankforUnlimitedEVO.ValueInteger1+.pxRank
and .pyName="UnlimitedNotEVO"
Join the existing group by component “Group By DiscountAmount and pyName“ to the new filter called “Unique DiscountAmount
Unlimited Not EVO“


Unlimited Not EVO“
In the filter, “Unique DiscountAmount Unlimited Not EVO“ add the condition as .ValueInteger=1&&.pyName="UnlimitedNotEVO" and join
this filter to an existing empty set property as “All“


1634
Join the existing group by component “Group By DiscountAmount and pyName“ to the new filter called “Same DiscountAmount
Unlimited Not EVO“
In the filter, “Same DiscountAmount Unlimited Not EVO“ add the condition as .ValueInteger>1&&.pyName="UnlimitedNotEVO"
Connect the existing set property “Set Priority Unlimited Not EVO“ to the new group by component called “Max Rank for Not Unlimited
EVO“  and set .ValueInteger2= Max of .ValueDecimal
Connect the existing set property “Set Priority Unlimited Not EVO“ to the new data join called “Matching DiscountAmount Unlimited Not
EVO“ and join it with
and in the properties mapping map .ValueDecimal=.ValueDecimal
Connect an existing above created data join called “Matching DiscountAmount Unlimited EVO“ to the new prioritize component called
“Low to High ProductID EVO“ and apply prioritization on .ProductID in Ascending order.
Join the above prioritize component called “Low to High ProductID EVO“ to new set property named “Set ValueDecimal3 to Priority on
ProductID EVO“ and
In the above set property, “Set ValueDecimal3 to Priority on ProductID EVO“ set .ValueDecimal3 = .pxRank and join this to an existing
empty set property called “All“
Join an existing data join , ”Matching DiscountAmount Unlimited Not EVO” to the “new prioritize component called “Low to High
ProductID Not EVO“ and apply prioritization on .ProductID in ascending order and select output as All
Connect the above prioritize component ,“Low to High ProductID Not EVO“ to the new set property called ”Set ValueDecimal4 to Priority


on ProductID not EVO” and set .ValueDecimal4=.pxRank and join this set property ”Set ValueDecimal4 to Priority on ProductID not
EVO” to an existing set property called “All“
Not Hero Not Unlimited Plan
Connect the existing set property , “All Plans“ to the new filter called “Not Hero Not Unlimited Plan“


1635
Add the condition in the filter called “Not Hero Not Unlimited Plan“ as
@String.notEquals(.ProductID,HeroPlanIdfromContext.HeroPlanId)&&.RecommendedTariffData!=9437184
Connect the above filter “Not Hero Not Unlimited Plan“ to two new filters called “EVO“ and “Not EVO“
In the filter called “EVO“, add the condition as @String.equalsIgnoreCase(.SegmentofTariff,"Loan") and join this filter to new group by
component “EVO Count“ and the new filter “Multiple EVO“
In the group by component “EVO Count“,
Join the above group by component “EVO Count“ to the filter component called “One EVO“ and in this filter add condition as
.ValueInteger=1
Connect the filter “One EVO“ to the new set property called “Priority for single EVO“ and set .ValueDecimal =
MaxRankforNotUnlimitedEVO.ValueInteger2+1 and set .ValueInteger =0
Connect the set property called “Priority for single EVO“ to an empty set property called “All“
Join the existing filter , “Multiple EVO“ to the new prioritize component called “Low to High RecommendedTariffData EVO“ and apply
priroritization on the .RecommendedTariffData in the Ascending order and select output as All.
Join this prioritize component “Low to High RecommendedTariffData EVO“ to the new set property called “Priority for EVO“. In this set
property component , set .ValueDecimal= MaxRankforNotUnlimitedEVO.ValueInteger2+.pxRank and .pyName ="EVO"
Connect the set property “Priority for EVO“ to two new group by components and one new data join.


Connect the set property “Priority for EVO“ to two new group by components and one new data join.
Connect the set property “Priority for EVO“ to the new group by component called “Max Rank EVO“
Connect the set property “Priority for EVO“ to the new group by component called “Group By RecommendedTariffData“


1636
Join the above group by component “Group By RecommendedTariffData“ to new three filters.
Connect the group by component  “Group By RecommendedTariffData“ to the new filter called “Unique RecommendedTariffData Not
EVO“ and add the condition as .ValueInteger=1&&.pyName="NotEVO" and connect this filter to an existing empty set property called
“All“
Connect the group by component  “Group By RecommendedTariffData“ to the new filter called “Same RecommendedTariffData Not
EVO“ and add the condition as .ValueInteger>1&&.pyName="NotEVO"
Join the group by component  “Group By RecommendedTariffData“ to the new filter called “Same RecommendedTariffData EVO“ and
add the condition as .ValueInteger>1&&.pyName="EVO"
Join the existing set property, ”Priority for EVO” to the new data join called “Matching RecommendedTariffData EVO“ and in this data join
and map .ValueDecimal = .ValueDecimal in the properties mapping
Connect the data join, “Matching RecommendedTariffData EVO“ to the new prioritize component called “Prioritize by DiscountAmount
EVO“ and prioritize on .DiscountAmount in the Ascending Order.
Join this Prioritize component to one new data join and one new set property.
Connect the prioritize component called “Prioritize by DiscountAmount EVO“ to the new data join called “Matching DiscountAmount
EVO“
Connect the prioritize component called “Prioritize by DiscountAmount EVO“ to the new set property called “Set ValueDecimal1 to
priority on DiscountAmount“ and set .ValueDecimal1 = .pxRank
Join set property , “Set ValueDecimal1 to priority on DiscountAmount“  to the new group by component called “Group By


DiscountAmount 1“


1637
Connect this group by component, “Group By DiscountAmount 1“  to four new filters.
Connect this group by component, “Group By DiscountAmount 1“  to the new filter called “Unique DiscountAmount EVO“ and add the
condition as .ValueInteger=1&&.pyName="EVO" and join this filter called “Unique DiscountAmount EVO“ to an existing empty set
property called “All“
Connect this group by component, “Group By DiscountAmount 1“  to the new filter called “Unique DiscountAmount Not EVO“ and add
the condition as .ValueInteger=1&&.pyName="NotEVO" and join this filter called “Unique DiscountAmount Not EVO“ to an existing
empty set property called “All“
Join this group by component, “Group By DiscountAmount 1“  to the new filter called “Same DiscountAmount EVO“ and add the
condition as .ValueInteger>1&&.pyName="EVO"
In the above created data join called “Matching DiscountAmount EVO“ join with “Same DiscountAmount EVO“ and in the  properties
mapping map .ValueDecimal1 = .ValueDecimal1

 Connect the group by component, “Group By DiscountAmount 1“  to the new filter called “Same DiscountAmount EVO“ and add the
condition as .ValueInteger>1&&.pyName="NotEVO"
Join existing filter called “Not Hero Not Unlimited Plan“ to the new filter called “Not EVO“. Add condition
@String.notEqualsIgnoreCase(.SegmentofTariff,"Loan")||@AOMUtilities.IsNullOrEmpty(.SegmentofTariff)
Connect the filter “Not EVO“ to the prioritize component called “Low to High RecommendedTariffData Not EVO“ and prioritize by


.RecommendedTariffData in the ascending order.
Connect the above prioritize component, called “Low to High RecommendedTariffData Not EVO“ to the new property called “Set Priority
for Not EVO“ and set .ValueDecimal = MaxRankEVO.ValueInteger3+.pxRank and set .pyName="NotEVO" and .ValueInteger = 0
Join the set property , “Set Priority for Not EVO“ to the data join, “Matching RecommendedTariffData Not EVO“ and join with Same
RecommendedTariffData Not EVO and in the properties mapping map .ValueDecimal = .ValueDecimal


1638

Connect the datajoin , “Matching RecommendedTariffData Not EVO“ to the new prioritize called “Prioritize by DiscountAmount Not“ and
prioritize on .DiscountAmount in the Ascending Order.
Join the prioritize component , “Prioritize by DiscountAmount Not“  to the new set property component named “Set ValueDecimal2 to
priority on DiscountAmount“ and in this set property set .ValueDecimal2=.pxRank and join this component to an existing group by
component called “Group By DiscountAmount 1“
Connect the prioritize component , “Prioritize by DiscountAmount Not“  to the new data join component named “Matching
DiscountAmount Not EVO“ and in this data join , join it with “Same DiscountAmount Not EVO“ filter component and in the properties
mapping map .ValueDecimal2 = .ValueDecimal2
and join this data join to an existing prioritize component called “Low to High ProductID Not EVO“
Connect an existing set property called “All“ to the prioritize component and name this component as “Final Prioritization“ and add
condition as .ValueDecimal 1 0 0 0 0 0 + . V a l u e D e c i m a l 110000+.ValueDecimal2 1 0 0 0 + . V a l u e D e c i m a l 3100+.ValueDecimal4 and chose
ascending order and select all in the output section.
Join the prioritize component, “Final Prioritization“ to the set property called “RankPosition“ and set .RankPosition=.pxRank and join it to
the result component.
Update strategy GetProductListForAdditionalLine:
Remove the connection between SecondLineDiscountCompatibility strategy and ApplyBundlingForAdditionalLine strategy


Remove the connection between SecondLineDiscountCompatibility strategy and ApplyBundlingForAdditionalLine strategy
Connect strategy SecondLineDiscountCompatibility to the new PrioritizePlans substrategy and connect this substrategy to
ApplyBundlingForAdditionalLine strategy


1639
NBA FW - Activate Global Contact Strategy Changes
Impact in Other areas
Dependencies
Logic Changes:
Update strategy GlobalEligibilityRulesForBatch:
Remove two sub strategies CNT001 ContactRules1 and CNT002 ContactRules1604938 Activate Global Contact Strategy
App No
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App No
DB No  Area Yes/No Comments


1640
Update Strategy: ApplyGlobalContactStrategy:
Update the existing filter called “Apply Global Contact Strategy“ condition with !@String.equalsIgnoreCase(.Mandatory,"Yes")
&&@String.equalsIgnoreCase(.ApplyGlobalContactStrategy,"Yes")&&(!@String.equalsIgnoreCase(.ConfidenceScoreRange,"High")||
(@contains(toUpperCase(.Intent),"UNKNOWN")))
Update the existing set property called “Set GlobalRelevancy By Exposure Rate“ condition with
@if(LatestBatchSelectionBySubscription.pyName!=""&&.ExposureRate>=0&&LatestBatchSelectionBySubscription.DaysSinceLastCom
municationDate<.ExposureRate,"Irrelevant","Relevant")
Update the other existing filter “Do Not Apply Global Contact Strategy“ condition with
@String.equalsIgnoreCase(.Mandatory,"Yes")||!@String.equalsIgnoreCase(.ApplyGlobalContactStrategy,"Yes")||
(@String.equalsIgnoreCase(.ConfidenceScoreRange,"High")&&!(@contains(@toUpperCase(.Intent),"UNKNOWN")))
Update Strategy: GetIHAtCustomerLevel
Update the existing filter called “Batch Selections By Subscription Within SaturationRatePeriod“ condition:
@if(GlobalContactStrategyConfigurationForExecutionModeBatch.SaturationRatePeriod>=0,@CalculateNumberOfDaysFromToday(.Out
comeDate)<GlobalContactStrategyConfigurationForExecutionModeBatch.SaturationRatePeriod,false)
Note: Saturation Period range days should include current day
Note: Exposure Rate: 1 contact in X days. Example : 1 in 2 days means, only one communication should be done in 2 days(Two days
include current date and yesterday)
Configuration: Exposure Rate 1 in 2 days means configure Exposure Rate in ExecutionModes DD as 2
For the above example , if IH has any record with current date or yesterday (It means already one communication happened, so next time
we cannot give offer it becomes Irrelevant)


we cannot give offer it becomes Irrelevant)
For the same above example , If IH has record (current date - 2) then we can give offer


1641
Release 3.02


1642
Simulation - TIL Simulation - Decisioning Funnel & Distribution

Impact in Other areas
Dependencies
References
Logic Changes
A. New Data Set - BundleEventContext
B. New Data Set - OOBChargeSimulationResponse
C. Update Data Flow - IdentifyBestT reatmentsByT riggers
D. New Data Set - SubscriptionsForTILSimulation (C*)
E. New Data Flow - PrepareRealtimeDataForTILSimulation
F. New Data Set - SubscriptionDataForTIL
G. New Data Flow - PrepareDataForTIL
H. Update Strategy - Get OOB Charges
I. Simulation Configuration - Decisioning Funnel Explanation (Pega OOTB)
H. Simulation Configuration - Distribution Test (Pega OOTB)
Impact in Other areas
Dependencies
References
Please refer to Simulation Funnels (TIL)  for the list of Simulation Funnel Steps to be included in the Simulation.
 627426 TIL Execution Mode Simulation
App Yes  As per App design

DB Yes As directed by App
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App Yes  Logic E2E test can be done once app work is completed
DB Yes App Changes can be done once DB changes are finished.Area Yes/No Comments


1643
Logic Changes

A. New Data Set - BundleEventContext
This data set will be created by App team. This will contain the contextual information as passed to the TIL API call including NTID and
Context page for each customer and each call. The contextual information will be stored as JSON in the data set.
B. New Data Set - OOBChargeSimulationResponse
This data set will be created by App team. This will contain the OOB Charge information as passed to the consumed by Logic from OOB
Charges API call via data page D_GetOOBCharges. App will also store the “TransactionId” for each calls to OOB Charges API.
C. Update Data Flow - IdentifyBestTreatmentsByTriggers
Add a secondary destination - data set BundleEventContext
Before the destination add convert shape.
In the convert shape , provide the class name as VFUK-FW-AOMFW-Data-BundleEventContext
but map the properties in the convert shape by referring the data transform rule called InboundTILSimulationRequest (provided by App)
In the destination, Select dataset from drop down and select the dataset called BundleEventContext
D. New Data Set - SubscriptionsForTILSimulation (C*)
This data set will be created and populated by App team. App process will use new data set BundleEventSubscriptionContext as source,
filter the records as needed (by NTID, Context or Channel or both), match the Subscription with Subscription spine and populate Data Set -
SubscriptionsForGetNBASimulation including NTID and Context as expected by IdentifyBestTreatmentsByTriggers strategy for execution.
E. New Data Flow - PrepareRealtimeDataForTILSimulation
Save existing DF - PrepareRealtimeData as PrepareRealtimeDataForTILSimulation
Update Source to use Data Set - SubscriptionsForTILSimulation


Update Source to use Data Set - SubscriptionsForTILSimulation

F. New Data Set - SubscriptionDataForTIL
Create a new C* data set by replicating existing data set - SubscriptionDataForBatchNBA

G. New Data Flow - PrepareDataForTIL
Save existing DF - PrepareDataForBatchNBA as PrepareDataForTIL
Update Source to use Data Flow - PrepareRealtimeDataForTILSimulation
Update Destination to use data set - SubscriptionsDataForTIL

H. Update Strategy - Get OOB Charges
Update the data import component - OOB Charges to call the data page - D_GetOOBCharges as follows -
D_GetOOBCharges[SubscriptionId:Primary.CustomerID,ServiceNumber:Primary.ServiceNumber, Primary.Context(TransactionId),
Primary.Context(IsSimulationMode)].pxResults


1644
Please note that App team will update the parameters for data page - D_GetOOBCharges to include 2 new parameters -
TransactionId - Text
IsSimulationMode - Text (valid values - true/false)
The above 2 data items - TransactionId & IsSimulationMode will be passed as context parameters in BundleEvent API request
I. Simulation Configuration - Decisioning Funnel Explanation (Pega OOTB)
Strategy - IdentifyBestTreatmentsByTriggers
Audience - SubscriptionDataForTIL
Simulation Query
Please refer to Simulation Funnels (TIL)  for funnel steps
H. Simulation Configuration - Distribution Test (Pega OOTB)
Strategy - IdentifyBestTreatmentsByTriggers
Audience - SubscriptionDataForTIL
Simulation Query


1645
Simulation - TIL Simulation - Customer Level
Impact in Other areas
Dependencies
References
Logic Change
A. New DataSet - BaselineSubscriptionDataForTIL
B. New Data Flow - PrepareBaselineDataForTIL
C. New DF - CustomerSimulationForTIL
D. New DF - CustomerBaseLineSimulationForTIL
F. Strategy Change for Step 4 - Control Group Contention
F2. Update Strategy - IdentifyEligibleOf fers
G. Strategy Change for Step 5 - Of fer Eligibility
G1. Update Strategy - IdentifyEligibleOf fers
H. Strategy Change for Step 11 - Channel Eligibility
H1. Update Strategy - IdentifyEligibleT reatmentsByT riggers
I. Strategy Change for Step 12 - Channel Contention
I1. Update Strategy - IdentifyEligibleT reatmentsByT riggers
J. Strategy Change for Step 13 - Treatment Eligibility
J1. Update Strategy - IdentifyEligibleT reatmentsByT riggers
K. Strategy Change for Step 14 - Pick Best Treatments For Of fer
K1. Update Strategy - IdentifyBestT reatmentsByT riggers
L. Strategy Change for Step 20 - Pick Best Treatment For Customer
L1. New Strategy - IdentifyBestT reatmentForTILForSimulation
L2. Update Strategy - IdentifyBestT reatmentforSubscription
Impact in Other areas
Dependencies627426 GetNBA Execution Mode Simulation
App Yes  As per App design

DB Yes As directed by App
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App Yes  Logic E2E test can be done once app work is completedArea Yes/No Comments


1646
References
Please refer to Simulation Funnels (TIL)  for the list of Simulation Funnel Steps to be included in the Customer Level Simulation.

Logic Change
A. New DataSet - BaselineSubscriptionDataForTIL
Create a new C* data set by replicating existing data set - SubscriptionDataForBatchNBA
B. New Data Flow - PrepareBaselineDataForTIL
Save existing DF - PrepareDataForGetNBA as PrepareBaselineDataForTIL
Update Destination to use data set - BaselineSubscriptionDataForTIL
C. New DF - CustomerSimulationForTIL
Create the DF in class VFUK-FW-AOMFW-Data-Subscription
Source - Data Set SubscriptionDataForTIL
Add a Covert shape after Source DataSet and convert from Subscription class to Subscription class
Enable “Auto Copy”
Add an additional mapping as follows -
.Context("IsSimulationMode")=Param.IsSimulationMode
Add Strategy component and reference strategy IdentifyBestTreatmentsByTriggers
Add Convert shape to convert the data from SR class to CustomerSimulationOutput structure (check with App team about converting
data)
Primary Destination - new Data Set - CustomerSimulationOutput (to be created by App team)
Please note that this design has dependency on Simulation - TIL Simulation - Decisioning Funnel & Distribution  for Data Sets and Data
Flows.
D. New DF - CustomerBaseLineSimulationForTIL
Save DF CustomerSimulationForTIL as DF CustomerBaseLineSimulationForTIL
Replace the source from data set SubscriptionDataForTIL to new data set BaselineSubscriptionDataForTIL
F. Strategy Change for Step 4 - Control Group Contention
F2. Update Strategy - IdentifyEligibleOffers
Replace the sub-strategy in component “ApplyBusinessPurposeQuarantineCheckForControl - TIL“ with the new strategy


ApplyBusinessPurposeQuarantineCheckForControlForSimulation.
Please note that name of the sub-strategy component should not be updated as this name will be used in Pega OOTB Simulation QueryDB Yes App Changes can be done once DB changes are finished.


1647
G. Strategy Change for Step 5 - Offer Eligibility
G1. Update Strategy - IdentifyEligibleOffers
Create an alternate path from sub-strategy component - “ApplyBusinessPurposeQuarantineCheckForControl - TIL“ to set property
component “Reset Tags For Matching”
H. Strategy Change for Step 11 - Channel Eligibility
H1. Update Strategy - IdentifyEligibleTreatmentsByTriggers
After component “Outbound Treatments By Trigger“, replace the sub-strategy in component “ApplyChannelEligibility“ with the new
strategy ApplyChannelEligibilityForSimulation.
Please note that name of the sub-strategy component should not be updated as this name will be used in Pega OOTB Simulation Query
I. Strategy Change for Step 12 - Channel Contention
I1. Update Strategy - IdentifyEligibleTreatmentsByTriggers
After component “ApplyChannelEligibility“, replace the sub-strategy in component “ApplyChannelContention“ with the new strategy
ApplyChannelContentionForSimulation.
Please note that name of the sub-strategy component should not be updated as this name will be used in Pega OOTB Simulation Query
J. Strategy Change for Step 13 - Treatment Eligibility
J1. Update Strategy - IdentifyEligibleTreatmentsByTriggers
After component “ApplyChannelContention, replace the sub-strategy in component “ApplyTreatmentEligibility“ with the new strategy
ApplyTreatmentEligibilityForSimulation.
Please note that name of the sub-strategy component should not be updated as this name will be used in Pega OOTB Simulation Query

K. Strategy Change for Step 14 - Pick Best Treatments For Offer
K1. Update Strategy - IdentifyBestTreatmentsByTriggers


K1. Update Strategy - IdentifyBestTreatmentsByTriggers
After component “IdentifyEligibleTreatmentsByTriggers”, replace the sub-strategy in component “IdentifyBestTreatmentsForOffers“ with
the new strategy IdentifyBestTreatmentsForOffersForSimulation.
Please note that name of the sub-strategy component should not be updated as this name will be used in Pega OOTB Simulation Query
L. Strategy Change for Step 20 - Pick Best Treatment For Customer
L1. New Strategy - IdentifyBestTreatmentForTILForSimulation
Enable External Input
Call Sub-strategy IdentifyBestTreatmentForTIL in the main path
Create an alternate path and set property component “Reset Tags For Matching”
set ValueInteger = 0
set AdhocText1 = ““
In the alternate path, add a data join component - Match Eligible Propositions and join with component
IdentifyBestTreatmentForGetNBA
with join condition .pyName = .pyName
Do not enable “exclude”


1648
In Property Mapping, set ValueInteger = 1
In the alternate path, add a Set property component “Record Dropped Propositions” and set the following properties
AdhocText1 = @if(.ValueInteger=1,"",@AOMUtilities.CaptureSimulationDropOff(“Pick Best Treatment For Customer“, MyStepPage))
In the alternate path, add a filter component “Eligible Propositions” with filter condition as ValueInteger = 1
In the main path, add a Switch component “Simulation Mode Check”
Select component “Eligible Propositions”, if Simulation Mode is ON
(@String.equalsIgnoreCase(Primary.Context("IsSimulationMode"),"true"))
Otherwise, select component IdentifyBestTreatmentForTIL
Connect to results
L2. Update Strategy - IdentifyBestTreatmentforSubscription
After component “ExecutionMode - TIL”, replace the sub-strategy component IdentifyBestTreatmentForTIL with the new sub-strategy
IdentifyBestTreatmentForTILForSimulation.
Please note that name of the sub-strategy component should not be updated as this name will be used in Pega OOTB Simulation Query


1649
Assisted Upgrade - Entertainment Flag changes
HL Requirement
Identify if tariff includes entertainment using the tariff to service compatibility.
Impacted Areas
Configure Product Attributes for Addon
Use PM tool to configure product attributes
Add a new attribute to Addon Products .
This attribute is to flag Addon which are  entertainment addons.
Logic  Changes:
New Strategy - CalculateEntertainmentFlag
1. Input List of Tariffs (Multiple)
2. Set the required parameters for the Tariff to Service Compatibility data page.
Identifier - (For GetCurrentTariff flow → P_+ProductCode, For others P_+RecommendedTariffCode)
Team (For GetCurrentTariff flow → empty, For others from external input)
Division,OrderType,Channel →  (From context)
 3. Group the unique tariffs.
 4. Query D_ServicesForTariff data page for each unique tariff in the input & get the list of services.
 5. Filter .ProductAttributes(DefaultEntertainmentProduct) = true records > gives the services containing Entertainment.664910 Strategic solution for entertainment flag
App No
DB No
Knowledge Transfer No
Logic Yes Update Existing Flow
PM Tool Yes Configuration of EntertainmentFlag on product attributes (addons)
PM Tool KT Documentation No
UI/VADR No  Area Yes/No Comments
DefaultEntertainmentProduct Boolean False Type Default


1650
 6.  Join the input list of Tariffs with the above compatible list based on tariffcode and populate EntertainmentFlag =”True” for the matching
records.

Impacted Strategies:
1 CalculateBasketFinancials 1. Make Substrategy call to CalculateEntertainmentFlag after "TariffInBasket"
2. Update EntertainmentFlag → if EntertainmentFlag then ”True” else “False” (In
“FromTariffinBasket”)
2 CalculateMaxDiscountForBasket 1. Make Substrategy call to CalculateEntertainmentFlag after "TariffinBasket"
2. Update EntertainmentFlag → if EntertainmentFlag then”True” else “False”  (In
“SetInputsforCalculateMaxUpgradeDiscount“)
3 CalculateNetRevenueForDiscountList 1. Make Substrategy call to CalculateEntertainmentFlag after "TariffinBasket"
2. Update EntertainmentFlag → if EntertainmentFlag then”True” else “False”  (In
“FromTariffinBasket”)
4 GetProductDetailAndEvaluateCompatibility 1. Make Substrategy call to CalculateEntertainmentFlag before
"MoreTariffDetails"
2. Update EntertainmentFlag → if EntertainmentFlag then ”True” else “False” (In
“MoreTariffDetails”)
5 GetListofActiveTariffs 1. Make Substrategy call to CalculateEntertainmentFlag after "GetEligibleTariffs"
2. Update EntertainmentFlag → if EntertainmentFlag then ”True” else “False”  (In
“SetRecommendedTariffDetails”)
6 GetWatchTariffList 1. Make Substrategy call to CalculateEntertainmentFlag after
"EligibleTariffsforDepartment"
2. Update EntertainmentFlag → if EntertainmentFlag then ”True” else “False”  (In
“SetRecommendedTariffDetails”)


“SetRecommendedTariffDetails”)
7 GetCurrentTariff 1. Make Substrategy call to CalculateEntertainmentFlag after
"SettingProductFulfilmentCode"
2. Update CurrentTariffEntertainmentCost=
@if(.EntertainmentFlag=”True”,D_VFUKFWAOMFWDataAOMBusinessConf
ig[ConfigType:"Entertainment",ConfigName:"EntertainmentCost"].ConfigValue,
"0") (In “TariffDetails”)No Strategy Changes


1651
 8 IdentifyLogicRecommendation 1. Set Rec1EntertainmentFlag →
@if(Rec1.RecommendedTariffCode!="",Rec1.EntertainmentFlag,ExternalInput
.EntertainmentFlag)
2. Remove Rec1TariffName and delete the property (In “SetRec1Details”)
9 T4Logic 1. Update Filter “HigherthanRec1”
@if(@equalsIgnoreCase(.Rec1EntertainmentFlag,"True"),//then
@equalsIgnoreCase(.EntertainmentFlag,"True")
&&
.RecommendedTariffS15Maf>.Rec1TariffS15Maf&&
@if(.Rec1TariffData<9437184,(.RecommendedTariffData>.Rec1TariffData),
(.RecommendedTariffData=9437184)),
//else
.RecommendedTariffS15Maf>.Rec1TariffS15Maf &&
@if(.Rec1TariffData<9437184,(.RecommendedTariffData>.Rec1TariffData),
(.RecommendedTariffData=9437184)))
10 CalculateUpgradeDeal 1. Update “AvailableCommercialRecs” > Set EntertainmentFlag <first>
@if(.RecommendedPosition=1,ComRecTariffs.EntertainmentFlag,"") , Remove
RecommendedTariffName from the group by.
2. Update “SetInputForLogic” > Set Rec1EntertainmentFlag =
AvailableCommercialRecs.EntertainmentFlag, Remove Rec1TariffName from
SetProperty


1652
Digital Upgrades - Get Product List Integration (Tariff & Discount)
HL Requirement
Eshop channel (Web) will be integrated with GPL service for upgrade processes. (Web channel is introduced to AOM with Second Line
Pricing processes)
For now GPL will provide list of Tariffs , max discount details & eligible VF Together offer details (for each tariff)  to channel 650083 Phase 0/1 - Provide a prioritised list of Plans and personalised
discount for a handset  Upgrade and VF Together offer if relevant
650130 Phase 0/1 - Being able to define the number of Plan/discount
combination requested by the Digital Platform
650093 Phase 0/1 - Ensure that the recommended Plans are sellable online
650103 Phase 0/1 - Ensure that the recommended Plans are eligible with the
eShop Channel
650108 Phase 0/1 - Ensure that the recommended Plans are compatible with
the Device provided by Digital
650127 Phase 0/1 - Very Early Upgrade S15 Rule
650133 Phase 0/1 - Max Discount
650148 Phase 0/1 - Order the list of plan/discount combination using
business driven rules
650154 Phase 0/1 - Being Able order the plan using the Hero plan
650157 Phase 0/1 - Using the Universal Tariff Model or Flexi to define the
plan order
650167 Phase 0/1 - Being able to manage the Lead Plan Setting  in PM Tool
650172 Phase 0/1  - SIMO Max Discount and Business Prioritisation
650176 Phase 0/1 - Device Max Discount and Business Prioritisation
650177 Phase 0/1 - Plan/Device Combination Multiplier Prioritisation
650181 Phase 0/1 - Manage Digital Prioritisation Rules in PM Tool


650181 Phase 0/1 - Manage Digital Prioritisation Rules in PM Tool
686522 Digital Upgrades - Plan order for a customer that has opted out of
profiling
650183 Phase 0/1 - Provide Vodafone Together Offer
650187 Phase 0/1 - Digital Upgrades Reporting
655815 Digital Upgrades - Logic Triage Parameters650079 Phase 0/1 - Provide a prioritised list of Airtime Plan, personalised
discount for a SIMO Upgrade as well as VF Together if relevant


1653
Each call to GPL should be stored to IH & IH reporting  as single record, containing details of product list in a single field
If no eligible tariff is available IH record should be created with No Recommendation outcome.
The requirement is to introduce a logic triage attribute to IH to log important/required control results for triage purpose
No compatible Tariff> in case of no tariff is compatible with the SKU in basket
Hero Plan Not  Available > in case the hero plan for device in basket is not eligible in eligible tariff list.
Beside IH  & IH REportin, Audit log can be used for service triage. All request  & response   is  stored in there.
Impacted Areas

Dependencies
DB Changes:
Create new column in IH Reporting table and also extend it to Reporting table viewApp Yes Get Product List V2 API Request Update
UPGRADE_TYPE - CRE Type > NORMAL, SIMOFLEX, NORMALSIMOFLEX,
FLEXUPRADE
HEROPLANID - Plan Id of Hero Plan
NO_RECOMMENDATIONS - Number of Line Items to Return
Details > Name Value pairs, indicates which tariff type to return
Logic Access it as  Primary.Context.Details.SIMO
UPGRADE_TYPE will be populated to Primary.RetentionEligiblity.Type (if
provided)
Get Product List V2 API Response Update
Add Offer, Qualifying Criteria, Reward sections
Use ConvertTextToJSONString Function to generate json for Product Details
DB Yes  IH Reporting Extension
Knowledge Transfer No
PM Tool Yes  No dev impact new configurations on Product attributes or AOM Business Config
PM Tool KT Documentation Yes  Area Yes/No Comments
PM Tool Yes  E2E testing can be done once PM Tool work is completed.
App Yes E2E testing can be done once app work is completed.


App Yes E2E testing can be done once app work is completed.
DB Yes E2E testing can be done once DB changes are finished.Area Yes/No Comments
Property Name Data Type


1654
App Changes:
Offer Catalog Change
Offer catalog is updated to include Web channel
Continue

Configurations in PM Tool
Configure “DivisiontoTeam” DDS  as below. With a new Division.

New AOM Business Config parameter
ConfigType = LeadPlan
ConfigName = LeadPlanSetting
Config Value = Flexi/UTM
New Product Attributes LogicTriageAttribute Varchar
Create new property in VFUK-FW-AOMFW-Data-InteractionHistoryReporting
ClassLogicTriageAttributeIH Reporting Class: VFUK-FW-AOMFW-Data-InteractionHistoryReporting
changesMap LogicTriageAttribute property in the external mapping
tab
Omni-Eshop Omni-Eshop DivisionToTeamConfi
gNonPropositions Omni eShoppyLabel pyName pyGroup pyIssue Team Division
SIMOUpgradeBusines
sPriorityNumber The Business priority of Tariff
,will be used for weighting  the
tariff & sorting in case of SIMO
upgradeSingle Value 1 Tariff 3
DeviceUpgradeBusine
ssPriorityNumber The Business priority of Tariff
,will be used for weighiting  the
tariff & sorting in case of
Handset upgradeSingle Value 1 Tariff 3
PriorityDevice Text List of SKUs that will prioritise
the Tariff if the one of
configured device is in basketMultiple Value  Tariff 12345,234566
PriorityDeviceMultiplierNumber in case of any device in
PriorityDevice  added to basket
Tariff will be prioritised with the
multiplierSingle Value 1 Tariff 5 Type Description  Defa
ultProduct Type Sample Value


1655

Changes to GPL Main Flow
Current GetProductList strategy has 2 different paths according OrderType = Upgrade/Additional Line
Upgrade path currently designed for Assisted Upgrade flow (InboundCC)
For digital upgrade we will differentiate Assisted & Digital flow. (as there are different business requirements)
Rename  GetProductListForUpgrade to GetProductListForUpgradeIBCC > 3.7/4.1 Digital Upgrades
Create new strategy GetProductListForUpgrade  > 3.7/4.1 Digital Upgrades
Create New Strategy GetProductListForUpgradeWeb > 3.7/4.1 Digital Upgrades
New Strategy GetUpgradeTariffListforWeb
HL Flow
3.7/4.1 Digital Upgrades

This is the main strategy to provide list of Tariffs & associated Max Discount information
The max discount details will be child line items of tariff
Eligible VF Together offers will be also provided as part of response
Promotional discount/addons will not be sent to channel.
Strategy flow is very similar to GetTaiffList used by Assisted upgrade but has different requirements.

Step 1 > Map Division To Team
Requests coming from Eshop will be mapped to Eshop division. Make sub-strategy call to  GetTeamforAgentDivision to  populate Team
Step 2 > Get List of Tariffs
Channel will provide upgrade path as context.
Context->Primary.Context.Details.SIMO=True > Then UpgradeType → SIMO (return SIMO Tariffs)
Context->Primary.Context.Details.SIMO=False  and If Handset LineItem exists > Then UpgradeType → Handset   (return HSP)
(Evo Airtime with Device)


(Evo Airtime with Device)
Context->Primary.Context.Details.SIMO=False and if Handset LineItem does not exists > Then UpgradeType → SIMO  return HSP
(Evo Airtime)
Make Substrategy call to  GetActiveTariffList to get list of eligible tariffs for Division + Team + channel
Set RecommendedTariffS15Maf= .RecommendedTariffMafExVaT-(@If(.EntertainmentFlag,.entrainment cost,0))
30 days   & 18 M  tenure tariffs are not sold by digital channel, filter those offers in strategy. (It is a tactical solution, product attributes
configuration for sellable should support configuring different sellable option according to Order Type-Channel combination)
Step 3> Check Device -Tariff Compatibility
Channel will have its own device screen, user can select a device from channel screen (we call it the handset in basket). This
information will come with LineItem object as input.
If there is a handset in basket ,
Validate Tariff / Device compatibility & drop non compatible devices (EvaluateTariffToHandsetCompatibility)
Set .HasFixedDevice true on Tariff records if the SKU in basket is a fixed device (populate from Product attributes)
If there is no tariff compatible with  the device, No recommendation IH record should be created with LogicTriageAttribute = “NCR”
Step 4 > Apply S15 Control for Tariff List


1656
Make Sub Strategy call GetCurrentTariff to populate the attributes in below to Tariff records.
PreS15
PreS15MafSource
CustomerType
ContractDue
Sub Strategy Call  ApplyTariffMAFRules
Step 5 > Calculate Max Discount
Calculate Max Upgrade Discount for each tariff , populate details on tariff records
Make subs strategy call to CalculateMaxDiscountForTariff
Step 6 > Order Tariffs
Make Substrategy call to  OrderUpgradeTariffsForWeb
Step 7 > Select Top X record requested by channel
Primary.Context(“No_Recommendations“) indicates record count to return channel
Step 8 >  Populate Output Properties
Make Substrategy call to  PopulateOutputPropertiesUpgradeTariffsforWeb
 Step 9  > Set IH Properties
Make Substrategy Call To SetIHPropertiesForAllChannels
IH reporting attributes to be populated > (beside other generic attributes ) Ensure these are passed till end of the strategy.
PreS15Maf
PreS15MafSource
PostS15Maf
AgentToolkit
ModelDetails
ProductDetails
{TariffId:<Tariifcode> , DiscountId:<DiscountCode>, TariffPosition:<TariffRank>, DiscountType:
<PriceMatrix/Upsell/Segmentof1>,CombiOfferId:<VFT CombiOfferId>,RewardProductId:<Reward Product Code>, AssetIntegration
Id:<Asset Integration ID of the Reward>}
Update Strategy  ApplyTariffMAFRules
Update Strategy to skip IdentifyPromotinalDiscounts & IdentifyPromotinalAddons strategy calls in case of channel =Web
Update Strategy CalculateMaxDiscountForTariff
Current strategy calculating max discount for  X record ,  where it is a configuration as AOM business config.
IBCC will follow the same


IBCC will follow the same
For Web , it will calculate max discount for  Primary.Context(“No_Recommendations“)  record.
Update “Data Join on RecommendedTariffCode”
Populate Discount Product Id to main path
New Strategy OrderUpgradeTariffsForWeb
3.7/4.1 Digital Upgrades


1657
The input of this strategy will be list of tariffs with max discounts.
Step 1  >  Populate UTM & Flexi Tariff Details
Check Primary.ProfilingConsentFlag = Y,
Get the model details from Get Universal Tariff Recommendation.
Call GetListOfValidTariffsFromBDCModel strategy , set Rank to Tariffs.
Set the IsFlexi=True, if the recommended tariff code is equal to AOM_CUSTOM_CHAR_026 (Flexi attribute to enable business  set
up a plan that should be recommended to the Digital Platform)
If Primary.ProfilingConsentFlag = N, without the above flags it will continue with step 2.
Step 2 > Locate Hero Plan to 1 st  postion
If UpgradeType=Handset (Set in previous strategy),
Place Hero plan in top 1 position ( if Primary.Context(“HEROPLANID”)!=””) and set Position=1,
If Hero plan not available Goto Step 3 and Position Lean plan to 1 st position
Step 3 >  Locate Lead Plan  to 2nd Position (If Hero plan not available 1st position)
Based on the Lead plan configuration. (ConfigName = LeadPlanSetting)
If Config Value = Flexi, get the top one from the list of products where IsFlexi=True.
Else, Config Value =  UTM, check if Rank! =”” select the min Rank as lead plan.
If Subscription profiling concent is N, this logic will not be executed.
Step 4 > Order all the remaining products by descending weight.
If UpgradeType=SIMO, Set the weight for all SIMO products.
Weight = Discount Amount + SIMO Tariff Upgrade Priority
Discount Amount =  will come from the previous strategy on tariff data , which represents Discount percentage in PC


Discount Amount =  will come from the previous strategy on tariff data , which represents Discount percentage in PC
SIMO Tariff Upgrade Priority=values are populated from Product attributes.  ( populate with in previous strategy flow)
If UpgradeType=Handset, Set the weight for all Handset products.
Weight = (Discount Amount +Device Tariff Upgrade Priority)*Priority Device Multiplier
Discount Amount = will come from the previous strategy on tariff data , which represents Discount percentage in PC
Priority Device Multiplier /Device Tariff Upgrade Priority=values are populated from Product attributes .
Priority Device Multiplier is included in formula  if device in the basket is matching with PriorityDevice configured for tariff.
New Strategy PopulateOutputPropertiesUpgradeTariffsforWeb
3.7/4.1 Digital Upgrades

This strategy is to populate required attributes  for API and IH tables.


1658
Step 1> Input list of ordered tariffs
Step 2> If NoRecommendation  → No then
i) Set Index = pxRank,
IsValid = if Primary.Context(“HEROPLANID”)=RecommendedTariffCode then true else false
ii)  Make substrategy call to GetEligibleVFTogetherOffersForAccount to populate  Eligible VF Together Offer details
iii)  Use the output of the strategy and make call to below sub strategies.
> SetOutputPropertiesforVFTOffers
> SetOutputPropertiesforVFTQualifierData
> SetOutputPropertiesforVFTRewardData
> connect to result all the outputs
iv)  From SetOutputPropertiesforVFTRewardData, Group by on PromotionID
> RewardProductId <concat> NewCoId values
> AssetIntegrationId <first> AssetIntegrationId
> CombiOfferId <first> CombiOfferId
v)  Populate RewardProductId,AssetIntegrationId & CombiOfferId values to Tariff records from via data join on
RecommemdededTariffCode = PromotionId condition.
vi) Set ResponseType=Item(Tariff properties) as mentioned in below table for tariff records, along with ProductDetails (make a
call to function ConvertTextToJSONString to populate Product details - {TariffId:<Value> , DiscountId:<Value>, TariffPosition:
<Value>, DiscountType:<PriceMatrix/Upsell/Segmentof1>,CombiOfferId:<Value>,RewardProductId:<Value>, AssetIntegration
Id:<Value>})
vii) Make a substrategy call to MatchTariffWithPropositions and connect to results.
viii) From vii), group by the unique list of treatments (pyName)
                            > ProductDetails <concat> ProductDetails
> IsValid <trueifany> IsValid


> ProductDetails <concat> ProductDetails
> IsValid <trueifany> IsValid
ix) Set ResponseType= UniqueTreatmentList,  LogicTraigeAttribute =LogicTraigeAttribute +  If(Isvalid=”False”,”HPNA”,””) and
connect to results.
x) From i), in a new path filter any discounts available(DiscountProductcode!=””) and set ResponseType= ChildItem(Discount
properties) as mentioned in below table and connect to results.
C. If NoRecommendation → Yes then set below properties.


1659
  > ResponseType= UniqueTreatmentList,
  >  LogicTraigeAttribute
  >  connect to MatchTariffWithPropositions substrategy.
3.7/4.1 Digital Upgrades
Update Strategy IdentifySegmentOf1DiscountStrategy
  Remove hard coded channel control. Instead set from context.
Update Strategy MatchTariffWithPropositions
Remove hard coded channel control. Instead set from context.
Update Filter NotWatchCustomer and WatchCustomer to include “NoRecommendation”=No condition
Add a new path for “NoRecommendation”=Yes condition
Set ValueText=Y, if UpgradeType=SIMO else ValueText=N
Join with the proposition data(Component:Final) on ValueText=ValueText, map
OfferID,OfferName,OfferVariant,TreatmentID,TreatmentName,TreatmentVariant
Update Strategy GetEligibleVFTogetherOffersForAccount
Query data page only if customer is HBB Customer(HasHBBAccount) & Tariff IncludesCombiBundleOffer=True
Update GetActiveTariff List
Populate new SR attributes for below added product attributes for sorting.
SIMOUpgradeBusinessPriority,DeviceUpgradeBusinessPriority,PriorityDevice,PriorityDeviceMultiplier
Update Strategy SetIHforWeb
.pyOutcome Existing .NoRecommendation!="Yes"?"Selected":"No
Recommendation"Key Existing/New Value


1660
Update DataFlow GetProductListForCustomer
Remove  ResponseType=Offer & Reward & Qualifier records for IH / IH reporting path.
Update IH and IH Reporting path to include ResponseType=UniqueTreatmentList (only).
Update Strategy GetProductList
Update CheckIfanyRecordAvailable Switch condition to continue the flow for “NoRecommendation”=Yes condition.CaseId New Primary.Context(CaseId)
.AgentToolkit New .Team
.AgentDivision New .Division


1661
Assisted Upgrade-Variable Discount Handling

HL Requirement
Source Discount amount from GPSL-Adjusted price instead PC for Variable Discounts.
Impacted Areas
Configure Product Attributes for Discount
Use PM tool to configure product attributes
Add a new attribute to Discount Products .
This attribute is to flag Discount  which are variable discount.

Those variable discounts should be marked as Not Sellable  . So discounts will not be listed on Discount Tab.
Update Strategy GetProductChildsForTariff
Set AdjustedListPrice to  Discount record from GetProductChildPrice strategy output
The price coming from GPSL is in pence, divide by 100 to calculate GBP.
Update Strategy GetActiveDiscountList
Populate VariableDiscount flag  from PC table to discount records  688842 AOM : Variable Discount Handling
App Yes  VDAR- Exiting package discount calculation is impacted
Update D_Discount data page to include Product Attributes
DB No
Knowledge Transfer No
Logic Yes Update Existing Flow
PM Tool Yes Configuration of VariableDiscount indicator on product attributes (Discount)
PM Tool KT Documentation No
UI/VADR No  A r e a Y e s / N o C o m m e n t s
VariableDiscount Boolean False T y p e D e f a u l t


1662
Update Strategy CalculateTariffDiscount
Update S15Discount & Discount calculation.  If  VariableDiscount = True  ,use AdjustedListPrice amount  if not set use Discount coming
from PC.  (Please note AdjustedListPrice is discount amount not percentage. Discount coming from PC can be either
percentage/amount )
Update Strategy GetInActiveDiscountList
Update InactiveProductHoldings
Rename to InactiveDiscountProductHoldings.
Include ProductClass=”Discount” in the filter
Update Statuscode to ignore case.
Update InactiveProductHoldings Filter > To ignore case for StatusCode
Set AdjustedListPrice = AdjustedPrice
Update GetDiscountDetailsFromPC
Populate VariableDiscount from the product attributes.