889
Assisted Upgrade- Update Cohort DiscountFlag / Discount Code validation

New Startegy-CalculateCustomerDiscountFlag

Load Invoice Charge List for customer
Get Invoice records for lastest month.
Check discount_product_cd column <>-1 and code in this column should be available Tariff PC data
If any record available CustomerHasDiscount = True else false
Update Strategy- EvaluateCohortByActiveDiscount
Remove exiting logic to calculate discount flag , make call to C a l c u l a t e C u s t o m e r D i s c o u n t F l a g

New Strategy -GetActiveDiscountList
Load child product / product holding data
filter active records only
Check with PC_Discount data to filter valid codes for Discount.
Populate Discount code, Discount Amount,DisCont Type  from PCAOM-2437 Identifying discount on the customer's product holding for Cohort and
Pick and Mix (clarification)


890
New Strategy -GetInActiveDiscountList
Use the Product Holding Table to filter the inactive products (check that the effective date is between current contract start date and
yesterday date) and check these codes in the Product Catalogue Discount Table to identify any active discount code

Update Strategy -EvaluateCohortByTariffDiscount
Remove current logic to calculate discount product list
Make Sub strategy call to GetInActiveDiscountList & GetActiveDiscount
Union them & use iterate to populate  Discounts codes in a string


891
NBA FW - Control Groups
[AOM-2471] Manage and Configure Control Groups

Clarified Requirements (User Story Update - Pending)
1. Control Group % will be set at Offer Level and applied at Treatment level after inheriting the Control Group % from Offer (as-is)
2. Control should be applied to Parent treatments and Stand-alone treatments only. It not be applied for the child treatments (as-is)
3. Child treatments should be allocated to “Target” or “Control” following the Parent treatment (as-is)
4. If a customer is in “Control” for one OB treatment for an offer, the customer should be in “Control” for all OB treatments for the same offer
5. Each Business Purpose will have a new configuration - Control Quarantine Period (in no. of days)
6. If a customer is in “Control” for an offer, it should remain in “Control” for that offer until Control Quarantine Period for the business
purpose is over
7. If a customer is in “Target” for an offer, it should not be in “Control” (in subsequent batch runs) for that offer until Control Quarantine
Period for the business purpose is over
8. If a customer is in “Control” for an offer, it should not be eligible for any other offers from the same business purpose until Control
Quarantine Period for the business purpose is over
9. This functionality should be applied for Batch & TIL (Trigger)

Process Overview


892

Design Approach
A. Update BusinessPurpose Decision Data
Add new property
ControlQuarantinePeriod - Integer

B. Update PM tool screen for BusinessPurpose for new property ControlQuarantinePeriod (PM tool team)
Possible values - 0 or any positive integer


893
C. New Strategy - ApplyBusinessPurposeQuarantineCheckForControl
Enable External Input
Use Embedded strategy to loop though each business purpose and do the following -
Check for the last “sent” communication for the customer for the business purpose where customer is part of control
(LastSentCommunicationByBusinessPurpose); do not consider child treatments
Check in IH with the following conditions
InControlGroup = “Y”
InMarketingTest = “Y”
Calculate the DaysSinceLastCommunicationDateByBusinessPurpose
Return the offer, if
Customer is not in “Control” for any offer for the business purpose
OR
Customer is in “Control” for any offer for the for the business purpose but DaysSinceLastCommunicationDateByBusinessPurpose
> ControlQuarantinePeriod for the Business Purpose
Else, do not return the offer
D. Update strategy - IdentifyEligibleOffers
Call sub-strategy - ApplyBusinessPurposeQuarantineCheckForControl for the batch execution mode only before the switch component -
Choose Offers By ExecutionMode

E. New Strategy - ApplyBusinessPurposeQuarantineCheckForTarget
Enable External Input
Use Embedded strategy to loop though each business purpose and do the following -
Check for the last “sent” communication for the customer for the business purpose where customer is part of target
(LastSentCommunicationByBusinessPurpose); do not consider child treatments
Check in IH with the following conditions
InControlGroup = “N”
InMarketingTest = “Y”
Calculate the DaysSinceLastCommunicationDateByBusinessPurpose
Tag the SR page as ControlGroupToBeApplied = “Y”, if
Customer is not in “Target” for any offer for the business purpose
OR
Customer is in “Target” for any offer for the for the business purpose but DaysSinceLastCommunicationDateByBusinessPurpose


> ControlQuarantinePeriod for the Business Purpose
Else,  tag the SR page as ControlGroupToBeApplied = “N”

F. New Strategy - ApplyPotentialControlSplit
Enable External Input
Create 2 Filter component - Control Group Not Used (.ControlGroupPercentage=0) & Control Group  Used (.ControlGroupPercentage >
0)
For the logic path for Control Group Not Used (.ControlGroupPercentage=0), do the following -
Use Set Property to set the following -
PotentialControlFlag = “Target”
InMarketingTest = “N”


894
Return to results
For the logic path for Control Group Used (.ControlGroupPercentage > 0), do the following -
call sub-strategy ApplyBusinessPurposeQuarantineCheckForTarget
create 2  Filter component -  ControlGroupToBeApplied = “N” &  ControlGroupToBeApplied = “Y”
For the logic path for ControlGroupToBeApplied = “N”, do following -
Use Set Property to set the following -
PotentialControlFlag = “Target”
InMarketingTest = “Y”
Return to results
For the logic path for ControlGroupToBeApplied = “Y”, do following -
create 2 filter - Ignore Control Group (Channel = “Email“ & .ParentChild = "Child") & Apply Control Group ( (Channel != “Email“)
OR (Channel = “Email“ & .ParentChild = "Parent"))
For  the logic path for Apply Control Group, do the following -
Create a unique list of Offers
Use embedded strategy to loop through the each offers and assign to control or target using Random number generation and
set the following properties for control/target
Control
PotentialControlFlag = “Control”
InMarketingTest = “Y”
Target
PotentialControlFlag = “Target”
InMarketingTest = “Y”
Use data join component to apply control/target from offer to all treatments
 For  the logic path for Ignore Control Group, do the following -
Use data join component to apply control/target from parent treatment to all child treatments
Return to results
G. Update Strategy - IdentifyBestOBTreatmentsByBatch
call sub-strategy PopulateControlGroupPercentage after sub-strategy IdentifyTreatmentVariations and and remove from previous position
call sub-strategy ApplyPotentialControlSplit after sub-strategy PopulateControlGroupPercentage and before sub-strategy


call sub-strategy ApplyPotentialControlSplit after sub-strategy PopulateControlGroupPercentage and before sub-strategy
PopulateDedupeScore

H. Update strategy - PopulateOutputPropertiesForBatch
Create 2 filter - In Potential Control (PotentialControlFlag = “Control”) & In Potential Target (PotentialControlFlag = “Target”) after set
property - Set Execution Mode
For  the logic path for In Potential Control, return results
For the logic path for In Potential Target, call sub-strategy - PopulateOutputProperties
I. Update Strategy - IdentifyBestTreatmentsByTriggers
call sub-strategy PopulateControlGroupPercentage after sub-strategy IdentifyTreatmentVariations
call sub-strategy ApplyPotentialControlSplit after sub-strategy PopulateControlGroupPercentage and before sub-strategy
PopulateDedupeScore
J. Update Strategy - PopulateOutputPropertiesForTrigger
After Filter - SMS Channel, create 2 Create 2 filter - In Potential Control SMS (PotentialControlFlag = “Control”) & In Potential Target
SMS (PotentialControlFlag = “Target”)


895
For  the logic path for In Potential Control SMS
Use Set Property component to set InControlGroup = “Y”
return results
For  the logic path for In Potential Target SMS
Use Set Property component to set InControlGroup = “N”
Call sub-strategy - PopulateOutputPropertiesForSMSByTrigger
return results
After Filter - OutboundCC Channel, create 2 Create 2 filter - In Potential Control OutboundCC (PotentialControlFlag = “Control”) & In
Potential Target OutboundCC (PotentialControlFlag = “Target”)
For  the logic path for In Potential Control OutboundCC
return results
For  the logic path for In Potential Target OutboundCC
Call sub-strategy - PopulateOutputProperties
return results
After Filter - AppPush Channel, create 2 Create 2 filter - In Potential Control AppPush (PotentialControlFlag = “Control”) & In Potential
Target AppPush (PotentialControlFlag = “Target”)
For  the logic path for In Potential Control AppPush
Use Set Property component to set InControlGroup = “Y”
return results
For  the logic path for In Potential Target AppPush
Use Set Property component to set InControlGroup = “N”
Call sub-strategy - PopulateOutputPropertiesForAppPushByTrigger
return results
K. Update strategy - PopulateOutputPropertiesForAppPushByTrigger
Remove sub-strategy component - ApplyControlGroupsByTrigger

L. Update strategy - SetIHAndTILResponse
Observation - Decision Table - IdentifyTILResponse should be executed only for SMS channel. Please validate.
After Decision Table IdentifyTILResponse, add Set Property component to override TILResponse property to “CONTINUE” in case the
SMS Treatment is Control (InControlGroup = “Y”)
M. IH Extension (App & DB)


SMS Treatment is Control (InControlGroup = “Y”)
M. IH Extension (App & DB)
Extend Fact table to add a new column - InMarketingTest char (1) (Y/N)
Update InteractionHistory view to include this new column ControlGroupApplied
Update InteractionHistory class
This new property is not required to be added in  IH Extract

N. Update strategy - PopulateVolumeConstraints
Update Set Property component - Set  Derived VolumeLimit for the following 2 properties (rest should remain unchanged) -
VolumeLimit = @if(.VolumeLimit = 0 || .VolumeLimit = "", -1, .VolumeLimit)
ControlVolumeLimit = @if(.ControlGroupPercentage > 0, .VolumeLimit * @Math.divide(.ControlGroupPercentage,100), -1 )
O. Update Data Flow - PopulateTreatmentsForOB


896
Update Convert shape
Add new mapping for ControlVolumeLimit = ControlVolumeLimit

P. Update strategy - PopulateVolumeLimits
Update Set Property component - Set  Derived VolumeLimit for the following 2 properties (rest should remain unchanged) -
VolumeLimit = @if(.VolumeLimit = 0 || .VolumeLimit = "", -1, .VolumeLimit)
ControlVolumeLimit = @if(.ControlGroupPercentage > 0, .VolumeLimit * @Math.divide(.ControlGroupPercentage,100), -1 )

Q. Create new C* data sets - BestOBTreatmentsAsTarget & BestOBTreatmentsAsControl
Class - VFUK-AOMFW-SR
Keys
pySubjectID
pyName
OfferVariant
TreatmentVariant

R. New Data Flow - ProcessTreatmentsWithNoVolumeLimit
Class - VFUK-AOMFW-SR
Source - Abstract
Primary Destination - Data Set - BestOBTreatmentsAsTarget
Secondary Destination - Data Set - BestOBTreatmentsAsControl
Filter for Primary Destination - In Target (PotentialControlFlag = “Target”) followed by Convert Shape to  set InControlGroup = “N”
Filter for Secondary Destination - In Control (PotentialControlFlag = “Control”) followed by Convert Shape to  set InControlGroup = “Y”
S. Update Data Flow - PopulateVolumeLimitForTreatments
Replace primary destination - BestOBTreatmentsBeforeControlGroups with new data flow - ProcessTreatmentsWithNoVolumeLimit
Open Point to App Team - Which data set needs the property PotentialControlFlag to be added as key and in which order against
the current keys?

T. Update volume constraints process (App team)
This process should be updated to use the PotentialControlFlag (Target/Control)


This process should be updated to use the PotentialControlFlag (Target/Control)
For all the records for a treatment with PotentialControlFlag = “Target”
Limit the records using VolumeLimit
For all the records for a treatment with PotentialControlFlag = “Control”
Limit the records using ControlVolumeLimit
The above process should also be applied if there are sub-channel split

U. Update data flow - AugmentVolumeConstrainedData
Replace Primary Destination BestOBTreatmentsBeforeControlGroups data set with new data set - BestOBTreatmentsAsTarget


897
Add a filter before primary destination BestOBTreatmentsAsTarget to select records with PotentialControlFlag = “Target”
Set for the records as InControlGroup = “N”
Add a secondary destination new data set -BestOBTreatmentsAsControl
Add a filter before primary destination BestOBTreatmentsAsTarget to select records with PotentialControlFlag = “Control”
Set for the records as InControlGroup = “Y”
V. New Data Flow - WriteBatchDecisionOutput
Class - VFUK-AOMFW-SR
Source - Abstract
Add filter for all records with .ExecutionMode = “Batch”
Add Convert shape as below (same as existing ApplyControlGroups data flow) -
Destination -  BatchDecisionOutput data set

