2884
v with a given Service
Identifier
TariffIdentifier,
RelationshipType,
DefaultInd,
RexAutoAddInd are
returned as a list
VFUK-FW-AOMFW-Data-
ServiceTariffCompatibilityCompatibleServicesForTa
riffReport Definition Identifier → Tariff
IdentifierQueries to the
aom.pc_service_tariff_comp_
v with a given Tariff Identifier
AccServicesIdentifier,
RelationshipType,
DefaultInd,
RexAutoAddInd are
returned as a list
Rule Class/LibraryRule Name Rule Type Parameter(s) Implementation


2885
AOMUtilities GetTariffsForServiceFunction serviceIdentifier → Service
Identifier
deparmentIdentifier →
Department Identifier
tariffsForServicePage →
Return page for pxResultsInput validation is applied for each
input parameter. If the input is null or
empty, a runtimeexception is thrown
D_EligibleTariffsForDept data page
is called with departmentIdentifier
parameter and results stored in
eligibleTariffsForDept
ClipboardPage
D_CompTariffIdsForService data
page is called with identifier
parameter and compatible results
stored in compTariffForService
ClipboardPage
If eligibleTariffsForDept
ClipboardPage has any error, the
D_EligibleTariffsForDept is
removed. Else if,
compTariffForService has any error
D_CompTariffIdsForService is
removed
The results from
compTariffForService
ClipboardPage will be stored in a
HashMap
compTariffsForServiceMap with
the TariffId as the key. This is so that
that the matching eligibleTariffId can
be found.
All the results from
eligibleTariffsForDept
ClipboardPage is stored in
eligibleTariffsForDeptResults
ClipboardProperty
ClipboardPage resultPage will be
used to append all the required
properties. resultPage will be
returned from the function.
Looped through the each element of
eligibleTariffsForDeptResults. For
each identifer, we need to find the
matching compTariffId in the
HashMap
compTariffsForServiceMap.  For
each match, we will append the new
properties to resultPage.
The resultPage is added to


each match, we will append the new
properties to resultPage.
The resultPage is added to
pxResults to return.
AOMUtilities GetServicesForTariffFunction tariffIdentifier → Service
IdentifierThe same implementation as above


2886
deparmentIdentifier →
Department Identifier
servicesForTariffPage→
Return page for pxResults


2887
User Story 336092 - Siebel Tariff to Discount Compatibility Data
Story
Ensure that the new Siebel Tariff to Discount Compatibility Data  (including product Cardinality ) is available so that it can be used by the
decisioning logic.
The Tariff to Discount Data Table includes the following additional fields:
RELATIONSHIP_TYPE
DEFAULT_IND
REX_AUTOADD_IND
The feeds need to cover the following datafeed:
TARIFF_DISCOUNT_COMP feed

Design
Data page D_CompDiscountIdsForTariff - currently takes parameter Tariff ID and returns a list of matching Discount IDs from
pc_tariff_discount_comp_v.
Replace D_CompDiscountIdsForTariff with new data page D_CompDiscountsForTariff which will return matching Discount IDs as
well as new fields: RelationshipType, DefaultIND, RexAutoAddInd.
Create new Report Definition CompatibleDiscountsForTariff to return all required fields.
New fields need to be mapped to D_DiscountsForTariff data page.
AOMUtilities.GetDiscountsForTariff(String,String,ClipboardPage) should be updated.
D_CompDiscountsF
orTariff VFUK-FW-
AOMFW-Data-
TariffDiscountCo
mpatibility8 Identifi
er →
Tariff
Identifi
erCompati
bleDisco
untsForT
ariff Report
DefinitionNA NA All Discount
detailsData Page Name Class Refresh
strategy in
hoursParam
eter(s)Source
Rule
Level 1Source Rule
Level 1 TypeSource
Rule Level
2Source
Rule
Level 2
TypeResults
VFUK-FW-AOMFW-Data-
TariffDiscountCompatibilit
yCompatibleDiscountsForT


VFUK-FW-AOMFW-Data-
TariffDiscountCompatibilit
yCompatibleDiscountsForT
ariff Report Definition Identifier → Tariff
IdentifierQueries to the
aom.pc_tariff_discount
_comp_v with a given
Tariff Identifier
DiscountIdentifier,
RelationshipType,
DefaultInd,
RexAutoAddInd are
returned as a listRule/Class Library Rule Name Rule Type Parameter(s) Implementation


2888
AOMUtilities GetDiscountsForTariffFunction Identifier → Tariff Identifier
deparmentIdentifier →
Department Identifier
page → Return page for
pxResultsInput validation is applied for
each input parameter. If the
input is null or empty, a
runtimeexception is thrown
D_EligibleDiscountsForDept
data page is called with
departmentIdentifier
parameter and results stored in
eligibleDiscountsForDept
ClipboardPage
D_CompDiscountsForTariff
data page is called with
identifier parameter and
compatible results stored in
compDiscountsForTariff
ClipboardPage
If eligibleDiscountsForDept
ClipboardPage has any error,
the
D_EligibleDiscountsForDept
is removed. Else if,
compDiscountsForTariff has
any error
D_CompDiscountsForTariff is
removed
The results from
compDiscountsForTariff
ClipboardPage will be stored in
a HashMap
compDiscountsForTariffMap
with the DiscountIdentifier as
the key. This is so that that the
matching eligibleDiscountId can
be found.
All the results from
eligibleDiscountsForDept
ClipboardPage is stored in
eligibleDiscountsForDeptRes
ults ClipboardProperty
ClipboardPage resultPage will
be used to append all the
required properties. resultPage
will be returned from the
function.
Looped through the each
element of
eligibleDiscountsForDeptRes
ults . For each identifer, we
need to find the matching
compDiscountId in the Rule Class/Library Rule Name Rule Type Parameter(s) Implementation


2889
HashMap
compDiscountsForTariffMap .
For each match, we will append
the new properties to
resultPage.
The resultPage is added to
pxResults to return.


2890
Flush Data Pages for Loader Case Sub Types
ClearEntitiyCache Activity
FlushDataPage Activity
Store the list of datapages that needs to be flushed for each entities in FlushDataPage activity
pc_accessories D_SellableAccessoriesByIdentifier, D_SellableAccessories
pc_acct_service D_AccountService,D_ServicesForTariff, D_InsurancesForHandset
pc_acct_service_dept_elig D_InsurancesForHandset, D_ServicesForTariff
pc_barred_product D_SellableBars
pc_discount D_Discount, D_DiscountsForTariff
pc_discount_dept_elig D_DiscountsForTariff
pc_handset_service_comp NA
pc_handset_tariff_comp D_EligibleTariffsForHandset
pc_marketing_service NA
pc_payg_handset NA
pc_paym_handset D_PaymHandset, D_EligibleHandsetsForTariff, D_InsurancesForHandset,
D_EligibleTariffsForHandset,D_SellablePaymHandsetBySKU,D_SellablePaymHandsets
pc_service_handset_comp D_InsurancesForHandset
pc_service_service_incomp D_InCompServiceIdsForService
pc_service_tariff_comp D_ServicesForTariff
pc_tariff_dept_elig D_EligibleTariffsForDept
pc_tariff_discount_comp D_DiscountsForTariff
pc_tariff_handset_comp D_EligibleHandsetsForTariff
pc_tariff_service_comp NA
pc_tariff D_Tariff, D_EligibleTariffsForDept, D_CalculatedOffersForUpgrade,
D_EligibleTariffsForHandset, D_DiscountsForTariff, D_EligibleHandsetsForTariff,
D_ServicesForTariff


D_ServicesForTariff
oc_bundle_channel_elig D_CalculatedOffersForUpgrade
oc_bundle_dept_elig  D_CalculatedOffersForUpgrade
oc_bundle_dept_elig D_CalculatedOffersForUpgrade
oc_bundle D_CalculatedOffersForUpgrade
oc_bundle_qualifier D_CalculatedOffersForUpgradeEntity Name DataPagesToFlush


2891

 oc_bundle_qualifier_reward D_EligibleCombiBundleQualifierReward, D_CalculatedOffersForUpgrade
oc_bundle_exclusion D_CalculatedOffersForUpgrade
This activity loop through the latest entity state for each loader entity and calls FlushDataPage activity.
Applies To VFUK-FW-AOMFW-Work-Loader
Ruleset AOMFW
Input Parameters N/A
Output ParametersN/A
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapageClearEntitiyCache Activity
This activity collects the list of datapages to be flushed using data transform “PrepareDataPageListForFlush” based on the loader entity
name and case sub type, perform datapage flush operation on each datapage.
Applies To VFUK-FW-AOMFW-Work-Loader
Ruleset AOMFW
Input Parameters EntityName
Output ParametersN/A
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapageFlushDataPage Activity


2892
Product Catalogue Data Pages

D_Tariff
GetT ariff Activity
D_Discount
GetDiscount Activity
D_AccountService
GetAccountService Activity
D_PaymHandset
GetPayMHandset Activity
D_SellablePaymHandsetBySKU
GetSellablePaymHandsetBySKU Activity
D_SellablePaymHandsets
GetSellablePaymHandsets  Activity
D_SellableBars
GetSellableBars Activity
D_SellableAccessories
GetSellableAccessories Activity
D_DiscountsForT ariff
GetDiscountsForT ariff Activity
pc_discounts_tarif f_v
D_EligibleT ariffs
GetT ariffsForDept Activity
pc_eligible_tarif fs_dept_v
D_ServicesForT ariff
GetServicesForT ariff Activity
pc_services_tarif f_v
D_EntertainmentServicesForT ariff
GetEntertainmentServicesForT ariff Activity
D_EligibleT ariffsForHandset
GetT ariffsForHandset Activity
pc_eligible_tarif fs_handset_v
D_EligibleHandsetsForT ariff
GetHandsetsForT ariff Activity
pc_eligible_handsets_tarif f_v
D_InCompServiceIdsForService
GetServicesForService Activity
D_InsurancesForHandset
GetInsuranceServicesForHandset Activity
pc_insurance_service_handset_dept_v
D_CustomerT ariffAndDiscountList
GetCustomerT ariffAndDiscountList Activity
D_SellableAccessoriesByIdentifier
GetSellableAccessoriesByIdentifier Activity
D_Bars
GetBars Activity


2893
Cache W arm Up Changes - EligibleT ariffs

 This data page returns the tariff details for given tariff identifier. The data page can be consumed as below
