1443
2nd Line Private Pricing - Offer Catalogue

Impact in Other areas
Dependencies
Logic Changes
Offer Catalogue
Impact in Other areas
Dependencies
Logic Changes
Update the proposition data, decision data and Proposition filters as per the offer catalogue

Offer Catalogue
 PM Tool No
PM Tool KT Documentation No
Knowledge Transfer No
App No
DB No  A r e a Y e s / N o C o m m e n t s
PM Tool No
App No
DB No  A r e a Y e s / N o C o m m e n t s
File Modified
 2.10VFUK - 2nd Line Private Pricing Offer Catalogue v0.1.xlsx Sep 07, 2021  by Kausik Pal
Drag and drop to upload or browse for files


1444
NBA FW - RCS and MMS Responses
Impact in Other areas
Dependencies
DB Changes: Create below columns in IH table and also extend it to IH View and IH Extractor File
App Changes:495764 Capture RCS and MMS Responses
App Yes
DB Yes
Knowledge Transfer Yes
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App Yes  E2E testing can be done once app work is done.
DB Yes  E2E testing can be done once columns are created in IH table.Area Yes/No Comments
MessageSequenceNumber varchar(255)
PostbackId varchar(255)
MessageText varchar(1000)
PostbackType varchar(255)
ActionType varchar(255)
ActionDetail varchar(255)Property Name Data Type
Data Transform Changes Map above properties in the data transform
“pyInteractionHistoryConfiguration“
Create new properties in Data-Decision-IH-Fact class All above 6 propertiesIH Class changes(VFUK-FW-AOMFW-Data-InteractionHistory) Map above properties in the external mapping tab


1445
Logic Changes:
Create below SR properties
 Create two new Strategies:
 Class: VFUK-FW-AOMFW-Data-Subscription
1. CaptureResponseForRCS
2. CaptureResponseForMMS
Update Strategy CaptureResponse:
Introduce the new path to feed RCS Response in the IH.
A. Join the set property component “SetTheChannel“ to the new filter.
Create the new filter “RCS Channel Check“. Add the condition in the filter as
@String.equalsIgnoreCase(.Channel,"RCS") && @String.equalsIgnoreCase(.EventType = "IMIResponse")
B. Connect the filter “RCS Channel Check“ to the new sub strategy “CaptureResponseForRCS“
C. Connect the sub strategy “CaptureResponseForRCS“ to the Error Message Null Check Error and Message Not Null Check Filters
Note: Connecting filter to Siebel logic(For Future specific). Currently RCS responses are not written to Siebel.
Introduce one more new path to feed MMS Response in the IH.
D. Join the set property component “SetTheChannel“ to the new filter.
Create the new filter “MMS Channel Check“. Add the condition in the filter as
@String.equalsIgnoreCase(.Channel,"MMS") && @String.equalsIgnoreCase(.EventType = "IMIResponse")
E. Connect the filter “RCS Channel Check“ to the new sub strategy “CaptureResponseForMMS“
F. Connect the sub strategy “CaptureResponseForMMS“ to the Error Message Null Check and Error Message Not Null Check Filters
Note: Connecting filter to Siebel logic(For Future specific). Currently MMS responses are not written to Siebel.
Create new Strategy: CaptureResponseForRCS
 In the CaptureResponseForRCS strategy,
Enable External Input.
 Connect the external input to the set property Set IH.


Enable External Input.
 Connect the external input to the set property Set IH.
In the set property set the below propertiesMessageSequenceNumber Text
PostbackId Text
MessageText Text
PostbackType Text
ActionType Text
ActionDetail TextProperty Name Data Type
Property Name Property Value