W. New Data Flow - ProcessBestOBTreatmentsAsTarget
Class - VFUK-AOMFW-SR
Source - BestOBTreatmentsAsTarget
Primary Destination - Data Flow - ProcessOutbound
Secondary Destination - Data Set - pxInteractionHistory
Filter for Secondary Destination - Filter - All IH For OBCC, AppPush & DirectMail
@String.equalsIgnoreCase(.Channel,"OutboundCC") || @String.equalsIgnoreCase(.Channel,"AppPush") ||
@String.equalsIgnoreCase(.Channel,"DirectMail") = true
Secondary Destination - SubscriptionsForOB
Add convert shape before destination as below -


898
Secondary Destination - WriteBatchDecisionOutput data flow
X. New Data Flow - ProcessBestOBTreatmentsAsControl
Class - VFUK-AOMFW-SR
Source - BestOBTreatmentsAsControl
Primary Destination - Data Set - pxInteractionHistory
Secondary Destination - WriteBatchDecisionOutput data flow
Y. Update Strategy- ApplyTreatmentDataToTreatments
This strategy is invoked in PrepareEmailTreatments Strategy.
In the strategy ApplTreatmentDataToTreatments , Add mapping InMarketingTest property in the Data Join called
AllTreatmentsWithProperties
Z. Changes to Extractor Case (App Team)
The following changes should be made to both “Prepare CCD Extract” & “Prepare BatchNBA Extract“
Remove “Populate Subscriptons For Control Groups” and add new Step to execute data flow - ProcessBestOBTreatmentsAsTarget
Remove “Apply Control Groups“ and add new Step to execute data flow - ProcessBestOBTreatmentsAsControl
Update the truncate steps to add the new data sets and removed unwanted data sets


899
IVR - SetNBA

HL Requirement
Enable AOM FW to create interactions on Siebel for configured T2TV.
PM tool has a screen to configure  Customer Interaction- T2TV relation.
With scope of this Jira, A new strategy will be created to populate configuration from  PM tool data ethic can be used in other process as
well.
Extend Capture response flow to include feeding Siebel Interactions (if configured for T2TV & outcome)

Assumption:
Exiting T2S flow that feeds Siebel will stay as is. After the capability (the new strategy) is provided, optimisation team to update T2S flow
if new tags added in time ,it will be extended with optimisation team.
1. New Proposition Data -T2TVCustomerInteractions
 Should be created for each squad.AOM-2067 Create Interactions in Siebel (Halo)
TreatmentName
TreatmentID
OfferName
OfferVariant
TreatmentVariant
CreateOn Outcome value for which actions required to
create interaction in Siebel. Accepted/Selected
Description
InteractionPriority
Category
SubCategory
Resolution
Comments may contain tag.
ActionType


900
2.New Strategy- ImportTreatmentToTreatmentVariationCustomerInteractions
Import TreatmentToTreatmentVariationCustomerInteractions from each squad
 New Strategy-SetCustomerInteractionDetails
Sub strategy call to ImportTreatmentToTreatmentVariationCustomerInteractions
Enable ExternalInput
Join external input with ImportTreatmentToTreatmentVariationCustomerInteractions output on
OfferVariant,Treatment,TeatmentVariant,Outcome
If there is any matching record set
CreateCustomerInteraction=true
RequestedDateTime=@getCurrentTimeStamp()
ServiceId=Primary.ServiceNumber
OwnerAccountNumber=Primary.OwnerAccountNumber
CustomerInteractionDesc=Description,
CustomerInteractionPriority=InteractionPriority,
Category=Category,
SubCategorySubCategory,
Resolution=Resolution,
Comments =Comments
ActionType =ActionType
For not matching records set CreateCustomerInteraction=false
Make call to PopulateTokensForSiebelInteracton
Populate tokens with in  Comments
Tokens format will be “[TokenName]”
List of tokens for IVR
ProductID- will be populated from OfferToOfferVariantData for treatment , ProductID
ProductDescription- will be populated from ProductRefrenceData.des attribute
Outcome-outcome of the response
3. Update Strategy-CaptureResponse
make sub strategy call to SetCustomerInteractionDetails
connect CaptureResponseForEmail+CaptureResponseForAppPush+CaptureResponseForSetNBA
connect to result
4. Update DF - CaptureResposne
Add new Filter
CreateCustomerInteraction= True
Add new Destination   > InvokeCreateCustomerInteraction activity
3. PMTool Impact
push T2TVCustomerInteractions DDS


901
IVR-Get NBA- Populating Details & Actions

HL Requirement
Routing option options & types to be exposed to channel will be managed as catalog data. T2TVActions will store this configuration.
(Populated from PMtool)
Details of the routing like message id & intent & reason  which is available in TreatmentToTreatmentVariations  should exposed to
channel

New PropositionData
TreatmentToTreatmationVariationActions-- For each squad
Update Strategy - PopulateOutputPropertiesForGetNBA
-Populate Related SR attribute for  ActionList.Details section in response
New Variable TreatmentAttributes to be passed on Action Page - Set only for IVR
MSG_ID > TeatmentToTreatmentVariation. DynamicPrameter3
Reason > TeatmentToTreatmentVariation. DynamicPrameter4
apptag-intent >  TeatmentToTreatmentVariation. DynamicParameter2
Concat values and create a json {"MSG_ID": "1320487", "AppTag": "393746";”Reason”:”xxx”} .
-Populate Related SR attributes for ActionList.Actions section in responseAOM-2492 Action Template Logic Integration
AOM-2501 GetNBA Response Mapping for IVR
TreatmentName
TreatmentID
AssociatedOffer
OfferVariant
TreatmentVariant
ActionTempalteID IVRDeflection/IVRRecommendedRouting/IVRHardDeflection
ActionType “Routing”- for IVR, for other channel there will be different actions
ActionDetail Json format. Details of the action
Outcome For IVR Positive outcome incase customer accepts the
recommended routing


902
Add a new Response Type > TreatmentActions path
Import T2TVActions>> create a sub strategy to load data from each squad
Joins with  on Offer+OfferVariant+Treatment+TreatmentVariant
Populate ActionTemplateId,ActionTemplateType,ActionTemplateDetail,ActionOutcome

Example output :

PM tool Impact
Push data to T2TVActions
 GetNBARespon …
26 Oct 2020, 10:22 AMon.json


903
IVR-Using IVR Deflection Model In logic
HL Requirement
A new BDC model will be set up to identify best deflection for each Apptag.(for an   MSISDN)
This model will be consumed with new model, will be available to logic with a data page.
Logic will use this output to select single defection (trement variant )
This model will only predict best deflection for Tobi/WebChat/Online