D_Tariff[Identifier:"P_111148”].Page
Structure Page
Object Type VFUK-FW-AOMFW-Data-Tariff
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetTariff
Input Parameters Identifier
Load Management  - Reload
if older thanReload once per interactionD_Tariff
This activity browses the Tariff cassandra dataset; if the dataset has record then copies the results into primary page, else executes the
GetTariffDetails Connect SQL rule to retrieve the records from the database table for the selected columns as configured in AOMConfig
PropertyNames and copies the results into both the primary page and the cassandra dataset.
Applies To VFUK-FW-AOMFW-Data-Tariff
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys Identifier
Connect SQL Query: select
{ASIS:PropertyNames}
from
pc_tariff_v
left join product_attributes on
product_attributes.identifier = pc_tariff_v.identifier
where
pc_tariff_v.identifier = '{ASIS:Identifier}'GetTariff Activity
This data page returns the discount  details for given discount  identifier and populates ProductAttributes data type. The data page can be
consumed as below
D_Discount[Identifier:"DP_111110"].Page
Structure PageD_Discount


2894
Object Type VFUK-FW-AOMFW-Data-Discount
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetDiscount
Input Parameters Identifier
Load Management  - Reload
if older thanReload once per interaction
This activity browses the Discount cassandra dataset; if the dataset has record then copies the results into primary page, else executes the
GetDiscountDetails Connect SQL rule to retrieve the records from the database table for the selected columns as configured in AOMConfig
PropertyNames and copies the results into both the primary page and the cassandra dataset.
Applies To VFUK-FW-AOMFW-Data-Discount
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys Identifier
Connect SQL Query: select
{ASIS:PropertyNames}
from
pc_discount_v
where
Identifier = '{ASIS:Identifier}'GetDiscount Activity
This data page returns the account service details for given service identifier. The data page can be consumed as below
D_AccountService[Identifier:"S_110177"].Page
Structure Page
Object Type VFUK-FW-AOMFW-Data-AccountService
Mode Read-Only
Ruleset AOMFW-Database
Dataset Keys Identifier
Scope Thread
Data Source GetAccountService
Input Parameters Identifier
Load Management  - Reload Reload once per interactionD_AccountService


2895
if older than
Connect SQL Query: {SQLPage:SQLDiagnostics}
select
{ASIS:PropertyNames}
from
pc_acct_service_v
left join product_attributes on
product_attributes.identifier = pc_acct_service_v.identifier
where
pc_acct_service_v.identifier = '{ASIS:Identifier}'
This activity browses the AccountService cassandra dataset; if the dataset has record then copies the results into primary page, else
executes the GetAccountServiceDetails Connect SQL rule to retrieve the records from the database table for the selected columns as
configured in AOMConfig PropertyNames and copies the results into both the primary page and the cassandra dataset.
Applies To VFUK-FW-AOMFW-Data-AccountService
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys Identifier
Connect SQL Query: select
{ASIS:PropertyNames}
from
pc_acct_service_v
where
Identifier = '{ASIS:Identifier}'GetAccountService Activity
This data page returns the paymhandset details for given paymhandset identifier. The data page can be consumed as below
D_PaymHandset[Identifier:"H_097421"].Page
Structure Page
Object Type VFUK-FW-AOMFW-Data-PaymHandset
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetPaymHandset
Input Parameters Identifier
Load Management - Reload
if older thanReload once per interactionD_PaymHandset


2896
 This activity browses the PaymHandset cassandra dataset; if the dataset has record then copies the results into primary page, else
executes the GetPaymHandset Connect SQL rule to retrieve the records from the database table for the selected columns as configured
in AOMConfig PropertyNames and copies the results into both the primary page and the cassandra dataset.
Applies To VFUK-FW-AOMFW-Data-PaymHandset
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys Identifier
Connect SQL Query: {SQLPage:SQLDiagnostics}
select {ASIS:PropertyNames} from pc_paym_handset_v left join product_attributes on
product_attributes.identifier=pc_paym_handset_v .identifier where
pc_paym_handset_v.Identifier='{ASIS:Identifier}'GetPayMHandset Activity
This data page returns the list of sellable pay monthly handsets that are active in catalogue (i.e currentdate is between startdate and
enddate) and configured to be sellable in business metadata (product_atttributes) for given channel(SellableChannels) and team
(SellableTeams) when sellable channel is InboundCC.
The data page can be consumed as below
D_SellablePaymHandsetBySKU[SKUs:"097421,200399,097621",Channel:”InboundCC”,Team:”Omni”, “OrderType“:”Upgrade”]
Product Attributes Example: {"DeviceType":"Handset","IsSellable":true, "SellableChannels": "Retail|Web|InboundCC", "HandsetModel":
"Samsung","SellableTeams": "Omni|Saves",“NotSellableBy“:”Web_Upgrade”}
Structure Page List


Structure Page List
Object Type VFUK-FW-AOMFW-Data-PaymHandset
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetSellablePaymHandsetBySKU
Input Parameters SKUs (SKUs List - Comma Seperated), Channel - Mandatory, Team - Optional (if Channel is InboundCC
then it is Mandatory), OrderType - Mandatory
Load Management - Reload
if older thanReload once per interactionD_SellablePaymHandsetBySKU
This activity browses the GetSellablePaymHandsetBySTC cassandra dataset  for given SKU, Channel and Team (N/A if input is empty),
OrderType ; if the dataset has record then copies the results into primary page, else executes the GetSellablePaymHandsetBySKU Connect
SQL rule to retrieve the records from the database table for the selected columns as configured in AOMConfig PropertyNames and copies
the results into both the primary page and the cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-DatabaseGetSellablePaymHandsetBySKU Activity


2897
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys SKU, Channel, Team, OrderType
Connect SQL Query:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25{SQLPage:SQLDiagnostics}
select
{ASIS:PropertyNames}
from
pc_paym_handset_v
left join product_attributes on
product_attributes.identifier = pc_paym_handset_v .identifier
    where
(pc_paym_handset_v .start_date <= CURRENT_DATE
or pc_paym_handset_v .start_date is null)
and (pc_paym_handset_v .end_date >= CURRENT_DATE
or pc_paym_handset_v .end_date is null)
    and pc_paym_handset_v.Sku='{ASIS:SKU}'
    and (product_attributes.identifier is NULL
or product_attributes.attributes::json->>'SellableChannels' like '%|{ASIS:Channel}
and product_attributes.attributes::json->>'IsSellable' = 'true'
and product_attributes.attributes::json->>'OrderType' like '%|{ASIS:OrderType}|%'
    and product_attributes.attributes::json->>'NotSellableBy' not like '%{ASIS:Channel}
and
case
when ('{ASIS:Channel}' in ('InboundCC')
and (product_attributes.attributes::json->>'SellableTeams' is null
or product_attributes.attributes::json->>'SellableTeams' not like '%|{ASIS:Team
else 0
end = 0)


else 0
end = 0)
This data page returns the list of sellable pay monthly handsets that are active in catalogue (i.e current date is between startdate and
enddate) and configured to be sellable in business metadata (product_atttributes) for given device type(DeviceType),
channel(SellableChannels), order type and team (SellableTeams) when sellable channel is InboundCC.
The data page can be consumed as below
D_SellablePaymHandsets[DeviceType:"Watch",Channel:”InboundCC”,Team:”Omni”,“OrderType”:”Upgrade”]
Product Attributes Example: {"DeviceType":"Handset","IsSellable":true, "SellableChannels": "Retail|Web|InboundCC", "HandsetModel":
"Samsung","SellableTeams": "Omni|Saves", “NotSellableBy“:”Web_Upgrade”}
Structure Page List
Object Type VFUK-FW-AOMFW-Data-PaymHandset
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetSellablePaymHandsets
Input Parameters DeviceType - Mandatory (LOV: Watch, Handset, Data Device), Channel - Mandatory, Team - Optional (if
Channel is InboundCC then it is Mandatory), OrderType - Mandatory
Load Management  - Reload once per interactionD_SellablePaymHandsets


2898
Reload if older than
This activity browses the SellablePaymHandsetsForDCT cassandra dataset for given DeviceType, Channel, OrderType and Team (N/A if
input is empty); if the dataset has record then copies the results into primary page, else executes the GetSellablePaymHandsets Connect
SQL rule to retrieve the sellable pay monthly handsets from the database table for the selected columns as configured in AOMConfig
PropertyNames and copies the results into both the primary page and the cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys DeviceType, Channel,Team, OrderType, Identifier
Connect SQL Query:GetSellablePaymHandsets  Activity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26{SQLPage:SQLDiagnostics}
select
{ASIS:PropertyNames}
from
pc_paym_handset_v
left join product_attributes on
product_attributes.identifier = pc_paym_handset_v .identifier
    where
(pc_paym_handset_v .start_date <= CURRENT_DATE
or pc_paym_handset_v .start_date is null)
and (pc_paym_handset_v .end_date >= CURRENT_DATE
or pc_paym_handset_v .end_date is null)
    and (product_attributes.identifier is NULL
or product_attributes.attributes::json->>'SellableChannels' like '%|{ASIS:Channel}|
and product_attributes.attributes::json->>'IsSellable' = 'true'


and product_attributes.attributes::json->>'IsSellable' = 'true'
and product_attributes.attributes::json->>'OrderType' like '%|{ASIS:OrderType}|%'
and product_attributes.attributes::json->>'NotSellableBy' not like '%{ASIS:Channel}
    and
case
when ('{ASIS:Channel}' in ('InboundCC')
and (product_attributes.attributes::json->>'SellableTeams' is null
or product_attributes.attributes::json->>'SellableTeams' not like '%|{ASIS:Team
else 0
end = 0)
    and product_attributes.attributes::json->>'DeviceType' = '{ASIS:DeviceType}'
This data page returns the list of sellable barred products that are active in catalogue (i.e current date is between startdate and enddate) and
configured to be sellable in business metadata (product_atttributes) for given channel(SellableChannels), order type and team
(SellableTeams) when sellable channel is InboundCC.
The data page can be consumed as below
D_SellableBars[Channel:”InboundCC”,Team:”Omni”, “OrderType”:”Upgrade”]
Product Attributes Example: {"IsSellable":true, "SellableChannels": "Retail|Web|InboundCC","SellableTeams": "Omni|Saves",
“NotSellableBy“:”Web_Upgrade”}
 D_SellableBars


2899
 Structure Page List
Object Type VFUK-FW-AOMFW-Data-BarredProduct
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetSellableBars
Input Parameters Channel - Mandatory, Team - Optional (if Channel is InboundCC then it is Mandatory), OrderType -Mandatory
Load Management  -
Reload if older thanReload once per interaction
This activity browses the SellableBars cassandra dataset for given Channel, Team (N/A if input is empty) and OrderType; if the dataset has
record then copies the results into primary page, else executes the GetSellableBars Connect SQL rule to retrieve the sellable bars from the
database table for the selected columns as configured in AOMConfig PropertyNames and copies the results into both the primary page and
the cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys Channel,Team, OrderType, Identifier
Connect SQL Query:GetSellableBars Activity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23{SQLPage:SQLDiagnostics}
select
    {ASIS:PropertyNames}
from
       pc_barred_product_v
left join product_attributes on
       product_attributes.identifier = pc_barred_product_v.identifier
  where
     (pc_barred_product_v.start_date <= CURRENT_DATE
     or pc_barred_product_v.start_date is null)
     and (pc_barred_product_v.end_date >= CURRENT_DATE
     or pc_barred_product_v.end_date is null)


or pc_barred_product_v.end_date is null)
  and product_attributes.attributes::json->>'IsSellable' = 'true'
  and product_attributes.attributes::json->>'OrderType' like '%|{ASIS:OrderType}|%'
  and product_attributes.attributes::json->>'SellableChannels' like '%|{ASIS:Channel}|%
  and product_attributes.attributes::json->>'NotSellableBy' not like '%{ASIS:Channel}'|
and
case
   when ('{ASIS:Channel}' in ('InboundCC')
and (product_attributes.attributes::json->>'SellableTeams' is null
or product_attributes.attributes::json->>'SellableTeams' not like '%|{ASIS:Team
else 0
end = 0


2900
 This data page returns the list of sellable accessories products that are active in catalogue (i.e current date is between startdate and
enddate) and configured to be sellable in business metadata (product_atttributes) for given channel(SellableChannels) , order type and team
(SellableTeams) when sellable channel is InboundCC.
The data page can be consumed as below
D_SellableAccessories[Channel:”InboundCC”,Team:”Omni”, OrderType:”Upgrade”]
Product Attributes Example: {"IsSellable":true, "SellableChannels": "Retail|Web|InboundCC","SellableTeams": "Omni|Saves"}
Structure Page List
Object Type VFUK-FW-AOMFW-Data-Accessories
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetSellableAccessories
Input Parameters Channel - Mandatory, Team - Optional (if Channel is InboundCC then it is Mandatory), OrderType -Mandatory
Load Management  -
Reload if older thanReload once per interactionD_SellableAccessories
This activity browses the SellableAccessories cassandra dataset for given Channel and Team (N/A if input is empty); if the dataset has
record then copies the results into primary page, else executes the GetSellableAccessories Connect SQL rule to retrieve the sellable
Accessories from the database table for the selected columns as configured in AOMConfig PropertyNames and copies the results into both
the primary page and the cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys Channel,Team, OrderType, Identifier
Connect SQL Query:GetSellableAccessories Activity
1
2


Connect SQL Query:GetSellableAccessories Activity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18{SQLPage:SQLDiagnostics}
select
    {ASIS:PropertyNames}
from pc_accessories_v  left join
     product_attributes on product_attributes.identifier = pc_accessories_v.identifier
  where
     (pc_accessories_v.start_date <= CURRENT_DATE
     or pc_accessories_v.start_date is null)
     and (pc_accessories_v.end_date >= CURRENT_DATE
     or pc_accessories_v.end_date is null)
  and product_attributes.attributes::json->>'IsSellable' = 'true'
  and product_attributes.attributes::json->>'OrderType' like '%|{ASIS:OrderType}|%'
  and product_attributes.attributes::json->>'SellableChannels' like '%|{ASIS:Channel}|%
  and product_attributes.attributes::json->>'NotSellableBy' not like '%{ASIS:Channel}'|
and
case
   when ('{ASIS:Channel}' in ('InboundCC')
and (product_attributes.attributes::json->>'SellableTeams' is null


2901
19
20
21or product_attributes.attributes::json->>'SellableTeams' not like '%|{ASIS:Team
else 0
end = 0
This data page returns the selected properties as configured in AOMConfig for the list of eligible discounts for a given department  and
configured to be sellable in business metadata (product_atttributes) for given channel (SellableChannels) and team(SellableTeams) if
channel is InboundCC, OrderType. Find below example on how to use this data page for upgrade journey on different channels.
InboundCC: D_DiscountsForTariff[Identifier:”P_111826”,DepartmentsIdentifier :”Administration
Accenture”,OrderType:”Upgrade”,Channel:”InboundCC”,Team:”Omni”]
Web: D_DiscountsForTariff[Identifier:”P_111826”,OrderType:”Upgrade”,Channel:”Web”], Consider DepartmentsIdentifier (Optional) if
provided
Product Attributes Example: {"OrderType": "Upgrade|Modify|New Acquisition|Migration","IsSellable":true, "SellableChannels":
"Retail|Web|InboundCC", "SellableTeams": "Omni|Saves"}
Structure Page List
Object Type VFUK-FW-AOMFW-Data-DiscountForTariff - View
Mode Read-Only
Ruleset AOMFW-Database
Scope Node
Data Source GetDiscountsForTariff
Input Parameters DepartmentsIdentifier (Optional), TariffsIdentifier, Channel, Team (Optional), OrderType
Load Management  -
Reload if older thanReload once per interactionD_DiscountsForTariff
This activity browses the DiscontsForTariffDOCT cassandra dataset; if the dataset has record then copies the results into primary page,


else executes the GetDiscountsForTariff Connect SQL rule to retrieve the records from the database table for the selected columns as
configured in AOMConfig PropertyNames and copies the results into both the primary page and the cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys DepartmentsIdentifier (Optional), TariffsIdentifier, Channel, Team (Optional), OrderType
Connect SQL Query:GetDiscountsForTariff Activity
1
2
3
4
5
6
7
8
9{SQLPage:SQLDiagnostics}
with tmp
AS (
select
{ASIS:PropertyNames}
from
pc_discounts_tariff_v
left join product_attributes on
product_attributes.identifier = pc_discounts_tariff_v.identifier


2902

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33where
   tariffs_identifier = '{ASIS:TariffsIdentifier}'
   and  SellableDepartment not in ('{ASIS:DepartmentsIdentifier}')
   and product_attributes.attributes::json->>'OrderType' like '%|{ASIS:OrderType}|%'
    and (product_attributes.identifier is NULL
or product_attributes.attributes::json->>'SellableChannels' like '%|{ASIS:Channel}|
and product_attributes.attributes::json->>'IsSellable' = 'true'
and product_attributes.attributes::json->>'NotSellableBy' not like '%{ASIS:Channel}
    and
    case
when ('{ASIS:Channel}' in ('InboundCC')
           and (product_attributes.attributes::json->>'SellableTeams' is null
                     or product_attributes.attributes::json->>'SellableTeams' n
else 0
end = 0)
)
select * from tmp
where 1 =
 case
      when ('N/A' = '{ASIS:DepartmentsIdentifier}'
            or ".DepartmentsIdentifier" IN ('{ASIS:DepartmentsIdentifier}') ) then 1
      else 0
 end
 pc_discounts_tariff_v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29create or replace
view aom.pc_discounts_tariff_v as
select
pdv.change_id,
pdv.identifier,
pdv.name,


select
pdv.change_id,
pdv.identifier,
pdv.name,
pdv.amount,
pdv.type,
pdv.duration,
pdv.discountproductfulfilmentcode,
pdv.level,
pdv.product_class,
pdv.start_date,
pdv.end_date,
ptdcv.discount_identifier,
coalesce(pddev.departments_identifier, '*'::character varying) as departments_identifier,
ptdcv.default_ind,
ptdcv.promotion_ind,
ptdcv.relationship_type,
ptdcv.rex_autoadd_ind,
ptdcv.tariffs_identifier,
coalesce(dns.departments_identifier, 'NA'::character varying) as sellabledepartment
from
pc_discount_v pdv
join pc_tariff_discount_comp_v ptdcv on
ptdcv.discount_identifier::text = pdv.identifier::text
left join discount_not_sellable dns on
dns.discount_identifier::text = pdv.identifier::text
left join pc_discount_dept_elig_v pddev on


2903

30
31
32
33
34
35
36
37
38pddev.discount_identifier::text = pdv.identifier::text
join pc_tariff_v ptv on
ptv.identifier::text = ptdcv.tariffs_identifier::text
and ptdcv.tariffs_identifier::text = ptv.identifier::text
where
(pdv.start_date <= 'now'::text::date
or pdv.start_date is null)
and (pdv.end_date >= 'now'::text::date
or pdv.end_date is null);
This data page returns the selected properties as configured in AOMConfig for the list of eligible tariffs for a given department and configured
to be sellable in business metadata (product_atttributes) for given channel (SellableChannels) and team(SellableTeams) if channel is
InboundCC, OrderType. Find below example on how to use this data page for upgrade journey on different channels.
InboundCC: D_EligibleTariffs[DepartmentsIdentifier :”Administration Accenture”,OrderType:”Upgrade”,Channel:”InboundCC”,Team:”Omni”]
Web: D_EligibleTariffs[OrderType:”Upgrade”,Channel:”Web”] ,Consider DepartmentsIdentifier (Optional) if provided
Product Attributes Example: {"OrderType": "Upgrade|Modify|New Acquisition|Migration","IsSellable":true, "SellableChannels":
"Retail|Web|InboundCC", "SellableTeams": "Omni|Saves"}
Structure Page List
Object Type VFUK-FW-AOMFW-Data-EligibleTariffForDept - View
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetTariffsForDept


Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetTariffsForDept
Input Parameters DepartmentsIdentifier - Optional (if Channel is InboundCC it is Mandatory), OrderType, Channel - Mandatory,
Team - Optional (if Channel is InboundCC it is Mandatory)
Load Management  -
Reload if older thanReload once per interactionD_EligibleTariffs
This activity browses the EligibleTariffsDOCT cassandra dataset for given department identifier (N/A if input is empty),  Channel and Team
(N/A if input is empty); if the dataset has record then copies the results into primary page, else executes the GetTariffsForDept Connect
SQL rule to retrieve the records from the database table for the selected columns as configured in AOMConfig PropertyNames and
populates the attributes from product_attributes table pushed by PM tool then copies the results into both the primary page and the
cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
DataSet Keys DepartmentsIdentifier, OrderType, Channel, Team, IdentifierGetTariffsForDept Activity


2904
Connect SQL Query:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23{SQLPage:SQLDiagnostics}
select
{ASIS:PropertyNames}
from
pc_eligible_tariffs_dept_v
where
    attributesjson::json->>'OrderType' like '%|{ASIS:OrderType}|%'
and attributesjson::json->>'SellableChannels' like '%|{ASIS:Channel}|%'
and attributesjson::json->>'IsSellable' = 'true'
and product_attributes.attributes::json->>'NotSellableBy' not like '%{ASIS:Channel
and
case
when ('InboundCC' in ('{ASIS:Channel}')
and (attributesjson::json->>'SellableTeams' is null
or attributesjson::json->>'SellableTeams' not like '%|{ASIS:Team}|%')) then 1
else 0
end = 0
and
case
when ('N/A' in ('{ASIS:DepartmentsIdentifier}')
or departments_identifier =  '{ASIS:DepartmentsIdentifier}') then 1
else 0
end = 1
 pc_eligible_tariffs_dept_v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20CREATE OR REPLACE VIEW aom.pc_eligible_tariffs_dept_v
AS SELECT COALESCE(ptdev.departments_identifier, '*'::character varying) AS departments_identifier,ptv.change_id,


ptv.simonly,ptv.sms,ptv.tariffproductfulfilmentcode,ptv.cost,ptv.category,ptv.tariffcontractlengthreqd,ptv.tariff
ptv.fwc,ptv.vmi,ptv.intl,ptv.insurance,ptv.fam,ptv.blkberry,ptv.vsra,ptv.tariffgroup1,ptv.promotiondesc,ptv.servi
pa.attributes AS attributesjson,
        CASE
            WHEN (ptv.tariffproductfulfilmentcode::text IN ( SELECT obqv.lineid
               FROM oc_bundle_qualifier_v obqv)) THEN true
            ELSE false
        END AS canqualifyvftogether,
        CASE
            WHEN (ptv.identifier::text IN ( SELECT pstcv.tariffs_identifier
               FROM pc_service_tariff_comp_v pstcv
                 JOIN product_attributes pa2 ON pstcv.acc_services_identifier::text = pa2.identifier::text AND (p
            ELSE false
        END AS entertainmentflag
   FROM pc_tariff_v ptv
     LEFT JOIN pc_tariff_dept_elig_v ptdev ON ptdev.tariff_identifier::text = ptv.identifier::text
     LEFT JOIN product_attributes pa ON ptv.identifier::text = pa.identifier::text
  WHERE (ptv.start_date <= 'now'::text::date OR ptv.start_date IS NULL) AND (ptv.end_date >= 'now'::text::date OR
This data page returns the selected properties as configured in AOMConfig for the list of eligible services for a given department  and
configured to be sellable in business metadata (product_atttributes) for given channel (SellableChannels) and team(SellableTeams) if
channel is InboundCC, OrderType. Find below example on how to use this data page for upgrade journey on different channels.


InboundCC: D_DiscountsForTariff[Identifier:”P_111826”,DepartmentsIdentifier :”Administration
Accenture”,OrderType:”Upgrade”,Channel:”InboundCC”,Team:”Omni”]D_ServicesForTariff


2905
Web: D_DiscountsForTariff[Identifier:”P_111826”,OrderType:”Upgrade”,Channel:”Web”], Consider DepartmentsIdentifier (Optional) if
provided
Product Attributes Example: {"OrderType": "Upgrade|Modify|New Acquisition|Migration","IsSellable":true, "SellableChannels":
"Retail|Web|InboundCC", "SellableTeams": "Omni|Saves"}
Structure Page List
Object Type VFUK-FW-AOMFW-Data-ServiceForTariff- View
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetServicesForTariff
Input Parameters DepartmentsIdentifier (Optional), TariffsIdentifier, Channel, Team (Optional), OrderType
Load Management  - Reload
if older thanReload once per interaction
This activity browses the ServicesForTariffDOCT cassandra dataset; if the dataset has record then copies the results into primary page,
else executes the GetServicesForTariff Connect SQL rule to retrieve the records from the database table for the selected columns as
configured in AOMConfig PropertyNames and copies the results into both the primary page and the cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys DepartmentsIdentifier (Optional), TariffsIdentifier, Channel, Team (Optional), OrderType
Connect SQL Query:GetServicesForTariff Activity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23{SQLPage:SQLDiagnostics}
with tmp
AS (
select
{ASIS:PropertyNames}
from


with tmp
AS (
select
{ASIS:PropertyNames}
from
pc_services_tariff_v
left join product_attributes on
product_attributes.identifier = pc_services_tariff_v.identifier
where
    tariffs_identifier = '{ASIS:TariffsIdentifier}'
    and product_attributes.attributes::json->>'OrderType' like '%|{ASIS:OrderType}|%'
    and (product_attributes.identifier is NULL
or product_attributes.attributes::json->>'SellableChannels' like '%|{ASIS:Channel}
and product_attributes.attributes::json->>'IsSellable' = 'true'
and product_attributes.attributes::json->>'NotSellableBy' not like '%{ASIS:Channel
    and
    case
when ('{ASIS:Channel}' in ('InboundCC')
   and (product_attributes.attributes::json->>'SellableTeams' is null
or product_attributes.attributes::json->>'SellableTeams' not like
else 0
end = 0)


2906

24
25
26
27
28
29
30
31
32)
select * from tmp
where 1 =
 case
      when ('N/A' = '{ASIS:DepartmentsIdentifier}'
            or ".DepartmentsIdentifier" IN ('{ASIS:DepartmentsIdentifier}') ) then 1
      else 0
 end
 pc_services_tariff_v
1
2
3
4
5
6
7
8
9
10CREATE OR REPLACE VIEW aom.pc_services_tariff_v AS SELECT pasv.change_id,pasv.identifier,pasv.name,pasv.servicegr
pasv.cost,pasv.serviceinclusivesms,pasv.serviceinclusivedata,pasv.service_type,pasv.vat_code,pasv.cost_inc_vat,pa
pasv.unlimited_text,pasv.unlimited_on_net,pasv.fwc,pasv.vmi,pasv.intl,pasv.insurance,pasv.fam,pasv.blkberry,pasv.
pasv.wifi,pasv.internationalsms,pasv.level,pasv.start_date,pasv.end_date,pstcv.tariffs_identifier,pstcv.default_i
pstcv.rex_autoadd_ind,COALESCE(pasdev.departments_identifier, '*'::character varying) AS departments_identifier,p
FROM pc_acct_service_v pasv
JOIN pc_service_tariff_comp_v pstcv ON pstcv.acc_services_identifier::text = pasv.identifier::text
LEFT JOIN pc_acct_service_dept_elig_v pasdev ON pasdev.acc_services_identifier::text = pasv.identifier::text
JOIN pc_tariff_v ptv ON ptv.identifier::text = pstcv.tariffs_identifier::text AND pstcv.tariffs_identifier::text


(pasv.start_date <= 'now'::text::date OR pasv.start_date IS NULL) AND (pasv.end_date >= 'now'::text::date OR pasv
This data page returns the list of services  that has enabled entertainment using business metadata compatible for a given tariffs identifier.
The data page can be consumed as below
D_ServicesForTariff[Identifier:”P_111148”]
Example Buinsess Metadata:
Enabled: {"DefaultEntertainment": "true"}
Structure Page List
Object Type VFUK-FW-AOMFW-Data-ServiceForTariff- View
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetEntertainmentServicesForTariff
Input Parameters TariffsIdentifier
Load Management  - Reload
if older thanReload once per interactionD_EntertainmentServicesForTariff


2907
This activity browses the EntertainmentServicesForTariff cassandra dataset; if the dataset has record then copies the results into primary
page, else executes the GetEntertainmentServicesForTariff Connect SQL rule to retrieve the records from the database table for the distinct
service identifiers and copies the results into both the primary page and the cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys TariffsIdentifier, Identifier
Connect SQL Query: select distinct(pstv.identifier) from pc_services_tariff_v pstv, product_attributes pa
where tariffs_identifier='P_106401' and
pa.identifier =pstv.identifier  and
pa."attributes" :: json ->> 'DefaultEntertainment'='true';GetEntertainmentServicesForTariff Activity
This data page returns the list of eligible tariffs for a given handset identifier, order type, channel, team. Find below example on how to use
this data page for upgrade journey on different channels.
InboundCC: D_EligibleTariffsForHandset[Identifier:”H_202852”,OrderType:”Upgrade”,Channel:”InboundCC”,Team:”Omni”]
Web: D_EligibleTariffsForHandset[Identifier:”H_202852”,OrderType:”Upgrade”,Channel:”Web”]
Product Attributes Example:
{"OrderType": "Upgrade|Modify|New Acquisition|Migration","IsSellable":true, "SellableChannels": "Retail|Web|InboundCC", "SellableTeams":
"Omni|Saves"}


"Omni|Saves"}
{"OrderType": "ALL","IsSellable":true, "SellableChannels": "Retail|Web|InboundCC", "SellableTeams": "Omni|Saves"}

Structure Page List
Object Type VFUK-FW-AOMFW-Data-EligibleTariffForHandset - View
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetTariffsForHandset
Input Parameters HandsetsIdentifier, OrderType - Mandatory, Channel - Mandatory, Team - Optional (if Channel
is InboundCC it is Mandatory)
Load Management  - Reload
if older thanReload once per interactionD_EligibleTariffsForHandset
This activity browses the TariffsForHandsetOCT cassandra dataset for given handset identifier,  OrderType, Channel and Team (N/A if input
is empty); if the dataset has record then copies the results into primary page, else executes the GetTariffsForHandset Connect SQL rule to
retrieve the records from the database table for the selected columns as configured in AOMConfig PropertyNames and populates the
attributes from product_attributes table pushed by PM tool then copies the results into both the primary page and the cassandra dataset.
Applies To Code-Pega-ListGetTariffsForHandset Activity


2908
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys HandsetsIdentifier, OrderType, Channel, Team, , Identifier
Connect SQL Query:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18{SQLPage:SQLDiagnostics}
select
{ASIS:PropertyNames}
from
pc_eligible_tariffs_handset_v
where
handsets_identifier = '{ASIS:HandsetsIdentifier}'
and attributesjson::json->>'OrderType' like '%|{ASIS:OrderType}|%'
and attributesjson::json->>'SellableChannels' like '%|{ASIS:Channel}|%'
and attributesjson::json->>'IsSellable' = 'true'
and attributesjson::json->>'NotSellableBy' not like '%{ASIS:Channel}'||'_'||'{ASIS:OrderType
and
case
when ('{ASIS:Channel}' in ('InboundCC')
and (attributesjson::json->>'SellableTeams' is null
or attributesjson::json->>'SellableTeams' not like '%|{ASIS:Team}|%')) then 1
else 0
end = 0
 pc_eligible_tariffs_handset_v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21create or replace view aom.pc_eligible_tariffs_handset_v as


18
19
20
21create or replace view aom.pc_eligible_tariffs_handset_v as
select ptv2.change_id,ptv2.identifier,ptv2.name,ptv2.minutes,ptv2.serviceinclusivemms,ptv2.data,ptv2.duration,ptv
ptv2.tariffcontractlengthreqd,ptv2.tariffcontractlengthexisting,ptv2.tariffdatainclusion,ptv2.proposition,ptv
ptv2.mobile_broadband_ind,ptv2.ics_ind,ptv2.unlimited_land_line,ptv2.unlimited_text,ptv2.unlimited_on_net,ptv
ptv2.fam,ptv2.blkberry,ptv2.vsra,ptv2.tariffgroup1,ptv2.promotiondesc,ptv2.serviceinclusiveintlminutes,ptv2.s
ptv2.wifi,ptv2.roamingbundle,ptv2.mobiletariffplanid,ptv2.linerentalid,ptv2.segment_of_tariff,ptv2.band_value
ptv2.benefit_product,ptv2.benefit_ref,ptv2.start_date,ptv2.end_date,ptv2.package_band,ptv2.package_type,ptv2.
phtcv.handsets_cost,pphv.sku, pa.attributes as attributesjson,
case
when (ptv2.tariffproductfulfilmentcode::text in (select obqv.lineid from oc_bundle_qualifier_v obqv)) the
else false
end as canqualifyvftogether,
case
when (ptv2.identifier::text in (select pstcv.tariffs_identifier from pc_service_tariff_comp_v pstcv join


and (pa2.attributes::json ->> 'DefaultEntertainmentProduct'::text) = 'true'::text)) then true
else false
end as entertainmentflag
from
pc_tariff_v ptv2 join pc_handset_tariff_comp_v phtcv on ptv2.identifier::text = phtcv.tariffs_identifier::tex
    join pc_paym_handset_v pphv on phtcv.handsets_identifier::text = pphv.identifier::text and (ptv2.start_date <
and (ptv2.end_date >= 'now'::text::date or ptv2.end_date is null) left join product_attributes pa on ptv2.ide
This data page returns the list of handsets compatible for a given tariff identifier and configured to be sellable for for given device
type(DeviceType) channel (SellableChannels) and team(SellableTeams) if channel is InboundCC
The data page can be consumed as belowD_EligibleHandsetsForTariff


2909
D_EligibleHandsetsForTariff[Identifier:”P_111148”,DeviceType:”Handset”,Channel:”InboundCC”,Team:”Omni”]
Example: {"DeviceType":"Handset","IsSellable":true, "SellableChannels": "Retail|Web|InboundCC", "HandsetModel":
"Samsung","SellableTeams": "Omni|Saves"}
Structure Page List
Object Type VFUK-FW-AOMFW-Data-EligibleHandsetForTariff- View
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetHandsetsForTariff
Input Parameters TariffsIdentifier, DeviceType - Mandatory (LOV: Watch, Handset, Data Device), Channel - Mandatory,
Team - Optional (if Channel is InboundCC it is Mandatory), OrderType -Mandatory
Load Management  - Reload if
older thanReload once per interaction
This activity browses the HandsetsForTariffDCT cassandra dataset for given tariff identifier,  DeviceType, Channel and Team (N/A if input is
empty); if the dataset has record then copies the results into primary page, else executes the GetHandsetsForTariff Connect SQL rule to
retrieve the records from the database table for the selected columns as configured in AOMConfig PropertyNames and populates the
attributes from product_attributes table pushed by PM tool then copies the results into both the primary page and the cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys TariffsIdentifier, DeviceType, Channel, Team, , Identifier
Connect SQL Query:GetHandsetsForTariff Activity
1
2
3
4
5


Connect SQL Query:GetHandsetsForTariff Activity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19{SQLPage:SQLDiagnostics}
select
{ASIS:PropertyNames}
from
pc_eligible_handsets_tariff_v
where
tariffs_identifier = '{ASIS:TariffsIdentifier}'
and attributesjson::json->>'DeviceType' = '{ASIS:DeviceType}'
and attributesjson::json->>'SellableChannels' like '%|{ASIS:Channel}|%'
and attributesjson::json->>'IsSellable' = 'true'
and product_attributes.attributes::json->>'OrderType' like '%|{ASIS:OrderType}|%'
and attributesjson::json->>'NotSellableBy' not like '%{ASIS:Channel}'||'_'||'{ASIS:Ord
and
case
when ('{ASIS:Channel}' in ('InboundCC')
and (attributesjson::json->>'SellableTeams' is null
or attributesjson::json->>'SellableTeams' not like '%|{ASIS:Team}|%')) then 1
else 0
end = 0


2910
  pc_eligible_handsets_tariff_v
1
2
3
4
5
6
7
8
9
10
11CREATE OR REPLACE VIEW aom.pc_eligible_handsets_tariff_v
AS SELECT pphv.change_id,pphv.identifier,pphv.name,pphv.sku,pphv.manufacturer,pphv.proposition,pphv.handsetmodel,
pphv.handsetoffercategory,pphv.handsetproductfamily,pphv.handsetgprsflag,pphv.handsetscreentype,pphv.handsettouch
pphv.handsetmemorytype,pphv.handsetcameraflag,pphv.camera_type,pphv.handsetbluetoothflag,pphv.three_g_handset_ind
pphv.handsetstring1,pphv.level,pphv.handset_loan_price,pphv.max_upfront_cost,pphv.min_upfront_cost,pphv.min_tenur
pphv.benefit_outright,pphv.start_date,pphv.end_date,pthcv.tariffs_identifier,pa.attributes AS attributesjson
  FROM pc_tariff_handset_comp_v pthcv
      JOIN pc_paym_handset_v pphv ON pthcv.handsets_identifier::text=pphv.identifier::text AND (pphv.start_date <
      JOIN pc_tariff_v ptv ON pthcv.tariffs_identifier::text=ptv.identifier::text
      LEFT JOIN product_attributes pa ON pphv.identifier::text=pa.identifier::text;
This data page returns the list of incompatible service identifiers for a given service identifier
The data page can be consumed as below
D_InCompServiceIdsForService[Identifier:”S_106183”]
Structure Page List
Object Type VFUK-FW-AOMFW-Data-ServiceServiceIncompatibility
Mode Read-Only


Object Type VFUK-FW-AOMFW-Data-ServiceServiceIncompatibility
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetServicesForService
Input Parameters AccServicesIdentifierSrc
Load Management  -
Reload if older thanReload once per interactionD_InCompServiceIdsForService
This activity browses the ServicesForService cassandra dataset; if the dataset has record then copies the results into primary page, else
executes the GetServicesForService Connect SQL rule to retrieve the records from the database table for the selected columns as
configured in AOMConfig PropertyNames and copies the results into both the primary page and the cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys AccServicesIdentifierSrc, AccServicesIdentifierDest
Connect SQL Query: select
{ASIS:PropertyNames}
from
pc_service_service_incomp_vGetServicesForService Activity


2911
where
acc_services_identifier_src = '{ASIS:AccServicesIdentifierSrc}'
This data page returns the list of active insurance services eligible for a given department identifier and compatible with a given handset
identifier
The data page can be consumed as below
D_InsuranceForHandset[SKU:”106183”,DepartmentIdentifier:”Administration Accenture”,
OrderType:”Upgrade”,Channel:”InboundCC”,Team:”Omni”]
InboundCC: D_DiscountsForTariff[Identifier:”P_111826”,DepartmentsIdentifier :”Administration
Accenture”,OrderType:”Upgrade”,Channel:”InboundCC”,Team:”Omni”]
Web: D_DiscountsForTariff[Identifier:”P_111826”,OrderType:”Upgrade”,Channel:”Web”], Consider DepartmentsIdentifier (Optional) if
provided

Structure Page List
Object Type VFUK-FW-AOMFW-Data-InsuranceServiceForHandset - View
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetInsuranceServicesForHandset
Input Parameters SKU, DepartmentsIdentifier (Optional), OrderType, Channel, Team (Optional)
Load Management  - Reload
if older thanReload once per interactionD_InsurancesForHandset
This activity browses the InsuranceForHandsetDOCT cassandra dataset; if the dataset has record then copies the results into primary
page, else executes the GetInsurancesForHandset Connect SQL rule to retrieve the records from the database table for the selected
columns as configured in AOMConfig PropertyNames and copies the results into both the primary page and the cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage


Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys SKU, DepartmentsIdentifier (Optional), OrderType, Channel, Team (Optional)
Connect SQL Query:GetInsuranceServicesForHandset Activity
1
2
3
4
5
6
7
8
9{SQLPage:SQLDiagnostics}
with tmp
AS (
select
{ASIS:PropertyNames}
from
pc_insurance_service_handset_dept_v
left join product_attributes on
product_attributes.identifier = pc_insurance_service_handset_dept_v.identifier


2912
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32where
(sku = '{ASIS:SKU}')
   and product_attributes.attributes::json->>'OrderType' like '%|{ASIS:OrderType}|%'
    and (product_attributes.identifier is NULL
or product_attributes.attributes::json->>'SellableChannels' like '%|{ASIS:Channel}
and product_attributes.attributes::json->>'IsSellable' = 'true'
    and product_attributes.attributes::json->>'NotSellableBy' not like '%{ASIS:Channel
    and
case
when ('{ASIS:Channel}' in ('InboundCC')
          and (product_attributes.attributes::json->>'SellableTeams' is null
                  or product_attributes.attributes::json->>'SellableTeams' not
else 0
end = 0)
)
select * from tmp
where 1 =
 case
      when ('N/A' = '{ASIS:DepartmentsIdentifier}'
            or ".DepartmentsIdentifier" IN ('{ASIS:DepartmentsIdentifier}') ) then 1
      else 0
 end
 pc_insurance_service_handset_dept_v
1
2
3
4
5
6
7
8
9
10
11
12CREATE OR REPLACE VIEW aom.pc_insurance_service_handset_dept_v AS SELECT asv.change_id,asv.identifier,asv.name,as
asv.cost,asv.serviceinclusivesms,asv.serviceinclusivedata,asv.service_type,asv.vat_code,asv.cost_inc_vat,asv.serv


asv.unlimited_text,asv.unlimited_on_net,asv.fwc,asv.vmi,asv.intl,asv.insurance,asv.fam,asv.blkberry,asv.vsra,
asv.servicegroup1,asv.servicegroup2,asv.wifi,asv.internationalsms,asv.level,asv.start_date,asv.end_date,ph.sku,
COALESCE(asde.departments_identifier, '*'::character varying) AS departments_identifier,
shc.handsets_identifier
FROM pc_service_handset_comp_v shc
JOIN pc_acct_service_v asv ON shc.acc_services_identifier::text = asv.identifier::text
LEFT JOIN pc_acct_service_dept_elig_v asde ON asde.acc_services_identifier::text = asv.identifier::text
JOIN pc_paym_handset_v ph ON ph.identifier::text = shc.handsets_identifier::text AND shc.handsets_identifier::tex
WHERE asv.servicegroup3::text = 'Insurance'::text AND
(asv.start_date <= 'now'::text::date OR asv.start_date IS NULL) AND (asv.end_date >= 'now'::text::date OR asv.end
This data page returns the list of customer discounts for a given accountnumber
The data page can be consumed as below
D_CustomerTariffAndDiscountList[AccountNumber:”888888”]
Structure Page List
Object Type VFUK-FW-AOMFW-Data-CustomerTariffAndDiscount
Mode Read-Only
Ruleset AOMFW-Database
Scope NodeD_CustomerTariffAndDiscountList


2913
Data Source GetCustomerTariffAndDiscountList
Input Parameters AccountNumber
Load Management  - Reload
if older than30 Minutes
This activity browses the CustomerTariffAndDiscountList cassandra aataset for a given account number; If the dataset has discount
records then copies the results in to primary page else executes the GetProcessedServiceList activity rule to retrieve the response of the
GPSL and iterates through the root products where fulfilment item code is {“Fixed Line”,”Mobile Service”,”Fixed Broadband Service”,”Fixed
Service”,”Mobile Broadband Service”}
Assign ServiceNumber  to InstallId of root product, TariffId to PromotionId of root product, iterate child products under each root product  and
assign DiscountId of the child product if the fulfilmentcode is {“Discount”} and add root product rariff details to dataset when there is no
discount record for the root.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys AccountNumber, ServiceNumber, DiscountId
Time To Live 24 HoursGetCustomerTariffAndDiscountList Activity
This data page returns the list of sellable accessories products that are active in catalogue (i.e current date is between startdate and
enddate) and configured to be sellable in business metadata (product_atttributes) for given channel(SellableChannels), team
(SellableTeams) and Comma separeted list of Identifiers when sellable channel is InboundCC.
The data page can be consumed as below
D_SellableAccessoriesByIdentifier[Identifiers:”A_088573,A_089080,A_089097”,Channel:”InboundCC”,Team:”Omni”]


Example: {"IsSellable":true, "SellableChannels": "Retail|Web|InboundCC","SellableTeams": "Omni|Saves"}
Structure Page List
Object Type VFUK-FW-AOMFW-Data-Accessories
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetSellableAccessoriesByIdentifier
Input Parameters Channel - Mandatory, Identifiers - Mandatory, Team - Optional (if Channel is InboundCC then it is Mandatory),
OrderType - Mandatory
Load Management  -
Reload if older thanReload once per interactionD_SellableAccessoriesByIdentifier


2914
This activity browses the SellableAccessoriesByIdentifier cassandra dataset for given Channel and Team (N/A if input is empty) and list of
comma separeted identifiers; if the dataset has records then copies the results into primary page, else executes the
GetSellableAccessoriesByIdentifier Connect SQL rule to retrieve the sellable Accessories from the database table for the selected columns
as configured in AOMConfig PropertyNames and copies the results into both the primary page and the cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys Channel,Team, Identifier
Connect SQL Query:GetSellableAccessoriesByIdentifier Activity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25{SQLPage:SQLDiagnostics}
select
{ASIS:PropertyNames}
from
pc_accessories_v
left join product_attributes on
product_attributes.identifier = pc_accessories_v .identifier
    where
(pc_accessories_v .start_date <= CURRENT_DATE
or pc_accessories_v .start_date is null)
and (pc_accessories_v .end_date >= CURRENT_DATE
or pc_accessories_v .end_date is null)
    and pc_accessories_v.Identifier='{ASIS:Identifier}'
    and (product_attributes.identifier is NULL
or product_attributes.attributes::json->>'SellableChannels' like '%|{ASIS:Channel}|
and product_attributes.attributes::json->>'IsSellable' = 'true'
and product_attributes.attributes::json->>'OrderType' like '%|{ASIS:OrderType}|%'


and product_attributes.attributes::json->>'OrderType' like '%|{ASIS:OrderType}|%'
    and product_attributes.attributes::json->>'NotSellableBy' not like '%{ASIS:Channel}
and
case
when ('{ASIS:Channel}' in ('InboundCC')
and (product_attributes.attributes::json->>'SellableTeams' is null
or product_attributes.attributes::json->>'SellableTeams' not like '%|{ASIS:Team
else 0
end = 0)
This data page returns the all bar details . The data page can be consumed as below
D_Bars
Structure Code-Pega-List
Object Type VFUK-FW-AOMFW-Data-BarredProduct
Mode Read-Only
Ruleset AOMFW-Database
Scope Thread
Data Source GetBars
Input Parameters N/AD_Bars


2915
 Load Management  - Reload
if older thanReload once per interaction
This activity browses the Bars cassandra dataset; if the dataset has record then copies the results into primary page, else executes the
GetBars Connect SQL rule to retrieve the records from the database table for the selected columns as configured in AOMConfig
PropertyNames and copies the results into both the primary page and the cassandra dataset.
Applies To VFUK-FW-AOMFW-Data-BarredProduct
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys Identifier
Connect SQL Query: select
{ASIS:PropertyNames}
from
pc_barred_product_vGetBars Activity

1. Recreate the EligibleTariffsDOCT  Dataset with additional key as VersionId
2. Invoke the PreLoadEligibleTariffsToCache Activity when PM tool/CMT Pushes the catalogue/attributes data after the flush.
3. Store the below required combinations in to dataset from the database using RDB operations with the latest VersionId by implementation
of new activity.
4. PM tool to push the below AOMBusinessConfig entries
a. SellableChannels - PreLoadType - InboundCC/Web/Retail
b. SellableTeams - PreLoadType - (Omni/Saves/SuperSaves)
c. DepartmentIdentifiers - PreLoadType - (Customer Saves AOM Pilot, eShop)
d. OrderTypes - PreLoadType -  (Upgrade/Flexi Upgrade/New Acquisition/In Life Sales)
5. Configue the Active Version Id details in AOMConfig
a. ConfigName                :ConfigType            :Value
ProductCatalogue        Version                X
PreLoadEligibleTariffsToCache:


ProductCatalogue        Version                X
PreLoadEligibleTariffsToCache:
1. Get active VersionId from AOMConfig for ProductCatalogue
2. Get OrderTypes from AOMBusinessConfig -  (|Upgrade|Flexi Upgrade|New Acquisition|In Life Sales|) to ListOfOrderTypes
3. Get Department Identifiers from AOMBusinessConfig (Customer Saves AOM Pilot, eShop,N/A) to ListOfDepartments
4. Get SellableChannel  from AOMBusinessConfig -  (InboundCC/Web/Retail) to ListOfSellableChannels
5. Get SellableTeams from AOMBusinessConfig - (Omni/Saves/SuperSaves) to ListOfSellableTeams
6. Set DepartmentIdentifier - N/A and Team - N/A when Channel is Web and OrderType is In Life Sales
7. Run RDB-List Connect SQL for EligibleTariffs on all above combinations and load the data in to Dataset
Changes to Existing GetEligibleTariffs Activity:
1. Do a DataSet Browse using VersionId key along with all other input parameters
2. If no data found continue to load them from DB using RDB-ListCache Warm Up Changes - EligibleTariffs


2917
Offer Catalogue Design - Cassandra Design
D_EligibleCombiBundleQualifierReward
GetCombiOf ferRewards Activity
GetCombiOf fersForCPHT ariffs Activity
GetCombiOf fersForT ariff Activity
D_ProcessedServiceList
GetProcessedServiceListW rapper Activity
D_CalculatedOf fersForUpgrade
GetCalculatedOf fersForAccount Activity
GetCombiOf fersForAccount Activity
ProcessOf ferRecords Activity
ProcessDistinctQIDAndAsstIntCount Activity
ProcessOf fersExclusion Activity
CheckUpgradingLineExists Activity
GetOf ferAndProductExclusionRecord Activity
 This data page returns the list of the rewards configured for the offers.
Structure Page List
Object Type VFUK-FW-AOMFW-Data-BundleQualifierReward
Mode Read-Only
Ruleset AOMFW-Database
Scope Node
Data Source GetCombiOfferRewards
Input Parameters CombiOfferId, QualifyingPlanIdentifier
Load Management8 HoursD_EligibleCombiBundleQualifierReward
This activity browses the CombiOfferRewards cassandra dataset; if the dataset has record then copies the results into primary page, else
executes the GetCombiOfferRewards Connect SQL rule to retrieve the records from the database table and copies the results into both the
primary page and the cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys CombiOfferId, QualifyingPlanIdentifier, OfferRewardIdentifier
Connect SQL
Query:select {ASIS:PropertyNames} from oc_bundle_qualifier_reward_v where CombiOfferId='{ASIS:.CombiOfferId}' and


QualifyingPlanIdentifier='{ASIS:.QualifyingPlanIdentifier}'GetCombiOfferRewards Activity


2918

This activity calls the GPSL data page (D_ProcessedServiceList) and retrieves the tariffIds for root products of PAYM and HBB, invoke the
activity GetCombiOffersForTariff to get the offers for given tariffid, department, channel
Applies To Code-Pega-List of VFUK-FW-AOMFW-Data-CombiOffer
Ruleset AOMFW-Database
Input Parameters Upgrading MSISDN, Account Number, Department, Channel
Error Handling Set the activity Status to FAIL which returns to Data page where this activity is called
Check Whether the MSISDN is Valid (One of the Service Line)
Madatory Validation for Input Parameters
Primary Error HandlingGetCombiOffersForCPHTariffs Activity
This activity browses the CombiOffersForTariff cassandra dataset; if the dataset has record then copies the results into primary page, else
executes the GetCombiOffersForTariff Connect SQL rule to retrieve the records from the database table and copies the results into both the
primary page and the cassandra dataset.
Applies To Code-Pega-List
Ruleset AOMFW-Database
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapage
Dataset Keys Department, Channel, TariffId
Connect SQL
Query:select {ASIS:PropertyNames} from oc_bundles_eligible_pctariffs_v where channel='{ASIS:.Channel}' and
department='{ASIS:.Department}' and tariffid='{ASIS:.TariffId}' and offer_type='Distinct'GetCombiOffersForTariff Activity
This page holds GPSL Service Response without upgrading line for a given AccountNumber, MSISDN
Structure Page
Object Type VFUK-FW-AOMFW-Int-TIL-ProcessedServiceListAPI
Mode Read-Only


Object Type VFUK-FW-AOMFW-Int-TIL-ProcessedServiceListAPI
Mode Read-Only
Ruleset AOMFW-Int
Scope Node
Data Source GetProcessedServiceListWrapper
Input Parameters MSISDN, AccountNumber
Load Management 30 MinutesD_ProcessedServiceList


2919
 This activity invokes the GetProcessedServiceList, returns the GPSL
Applies To VFUK-FW-AOMFW-Int-TIL-ProcessedServiceListAPI
Ruleset AOMFW-Int
Input Parameters MSISDN, Account Number
Dataset Keys AccountNumber
Error Handling Set the Activity Status to FAIL which returns to Data page where this activity is called
Primary Error Handling - Catching GPSL Failure ErrorGetProcessedServiceListWrapper Activity
This data page holds the final list of offers along with TariffIds that are processed after arbitration & prioritization logic for a given account.
Structure Page-List
Object Type VFUK-FW-AOMFW-Data-CombiOffer
Mode Read-Only
Ruleset AOMFW-Database
Scope Node
Data Source GetCalculatedOffersForAccount
Input Parameters MSISDN, Account Number,TariffId, Channel, Department
Reload If Older Than 30 MinutesD_CalculatedOffersForUpgrade
This activity browses the CombiOffers cassandra dataset; if the dataset has record then copies the results into primary page, else invokes
the activity GetCombiOffersForAccount to get the offers for current product holding and invoke the activity GetCombiOffersForTariff to get the
offers for given tariffid, department, channel then process the offers based on the priority, arbitration and exclusion rules, saves the results in
to CombiOffers cassandra dataset.
Applies To Code-Pega-List of VFUK-FW-AOMFW-Data-CombiOffer
Ruleset AOMFW-Database
Input Parameters MSISDN, AccountNumber,TariffId, Channel, Department
Dataset Keys Identifier, OfferQualifierIdentiier
Error Handling Set the Activity Status to FAIL which returns to Data page where this activity is called
Primary Error Handling - Catching GPSL Failure ErrorGetCalculatedOffersForAccount Activity


Primary Error Handling - Catching GPSL Failure ErrorGetCalculatedOffersForAccount Activity
This activity perfroms exclusion of offers and on current product holding and merges the offers eligible for current products and ofers eligible
for given department, channel, tariffid
Applies To Code-Pega-List of VFUK-FW-AOMFW-Data-CombiOfferGetCombiOffersForAccount Activity


2920
 Ruleset AOMFW-Database
Input Parameters MSISDN, Account Number,TariffId, Channel, Department
Error Handling Set the Activity Status to FAIL which returns to Data page where this activity is called
Primary Error Handling - Catching GPSL Failure Error
This activity perfroms processing the offers for wach offer by eliminating the records which do not qualify to be processed as eligible
Applies To Code-Pega-List of VFUK-FW-AOMFW-Data-CombiOffer
Ruleset AOMFW-Database
Input Parameters UnProcessedCombiOfferList, TopOfferID
Error Handling Primary Error HandlingProcessOfferRecords Activity
This activity perfroms calculating distinct Qualifying Identifier, AssetIntegrationId for given list of offer records and set the
DistinctAsstIntIdCount, DistinctQualifierIdCount
Applies To Code-Pega-List of VFUK-FW-AOMFW-Data-CombiOffer
Ruleset AOMFW-Database
Input Parameters CombiOffersList
Error Handling Primary Error HandlingProcessDistinctQIDAndAsstIntCount Activity
This activity perfroms exclusion of offers for given current list of offers and target list of offers.
Applies To Code-Pega-List of VFUK-FW-AOMFW-Data-CombiOffer
Ruleset AOMFW-Database
Input Parameters CurrentOffersForExclusion, TargetOffersListForExclusion, AccountLevelExclusion
Error Handling Primary Error HandlingProcessOffersExclusion Activity
This activity checks whether there is an upgrading line exists for given offers list.
Applies To Code-Pega-List of VFUK-FW-AOMFW-Data-CombiOffer
Ruleset AOMFW-Database
Input Parameters CombiOffersList
Error Handling Primary Error HandlingCheckUpgradingLineExists Activity


2921

 This activity browses the cassandra dataset
QualifierToQualifierExclusion If reward indicator of current offer is N and reward indicator of target offer is N
QualifierToRewardExclusion If reward indicator of current offer is N and reward indicator of target offer is Y
RewardToQualifierExclusion If reward indicator of current offer is Y and reward indicator of target offer is N
RewardToRewardExclusion If reward indicator of current offer is Y and reward indicator of target offer is Y
If the dataset has record then copies the results into primary page, else executes the below Connect SQL rules to retrieve the records from
the database table and copies the results into both the primary page and the cassandra dataset.
GetQualifierToQualifierExclusion
GetQualifierToRewardExclusion
GetRewardToQualifierExclusion
GetRewardToRewardExclusion
Applies To VFUK-FW-AOMFW-Data-BundleExclusionsProcessedOffers
Ruleset AOMFW-Database
Input Parameters CurrentOffer.RewardIndicator,TargetOffer.RewardIndicator,CombiOfferId, OfferOrProductId
Dataset Keys QualifierToQualifierExclusion - CombiOfferId, OfferIdOrProductID, CurrentQualifying, TargetQualifying
QualifierToRewardExclusion - CombiOfferId, OfferIdOrProductID, CurrentQualifying, TargetReward
RewardToQualifierExclusion - CombiOfferId, OfferIdOrProductID, CurrentReward, TargetQualiying
RewardToRewardExclusion - CombiOfferId, OfferIdOrProductID, CurrentReward, TargetReward
Error Handling Primary Error Handling
Connect SQL
Query:GetQualifierToQualifierExclusion - select {ASIS:PropertyNames} from oc_bundle_exclusions_processed_v where


combiofferid='{ASIS:CombiofferId}' and newco_or_offer_id='{ASIS:OfferIdOrProductID}' and currentqualifying='Y' and
targetqualifying='Y'
GetQualifierToRewardExclusion - select {ASIS:PropertyNames} from oc_bundle_exclusions_processed_v where
combiofferid='{ASIS:CombiofferId}' and newco_or_offer_id='{ASIS:OfferIdOrProductID}' and currentqualifying='Y' and
targetreward='Y'
GetRewardToQualifierExclusion - select {ASIS:PropertyNames} from oc_bundle_exclusions_processed_v where
combiofferid='{ASIS:CombiofferId}' and newco_or_offer_id='{ASIS:OfferIdOrProductID}' and currentreward='Y' and
targetqualifying='Y'
GetRewardToRewardExclusion - select {ASIS:PropertyNames} from oc_bundle_exclusions_processed_v where
combiofferid='{ASIS:CombiofferId}' and newco_or_offer_id='{ASIS:OfferIdOrProductID}' and currentreward='Y' and
targetreward='Y'GetOfferAndProductExclusionRecord Activity


2922
Truncate Cassandra Data Sets for Loader Case Sub Types
ClearEntitiyCache Activity
TruncateDataSet Activity
pc_accessories SellableAccessoriesByIdentifier, SellableAccessories
pc_barred_product SellableBars
oc_bundle_exclusion QualifierToRewardExclusion, RewardToRewardExclusion,
RewardToQualifierExclusion, QualifierToQualifierExclusion,
CombiOffers
oc_bundle QualifierToRewardExclusion, RewardToRewardExclusion,
RewardToQualifierExclusion, QualifierToQualifierExclusion,
CombiOffersForTariff, CombiOffers, CombiOfferDetails
oc_bundle_qualifier_reward CalculatedCombiOffers, CombiOfferRewards, CombiOffersForTariff
oc_bundle_channel_elig CalculatedCombiOffers, CombiOffersForTariff
oc_bundle_dept_elig CalculatedCombiOffers, CombiOffersForTariff
oc_bundle_qualifier CalculatedCombiOffers, CombiOffersForTariff
pc_paym_handset PaymHandset, SellablePaymHandsetsForDCT,
HandsetsForTariffDCT, TariffsForHandsetOCT,
InsuranceForHandsetDOCT, GetSellablePaymHandsetBySTC
pc_discount Discount, DiscountsForTariff
pc_acct_service AccountService, ServicesForTariffDOCT,
InsuranceForHandsetDOCT
pc_tariff HandsetsForTariffDCT, ServicesForTariffDOCT,
TariffsForHandsetOCT, DiscountsForTariff, EligibleTariffsDOCT, Tariff
pc_handset_tariff_comp TariffsForHandsetOCT
pc_service_tariff_comp ServicesForTariffDOCT
pc_acct_service_dept_elig InsuranceForHandsetDOCT, ServicesForTariffDOCT


pc_acct_service_dept_elig InsuranceForHandsetDOCT, ServicesForTariffDOCT
pc_tariff_discount_comp DiscountsForTariff
pc_service_service_incomp ServicesForService
pc_tariff_dept_elig EligibleTariffsDOCT
pc_discount_dept_elig DiscountsForTariff
pc_service_handset_comp InsuranceForHandsetDOCTEntity Name DataSetsToTruncate


2923
 This activity loop through the latest entity state for each loader entity and calls TruncateDataSet activity.
Applies To VFUK-FW-AOMFW-Work-Loader
Ruleset AOMFW
Input Parameters N/A
Output ParametersN/A
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapageClearEntitiyCache Activity
This activity truncates the datasets with respect to the loader entities involved in data set preperation.
Applies To VFUK-FW-AOMFW-Work-Loader
Ruleset AOMFW
Input Parameters EntityName
Output Parameters N/A
Error Handling Primary Error handler logs the error via CreateErrorLog activity and returns the error to datapageTruncateDataSet Activity


2924
Modify the HBB Discount to include the VFT(Vodafone Together) discount
Overview
HasVFTQualifierOnAccount() Function
VFTQualifiers
D_VFTQualifier
HasVFTQualifierOnAccount Activity
Flush DataPage
Overview
As part of the HBB upgrade, we have to check if there is a VFT(Vodafone Together) qualifier. This document briefs on how to check the VFT
qualifier on the current account
HasVFTQualifierOnAccount() Function
Please find the details here

HasVFTQualifierOnAccount Activity VFTQualifiers
1
2
3
4
5create view pc_vft_qualifiers_v as
select distinct identifier from pc_tariff_v where identifier in
(select 'P_'||tariffid from oc_bundles_eligible_pctariffs_v obqv
where offerqualifieridentifier not in
(select distinct qualifyingplanidentifier from oc_bundle_qualifier_reward_v obqrv))
This page returns true to false to verify whether the PAYM promotionid passed in input is Vodafone Together Qualifier tariffId or not.
Structure Page
Object Type VFUK-FW-AOMFW-Data-VFTQualifier
Mode Read-Only
Ruleset AOMFW-Database
Scope Node
Data Source Lookup In VFUK-FW-AOMFW-Data-VFTQualifier
Input Parameters Identifier
Load Management -
Reload if older than8 HoursD_VFTQualifier
Activity - HasVFTQualifierOnAccount


2925
Flush DataPage
Add  D_VFTQualifier datapage into the PrepareDataPageListForFlush  Data Transform for EntityName= “pc_tariff"

Applies To VFUK-FW-AOMFW-Data-VFTQualifier
Ruleset AOMFW
Input
ParametersAccountNumber– String
Output
ParametersHasVFTQualifier - Boolean
Error
HandlingPrimary Catch-all Error Handler
Logs to Error Log
Activity
Logic1. Set Local Variable IsAccountQualifiedForVFT to false ( default value)
2. Retrieve processed service list for an account (Invoke GetServiceList Activity )
3. Looping through root products
a. Copy ProductRoot Page
b.  If ProductRoot.FullfilmentItemCode is "Mobile Service" or "Mobile Broadband Service" else Exit Iteration
i. Call D_VFTQualifier with ProductRoot.PromotionId
ii. Check for errors, if any(  using hasMessages() method) and Using Activity-Set-Status Fail the execution so that error
propagates to function
iii. If no errors, then set IsAccountQualifiedForVFT to true and JUMP to EOL ( End the loop)


2926
Vodafone reference architecture

Source file here: Google Drive → Vodafone/01. UK/01. Inception/5. Sessions/Architecture/VFUK AOM Arch v6/VFUK AOM Arch v3.graffle


2927
BDC Models
Description
Requirement Description
Class Structure
VFUK-FW -AOMFW -Data-BDCModel
VFUK-FW -AOMFW -Data-BDCModel-Output
BDC Load Implementation
AOM Config
Description

BDC Models and Features are moved to AOM within the Loader case as a new CaseSubType called BDC.
This data is provided from BDC Production S3 Bucket and written to the Cassandra datasets as a result of the Load model run, to be able
to use for Decisioning.
Requirement Description

Class Structure
This is the abstract class structure which supports re-usability of the Model and Output class properties by the inherited classes.
VFUK-FW-AOMFW-Data-BDCModelAoM will ‘pick up’ models from BDC:
a. There will be an ‘Ok File’ which will precede the ‘Main File’.
b. The content of the Ok file will align to current AoM Read Me file
format.
c. An Ok file will be provided per model/per feature/per run.
d. AoM will look for Ok file before attempting to Load
Model/Feature.
e. AoM & BDC will define a Pick Up Pattern – for MVP AoM will run
pick up job every hour
Archiving:
h. Once AoM has picked up Model/Feature file from the S3 bucket,
AoM will copy and write the OK file to a subdirectory in the S3
bucket, that will be the trigger for BDC to invoke the existing BDC
Archive pattern
 Connection:
f. AoM will connect to the BDC Production S3 Bucket
g. No requirement for authentication as both BDC & AoM reside in
the same AWS account
Format for Models:


the same AWS account
Format for Models:
i. Single Line, Single File per Model/Feature in JSON structure.
(.JSON)
Model ID
Model Name
Service ID
Refresh:
j. Replace and Add. Delete will be managed expiry/time to live of
record based on the last point of entry at per model per customer
record.
MODEL_ID Decimal 8Field Name Field Type Example Value


2928
VFUK-FW-AOMFW-Data-BDCModel-Output
BDC Load Implementation
Flow Name: ProcessBDCModels
Calls Prepare flow to decrypt and decompress the file under Decompressed Files property & move the files to the archive folder
Calls ProcessBDCModel Activity:
Loops through the Loader Entities - Decompressed Files
Calculates the record count
Calls InsertWatchDogReportData activity to write count data to watchdog_report_data table
Calls InitialiseTaskStatus (TaskType = BDCModelLoad) which triggers the activity ProcessQueueItem to start BDC processing
from queue
ProcessQueueItem
For the TaskType = BDCModelLoad, triggers BDCModelLoadHandler activity
Calls ProcessBDCModelFile function with inputs: full file path, has header flag, class and dataset name retrieved from config
Reads the file line by line
Skips the first line if the header is available
Calculates the TTL for data set by using Validity Timestamp - If TTL is <= 0 , sets as 1MODEL_NAME Text “universal_tariff_rec”
VALIDITY_TS Text “20210308 00:00:00”
Seconds between Validity Timestamp
and Current time is calculated and
passed to Target Data set (Specify
time to live (in seconds) in data set
component)
MODEL_RUN_TS Text “20200909 00:00:00”
SERVICE_NUMBER Text “XX123”
CONNECTION_TYPE Text “HBB”
RECOMMENDED_PRODUCT_ID Text “110513”
RECOMMENDED_METHOD Text “most_common”
REC_RANK Integer 2Field Name Field Type Example Value


2929
Converts the line to a page within the VFUK-FW-AOMFW-Data-BDCModel class
Writes the results to the related dataset in the related class using @AOMUtilities.SaveToDDS()
Sets the task status as Completed if there is no Error
Writes results to Task Status table
Calls CheckTaskStatus activity to check Task Status table for related case results
When they are all completed, finished the process
When there are Processing records, Snooze the case (within a loop  limit configured)
When there is a record with Error Status, calls NotifySupport flow
When the loop limit is exceeded, calls NotifySupport flow

AOM Config
 LoaderEntityList BDC ivr_model,device_rec,universal_tariff_rec,convergence_model
LoaderCheckPoin
tsBDC 00:00-23:59
LoaderIncomingP
athBDC /mnt/share/aom/inbound/bdc/
LoaderLoopLimitBDC 10
LoaderFileAttribut
esBDC { "LoadType": "full", "Compressed": false, "Encrypted": false, "Mandatory":
false, "HasChecksum": false, "HasHeader": false }
FileAttributes universal_tariff_
rec{ "ManifestFilePattern": "universal_tariff_rec_*_*.readme", "ClassName":
"VFUK-FW-AOMFW-Data-BDCModel", "Dataset":
"UniversalTariffRecommendation" }
FileAttributes ivr_model { "ManifestFilePattern": "ivr_deflection_model_.*_.*.readme", "ClassName":
"VFUK-FW-AOMFW-Data-IVRModel", "Dataset": "IVRModel" }
FileAttributes convergence_m


FileAttributes convergence_m
odel{"ManifestFilePattern": "convergence_.*.readme", "ClassName": "VFUK-FW-
AOMFW-Data-BDCModel-Predictive", "Dataset": "ConvergenceModel" }R2.7
CaseDependenci
esBDCLoader BDC
Case ID BDCLoader L-20267
CaseStatus BDCLoader Completed
PauseCase BDCLoader FALSE
SkipCaseFinalise
EmailBDCLoader TRUE  ConfigType ConfigName ConfigValue Notes


2930
Recommendation UniversalTariff BDC Model
Description
Implementation/Rules
VFUK-FW -AOMFW -Data-Recommendation
Data Sets
AOM Config
Sample Data
Description
AOM needs to ingest the Universal Tariff Recommendation model from BDC to use within decisioning layer. This model provides the
recommended deflections for each apptag for each customer (MSISDN). It will be used within the post-NLCS logic to determine the default
recommended routing.
Implementation/Rules
VFUK-FW-AOMFW-Data-Recommendation
Data Sets
AOM Config
Sample Data
Example File Format for Universal Tariff Rec model (JSON)
"MODEL_ID": 8,
"MODEL_NAME": "universal_tariff_rec",VFUK-FW-AOMFW-Data-BDCModel-
RecommendationOUTPUT VFUK-FW-AOMFW-Data-BDCModelOutputApplies To Property Name Type
UniversalTariffRecommendation VFUK-FW-AOMFW-Data-BDCModel-
RecommendationSERVICE_NUMBER
MODEL_IDCassandra Data Set Class Key
LoaderEntityList BDC universal_tariff_rec,
FileAttributes universal_tariff_
rec{ "ManifestFilePattern": "universal_tariff_rec_*_*.readme", "ClassName":
"VFUK-FW-AOMFW-Data-BDCModel", "Dataset":
"UniversalTariffRecommendation" } ConfigType ConfigName ConfigValue Notes


2931
"VALIDITY_TS": "20210503 00:00:00",
"MODEL_RUN_TS": "20201104 00:00:00",
"SERVICE_NUMBER": "01634404978",
"OUTPUT": [
  {
         "CONNECTION_TYPE": "SmartWatch",
         "RECOMMENDED_METHOD": "most_common",
         "RECOMMENDED_PRODUCT_ID": "111359",
         "REC_RANK": 6
  },
  {
         "CONNECTION_TYPE": "Handset",
         "RECOMMENDED_METHOD": "most_common",
         "RECOMMENDED_PRODUCT_ID": "112346",
         "REC_RANK": 7
  }
]


2932
Ingest Predictive IVR BDC Model
Description
Implementation / Rules
VFUK-FW -AOMFW -Data-BDCModel-Predictive
Data Sets
DataPage
AOM Config
Sample Data
Description
AOM needs to ingest the IVR Predictive model from BDC to use within decisioning layer. This model provides the recommended deflections
for each apptag for each customer (MSISDN). It will be used within the post-NLCS logic to determine the default recommended routing.
Implementation / Rules
VFUK-FW-AOMFW-Data-BDCModel-Predictive
Data Sets
DataPage
Create a New DataPage with ServiceNumber and AppTag called D_IVRModel which will be consumed/invoked by the Decisioning layer.
New activity  GetIVRModelData should be implemented on VFUK-FW-AOMFW-Data-BDCModel-Predictive Class and is invoked from
new data page D_IVRModel.
AppTag parameter value needs to be validated and modified as below
Covert the AppTag passed as a parameter to Upper Case
Replace any hyphen (-)  found with an underscore(_) before querying the database
 Return the data from the dataset for a given AppTag found in OUTPUT and given ServiceNumber
AOM ConfigPROPENSITY Text
TOP_PERCENTILE Text
OUTPUT ValueGroup(Text)  ATTRIBUTES(ACTIVATE_PHONE) =6
ATTRIBUTES(CANCEL_DIRECT_DEBIT) =2
ATTRIBUTES(CHANGE_ADDRESS) =1Field Name Field Type Example Value
IVRModel VFUK-FW-AOMFW-Data-BDCModel-Predictive SERVICE_NUMBERCassandra Data Set Class Key


2933
Sample Data
Example File Format for iver_model (JSON)
"MODEL_ID": 1001,
"MODEL_NAME": "ivr_model",
"VALIDITY_TS": "20210430 00:00:00",
"MODEL_RUN_TS": "20201101 00:00:00",
"SERVICE_NUMBER": "447771177866",
"OUTPUT":
{
       "ACTIVATE_PHONE": "06",
       "CANCEL_DIRECT_DEBIT": "06",
       "CANCEL_EXTRAS": "06",
       "CHANGE_ADDRESS": "01",
       "CHANGE_DIRECT_DEBIT": "07",
       "CHANGE_PHONE": "06",
       "CHECK_BILL": "02",
       "ENQUIRE_ACCOUNT_ACCESS": "05",
       "ENQUIRE_ALLOWANCE": "05",
}LoaderEntityList BDC universal_tariff_rec, ivr_model update existing
config
FileAttributes ivr_model { "ManifestFilePattern": "ivr_deflection_model_.* _ . *.readme",
"ClassName": "VFUK-FW-AOMFW-Data-IVRModel",
"Dataset": "IVRModel" }new configConfigType ConfigName ConfigValue Notes


2934
BDC to AOM Multipart Files Design
Description
Requirement Description
Implementation
Description
 AOM should be able to process single .tgz files from S3 & Incoming areas and process each file into corresponding data set.
Requirement Description
To allow BDC and AOM to consume multipart files, BDC supportability and architecture as asked to support the provision of all MultiPart
Files as one single .tgz file.
Process
1. AOM to pickup relevant files based on Manifest and Entity Pattern
2. Files will be .tgz format
3. AOM to build list of sub files from files extracted from .tar
Implementation
Create a new Decrypt function that decrypts given gpg files into a given location
The function has below input parameters
filePath(String) → Full path of the file to be dycrypted
outputFilePath(String) → Full path of the output file
gnupgHome(String) → GNU PG Home Directory
passphrase → GPG Passphrase (Optional)
Create a new Decompress function that extracts .tgz/.zip files into a given location and populate all the decompressed files into a given
ouput clipboardproperty
The function has below input parameters
filePath(String) → Full path of the file to be decompressed
outputPath(String) → Full path of directory to extract files
compressionType(String) → File compression type
output(ClipboardProperty) → ClipboardProperty which the command outputs will be populated
If the file is in tgz compressed format call below linux command
tar -xvf filePath -C outputPath | awk ‘{print  “/outputPath”$0}’
Else if the file is in zip compressed format call below linux command
unzip -o -d outputPath filePath | grep inflating | awk -F': ' '{print $2}'


unzip -o -d outputPath filePath | grep inflating | awk -F': ' '{print $2}'
Create a new property in Loader class as CompressionType which can have tgz/zip values. If CompressionType does not exists in the
config for casesubtype/entity, it means that is not compressed
Update VFUK-FW-AOMFW-Work-Loader.Prepare activity for below steps
Populate Compressed boolean variable as below if there is a value for CompressionType
Move files if it is not Compressed & Encrypted to WorkAreaPath


2935
If the file is Encrypted call Decrypt function and store decrypted files in workarea directory and if the file is decompressed jump to DC
step to decompress corresponding file. Store decompressed files in DecompressedFiles text value list property.
If the file is not Encrypted jump DC step to get file from input files and decompress in workarea directory. All the results will be
populated in DecompressedFiles text value list property.
Store input files in TextValueList property for archival purposes.
Need to update File Attributes in AOM Config as below
Compressed flag should be changed to CompressionType

 LoaderFileAttrib
utesBDC { "LoadType": "full", "CompressionType":"tgz", "Encrypted":
false, "Mandatory": false, "HasChecksum": false, "HasHeader":
false, "S3TransferMode": "copy" }Add a new CompressionType
attribute that indicates the input file will
be in tgz/zip format. If there is no
compression, There is no
CompressionType in the file attributes.LoaderFileAttrib
utesEvent {"CompressionType":"zip","Encrypted":false, "Mandatory":false,
"HasHeader": true, "S3TransferMode": "move"}
LoaderFileAttrib
utesOfferCatalogu
e{"LoadType":"full", "CompressionType":"zip", "Encrypted":true,
"ManifestFilePattern":"offer_catalogue_.*_.*.readme",
"Mandatory":true, "HasChecksum":true, "HasHeader":false,
"Delimiter":"|", "S3TransferMode": "move"}
LoaderFileAttrib
utesProductCatal
ogue{"LoadType":"full", "CompressionType":"zip", "Encrypted":true,


ogue{"LoadType":"full", "CompressionType":"zip", "Encrypted":true,
"ManifestFilePattern":"product_catalogue_.*_.*.readme",
"Mandatory":false, "HasChecksum":true, "HasHeader":false,
"Delimiter":"|", "S3TransferMode": "move"}
LoaderFileAttrib
utesSpine {"LoadType":"file", "CompressionType":"zip", "Encrypted":true,
"Mandatory":true, "HasChecksum":true, "HasHeader":false,
"Delimiter":"|", "S3TransferMode": "move"}
FileAttributes dialler_outco
mes{"LoadType":"full", "CompressionType":"zip", "Encrypted":true,
"InputFilePattern":"aom_*_dialler_outcomes_*_delta.zip.gpg",
"Mandatory":true, "HasChecksum":false, "HasHeader":false,
"Delimiter":"|"}
FileAttributes model_score {"LoadType":"file", "CompressionType":"zip", "Encrypted":false,
"InputFilePattern":"BDC_model_*_*_delta.dsv", "Mandatory":
true, "HasChecksum":false, "HasHeader":false, "Delimiter":"|"}
FileAttributes unica_campai
gn_history{"LoadType":"delta", "CompressionType":"zip",
"Encrypted":true,
"ManifestFilePattern":"unica_campaign_history_*_*.readme",
"Mandatory":true, "HasChecksum":true, "HasHeader":false,
"Delimiter":"|"}Config Type Config
NameConfig Value Change


2936
Device Recommendation BDC Model
Implementation / Rules
VFUK-FW -AOMFW -Data-BDCModel-BDCModelOutput
Data Sets
AOM Config
Sample Data
Implementation / Rules
VFUK-FW-AOMFW-Data-BDCModel-BDCModelOutput
Data Sets
AOM Config
Sample Data
Example File Format for Device Rec model (JSON)
{
"MODEL_ID": 6,
"MODEL_NAME": "device_rec",
"MODEL_RUN_TS": "20210204 00:00:00",
"SERVICE_NUMBER": "4471...",RECOMMENDED_SKU Text
RECOMMENDED_DEVIC
EText
FORCED_ALLOCATION Text  Field Name Field Type Example Value
DeviceRecommendation VFUK-FW-AOMFW-Data-BDCModel-
RecommendationSERVICE_NUMBER
MODEL_IDCassandra Data Set Class Key
LoaderEntityList BDC universal_tariff_rec,ivr_model,device_rec
FileAttributes device_rec { "ManifestFilePattern": "device_rec_.*.readme", "ClassName": "VFUK-FW-
AOMFW-Data-BDCModel-Recommendation", "Dataset":
"DeviceRecommendation" } ConfigType ConfigName ConfigValue Notes


2937
"VALIDITY_TS":"20211005 00:00:00",
"OUTPUT": [
{
      "RECOMMENDED_SKU": "205572",
      "RECOMMENDED_DEVICE": "Samsung A50 black",
      "RECOMMENDED_METHOD": "most_common_tac",
      "REC_RANK": 16,
      "FORCED_ALLOCATION": "N"
},
{
      "RECOMMENDED_SKU": "203663",
      "RECOMMENDED_DEVICE": "Samsung Galaxy S10 prism black 128GB",
      "RECOMMENDED_METHOD": "most_common_tac",
      "REC_RANK": 4,
      "FORCED_ALLOCATION": "N"
}
  ]
}
WatchDog:
Alert on the inactivity of Device Recommendation Model load from last 7 days.
Create a new record in WatchDog config for DeviceRecommendationInactivity and use existing Report definition IdentifyLoadInactivity.
Create AlertConfig records, AOMConfig records and SchedulerConfig record for the new WatchDog CaseSubType.
Remove BDCModelInactivity case subtype and added UniversalTariffInactivity case subtype in all configs.


2938
Convergence BDC Model

Data Sets
AOM Config
Sample Data

Data Sets
AOM Config

Sample Data
Example File Format for Convergence model (JSON)
{
"MODEL_ID": 967,
"MODEL_NAME": "convergence_model",
"VALIDITY_TS": "20211225 00:00:00",
"MODEL_RUN_TS": "20210628 00:00:00",
"SERVICE_NUMBER": "447xxxx",
"OUTPUT": {
"HBB_PROPENSITY": 0.27,
"SIMO_PROPENSITY": 0.82,
"HANDSET_PROPENSITY": 0.42,
"MBB_PROPENSITY": 0.43
}
}ConvergenceModel VFUK-FW-AOMFW-Data-BDCModel-
PredictiveSERVICE_NUMBER
MODEL_IDCassandra Data Set Class Key
LoaderEntityList BDC universal_tariff_rec,ivr_model,device_rec,convergence_model
FileAttributes convergence_m
odel {"ManifestFilePattern": "convergence_.*.readme", "ClassName": "VFUK-FW-
AOMFW-Data-BDCModel-Predictive", "Dataset": "ConvergenceModel"} ConfigType ConfigName ConfigValue Notes


2939
Store All Outbound Communications Sent
AOM to store all the successful outbound communications data sent to customers across applicable channels like Email, SMS, AppPush
with 12 month retention period.
Below is the database table and pega class definition to store the outbound communications data

Below is the detailed design for each channel
Email
AOM uses extension point provided by pega as part of DF_ProcessEmails Dataflow which is invoked to process the Email records from
PR_DATA_CORR_EMAIL Table after the Pega Marketing Campaign run is completed to sent out the emails.
As part of the change, DF_EmailExtension dataflow is customised/updated to push the only the successfully processed records into
outbound_comms_store table. Below are the changes for both Batch and Realtime Campaigns.Table Name outbound_comms_store
Columns subscription_id varchar(255) not null primarykey,
interaction_id numeric(19) not null primarykey,
channel varchar(255) not null primarykey,
decision_timestamp timestamp ,
sender varchar(255),
receiver varchar(255),
email_subject varchar(255),
content text,
ClassName VFUK-FW-AOMFW-Data-OutboundCommsStore
Properties SubscriptionId - Text
InteractionId  - Decimal
Channel   - Text
DecisionTimestamp - Datetime
Sender   - Text
Receiver - Text
EmailSubject -  Text
Content  - Text
Dataset OutboundCommsStore
Activity  Save – To store data for AppPush and TIL SMS (MVP) Channels or any other channels.
All the above fields are parameters to this activity so that the data is stored in the table.Rule Name


2940
Batch Campaign Filter
OfferClassName value decides if the run is Batch or Real-time Run. For all the realtime campaign runs the value will be set to NOBATCH
and for the Batch runs it will be set to the batch output class name like Data-BatchOutPR101119 hence below check if verify if its realtime
campaign run or not. If it's not realtime campaign then it means the run is Batch Campaign.
Below is the convert shape configuration from the above dataflow to populate data into required fields and saving data using an
OutboundCommsStore dataset


2941
Realtime Campaign Filter
OfferClassName value decides if the run is Batch or Real-time Run. For all the realtime campaign runs the value will be set to NOBATCH
and for the Batch runs it will be set to the batch output class name like Data-BatchOutPR101119 hence below check if verify if its realtime
campaign run or not. If it's not realtime campaign then it means the run is Batch Campaign.
Below is the convert shape configuration from the above dataflow to populate data into required fields and saving data using an
OutboundCommsStore dataset


2942
SMS
AOM uses extension point provided by pega as part of DF_ProcessOffer Dataflow which is invoked while executing the pega marketing
offer flows. As pega is handling the SMS and Email processing differently and we can’t get the data we are looking for in the
DF_ProcessSMS Dataflow. DF_OfferResultsExtension is used to extend and push the required data into the outbound_comms_store
table. for both batch and realtime campaign runs.
Below are the changes to DF_OfferResultsExtension dataflow.
Filter starting with SMS is added additionally as part of Extention


2943

Below is the convert shape configuration from the above dataflow to populate data into required fields and saving data using an
OutboundCommsStore dataset
Below filter checks for the SMS channel and any errors during offer flow execution. This dataflow is also used by Email hence, we need to
filter by SMS channel to avoid loading the Email data.


2944
GetBundleEventDecisionDetails Service
AppPush
Update AppPushNotificationHandler Activity to invoke Save Activity on VFUK-FW-AOMFW-Data-OutboundCommsStore to store the
encoded JSON payload along with customer information.
SMS
Update GetBundleEventDecisionDetails Activity to invoke Save Activity on VFUK-FW-AOMFW-Data-OutboundCommsStore to store the
encoded SMS data along with customer information.


2945
Unsubscribe Case Design
Overview
Unsubscribe case
Design Overview
Activities
Overview
The unsubscribe functionality is to provide Vodafone customers an option to unsubscribe from offer emails sent as part of Email
Campaigns. The offer email sent to the customer has the Unsubscribe link by clicking on it his request is captured in AOM by launching a
microsite case. To achieve this an Unsubscribe microsite is developed which in turn creates a case.
Unsubscribe case
The Unsubscribe case class extended from the Pega OOTB microsite class, PegaMKT-Work-Microsite so that this behaves as a microsite
when the user clicks on the unsubscribe link.

Design Overview
This design covers how AOM handles the unsubscribe request to achieve:
Capture reasons for unsubscribe
Insert IH with Unsubscribe reason
Get all the contactId associated with customer email
Call UpdateCustomerPermission API with EmailConsent “NOTPERMITTED” for all the associated contactId
 Main
 ProcessEmailUnsubscribe The case will Decrypt the query parameters
we get as part of the unsubscribe link and
map them to the Request Parameters.
If Email is present display the Unsubscribe
landing page where we capture the reason
for Unsubscribe.
Then we update payload with reason and
Event_Status record is created with
EventType = ‘Microsite’, SubEventType =
‘Unsubscribe’ and Payload. Case Stage Case Step Functionality


2946
Activities
ProcessQueryParameters: We get email, iid, cid, and pname as part of query parameters and they are encrypted. The activity will decrypt
the query parameters using the DecryptQueryParameters function and map them to the Request Parameters. The activity also logs to the
error log if the email is null.
email – Customer email address
Iid – InteractionId recorded in IH when initial email offer is sent
cid – Customer Id
pname – Proposition Name (Name of the Email offer sent to the customer)

ProcessUnsubscribe: Capturing the IH and Calling the UpdateCustomerPermission API is handled in this activity. To achieve this Event
framework is used and an event is initialized with EventType as “Microsite” and SubEventType as “Unsubscribe”.


2947
Extract the new IH Report table to EDW
Description
Create a new extract process for the IH-Report table alongside the existing IH extract.
Hence now 2 IH tables (deltas) will be sent to the EDW.
Changes
1. Create a new class VFUK-FW-AOMFW-Data-InteractionHistoryReportingExtract and is mapped
interaction_history_reporting_xt in AOM.
Creating new Properties
EndTimeStamp
StartTimeStamp
Segments
Header
ExtractorTable
2. Add records to AOMConfig
AOM Config
3. Update Prepare Flow
Create a new Activty for IH Reporting Extract is called PrepareIHRExtract = VFUK-FW-AOMFW-Work-Extractor.PrepareIHRExtract
4. Create a new SQL Connector: VFUK-FW-AOMFW-Data-InteractionHistoryReportingExtract .Prepare
Prepare Sql Connector is created for IHR steps and is invoked from PrepareIHRExtract  activty.
The connector has same inputs and output like the existing for IH.
5. Update Initiate IH Extraction Flow
Create a new flow Initialise Extractor Status for IHR as below;DB Column Name DB Column  Property Name Property Name Type
segmentkey NUMERIC SegmentKey decimal
xtid(PK) VARCHAR ExtractId (PK) Text
datacontent VARCHAR DataContent TextData Mapping
ExtractorDestinationPath IHR /mnt/share/aom/outbound/core/
ExtractorGPGRecipient IHR AOMDomain@internal.vodafone.com
ExtractorTable IHR interaction_history_reporting_xtConfigType (required) ConfigName (required) ConfigValue


2948
 Pass primary.CaseSubType as an input to feed ExtractType in each InitialiseExtractorStatus flow for all CaseSubType but for IHR, we
pass “IHR” to ExtractType.
6. Create a new activity is called  VFUK-FW-AOMFW-Work-Extractor.GenerateIHReportingExtract  that is invoked from GenerateExtract
activity
7. Update VFUK-FW-AOMFW-Work-Extractor.CombineExtractOuputs activity
Update only if Condition to set Header as below;
If OutputFile.ConfigName, "IHR" then pass Primary.HeaderIHR to Local.Header else pass Primary.Header
If  Local.Header is null or empty pass OutputFile.Header to Header else pass Local.Header.