1446
.ValueText Primary.Context(SubEventType)
.pxOutcomeTime Primary.Context(EventTimestamp)
.ValueDecimal Primary.Context(pxInteractionId)
.pxInteractionID Primary.Context(pxInteractionId)
.pySubjectID Primary.CustomerID
.CreateTs @getCurrentTimeStamp()
.SendIdentifier Primary.Context(SendIdentifier)
.ActedInCountryCode Primary.Context(ActedInCountryCode)
ActedInAgent Primary.Context(ActedInAgent)
.ClickedURL Primary.Context(ClickedURL)
.Blocked @if(@toUpperCase(Primary.Context(Blocked))="TRUE","Y",@if(@toUpperCase(Pri
mary.Context(Blocked))="FALSE","N",""))
.HardBounce @if(@toUpperCase(Primary.Context(HardBounce))="TRUE","Y",@if(@toUpperCase
(Primary.Context(HardBounce))="FALSE","N",""))
.ErrorRelation Primary.Context(ErrorRelation)
.Error Primary.Context(Error)
.Comment Primary.Context(Comment)
.Source Primary.Context(Source)
.pyChannel Primary.Context(Channel)
.ServiceId Primary.ServiceNumber
.EventType Primary.Context(EventType)
.pyOutcome @If((@String.equalsIgnoreCase(.EventType,"Microsite")&&@String.equals(.Val
ueText,"Unsubscribe"))||
(@String.equalsIgnoreCase(.EventType,"Webhook")&&@String.equals(.ValueT
ext,"unsub")),"AOM_Unsubs",.ValueText)
.PropositionName Primary.Context(PropositionName)
.TargetSubChannel @if(Primary.Context(SubChannel)!="",Primary.Context(SubChannel),"Default")
.pyDirection @if((@String.equalsIgnoreCase(.pyChannel,"InboundCC")||@String.equalsIgno
reCase(.pyChannel,"App"),"Inbound","Outbound")
.MessageSequenceNumber Primary.Context(MessageSequenceNumber)
.PostbackId Primary.Context(PostbackId)
.MessageText Primary.Context(MessageText)
.PostbackType Primary.Context(.PostbackType)


.MessageText Primary.Context(MessageText)
.PostbackType Primary.Context(.PostbackType)
.ActionType Primary.Context(.ActionType)


1447

 Use the data import component and name it as IH. Import the page as Primary.InteractionHistoryList and in the properties map the
properties as per the below image.
 Import the decision data called “Standard Outcomes“. In this component select Define on as Strategy class radio and provide the
decision data as OutcomeMapping
 Connect the Data Import IH to the data join called “Get Standard Outcome“. In the data join , join with Standard outcomes and add the
condition .Channel = .Channel and .pyOutcome = .Outcome and in the properties mapping tab map .StandardOutcome =
.StandardOutcome
      Note: Uncheck Exclude source component results that do not match join condition.
 Join the data join called “Get Standard Outcome“ to the set property called “Standard Outcome check“
      and in the set property , set .StandardOutcome = @if(.StandardOutcome="","Other",.StandardOutcome)
Connect the set property “Standard Outcome check“ to filter named “IH with outcome“. In this filter check .StandardOutcome="Selected"
 Connect the filter “IH with outcome“ to the other filter, ”Match the PropositionName from Context”
      Add the condition in this filter as SetIH.PropositionName=.TreatmentName
 Join the filter ”Match the PropositionName from Context” to the group by component,”Latest Interaction” do group by on .InteractionId
and by .pxOutcomeTime as below.
 Join the set property “Set IH“ to the data join named as “Set IH properties“.
join this with LatestInteraction group by component. In the data join add the condition check as
.ValueDecimal = .InteractionId and in the properties mapping tab map properties as per below image..ActionDetail Primary.Context(.ActionDetail)


1449
 Connect this data join “Set IH properties“ to the existing sub strategy SetDefaultValuesToIHProperties
 Connect this sub strategy “SetDefaultValuesToIHProperties“ to the two filters.
1. Name the first filter as “Match Found“ and add the condition as .AdhocText1!="" and connect this filter directly to the result component.
2. Second filter as “Match Not Found“ and add the condition as .AdhocText1="" and connect this filter to set property named “Set Error
Message“ and set the .ErrorMessage = "Unable to find InteractionID : "+.ValueDecimal+" in the Interaction History." and connect it to the
result component.
Create new Strategy: CaptureResponseForMMS
 In the CaptureResponseForMMS strategy,
Enable External Input.
 Connect the external input to the set property Set IH.
In the set property set the below properties
.ValueText Primary.Context(SubEventType)
.pxOutcomeTime Primary.Context(EventTimestamp)
.ValueDecimal Primary.Context(pxInteractionId)
.pxInteractionID Primary.Context(pxInteractionId)
.pySubjectID Primary.CustomerIDProperty Name Property Value


1450

 Use the data import component and name it as IH. Import the page as Primary.InteractionHistoryList and in the properties map the
properties as per the below image..CreateTs @getCurrentTimeStamp()
.SendIdentifier Primary.Context(SendIdentifier)
.ActedInCountryCode Primary.Context(ActedInCountryCode)
ActedInAgent Primary.Context(ActedInAgent)
.ClickedURL Primary.Context(ClickedURL)
.Blocked @if(@toUpperCase(Primary.Context(Blocked))="TRUE","Y",@if(@toUpperCase(Pri
mary.Context(Blocked))="FALSE","N",""))
.HardBounce @if(@toUpperCase(Primary.Context(HardBounce))="TRUE","Y",@if(@toUpperCase
(Primary.Context(HardBounce))="FALSE","N",""))
.ErrorRelation Primary.Context(ErrorRelation)
.Error Primary.Context(Error)
.Comment Primary.Context(Comment)
.Source Primary.Context(Source)
.pyChannel Primary.Context(Channel)
.ServiceId Primary.ServiceNumber
.EventType Primary.Context(EventType)
.pyOutcome @If((@String.equalsIgnoreCase(.EventType,"Microsite")&&@String.equals(.Val
ueText,"Unsubscribe"))||
(@String.equalsIgnoreCase(.EventType,"Webhook")&&@String.equals(.ValueT
ext,"unsub")),"AOM_Unsubs",.ValueText)
.PropositionName Primary.Context(PropositionName)
.TargetSubChannel @if(Primary.Context(SubChannel)!="",Primary.Context(SubChannel),"Default")
.pyDirection @if((@String.equalsIgnoreCase(.pyChannel,"InboundCC")||@String.equalsIgno
reCase(.pyChannel,"App"),"Inbound","Outbound")
.MessageId Primary.Context(MessageSequenceNumber)
.PostbackId Primary.Context(PostbackId)
.MessageText Primary.Context(MessageText)(TBC)
.PostbackType Primary.Context(.PostbackType)
.ActionType Primary.Context(.ActionType)


.PostbackType Primary.Context(.PostbackType)
.ActionType Primary.Context(.ActionType)
.ActionDetail Primary.Context(.ActionDetail)


1451
 Import the decision data called “Standard Outcomes“. In this component select Define on as Strategy class radio and provide the
decision data as OutcomeMapping
 Connect the Data Import IH to the data join called “Get Standard Outcome“. In the data join , join with Standard outcomes and add the
condition .Channel = .Channel and .pyOutcome = .Outcome and in the properties mapping tab map .StandardOutcome =
.StandardOutcome
      Note: Uncheck Exclude source component results that do not match join condition.
 Join the data join called “Get Standard Outcome“ to the set property called “Standard Outcome check“
      and in the set property , set .StandardOutcome = @if(.StandardOutcome="","Other",.StandardOutcome)
Connect the set property “Standard Outcome check“ to filter named “IH with outcome“. In this filter check .StandardOutcome="Selected"
 Connect the filter “IH with outcome“ to the other filter, ”Match the PropositionName from Context”
      Add the condition in this filter as SetIH.PropositionName=.TreatmentName
 Join the filter ”Match the PropositionName from Context” to the group by component,”Latest Interaction” do group by on .InteractionId
and by .pxOutcomeTime as below.
 Join the set property “Set IH“ to the data join named as “Set IH properties“.
join this with LatestInteraction group by component. In the data join add the condition check as
.ValueDecimal = .InteractionId and in the properties mapping tab map properties as per below image.


1453
 Connect this data join “Set IH properties“ to the existing sub strategy SetDefaultValuesToIHProperties
 Connect this sub strategy “SetDefaultValuesToIHProperties“ to the two filters.
1. Name the first filter as “Match Found“ and add the condition as .AdhocText1!="" and connect this filter directly to the result component.
2. Second filter as “Match Not Found“ and add the condition as .AdhocText1="" and connect this filter to set property named “Set Error
Message“ and set the .ErrorMessage = "Unable to find InteractionID : "+.ValueDecimal+" in the Interaction History." and connect it to the
result component.


1454
NBA FW - Introduce a Fallow Period for Offer Expiry Date
Impact in Other areas
Dependencies
App Changes: New Properties for PegaMKT-Data-Event class
New parameter for TriggerPMEvent activity and relevant changes to populate EventPayload page
PM Changes:
Logic Changes:
Update Strategy: ApplyEventPayloadToTreatments513525 Introduce a fallow period for Offer Expiry Date
App Yes
DB No
Knowledge Transfer Yes
PM Tool Yes
PM Tool KT Documentation Yes  Area Yes/No Comments
PM Tool Yes
App Yes
DB No  Area Yes/No Comments
OfferExpiry TextProperty Name Data Type
OfferExpiry TextProperty Name Data Type
FallowPeriodForOfferExpiry Text
FallowPeriodForOfferExpiryInterval TextProperty Name Data Type


1455
In the data join, "Treatments With All Properties" , map .OfferExpiry=.OfferExpiry
Update Dataflow: GetBestTreatmentsByGetNBA
Update parameter .OfferExpiry = .OfferExpiry in the activity Trigger PM Event.
Update Dataflow: ProcessSMSForT2S
Update parameter .OfferExpiry = .OfferExpiry in the activity Trigger PM Event.
Logic Changes:
Create SR Properties FallowPeriodForOfferExpiry, FallowPeriodForOfferExpiryInterval
Add FallowPeriodForOfferExpiry, FallowPeriodForOfferExpiryInterval in the form tab of all the Offers Decision Data.
Update Strategy: GetIHAtCustomerLevel
Add new path in the GetIHAtCustomerLevel Strategy like below image.
Join the set property "StandardOutcome check" to the new set property "Save OutcomeDate for Responses" and in the new set
property set .ValueText = .OutcomeDate
Connect the new set property to the new group by component named "Get Latest Selection By Treatment" and fetch the latest
.TreatmentName

Join this group by component to the new set property, and name this set property as "Reset OutcomeDate By Latest Communication". In
this set property , set .OutcomeDate = .ValueText
Join this set property to the new empty set property called "Latest Selection By TreatmentName for Customer" and it the result
component.
Update Strategy: SetExpiryPeriod
Join the external input to two new filters. For the first new filter, "Relevant Offer Records" add the condition as
@String.equalsIgnoreCase(.OfferRelevancy,"Relevant") and join this new filter to the existing Data Join called Latest Offer Expiry


1456
Join the external input to the second filter, "Irrelevant Offer Records" and write the condition in filter as
@String.notEqualsIgnoreCase((.OfferRelevancy,"Relevant") and connect this filter directly to the result component.
Update the sub strategy, GetIHAtCustomerLevel to refer the component as "Latest Selection By TreatmentName for Customer" in the
drop down. And in the data join “Latest Offer Expiry“, join with sub strategy GetIHAtCustomerLevel with condition .pyName=.OfferName
and in the properties mapping, map .ExpiryPeriod = .OfferExpiry.
Connect the data join "Latest Offer Expiry" to the set property and name it as "Set FallowPeriodForOfferExpiry". In the set property set
.FallowPeriodForOfferExpiry =
@if(.FallowPeriodForOfferExpiry="","",@if(.ExpiryPeriod="","",@if(.FallowPeriodForOfferExpiryInterval="Years",@DateTime.addCalenda
r(.ExpiryPeriod,.FallowPeriodForOfferExpiry,"","","","","","")+"",@if(.FallowPeriodForOfferExpiryInterval="Months",@DateTime.addCalend
ar(.ExpiryPeriod,"",.FallowPeriodForOfferExpiry,"","","","","")+"",@if(.FallowPeriodForOfferExpiryInterval="Days",@DateTime.addCalenda
r(.ExpiryPeriod,"","","",.FallowPeriodForOfferExpiry,"","","")+"",.FallowPeriodForOfferExpiry+"")))))
Connect the new set property to the new filter. Name the new filter as "Apply Contention only for Expired Offer"
In the Filter , add the below conditions compulsory


In the Filter , add the below conditions compulsory
1. If (.ExpiryPeriod!="") && (.FallowPeriodForOfferExpiry=-1) && (CalculateNumberOfDaysFromToday(.ExpiryPeriod)>=1) is satisfied then
drop the Offer(Return false)
2. Else if  (.ExpiryPeriod!="") && (.FallowPeriodForOfferExpiry!=-1) && (CalculateNumberOfDaysFromToday(.ExpiryPeriod)>=1) &&
CalculateNumberOfDaysFromToday(.FallowPeriodForOfferExpiry)<=0 is satisfied then also drop the Offer(Return false)
3. else return True
Join the filter "Apply Contention only for Expired Offer" to the existing set property "Offer Expiry Check" which is connected to the result
component.


1457
Extras Landing Page - Capture URL Click Response

Impact in Other areas
Dependencies
Logic Changes:
Sample Request Body Examples:
When Initially Sent SMS link(Which redirects to Microsite) through SMS Channel:
SMS CLICK:
"{
"InteractionId": "-119585767102077807",
"CustomerId": "1-HLZKOO39",
"Channel": "SMS",
"SubChannel": "",
"OfferName": "AddTablet",
"OfferVariant": "OfferVariantDefault",
"TreatmentName": "AddTablet_SMS",
"TreatmentVariant": "AdCons",
"Outcome": "", //App Team sets the Outcome
"ClickedURL":""
}"
Update Strategy: CaptureResponse
Introduce the new path to feed Clicked Response in the IH.447595 Capture URL Click Response
App Yes
DB Yes
Knowledge Transfer Yes
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App Yes  E2E testing can be done once app work is done.
DB No  Area Yes/No Comments


1458
A. Join the set property component “SetTheChannel“ to the new filter.
Create the new filter “SMS Channel check“. Add the condition in the filter as
@String.equalsIgnoreCase(.Channel,"SMS") && .EventType != "SetNBAResponse"
B. Connect the filter “SMS Channel check“ to the new sub strategy “CaptureResponseForSMS“
C. Connect the sub strategy “CaptureResponseForSMS“ to the Error Message Null Check and Message Not Null Check Filters
Note: Connecting filter to Siebel logic(For Future specific). Currently SMS responses are not written to Siebel.
Create new Strategy: CaptureResponseForSMS
D. In the CaptureResponseForSMS strategy,
Enable External Input.
D1. Connect the external input to the set property Set IH.
In the set property set the below properties
.ValueText Primary.Context(SubEventType)
.pxOutcomeTime Primary.Context(EventTimestamp)
.ValueDecimal Primary.Context(pxInteractionId)
.pxInteractionID Primary.Context(pxInteractionId)
.pySubjectID Primary.CustomerID
.CreateTs @getCurrentTimeStamp()
.SendIdentifier Primary.Context(SendIdentifier)
.ActedInCountryCode Primary.Context(ActedInCountryCode)
ActedInAgent Primary.Context(ActedInAgent)
.ClickedURL Primary.Context(ClickedURL)
.Blocked @if(@toUpperCase(Primary.Context(Blocked))="TRUE","Y",@if(@toUpperCase(Pri
mary.Context(Blocked))="FALSE","N",""))
.HardBounce @if(@toUpperCase(Primary.Context(HardBounce))="TRUE","Y",@if(@toUpperCase
(Primary.Context(HardBounce))="FALSE","N",""))
.ErrorRelation Primary.Context(ErrorRelation)
.Error Primary.Context(Error)
.Comment Primary.Context(Comment)
.Source Primary.Context(Source)
.pyChannel Primary.Context(Channel)
.ServiceId Primary.ServiceNumber


.Source Primary.Context(Source)
.pyChannel Primary.Context(Channel)
.ServiceId Primary.ServiceNumber
.EventType Primary.Context(EventType)Property Name Property Value


1459
E. Use the data import component and name it as IH. Import the page as Primary.InteractionHistoryList and in the properties map the
properties as per the below image.
F. Import the decision data called “Standard Outcomes“. In this component select Define on as Strategy class radio and provide the
decision data as OutcomeMapping
G. Connect the Data Import IH to the data join called “Get Standard Outcome“. In the data join , join with Standard outcomes and add the
condition .Channel = .Channel and .pyOutcome = .Outcome and in the properties mapping tab map .StandardOutcome =
.StandardOutcome
Note: Uncheck Exclude source component results that do not match join condition.
H. Join the data join called “Get Standard Outcome“ to the set property called “Standard Outcome check“
and in the set property , set .StandardOutcome = @if(.StandardOutcome="","Other",.StandardOutcome)
I. Connect the set property “Standard Outcome check“ to filter named “IH with outcome“. In this filter check .StandardOutcome="Selected"
J. Connect the filter “IH with outcome“ to the other filter,”Match the PropositionName from Context”
Add the condition in this filter as SetIH.PropositionName=.TreatmentName
K. Join the filter ”Match the PropositionName from Context” to the group by component,”Latest Interaction”
do group by on .InteractionId and by .pxOutcomeTime as below..pyOutcome @If((@String.equalsIgnoreCase(.EventType,"Microsite")&&@String.equals(.Val
ueText,"Unsubscribe"))||
(@String.equalsIgnoreCase(.EventType,"Webhook")&&@String.equals(.ValueT
ext,"unsub")),"AOM_Unsubs",.ValueText)
.PropositionName Primary.Context(PropositionName)
.TargetSubChannel @if(Primary.Context(SubChannel)!="",Primary.Context(SubChannel),"Default")


.TargetSubChannel @if(Primary.Context(SubChannel)!="",Primary.Context(SubChannel),"Default")
.pyDirection @if((@String.equalsIgnoreCase(.pyChannel,"InboundCC")||@String.equalsIgno
reCase(.pyChannel,"App"),"Inbound","Outbound")


1460
L. Join the set property “Set IH“ to the data join named as “Set IH properties“.
join this with LatestInteraction group by component. In the data join add the condition check as
.ValueDecimal = .InteractionId and in the properties mapping tab map properties as per below image.


1461
M. Connect this data join “Set IH properties“ to the existing sub strategy SetDefaultValuesToIHProperties
N. Connect this sub strategy “SetDefaultValuesToIHProperties“ to the two filters.
1. Name the first filter as “Match Found“ and add the condition as .AdhocText1!="" and connect this filter directly to the result component.
2. Second filter as “Match Not Found“ and add the condition as .AdhocText1="" and connect this filter to set property named “Set Error
Message“ and set the .ErrorMessage = "Unable to find InteractionID : "+.ValueDecimal+" in the Interaction History." and connect it to the
result component.


1463
Assisted Upgrade - Optimise Data page loads for Assisted Upgrades logic
HL Requirement:
 To optimise the recommendation response times, we identified few logic changes
regarding Data page Usage in Decisioning logic.
Impacted Areas
Earlier, we are calling data page for single property call, now we planned to import Each data page
at single place to load the data.
And use its reference wherever properties are being called in old logic.
Impacted Strategies are listed below.523284 Optimise Data page loads for Assisted Upgrades logic

App Yes Data page Changes
Logic yes update the impacted Strategies – Data page
changes
PM Tool No
UI Yes  Area Yes/No Area
GetCurrentTariff CalculateTariffDiscount
GetListOfValidTariffsFromBDCModel GetActiveDiscountList
GetProductDetailAndEvaluateCompatibility GetInActiveDiscountList
EvaluateCommercialRecforEligiblePathways GetProductDetailAndEvaluateCompatibility

D_AccountService
GetAddonList
GetProductDetailAndEvaluateCompatibility  D_Tariff D_Discount


1464

D_PaymHandset
EvaluateHandsetCompatibility
GetHandsetLoanDetails


1465
Assisted Upgrade - Customer Profile- UI
HL Requirement:
 Business wants to Identify Regulatory Offers based on Customer Attributes So that Agent can know whether it is normal or
Regulatory offer in the edit deal, on the selection of the Tariff tab
Impacted Areas
Update Strategy - PopulateOutputPropertiesForTariff
Set related PromotionDetail=Regulatory attribute according flexi attribute on
customer (if regulator offer is active & tariff is available in flexi attributes of
customer )
Under Tariff properties component.
Set StartDate=Offer Start Date flexi field (Attribute name AOM_CUSTOM_CHAR_210)
Set EndDate= Offer End Date flexi field (Attribute name AOM_CUSTOM_CHAR_211)
Set IsValid =  if today is inbetween offer start date and end date.
Set PromotionDetail = Regulatory only if (Date is valid) &&((ProductCode is available in any of this Customer Flexi Attributes.

Possible logic condition will be like
If IsValid= True &&  ProductCode = AOM_CUSTOM_CHAR_212) OR
(ProductCode = AOM_CUSTOM_CHAR_213) OR
(ProductCode = AOM_CUSTOM_CHAR_214) OR
(ProductCode = AOM_CUSTOM_CHAR_215)) then “Regulatory” else empty
 374642 Edit deal-Display Regulatory Offers for Customer on Tariff tab
App No
Logic yes update to existing flow
PMTool No
UI Yes  Area Yes/No Area


1466
UI requirement:
If Agent hover over the regulatory Tariff, then display a message 'This is a regulatory offer that the customer has been offered by
outbound SMS”

Only 1 regulatory Tariff can be selected at one time

Selecting any one of the 4 Tariffs will automatically display the Tariff in the selected deal


1467
Release 2.11


1468
Assisted Upgrade-Handling No Recommendation
Impact in Other areas
HL Requirements
GetRecommendation may not return recommendation records because of  different reasons.
User should be informed for the reason.

Update Strategy CalculateUpgradeDeal
Sdiff E M fN ddl/N ddlfib k lil483714 Get Recommendation fails when using the 'Refine By'483708 Get Recommendation fails when launching VADR
PM Tool No
PM Tool KT Documentation No
Knowledge Transfer No
DB No
App Yes Change to activity on handle error handlingA r e a Y e s / N o C o m m e n t s
Treatment not
getting ellgibile
before Upgrade
dealNot available NA App ? 520 Show error
message & block
flow
No upgrade deal Available Yes No message  set 206 No offer is show,
3 place holder for
BYO
No upgrade deal
refine by - no stock
avalialeAvaliable Yes Logic Out of stock 206 Show error
message on top
No offer is show
3 place holder for
BYOScenario SR Record NoRecommendat
ion Flag Error Message
set by Error
Message  Error Code set
by Activity Action On VADR


1469
Set different ErrorMessages for No upgrade deal/No upgrade deal refine by - no stock avaliale
No upgrade deal refine by - no stock available   case > IdentifyLogicRecommendation.ErrorMessage <>””    set ErrorMssage = TBC
No upgrade deal refine by case >  set ErrorMssage = TBC
Update Strategy IdentifyBestInboundCCTreatmentsForSubscription
Remove Switch & error message components.

Update DF IdentifyBestIBCCTreatments
Primary Path > remove .NoRecommendation!="Yes" condition. Logic will return NoRecommendation records. with related display
message.


1470
Assisted Upgrades -Change to Promotions

HL Requirement
With the existing design on Logic , Promo flag identification  for Tariff , Discount & Addons are done according to PromotionIndicator
flag.
PromotionIndicator supposed to be populated from Sibel.
Now design is changing to use promotion start date & promotion end date instead of flag in each level.

Change to AOM Config
Update D_EligibleTariffs, D_Tariff,D_ServicesForTariff,D_DiscountsForTariff
Remove Promo Indicator
As Promo start date & Promo end date Promo 534166 AOM -Update the way we identify a promo in
the Pick & Mix logic
Promo 534175 AOM -Changing the way the promo discount
is identified when adding a promo tariff to the
selected deal
Promo 534172 AOM -Update the way a promo discount is
identified when changing a promo discount in
the Edit Screen
Promo 534177 AOM -Changing the way a promo discount is
identified for reporting Promo 534140 AOM - Understand if the recommended tariff
is part of a promotion
PM Tool Yes  Any screen does promotion control should change their condition. (Cohort screen is
one of the Screen use it)
PM Tool KT Documentation No
Knowledge Transfer No
DB No
App Yes Change to data pages
D_EligibleTariffs, D_Tariff >Remove PromotionIndicator attribute
D_ServicesForTariff,D_DiscountsForTariff >Remove PromotionIndicator attribute add
promotion_start_dt & promotion_end_dtArea Yes/No Comments


1471
Change To Recommendation Flow
Update Strategy GetListofActiveTariffs
Clean up old logic to set PromotionInd & RecommendedTariffHasPromotion
Set PromotionInd =”Y” if today >=promotion start dt & today <=promotion end dt
Set RecommendedTariffHasPromotion   true PromotionInd=Y else false
Update Strategy
IdentifyPromotinalDiscounts,GetPromotionalDiscountsListDetails,IdentifyPromotinalAddons,GetPromotionalAdd
onsListDetails
Update “Identify Auto Added" component >  Change condition to  use date not indicator

Change to Get Product List Flow
Update Strategy GetAddOnListForEditDeal,GetDiscountList
Set PromotionInd =Y if today >=promotion_start_dt & today <=promotion_end_dt


1472
NBA FW - Test Cell Allocation Scenarios
1 Test Group (TG1) is
defined, enabled
and eligible
Offer is NOT
mapped to Test
GroupOffer - No
mapping to
test groupTG1 -
Enabled, 3
splits, 30
days Expiry
TG11,
TG12,
TG13N/A No No Customer
is not in
test & learn
for OfferOffer is not
using test
& learnNo Test Cell
2 Test Group (TG1) is
defined, enabled
and eligible
Offer is mapped to
Test Group
First ExecutionOffer - TG1TG1 -
Enabled, 3
splits, 30
days Expiry
TG11,
TG12,
TG13No IH for
the OfferNo Yes Customer
has
entered
new test &
learn
period for
Offer until
expiryOffer is
using test
& learn
using TG1
until expiryTG11/
TG12/
TG13
3 Test Group (TG1) is
defined, enabled
and eligible
Offer is mapped to
Test Group
Test Group has not
expired
nth ExecutionOffer - TG1TG1 -
Enabled, 3
splits, 30
days Expiry
TG11,
TG12,
TG13IH -
Customer
entered
test cell
TG11 for
Offer  10
days agoYes No Customer
is still in
test & learn
period for
Offer until
expiryOffer is
using test
& learn
using TG1


Offer until
expiryOffer is
using test
& learn
using TG1
until expiryTG11
4 Test Group (TG1) is
defined, enabled
and eligible
Offer is mapped to
Test Group
Test Group has
expired
nth ExecutionOffer - TG1TG1 -
Enabled, 3
splits, 30
days Expiry
TG11,
TG12,
TG13IH -
Customer
entered
test cell
TG11 for
Offer  31
days agoNo Yes Customer
has
entered
new test &
learn
period  the
same test
group for
Offer  the
until new
expiryOffer is
using test
& learn
again using
TG1 until
expiry TG11/
TG12/
TG13
5 Test Group (TG1) is
defined and
disabled or
ineligbleOffer - TG1TG1 -
Disabled, 3
splits, 30
days ExpiryN/A No No Customer
is not in
test & learn
for OfferOffer is
using test
& learn but
Test Group
is retiredNo Test CellS# Scenario
DescriptionOffer
SetupTest
Group
SetupIH Setup Allocate
Cell - IHAllocate
Cell - NewExpectati
onExplanati
on Test Cell
Allocation


1473
 Offer is mapped to
Test Group
Any ExecutionTG11,
TG12,
TG13
6 Test Group (TG1 &
TG2) is defined,
enabled and eligible
Offer is mapped to
new Test Group
(TG2); it was
previously mapped
to TG1
nth ExecutionOffer - TG2TG1 -
Enabled, 3
splits, 30
days Expiry
TG11,
TG12,
TG13
TG2 -
Enabled, 2
splits, 30
days Expiry
TG21,
TG22IH -
Customer
entered
test cell
TG11 for
Offer  10
days ago
(previous
execution)No Yes Customer
has
entered
new test &
learn
period
(new test
group) for
Offer until
expiry Offer is
using new
test & learn
using TG2
until expiry;
the
previous
test & learn
in ignoredTG21/
TG22
7 Test Group (TG1) is
re-defined (Test Cell
Removed), enabled
and eligible
Offer is mapped to
Test Group
Test Group has not
expired
nth ExecutionOffer - TG1TG1 -
Enabled, 3
2 splits
(updated),
30 days
Expiry
TG11,
TG12,
TG13
(removed)IH -
Customer
entered
test cell
TG13 for
Offer  10
days agoNo No Customer
is not in
test & learn
for OfferOffer is


days agoNo No Customer
is not in
test & learn
for OfferOffer is
using
updated
test & learn
using TG1
but
previously
allocated
Test Cell
TG13 does
not exist
and hence
the
customer is
no longer
in test &
learnNo Test Cell
8 Test Group (TG1) is
re-defined (Test Cell
added) , enabled
and eligible
Offer is mapped to
Test Group
Test Group has not
expired
nth ExecutionOffer - TG1TG1 -
Enabled, 3
4 splits
(updated),
30 days
Expiry
TG11,
TG12,
TG13,
TG14
(added)IH -
Customer
entered
test cell
TG13 for
Offer  10
days agoYes No Customer
is still in
test & learn
period for
Offer until
expiryOffer is
using test
& learn
using TG1
until expiryTG13


1474
NBA FW - Scenario Based Templating & Microsite Templating
Impact in Other areas
Dependencies
High level design for PM tool (as received from Russ)
High Level Requirements
I. Decision Data (FW) Changes
A. New SR Property
B. Update Proposition Decision Data - T2TV Attributes
C. Update Proposition Decision Data - T2TV Actions
II. Logic Changes for IVR Channel (GetNBA)
A. Update  T2TV Attributes for Retain Squad
B. Update  T2TV Actions for Retain Squad
C. Update  T2TV Attributes for Upsell Squad
D. Update  T2TV Actions for Upsell Squad
E. Update  T2TV Attributes for Service Squad
F. Update  T2TV Actions for Service Squad
G. Update Strategy - PopulateOutputPropertiesForGetNBA
G. Update Strategy - IdentifyT2TV ariationActions
III. Logic Changes for 2nd Line Pricing (GetNBA)
IV. Logic Changes for InboundCC Channel (V ADR)
A. Update  T2TV Attributes for Renew Squad
B. Update strategy - PopulateOutputPropertiesForNBAA
V. Logic Changes for LandingPages (Microsite)
A. Update  T2TV Attributes for CrossSell Squad
B. Update  T2TV Actions for CrossSell Squad
C. New strategy - ContextualPropositionsLookup
D. New strategy - SetMicrositeT okens
D. New Strategy - GetInactiveMicrositeT reatment
E. New Strategy - GetExpiredMicrositeT reatment
F. New Strategy - GetIneligibleMicrositeT reatment
G. Update Strategy - IdentifyBestMicrositeT reatments
VI. Get Next Templates And Relevant Actions


G. Update Strategy - IdentifyBestMicrositeT reatments
VI. Get Next Templates And Relevant Actions
Impact in Other areas5 4 6 4 9 5 Scenario Based Templating
App Yes  IH Extension
DB Yes  IH Extension
Knowledge Transfer Yes
PM Tool Yes  Changes to template management
PM Tool KT Documentation Yes  Area Yes/No Comments


1475
Dependencies

High level design for PM tool (as received from Russ)
https://vodafone.sharepoint.com/sites/AoMProgramme/_layouts/15/Doc.aspx?sourcedoc=%7B437d28d5-c1b5-4cf9-968b-d4128671017
3%7D&action=edit&wd=target%28NBA.one%7Ca745a153-ea3f-4b6e-8f16-9163bfe64932%2FScenario%20Based%20Templating%20%2
0Microsite%20Templating%7Cf2db6c79-0c26-4bc3-b079-fbba4617470c%2F%29 -

High Level Requirements
Templates will include a new dimension called “Scenario” in addition to “TreatmentVariation” and “SubChannel”
Use of Templates will remain optional
If a TreatmentVariation does not use SubChannel functionality, “Default” SubChannel will be used
The main template returned by decisioning funnel will be configured as “Default” scenario
Additional “alternate” scenarios will be configured to manage different templates by scenarios - such as  Inactive, Expired, Ineligible,
OrderConfirmed, OrderFailed etc.
Use of “alternate” scenarios will be bespoke to channel and as per use cases
“Scenario” used will be written to IH
“Actions” will be updated to be based on Templates
Certain Actions will be linked to next “Scenario”/”Template” and will be sourced by a new  call to decisioning passing in the context
(design - TBC)
The above changes will be applied for existing IVR template management (GetNBA), 2nd Line Pricing (GetNBA), Assisted Upgrade and


new LandingPages functionality but will be available to any modes that use Template functionality

I. Decision Data (FW) Changes
A. New SR Property
Create a new SR property - Scenario (text)
Please note that IH should be extended to use this new SR property
B. Update Proposition Decision Data - T2TVAttributes
Proposition Decision Data - T2TVAttributes should be updated to include new  SR property - Scenario
Please note that  -
This Proposition Decision Data should be update for all squads -PM Tool Yes  PM tool mapping to updated decision data for e2e testing after PM push
App Yes  IH Extension is needed to be done for dev-testing
DB Yes   IH Extension is needed to be done for dev-testingArea Yes/No Comments
Connect your OneDrive account


1476
PM tool should make relevant changes to -
Use new SR property - Scenario while generating the unique pyName in addition to existing dimensions - AssociatedOffer,
OfferVariant, TreatmentName, TreatmentVariant, TargetSubChannel
In case on no SubChannel selected, set SubChannel as “Default”
Include the new SR property - Scenario while pushing to the updated decision data

C. Update Proposition Decision Data - T2TVActions
Proposition Decision Data - T2TVActions should be updated to include new  SR properties - Scenario and TargetSubChannel
Please note that  -
This Proposition Decision Data should be update for all squads -Upsell VFUK-AOMFW-SR-Upsell-T2TVAttributes T2TVAttributes
Service VFUK-AOMFW-SR-Service-T2TVAttributes T2TVAttributes
Retain VFUK-AOMFW-SR-Retain-T2TVAttributes T2TVAttributes
Renew VFUK-AOMFW-SR-Renew-T2TVAttributes T2TVAttributes
CrossSell VFUK-AOMFW-SR-CrossSell-
T2TVAttributesT2TVAttributes
HBB VFUK-AOMFW-SR-HBB-T2TVAttributes T2TVAttributes
Loyalty VFUK-AOMFW-SR-Loyalty-T2TVAttributes T2TVAttributes
Engagement VFUK-AOMFW-SR-Engagement-
T2TVAttributesT2TVAttributes
TradeIn VFUK-AOMFW-SR-TradeIn-T2TVAttributes T2TVAttributes
Retention VFUK-AOMFW-SR-Retention-
T2TVAttributesT2TVAttributes
Care VFUK-AOMFW-SR-Care-T2TVAttributes T2TVAttributesSquad Class Decision Data
Upsell VFUK-AOMFW-SR-Upsell-T2TVActions T2TVActions


Upsell VFUK-AOMFW-SR-Upsell-T2TVActions T2TVActions
Retain VFUK-AOMFW-SR-Retain-T2TVActions T2TVActions
Service VFUK-AOMFW-SR-Service-T2TVActions T2TVActions
Loyalty VFUK-AOMFW-SR-Loyalty-T2TVActions T2TVActions
HBB VFUK-AOMFW-SR-HBB-T2TVActions T2TVActions
Engagement VFUK-AOMFW-SR-Engagement-
T2TVActionsT2TVActions
TradeIn VFUK-AOMFW-SR-TradeIn-T2TVActions T2TVActions
Retention VFUK-AOMFW-SR-Retention-T2TVActions T2TVActionsSquad Class Decision Data


1477
PM tool should make relevant changes to -
Use new SR properties - Scenario & TargetSubChannel while generating the unique pyName in addition to existing dimensions -
AssociatedOffer, OfferVariant, TreatmentName, TreatmentVariant,Outcome
In case on no SubChannel selected, set SubChannel as “Default”
Include the new SR properties - Scenario & TargetSubChannel while pushing to the updated decision data

II. Logic Changes for IVR Channel (GetNBA)
A. Update  T2TVAttributes for Retain Squad
From PM tool, all entries for T2TVAttributes decision data for Retain Squad should be updated as -
Scenario = “Default”
This change should be done using CSV upload until the PM changes are available.
B. Update  T2TVActions for Retain Squad
From PM tool, all entries for T2TVActions decision data for Retain Squad should be updated as -
Scenario = “Default”
Each action entries should be replicated for each relevant SubChannel records in T2TVAttributes for Retain Squad for the AssociatedOffer,
OfferVariant, TreatmentName, TreatmentVariant combination
This change should be done using CSV upload until the PM changes are available.
C. Update  T2TVAttributes for Upsell Squad
From PM tool, all entries for T2TVAttributes decision data for Upsell Squad should be updated as -
Scenario = “Default”
This change should be done using CSV upload until the PM changes are available.
D. Update  T2TVActions for Upsell Squad
From PM tool, all entries for T2TVActions decision data for Upsell Squad should be updated as -
Scenario = “Default”
Each action entries should be replicated for each relevant SubChannel records in T2TVAttributes for Upsell Squad for the AssociatedOffer,


OfferVariant, TreatmentName, TreatmentVariant combination
This change should be done using CSV upload until the PM changes are available.
E. Update  T2TVAttributes for Service Squad
From PM tool, all entries for T2TVAttributes decision data for Service Squad should be updated as -
Scenario = “Default”Renew VFUK-AOMFW-SR-Renew-T2TVActions T2TVActions
Care VFUK-AOMFW-SR-Care-T2TVActions T2TVActions
CrossSell VFUK-AOMFW-SR-CrossSell-T2TVActions T2TVActions


1478
This change should be done using CSV upload until the PM changes are available.
F. Update  T2TVActions for Service Squad
From PM tool, all entries for T2TVActions decision data for Service Squad should be updated as -
Scenario = “Default”
Each action entries should be replicated for each relevant SubChannel records in T2TVAttributes for Service Squad for the AssociatedOffer,
OfferVariant, TreatmentName, TreatmentVariant combination
This change should be done using CSV upload until the PM changes are available.
G. Update Strategy - PopulateOutputPropertiesForGetNBA
G1. Update Set property component - Set Property for Action to set the following property -
Scenario = “Default”
G2. Update join condition in Data Join Component - Join Treatment Attributes to include the following condition in addition to existing ones -
.Scenario = .Scenario
G3. Update Set property component - Set Property for TreatmentActions to set the following property -
Scenario = “Default”
G. Update Strategy - IdentifyT2TVariationActions
G2. Update join condition in Data Join Component - Data join to include the following condition in addition to existing ones -
.Scenario = .Scenario
.TargetSubChannel = .TargetSubChannel
III. Logic Changes for 2nd Line Pricing (GetNBA)
A. Update strategy - PopulateOutputPropetiesForGetNBAPrivatePricing
Update strategy to get TemplateDetails and Actions from relevant decision data (similar to IVR in GetNBA) based on the changes to the
decision data structures.
The actual template and action details are not yet available but the strategy changes should be made and tested with dummy values. This
change should be done using CSV upload until the PM changes are available.
The actual template and action details will be configured in optimisation.


The actual template and action details will be configured in optimisation.
IV. Logic Changes for InboundCC Channel (VADR)
A. Update  T2TVAttributes for Renew Squad
From PM tool, all entries for T2TVAttributes decision data for Renew Squad should be updated as -
Scenario = “Default”
This change should be done using CSV upload until the PM changes are available.


1479
B. Update strategy - PopulateOutputPropertiesForNBAA
B1. Add a new Set property component - Default Scenario between Filter Component - Tariff Records and Data Join Component - Join
Treatment Attributes
B2. Set the following property in new Set property component - Default Scenario
Scenario = “Default”
B3. Update join condition in Data Join Component - Join Treatment Attributes to include the following condition in addition to existing ones -
.Scenario = .Scenario
V. Logic Changes for LandingPages (Microsite)
A. Update  T2TVAttributes for CrossSell Squad
From PM tool, add new entries for T2TVAttributes decision data for relevant treatment variation entries in CrossSell Squad for new
scenarios - Inactive, Expired & Ineligible
This change should be done using CSV upload until the PM changes are available.
B. Update  T2TVActions for CrossSell Squad
From PM tool, add new entries for  for T2TVTActions decision data for relevant treatment variation entries in CrossSell Squad for new
scenarios - Inactive, Expired & Ineligible
This change should be done using CSV upload until the PM changes are available.
C. New strategy - ContextualPropositionsLookup
C1. create a strategy similar to AllPropositionsLookup strategy to return treatment SR page with all relevant details of Offer
C2. Import only LandingPages propositions filter by ExecutionMode = LandingPages and proposition identifiers as passed in context (Offer,
OfferVariant, Microsite Treatments, Treatment Variant)

D. New strategy - SetMicrositeTokens
Create new strategy similar to SetIVRTokens to replace the data tokens used in the templates used.
This strategy will be in Business Artefacts ruleset.
D. New Strategy - GetInactiveMicrositeTreatment


This strategy will be in Business Artefacts ruleset.
D. New Strategy - GetInactiveMicrositeTreatment
D1. Use sub-strategy ContextualPropositionsLookup to get the proposition data as per context
D2. Use T2TVT2TVAttributes to match with the proposition and get the template for Scenario = Inactive
Please note to use a common strategy to source the T2TVAttributes which can be reused in the strategy FW.
D3. For each templates from D2, use T2TVActions to get the relevant actions for the template
D4. Populate/map the SR properties as required by output including ErrorMessage  and IH properties (if needed)
D5. Call sub-strategy SetMicrositeTokens to replace the the data tokens used in the templates used.
D6. Call sub-strategy SetIHPropertiesForAllChannels to set the IH related properties


1480
E. New Strategy - GetExpiredMicrositeTreatment
E1. Use sub-strategy ContextualPropositionsLookup to get the proposition data as per context
E2. Use T2TVAttributes to match with the proposition and get the template for Scenario = Expired
Please note to use a common strategy to source the T2TVAttributes which can be reused in the strategy FW.
E3. For each templates from E2, use T2TVActions to get the relevant actions for the template
E4. Populate/map the SR properties as required by output including ErrorMessage  and IH properties (if needed)
E5. Call sub-strategy SetMicrositeTokens to replace the the data tokens used in the templates used.
E6. Call sub-strategy SetIHPropertiesForAllChannels to set the IH related properties
F. New Strategy - GetIneligibleMicrositeTreatment
F1. Use sub-strategy ContextualPropositionsLookup to get the proposition data as per context
F2. Use T2TVAttributes to match with the proposition and get the template for Scenario = Ineligible
Please note to use a common strategy to source the T2TVAttributes which can be reused in the strategy FW.
F3. For each templates from F2, use T2TVActions to get the relevant actions for the template
F4. Populate/map the SR properties as required by output including ErrorMessage and IH properties (if needed)
F5. Call sub-strategy SetMicrositeTokens to replace the the data tokens used in the templates used.
F6. Call sub-strategy SetIHPropertiesForAllChannels to set the IH related properties
G. Update Strategy - IdentifyBestMicrositeTreatments
G1. Replace the components relevant to Inactive path with sub-strategy GetInactiveMicrositeTreatment and update Make Decision switch
component


component
G1. Replace sub-strategy OfferExpiry with sub-strategy GetExpiredMicrositeTreatment and update Make Decision switch component
G1. Replace set property component “Set ErrorMessage” with sub-strategy GetIneligibleMicrositeTreatment and update Make Decision
switch component
VI. Get Next Templates And Relevant Actions


1481
Test Cell Management
Impact in Other areas
Dependencies
DB Changes: Create two new columns in IH table and also extend it to IH View and EDW
App Changes:
Logic Changes:
Create SR property TestGroupExpiry in the class: VFUK-AOMFW-SR of type Text.
Create TestGroups(TBC) Decision data under business issue NonPropositions and Group TestGroups(TBC)
In the decision data TestGroups form field add pyLabel, pyName, pyIssue, pyGroup, Enabled and TestGroupExpiry
In the strategy,  enable external input. 523329 Test Cell Management
App Yes
DB Yes
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App Yes E2E testing can be done once app work is completed
DB Yes E2E testing can be done once DB changes are finished.Area Yes/No Comments
TestGroupExpiry DateTime
TestGroup VarcharProperty Name Data Type
Data Transform Changes Map two new properties in the data transform
“pyInteractionHistoryConfiguration“
Create two properties in Data-Decision-IH-Fact class TestGroupExpiry,TestGroupIH Class changes(VFUK-FW-AOMFW-Data-InteractionHistory) Map TestGroupExpiry ,TestGroup property in the external
mapping tab


1482
Connect the external input to three empty set properties. Name the first set property as "TestGroup Path for offer" and name the second
the set property as "TestGroup Path". Name the third set property as "Non Test Cell Allocation"
Import TestGroups using proposition import. Join it to the data join named "Join with Treatments" and add the condition check
.TestGroup=.pyName. And, in the properties mapping , map .ValueText="yes"
Connect the data join to the two filters. In the first filter "Check Offer is in TestGroup", check if .ValueText="" then join the filter to set
property "Non TestGroup Path"
In the second filter , check if .ValueText="yes" then join it to the two new filters.
Name the filter as "Check TestGroup Active or not". Add the condition in the filter as @String.equalsIgnoreCase(.Enabled,"true")
Name the second filter as "TestGroup Inactive". Add the condition in the filter as !@String.equalsIgnoreCase(.Enabled,"true") and this
filter to the set property "Non TestGroup Path"
Create the new proposition filter, TestGroupEligibility in BusinessIssue NonPropositions and Group TestGroups
Join the filter "Check TestGroup Active or not" to the Proposition Filter "TestGroupEligibility".
Connect the set property, "TestGroup Path" to the data join named "Get TestGroup Details" and join it with Proposition filter
"TestGroupEligibility"(Select TestGroupEligibility from the dropdown). Add the condition check as .TestGroup=.pyName and in the
properties mapping map and TestGroupExpiry, .ValueText="PF eligible"
Join the data join to the two new filters, In the first filter, "TestGroup PF Ineligible" add the condition check if


@String.equalsIgnoreCase(.ValueText,"") then join the filter to set property "Non TestGroup Path"
In the second filter, "TestGroup PF Eligible" , add the condition as  @String.equalsIgnoreCase(.ValueText,"PF eligible")
Import sub strategy GetIHAtAccountLevel in the strategy
Join the filter "TestGroup PF eligible" to the data join "Fetch Cellcode", check with condition .OfferName=.OfferName and in the
properties mapping map .CellCode = .CellCode , .TestGroupExpiry=.TestGroupExpiry, and .ValueText="Cellcode available"
Join the data join to three new filters. In the first filter,"CellCode Not available", check the condition as .ValueText!="Cellcode available"
then join it to the existing substrategy IdentifyTestCell and join this sub strategy to the set property, set TestGroupExpiry for cell. Set
.TestGroupExpiry = Current Date + .TestGroupExpiry and join this set property to the result component.
In the second filter "Check Offer is not in same TestGroup", add condition as !(.Cellcode contains .TestGroup) then join to the it to the
existing sub strategy IdentifyTestCell and join this sub strategy to the set property, set TestGroupExpiry for cell. Set .TestGroupExpiry =
Current Date + .TestGroupExpiry and join this sert property to the result component.
In the third filter "Check Offer is in same TestGroup", add condition as (.Cellcode contains .TestGroup)
Join the filter to the Set property called "Reset ValueText" and set .ValueText=""
Join the set property "Reset ValueText" to the two new filters
Join the filter "Check Offer is in same TestGroup"  to the first filter and check the condition if CurrentDate is in future then join it to the


existing sub strategy AssignCustomerToTestCell and join this sub strategy to the set property, set TestGroupExpiry for cell. Set
.TestGroupExpiry = Current Date + .TestGroupExpiry and join this set property to the result component.
Join the set property ""Reset ValueText""  to the second filter "TestGroup Offer is not Expired"  and check the condition if Current Date
<=.TestGroupExpiry then join it to the datajoin "Check Previous Cell Exists"
Import TestCells Decision Data. In the data join , join it with TestCells (Select TestCells in the dropdown) with the condition check as


Import TestCells Decision Data. In the data join , join it with TestCells (Select TestCells in the dropdown) with the condition check as
.TestGroup=.CellGroup and .CellCode=.CellCode and in properties mapping, map .ValueText="Previous Cell Code Exists"
Join the data join "Check Previous Cell Exists" to the two filters, Name the first filter name as "Previous Cell Code Exists" and add the
condition if @String.equalsIgnoreCase(.ValueText,"Previous Cell Code Exists") join to the result component.
Join the data join "Check Previous Cell Exists" to the second filter. Name the second filter as "Previous Cell Not Exists" and check if
@String.notequalsIgnoreCase(.ValueText,"Previous Cell Code Exists") then join it to the set property "Non TestGroup Path"
Update Strategy IdentifyTestCell:
Update the data join JoinOnCellGroup. In the properties mapping, map .TestGroupExpiry=.TestGroupExpiry


1484
Release 2.12


1485
Assisted Upgrade - Update the Fix or Flex visibility flags at Product Level
HL Requirement:
 Business wants to Manage the following settings at the products level. for the channel(s), team(s), and order type(s) of the
product is fixed for. In the current implementation, we are using a global configuration that needs to be removed.
Impacted Areas
Configuring Fix & Flex
Product Level
Use PM tool Business metadata functionality
Configure the below attributes for Tariff & Device products
Get Recommendation  & Get Product List  Flow Update:
The functionality will remain the same, but
In the current implementation, IsFixed is defined based on the global configuration+product level configration. which should be removed
as part of this release.  and the new derivation for IsFixed will be based on newly added Product attributes at the product(tariff/Device)
level.
GetGlobalFixedProductConfiguration utilization needs to be removed and handled the same functionality with newly added flags at
product level attributes.537563 Update the Fix or Flex visibility flags at product level
App No
Logic yes update to existing flow
PMTool Yes need to remove the global config screen for
Fix/Flex. and Configuration on product
attributes (at channel/team and
ordertype),existing functionality
UI No  Area Yes/No Area
FixedProductEnabledChannel Text Multiple Value
 AOM Channels All possible channels
FixedProudctEnabledTeam Text Multiple Value Save ,SuperSave,Omni Save ,SuperSave,Omni
FixedProductEnabledOrderTypes Text Multiple Value Upgrade,? all possible ordretypesAttribute Name            Type Possible Values Default


1486
Impacted Strategies:
New derivation to set RecommendedDeviceIsFixed/RecommendedTariffIsFixed with product attributes at product level will be like  below .
@if(@String.equalsIgnoreCase(.productattributes(IsFixed),"True")
&&
.ProductAttributes(.FixedProductEnabledChannel) Contains Channel in Context
&&
.ProductAttributes(.FixedProductEnabledTeam) Contains Team
 &&
.ProductAttributes(.FixedProductEnabledOrderTypes) Contains OrdeType in Context
 GetGlobalFixedProductConfiguration  need to remove this strategy from  all referenced strategies.
and withdrawn the strategy & decision data used in it.
GetRecommendedHandset need to set new flags while importing devices from data pages
from related product attributes.
And  need to set
RecommendedDeviceIsFixed/RecommendedTariffIsFixed by
using newly added flags and  remove IsFixedEnabled flag based
on global config from  the derivation.
new derivation is given below
 GetListofActiveTariffs
EvaluateTariffVisibility
EvaluateHandsetCompatibility
GetRecommendedWatch
GetWatchDevice
GetWatchTariffList and GetDeviceListStrategy Name                  Possible Changes


1487
Assisted Upgrade – Sellable Flags for Addons
HL Requirement:
Business want ability to configure Addons which are sellable (Team Level/Channel Level/Order Type)
Impacted Areas

Sellable Configuration
Use PM tool to map listed attributes to Addon product
Logic Changes:
Current logic implementation to call D_ ServicesForTariff and D_InsurancesforHandset should get changed based on this requirement.
Now, we are having only Tariff code and division as keys to call Data page
D_ServicesForTariff[Identifier:@if(Tariff.Identifier!="",Tariff.Identifier,"NA"),DepartmentIdentifier:@if(Tariff.Division!="",Tariff.Division,"NA")
].pxResults.532474 Being able to manage Add on Sellable flag in PM Tool
App Yes Update Data Page D_ServicesForTariff and
D_InsurancesforHandset
Logic access data pages with Team,
Channel, Order Type information.

Filtering should happen at data page level.
Logic
PMTool No
 Configuration on product attributes for
Addons, existing functionality

UI No  Area Yes/No Area
Addon IsSellable
Addon SellableChannels
Addon SellableTeams
Addon OrderTypeProp Type AttrbiuteName


1488
Based on the app changes, we need to include new identifiers Channel/Order Type and Team while using this datapage in our
strategies.
Note: the parameters Channel/Order Type and Team should flow through impacted strategies other wise we need to make them
available.

Impacted strategies
 GetPromotionalAddonsListDetails
GetAddOnListForEditDeal Add - Susbstrategy GetContextProperties
Update - Dataimport get the inputs from Substrategy
GetContextProperties
EvaluateServiceCompatibility
CalculateSecureNet
GetInsuranceList Add - Susbstrategy GetContextProperties
Update - Dataimport InsurancesForHandset to get the inputs
from Substrategy GetContextProperties IdentifyPromotinalAddons


1489
Assisted Upgrade - Regulatory Offers
HL Requirement:
Business wants to Identify Regulatory Offers based on Customer Attributes So that Agent can know whether it is normal or
Regulatory offer in the edit deal, on the selection of the Tariff tab
Impacted Areas
Update Strategy - PopulateOutputPropertiesForTariff
Set related PromotionDetail=Regulatory attribute according to flexi attribute on customer (if regulator offer is active & tariff is
available in flexi attributes of the customer )
Under Tariff properties component.
Set StartDate=Offer Start Date flexi field (Attribute name AOM_CUSTOM_CHAR_210)
Set EndDate= Offer End Date flexi field (Attribute name AOM_CUSTOM_CHAR_211)
Set IsValid = if today is inbetween offer start date and end date.
Set PromotionDetail = Regulatory only if (Date is valid) &&((ProductCode is available in any of this Customer Flexi Attributes.
Possible logic condition will be like
If IsValid= True && ProductCode = AOM_CUSTOM_CHAR_212) OR
(ProductCode = AOM_CUSTOM_CHAR_213) OR
(ProductCode = AOM_CUSTOM_CHAR_214) OR
(ProductCode = AOM_CUSTOM_CHAR_215)) then “Regulatory” else empty374642 Edit deal-Display Regulatory Offers for Customer on Tariff tab
App No
Logic yes update to existing flow
PMTool No
UI Yes If Agent hover over the regulatory Tariff, then
display a message, which is sourced from
logic by PromotionDetail attribute. Area Yes/No Area


1490
Assisted Upgrade - UI-Customer Profile -Customer Notifications
.
HL Requirement:
 Business wants to show requested Code (STAC/PAC) on the Customer Background Information section of the screen
Impacted Areas
Configure AOM Business Config:
use event param screen in pm tool to load data similar below.478246
 Blackstone UI-Customer Profile (Background Information)
487884 Displaying PAC/STAC after expiry date481842
 Customer Profile-Updating STAC/PAC Code design

App Yes New Api (GetNotificationMessages) need to
introduce to load Recent event data to VDAR
.
And new function -
BuildJSONNameValueBlock
Logic yes new DF and New Strategy created to
populate response.
PMTool Yes Task to configure-Event Attributes to
configure (AOM Business Config)

Update Events screen to include “Show On
VADR flag” > delivered in 21.10
Push event data to decision data. >2.11
UI Yes Customer Background Information section
need to be updated with
GetNotificationMessages ResponseArea Yes/No Area
LeaveRequest_PAC NotificationDisplayMessage PAC Code Requested
LeaveRequest_PAC NotificationRecency 60ConfigType
(PrimaryContex_SecondaryContext)ConfigName (attribute Name) Value


1491
New Dataflow – GetCustomerNotifications
Create a new df in Subscription class with Source as PrepareDataForGetRecommendation, where it will call new Strategy
GetCustomerNotifications which return Notification Details as mentioned in the spec.
New Strategy - GetCustomerNotifications
GetCustomerNotifications Strategy will serve RecentEvents & Warnings by calling two sub-strategies.
1.GetSubscrtionRecentEvents (New Strategy) :
Import EventMetaData Decision Data ( new DD data will be from the pm tool) which consists of Event and ShownOnVADR flag. ( Pm tool
team Needs to push Primary Context, Secondary Context, ShownOnVADR for the event).
Access Business config fro each valid Event+SubEvent (PrimaryContext+SecondaryContext) to query details.
(NotificationDisplayMessage,NotificationRecency,NotificationSubType)
Filter events for which ShownOnVADR is true and get Subscription Event Data  (CustomerAggregatedEvents)   Select only the events
marked as ShownOnVADR & NotificationRecency condition is satisfied  (the most recent record).

Event Attributes to configure (AOM Business Config) with PM as per above section:
Set NotificaitonType =” Event” which will be mapped to TYPE in spec.
NotificaitonSubType = NotificaitonSubType from Event parameters which is SubType in spec.
Set NotificationDisplayMessage from Event parameters which are DisplayText in spec.

Populate the Event Details for the identified event: Extract Event Details data from LatestEventContext
SwitchingCodeValidityDate stands for the Valid Until (check with Russ /app team for date format and ask for sample data)
SwitchingCode stands for Code.
Then Make a call to BuildJSONNameValueBlock to generate More info details (mention each attribute and Value)


Then Make a call to BuildJSONNameValueBlock to generate More info details (mention each attribute and Value)
Requested on: LatestEventTimeStamp from the event page
Requested via: LatestEventChannel from the event page
Code: SwitchingCode
Valid Until: SwitchingCodeValidityDate
Status: Valid/Expired
If PAC/STAC expire date in future ( SwitchingCodeValidityDate>=Today) then display status = Valid
If PAC/STAC code  expires date in is passed date  , then display the Status= Expired below the date.
(SwitchingCodeValidityDate<Today)
the output of the function will be json which we need to set to the Details section of the API.LeaveRequest_PAC NotificationSubType Leave
LeaveRequest_STAC NotificationDisplayMessage STAC Code Requested
LeaveRequest_STAC NotificationRecency 60
LeaveRequest_STAC NotificationSubType LeaveConfigType
(PrimaryContex_SecondaryContext)ConfigName (attribute Name) Value


1492

2.GetSubscriptionWarning (New Strategy):
Currently only one warning,
Import SubscriptionFlexAttribute >Check flex attributes to see if retaliatory offer is active
If the Customer is having any Regulatory offers,
Set NotificaitonType =WarningMessage
NotificaitonSubType = Regulatory and send to strategy results.

Condition to check regulatory offers (create a strategy rule can use from reg offer Userstory too).
( (AOM_CUSTOM_CHAR_212 !=””) OR
(  AOM_CUSTOM_CHAR_213 !=””) OR
( AOM_CUSTOM_CHAR_214 !=””) OR
(AOM_CUSTOM_CHAR_215 !=””) )and
 if today is in between AOM_CUSTOM_CHAR_210 and AOM_CUSTOM_CHAR_211

Refer API Spec for more details:
  https://vodafone.sharepoint.com/:x:/r/sites/AoMProgramme/_layouts/15/Doc.aspx?sourcedoc=%7B7ac93311-34bd-4713-b0ef-
564a68d07a84%7D&action=default&uid=%7B7AC93311-34BD-4713-B0EF-564A68D07A84%7D&ListItemId=3135&ListId=%7B79F69476-3482-41AF-A6E0-
DC431FE94040%7D&odsp=1&env=prod


1493
Assisted Upgrade- Commission Tier- Part 1

Note : Only Logic Development is in scope for this release

HL Requirement

Current logic calculates  Net revenue (yearly) for GetRecommendation services
Business want to be able to
Configure monthly commission tiers for each team on PM tool
Provide tier details of the recommendation according to ranges
Also want to show tier details on  Discount tab so the user is aware of what will be the commission user will get if related discount
selected.

New Decision Data -CommissionTierRanges532478 Calculating the Tiers in order to display the Commission Bonus
Indicator to display on screen
532523 Being able to manage the Tiers boundaries based on the agent's
team525234
PM Tool Yes New screen to configure CommissionTierRanges & push to AOM
PM Tool KT Documentation Yes
Knowledge Transfer Yes
DB No
App Yes New Attribute on GetRecommendation ,GetProductList,ValidateBasket >
CommisionTier
Logic will populate CommisionTier
GetRecommendation,ValidateBasket  at Recommendation Level
GetProductList at Lineitem Level
UI  Present indicators on UI Area Yes/No Comments
  Possible values


1494
Key : Team,TierName
Sample Data :

Change to Get Recommendation Flow
Update Strategy-CalculateNetRevenue
1. AddonCost  Calculation > ignore promotional discounts. (Classfication=PROMOTION or .AutoAdded=True)
2. Populate PricePlanTenure to output.
New Strategy -CalculateNetRevandCommissionTier
1. Enable ExternalInput
2. Make Sub strategy call to CalculateNetRevenue
3. Calculate Monthly Net Revenu  based on NetRevenue,PricePlanTenure (which is yearly) calculated in CalculateNetRevenue
 MonthlyNetRevenue = NetRevune/PricePlanTenure
4.  Import TierRanges and match records on Team. (if not matched do not drop records )
5. Calculate CommissionTier for matched records
 Map MonthlyNetRevenue  to related tier  according to  ranges in configured in decision data. Populate CommissionTier.
Update Strategy -CalculateUpgradeDeal
Replace CalculateNetRevenue call with CalculateNetRevandCommissionTier
Populate CommissionTier,NetRevenue to main path from CalculateNetRevandCommissionTier
Update Strategy-CalculateDeal
Populate CommissionTier to main path from CalculateDeal
 Team Text (Single Value) Omni,Save,SuperSave
CommissionTier Text 1  , 2
InitialValue Decimal
FinalValue Decimal
Omni 1 17.00 22.99
Omni 2 23.00 99999
Save 1 17.00 22.99
Save 2 23.00 99999
SuperSave 1 17.00 22.99
SuperSave 2 23.00 99999Team CommissionTier InitialValue FinalValue


1495
Change to Validate Basket Flow
Update Strategy-CalculateBasketFinancials
Current logic uses reuses CalculateNetRevenue strategy to re calculate yearly net revenue for some specific actions.
 Replace CalculateNetRevenue call with CalculateNetRevandCommissionTier
Validate basket should  populate CommissionTier to output (at basket level)
Update ReCalculate Financials component,
set CommissionTier, NetRevenue from CalculateNetRevandCommissionTier

Change to Get Product List Flow
Update Startegy-GetDiscountList
Logic need to calculate net revenue & commission tier for each discount in the list according to basket details (excluding discount in
basket)
Make Sub sub-strategy call to CalculateNetRevForDiscountList before PopulateOutputPropertiesForDiscounts

New Strategy - CalculateNetRevForDiscountList
https://miro.com/app/board/o9J_lsqGTBo=/?moveToWidget=3074457365077349290&cot=14 -

Logic need to calculate net revenue for each discount in the list according to basket details (excluding discount in basket)
Logic is very similar to CalculateBasketFinancials , will only contain Net revenue part & line times will be imported inside strategy.(not
from external input)

Strategy flow :

Input : List of Discounts for selected tariff
Connect your Miro account


1496
Calculate  Net Revenue for Basket : This part of logic will calculate Net revenue  from basket data excluding discount in basket.
(sequence on top part where CalculateNetRevenue strategy is called)
Make sure those attributes are populated for Tariff In basked  (need for data page access in CalculateNetRevenue)
Division
Channel
OrderType
Team
Before calling CalculateNetRevenue make sure Duration,CostExVAT,ProductRecommendationType.

 Calculate Total Discount  for Each Discount :
Set DiscountedCost
DiscountedCost=(.DiscountAmount-(.VATCode*.DiscountAmount))
Calculate Monthly Net Revenue for each discount
Set Monthly Net Revenue
NetRevenue=CalculateNetRevenue.NetRevenue-DiscountedCost
MonthlyNetRevenue=NetRevenue/CalculateNetRevenue.PricePlanTenure
Calculate CommissionTier
Import TierRanges on Team. (if not matched do not drop records )(Make sure Team is populate on discount list coming from external
input)
Calculate CommissionTier for matched records
 Map MonthlyNetRevenue  to related tier  according to  ranges in configured in decision data. Populate CommissionTier.


1497
NBA FW - Capture Call Center Responses

Impact in Other areas
Dependencies
Clarified Requirement:
1. Adaptive model should not be used for OBCC channel and it will be implemented in future epics.
2. Logic to Identify if Event is duplicated based on
InteractionId
EventTimestamp
Outcome(SubEvenType)
Duplicate events should not be written into Interaction History.
Logic Changes:
Update Strategy CaptureResponse:
Enable External Input
Join external input to the set property,"SettheChannelandEventTypeforOBCC"
In the set property set , .Channel=Primary.Context(Channel) and .EventType=Primary.Context(EventType) and
Join the set property "Set The Channel" to the new filter,"OBCCChannelCheck". Add the condition .Channel = "OutboundCC"  &&
.EventType = "DiallerOutcomes" in the filter
 And join this filter to the new sub strategy "CaptureResponseForOutboundCC".
Connect the sub strategy “CaptureResponseForOutboundCC“ to the Error Message Null Check and Error Message Not Null Check
Filters439207 Capture Call Center Responses
App Yes
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App Yes E2E testing can be done once app work is completed
DB No  Area Yes/No Comments


1498
New Strategy CaptureResponseForOutboundCC:
Add the set property component and name it as "Set OBBC Fields" and set the below fields
In the set property set the below properties
.ValueText Primary.Context(SubEventType)
.DialledTimestamp Primary.Context(EventTimestamp)
.pxOutcomeTime .DialledTimestamp
.ValueDecimal Primary.Context(pxInteractionId)
.pySubjectID Primary.CustomerID
.CreateTs @getCurrentTimeStamp()
.ClickedURL Primary.Context(ClickedURL)
.pyChannel Primary.Context(Channel)
.ServiceId Primary.ServiceNumber
.OfferName Primary.Context(.OfferName)
.OfferVariant Primary.Context(.OfferVariant)
.pyOutcome Primary.Context(SubEventType)
.TreatmentName Primary.Context(TreatmentName)
.TreatmentVariant Primary.Context(TreatmentVariant)
.CallDirection Primary.Context(CallDirection)
.CallCentre Primary.Context(CallCentre)
.CallCentreOutcome Primary.Context(CallCentreOutcome)
.CallCentrePhoneNo Primary.Context(CallCentrePhoneNo)
.CallerType Primary.Context(CallerType)
.CellCode Primary.Context(CellCode)
.DiallingCompletedFlg Primary.Context(DiallingCompletedFlag)
.MSISDNDialled Primary.Context(MSISDNDialled)
.ServiceId Primary.ServiceNumberProperty Name Property Value


1499
Join this set property "Set OBBC Fields" to the filter called "Valid Records"
Add the condition in the filter as .Outcome!=""&&.DialledTimestamp!=""
Import sub strategy "GetOffersAndTreatmentsIncludingVariations" and join it to the filter named "OutboundOffers" and the condition as
true in the filter.
Join the filter "OutboundOffers" to the data join and name it as "Select Treatments".
In the data join "Select Treatments", join it with Valid Records(Choose it from drop down) and the below conditions check

Map the below properties in the properties mapping
Enable external input
Join the external input to the data join "Get Decision Time Predictors" and join it with "Select Treatments" and add the below condition
check..InteractionId Primary.Context(.InteractionId)


1500
In the data join "Get Decision Time Predictors", map the below properties in the properties mapping tab.
Use data import and name it as "Import IH". In the data import , import Primary.InteractionHistoryList and in the properties mapping tab,
map below properties.
Import decision data called "OutcomeMapping" and name the decision data component name as "Standard Outcomes"
Join the data import  "Import IH" to the data join called "Get Standard Outcome" and join with "Standard Outcomes" and add the below
condition check


1501
In the properties mapping, map the below properties

Connect to the set property named "StandardOutcome check", set
.StandardOutcome=@if(.StandardOutcome="","Other",.StandardOutcome)
Join the set property to the filter ,"IH with Selected Outcome". Add the condition in the filter as
@String.equalsIgnoreCase(.StandardOutcome,"Selected")&&@String.equalsIgnoreCase(.Channel,"OutboundCC")
Connect the filter "IH with Selected Outcome" to the other filter named "Match the Proposition from the Response Received" and add
the condition in the filter as SelectTreatments.pyName=.TreatmentName
Join the filter to the data join and name the data join as "Find duplicate events". In the data join , join with Select Treatments(Choose it
from drop down) and add the below conditions
1.  .pxInteractionID = .InteractionId
2. and .pxOutcomeTime = .pxOutcomeTime
3. and .pyOutcome =.pyOutcome
In the properties mapping tab, map .ValueText = "Duplicate Events Found"
Join the data join "Find duplicate events" to the filter called "Non Duplicate Events Records". In the filter add the condition check as
.ValueText=""
Join the filter "Non Duplicate Events Records" to the group by component named "Latest Interaction" and  do group by on .InteractionId
and .pxOutcomeTime


1502
Connect the existing data join, "Select Treatments" to the new data join "Join with Latest Interaction".
In the data join "Join with Latest Interaction", join with Latest Interaction(Select from drop down)
and add the below condition check .pxInteractionID = .InteractionId
And map the below properties in the properties mapping tab as


1503

Connect the data join "Join with Latest Interaction" to the set property "Set IH for Not Match Offers" and in the set property set
.pyChannel = .Channel and .CreateTs = @getCurrentTimeStamp()
Connect the existing data join "Get Decision Time Predictors" to the filter called "MatchedRecords". Add the condition in the filter as
.ValueText="Matched" and connect this filter to the result component.
Connect the set property "Set IH for Not Match Offers" to the data join "IdentifyNotMatched" and the below join checks
In the properties mapping , map .ValueText="Matched"


1504
Connect the data join "IdentifyNotMatched" to the filter "NotMatchedRecords". In this filter add the condition .ValueText!="Matched"
And join this filter to the existing sub strategy "SetDefaultValuesToIHProperties" and join this sub strategy to the two filters named
"Match Found" and "Match Not Found".
In the filter "Match Found", add the condition check as .AdhocText1!="" and join this filter to the result component.
In the "Match Not Found" , add the condition check as .AdhocText1="" and join this filter to the set property named "Set Error Message"
and set .ErrorMessage = "Unable to find InteractionID : "+.ValueDecimal+" in the Interaction History." and join this set property to the
result component.


1505
NBA FW - Batch controls - pause, hold, resume
Impact in Other areas
Dependencies
High level design (App)
Outstanding Questions
High Level Requirements
Logic Design
A. New C* Data Set - BestOBT reatmentsBeforeChannelDelivery
B. New DF - ProcessT reatmentsWithNoV olumeLimitForBatch
C. New DF - PopulateV olumeLimitForT reatmentsForBatch
D. New DF - DedupeByContactDetailForBatch
C. Update DF - AugmentV olumeConstrainedDataForBatch
D. New DF - W riteBatchDecisionOutputForChildAsControl
E. New DF - W riteBatchDecisionOutputAsControl
F. New DF - W riteBatchDecisionOutputBeforeChannelDelivery
G. Update DF - ProcessBestOBT reatmentsAsT arget
H. New DF - W riteIH
I. Update DF - ProcessNonChildBestOBT reatmentsAsControl
J. New C* data set - ParentBestOBT reatmentsForChannelDelivery
K. Update DF - ProcessChildBestOBT reatmentsAsControl
L. New DF - ProcessForChannelDelivery
Impact in Other areas
Dependencies479122 Batch controls - pause, hold, resume
App Yes New Data Type for Treatments to be released
Update the class for the Daya Type to add PageList property (CustomerList) of
SR class

Changes to Extractor Case
DB No
Knowledge Transfer Yes
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
Area Yes/No Comments


1506

High level design (App)
https://vodafone.sharepoint.com/sites/AoMProgramme/Shared Documents/Technology/Conditioning Notes/NBA.one#Hold Process
Enhancements&section-id={A745A153-EA3F-4B6E-8F16-9163BFE64932}&page-id={C3CA19B6-A503-4770-8AA9-347D1F2CE559}&end

Outstanding Questions
Should this change to be applied for CCD Extractor case as well? Currently both CCD Extractor and BatchNBA Extractor uses the same
DF.
[Answered by Matt on 01/11/2021 on Conditioning 7/8 - Story Exit from Conditioning - Dev Ready ]
This functioality should only be available for Batch NBA Extractor.
Parent/Child combination should selected together in release process
High Level Requirements
New DF DedupeByContactDetailForBatch used instead of DF - DF DedupeByContactDetail in step 6 - Dedupe By Contact Detail in
Prepare BatchNBA Extract process in 2. Prepare stage of “Extractor” case will be updated a new C* dataset
BestOBTreatmentsBeforeChannelDelivery (for treatments with no volume limit)
New DF - AugmentVolumeConstrainedDataForBatch used instead of DF AugmentVolumeConstrainedData in step 7 - Apply Volume
Constraints in Prepare BatchNBA Extract process in 2. Prepare stage of “Extractor” case will be updated a new C* dataset
BestOBTreatmentsBeforeChannelDelivery (for treatments with volume limit)
A new step introduced in n Prepare BatchNBA Extract process after step 7 to call a new DF -


A new step introduced in n Prepare BatchNBA Extract process after step 7 to call a new DF -
WriteBatchDecisionOutputBeforeChannelDelivery which will read from new C* dataset BestOBTreatmentsBeforeChannelDelivery and
write to existing database table dataset BatchDecisionOutput
If the “hold” is enabled, the Extractor case should pause at this step
A new report definition should be created in existing database table dataset BatchDecisionOutput to present the volumes by OfferName,
OfferVariant, TreatmentName & TreatmentVariant including Target/Control split
After validating the volumes by OfferName, OfferVariant, TreatmentName & TreatmentVariant, Business will “release” certain treatments
(OfferName, OfferVariant, TreatmentName & TreatmentVariant) by updating a Data Type (Design - TBC)
A new “Release” process will be introduced in 2. Prepare stage of “Extractor” case for BatchNBA which will handle “release” of the
treatments for further processing to deliver to channel
The new process will call a new DF - ProcessForChannelDelivery which will use the new Data Type (Report Definition) as input list of
treatments (OfferName, OfferVariant, TreatmentName & TreatmentVariant) those are to released, match with new C* dataset
BestOBTreatmentsBeforeChannelDelivery and write to existing Target/Control datasets
The new process will then execute the step same as existing step 8 - Process Best OB Treatments & step 9 - Set Subscription
Campaign Flags in Prepare BatchNBA Extract process in 2. Prepare stage of “Extractor” case
Business may perform the hold & release multiple times and the case should be re-designed to handle such processPM Tool No
App Yes Data Type and class update required before logic changes are done
Changes to Extractor Case is needed for end-to-end dev-testing
DB No


1507
Logic Design

A. New C* Data Set - BestOBTreatmentsBeforeChannelDelivery
Create a new C* data set BestOBTreatmentsBeforeChannelDelivery on SR class with keys in following order -
pyName
OfferVariant
TreatmentVariant
pySubjectID

B. New DF - ProcessTreatmentsWithNoVolumeLimitForBatch
Save existing DF - ProcessTreatmentsWithNoVolumeLimit as ProcessTreatmentsWithNoVolumeLimitForBatch
Remove secondary path for “In Control” including all components
In Primary path, remove filter “In Target” & Covert component and replace the destination data set from BestOBTreatmentsAsTarget to
BestOBTreatmentsBeforeChannelDelivery
C. New DF - PopulateVolumeLimitForTreatmentsForBatch
Sabe existing DF - PopulateVolumeLimitForTreatments as PopulateVolumeLimitForTreatmentsForBatch
Replace the Primary Destination DF ProcessTreatmentsWithNoVolumeLimit with new DF
ProcessTreatmentsWithNoVolumeLimitForBatch
D. New DF - DedupeByContactDetailForBatch
Save existing DF - DedupeByContactDetail as DedupeByContactDetailForBatch
Replace the Primary Destination DF PopulateVolumeLimitForTreatments with new DF PopulateVolumeLimitForTreatmentsForBatch

C. Update DF - AugmentVolumeConstrainedDataForBatch
Save existing DF - AugmentVolumeConstrainedData as AugmentVolumeConstrainedDataForBatch
Remove secondary path for “Control” including all components
In Primary path, remove filter “Target” & Covert component and replace the destination data set from BestOBTreatmentsAsTarget to
BestOBTreatmentsBeforeChannelDelivery

D. New DF - WriteBatchDecisionOutputForChildAsControl
DF will be created in SR class
Source - Abstract


DF will be created in SR class
Source - Abstract
On Primary Path, create a Merge “Merge Matched Child and Parent Treatments” with data set ParentBestOBTreatments as below -


1508

Destination DF - WriteBatchDecisionOutput

E. New DF - WriteBatchDecisionOutputAsControl
DF will be created in SR class
Source - Abstract
On Primary Path, create a Filter “Non Child Treatments” - .ParentChild != "Child"
On Primary Path, use destination DF - WriteBatchDecisionOutput
Create Secondary path and add a Filter “Child Treatments” - .ParentChild = "Child"
On Secondary path, use destination DF - WriteBatchDecisionOutputForChildAsControl

F. New DF - WriteBatchDecisionOutputBeforeChannelDelivery
DF will be created in SR class
Source Data Set - BestOBTreatmentsBeforeChannelDelivery
On Primary Path, create a Filter “In Target” - .PotentialControlFlag = “Target”
On Primary Path, after filter, use Convert shape (to SR class) and set .InControlGroup = “N”
On Primary Path, use destination DF - WriteBatchDecisionOutput
Create Secondary path and add a Filter “In Control” - .PotentialControlFlag = "Control"
On Secondary path, after filter, use Convert shape (to SR class) and set .InControlGroup = “Y”
On Secondary path, use destination DF - WriteBatchDecisionOutputAsControl


1509
G. Update DF - ProcessBestOBTreatmentsAsTarget
Remove secondary path which calls DF - WriteBatchDecisionOutput

H. New DF - WriteIH
Save DF - WriteIHAndBatchDecisionOutput as new DF - WriteIH
Remove secondary path which calls DF - WriteBatchDecisionOutput

I. Update DF - ProcessNonChildBestOBTreatmentsAsControl
Replace Primary destination DF - WriteIHAndBatchDecisionOutput to WriteIH

J. New C* data set - ParentBestOBTreatmentsForChannelDelivery
Create a new C* data set BestOBTreatmentsBeforeChannelDelivery on SR class with keys in following order -
pySubjectID
pyName
OfferVariant
TreatmentVariant
K. Update DF - ProcessChildBestOBTreatmentsAsControl
Replace Primary destination DF - WriteIHAndBatchDecisionOutput to WriteIH
Replace the data set used by Merge component from ParentBestOBTreatments to ParentBestOBTreatmentsForChannelDelivery
L. New DF - ProcessForChannelDelivery
DF will be created in same class as the Report Definition (from Data Type for Treatment those are to be released)
Source - Report Definition (from Data Type for Treatment those are to be released)
The class will contain PageList property (CustomerList) of SR class
Add Compose component to join with data set BestOBTreatmentsBeforeChannelDelivery to panellist property CustomerList using join
conditions on OfferName, OfferVariant, TreatmentName & TreatmentVariant
Add Filter component to filter out any input record which does not have any matching records in data set
BestOBTreatmentsBeforeChannelDelivery
Add Convert shape to output the “embedded” CustomerList page list (SR class)
On Primary Path, create a Filter “In Target” - .PotentialControlFlag = “Target”


On Primary Path, create a Filter “In Target” - .PotentialControlFlag = “Target”
On Primary Path, after filter, use Convert shape (to SR class) and set .InControlGroup = “N”
On Primary Path, use destination data set - BestOBTreatmentsAsTarget
Create Secondary path and add a Filter “In Control” - .PotentialControlFlag = "Control"
On Secondary path, after filter, use Convert shape (to SR class) and set .InControlGroup = “Y”
On Secondary path, use destination data set - BestOBTreatmentsAsControl
Create another Secondary path and add a Filter “Parent and Control Treatments” - .PotentialControlFlag = "Control" and .ParentChild =
"Parent"
On new Secondary path, use destination data set - ParentBestOBTreatmentsForChannelDelivery


1511
Assisted Upgrade – Additional Plan Discount Display message

HL Requirement:
Business wants to display an information message on screen if the customer is no longer eligible for an Additional Plan discount.
Impacted Areas
Logic Changes:
Update Strategy GetDiscountList:
The information message should populate in API(GetProductList api spec)  response so the App team will make use of it.
Set information message in Displaymessage SR property as a new SR row, the message will be “The customer is no longer eligible
for an Additional Line Discount”.

conditions to display the message are given below:
1. We should validate if the customer currently holding the  ADP and but not eligible for ADP > then show a message.
 set a boolean flag for this condition in  CheckAdditionalPlanDiscountEligibility Strategy and make use of this flag in parent strategy
GetDiscountList where we will set the actual message.
2. We should validate if the customer currently holding the  ADP and is eligible for ADP but Recommended Tariff tenure is more than 30days
> then show a message.
for all remaining flows, we should not show this message.
use the output of CheckAdditionalPlanDiscountEligibility strategy based on the flag and tariff tenure condition set up the display
message in a new set component SetDisplaymessage and connect to results.

scenarios to display message are placed below:
CheckAdditionalPlanDiscountEligibility:560820 Additional Plan Discount Eligibility Information Message
App Yes Update GetProductList Spec to include
DisplayMessage as  Response-Header
Information message to be sent to UI
Logic  Update to existing logic with message
PMTool No

UI Yes Information message sent from logic to be
displayed in UIArea Yes/No Area


UI Yes Information message sent from logic to be
displayed in UIArea Yes/No Area
Current New Ellgiblity CheckAdditionalPlanDiscountEligibility flag


1512
in GetDiscountList Strategy:

 Holding APD Elligible Isvalid > False
Holding APD Not Elligible Isvalid > True
No Holding APD Elligible Isvalid > False
No Holding APD Not Elligible Isvalid > False
Holding APD Elligible Isvalid > False >1 don’t
Holding APD Elligible Isvalid > False <1 Show Message
Holding APD Not Elligible Isvalid > True irrespective of tenure Show Message
No Holding APD Elligible Isvalid > False NA don’t
No Holding APD Not Elligible Isvalid > False NA don’tCurrent New   Ellgiblity FLAG FROM ABOVE Recommendad   Tariff
tenureDISPLAY MESSAGE


1513
Assisted Upgrade -Refine By Update-Fix

HL Requirement
 This is a fix to Refine by to source handset from BDC / PC
As is : If user clicks on refine by handsets are sourced from PC not BDC.
→ If user selects Manufacturer & Model > Source handset data both from BDC & PC
o    If any matching record from BDC > Select the handset which has stock and has highest propensity
o    If not matching record from BDC > Select  handset from PC, which has stock (smallest variant , colour in smaller memory variant and
the 1st alphabetically available colour SKU)
→ If user selects any other condition >  Source handset data, from BDC
o    If any matching record from BDC > Select the handset which has stock and has highest propensity
o    If not matching record from BDC  > No handset recommendation.

Fix to PickBestPathwayLogic
Make sure that
if any handset parameters are selected > ToHandset recommendation is made (No matter BDC pathway output)
if Simonly parameter is selected > ToSimo recommendation is made (No matter BDC pathway output)
if tenure is selected as 30 days > ToSimo30 recommendation is made (No matter BDC pathway output)
Update Strategy -PickBestPathway
RefineBy No Selection path > Check  device cost range is empty.
RefineBy Handset path > Check  device cost range is not empty.
RefineBy SIMO path > Add a condition to check If tenure is selected as 30 days > ToSimo30 recommendation is made
Update Strategy -GetRecommendedDevice
 https://miro.com/app/board/o9J_lsqGTBo=/?moveToWidget=3458764515163645672&cot=14 -


Get BDC Handset path → Remove D_PaymsellableHandsetBySKU .
Get Sellable Handset from PC (Use flow as is).
Get Recommendation Rank for the devices, present in both BDC and PC.
If RefineBy, Manufacturer and Model is not empty then
Filter by RefineBy parameters for device (5G, NearlyNew, DeviceCost)
if the devices contains recommendation rank, order by rank (ascending).
else order by modelname, devicestorage, colour (logic already exists).
combine all the devices based on rank (Note: If any BDC exists, it should be on top)
Else(NBAandRefineBywithotherparameters)439209 Update the logic to include the product catalogue
Connect your Miro account


1514
Else (NBA and RefineBy with  other parameters)
filter records with recommendation rank
Filter by RefineBy parameters for device (5G, NearlyNew, DeviceCost)
order devices based on recommendation rank
Remaining flow use as is (Stock check, Top 1 Device, CalculateIsFixed, Setting Error message, CREType check, Recommended Device
availability)


1515
Release 2.13


1516
Tradein CR - ADO 644136
Impact in Other areas
Dependencies

Requirement: The design is to extend the FUT check for offer to be by either MSISDN or Division
Note: Division Value is accessed as Primary.Context(AgentDepartment)

As per meeting on 25th January 2022, Confirmed that Division values are maintained in the data type
Below is the new entry in AOMBusinessConfig .
ConfigType : SeedDivision
ConfigName : FUT
ConfigValue : FUT ,TV Pilot ,Pilot Division 1, London North ( Please check userstory for actual values)
First check whether Division is available or not , If division is not available then check for Service Number path.
Important Note: While preparing new PM Catalogue , above config values should be added in the AOMBusinessConfig Screen
Logic Changes:
Need changes in ApplyFUT strategy
Update ApplyFUT Strategy:
Connect the existing filter to the new set property “Find Division“ 644136 Tradein CR
App No
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App No
DB No  Area Yes/No Comments


1517
In the above set property set the value in temporary variable .ValueText =
D_VFUKFWAOMFWDataAOMBusinessConfig[ConfigType:SeedDivision,ConfigName:FUT].ConfigValue and set .Division =
Primary.Context(AgentDepartment)
And connect this set property to the new filter component ,”Apply FUT Check for Division” and add condition check as
@contains(.ValueText,.Division) and reset in new set property .ValueText =""
In the switch component , “Choose ApplyFUTCheck or Not“ add the new condition in the top.
Choose filter component “Apply FUT Check for Division“ if the condition FUTisenabled.FUTList!=""&&FindDivision.Division!="" else
choose “Apply FUT Check“ if the condition FUTisenabled.FUTList != "" && Primary.ServiceNumber !="" and else choose False


1518
NBA FW - Determine Sellable Plans by Order Type

Impact in Other areas
Dependencies
Logic Changes:
Update strategy GetProductList:
Update the switch component "Check Order Type".
Update the condition to choose GetProductListForAdditionalLine strategy from when condition
@equalsIgnoreCase(OrderTypefromContext.OrderType,"New Acquisition") to when condition as
@equalsIgnoreCase(OrderTypefromContext.OrderType,"In Life Sales").

 569164 Determine Sellable Plans by Order Type
App No
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App No
DB No  Area Yes/No Comments


1519
NBA FW - New Sub-channels for eShop
Impact in Other areas
Dependencies
Note: Subchannels names are UpgradesAndOffers and Purchase
Logic Changes
Update the proposition data, decision data and Proposition filters as per the offer catalogue
Offer Catalogue

 569164 Determine Sellable Plans by Order Type
App No
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App No
DB No  Area Yes/No Comments
2.12VFUK - 2nd …
02 Dec 2021, 07:30 AMst.xlsx
 2.12VFUK - 2nd …
26 Oct 2021, 06:47 PM.1.xlsx
 2.12VFUK - 2nd …
26 Oct 2021, 06:47 PM.1.xlsx


1520
NBA FW - GetNextBestContent
Impact in Other areas
Dependencies
Logic Changes:
Update Data Flow GetNextBestContent:
Source : Data Flow
Class: VFUK-FW-AOMFW-Data-Subscription
DataFlow Name : PrepareRealtimeData
Connect the input source dataflow to the new strategy GetNextBestContent
Destination: Abstract
Create New SR property called NextScenario of Type Text in the class VFUK-AOMFW-SR
New Strategy GetNextBestContent:
In the new set property called "Set Details" and set the below fields563810 A call to GetNextBestContent following CSO
App Yes
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App Yes
DB No  Area Yes/No Comments
.OfferName Primary.Context(OfferName)
.OfferVariant Primary.Context(OfferVariant)
.TreatmentName Primary.Context(TreatmentName)


1521
Import all the Offers,Offervariants,Treatments and TreatmentVariants data. Refer the existing strategy AllPropositionsLookup strategy.
Join the set property "All Treatments With Offer and Offer Variations and Treatment Variations" to the data join.
Name the data join as "Join with Selected Offer" and join with "Set Details" and add the below conditions check and in the properties
mapping map .NextScenario=.NextScenario
Note: Check the checkbox for Exclude source component results that do not match join condition.
Join the data join "Join with Selected Offer" to two new set properties.
Join the "Join with Selected Offer" to the first set property "Set Property for Action" and set the below fields
Connect the above set property to the data join and name as "Join Treatment Attributes".
Import the existing sub strategy ImportAllT2TVAttributes .TreatmentVariant Primary.Context(TreatmentVariant)
.NextScenario Primary.Context(NextScenario)
.ResponseType "Action"
.Identifier .pyName
.TargetSubChannel "Default"


1522
In the data join "Join Treatment Attributes" join with ImportAllT2TVAttributes and check the below conditions
and in the properties mapping tab map .TreatmentAttributes=.TemplateDetails and join this data join to the new empty set property Join SR
Pages
Join the "Join with Selected Offer" to the second set property "Set Property for TreatmentActions" and set the below fields
Join the set  property to the new data join and name it as "Join Action Attributes". Import the sub strategy
ImportTreatmentToTreatmentVariationActions
In the data join "Join Action Attributes" join it with the strategy ImportTreatmentToTreatmentVariationActions and add the below
conditions check
Note: Check the checkbox for Exclude source component results that do not match join condition.
In the properties mapping tab , map the below properties
Join two set propeties "Set Property for Action" and  "Set Property for TreatmentActions" to an empty set property and name it as "Join
SR Pages" and join this empty property to the result component..TreatmentName .TreatmentName
.OfferVariant .OfferVariant
.TreatmentVariant .TreatmentVariant
.TargetSubChannel .TargetSubChannel
.NextScenario .Scenario
.ResponseType "TreatmentActions"
.Identifier .pyName
.TargetSubChannel "Default"
.OfferName .AssociatedOffer
.OfferVariant .OfferVariant
.TreatmentVariant .TreatmentVariant
.TargetSubChannel .TargetSubChannel
.NextScenario .Scenario
.ActionTemplateId .ActionTemplateId
.ActionTemplateType .ActionTemplateType
.ActionTemplateDetail .ActionTemplateDetail
.ActionOutcome .ActionOutcome


1524
NBA FW - SetNBAResponse - Upgrades & Offers page response capture

Impact in Other areas
Dependencies
Dev Testing:
Sample Request Body:
{
"InteractionId": "-119585767102077807",
"CustomerId": "1-HLZKOO39",
"Channel": "Web",
"SubChannel": "",
"OfferName": "AddMobileWithHandset",
"OfferVariant": "OfferVariantDefault",
"TreatmentName": "AddMobileWithHandset_Web",
"TreatmentVariant": "Default",
"Outcome": "Clicked", //App Team Sets the Outcome
}524880 SetNBAResponse - Upgrades & Offers page response capture
App Yes
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  A r e a Y e s / N o C o m m e n t s
PM Tool No
App Yes
DB No  A r e a Y e s / N o C o m m e n t s


1525
NBA FW - SetNBAResponse - Options To Buy (OTB) page response capture

Impact in Other areas
Dependencies
Dev Testing:
Sample Request Body:
{
"InteractionId": "-119585767102077807",
"CustomerId": "1-HLZKOO39",
"Channel": "Web",
"SubChannel": "Purchase",
"OfferName": "AddSIMO",
"OfferVariant": "OfferVariantDefault",
"TreatmentName": "AddSIMO_Web",
"TreatmentVariant": "Default",
"Outcome": "Clicked", //App Team Sets the Outcome
}535600 SetNBAResponse - Options To Buy (OTB) page response capture
App Yes
DB No
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  A r e a Y e s / N o C o m m e n t s
PM Tool No
App Yes
DB No  A r e a Y e s / N o C o m m e n t s


1526
NBA FW - Check cross sell headline discount for legal compliance (2nd line PP)
 Impact in Other areas
Dependencies
PM Dependencies: AOMBusinessConfig DataType
Note: Default value for legal requirement should be confirmed (TBC)
Logic Changes:
Create a config item in the AOMBusinessConfig datatype for Legal Compliance. Also this config item should be added to PM Catalogue
changes.
Create New Strategy (TBC)
Modify existing strategy: IdentifyMaxDiscountForTariffType535549 Check cross sell headline discount for legal compliance (2nd line PP)
App No
DB No
Knowledge Transfer No
PM Tool Yes
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool Yes
App No
DB No  Area Yes/No Comments
LegalRequirementforSecondLine(TBC) LegalRequirementforSecondLine(TBC) 15 (TBC)ConfigType ConfigName ConfigValue


1527
Logic Changes:
In the AOM
Create SR property LegalCompliance(TBC) of type Text.
Create new Strategy GetLegalComplianceTariffs(TBC):
Import existing sub strategies GetDataSIMOTariffs,GetSIMOAndHandsetTariffsconnect it to the existing Substrategy AssignTierToTariffs.
Connect the Substrategy to the group by component, "Group by TariffType and TariffTier" and do group by on TariffType and TariffTier.
In the set property called "Set Legal Requirement value" and set
.LegalCompliance(TBC)=@if(D_VFUKFWAOMFWDataAOMBusinessConfig[ConfigType:LegalRequirementforSecondLine,ConfigName:
LegalRequirementforSecondLine].ConfigValue!="",@ToInt(D_VFUKFWAOMFWDataAOMBusinessConfig[ConfigType:LegalRequiremen
tforSecondLine,ConfigName:LegalRequirementforSecondLine].ConfigValue),0)
Note: Default value should be 0 or other number should be confirmed
Join the group by to the filter called "Tariffs compliance with Legal Requirement" and in the filter, add the condition as
.Count>=SetLegalCompliance.LegalCompliance
And join the filter to the result component

Update IdentifyMaxDiscountForTariffType Strategy:
DiscountForTariffTierHigh12M
DiscountForTariffTierMedium12M
DiscountForTariffTierLow12M
DiscountForTariffTierHigh24M