Model Example :
{
"MODEL_ID": 8,
"MODEL_NAME": "ivr_best_deflection",
"VALIDITY_TS": "20210308 00:00:00",
"MODEL_RUN_TS": "20200909 00:00:00",
"SERVICE_NUMBER": "447827663014",
"OUTPUT": {
"activate-phone": "3",
"cancel-direct_debit": "4",
"cancel-extras": "5",
"change-address": "6",
1. Update-Strategy ApplyAdditionalTreatmentVariationValidations
Remove Select Random Variant component
Import IVRAppTagRecommendedModel data page   – access with ServiceNumber ,Apptag
Populate BDCDeflection with the result  > this value is a number , telling which treatment variant to select.
IF Marketing profiling consent =Yes
If BDC model available, select single variant provided by BDC Model Output >DynamicPrameter5 = BDCDeflection   (only apply to
Tobi/WebChat/Online path)
IF Marketing profiling consent =No or if BDC model not available
Return variants
 AOM-2462 Use of Predictive model in logic


904
Epic - Seedlist

For Email channel , update logic to consume customer based dynamic attributes from context instead of spine
App team created their own strategies to handle this.
with in this Jira we will retire PrepareEmailTreatmentsForSeedTest  use PrepareEmailTreatments.
Related sub strategies should be updated to populate data from context instead of spine.

1. Update Strategy  >NameValidation
CustomerAccount Name  > Set First Name with context (FirstName) if available, else Primary.CustomerAccount.Contact.FirstName
2. Update Strategy > PopulateOutputPropertiesForEmailByBatch
Set Email Output Properties > Set ObfuscatedMobileNumber with context (ServiceNumber) (applying same masking formula) if
available else @String.substring(Primary.ServiceNumber,@String.length(Primary.ServiceNumber)-4)
3. Update DF > PrepareEmailTreatmentsForSeedTest
change strategy call to PrepareEmailTreatments
 AOM-2164 Integrate Seed List tactical changes into main logic


905
Release 2.1


906
IVR- Integrating Event(Apptag) Parameters to Logic

HL Requirements
With 2.1 IVR-Post NLCS offer & Intent structure is simplified
Intents will be more generic intents & single offer for Pos NLCS.
Different offer variants can are created to hande different cases / exceptions.
Apptag specific  configurations will be available in AOMBusinessConfig data type (Feed from Event Parameters Screen on PM tool)
This data will be used by logic to handle  Apptag specific requirements & populate tokens.

EventParameters
Logic will access Event Parameter values from AOMBusinessConfig data page.
C o n f i g T y p e : <PrimaryContext>_<SecondaryContext>  (for IVR PrimaryContext will be Apptag value  SecondaryContext = empty)
C o n f i g N a m e : <AttributeName>
C o n f i g V a l u e: <AttributeValue>

Update to TreatmentVariations DDS
add attribute  IVRTreatmentCode -Text (Net value between 01-07)ApptagNumber Text ID of aptag in IVR sytem 1,6
DefaultRoutingOption Text a number indicates which routing
option is the default
(Tobi/WebChat/Online/WebChat
Nudge/OnlineNudge)0/6/2/7
DefaultDeflectionType Text  SOFT/HARD
OnlineURL Text URL that will be populated to
SMS Text
WebchatURL Text URL that will be populated to
SMS Text
TobiURL Text URL that will be populated to
SMS text
CallReason Text Text to be populated to SMS Text
AppTagText Text Text to be populated to SMS Text A t t r i b u t e N a m e


907
New Strategy -PopulateEventParameters
Generic strategy to populate parameters from data page.
Enable External Input
Access AOMBusinessParameters data page with C o n f i g T y p e (primary context value  secondary context)  populate related attributes
from data page to SR Attributes (return single record with related attributes)
Update Strategy -ApplyAdditionalTreatmentVariationValidations
Comment > re organise strategy that it is more readable. ( creating sub-strategy is an option )
Marketin consent control will be a Treatment eligibility from now on ..
If Sub channel = PostNLCS
Set primarycontext= with Apptag  ,
make sub strategy call to PopulateEventParameter strategy.

Update  Strategy -ApplyServiceOfferVariationsEligibility
For PostNLS generally DefaultOfferVariant will be used.
For exceptional case new offer variant will be created with conditions. (Lets call them OtherOfferVariant, and they are always be
mutually exclusive among each other)
 DefaultOfferVariant does not have condition, so it allway will get elligible.
We need a logic to pick between DefaultOfferVariation and non default OVs. If OtherOfferVariant is not null then this will be selected,
otherwise DefaultOfferVariant.
After ApplyOfferToOfferVariationsDataToOfferVariations component, add an embedded sub strategy to    pick between
DefaultOfferVariation and non default OVs, If OtherOfferVariant is not null then this will be selected, otherwise DefaultOfferVariant.  (for
each offer)
Add PropostionFilters  for T2TVActions
These proposition filters are to filter  actions according to deflection type .(Soft/Hard)
Add Proposition filter for each squad
All actions for PreNLCS -defaulted to-true


Add Proposition filter for each squad
All actions for PreNLCS -defaulted to-true
All Actions for PostNLCS- Map to ValidateDeflectionType (When Rule)=True BDC model not available Select  Single Treatment  Variation according to
DefaultRoutingOption (populated with in PopulateEventParameter )
IVRTreatmentCode in  Treatment Variations use this value to map
with AOM treatment

Set RecomendedDeflectionType=the value from EventParameters -
DefaultDeflectionType BDC model available Select Single Treatment Variation according to BDC model output
Change = BDC model will provide same values
in  IVRTreatmentCode in  Treatment Variations use this value to map
with AOM treatment
Set RecomendedDeflectionType=Hard


908
Create ValidateDeflectionType when rule
Input parameters are =
RecomendedDeflectionType > SR attribute set from upper strategies
ActionDetail > Proposition data
Output =True/False
Logic :  extract deflection type form ActionDetail & compare with RecomendedDeflectionType .
if equal >return true
else return false
or create 2 diffrent when rules one for soft one for hard and check RecomendedDeflectionType=Hard/Soft
Update Strategy - PopulateOutputPropertiesForGetNBA
Replace  ImportT2TVVariationActions with IdentifyT2TVVariationActions
New Strategy -IdentifyT2TVVariationActions
This strategy is to evaluate each T2TV-Action with proposition filters
Enable external input
sub subs strategy call ImportT2TVVariationAction
Evaluate squad based proposition filters.
Update Strategy -PopulateOutputPropertiesForIVRAndSMS
Update strategy to populate values from EventParameters  & replace tokens
If Execution Mode is GetNBA & Sub channel = PostNLCS
Set primarycontext=Apptag ,
make sub strategy call to PopulateEventParameter strategy.
make sub strategy call to PopulateTokenValuesforApptag strategy
Add SubStrategy Call SetIVRTokens
New Strategy -PopulateTokenValuesforApptag
This strategy is to set related SR attribute with same name with tokens available in T2TV-Attributes & T2TV (not replace)
MessageId=concat(“1” ,PopulateEventParameter > Apptag Number,TreatmentVariant.IVRTreatmentCode)
AppTag=PrimaryContext
DeflectionType= PopulateEventParameter > Deflection Type
OnlineUrl,WebChatUrl,TobiUrl,AppTagDescription,AdditionalSMSText >PopulateEventParameter


909
New Strategy - SetIVRTokens
Replace tokens with in  TreatmentAttributes
Values for tokens are already populated PopulateTokenValuesforApptag
List of Tokens for IVR response
AppTag
MessageID
PM Tool Impact
TreatmentVariations DDS Change
New Screen for Event Parameters (another jira)


910
IVR-Send SMS
HL Requirement
For IVR Post NLCS flow, if recommended routing (treatment variant) is Tobi/WebChat/Online additional SMS notification should be send to
customer which contains URL details.
Offer Catalog
Post NLCS offer will have corresponding SMS treatment as well.
SMS tretament will be mapped to only Tobi/Webchat/Online
Related SMS treatments should be mapped to “PostNLCS” sub channel.
SMS texts are configure in T2TV decision data - DynamicAttributes1
SMS text may contain tags.
New Strategy - SetSMSTokensForIVR
Populate SMS text from T2TV decision data - DynamicAttribiutes1
List of tokens to replace
“FirstName” > use NameValidation strategy to validate name & Set fist name
OnlineURL > with the value populated with in PopulateTokenValuesforApptag
WebURL >with the value populated with in PopulateTokenValuesforApptag
TobiURL>with the value populated with in PopulateTokenValuesforApptag
?
Update Strategy-PopulateOutputPropertiesforIVRandSMS
For SMS Treatments
Set ContactDetails - Primary.ServiceNumber
Make sub strategy call to SetSMSTokensforIVR & replace tokens with in SMS text
Set up RealtimeEvent &  SMS Campaign for  SMS
Create
A new RT Campaign
A new PM Event
A new Marketing strategy
SMS offer flow for PostNLCS treatment
Those artefact will be similar to T2S SMS realtime ones (without adaptive part)
Update DF- GetNBA
Add a path for Channel=SMS & Trigger TriggerPMEvent with related parametersAOM-2163 Send deflection SMS


911

PM tool impact :
We need to map all existing sms treatments to Default. (mandatory in pm tool)
SMS treatments we add for PostNLCS  Sms notification will be mapped to PostNLCS sub channel
This operation is a migration.


912
IVR-Treatment Eligibility
AOM-2078-Treatment Eligibility
1.  New Strategy -ValidateRoutingRecommendation
Logic is to Validate if eligible routing option is active on IVR side. (applicable for only PreNLCS)
Inactive routing options will be provided from service input. When context data is populated , activity all replace the “-” with “_” for name
tags. (because of Pega Bug)

Populate IVRRoutingRecommendation>  from ActionTemplateDetail. Use XXXX function to populate routing option from Json.
ActionTemplateDetail is set in previous step PopulateOutputPropertiesForGetNBA for ResponseType=TreatmentActions records.
Example:
  ActionDetails:
{ "Name": "RecommendedRouting", "Value": "webchat" }, { "Name": "DeflectionType", "Value": "Hard" }
 Function input  :
ActionDetails, “RecommendedRouting”
Function output : webchat
Check if IVRRoutingRecommendation is in disabled rooting options list.
Access context data with RecommendationRequestDetails
Replace “-”  with “_” in IVRRoutingRecommendation
Search with in RecommendationRequestDetails if IVRRoutingRecommendation is disabled. (use the XXXX function to search with
IVRRoutingRecommendation)
 If routing option is disabled filter out the treatment+variant  > logic should not return the recommendation. (remember input to this
strategy is multiple records because of multiple ResponseType of same treatment. Treatment it self  should be filtered out if routing
option is disabled with all ResponseTypes)


913
else  return the treatment.
2. Update  Strategy -PopulateOutputPropertiesforIVRandSMS
Make sub strategy call to ValidateRoutingRecommendation after PopulateOutputPropertiesForGetNBA

3. Update Strategy -SetIHPropertiesforIVR
Input to this strategy will be multiple ResponseTypes, but only ResponseType=Action will be written to IH.
Need to populate IVRRoutingRecommendation attributes on ResponseType=Action from the data with in
ResponseType=TreatmentActions
Set IVRRoutingRecommendation
ResponseType=TreatmentActions
extract data from “ActionTemplateDetail”, get the value for RecommendedRouting


914
IVR-Treatment Template Integration to Logic

HL Requirements
Starting from the inbound channels (first IVR) TretamentTemplating will be introdcuded.
With treatment tempalating user will be able to create multiple templates with dynamic attributes.
 Templates  will be assigned to T2TV+SubChannel  combinations & values will be set for that instance.
The aim is not to add different  attributes to T2TV for each new requirement.

New Proposition Data- T2TVAttributes  (For Each Squad)

Update Strategy PopulateOutputPropertiesForGetNBAAOM-2598 Treatment Template Logic Integration
Treatment Name
Treatment ID
Associated Offer
Offer Variant
Treatment Variant
SubChannel If no Subchannel for the channel = blank
if channel avaliable - related subchnanel
if treament is mapped to multiple - multiple
rows for each subchannel
TemplateID
TemplateDetails  example :
'{ 'AppTagIntent':'[AppTag]',
'Reason':'[AppTag]+-no recent visit or
deflection-Online','MSG_ID':[MessageId]}

'{ 'AppTagIntent':'enquire-
vodafone_spendmanager',
'Reason':'SM limit £0','MSG_ID':2001012}
PostNLCS templates will have    Sample value


915
Import data from T2TVAttributes (with a sub strategy from each squad)
Populate  TreatmentAttributes from T2TVAttributes (match with keys TreatmentName+OfferVariant+TreatementVariant+Subchannel)
Update Strategy SetIHPropertiesforIVR
MSG_ID,AppTagIntent,Reason attributes used to be part of T2TV data . But with this change they ra part of a new proposition data and
available as a json string.
Also for post NLCS those values has some tokens. (which is populated form EventParameters)
Logic needs to populate related value from json to feed IH. (after tokens are replaced)
ChannelContentID
ResponseType='Action'
extract from TreatmentAttributes json the value for MSG_ID
EventType
ResponseType='Action'
extract from TreatmentAttributes json the value for AppTagIntent
IVRCallReason  >>
ResponseType='Action'
extract from TreatmentAttributes json the value for Reason
PM tool Impact
Push data to T2TVAttributes


916
IVR-Inent Logic Update-Using BDC model

Update DDS- Intents
Add New Attributes
BDCModelId -Integer
BDCModelMultiplier- double
Update Strategy -IdentifyRuleBasedIntents
Add a new sub strategy call
IdentifyModelBasedIntents
Update Group by
Set IntentBDCModelPropecity with Max IntentBDCModelPropecity (need for Assisted Logic)

New Strategy >IdentifyModelBasedIntents
This strategy is to calculate confidence score for each intent with  model configured in Intent DDS. (only for models has configuration)
Import ModelScoreList , filter valid records.AOM-2452 Use Models to predict Customer Intent


917
Join with incoming Intent list on Model ID
For each model propensity value will be populated from different attributes
if Model ID =9 > ModellAttrbiutes(P_Churn)
Each new model will require development in strategy to populate propensity.
Set ConfidenceScore = 10 * model propensity  > for churn it will be a value between 0-1 > means low confidence.
Set IntentBDCModelPropecity = model propensity*BDCModelMultiplier  >  (will be used by Assisted logic)
IF no model value  available  for customer , set IntentBDCModelPropecity=0 , ConfidenceScore=0 and return related intent > need for
assisted

PM Tool Impact
Intents screen > BDC model ID & Model,BDCModelMultiplier


918
GetNBA - Channel Control

A. Create a new decision data - ChannelControlByExecutionMode (VFUK-AOMFW-SR) OMFW-SR
pyName - Unique Key for the combination of ExecutionMode & Channel
pyLabel - Same as pyName
pyIssue - NonPropositions
pyGroup - ChannelControlByExecutionMode
ExecutionMode (Text) - Only available Execution Modes should be allowed
Channel (Text) - Only Channels relevant to available Execution Modes should be allowed
Enabled (Boolean)

B. Create a new decision data - SubChannelControlByExecutionMode (VFUK-AOMFW-SR) OMF
This decision data will be populated only for channels which uses subchannels
pyName - Unique Key for the combination of ExecutionMode, Channel & TargetSubChannel
pyLabel - Same as pyName
pyIssue - NonPropositions
pyGroup - ChannelControlByExecutionMode
ExecutionMode (Text) - Only available Execution Modes should be allowed
Channel (Text) - Only Channels relevant to available Execution Modes should be allowed
TargetSubChannel (Text) - Only SubChannels for the selected channels will be allowed
Enabled (Boolean)

C. New Strategy - ApplyChannelControlByExecutionMode
C1. Create new SR Property - ChannelEnabled (Boolean)
C2. Enable External Input
C3. Import decision data - ChannelControlByExecutionMode
C4. Add Set Property component - “Set Default Channel Enabled Flag”
ChannelEnabled = true
C5. Add a data join component after “Set Default Channel Enabled Flag”  and join with ChannelControlByExecutionMode
Join Condition -
ExecutionMode
ChannelAOM-2363 IVR Channel control


919
Do not enable “Exclude source component results that do not match join condition”.
Property Mapping -
ChannelEnabled = Enabled
C6. Add filter component - Treatments For Enabled Channels
Filter Condition -
ChannelEnabled
C7. Connect to Results
D. Update strategy - AllTreatmentsForEligibleOffers
D1. Remove the connectors between sub-strategy “ApplyOfferVariationsDataToTreatments” and following treatments filter components -
Email Treatments
SMS Treatments
OutboundCC Treatments
AppPush Treatments
DirectMail Treatments
Web Treatments
InboundCC Treatments
Retail Treatments
IVR Treatments
D2. Add following 6 filter components after sub-strategy “ApplyOfferVariationsDataToTreatments” -
Treatments For ExecutionMode - TIL
Filter Condition - @String.contains(@String.toUpperCase(.ExecutionMode),"TIL")
Treatments For ExecutionMode - GRPL
Filter Condition - @String.contains(@String.toUpperCase(.ExecutionMode),"GRPL")
Treatments For ExecutionMode - NBAA
Filter Condition - @String.contains(@String.toUpperCase(.ExecutionMode),"NBAA")
Treatments For ExecutionMode - GetNBA
Filter Condition - @String.contains(@String.toUpperCase(.ExecutionMode),"GETNBA")
Treatments For ExecutionMode - ProcessEvent
Filter Condition - @String.contains(@String.toUpperCase(.ExecutionMode),"PROCESSEVENT")
Treatments For ExecutionMode - Batch
Filter Condition - @String.contains(@String.toUpperCase(.OfferExecutionMode),"BATCH")
D3. Connect the  new filter components to existing treatments filter components as follows -
Treatments For ExecutionMode - TIL
Connect with -
SMS Treatments
OutboundCC Treatments
AppPush Treatments
Treatments For ExecutionMode - GRPL
Connect with -


AppPush Treatments
Treatments For ExecutionMode - GRPL
Connect with -
Web Treatments
Treatments For ExecutionMode - NBAA
Connect with -
InboundCC Treatments
Treatments For ExecutionMode - ProcessEvent


920
Connect with -
SMS Treatments
OutboundCC Treatments
Treatments For ExecutionMode - Batch
Connect with -
Email Treatments
SMS Treatments
OutboundCC Treatments
AppPush Treatments
DirectMail Treatments
D4. Add a sub-strategy component “Apply Channel Control For GetNBA” for strategy - ApplyChannelControlByExecutionMode
D5. Connect filter component - Treatments For ExecutionMode - GetNBA to sub-strategy component “Apply Channel Control For GetNBA”
D6. Connect sub-strategy component “Apply Channel Control For GetNBA” with the following filter components -
SMS Treatments
Web Treatments
InboundCC Treatments
Retail Treatments
IVR Treatments

E. New Strategy - ApplySubChannelControlByExecutionMode
E1. Create new SR Property - SubChannelEnabled (Boolean)
E2. Enable External Input
E3. Import decision data - SubChannelControlByExecutionMode
E4. Add Set Property component - “Set Default SubChannel Enabled Flag”
SubChannelEnabled = true
E5. Add a data join component after “Set Default SubChannel Enabled Flag”  and join with SubChannelControlByExecutionMode
Join Condition -
ExecutionMode
Channel
TargetSubChannel
Do not enable “Exclude source component results that do not match join condition”.
Property Mapping -
SubChannelEnabled = Enabled
E6. Add filter component - Treatments For Enabled SubChannels
Filter Condition -
SubChannelEnabled
E7. Connect to Results

F. New Strategy - IdentifyTreatmentSubChannelForGetNBA
F1. Remove the connectors between Data Join component “Join by Treatment Names” and filter components - “SubChannel Check from
Context” & “Select Random Subchannel”


Context” & “Select Random Subchannel”
F2. Add a sub-strategy component “Apply SubChannel Control For GetNBA” for strategy - ApplySubChannelControlByExecutionMode


921
F3. Connect  Data Join component “Join by Treatment Names” with sub-strategy component “Apply SubChannel Control For GetNBA”
F4. Connect sub-strategy component “Apply SubChannel Control For GetNBA” with filter components - “SubChannel Check from Context”
& “Select Random Subchannel”


922
Assisted Upgrade-Segment of 1 Chort

HL-Requirement
Adding new conditions to Chort variables
Using Chort structure to serve Segment of 1 Chort identification
There will be two types of Chort
Commercial - Used for Commercial Recommendation
Segment of 1  - Used for Segment of 1 Cohorts

Update DDS- CustomerCohortsAOM-2605 segment of 1 - Cohort
ChortType Text Commercial
Segmentof1Single
BelongstoMultipleCTN
AccountText TRUE /FALSE/NULLSingle GetSubscritionData EvaluateChort
BySubscrition
Data
MostUsedISP Text SKY
VIRGIN
BT
TALKTALK
EE
PLUSNET
NULL
(single value)Single GetUsage EvaluateCoho
rtByUsage
AcquisitionChannel Text values will the be
channel code
List of possible
values -TBC
 Single GetSubscritionData EvaluateChort
BySubscrition
Data
PayMSIMONetMAFBa
ndInteger 1/2/3/4/5/6/Null
 Single GetCurrentTariff EvaluateChort
ByNetMafBan
d  Possible Values Multiple/SingleValue StrategyTo Populate
DataStrategyToEv
aluateCohort
Elgiiblity


923

Update DDS - RangeMapping
PM tool to push new range types (updated these three names as per logic)
SimNetMafBanding
HandsetNetMafBanding
Avg3MonthDataBand
Update Strategy -GetCurrentTariff
Set CustomerType attribute with same logic in EvaluateCohortByCustomerType (according to current tariff from GPSL or from Spine)
Set TariffMafBand
if CustomerType=PaymSIMO
Map TariffMaf value to Related Range Band  (Load RangeMaping DDS  RangeType : SimNetMafBanding)
If CustomerType=PaymHandset
Map TariffMaf value to Related Range Band  (Load RangeMaping DDS  RangeType : HandsetNetMafBanding)
PaymLoan ???
Set TariffGroup from  from product reference data.
New Strategy-GetSubscritionDetails
Set BelongstoMultipleCTNAccount (TRUE/FALSE)PAYMHandsetNetMAF
Band Integer 1/2/3/4/5/6/7/Null
 Single GetCurrentTariff EvaluateChort
ByNetMafBan
d
IsFirstUpgrade Text TRUE/FALSE/NULLSingle GetSubscritionDetails EvaluateChort
BySubscrition
Data
Last3MonthData
UsageBandInteger 1/2/3/4/5/6/7/Null
 Single GetUsage EvaluateCoho
rtByUsage
StarRatingScore Integer 1/2/3/4/5/Null
 Single GetCustomerStarRatingEvaluateChort
ByStartRating
Score
LastSeenHandSetMak
eText  Single GetUsage
 EvaluateCoho
rtByUsage
LastSeenHandSetMod
elText  Single GetUsage EvaluateCoho
rtByUsage
CustomerIntent Text Leave-Mobile etc Single  EvaluateCoho


rtByUsage
CustomerIntent Text Leave-Mobile etc Single  EvaluateCoho
rtRecentEvent
CustomerIntentScore
RangeText Null/Low/High Single  EvaluateCoho
rtRecentEvent
TariffGroup Text Red,RedEnrtarimnetMultiple GetCurrentTariff EvaluateCoho
rtByTariff


924
Set TRUE >Check CustomerAccount. paym_subs_ctn>1
Set FALSE   Check CustomerAccount. paym_subs_ctn=1
Set IsFirstUpgrade (TRUE/FALSE)
if the subr_original_connection_dt = latest_contract_start_dt  plus or minus 10 days set as true, else false
Set AcquisitionChannel=Subscrition.Acquisition_Channel (conversion tbc)
New Strategy-GetUsage
Set Last3MonthAverageDataUsage
make sub strategy call to SubscriptionInvoiceUsageData
Set Last3MonthAverageDataUsage =AverageDataUsage
Set Last3MonthDataUsageBand
Import RangeMaping DDS  RangeType : Last3MonthAverageDataUsageBand
Map Last3MonthAverageDataUsage data to band
MostUsedISP = AOM_CUSTOM_CHAR_007 flexi attribute
LastSeenHandSetMake
Subscrition.Device.Manufacturer
LastSeenHandSetModel
Subscrition.Device.Marketing_Name
Update Strategy -EvaluateCohorts
Add ExternalInput
Filter CustomerCohorts on CohortType according to value set in external Input.
Add Sub Strategy Calls :
EvaluateCohortByNetMafBand
EvaluateCohortByUsage
EvaluateChortBySubscritionData
EvaluateChortByStartRatingScore
EvaluateChortByRecentEvent
EvaluateCohortByTariff
Update Strategy -EvaluateCohortByCustomerType
Remove logic to calculate CustomerType
Make Sub strategy call to GetCurrentTariff to populate CustomerType
New Strategy-EvaluateCohortByNetMafBand
 Make Sub strategy call to GetCurrentTariff
Populate TariffMafBand  & CustomerType
if CustomerType=PaymSIMO
Compare with PayMSIMONetMAFBand, if matches or PayMSIMONetMAFBand is null  >Set  Eligible= True


If CustomerType=PaymHandset
Compare with PAYMHandsetNetMAFBand, if matches or PAYMHandsetNetMAFBand is null>Set  Eligible= True
PaymLoan ???


925
New Strategy-EvaluateCohortByUsage
Make Sub strategy call to GetUsage
Compare  Last3MonthDataUsageBand, if matches or Last3MonthDataUsageBand is null>Set  Eligible= True
Compare MostUsedISP if matches or MostUsedISP is null>Set  Eligible= True
Compare LastSeenHandSetMake if matches or LastSeenHandSetMake is null>Set  Eligible= True
Compare LastSeenHandSetModel if matches or LastSeenHandSetModel is null>Set  Eligible= True
Connect all  conditions to result of strategy.
New Strategy - EvaluateChortBySubscritionData
Make Sub strategy call to GetSubscritionDetails
Evaluate Each condition in below (if any value configured)
BelongstoMultipleCTNAccount
IsFirstUpgrade
AcquisitionChannel
if condtion is met Set  Eligible= True Connect each evaluation to result
İf condition is null Set  Eligible= True Connect each evaluation to result
Connect all  conditions to result of strategy.
New Strategy-EvaluateChortByStartRatingScore
Make Sub strategy call to   GetCustomerStarRating
Populate GetCustomerStarRating.CustomerStarRating
Compare StarRatingScore,  if matches or StarRatingScore is null>Set  Eligible= True
New Strategy - EvaluateCohortByTariff
Make Sub strategy call to GetCurrentTariff
Populate TariffGroup
Compare TariffGroup,  if matches or TariffGroup is null>Set  Eligible= True
New Strategy - EvaluateChortByRecentEvent
Import CustomerIntens
Filter ConfidenceScoreRange= ‘High’
Compare CustomerIntent,  if matches or CustomerIntent is null>Set  Eligible= True


926
Assisted Upgrade-Segment of 1 Discount Strategy

HL Requirement
A segment of 1 discount strategy can be assigned to single Segment of 1 Cohort. (A Segment of 1 Cohort can be assigned to multiple
strategy)
Segment of 1 discount strategy indicates the discount percentage for list of tariffs.

New DDS- SegmentOf1DiscountStrategy
*different rows for each ChortID-TariffCode-Channel-Team
Update Strategy-IdentifyCommercialRecommendations
Set ChortType= Commercial & make call to EvaluateCohorts  (to make sure only Commercial type cohorts will be evaluated)
New Strategy -IdentifySegmentOf1DiscountStrategy
Import SegmentOf1DiscountStrategy
Filter active ones (according to start & end date)AOM-2612 segment of 1 - Assign Discoount Strategy
pyName  ChortdID_TariffCode_Channel_Team
DiscountStrategyName Text User input form UI
DiscountStrategyID Text Created by PM tool
DiscountStatetgyStartDate Date
DiscountStatetgyEndDate Date
CohortID Text U-9700228
TariffCode Text 11122
Discount Decimal 50,10 (percentage)
Channel Text (single) InboundCC,Web etc
Team Text(single) Applicable for only InboundCC
Omni,Save,SuperSave
All


927
Filter records for Channel
Filter records on Team. (if Team<>All)
Set ChortType= Segmentof1
Make sub strategy call to EvaluateCohorts
join SegmentOf1DiscountStrategy & EvaluateCohorts result on ChortID
Output of the strategy will be list of tariffs & discounts for  a customer.Tariff codes in this list indicates if customer move to that tariff they
can get this discount.


928
Assisted Upgrade - Using Segment of 1 in the logic Recommendations

HL Requirements
Extend Assisted logic to introduce new discount type

Update Strategy- CalculateSegmentOf1DiscountForAssistedUpgrade
Enable External Input
Make sub startegy call to I d e n t i f y S e g m e n t O f 1 D i s c o u n t S t r a t e g y
Filter ( oj join)  the result with TariffCode in external input
Set DiscountType =”SegmentOf”
Set DiscountValueType=”Percentage”
Set Discount = output of I d e n t i f y S e g m e n t O f 1 D i s c o u n t S t r a t e g y for discount value.
All other attributes available in external input should available in the result.
 AOM-2619 segment of 1 - Using Segment of 1 in the logic Recommendations


929
Assisted Upgrade -Recommendation Output

HL Requirement
A new UI will be created to trigger & show Assisted upgrade result.
Current test harness does not cater for multiple Recomendation case.  Test harness  will be updated to show new attributes  & multiple
recommendations.
Logic will populate related attributes.
For this release we are not creating a complex object structure to present recordation output. In future releases we may include it.
(depends on decision IH & output requirements)
IH record will be created for each recommendation.
Update Strategy - PopulateOutputPropertiesForIBCC
For Execution Mode NBAA , add a substrategy call PopulateOutputPropertiesForNBAA (remove exiting components)
New Strategy-PopulateOutputPropertiesForNBAA
Enable External input
Make Sub startegy call to CalculateDiscountsforAssistedUpgrade
Join External input with  CalculateDiscountsforAssistedUpgrade
This join will populate Recommendation details to Eligible Treatment Record.
Attributes to set in Property mapping section of data join : (will be available in CalculateDiscountsforAssistedUpgrade output.) Make sure
values are populated in strategy.
RecomendationRank - 1/2/3
RecomendationType-Logic/Commercial
RecommendedTariffCode-111222
RecommendedTariffName-Red 3GB
RecommendedTenure
RecommendedTarrifMAF
RecommendedMinutes
RecommendedTariffData
RecommendedTariffSelectionBlock-T1/T2/T3…
RecommendedDiscountBlock-D1/D2/D3
RecommendedDiscountCode
RecommendedDiscountAmount
RecommendedDiscountType- Upsell/Price Matrix/Segment of 1 etc
RecommendedDiscountValueType-Percentage/amount
RecommendedServiceCode (Multiple) (empty for now)


RecommendedDiscountValueType-Percentage/amount
RecommendedServiceCode (Multiple) (empty for now)
SegmentStrategyAOM-2696  > AOM-2449 part 1 Being able to let a subset of agents to see the Assisted Upgrade
Recommendations output without a front end


930
Update Strategy-SetIHForInboundCC
Recommended Tariff Code
Recommended Tariff Maff
Recommended Max Dsicount
Recommended DiscountType
Team
Make sure those attributes are populated in IH for each recommendation.


931
Assisted Upgrade- Changing Segment Strategy Identification Logic

HL Requirement
Segment Strategy calculation caters for customer recent event /page visits & BDC model propensity values to identify customer’s
segment strategy.
with 1.13 a bespoke logic was developed for Assisted Upgrade with IdentifySegmentStrategyforSubscription. With this jira we are
changing this flow to use AOM intent as input & locate strategy according to.
New DDS - InentToSegmentStrategy
Unique by Intent+ConfidenceScore+Range+Channel+TeamAOM-2439 Add PAC/STAC
vf.co.uk
 as a trigger in the logic Recommendation (Strategy)AOM-2310 Logic Recommendation :PAC/SAC Trigger
Intent
ConfidenceScoreRange Text High/Medium/Low
ModelBandID Integer 1-10  -All
Channel Text Web/InboundCC etc
Team Text All or a specific team
Applicable for only IBCC
SegmentStrategy Text Save/Grow/Retain


932
Update Strategy -IdentifySegmentStrategyforSubscription

1. Remove Sub strategy calls & switch
2. Import Primary.CustomerIntents
3. Imports RangeMapping DDS -  RangeType=ChurnBand
4. Identify the single BandID for each Intent According to IntentBDCModelPropecity value of the intent.(available in customer intents page
list) (can be done as a sub strategy) (Set SegmentStrategyBandID)
5. Find Matching Segment from  InentToSegmentStrategy- with keys Channel ,Team,Intent,ConfidenceScoreRange,ModelBandID.
(Consider Team = All, ModelBandID=All cases)
6. Make sure Strategy result is as single Segment. Consumer may belong to multiple intents, currently assisted logic using only Leave-
Mobile intent it may not be issue for current config. But in the future while  working with multiple intents it will require selecting single
Segment.

Update DF- GetAssistedUpgrade
Current Assisted flow does not include Intent calculation, DF need to be updated to include Intent calculation logic.
replace reference to PrepareRealtimeData with IdentifyCustomerIntentsRealTime


933
Aggregated Event Store
1. Stream Dataset
2. Event Strategy
2.1 Window Configurations :
2.2 Aggregations
2.3 Join Component Configuration :
3. Data Flow
4. Work Item
1. Stream Dataset
Create Stream dataset CustomerEvents
Class : VFUK-FW-AOMFW-Data-CustomerEvent
Partition Key : SubscriptionId
Authentication : Basic
2. Event Strategy
Class: VFUK-FW-AOMFW-Data-CustomerEvent
Name: AggregateCustomerEvents
Event key: SubscriptionId
Event timestamp: System time

2.1 Window Configurations :
Each window configured have separate windows for the group of attributes listed in below:
SubscriptionId
PrimaryContext
SecondaryContext
Window type
Sliding. Each one is configured for with related period in days / hours
2.2 Aggregations
Window Aggregation : Calculate the Count of the events in corresponding window and populate internal attributes.
Number of Times Access in last 24 Hours
Number of Times Accessed in last 7 Days
Number of Times Accessed in last 30 Days
Number of Times Accessed in last 60 Days
Number of Times Accessed in last 90 DaysAOM-2463 AOM RT Aggregated Event Store


934
Number of Times Accessed in last 120 Days

2.3 Join Component Configuration :
Join Condition : The attributes listed below should match for two windows
SubscriptionId
PrimaryContext
SecondaryContext
Output
Map Count attribute of secondary path to a new attribute to be able to move the value up. (repeat it for each attribute coming form below
path)
3. Data Flow
Class : VFUK-FW-AOMFW-Data-CustomerEvent
Name : ProcessCustomerEvents
Input : CustomerEvents
Event Strategy
AggregateCustomerEvents
Populate Event Counts to related attributes in Properties output mapping section
Destination
DataSet : CustomerAggregatedEvents (Class:VFUK-FW-AOMFW-Data-CustomerAggregatedEvents)
Keys :
SubscriptionId
PrimaryContext
SecondaryContext
Captured Data/Aggregations:
AccessCountForLast24Hours
AccessCountForLast7Days
AccessCountForLast30Days
AccessCountForLast60Days
AccessCountForLast90Days
AccessCountForLast120Days
AccessCountForLast60To31Days
AccessCountForLast90To61Days
AccessCountForLast120To91Days
LastEventTimestamp
LastEventContext
LastEventChannel


935
4. Work Item
DF should be configured as Realtime DF to be able to listen to stream & run event strategy


936
NBA FW - Offer Level Contact Strategy
[AOM-2473] Offer Level Contention Rules Within the NBA Framework
Clarified Requirements (User Story Update - Pending)
1. Each offer will have a new configuration - ApplyOfferSelfContentionStrategy (Yes/No)
2. Each offer will have a new configuration - RepresentationRate (any values from -1, 0 or positive integer)
3. Each offer will have a new configuration - FallowPeriodForPositiveResponse (any values from -1, 0 or positive integer)
4. Each offer will have a new configuration - FallowPeriodForNegativeResponse (any values from -1, 0 or positive integer)
5. Offer Self-Contention Strategy should only be applied for offers if -
a. ApplyOfferSelfContentionStrategy to Yes
b. Intent score (which resulted to the offer being selected for evaluation) is not High
6. In applying Offer Self-Contention Strategy - RepresentationRate -
a. This will be applied if the latest response for the offer is “sent” (across all channels) with no further positive or negative responses
(including inferred responses)
b. Identify the date when the offer was “sent” to customer (across all channels) last
c. Calculate the number of days passed since the last communication (DaysSinceLastPresentationDate)
d. Check against the RepresentationRate value
i. if RepresentationRate is -1, the offer should never be presented (eligible) again
ii. Else, offer is eligible by RepresentationRate only if DaysSinceLastPresentationDate > RepresentationRate
7. In applying Offer Self-Contention Strategy - FallowPeriodForPositiveResponse -
a. This will be applied if the latest response for the offer is “positive” (across all channels) (including inferred responses)


b. Identify the date when “positive” response was received for the offer (across all channels) last
c. Calculate the number of days passed since the last “positive” response (DaysSinceLastPositiveResponse)
d. Check against the FallowPeriodForPositiveResponse value
i. if FallowPeriodForPositiveResponse is -1, the offer should never be presented (eligible) again
ii. Else, offer is eligible by FallowPeriodForPositiveResponse only if DaysSinceLastPositiveResponse >
FallowPeriodForPositiveResponse
8. In applying Offer Self-Contention Strategy - FallowPeriodForNegativeResponse -
a. This will be applied if the latest response for the offer is “Negative” (across all channels) (including inferred responses)
b. Identify the date when “Negative” response was received for the offer (across all channels) last
c. Calculate the number of days passed since the last “Negative” response (DaysSinceLastNegativeResponse)
d. Check against the FallowPeriodForNegativeResponse value
i. if FallowPeriodForNegativeResponse is -1, the offer should never be presented (eligible) again
ii. Else, offer is eligible by FallowPeriodForNegativeResponse only if DaysSinceLastNegativeResponse >
FallowPeriodForNegativeResponse
9. This functionality should be available for execution modes within NBA FW
10. For Parent-child bundle, this functionality should be applied to Parent only. Child treatments should be available to relevant Parent
irrespective of offer level contact strategy

The following table describes Positive and Negative responses to be used in Offer Contention
ChannelPositive Response Negative Response


937

Design Approach
A. Update Offer proposition decision data structure for all Issues + PM Changes
Create the below new SR properties and add them to Offer DDS
ApplyOfferSelfContentionStrategy (Text)
RepresentationRate (Integer)
FallowPeriodForPositiveResponse (Integer)
FallowPeriodForNegativeResponse (Integer)
B. Update GetIHAtCustomerLevel  and add New Strategy - ApplyOfferSelfContentionStrategy (in Artefacts ruleset):
1.  Update GetIHAtCustomerLevel strategy
Add a new filter component "Selection By Subscription Positive"
Connect to Data Import "Import Interaction History Records"
.Outcome = "Positive" (values to be confirmed)
Add a new filter component "Selection By Subscription Positive"
Connect to Data Import "Import Interaction History Records"
.Outcome = "Negative" (values to be confirmed)
2. Add 3 new set property components:
Save Batch Outcome Date By Subscription Sent
Connect to existing filter "Selection By Subscription"
Connect to Unica IH (Unica Campaign History By Subscription)
Set .ValueText = .OutcomeDate
Save Batch Outcome Date By Subscription Positive
Connect to new filter "Selection By Subscription Positive"
Connect to Unica IH (Unica Campaign History By Subscription)
Set .ValueText = .OutcomeDate
Save Batch Outcome Date By Subscription Negative
Connect to new filter "Selection By Subscription Negative"
Connect to Unica IH (Unica Campaign History By Subscription)
Set .ValueText = .OutcomeDate
3. Add 3 new group by components:
Get Latest Batch Selection By Subscription Sent
Connect with "Save Batch Outcome Date By Subscription Sent" set property component
Set .OutcomeDate to Max of .OutcomeDateSMS Inferred-Positive Inferred-Negative
OutboundCC DIALLED_SUCCESS
Inferred-Positive DIALLED_NOT_ELIGIBLE
DIALLED_DECLINE


Inferred-Positive DIALLED_NOT_ELIGIBLE
DIALLED_DECLINE
DIALLED_DECLINE_DNC
Inferred-Negative
AppPush  REJECTED
IVR Accepted Rejected
Rejected-Agent


938
With highest .OutcomeDate
Select "Include all model results in group"
Get Latest Batch Selection By Subscription Positive
Connect with "Save Batch Outcome Date By Subscription Positive" set property component
Set .OutcomeDate to Max of .OutcomeDate
With highest .OutcomeDate
Select "Include all model results in group"
Get Latest Batch Selection By Subscription Negative
Connect with "Save Batch Outcome Date By Subscription Negative" set property component
Set .OutcomeDate to Max of .OutcomeDate
With highest .OutcomeDate
Select "Include all model results in group"
4. Add 3 new set property components:
Reset Batch Outcome Date By Subscription Sent
Connect with "Get Latest Batch Selection By Subscription Sent" group by component
Set .OutcomeDate = .ValueText
Reset Batch Outcome Date By Subscription Positive
Connect with "Get Latest Batch Selection By Subscription Positive" group by component
Set .OutcomeDate = .ValueText
Reset Batch Outcome Date By Subscription Negative
Connect with "Get Latest Batch Selection By Subscription Negative" group by component
Set .OutcomeDate = .ValueText
5. Add 3 new set property components:
a. Latest Batch Selection By Subscription Sent
i. Connect with "Reset Batch Outcome Date By Subscription Sent" set propery component
ii. Set .DaysSinceLastPresentationDate = @AOMUtilities.CalculateNumberOfDaysFromToday(.OutcomeDate)
b. Latest Batch Selection By Subscription Positive
i. Connect with "Reset Batch Outcome Date By Subscription Positive" set propery component
ii. Set .DaysSinceLastPositiveResponse = @AOMUtilities.CalculateNumberOfDaysFromToday(.OutcomeDate)
c. Latest Batch Selection By Subscription Negative
i. Connect with "Reset Batch Outcome Date By Subscription Negative" set propery component
ii. Set .DaysSinceLastNegativeResponse = @AOMUtilities.CalculateNumberOfDaysFromToday(.OutcomeDate)


3. ApplyOfferSelfContentionStrategy changes
Start with external input and add 2 filter components
If ApplyOfferSelfContentionStrategy != Yes OR ConfidenceScoreRange = High then connect to Results
If ApplyOfferSelfContentionStrategy = Yes AND ConfidenceScoreRange != High then add 3 filter components in line as below:
Check Representation Rate Filter - @if(.RepresentationRate >=0,
LatestBatchSelectionBySubscriptionSent.DaysSinceLastPresentationDate > .RepresentationRate, true )
Call sub-strategy GetIHAtCustomerLevel, component “Get Latest Batch Selection By Subscription Sent”
Check Fallow Period For Positive Response Filter - @if(.FallowPeriodForPositiveResponse >=0,
LatestBatchSelectionBySubscriptionPositive.DaysSinceLastPositiveResponse > .FallowPeriodForPositiveResponse, true )
Call sub-strategy GetIHAtCustomerLevel, component “Get Latest Batch Selection By Subscription Positive”
Check Fallow Period For Negative Response Filter - @if(.FallowPeriodForNegativeResponse >=0,
LatestBatchSelectionBySubscriptionNegative.DaysSinceLastNegativeResponse > .FallowPeriodForNegativeResponse, true )
Call sub-strategy GetIHAtCustomerLevel, component “Get Latest Batch Selection By Subscription Negative”
Connect the last filter to Results


939
C. Update strategy - IdentifyEligibleOffers
Call sub-strategy ApplyOfferSelfContentionStrategy after switch component - Choose Offers By ExecutionMode, before the filters by
Business Purposes


940
NBA FW - Manage Mandatory Communications
[AOM-2474] Manage mandatory comms in the NBA batch framework
Clarified Requirements (User Story Update - Pending)
1. Each offer will have a new configuration - Mandatory (Yes/No)
2. New Decision data ChannelDecisionMix needs to be configured with NumberOfNonMandatoryCommunications for each outbound
channel
3. Within the Arbitration step in the decisioning funnel,
a. the “mandatory” offers (treatments) should be arbitrated separately from “non-mandatory” offers (treatments)
b. all “mandatory” offers (treatments) should be returned
c. all “mandatory” offers (treatments) should be ranked higher than “non-mandatory” offers (treatments)
4. Within the Arbitration step in the decisioning funnel,
a. the “non-mandatory” offers (treatments) should be arbitrated separately from “mandatory” offers (treatments)
b. only top x “non-mandatory” offers (treatments) should be returned, where x is defined as a new configuration by channel
5. This functionality should only be applied for Batch
6. For Parent-child bundle, this functionality should be applied to Parent only. Child treatments should be available to relevant Parent
irrespective of mandatory flag
Design Approach
1. Update Offer proposition decision data structure for all Issues with new Mandatory field + PM Changes
2. Create new decision data ChannelDecisionMix + PM Changes
3. Update strategy "IdentifyBestTreatmentforSubscription" (Remove the Batch processing from this strategy)
a. Rename Filter "BatchorTILModeorGetNBAIVR" to "TILModeorGetNBAIVR"
b. Remove ".ExecutionMode="Batch" ||" from the Filter criteria


b. Remove ".ExecutionMode="Batch" ||" from the Filter criteria
4. Save as IdentifyBestEmailTreatmentForBatch to create IdentifyBestEmailTreatmentForBatchNonMandatory strategy
a. Update PrioritizeEmail (Select All, Ordered by pxPriority, descending)
b. Filter → .pxRank<=.NumberOfNonMandatoryCommunications
5. Save as IdentifyBestEmailTreatmentForBatch to create IdentifyBestEmailTreatmentForBatchMandatory strategy
a. Remove PrioritizeEmail Component
6. Create new strategy "IdentifyBestTreatmentForBatch" (Add Batch processing in this strategy)
External input
Filter -> .ExecutionMode="Batch"
Filter -> .Mandatory="No"
Import ChannelDecisionMix  decision data
Data join ChannelDecisionMix  to have NumberOfNonMandatoryCommunications ( X ) for each outbound channel
SubStrategy "CalculatePriority"
Filter -> .Channel="SMS"
Set Property -> DeprioritiseNoOffer (same as IdentifyBestTreatmentforSubscription)
Prioritize SMS (Select Top X, Ordered by pxPriority, descending)
Connect to set property PrioritizedNonMandatoryTreatments
Filter -> .Channel="AppPush"
Prioritize AppPush (Select Top X, Ordered by pxPriority, descending)
Connect to set property PrioritizedNonMandatoryTreatments
Filter -> .Channel="OutboundCC"


941
Prioritize OBC (Select Top X, Ordered by pxPriority, descending)
Connect to set property PrioritizedNonMandatoryTreatments
Filter -> .Channel="DirectMail"
Prioritize DirectMail (Select Top X, Ordered by pxPriority, descending)
Connect to set property PrioritizedNonMandatoryTreatments
Filter -> .Channel="Email"
Call SubStrategy "IdentifyBestEmailTreatmentForBatchNonMandatory"
Connect to set property PrioritizedNonMandatoryTreatments
Filter -> .Mandatory="Yes"
Set property -> .pxPriority=1
Filter -> .Channel="SMS"
Prioritize SMS (Select All, Ordered by pxPriority, descending)
Connect to set property PrioritizedMandatoryTreatments
Filter -> .Channel="AppPush"
Prioritize AppPush (Select All, Ordered by pxPriority, descending)
Connect to set property PrioritizedMandatoryTreatments
Filter -> .Channel="OutboundCC"
Prioritize OBC (Select All, Ordered by pxPriority, descending)
Connect to set property PrioritizedMandatoryTreatments
Filter -> .Channel="DirectMail"
Prioritize DirectMail (Select All, Ordered by pxPriority, descending)
Connect to set property PrioritizedMandatoryTreatments
Filter -> .Channel="Email"
Call SubStrategy "IdentifyBestEmailTreatmentForBatchMandatory"
Connect to set property PrioritizedMandatoryTreatments
Add a new set property -> PrioritizedTreatments
Connect set property PrioritizedMandatoryTreatments and PrioritizedNonMandatoryTreatments so Mandatory are on top
Connect to Results
7. Update strategy "IdentifyBestOBTreatmentsByBatch"
Remove call to SubStrategy "IdentifyBestTreatmentforSubscription"
Replace it with call to SubStrategy "IdentifyBestTreatmentForBatch"


942
NBA FW - Global Contact Strategy
[AOM-2472] Create a global contact strategy for marketing Offers
Clarified Requirements (User Story Update - Pending)
1. Each offer will have a new configuration - Mandatory (Yes/No)
2. Each offer will have a new configuration - ApplyGlobalContactStrategy (Yes/No)
3. Each ExecutionMode will have a new configuration - ExposureRate (any values from -1, 0 or positive integer)
4. Each ExecutionMode will have a new configuration - SaturationRateCount (positive integer)
5. Each ExecutionMode will have a new configuration - SaturationRatePeriod (any values from -1, 0 or positive integer)
6. Global Contact Strategy should be applied for Batch executions only (for current implementation)
7. Global Contact Strategy should only be applied for offers if -
a. Mandatory is set to No
b. ApplyGlobalContactStrategy to Yes
c. Intent score (which resulted to the offer being selected for evaluation) is not High
8. In applying Global Contact Strategy - ExposureRate -
a. Identify the date when the offer was “sent” to customer (across all OB channels) last
b. Calculate the number of days passed since the last communication (DaysSinceLastCommunicationDate)
c. Check against the ExposureRate value
i. if ExposureRate is -1, do not apply ExposureRate check for the ExecutionMode
ii. Else, offer is eligible by ExposureRate only if DaysSinceLastCommunicationDate > ExposureRate
9. In applying Global Contact Strategy - SaturationRate -
a. if SaturationRatePeriod is -1, do not apply SaturationRate check for the ExecutionMode
b. Else, do below -


b. Else, do below -
c. Identify the count of “sent” communications for the offer within last SaturationRatePeriod days (CountSinceSaturationRatePeriod)
d. Check against the SaturationRateCount value
i. offer is eligible by SaturationRate only if CountSinceSaturationRatePeriod < SaturationRateCount
10. While considering the IH for 8 & 9 above, only consider Batch & Non-Mandatory offers
11. The Global Contact Strategy will be applied before offer eligibility step in decisioning funnel
12. For Parent-child bundle, this functionality should be applied to Parent only. Child treatments should be available to relevant Parent
irrespective of global contact strategy

Design Approach
A. Update Offer proposition decision data structure for all Issues + PM Changes
Create below 2 SR properties and add to Offer DDS
Mandatory (Text)
ApplyGlobalContactStrategy (Text)
B. New Decision Data for ExecutionMode configs ; No PM changes for this sprint
Create a new ExecutionMode DDS, create below 3 new SR properties and add to the DDS
ExposureRate (Integer)
SaturationRateCount (Integer)
SaturationRatePeriod (Integer)


943
C. New Strategy - ApplyGlobalContactStrategy -
Start with an external input
Add 2 filter components
If Mandatory = Yes OR ApplyGlobalContactStrategy != Yes OR ConfidenceScoreRange = High then connect to Results
If Mandatory != Yes AND ApplyGlobalContactStrategy = Yes AND ConfidenceScoreRange != High then Check Exposure Rate and
Check Saturation Rate as below:
Check Exposure Rate Filter - @if(.ExposureRate >=0, LatestBatchSelectionBySubscription.DaysSinceLastCommunicationDate >
.ExposureRate, true )
Call sub-strategy GetIHAtCustomerLevel, component “Get Latest Batch Selection By Subscription”
Check Saturation Rate Filter -
@if(.SaturationRatePeriod>=0,CountSinceSaturationRatePeriodforBatchSelectionBySubscription.CountSinceSaturationRatePeri
od<.SaturationRateCount,true)
Call sub-strategy GetIHAtCustomerLevel, component “CountSinceSaturationRatePeriod for Batch Selection By Subscription”
D. Update strategy - IdentifyEligibleOffers
Call sub-strategy ApplyGlobalContactStrategy for batch
Import ExecutionModes decision data
Filter it by “BATCH” execution mode
Add a “set property” to apply Global Contact Strategy Configuration and set values for ExposureRate, SaturationRateCount and
SaturationRatePeriod from the filter component
Connect sub-strategy ApplyGlobalContactStrategy call to switch as shown in the below diagram


944
Release 2.2


945
Assisted Upgrade-Current S15Maf Sourcing & Using as Cohort variable
[AOM-2736] Source the Pre S15 Net MAF
[AOM-2738] Being able to use the Pre S15 Net MAF as a Cohort Variable

HL Requirement
Get PreSF15Maf from either Flexi
Use it in Evaluate Cohort logic
PreSF15Maf will be used   it in further steps selecting best Tariff-discount combination.
Update Strategy-GetCurrentTariff
Update Set Current Tariff Details set component
Set CurrentTariffffTenure > from D_Tariff
Update TariffDetails set component ,
AddSubstrategy call  to CalculateS15MafandBand  in main path
Update TariffGoups data join. (key only on tariff group)
New Strategy- CalculateS15MafandBand
This strategy will calculate the PreS15Maf
Enable External Input
Set PreS15Maf =S15_ADJUSTMENT_RATE' Flexi field from Flexi .   (Attribute name AOM_Custom_Num_208)
Set PreS15MafSource=”Flexi”
Import RangeMapping,
Range Type = HandsetS15Banding (for CustomerType=PaymHandset)
Range Type = SIMOS15Banding(for CustomerType=PaymSIMO)
Set PreS15MafRange according  customer type  & PreS15Maf set  band values.
PreS15MafRange is range id from rangemapping DD.PreS15Maf is from flexi
Update Decision Data - RangeMapping
Add 2 new range type HandsetS15Banding,SIMS15Banding
Update  Decision Data- CustomerCohorts
New attributes to add
PreS15MafRange Text Multiple Values Null
1,2


New attributes to add
PreS15MafRange Text Multiple Values Null
1,2
1,3,4   P o s s i b l e V a l u e s


946
Update Strategy- EvaluateCohorts
Add a new Strategy call EvaluateCohortByPreS15Maf
New Strategy -EvaluateCohortByPreS15Maf
Similar to other strategies validates if chord  is eligible customer.
Make sub strategy call to GetCurrentTariff to populate “PreS15MafRange” of customer.
PM tool Impact
New Range type
Add new attribute to cohort variable.


947
Assisted Upgrade -Update Current Discount Amount calculation
Update Strategy -Calculate Tariff Discount
Update stagey to use GPSL/Product holds active discounts available on subscription.

Remove the logic for Calculating Discount
Make Sub strategy call to  GetActiveDiscountList
Calculate the discount amount (as is )

 AOM-2438 Identifying the customer's product holding if GPSL is down -
Clarification


948
Assisted Upgrade -Extent the list of tariff used in Pick n Mix
New Strategy- GetListOfBDCandCatalogTariffsForPickNMix
Update strategy to source data both from BDC & Tariff catalog
Make sub strategy call GetListofActiveTariiffs , conect to external Input
Make sub-strategy call to  GetListOfValidSIMOTariffsFromBDCModel
Filter the output with ExtenalInput.RecomendationTariffTenure (remove 24 fix value)
Join  GetListofActiveTariffs  with  GetListOfValidSIMOTariffsFromBDCModel  on  RecommendedTariffCode (main path is
GetListofActiveTariffs, do not exclude not match records)
Populate RecRank from GetListOfValidSIMOTariffsFromBDCModel for matching records.
New Strategy - GetListofActiveTariffs
This stagey is to get list of tariffs according to criteria set from caller strategy
Enable ExternalIput
Import D_EligibleTariffsForDept (with division information from external input)
Set below attributes from D_Tariff
RecommendedTariffName
RecommendedTenure
RecommendedTarrifMAF
RecommendedMinutes
RecommendedTariffData
RecommendedTariffCode
RecommendedTariffGroup
RecommendedTarrifMafExVaT=.RecommendedTarrifMAF /(1+D_Tariff[Identifier:.Identifier].VatCode)
RecommendedTarrifS15Maf=RecommendedTarriffMafExVat  -(if Tariff Group is Entertainment Entertainment Cost else 0) .
Entertainment Cost will be a new parameter in AOM business config.
RecommendedTarrifCustomerType= same logic as in GetCurrentTariff
SIMOnly
RecommendedCTR
MBBFlag
SegmentofTariff
Filter by
RecommendedCTR (from AOM business config)


MBBFlag
SegmentofTariff
Filter by
RecommendedCTR (from AOM business config)
.SIMOnly (from External input)
.MBBFlag (from External input)
.SegmentofTariff (from External input)
.RecommendedTenure (from External input)AOM-2758 Extent the list of tariff used in Pick n Mix
AOM-2761 Maintain the Entertainment Cost


949
add  TariffGroups join  (Key = TariffGroup), populate RecommnededTariffGroupCoverage
Update Strategy- GetListOfValidSIMOTariffsFromBDCModel
Update  TariffGroups join  (Key = TariffGroup)
Remove EvaluateTariffVisibility as GetListOfBDCModelTariffsForPickNMix will source data from tariff catalog validation will be there.
Set RecommendedTarrifMafExVaT=.RecommendedTarrifMAF /(1+D_Tariff[Identifier:.Identifier].VatCode)
Set RecommendedTarrifS15Maf=RecommendedTarriffMafExVat  -(if Tariff Group is Entertainment Entertainment Cost else 0) .
Entertainment Cost will be a new parameter in AOM business config.
Set RecommendedTarrifCustomerType= same logic as in GetCurrentTariff


950
Assisted Upgrade-Update Logic Recommendation for S15
As -is
 Logic select the single tariff for each Recommendation Position  according to assigned tariff block (t1,t2,t3 - source tariff from BDC, T4-
source tariff from tariff catalog)
Calculates  Upsell+PriceMatrix+Segment of 1 discount for each tariff (for each Recommendation Position)
Select the max compatible discount (for each Recommendation Position)
Apply Discount normalisation & select compatible nearest discount.  (for each Recommendation Position)
To-be
Selects multiple tariffs  for each recomendation+ source tariff list from BDC + tariff catalog.
Calculates  Upsell+PriceMatrix+Segment of 1 discount for each tariff (Recommendation Position+Tariff)
Select the max  discount  (for each Recommendation Position+Tariff)
Apply Discount normalisation & select compatible nearest discount.   (for each Recommendation Position+Tariff)
Filter Tariff-Discount combinations not satisfies S15 target. (skip filter  different tenure /customer type)
1. Update CalculateDiscountsforAssistedUpgrade
RenameStrategy CalculateUpgradeDeal  (update references according to)
Customer Data component > Rename it >  InputForRecCal
Set RecomendationTenure=24 (The logic currently recommends tariff with tenure 24, but when build your own functionality is
introduced user can select different tenures. This variable is introduced to remove hard coded 24 filters)
SIMOnly=Y (The logic currently recommends SIM only tariffs , it will driven by “Offer Variant” which indicates journey of the customer
in future when we change offer catalog structure  )
MBBFlag=N
SegmentofTariff=CBU
PreS15Maf= GetCurrentTariff.PreS15Maf
IsTeamValid =


PreS15Maf= GetCurrentTariff.PreS15Maf
IsTeamValid =
Check if channel = InboundCC &  Team != Omni/Save/SuperSave    false else true
New Startegy Call CalculateUpgradeDiscount > To replace Discount Calculation Logic  & Discount Block normalisaton
New Strategy Call  ApplyS15Check
Path for T4 Logic > T4 should be calculated after Rec 1 selected  ( after S15 check).
For T4 path, populate Rec1 Tariff S15 Maf (RecommendedTarrifS15Maf) so can be used in T4 LogicAOM-2759 Use S15 Net MAF Threshold in Pick n Mix


951

 2. Update  Tariff Block Logics
Update -TariffGroups DecisionData
Remove TariffData,TariffItemRank attributes. It will only contain Tariff group based rank data.
Add MaxData as new attribute > this attribute will indicate the max data  for this group.

2.1 Update Strategy- GetRecommendedTariff
Replace “Recommended BDC Details “ with Sub strategy call GetListOfBDCandCatalogModelTariffsForPickNMix  (will populate tariffs
from BDC & catalog)
Remove GetListOfValidSIMOTariffsFromBDCModel call
Populate S15ThresholdValue from S15Threshold decision data.  (key on SegmentStrategy & RecommendationPosition) .If threshold is
not set  there will not be record in S15ThresholdValue decision data but records without threshold should not be excluded.
Set SkipS15Threshold = if CurrentTariffTenure <> RecommendedTariffTenure or CustomerType <>RecomendednTariffCustomerType or
S15ThresholdValue =null true else false
Remove T4Logic sub strategy call ,Rec1 filter
Connect T4 directly to the result shape. (T4 tariff & discount will be calculated in further steps)
Red 1 40960
RedEntertainment 2 40960
Unlimited Lite 3
Unlimited 4
Unlimited Max 5
Unlimited Entertainment 6
Unlimited Max Entertainment 7  Tariff Group Content MaxData


952
  Make  sub strategy call to T3 logic.

2.2 Update Strategy -T1Logic (new)
The logic should select higher tariff than current tariff according to data or feature
But there are case with execution (Red40  & red Entertainment 40)
Update Filter According to
HigherData > Selects tariff with higher data than current  && RecommnededTariffGroupCoverage>=.CurrentTariffGroupCoverage  (
to cover not to move from Red Ent. to Red)
.RecommendedData>.TotalData && .RecommnededTariffGroupCoverage>=.CurrentTariffGroupCoverage
HigherFeature > Selects tariff with higher feature , using rank to understand it. (to handle unlimited tariffs case)
.RecommnededTariffGroupCoverage>.CurrentTariffGroupCoverage
RedTop > in case of customer on top of red group, need to consider tariff groups Unlimited and upper ones.
.RecommnededTariffGroupCoverage>=4
RedEntTop> in case of customer on top of red ent. group, need to consider tariff groups Unlimited Ent & and upper ones.
.RecommnededTariffGroupCoverage>=6
UnlimitedMaxEntertainment> Incase customer in Unlimited entreatment or Unlimited entreatment max customer can only move to
Unlimited entreatment max
.RecommnededTariffGroupCoverage=7
Switch Condition :
UnlimitedMaxEntertainment>ExternalInput.CurrentTariffGroupCoverage>=6
HigherFeature>ExternalInput.CurrentTariffGroupCoverage<6&&ExternalInput.CurrentTariffGroupCoverage>=3
RedTop>ExternalInput.CurrentTariffGroupCoverage=1 && ExternalInput.TotalData >=40960 (will be populated from TariffGroups
DDS MaxData attribute of Red)


DDS MaxData attribute of Red)
RedEntTop>ExternalInput.CurrentTariffGroupCoverage=2 && ExternalInput.TotalData >=40960 (will be populated from TariffGroups
DDS MaxData attribute of Red Ent)
Others HigherData
 if SkipS15ThresholdCheck Top 1 records which has RecRank & smallest
Else return all records

2.2 Update Strategy -T2Logic  (new)
Select same data available & if not select higher.


953
Higher or Equal Data Plans :
.RecommendedTariffData>=.TotalData&&.RecommnededTariffGroupCoverage>=.CurrentTariffGroupCoverage
if SkipS15ThresholdCheck Top 1 records which has RecRank & smallest
Else return all records

2.3 New Strategy -T3Logic
It will select all tariffs
If Recommended tariff & current tariff tenure / customer type are different   ( SkipS15Threshold =true case ) will select the tariff with
min RecRank
AllTariffs >  all tariffs coming from external input
TariffWithHighestRank > Filter Tarif >RecRank>0 &  Select top record with lowest RecRank coming form external input
Switch Component
 Select AllTariffs , if ExternalInput.SkipS15ThresholdCheck false
else select TariffWithHighestRank
3. Update Discount CalculationLogic
3.1 New Strategy -CalculateUpgradeDiscount
Will contain discount calculation logic used to be in CalculateUpgradeDeal  ( so can be called for T4 logic as well)
Withdrawn
CalculateOmniDiscountsforAssistedUpgrade,CalculateSaveDiscountsforAssistedUpgrade,CalculateSuperSaveDiscountsforAssistedUpg
rade staregies.
Sun strategy call to new renamed discount strategies CalculatePriceMatrixDiscount,CalculateUpsellDiscount,CalculateUpsellDiscount
3.2 New Strategy- CalculatePriceMatrixDiscount
This strategy will replace
CalculateDiscountByOmniPriceMatrixForAssistedUpgrade,CalculateDiscountBySavePriceMatrixForAssistedUpgrade
,CalculateDiscountBySuperSavePriceMatrixForAssistedUpgrade - Withdrawn them
Strategy will check team going from external input & load related Decision data according to.


954

3.3 Update  Strategy  -CalculateUpsellDiscountForAssistedUpgrade
Rename strategy to CalculateUpsellDiscount
Update strategy as below,  (Set property is as is logic, decision data )
Current Strategy is not supporting multiple tariff input case.
Update group by, add  Recommendation position & RecomendedTariffCode  as Group condition > select max discount ( it will satisfy 0
as output if no valid discount, max

3.4 Update strategy - CalculateSegmentOf1DiscountForAssistedUpgrade
Rename strategy to CalculateSegmentOf1Discount
Remove exclude option from GetIdentifySegmentof1DiscountDetails data join. > so it will pass the tariff records if not discount avaliable.
(discount =0)
3.5 Update Strategy - ApplyDiscount Blocks
Skip logic for the records discount=0
Optimise for each loop to to iterated on each Tariff & consume only records for each tariff
Inside loop
Get records from external input only match with the Tariff in the loop


955
Get Eligible Discounts for Tariff and Department > Get list of compatible discounts for tariff -in the iteration  from
D_DiscountsForTariff
Initialise Discount  > Reset RecommendedDiscountCode,RecommendedDiscountAmount,RecommendedDiscountValueType  ( needs
for not matching discount case)
Fetch Possible Discount >  join  list of discount to process &  eligible  discounts  (no condition)
Get Nearest Discount > any discount small or equal to .NormalizedDiscount
Get the Nearest Discount for Each Tariff > select highest discount for each RecommendedPosition
Fetch Discount  > join on RecommendedPosition & populate the DiscountCode ,
Set Discount Details  > a new set component  (Those values need for UI …)
RecommendedDiscountCode from PC Discount data page
RecommendedDiscountAmount PC Discount data page
RecommendedDiscountValueType  PC Discount data page
RecommendedDiscountNamePC Discount data page
RecommendedDiscountValueIncVat= if(RecommendedDiscountValueType='Percentage',  RecommendedTarriffMaf*
(RecommendedDiscountAmount/100),RecommendedDiscountAmount +
(RecommendedDiscountAmount*RecomendedTariffVatCode)   (make sure RecomendedTariffVatCode is set recomeneded tarif sub
strategies)
(do not exclude not matching records) > it will be returned as 0 , as no discount avalilable in pc for normalised discount.


956

4. S15 Threshold Check Logic
4.1 New DDS S15Threshold
4.2 New Strategy -AppplyS15Check
This strategy is to :
Calculate PostS15Maf
Apply / Skip S15 Threshold check
SkipS15Threshold attribute set in higher steps of funnel, it there is a tenure or/customer type change or no threshold set for
position + segment strategy S15 threshold check will not be applied.
AOM-2757 Use the S15 Threshold in Pick n mix if the customer is upgrading to
the same product type and tenureAOM-2756 Set up S15 Threshold
AOM-2759 Use S15 Net MAF Threshold in Pick n Mix
SegmentStrategy Text Grow/Save/Retain
RecommendedPosition Integer 1/2/3
S15ThresholdValue Double -1,2,0
Negative value indicates max Dilute can be
done
Positive value indicate min. grow
0 value indicate grow need to be at least
equal  i.e not negative


957

Set PostS15Maf ,DeltaS15Maf
PostS15Maf=RecommendedTarriffMafExVat - Recommended Discount  -(if Tariff Group is Entertainment Entertainment Cost else 0)
. Entertainment Cost will be a new parameter in AOM business config.
Recommended Discount = if(RecomendedDiscountType='Percentage',  RecommendedTarriffMafExVat*
(RecomendedDiscountAmount/100),RecomendedDiscountAmount)
DeltaS15Maf  = PostS15Maf-PreS15Maf
Set FitinThreshold
 if SkipS15Threshold =false && (DeltaS15MAf  >=S15ThresholdValue ) Set FitinThreshold=true
else False
If SkipS15Threshold=True set FitinThreshold=True (Skip Condition)
 Selecting Single Tariff- Discount combination for each RecommendedPosition
Requirement  is to select relevant Tariff Discount combination:
if Fits in threshold ,with the highest propensity  (1th) S15SelectionRank=1
If no record with propensity , select the one  closer to the Threshold(2th) (min delta) S15SelectionRank=2
If no record fits in threshold & , select the one closer to the Threshold (3th) (highest Delta) S15SelectionRank=3

5. T4 Logic
Update Strategy -T4Logic
T4 logic should be executed for Rec 1 selected.
Tariff to process > which grows the Rec1 Tariff  S15 Maf (ignoring discounts)
Set SkipS15Threshold = if CurrentTariffTenure <> RecommendedTariffTenure or CustomerType <>RecomendednTariffCustomerType or
S15ThresholdValue =null true else false
Apply discount calculation same as T1/T2/T3 for selected tariffs


Apply discount calculation same as T1/T2/T3 for selected tariffs
Apply S15 Threshold check and select single Tariff-Discount combination for the position.
AOM-2755 Using Tariff S15 Net MAF for T4AOM-2754 Being able to go up the tariff ladder using S15 as a measure


959
Assisted Upgrade- New Cohort variable

Update DDS - CustomerCohorts
add new attribute
ChurnBand (multiple)
Update Strategy -EvaluateCohorts
Add a new sub-strategy EvaluateCohortByChurnBand
New Strategy-EvaluateCohortByChurnBand
Make a call to CalculateChurnScoreBand t populate customer Churn band
Check is Cohort condition match with customer Churn band. (same pattern with others)
 AOM-2443 Add Churn Band as a Variable for a Commercial Recommendation


960
NBA FW - Manage presentation of Offer Variants
Impact in Other areas

Dependencies

Design Approach
A. Update decision data - OfferToOfferVariations
Update decision data structure in all Issues to include new property Rank (OOTB)
Please note that this change will result in a PM tool change for the respective screen.

B. New strategy - IdentifyBestOfferVariantForOffer
This strategy will be called after identifying all eligible offer variations for each eligible offers
B1. Enable External Input (expect all eligible offer for each eligible offers)
B2. Use Group By component to identify all eligible offers
B3. Use Filter component to identify all  eligible offers with single eligible offer variation and output to Results
B4. Use Filter component to identify all  eligible offers with multiple eligible offer variations
B5. Use Embedded Strategy to loop through all treatments with with multiple eligible offer variations and within the embedded strategy use
a prioritize component to select top 1 offer variant by Rank property (available in OfferToOfferVariations decision data) among all eligible
offer variants for the offer in context AOM-2715 Manage presentation of offer variants
PM Tool Yes Changes to OfferToOfferVariations screen
PM Tool KT Documentation Yes
Knowledge Transfer Yes
App No
DB No  Area Yes/No Comments
PM Tool Yes Retest is required after PM tool changes are
available as per A
App No
DB No  Area Yes/No Comments


961
This sub-strategy will be executed for each offers individually.
 C. Update strategy - IdentifyOfferVariantsForEligibleOffers
After executing all Squad specific ApplyOfferVariationsEligibility sub-strategy, call the sub-strategy IdentifyBestOfferVariantForOffer
before the results component o return the best offer variant among all Eligible offer Variants for the offer from each squads.


962
NBA FW - Seed testing using NBA data

Impact in Other areas

Dependencies

Design Approach
A. New C* Data set - SeedTestLiveData (VFUK-AOMFW-SR)
Create a new data set on class VFUK-AOMFW-SR named SeedTestLiveData with the following keys in order -
pyName
TreatmentVariant
OfferVariant
SampleId (New property of type text)AOM-1277 Seed testing using NBA data
PM Tool No
PM Tool KT Documentation No
Knowledge Transfer No
App Yes App development is dependant on the new
data flow and new data set
App team needs to update the extractor case
for truncating the new data set -
SeedTestLiveData and the restart scenario
for data flow -
ProcessBestOBTreatmentsAsTarget
DB No  Area Yes/No Comments
PM Tool No
App Yes New function to get SampleId and default
return value when SampleId is not available
E2E test of Extractor case is required after
App changes are done
DB No  Area Yes/No Comments


963
pySubjectID

B. New strategy - PopulateSampleForSeedTestData (VFUK-AOMFW-SR)
Create a new strategy PopulateSampleForSeedTestData on on class VFUK-AOMFW-SR
Create a data import component and import Primary page (each treatment from data set - BestOBTreatmentsAsTarget)
Add a Set property component - GetSampleId
Set SampleId (New property of type text) by calling new function (to be provided by App team)
Add a filter component - Valid SampleId with expression SampleId != <default value to be provided by App team)
Connect to results

C. New data flow - PopulateSeedTestLiveData (VFUK-AOMFW-SR)
Create a new data flow PopulateSeedTestLiveData on class VFUK-AOMFW-SR
source is abstract (this DF will be called from existing DF ProcessBestOBTreatmentsAsTarget)
add strategy component to call strategy  - PopulateSampleForSeedTestData
set destination data set - SeedTestLiveData

D. Update data flow - ProcessBestOBTreatmentsAsTarget
Add new secondary destination and call data flow - PopulateSeedTestLiveData


964
NBA FW - Interaction History Write Consolidation - Batch Only
This story requires a business-artefacts ruleset version for changes in output properties strategies

Impact in Other areas

Dependencies

New Properties for IH Extension

Add to IH ViewAOM-2621 Log Parent Child relationship to Interaction History
PM Tool No
PM Tool KT Documentation No
Knowledge Transfer No
App Yes IH Extension & Class Update
DB Yes IH ExtensionArea Yes/No Comments
PM Tool No
App Yes E2E Testing can only be done after App
changes
DB Yes App Changes can only be done after DB
chaNGESArea Yes/No Comments
ParentChild Data-Decision-IH-Fact Text varchar(50)
ParentOfferName Data-Decision-IH-Fact Text varchar(255)
ExecutionMode Data-Decision-IH-Fact Text varchar(255)
Mandatory Data-Decision-IH-Fact Text varchar(10)Property Name IH Class Data Type (Class) Data Type & Length (DB)
Column Name in IH Column Name in View


965
Add to IH Extract

All AIM IH Properties (OOTB & Extensions) are listed in the gogglesheet below -
https://docs.google.com/spreadsheets/d/1cbPY5wuhZFNG9OomNZZU8-oYT4m5MA2K/edit#gid=213141107 -

Design Approach
A. New Strategy - SetDefaultValuesToIHProperties
A1. Create Set Property Component - Default Values for IHParentChild ParentChild
ParentOfferName ParentOfferName
ExecutionMode ExecutionMode
Mandatory Mandatory
DiallingCompletedFlg DiallingCompletedFlg
CallCentreOutcome CallCentreOutcome
pxRank Rank
pxPriority Priority
ParentChild
ParentOfferName
ExecutionMode
Mandatory
pxRank
pxPriorityColumn Name in IH
Connect your Google acc
ount
InMarketingTest "N"
IHRId "1"
ChannelContentID "N/A"
IVRRoutingRecommendation "N/A"
ChannelConnectionID "N/A"
StoreId "N/A"
AgentUsername "N/A"
ProspectFlag "N"Property Name Default Value


966
ControlGroupLevel "Offer"
IntentScore 0
IntentRelevance 0
Intent "Default"
BusinessPurposeScore 0
Email address Customer.pyEmail1
ClickedURL "N/A"
ErrorRelation "N/A"
ActedInAgent "N/A"
SendIdentifier "N/A"
Comment "N/A"
Source "N/A"
Error "N/A"
CreateTs @getCurrentTimeStamp()
SubEventType "Default"
EventType "Default"
ProductRecommendationType "Default"
RampUpValue 0
RampUpFlag "N"
TILResponse "N/A"
AccountID Primary.CustomerAccount.AccountNumber
CallCentreOutcome "N/A"
CallCentrePhoneNo "N/A"
CallerType "N/A"
NTID "N/A"
ProductRecommendation "Default"
CellCode "Default"
ContactDetail Primary.ServiceNumber
ContactId Primary.CustomerAccount.ContactId
ServiceId Primary.ServiceNumber
pySubjectID Primary.CustomerID
pxOutcomeTime @getCurrentTimeStamp()


967

A2. Enable External Input
A3. Create Set Property Component - Set Default Values for IH If Not Populated and connect from External InputParentChild "Parent"
Mandatory "No"
InMarketingTest if InMarketingTest =  BLANK, then
DefaultValuesforIH.InMarketingTest, else InMarketingTest
IHRId if IHRId =  BLANK, then DefaultValuesforIH.IHRId, else IHRId
ChannelContentID if ChannelContentID =  BLANK, then
DefaultValuesforIH.ChannelContentID, else ChannelContentID
IVRRoutingRecommendation if IVRRoutingRecommendation =  BLANK, then
DefaultValuesforIH.IVRRoutingRecommendation, else
IVRRoutingRecommendation
ChannelConnectionID if ChannelConnectionID =  BLANK, then
DefaultValuesforIH.ChannelConnectionID, else
ChannelConnectionID
StoreId if StoreId =  BLANK, then DefaultValuesforIH.StoreId, else StoreId
AgentUsername if AgentUsername =  BLANK, then
DefaultValuesforIH.AgentUsername, else AgentUsername
ProspectFlag if ProspectFlag =  BLANK, then DefaultValuesforIH.ProspectFlag,
else ProspectFlag
ControlGroupLevel if ControlGroupLevel =  BLANK, then
DefaultValuesforIH.ControlGroupLevel, else ControlGroupLevel
IntentScore if IntentScore =  BLANK, then DefaultValuesforIH.IntentScore, else
IntentScore
IntentRelevance if IntentRelevance =  BLANK, then
DefaultValuesforIH.IntentRelevance, else IntentRelevance
Intent if Intent =  BLANK, then DefaultValuesforIH.Intent, else Intent
BusinessPurposeScore if BusinessPurposeScore =  BLANK, then
DefaultValuesforIH.BusinessPurposeScore, else
BusinessPurposeScore


DefaultValuesforIH.BusinessPurposeScore, else
BusinessPurposeScore
EmailAddress if EmailAddress =  BLANK, then DefaultValuesforIH.EmailAddress,
else Email address
ClickedURL if ClickedURL =  BLANK, then DefaultValuesforIH.ClickedURL, else
ClickedURL
ErrorRelation if ErrorRelation =  BLANK, then DefaultValuesforIH.ErrorRelation,
else ErrorRelation
ActedInAgent if ActedInAgent =  BLANK, then DefaultValuesforIH.ActedInAgent, Property Name Value


968
else ActedInAgent
SendIdentifier if SendIdentifier =  BLANK, then DefaultValuesforIH.SendIdentifier,
else SendIdentifier
Comment if Comment =  BLANK, then DefaultValuesforIH.Comment, else
Comment
Source if Comment =  BLANK, then DefaultValuesforIH.Comment, else
Comment
Error if Source =  BLANK, then DefaultValuesforIH.Source, else Source
CreateTs if CreateTs =  BLANK, then DefaultValuesforIH.CreateTs, else
CreateTs
SubEventType if SubEventType =  BLANK, then DefaultValuesforIH.SubEventType,
else SubEventType
EventType if EventType =  BLANK, then DefaultValuesforIH.EventType, else
EventType
ProductRecommendationType if ProductRecommendationType =  BLANK, then
DefaultValuesforIH.ProductRecommendationType, else
ProductRecommendationType
RampUpValue if RampUpValue =  BLANK, then DefaultValuesforIH.RampUpValue,
else RampUpValue
RampUpFlag if RampUpFlag =  BLANK, then DefaultValuesforIH.RampUpFlag,
else RampUpFlag
TILResponse if TILResponse =  BLANK, then DefaultValuesforIH.TILResponse,
else TILResponse
AccountID if AccountID =  BLANK, then DefaultValuesforIH.AccountID, else
AccountID
CallCentreOutcome if CallCentreOutcome =  BLANK, then
DefaultValuesforIH.CallCentreOutcome, else CallCentreOutcome
CallCentrePhoneNo if CallCentrePhoneNo =  BLANK, then
DefaultValuesforIH.CallCentrePhoneNo, else CallCentrePhoneNo
CallerType if CallerType =  BLANK, then DefaultValuesforIH.CallerType, else
CallerType


CallerType
NTID if NTID =  BLANK, then DefaultValuesforIH.NTID, else NTID
ProductRecommendation if ProductRecommendation =  BLANK, then
DefaultValuesforIH.ProductRecommendation, else
ProductRecommendation
CellCode if CellCode =  BLANK, then DefaultValuesforIH.CellCode, else
CellCode
ContactDetail if ContactDetail =  BLANK, then DefaultValuesforIH.ContactDetail,
else ContactDetail


969
A4. Connect to results

B. New strategy - SetCommonIHPropertiesForAllChannels
B1. Enable External Input
B2. Create Set Property Component - Set Common IH Properties and connect from External InputContactId if ContactId =  BLANK, then DefaultValuesforIH.ContactId, else
ContactId
ServiceId if ServiceId =  BLANK, then DefaultValuesforIH.ServiceId, else
ServiceId
pySubjectID if pySubjectID =  BLANK, then DefaultValuesforIH.pySubjectID, else
pySubjectID
pxOutcomeTime if pxOutcomeTime =  BLANK, then
DefaultValuesforIH.pxOutcomeTime, else pxOutcomeTime
ParentChild if ParentChild =  BLANK, then DefaultValuesforIH.ParentChild, else
ParentChild
ParentOfferName if ParentOfferName =  BLANK, then .OfferName, else
ParentOfferName
Mandatory if Mandatory =  BLANK, then DefaultValuesforIH.Mandatory, else
Mandatory
pyChannel Channel
StoreId Primary.Context(StoreIdentifier)
AgentUsername Primary.Context(AgentUserName)
ProspectFlag @if(@toUpperCase(Primary.Context(AccountStatus))="NEW","Y","N
")
IntentRelevance
@divide(.IntentRelevance,1,2,"half_up")
InAOMControlGroup
"N"
AOMSelectionType
"NBA"
AOMJourneyStep
""
AOMJourneyID
""
CreateTs @getCurrentTimeStamp()
SubEventType  Property Name Value


970
B3. Connect to results

C. New strategy - SetIHForEmail
C1. Enable External Input
C2. Create Set Property Component - Set IH Properties and connect from External Input
C3. Connect to results

D. New strategy - SetIHForSMS
D1. Enable External Input
D2. Create Set Property Component - Set IH Properties and connect from External InputPrimary.Context(SubEventType)
EventType
Primary.Context(EventType)
AccountID
Primary.CustomerAccount.AccountNumber
NTID
Primary.Context(NTID)
ProductRecommendation
ProductCode
ServiceId
Primary.ServiceNumber
pySubjectID
Primary.CustomerID
pyPropensity
Propensity
pxRank
Rank
pxPriority
Priority
pxOutcomeTime @getCurrentTimeStamp()
pyDirection “Outbound“
pyOutcome “Pending”
TargetSubChannel “Default“Property Name Value