API request takes longer to respond than the timeout
<IssueT itle>
Functionali
tyData Flow Work Item Id
Error
ScenariosAfter running Loader case, it is unable to see usage tables and usage data on AOM and VADR.Missing Data Flow Work Item Id


3826
Root CauseA data flow work item id is missing on Decisioning: Data Flow landing page. When these ids are missing, it is not possible to
run data flows. When data flows are not run for the period mentioned in the DSS dataflow/run/maxDaysToKeepRuns, they
get deleted.
Possible
SolutionsCreating data flow work item id
Responsibl
e PartiesDeployment team will create data flow work item ids as part of deployment.
When they get deleted after reaching the time to keep runs, work items needs to be created by the owners of the
environment.
Resolution 1. Create the data flow run in Decisioning: Data Flow landing page (Configure>Decisioning>Decisions>Data Flows)
a. Click New button
b. Specify applies to class of the data flow
c. Select data flow from the dropdown
d. Click Run button in the upper right corner
2. Copy data flow work item id and add it into AOMConfig data type as DataFlowWorkItemId config type
3. Clear AOMConfig data pages after the update
References Bug 908394: CCS 22.7 || T4/E7 || AOM SIT3 || Unable to see usage tables and usage data on AOM VADR
Bug 867341: CCS 22.6B || T3/SUP02 || AOM SIT2 || Unable to see usage tables and usage data on AOM VADR
Functionali
tyDataSet-Execute Method
Error
ScenariosIn the first launch of VADR, Early Upgrade Fee (EUF) comes as blank, In the second launch, EUF comes as 0. EUF
values in the first and second launches are not consistent.
Root CauseWhen DataSet-Execute method is used in an activity with ‘Save’ operation, if an integer property in the data model structure is


null or empty, that property is saved default as 0 into the data set. This is out-of-the-box Pega data set behaviour.
Possible
SolutionsSolution1: Changing property type from integer to string. String properties are not set with default values like integers
while using DataSet-Execute methods.
 In this case (EUF scenario), because the properties are used in some calculations, this option is not applicable
Solution2: Adding a condition to set these properties as blank or 0 if they are null or empty to provide consistency while
displaying UI
Solution3: Update the activity to remove the page to suppress default value if it is null or empty before DataSet-Execute
step - Preferred
Responsibl
e PartiesDesigners should keep this OOTB behavior in their minds while conditioning.
UI team to add a condition if Solution2 is selected
App team to make the changes if Solution1 or Solution3 is selected
Resolution 1. Update the activity to remove the page/property to suppress default value if it is null or empty before DataSet-Execute step
with Save option
2. Delete related records from the data set to clear cache
3. Compare results by running the activity and browsing the data set
References Bug 900514: CCS 22.6B || T3/SUP02 || AOM SIT2 || In second instance (launching VADR second time) for SIMO
customer in account open lines upgrade today fee is coming as 0Default Values Set While Using DataSet-Execute Method With Save Option


3827
Functionali
tySimulation Portal UI
Error
ScenariosSegment Last Run Time in Sim UI Portal not correct
Root CauseThe Report Definition that returns Segment results uses updateTime instead of LastRunTime
Possible
SolutionsUpdate GetSimulationSegments Report Definition to return LastRunTime
Responsibl
e PartiesApp Team to make changes
Resolution Report Definition GetSimulationSegments is updated to use sub-report GetSegmentResults to retrieve the correct date
value for Last Run Date (SEG.Update_Time)
Section SegmentLastRunTime is updated to update property SegmentLastRunTime with correct date value retrieved
from the Report Definition
References Bug 868143: Segment Run Time in Sim UI Portal not correct - Boards (mcas.ms)Segment Run Time in Simulation UI Portal not correct
FunctionalityChannel Management Treatment Errors UI
Error
ScenariosWhen opening the UI section for Treatment Errors, a table is populated and displayed showing the errors. The column for
SubscriptionId appears empty
Root Cause SubscriptionId received from Payload (coming from sms_staging into sms_send_queue). This Payload JSON does not
contain a SubscriptionId to copy into the table. However, logic does populate the SubscriptionId as it is mapped to
pySubjectID in the Payload
Possible
SolutionsSolution 1: Updating the mapping to get SubscriptionId from pySubjectId in the Payload, instead of from SubscriptionId
in the Payload
Solution 2: Requesting logic to map the SubscriptionId to SubscriptionId in the Payload. This would require updating the
SR class
Responsible
PartiesApp team to update the mapping from Payload (Solution 1) or to update the SR class (Solution 2)
Logic team to update the strategy results (Solution 2)
Resolution 1. Payload mapping updated by app to map SubscriptionId from pySubjectID


Resolution 1. Payload mapping updated by app to map SubscriptionId from pySubjectID
2. View a treatment’s errors that was missing the SubscriptionId
3. Verify that the SubscriptionId is now there
References ADO: 918440 Channel Management > UI> Subscription Id not populated in the Error records Subscription Id not populated in the Error records
Functionali
tyGetNextBestActions V1 API
Error
ScenariosWhen sending a request to the GetNBA V1 API, a 520 error response with an error message of ‘Business Logic Error: No
decision’ appearing in logs GetNBA returning 520 error response


3828
Root CauseThe Subscription pages associated with MSISDNs that were being used as part of the request have not been configured to
return successful responses
Possible
SolutionsEnsure that all of the data that is being used for testing is set up to receive successful responses from the APIs
Responsibl
e PartiesTesters to ensure that the data they are using is valid and will return valid responses
Resolution Subscription pages has been configured by testers to receive successful responses from the GetNBA V1 API
When running the API using the MSISDNs associated with these Subscription pages, a successful response is returned to
the user
ReferencesN/A
Functionali
tyGetBundleEvents API
Error
ScenariosWhen sending a request to the GetBundleEvents API, a 520 error response with an error message of ‘Business logic did not
return any results’
Root CauseThe NTIDs that were being used as part of the request were not correctly configured to an associated test offer, so there was
no successful response to receive
Possible
SolutionsEnsure that all of the data that is being used for testing is set up to receive successful responses from the APIs
Responsibl
e PartiesTesters to ensure that the data they are using is valid and will return valid responses
Logic to configure NTIDs correctly for offers so that a response is sent to the user
Resolution NTIDs have been configured by logic for the associated test offer
When running the API on the newly configured NTIDs, successful responses are returned to the user
ReferencesADO 929263: CCS 22.9A || AOM SIT2 || Extra Landing Page || Getting "Business Logic Error" in API responseGetBundleEvents returning 520 error response
Functionali
tySimulation Portal UI
Error


Functionali
tySimulation Portal UI
Error
ScenariosWhen using drop-downs to search for possible values for Primary Context and Secondary Context for GetNBA Simulation
runs within the Simulation Portal UI, only the first few values are being shown to the user.
Root CausePagination is being applied to the source report definition which splits the results into multiple pages, but the drop-down UI
element does not have a means of handling report definitions with multiple pages. This results in only the first page of results
being taken as the source of the drop-down
Possible
SolutionsSolution 1: Keep the report definitions as the sources for the drop-downs, but remove paging from them
Solution 2: Replace the report definitions as the source for the drop-downs with direct SQL rules
Responsibl
e PartiesApp Team to remove pagination from the source report definitions (Solution 1) or to replace the report definition as the source
of the drop-down lists with SQL statements (Solution 2)
Resolution<TBC>
ReferencesADO 925398: Primary Context List Restricted to top xDrop-Downs Not Displaying Every Possible Value


3829
Functionali
tyCheck Retention Eligibility
Error
Scenarios"GetCustomer: SOAP service failed" error with error code 2080.
Because RetentionEligibility data set is not getting populated with this customer, a CRE API call is needed to be made as part
of GC API. After preparing CRE request in PrepareCREDataforSubscriptionList activity, error occurs in the Connect-SOAP
step of the child VFUK-FW-AOMFW-Int-TIL-RetentionEligibilityAPI.CheckRetentionEligibility activity.
Root CauseWhen GetCustomer API is called, the account number is taken and all the service numbers under the account are gotten.
Subscription types in subscription_v can be one of followings.
Mobile Service
Mobile Broadband Service
Fixed Line
Fixed Service
Fixed Broadband Service
The account has a service number which is actually a Fixed Line (44111xxx). Although it is not a Mobile Service, in the DB its
SubscriptionType is configured as Mobile Service. Therefore, this service number is set as MSISDN instead of FLN in the
CRE request. Then, when doing CRE call with MSISDN number 44111xxx, SOAP service failed error occurs.
Possible
SolutionsSolution1: Changing the subscription type from Mobile Service to Fixed Line in the subscription view
Solution2: Adding new conditions to the process preparing CRE request to check whether service numbers are starting
with the desired numbers - Preferred
Responsibl
e PartiesBusiness to discuss about this new requirement
App team to make the changes for adding new conditions
ResolutionIn the router step based on SubscriptionType of PrepareCREDataforSubscriptionList activity
Set Service Number to MSISDN, if subscription type is Mobile Service or Mobile Broadband Service and service number
starts with 447


starts with 447
Set Service Number to FLN, if subscription type is Fixed Line or Fixed Service or Mobile Service and service number
starts with 44
References RAID Item 933351: TSAR Pilot - Error in GetCustomerSOAP service failed for 2 customers
User Story 934439: Identifying Subscriptions to display in VADRMobile Service starting with 441
Functionali
tyCRE Simulation Data Transform
Error
ScenariosGetting below error when run a mashup in CAPST env
Error in CheckRetentionEligibility: LegacyModelAspectInvokableRuleContainer.invoke-Exception
java.lang.IndexOutOfBoundsException: Index: 2, Size: 0 - Process name is CheckRetentionEligibility
Root CauseIt is failing at CheckRetentionEligibilityStubResponse DT because of the index. To set a value in a list, index should start from
1. In the data setup, first, second, and third pages of the list were set according to some conditions but for first two conditions
are not met, it was tried to set 3rd page of the list without populating 1st and 2nd one.
Possible Correct the condition in data setupCRE IndexOutOfBoundsException


3830
Solutions
Responsibl
e PartiesTesters in QA team to correct the wrong data setting
App team to inform tester what is causing the issue and how to fix it
Resolution Correcting the data setup by tester
References Bug 936226: SP - When configured the CheckRetentionEligibilityStubResponse data transform for the data, we are
getting error
Functionali
tyOffers Landing Pages Microsite
Error
ScenariosError Landing Page displaying when launching Offers Microsite
Root CauseURL is incorrect
Possible
SolutionsCheck url in brower bar
url should be of the form https://pega.data.dev1.vodafoneaws.co.uk/MS/index.html?Site=Offers&id= (this is the dev1
url)
In particular check that &id= is present in the url. This was found to be missing.
Check AOMConfig entry:
Microsite → OffersURL
Value should be correctly formed url, eg. https://pega.data.dev1.vodafoneaws.co.uk/MS/index.html?Site=Offers&id=
(this is the dev1 url)
Responsibl
e PartiesEnvironment team
ResolutionEnvironment team corrects url
References Bug 923547: CCS 22.9A || AOM SIT2 || Extra Landing Page || Getting error in Landing Page - Boards (mcas.ms)Offers Landing Pages - Error on launching url
Functionali
tyT2S Extractor Case
Error
ScenariosThe following error is reported in the Extractor:
Error in TransferExtractOutput: Java Exception: java.lang.RuntimeException: Error while S3 moving
/mnt/share/aom/extractor_work_area/04-08-2022_11-44-08-017/aom_TMR001_Webhelp*.* - to


-/mnt/share/aom/outbound/core/ : S3mv failed: [Diagnostics: The command - [bash, -c, aws s3 mv
/mnt/share/aom/extractor_work_area/04-08-2022_11-44-08-017/aom_TMR001_Webhelp*.* /mnt/share/aom/outbound/core/ ]
- exited with 252 indicating an error.] [CommandOutput:
usage: aws s3 mv <LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri>
Error: Invalid argument type
]
Root CauseExtractorDestinationPaths in AOMConfig are not correctly set
Possible
SolutionsThe error stack trace suggests that there is a problem moving extractor files. The file paths are defined in AOMConfig.
Check AOMConfig entry:T2S Extractor going into pending - investigation


3831
ExtractorDestinationPath
Responsibl
e PartiesEnvironment team
ResolutionEnvironment teams should update AOMConfig entries.
References Bug 927583: AOM | PAT2 | T2S Extractor going into pending - investigation - Boards (mcas.ms)
Functionali
tyBatch DF run
Error
ScenariosAfter Batch run, Data flow page is showing PrepareDataForBatchNBA DF as having processed over 32 million records.
There are only 2.5 million records in subscription_v in the database.
Root CauseCorrupt work item
Possible
SolutionsDelete work item and recreate
Responsibl
e PartiesLogic team
ResolutionAsk Logic team to delete work item and recreate
References Task 932357: UAT Environment - Spine loader issue - Boards (mcas.ms)Data Flow processes too many records in Batch run
Functionali
tyOffers Landing Pages Microsite
Error
ScenariosError Landing Page displaying when launching Offers Microsite
Root CauseSOAP Service url incorrect for ProcessedServiceList
Possible
SolutionsCheck AOMConfig entry:
APIEndpoint → ProcessedServiceList
Responsibl
e PartiesEnvironment team
ResolutionEnvironment team should check and correct AOMConfig entry.
References Bug 924711: CCS 22.9A || AOM SIT2 || Extra Landing Page || No offers are visible on Landing Page - Boards (mcas.ms)Offers Landing Pages - failure of SOAP Service
Functionali
tyDB Table Rule
Error
ScenariosCannot save instance of class Data-Decision-IH-Fact; it belongs to fully exposed table dataschema.PR_DATA_IH_FACT
in database PegaDATA, but the instance has properties which do not correspond to columns: ProductGroup ,
OfferCategoryCannot save instance of class <ClassName>


3832
Root CauseThe fields are newly added to the DB table and the related DB table rule is forgetten to be included in the build log by
development team or forgetten to be included in the build by deployment team.
Possible
SolutionsSave the DB table rule without changing anything to unblock testers
Ask NPE team to check and deploy the build which includes the DB table rule to the required environment
Responsibl
e PartiesApp team
NPE Support
ResolutionDeploy the DB table rule
References Bug 945268: CCS 22.9A || T3/SUP02 || AOM SIT2 || Unable to launch AOM VADR getting error "Unable to load upgrades"
Functionali
tyStockAvailability
Error
ScenariosOrder is incorrectly able to be submitted in VADR even though one of the Accessories in the order is out of stock
Root CauseThe StockAvailability stub data in CAPST is incorrectly skipping the correct Accessory Id hence not picking up the correct
stock data
Possible
SolutionsUpdate GSASimulationResponse in VADR ST
Responsibl
e PartiesEnvironment team
Resolution 1. Update the when condition to correctly select the accessory in the GSASimulationResponse data transform
2. Repeat the test that allowed submitting an order with an out of stock accessory
3. Verify that the “Out of Stock” message shows up
References Bug 934533: Order submitted, even if stock level is Out of stock in Accessories tabOut of stock Accessory able to be submitted
Functionali
tyWatchDog Report Definitions
Error
ScenariosWatchDog report definitions are not sent at the time that they are designed to be executed (e.g. 8:30am UK time)
Root CauseIncorrect cron expression used
Possible
SolutionsUpdate SchedulerConfig with the correct cron expression for the time that the report should be ran.


SolutionsUpdate SchedulerConfig with the correct cron expression for the time that the report should be ran.
Use “Describe Expression” in the following resource to verify the cron expression:
Free Online Cron Expression Generator and Describer - FreeFormatter.com
Please note the scheduler will run at a random second past the minute (e.g. 08:30:00-08:30:59) so we need to check
every second! (e.g. * 30 8 ? * * *, not 0 30 8 ? * * *)
Responsibl
e PartiesEnvironment team
Resolution 1. Confirm the scheduler WatchDog is running correctly at every minute & check logs for errorsWatchDog Report not sent at the correct time


3833
2. Confirm that running the WatchDog for the CaseSubType gives the expected output
3. Check the report name (e.g. DailyTreatmentUpdates) in SchedulerConfig to identify an incorrect record (AOMConfig &
WatchDogConfig are other configs to check for issues)
4. Update SchedulerConfig with the correct cron expression for the report (e.g. * 30 8 ? * * *) in the record
5. Confirm the WatchDog case outputs the expected report at the correct time (e.g. at 8:30am)
References Bug 914953: Audit log is not sent to the DL at the configured time
Functionali
tyConnect-REST rules
Error
ScenariosAll APIs produce a 500 error response and do not reach the associated activity when called by an external program, but
succeed when called by an internal problem
Root Cause The requester pool was too full, meaning no new requests could be handled correctly
An OOTB Pega (StackTrace) class was being reported as unavailable by the environment
Possible
SolutionsCheck the Pega logs to see if they’re being populated, even if AOM logs are not, to discern if the request is reaching Pega
and find the true cause
Responsibl
e PartiesEnvironment team
Resolution 1. Clear the requester pool in case there are too many requester currently being used, preventing the APIs from actually
being ran.
2. Restart the environment and clear the Tomcat cache to ensure that all OOTB classes that should exist in the application
are present
References Bug 940346: APIs are failing with 500 internal server errorAll APIs are failing to connect
Functionali
tySimulation case
Error
ScenariosThe Simulation case was failing at the GetNBAWithIntents strategy with the following error message: “Caused by:


com.pega.pegarules.pub.generator.FirstUseAssemblerException: FUACache-FailAssembly
[this:is:not:a:classname] produced no java source.”
Root Cause A Local rule that was being called as part of the Simulation case could not compile as it was using a deleted property
Possible
SolutionsCheck the Pega logs to see if they’re being populated, even if the given error message is unclear, to discern if if the true
cause of the bug is available in there
Responsibl
e PartiesLogic team
Resolution 1. Delete the broken Local rule after ensuring that it is no longer being used
2. Keep track of what Local rules you create and delete them when you are finished with them
References Bug 950590: GetNBA Simulation FailingGetNBAWithIntents strategy causing GetNBA Simulation to fail


3834
Func
tiona
lityLaunch Upgrade from HALO/Mashup
Error
Scen
ariosCustomer Information Unable to Load

Root
Caus
e1. TIL Service timeouts/Failures for GCPL, GPSL, CRE
2. Invalid products populated in GPSL which do not exists in
catalogue
Poss
ible
Solut
ions1. Get the payload from audit table for GetCustomer to check
which TIL API failed, query audit table for TIL process which
failed and forward the payload to TIL for further investigation
2. Get the GPSL payload for the account, check the productids
from child products of  each subscription for below configured
fullfilmentitemcodes and query as per the error message
a. GetTariffs - Fail not found (pc_tariffs_v)
b. GetAccountService - Fail not found (pc_acct_service_v)
c. GetDiscount - Fail not found (pc_discount_v)

Resp
onsi
ble
Parti
esL3, L2
Reso
lutio
n1. TIL Investigation
2. Report to business teams to check with CMT
Refe
renc
esBUG 658942  Unable to Launch Upgrade On VADR from
HALO
Error Message at the Agent
Desktop


3835
Functionalit
yConnect-REST connection
Error
ScenariosGetCustomer or GetRecommendation has an exception occurred while mapping incoming response to .response.body
Root Cause Connectivity issue between VADR and AOM
Possible
Solutions1. Request NPE Support to resolve the connection
2. Verify the APIEndpoint is correct
3. Fix the AOM response if returned incorrectly
Responsible
Parties1. NPE Support
2. Environment team
3. App team
Resolution 1. Confirm whether the API is being called in AOM. If it is, resolve the API response. Otherwise, proceed with the next steps
2. Private Edit the Connect-REST rule in VADR
3. Paste the APIEndpoint in the URL (Base URL is before /prweb/…)
4. Press “Test Connectivity”
5. Contact NPE Support if there is an HTTP Error Message below
6. Ask for restarting the VADR environment
References Bug 961065: System Error -Customer Information unable to load when trying to open vadrVADR Exception while mapping response to .response.body
Functionalit
yUsage of <CURRENT> in Page-Remove
Error
ScenariosRemoving discarded products in GPSL
Root Cause Revised index after delete operation
For example, where customer has 8 child products, after deleting 4th product, the index is revised and 5th one becomes 4th.
However in look CURRENT value is still old hence when it reached 7th its deleting 6th page instead of 7th page.
1
2
3
4 - Delete
5 - 4
6 - 5
7 - 6
8 - 7
Possible
SolutionsSet .pyDeletedObject property and call RemoveDeletedObjects function to remove the pages instead of using Page-
Remove method
Responsible
PartiesApp team


Remove method
Responsible
PartiesApp team
Resolution 1. Loop through the list
2. Set pyDeletedObject as true for the pages to be removedRemoving Wrong Page of The Page List In A Loop


3836
3. After the loop is completed, call RemoveDeletedObjects function to remove the specified pages
References Bug 964077: TSAR - Excluded Tarrif showing in GPSL
Functionalit
yConnect-REST Authentication Profile
Error
ScenariosAPI: 401 response code authentication failure when calling GetProductList
UI: “System error: Products not available. Please try again later”
Root Cause Operator, for which the authentication profile is configured, was disabled during build deployment into CAPST AOM
Possible
SolutionsEnsuring the AOM operator used in the authentication profile is not “Disabled”
Configuring the authentication in VADR with the correct operator and password
Responsible
PartiesEnvironment team
Infrastructure team
Resolution 1. Confirm whether AOM is generating any error logs. If it’s not, look at what is failing in VADR logs
2. If a VADR API (e.g. GetProductList) is failing, Private Edit the Connect-REST rule in VADR
3. Paste the APIEndpoint in the URL (Base URL is before /prweb/…)
4. Press “Test Connectivity”
5. If the API returns a 401 authentication error, check the authentication profile of the Connect rule
6. Verify the authentication profile is correct as per “VADR Operator” in the Application Version or Branch tab in VFUK-
AOM : Change Log
7. Confirm that the operator exists in AOM and it is not “Disabled” (un-check this option if it is)
8. If the error still persists, check with the Infrastructure team
References Bug 973571: [ 3.5 AU Branch ] Edit deal tab error -System error: Products not available. Please try again later.API 401 Authentication Failure
Functionalit
yUpgrade Recommendations UI
Error
ScenariosApple Lover Discount is not displaying on the Recommendations panel on UI


yUpgrade Recommendations UI
Error
ScenariosApple Lover Discount is not displaying on the Recommendations panel on UI
Root Cause Data set up
Possible
SolutionsIf the Customer already has the Offer it is excluded from Recommendations and therefore does not display on the UI. This is
expected behaviour.
To check this:
Run D_ProcessedServiceList for this account number.
Check OfferIds of results. These are the Offers that are already available to the Customer.
If any of these Offers are included in Recommendations, then they will be excluded from the
D_CalculatedOffersForUpgrade data page results and therefore not displayed on UI.
Recommendations Offers can be checked on the Clipboard when running Upgrade case.
Responsible
PartiesInfrastructure team (data)Apple Lover Discount is not shown on Recommendations UI


3837
Resolution Remove the matching Offers from GPSL.
or remove the matching Offers from Recommendations
References Bug 989265: [ 3.5 AU Branch ] Apple Lover Discount is not shown on UI - Boards (visualstudio.com)
Functionalit
yOutboundResponses Kinesis Data Set Journey
Error
ScenariosRecords that successfully complete the EventStatus journey are not failing to write into the interaction History
Instead throw a Business Logic error stating that it was unable to find the given InteractionId in the interaction history
Root Cause Not all mandatory Subscription context properties are populated so the CaptureResponse data flow cannot find the correct
records
Possible
SolutionsCheck the existing journey that is currently writing to the interaction history successfully and investigate the activity in
which the context properties for the Subscription page are being set
Ensure that all Context properties being set in the working journey are also set in the Kinesis Data Set as well, to avoid
missing any mandatory context properties
Responsible
PartiesApp Team
Resolution Add the Channel property to the Subscription context and hard-code it as email
References Bug 1024940: UAT env - Email channel management - response does not workIMI Email Outbound Responses Not Writing to Interaction History When Called from Kinesis
Data Set
Functionalit
yConnect-REST Authentication Profile
Error
ScenariosWhen calling STF Mock Services via Connect REST rules in VADR, the service is failing with the error shown here (for
GetCustomer API in this example):
Error in GetCustomer: Error in GetCustomer: the HTTP response code of 403 indicated a client error. The response
data may contain a reason. // The body of the service's response, which is set up for mapping in the Connector
rule, was empty for this service call. // The service response contained insufficient data for mapping: The following


rule, was empty for this service call. // The service response contained insufficient data for mapping: The following
header(s) were not populated: [TransactionId, Source, Timestamp]. ;
Root Cause The Operator for the Authentication Profile used on the Connect REST rule does not have an Access Group which included
the STF application.
This error was first found when the STF application had been removed before a build. It was not added back into the
application after the build.
Possible
SolutionsIn VADR, open the Connect REST Rule (e.g. GetCustomer), and on the Service tab find the Authentication Profile (e.g.
VADRAuthentication).
Open the Authentication Profile rule (e.g. VADRAuthentication) and find the User Name (e.g. VFUK.VADR)
In AOM, open the Operator ID for this User Name (e.g. VFUK.VADR). You can search for this name in the Dev Studio
search bar.
On the Profile tab of the Operator ID rule, you will see the Application Access section. This shows the access group(s)
and application(s) that this Operator has access to.STF Mock Services failing when called from VADR Connect REST rules


3838
For the default Access Group shown, click on the Application to open the Application definition. STF should be one of the
built-on applications. Or STF maybe within one of the built-on application, so open each application listed to check that
STF is present.
Responsible
PartiesApp team
Resolution If the STF application is not present, then it should be added in order to use Mock Services.
References No ADOs raised, but development team reported STF Mock Services in VADR not working.
Functionalit
ySMS Channel Management
Error
ScenariosWhen calling SendMessage function, instead of sending the message to its destination the function instead produces an
error message
Root Cause The SMSC is not responding (timed out): Likely to be an issue with how the account details for the SMS Account have
been configured (incorrect username, password, server address, port, etc.), but also possibly due to issues with the
SMSC servers themselves
Invalid Address: Likely to be an issue with the SMS account that is being used for testing purposes being configured in
Sandbox Mode but called as a live account, but also possibly due to the destination address for the message being sent
to an invalid SMS number
SMS Client waited 30 seconds and did not receive a response: Likely to be an issue with the SMSGlobal account being
used to send the message not having any credits
Unknown error code (1001): Likely to be an issue with the sender address for the message being sent coming from a
dedicated number, which SMSGlobal does not allow us to send without permission to use the given number
Mandatory Input Validation Failed: smppAccount was null: Mandatory SMPPAccount clipboard page is not present in the
rule that is calling the SendSMSMessage function (which is not explicitly listed as a function parameter but is used by the


function extensively)
Possible
SolutionsFor all error messages, check the SMSGlobal logs as well as the Pega logs to confirm the actual status of the message
Incorrect Account Details scenario: Check the details for the SMS Account that have been inputted and ensure that all of
them are correct, re-inputting the password to ensure that the correct password is used (since it is encrypted and not
visible)
Sandbox Account scenario: There are two solutions, either set the Local SendSMSAccount rule to Available to run the
Sandbox-friendly implementation or switch to a live account if sending a live message is truly necessary
Invalid Destination scenario: Check the destination address present in the payload for the SMSSendQueue record and
ensure that it is correct before attempting to re-send the message
No Credits scenario: Request credits for the necessary account from NPE Support
Dedicated Sender scenario: Update the Sender Alias details to include a source number for the message that is not
considered a dedicated number or use an SMSGlobal account that has permission to send from the dedicated number if
this is truly mandatory
No SMPPAccount Clipboard Page scenario: Call the D_SMPPAccount data page with the necessary input parameters
(SMS Account Reference and Sender Alias) and copy it into SMPPAccount page
Responsible
PartiesChanges depending on the nature of the error message
Resolution Check the nature of the error message and perform the necessary next steps to resolve it
References N/ASendSMSMessage Producing Error Messages


3839
 Functionalit
yVADR Connect REST Rules Authentication Profiles
Error
ScenariosDuring launching a mashup, getting BL error due to lack of RetentionEligibility type for the customer
The issue is not specific to the BL error, it can be anything
Root Cause While using in a correct app version during the mashup launch in VADR, all Authentication Profiles on the Connect-REST
rules are pointing to the latest app version in AOM side. (while testing the lower releases)
Possible
SolutionsEnsure that all of the Authentication Profiles on the Connect-REST rules that is being used for testing is set up to point the
appropriate app version
Responsible
PartiesEnvironment Owners (Ex: QA team for ST environments)
Resolution Create a local version of all Connect-Rest rules in a local ruleset and update the authentication profile based on which
release needs to be tested
References Bug 1160677: R-3.06 SP2: Due to CRE issue we are getting BL error in V6 Application.Pointing to Wrong App Versions
Functionalit
yOn click of table column header sort functionallity
Error
ScenariosPega OOTB table sort not working in case column header have ellipsis control
Root Cause Elipsis control creates inner table for label so it looses OOTB sort
Possible
SolutionsSending control to parent table
Responsible
PartiesApp team
Resolution Created listener jquery for the column class in wrapper HTML
defined class in Ellipsised column header
References Bug 1230466, Bug 1230467, Bug 1230469, Bug 1234921Pega OOTB table sort not working
Functionalit
yUniversal
Error
ScenariosA specific functionality fails due to calling a rule that should exist but does not exist or calling a rule from an outdated ruleset


Root Cause The requisite rule(s) do not exist in the environment despite existing in Dev environment
Possible
SolutionsA build with the requisite rule(s) needs to be deployed into the environment that produces the error, either by creating a new
build with the rule(s) included or by deploying the existing build that was missed into the environmentRule(s) Not Deployed in Environment


3840
Responsible
PartiesApp team if build hasn’t been created
Environment team if build has been created but wasn’t deployed
Resolution After noticing that the issue may be due to an existing rule being missing from current environment (such as seeing in
error logs that a ‘Call Activity’ step fails due to Activity not existing or noticing that defect is identical to previously resolved
defect raised in different environment), search environment for specific rule(s)/ruleset that is expected to exist
Upon being unable to find them, check Dev environments to ensure that the rules are in a ruleset that should have been
deployed into current environment
Check build log to see why rule(s)/ruleset do not exist
If rules do not exist in change log, then add them to the appropriate area in the changelog and then ensure that build
is created and deployed in current environment
If rules do exist in changelog and build was not already given, ensure that build is created and deployed in current
environment
If rules do exist in changelog and build was already given, environment team must request that the given build is
deployed in current environment
References Example of rules not being part of build: Bug 1257580
Example of build being created but not being deployed in current env: Bug 1266080
Functionalit
yAOM Activities
Error
ScenariosAn activity in aom is called but there is no entry in aom_audit db table
Root Cause There is an entry in AOMConfig which forces aom to skip logging of the activity to the aom_audit table.
The entry in AOMConfig is SkipAuditLoggingIntoDatabase. For this entry ConfigName is set to the ProcessName,
and ConfigValue is set to TRUE is logging to the audit table should be skipped.
Possible


and ConfigValue is set to TRUE is logging to the audit table should be skipped.
Possible
SolutionsThe AOMConfig entry can be updated to FALSE, or removed, if aom_audit table entry is needed.
However, audit information can be found in Pega logs instead.
Responsible
PartiesApp team / Testing team
Resolution The AOMConfig entry SkipAuditLoggingIntoDatabase is usually set to TRUE for a good reason. So only set to FALSE
if needed.
References n/aActivity is not writing entry to aom_audit db table
Functionalit
yReal-time data flow work item ids
Error
ScenariosUsing Kinesis Roaming Data Load
Root Cause Real-time processing starts for both of duplicate data flow work item ids when data is loaded. So that, every process works
twice.Duplicate Entries in event_status table


3841
Possible
SolutionsEnsure that there is only 1 data flow work item id for each real-time data flow without any duplicates.
Be aware of that when the data flow is run before the work item id is created for it, Pega automatically creates a work
item id called DF-Test-XXXXXX for the data flow. Ex:
Responsible
PartiesEnvironment owners
Resolution Remove one of the duplicate data flow work item ids
References Bug 1265539: RoamingEvents data flow is not getting updated in AOM
Functionalit
yUniversal
Error
ScenariosA specific rule is not behaving as the code dictates (i.e. calling itself as a child activity instead of the specified child activity)
for inexplicable reasons, and this is not reproducible in other environments
Root Cause This is caused by the rule that’s being called being corrupted in the environment that’s being used
Possible
SolutionsThe rule needs to be checked out and then immediately checked in again without making any changes
Responsible
PartiesApp Team
Resolution Perform an E2E run of the error scenario and trace the activity usage
If there is a call to another activity. pay close attention to what is happening at this stage (i.e. what activity it actually
calls and what happens inside this activity)
If this activity calls itself instead of the rule that it’s supposed to erroneously, it is likely corrupted
Perform the same E2E run in other environments to see if this is reproducible or if this is an environment-specific
occurrence
If it is an environment-exclusive process, it is likely corrupted
Check the rule out and immediately check it back in to resolve this error case
References Bug 1280542: Billing details not populated in VADR through Mock Config in STFRule Corrupted in Environment
Functionalit
yMapping recommendations to the UI Screen
Error


Functionalit
yMapping recommendations to the UI Screen
Error
ScenariosMapDataForUI Data transform throws an error when the upgrade case is launched MapDataForUI Error


3842
Root Cause This is caused because the Tenure value that received from GetRecommendations is 0 so in the
CalculateRecommendationTotals Data transform it is failing at the function where it is trying to divide by 0
Possible
SolutionsEnsure the Tenure value is populated with value higher than 0
There is another condition shown below, which shows MaximumTenure should also be set to a value that is higher than 0
so that Tenure is not replaced if MaximumTenure was to be 0.
Responsible
PartiesLogic Team
Resolution Start the tracer before launching the upgrade case and notice that the step where DeviceMonthlyCost is populated in
CalculateRecommendationTotals Data transform (which uses a divide function) is failing
Identify in the SR pages returned in GetRecommendations if Tenure or MaximumTenure is 0
Tenure and MaximumTenure should be populated with a value greater than 0
Relaunch the case after updating these properties with the appropriate value
References Bug 1305401: Retail: Error in GetRecommendations: NO Decision
Functionalit
yConnect Rest
Error
Scenarios The billing panel on the left hand side of the AOM Upgrade page in the Customer information menu is reflecting blank.
Root Cause GetInvoiceList is invoking first time at TIL, the request going from VADR seems to be having binary content.

Possible
SolutionsAdding Content-Type as below fixed this issue.HTTP connect execution failure Error


3843

Responsible
PartiesApp Team
Resolution Add Content Type in request header.
References 1346417: PAYM Upgrades || Billing tab is appearing blank.
Functionalit
yGetProductList V2
Error
ScenariosWhen user runs the GetProductList V2 API using certain requests through SOAPUI or Postman, they receive a 500 failure
response even though the request is valid and should result in success response
Root Cause The request had invalid characters which appeared to be standard spaces, but were not, resulting in the following error
message: Unexpected character (' � ' (code 65533 / 0xfffd) (sourced from Pega logs)
Possible
SolutionsEnsure that the request sent to GPL V2 API does not include any invalid characters by mistake so that it can process
property
Responsible
PartiesUser themselves
Resolution 1. Run the request on GPLV2 using SOAPUI (sample request for this case attached below)Failure in GPLV2 Due To Invalid Characters In Request
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{
    "SubscriptionId": "Upgr-Subs-104935",
    "ServiceNumber": "447733104806",
    "OwnerAccountNumber": "3333103948",
    "AgentId": "SpecialAgent",
    "Division": "eShop",
    "Channel": "Web",
    "SubChannel": "eShop",
    "OrderType": "Upgrade",
    "CaseId": "HBBCaseId",
    "ProductType": "Tariff",
    "ParentDivision":"False",


"ProductType": "Tariff",
    "ParentDivision":"False",
    "RecommendationId": "10",
    "SubscriptionType": "Fixed Broadband Service",
    "StoreId": "StoreId",
    "Detail": [
        {"Name":"SERVICE_LINE_CLASSIFICATION_CODE", "Value":"SOGEA 40"},
        {"Name":"MAX_DOWN_SPEED", "Value":"50000"},
        {"Name":"UPGRADE_TYPE", "Value":"NORMALSIMOFLEX"}
    ],
    "LineItems": [
        {"ProductId": "205199",
        "ProductType": "Tariff"
        }
    ]
}


3844
2. Upon seeing {"Error": "Internal Server Error"} in the SOAPUI response, and that the response code given is 500,
check the AOM Audit/Error tables for this run to check if there is any additional information provided
3. Upon seeing that there are no records in the AOM Audit/Error tables for this particular run (meaning that it did not reach
the GetProductList V2 activity) check Pega logs directly for any information on the API call
4. Upon seeing Unexpected character (' � ' (code 65533 / 0xfffd) error message in Pega logs, rewrite the request body to
ensure that there are no illegal characters included in the request by mistake
References NA
Functionalit
yUpgrade (VADR)
Error
ScenariosOn when running Upgrade case using Mashup Data Transform.
Error in GetCustomer: the server responded with an HTTP 401 code.

Root Cause The Authentication Profile used on the GetCustomer Connect REST rule is failing.  The password set on the VADR
Authentication Profile and/or the password set on the AOM Operator may not be correct.
To check this, on the Connect REST rule click the Test Connectivity button (bottom of the Service page). If there is an
authentication issue, you will see a 401 code.
Possible
SolutionsUpdate the password on the VADR Authentication Profile and/or the AOM Operator ID.
Responsible
PartiesApp Team, NPE Support
Resolution From the GetCustomer Connect REST rule, open the Authenication Profile rule.
Find the relevant password from the environment sheet.
Update the password on the Authentication Profile rule.
To check if this solves the issue, on the Connect REST rule click the Test Connectivity button (bottom of the Service
page).


page).
If there is still a 401 error, in AOM find the relevant Operator ID (the name will be the same as the User Name on the
VADR Authentication Profile rule).
On the Operator, Update Password with the same password as the Authentication Profile.
To check if this solves the issue, on the Connect REST rule click the Test Connectivity button (bottom of the Service
page).HTTP 401 code, indicating an authorization problem


3845
References
Functionalit
yConnect-REST API
Error
ScenariosThe Edit Deals has a red “System error: Products not available. Please try again later.” error
Root Cause The GetProductList Connect-REST API call in VADR fails with the exception Caught unhandled exception:
java.lang.RuntimeException: java.net.SocketTimeoutException: Read timed out
Possible
SolutionsIncreasing the timeout of the Connect-REST rule in a local ruleset
Identifying why the API is taking so long and resolving this
Responsible
PartiesApp Team, Environment Team
Resolution 1. Upon seeing the System error message, check AOM/VADR logs and aom_error
2. Upon seeing the read timed out exception in VADR logs, confirm that a response has been made in aom_audit
3. Confirm that the response is taking longer (e.g. 33s) than the timeout (30000)
4. If the response time is as expected, consider increasing the timeout
5. Check if the error persists, otherwise, consider contacting NPE Support
References 1382245: CCS 23.6B || SIT1/E4 || Retail Assisted Upgrades || MBB || Getting "System error: Products not available Please
try again later" On edit deal pageAPI request takes longer to respond than the timeout
Functionalit
y<Functionality>
Error
Scenarios<ErrorScenarios>
Root Cause <RootCause>
Possible
Solutions<PossibleSolutions>
Responsible
Parties<ResponsibleParties>
Resolution <Resolution>
References <References><IssueTitle>


3846
Defect Triage for 2.09
ADO Standards
Things to do by Q&A  Team before raising the issue
Generic Issues
Issue Triage Questionnaire
518676 Getting ValidateBasket: Error Code: 5014; Error Message:
Error in ValidateBasket: ProductName is null or empty for
.request.body.LineItems ; in edit deal screenUpdated "RecommendationType" mapping
as "Type"
529754 Issue With DealId, OrderID Removed OrderId and DealId parameters
from the encryption activity.
535675 VADR UI is ending up with Error in GetRecommendations:
Business Logic ErrorAdded .PrimarySubscriptionId mapping
521779 Tariff is coming as line item and child line item in PyworkpageAdded jump condition to jump LIG step
529773 SubmitBasket with Internal Server Error PrepareCreateSalesOrderRequest Activity
Step 6 WHEN Rule & SubmitBasket:
Populated Medatadata in QEL Step
530656 Device details are not displaying in GetCustomer
response,where as it is displaying Subscription XCAR dataset
Device listRemoved Subscription page from Clean step
from PrepareTariff activity in order not to lose
Device info.
536511 D_CalculatedOffersForUpgrade is not returning results
537457/533508/531606 Data alignment issues is Comma separated instead of Pipe Updated seperator from pipe to comma for
BenefitProducts and BenefitAdvertisements
fields
530220 PC Loader is getting failed with an error as Error in
TruncateDateSet: Invalid Entity Name:
pc_service_handset_compAdded pc_service_handset_comp routing
540100 Data Alignment issue in pc_tariff table for columns
benefit_product & benefit_advtAdded a condition to SplitStringByComma
function to add values only if they are not null
or empty


function to add values only if they are not null
or empty
533663/551992 Update the Stock data for all Handset Products matching the
ProductIdConsidering all the ProductId’s in the List (
remove jump to skip on first occurrence)
553853 Discount calculation is incorrect in Existing deal and in
GetCustomer response.Change in the formula for calculating cost
value for discount child product
554988 Regression - Upsell Eligible offers are getting 204 error in
BundleEvent API.Updated withdrawn data page name in
GetBundleEventDecisionDetails acitivtyADO Issue Description Fix Details


3847
ADO Standards
ADO tickets for defects should include standards shown below.
Steps to reproduce the issue,
Expecting & Actual results,
API call which is giving this err,
Error Codes & Error Messages
Customers which are used during the issue (Request & Response samples)
Things to do by Q&A Team before raising the issue
First test team should check the things listed below when they face the issue.
Logs
DB records (aom_err table)
Check both nodes
API spec to check mandatory fields/expected things
They can use SoapUI for testing the request outside pega.
Generic Issues
Unexpected values returning from API calls - Most of the cases, we need to verify whether they are coming from logic or having wrong
mapping etc. in app side.

Issue Triage Questionnaire
ADO 518292 - Not displayed VF Together icon in the Tariff List in the Edit Tariff Tab
1. Which environment?
a. PC-SIT
2. Which application?
a. VADR
3. Where does the issue occur?
a. In the UI layer
4. Which screen in the UI?
a. In the Edit Deal screen
5. Which tab in Edit Deal screen?
a. Tariff tab
6. What is the issue in Tariff tab?
a. VF Together icon is not displayed.
7. What is the .IncludesCombiBundleOffer property value?
a. If it is true → Check the issue with UI team
b. If it is false → Check SR page coming from logic
8. Is it coming false from SR page?
a. Yes → Check the issue with logic team
b. No → Check the issue with app team
9. Where is app side interacting with .IncludesCombiBundleOffer property?


9. Where is app side interacting with .IncludesCombiBundleOffer property?
ADO 521736 - Tariff, Discount, Handset, and insurance pages are not available in the Pyworkpage


3848
1.


3849
Data Page Errors Debugging

How to change the ConnectSQL rule from Dev environment to be runnable in DB: (Update the values that have ASIS with your
request parameters)Functionali
tyData page
Error
ScenariosNo results from data page
Root CauseIsSellable = false or attributes that the ConnectSQL is searching is not available in Product Attributes
Possible
SolutionsWhen inserting records, check all product attributes are populated and check if IsSellable is set to true
Responsibl
e PartiesPMTool, Developers
Resolution 1. Run the data page with the inputs and open the tracer
2. Copy the SQL script from the tracer step page/ copy the SQL from ConnectSQL rule and add your inputs
3. Run the SQL script in the DB and check at which point the records being displayed stops - check by running the SQL in
each part
4. Check in the product attributes if IsSellable is set to false for that Identifier
5. Check if any other remaining attributes are not populated eg. NotSellableBy is not available in the product attributes for
that identifierData page Error
Functionali
tyData page
Error
ScenariosThere was a problem getting a list: code: 0 SQLState: 22P02 Message: ERROR: invalid input syntax for type json
Detail: Token """ is invalid.
Where: JSON data, line 1: ...Team":"|Save|SuperSave|Omni|","IsFixed":"false","
Root CauseOne of the records in the product attributes table has an invalid JSON
Possible
SolutionsWhen inserting records, make sure the JSON is valid
Responsibl
e PartiesPMTool, Developers
Resolution 1. Export the table records into a csv file


e PartiesPMTool, Developers
Resolution 1. Export the table records into a csv file
2. Open the csv and search with where the error is occurring eg. "IsFixed":"false"," (when exporting as csv the data may be
in 2 speech marks) so ""IsFixed"":""false"",""
3. Find the record with the invalid JSON, search the identifier in the product attributes table and update the record to a valid
JSONData page Error


3850
ASIS:PropertyNames can be found in config for the data page by searching PropertyNames and checking the value for the data page.
For example for D_DiscountsForTariff data page, config value is:
name as ".Name",amount as ".Amount",discountproductfulfilmentcode as ".DiscountProductFulfilmentCode",type as ".Type",duration as
".Duration",promotion_start_dt as ".PromotionStartDate",promotion_end_dt as ".PromotionEndDate",default_ind as
".DefaultIndicator",rex_autoadd_ind as ".RexAutoaddIndicator",relationship_type as ".RelationshipType",product_class as ".ProductClass"
So relpace {ASIS:PropertyNames} with the config value as shown below.
* can also be used instead of using the config value in place of {ASIS:PropertyNames}
A possible error, since DepartmentsIdentifier is not defined in the config value: (could be any property)
To overcome simply add departments_identifier as ".DepartmentsIdentifier", under the select.
ConnectSQL taken from the activity where RDB-List method is performed: (Search RequestType and open ConnectSQL rule.
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
29
30
31{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
where
   tariffs_identifier = '{ASIS:TariffsIdentifier}'
   and  SellableDepartment not in ('{ASIS:DepartmentsIdentifier}')


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}'||'_'||'{ASIS:OrderType}
    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)
)
select * from tmp
where 1 =
 case
      when ('N/A' = '{ASIS:DepartmentsIdentifier}'
            or ".DepartmentsIdentifier" IN ('{ASIS:DepartmentsIdentifier}') ) then 1


3851
DB Version after replacing ASIS values with request values:
32
33      else 0
 end
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46with tmp as (
select
name as ".Name",
amount as ".Amount",
discountproductfulfilmentcode as ".DiscountProductFulfilmentCode",
type as ".Type",
duration as ".Duration",
promotion_start_dt as ".PromotionStartDate",
promotion_end_dt as ".PromotionEndDate",
default_ind as ".DefaultIndicator",
rex_autoadd_ind as ".RexAutoaddIndicator",
relationship_type as ".RelationshipType",
product_class as ".ProductClass",
pc_discounts_tariff_v.Identifier as ".Identifier",
departments_identifier as ".DepartmentsIdentifier",
tariffs_identifier as ".TariffsIdentifier"
from
aom.pc_discounts_tariff_v
left join aom.product_attributes on
product_attributes.identifier = pc_discounts_tariff_v.identifier
where
tariffs_identifier = 'P_111924'
and SellableDepartment not in ('*')
and product_attributes.attributes::json->>'OrderType' like '%|New Acquisition|%'
and (product_attributes.identifier is null
or product_attributes.attributes::json->>'SellableChannels' like '%|InboundCC|%'
and product_attributes.attributes::json->>'IsSellable' = 'true'
and product_attributes.attributes::json->>'NotSellableBy' not like '%InboundCC' || '_' || 'New Acquisiti


and
case
when ('InboundCC' in ('InboundCC')
and (product_attributes.attributes::json->>'SellableTeams' is null
or product_attributes.attributes::json->>'SellableTeams' not like '%|SuperSave|%')) then 1
else 0
end = 0) )
select
*
from
tmp
where
1 =
case
when ('N/A' = '*'
or ".DepartmentsIdentifier" in ('*') ) then 1
else 0
end


3852
Toolbox
Useful tools, scripts, etc for AOM/VADR troubleshooting and support.
PAT support SQL  Scripts
VADR DB scripts - Check Upgrade cases
PAT AOM Support - API Timings
PAT AOM Support - Percentile calculation
PAT AOM Support - 95th position
PAT AOM Support - 95th position on V ADR launch
PAT AOM Support - Calculate 95th position data for V ADR launch
PAT AOM Support - Get all APIs for customer
VADR Actions - APIs Invoked
PAT support SQL Scripts
FunctionalityVADR DB Scripts - check pc_vfuk_vadr_work table (Access to VADR db required)
Use Check status of Upgrade cases. May need to check timings of VADR cases when investigating PAT issues.
Scripts DB Scripts to check VADR. Update date/times as required to return results between these times.
Check Upgrade case timings:
select *,EXTRACT(EPOCH FROM (pvvw.pyresolvedtimestamp  - pvvw.pxcreatedatetime)) AS difference from
pc_vfuk_vadr_work pvvw
where pxcreatedatetime between '2023-01-18 13:24:00' and '2023-01-18 14:24:00'
Check cases with status of 'Resolved-Cancelled' between stated date/times:
select * from pc_vfuk_vadr_work pvvw
where pxcreatedatetime between '2023-01-24 13:36:00' and '2023-01-24 14:36:00' and
pvvw.pystatuswork='Resolved-Cancelled' order by pxcreatedatetime desc
Check cases with status of 'In Build' between stated date/times:
select * from pc_vfuk_vadr_work pvvw


select * from pc_vfuk_vadr_work pvvw
where pxcreatedatetime between '2023-01-24 12:30:00' and '2023-01-24 13:30:00' and pvvw.pystatuswork='In Build'
order by pxcreatedatetime desc
Check cases with status of 'Resolved-Completed' between stated date/times:
select * from pc_vfuk_vadr_work pvvw
where pxcreatedatetime between '2023-01-24 13:36:00' and '2023-01-24 14:36:00' and
pvvw.pystatuswork='Resolved-Completed' order by pxcreatedatetime desc
Responsible
PartiesPAT team / App team
Notes Run the above sql script(s) in VADR dbVADR DB scripts - Check Upgrade cases


3853
FunctionalityAOM PAT Support - API Timings
Use Check timings for specific APIs
Scripts To check the Specific API Timings. Update date/times as required to return results between these times. The example below
is for GetNextBestActionsV2 - replace with API name for other APIs.
=============================================================================
select * from (select
source_system,primary_context,secondary_context,start_timestamp,end_timestamp,process_name,
identifier,metadata,
extract(EPOCH from (end_timestamp - start_timestamp)) as difference from aom.aom_audit aa where
start_timestamp between
'2023-01-25 07:00:00' and '2023-01-25 15:00:00' and process_name = 'ValidateBasket') t order by t.difference desc
Responsible
PartiesPAT team / App team
Notes Run the above sql script(s) in AOM dbPAT AOM Support - API Timings
Functionalit
yAOM PAT Support - 95th Percentile calculation
Use May be needed in order to investigate issues/defects
Scripts 95th Percentile Calculation for GetProductList on Handsets, Tariffs, Discounts, AddOns, Insurance. Update date/times as
required to return results between these times. The example below is for GetProductList - replace with API name for other
APIs.
select 'R 3.X-'||t.secondary_context, count() as "TotCount",round(count()-count()*.95) as "95thPos",
min(t.difference),max(t.difference),avg(t.difference) from
(
select source_system ,primary_context,start_timestamp,end_timestamp,process_name,identifier,metadata,
extract(EPOCH from (end_timestamp - start_timestamp)) as difference,secondary_context from aom.aom_audit aa
where start_timestamp between


where start_timestamp between
'2023-01-24 14:53:06' and '2023-01-24 15:53:06' and process_name in ('GetProductList')
) t group by secondary_context
Responsible
PartiesPAT team / App Team
Notes Run the above sql script(s) in AOM dbPAT AOM Support - Percentile calculation
Functionalit
yAOM PAT Support - Get timings for 95th Position
Use May be needed in order to investigate issues/defects
Scripts Get the Timings at 95th Position (i.e Navigate to Tariff). Replace secondary_context for Handsets, Discounts etc. Update
date/times as required to return results between these times. Replace <<95thPos>> with the resulting 95th position from
previous script.
select t1.process_name,min(t1.difference) from (select * from (
select PAT AOM Support - 95th position


3854
source_system,primary_context,secondary_context,start_timestamp,end_timestamp,process_name,identifier,meta
data,
extract(EPOCH from (end_timestamp - start_timestamp)) as difference from aom.aom_audit aa where
start_timestamp between
'2023-01-12 07:40:00' and '2023-01-12 08:40:00' and process_name='GetProductList' and secondary_context='Tariff'
) t order by t.difference desc limit <<95thPos>>) t1 group by t1.process_name
Responsible
PartiesPAT team / AOM team
Notes Run the above sql script(s) in AOM db
Functionalit
yAOM PAT Support - VADR Launch timings
Use May be needed in order to investigate issues/defects
Scripts The below query helps us to calculate 95th Position on VADR launch timings for each customer. Update date/times as
required to return results between these times. Calculates VADR launch timings based on GetCustomer and
GetRecommendations API timings.
select count(*) as "TotCount",round(count(*)-count(*)*.95) as "95thPos",
min(t1.tottime),max(t1.tottime),avg(t1.tottime) from (
select t.identifier,sum(t.difference) as "tottime" from
(
select start_timestamp,end_timestamp,primary_context,secondary_context,process_name,
case when identifier not like '1-%'
then (select sv.subscription_id from subscription_v sv where sv.service_no=aa.identifier and sv.subscription_id in
(select aa2.identifier from aom.aom_audit aa2 where aa2.process_name in ('GetCustomer','GetRecommendations')
and (aa2.secondary_context is null or aa2.secondary_context='NBA')
and
aa2.start_timestamp between


and
aa2.start_timestamp between
'2023-01-23 19:00:00' and '2023-01-23 20:00:00'))
else identifier
end as identifier
,EXTRACT(EPOCH FROM (end_timestamp - start_timestamp)) AS difference
from
aom.aom_audit aa where  process_name in ('GetCustomer','GetRecommendations') and
(secondary_context='NBA' or secondary_context is null) and
start_timestamp between
'2023-01-23 19:00:00' and '2023-01-23 20:00:00' order by start_timestamp,identifier
)
t group by t.identifier
) t1
Responsible
PartiesPAT team / AOM team
Notes Run the above sql script(s) in AOM dbPAT AOM Support - 95th position on VADR launch


3855
 Functionalit
yAOM PAT Support - Get 95th position data for VADR launch.
Use May be needed in order to investigate issues/defects
Scripts For VADR launch, calculate the 95th position data. The last record timing is the time taken at 95th position. Update
date/times as required to return results between these times. Calculates VADR launch timings based on GetCustomer and
GetRecommendations API timings.
select * from (
select t.identifier,sum(t.difference) as "tottime" from
(
select start_timestamp,end_timestamp,primary_context,secondary_context,process_name,
case when identifier not like '1-%'
then (select sv.subscription_id from subscription_v sv where sv.service_no=aa.identifier and sv.subscription_id in
(select aa2.identifier from aom.aom_audit aa2 where aa2.process_name in ('GetCustomer','GetRecommendations')
and (aa2.secondary_context is null or aa2.secondary_context='NBA')
and
aa2.start_timestamp between
'2023-01-23 19:00:00' and '2023-01-23 20:00:00'))
else identifier
end as identifier
,EXTRACT(EPOCH FROM (end_timestamp - start_timestamp)) AS difference
from
aom.aom_audit aa where  process_name in ('GetCustomer','GetRecommendations') and
(secondary_context='NBA' or secondary_context is null) and
start_timestamp between
'2023-01-23 19:00:00' and '2023-01-23 20:00:00' order by start_timestamp,identifier
)
t group by t.identifier
) t1 order by t1.tottime desc limit 39
Responsible


) t1 order by t1.tottime desc limit 39
Responsible
PartiesPAT team / AOM team
Notes Run the above sql script(s) in AOM dbPAT AOM Support - Calculate 95th position data for VADR launch
Functionalit
yAOM Support
Use May be needed in order to investigate issues/defects
Scripts Get All the APIs invoked for a specific customer. Update date/times as required to return results between these times.
Update customer account numbers as required.
select * from aom.aom_audit aa where identifier in ('1-BUZ7G217','447126246532','8003119678') and
start_timestamp between
'2023-01-25 06:26:00' and '2023-01-25 06:45:00' order by start_timestamp desc
Responsible
PartiesPAT team / AOM team
Notes Run the above sql script(s) in AOM dbPAT AOM Support - Get all APIs for customer


3856
VADR Actions - APIs Invoked
List of actions and associated APIs invoked
VADR_Launch GetCustomer, GetRecommendations,
GetCustomerNotficationsGetProcessedServiceList,
GetCustomerPartyList,
CheckRetentionEligibility
OpenCustomerProfile GetCustomerUsage
ClickOnRefineBy GetRecommendations GetStockAvailability
ClickOnEditRecommendation GetProductList  (Handsets, Data Device) Stock Check - GetStockAvailability
SelectDevice ValidateBasket
NavigateToTarriff GetProductList (Tariff)
SelectTariff ValidateBasket
NavigateToAddOns GetProductList(Addon)
SelectAddOns ValidateBasket
NavigateDiscount GetProductList (Discount)
SelectDiscount ValidateBasket
NavigateToInsurance GetProductList (Insurance)
SelectInsurance ValidateBasket
NavigateToAccessories GetProductList (Accessories)
SelectAccessories ValidateBasket
NavigateToBars GetProductList (Bars)
ChangeBars ValidateBasket
SaveAndClose NA
SelectRecommendation ValidateBasket
ClickOnContinue SubmitBasket GetStockAvailability
BillingProfile Click  GetInvoiceList
Download PDF  GetDocumentListAction ProcessName TIL Process_Name


3857
PAT Support
The PAT testing team will run load tests on VADR and AOM which where they run scripts to create many instances of the application(s) to
see how they perform under load.
They will produce a document giving timings of APIs under load. They may include results where API timings are degraded, or not within
acceptable timings. This is where they will ask the app team to investigate.
The aim of our investigation is to determine if there are any AOM or VADR code issues that cause degradation of API timings.
We may be able to determine from Pega Diagnostic Cloud (PDC) that there are resourcing issues (e.g. unreachable nodes) that are
causing performance issues.
Predictive Diagnostic Cloud (PDC)
Predictive Diagnostic Cloud | Support Center (pega.com)
You should be able to login and see the following page. Click on the “Access Predictive Diagnostic Cloud“ button.

You will then see the following screen. Click on the link in row 2 - VODPRO.
Once you are in the Diagnostic Cloud, make sure that you have selected the correct environment (shown here for PAT2) and that your
timezone is correct on the top right of the screen:
Topology Changes
On the left Menu bar, click on System Resources → Topology Changes. You will see this screen. Here you can check status of nodes
during the test run.
Navigate to the correct date and time for the test run you are investigating.


3858
You can see when nodes are unreachable (NODE STATUS LOST) and when nodes are shut down and started. Unreachable nodes and
nodes shutting down could be the reason for degraded test results.
You can click on the Open in Event Viewer link to examine details for that nodes, for example to see why the node shut down. See Event
Viewer below.
PAT testing do have an auto scaling policy which means new nodes should be started when others go down.
Event Viewer
On the left Menu bar, click on Event Viewer. You will see this screen.

This screen shows you details of Alerts and Exceptions on the different nodes. You can select date and time to display on the top right of
the screen. Here you can examine Alerts and Errors to see if there are any issues that may have impacted and degraded test results.
If issues are seen with nodes which may have degraded test results, then this should be passed back to the PAT team for their environment
team to investigate.
Examining AOM APIs
The PAT team will often provide results such as this with details of performance tests and any degraded APIs. We will need to investigate
why APIs are degraded - often this is down to resource and/or environment issues.
You can see the start and end date/times of the test run. Use these to find relevant node information in PDC (see above).


3859

To examine and confirm AOM API timings, you can use the db scripts in Toolbox - Vodafone - Confluence (atlassian.net) .
You can check timings for all APIs for one customer, and individual APIs. Check these match PAT results given. If any APIs show slow
timings, with no resource issues, we may need to investigate code to check for issues. Data flows may be taking too long, for example, or
recurring loops in activities.
Notes on Transactions:
SIMOUpgrade - this is for GetProductListV2 API.


3860
VADR Versions
Generally when making any updates, conflicting rules should be updated.
For example, if a rule requires a fix in v10, first view the versions of this rules and see in what other versions the rule exists. The change has
to also be updated in the higher ruleset versions.
Sometimes some rules are locked because they have gone to higher environments and we cannot make anymore bug fixes so we give
fixes as a hot fix
If a hotfix has been given in a particular ruleset, that same inskey record updated in changelog have to be copied into the higher ruleset
versions
Eg. These rules were given as a hotfix and updated in 01-09-02 ruleset
Same records have been copied into higher versions so that the rules in that particular ruleset are updated in that application also:
Then you may find these rules exist in higher ruleset version, so you should also update that in the higher ruleset and update the change
log accordingly
Since the Retail release there are multiple different versions:
VADR-UI:01-15-01 - R4.04 Retail
VADR-UI:01-15-02 - R4.04 Retail Bug Fixes
VADR-UI:01-15-03 - R4.05 Retail
And as part of 4.5 release there is:
VADR-UI:01-13-01 - R4.05
VADR-UI:01-13-02 - R4.05 Bug Fixes
VADR-UI:01-15-04 - For Making live on Top of  V13
Retail specific bug fixes should not be applied to v13 rule sets


3861
However, there are some code in the v13 rules that


3862
Testing Functionality
Test Action from offer flow
Seed Test Functionality
Assisted Upgrades Test Harness
Email Seed Test POC
API SimulationExpand all   Collapse all


3863
Test Action from offer flow

Activity SimpleProcessTestOfferWrapper PreTestOffer activity is called to check offer attributes before
going through other steps.
GetSeedListSeeds activity called.
A records is populated in MKT_OFFERTESTRUN db table for
each seed test run which includes all the information for the
selected treatment run.
All the processed customers are recorded in
MKT_OFFERTESTPARTICIPANT db table.
SimpleProcessTestOffer activity called.

Activity PreTestOffer If the offer is checked out by the current operator, the rule is
forced to save.
SeedList is checked if it exists or not.
Preceding shape and connector and starting name for the
offer flow is populated. If an issue occurs DoNotRunTest is set
toTrue.
Activity GetSeedListSeeds All records in the selected SeedList are populated in
tmpSeedList page.Rule Type Rule Name Description


3864
Activity SimpleProcessTestOffer DecisionRequestClassName is populated from
D_CDHSubjectDictionary data page
Offer data populated in PopulateOfferData activity and
results stored in pyWorkPage
ProcessOffer activity called to process the treatment.
If the offer status is “Failed”, DeleteFlatListOfPassInstances
activity called.
MKT_OFFERTESTPARTICIPANT  db is updated with the
latest status.
Activity PopulateOfferData CreateMarketerPageForOperator activity called
RetrieveProposition activity called
 LoadSingleCustomerData called to customer data for
"PegaMKT-Data-SeedList-" + Primary.SeedList class.
Channel, Direction and TreatmentName properties are
populated from proposition data that retrieved previously.
Activity ProcessOffer ProcessOfferHelper activity called to get top level SR class.
(VFUK-AOMFW-SR)
 pxRunSingleCaseDDF activity called to trigger the
InboundPrimaryData DF.
Activity CreateMarketerPageForOperator Operator data that triggered the seed list action is populated
in this activity.
Activity RetrieveProposition The treatment related data is  populated in this activity for the
top level SR class
Activity LoadSingleCustomerData Customer data is populated in this activity for the selected
CustomerDataClass.
Activity ProcessOfferHelper GetTopLevelSRInNonApplicationContext activity called to
get top level SR class
D_CDHSubjectDictionary data page called “Customer” data
dictionary to get the Customer class which is currently VFUK-
FW-AOMFW-Data-Subscription.
Activity pxRunSingleCaseDDF The activity that calls Dataflow.
Activity DeleteFlatListOfPassInstances TBD
Data Flow InboundPrimaryData Customer spine data is populated
DF_ProcessOffer data flow called to create treatment
records in Email/SMS Staging table to send Email/SMS.


records in Email/SMS Staging table to send Email/SMS.
Data Flow DF_ProcessOffer DF_WriteToStaging Df is called.
Data Flow DF_WriteToStaging Email and SMS data populated into EmailStaging and
SMSStagin respectively.
Agent PegaMKT-Engine.SendEmailsInBulk The agent that picks up email records and queues for
PegaMKT-Engine.SendEmailChild in every 10 seconds.
Activity SendEmailsInBulkMaster This activity queues all the “Pending-Delivery” status records
to PegaMKT-Engine.SendEmailChild agent.
It is run for every 10 seconds
Agent PegaMKT-Engine.SendEmailChild This agent that processes queued items for “Pending-
Delivery” status in EmailStaging table
It is run for every 10 seconds
Activity SendEmailChild This activity that picks up records from EmailStaging table
sends emails for every 10 seconds.
Success records are truncated from EmailStaging table
DF_ProcessEmails DF is called to send emails, unsuccessful
records are populated into EmailStaging table again.
Agent PegaMKT-Engine.SendSMSInBulk This agent that picks up “Pending-Delivery” status SMS
records and queues for PegaMKT-Engine.SendSMSChild in
every 30 seconds.
Activity SendSMSsInBulkMaster This activity queues all the “Pending-Delivery” status records
to PegaMKT-Engine.SendSMSChild agent.
It is run for every 30 seconds
Agent PegaMKT-Engine.SendSMSChild The agent activity that picks up records from SMSStaging
table sends emails for every 10 seconds.


3865
 Success records are truncated from SMSStaging table.
DF_ProcessSMS DF is called to send SMS, unsuccessful
records are populated into SMSStaging table again.
Activity SendSMSChild This activity that picks up records from SMSStaging table
sends SMS for every 10 seconds.
Success records are truncated from SMSStaging table
DF_ProcessSMS DF is called to send SMS, unsuccessful
records are populated into SMS Staging table again.


3866
Seed Test Functionality


3868

ExecuteSeedTest Activity

Note for ST Team: For SEED Testing execution should be taken place with random MSISDN but not from actual subscription
id/MSISDN from subscription view.
ExecuteSeedTest activity is used to invoke the Seed Testing Process by passing below parameters
Tag – Seed Tag Name (Mandatory)
Channel – Seed Test Channel (Mandatory)
SeedParametersJSON – Seed Test Input Parameters in JSON format which includes below elements (Mandatory)
TreatmentName– Treatment Name of the selected treatment (Mandatory)
TreatmentVariant – Treatment Variant of the selected treatment (Mandatory)
OfferVariant – Offer Variant of the selected treatment variant (Mandatory)
IsParentTreatment – Parent/Child indicator for bundling operations (Mandatory for Email Channel as the bundling concept is
available for only Email channel)
UseLiveCustomerData – Use Live Customer Data flag (Optional)
SeedDataSize – Number of communications for each seed user (Optional)
Input Validations
Input is validated and Error is displayed if either Tag, Channel or SeedParametersJSON is empty
If UseLiveCustomerData flag is true, users need to set SeedDataSize. Else an error message is displayed
If channel is not equal to SMS or Email or AppPush, an error message is displayed
If JSON structure defined for SeedParametersJSON is not correct, an error message is displayed
Load Seed User Data
Using Obj-Browse Method with below parameters
Class=VFUK-FW-AOMFW-Data-SeedUser
Tag=Param.Tag
DefaultDataTokensSR Page (from Load Default Data Tokens) will be used as base SR page.
Each SeedUser data is converted into an SR page using @AOMUtilities.AdoptJSON() function and will override the Default Data
Token values from the SeedUser data if any else data will me merged


Token values from the SeedUser data if any else data will me merged
If the Channel is Email & EmailAddress is not configured for the selected seed tag user, Error Message will be displayed.
If the Channel is SMS & Service Number is not configured for the selected seed tag user, Error Message will be displayed.
If the Channel is AppPush & SubscriberACR is not configured for the selected seed tag user, Error Message will be displayed.
Load Proposition Data & Process Email, SMS and AppPush
If UseLiveCustomerData is true, set LoopLimit as defined in the parameters. Else, set it to 1


3869
Loop through from 1 to LoopLimit to deliver treaments
Loop through for each treatment defined in SeedParametersJSON parameter
If UseLiveCustomerData is false, apply below steps
Populate Context page to pass below properties to GetPropositionDataForTreatment  strategy which is being called by
GetPropositionDataForTreatment DF
TreatmentName
TreatmentVariant
OfferVariant
IsParentTreatment
Channel
Call GetPropositionDataForTreatment DF to populate  proposition data. Else, as the treatment data will be populated from
SeedTestLiveData data set skip this step
If there is no result as part of GetPropositionDataForTreatment DF, an error message will be displayed
If the given channel and treatments conflicts( for eg: Channel = SMS, TreatmentName= MobileAddmobile_Email), an error
message will be displayed
If IsParentTreatment is true (which is applicable for only email channel) and Treatment is a child one, an error message
will be displayed
If UseLiveCustomerData is true, apply below steps
Query SeedTestLiveData for below properties
pyName (Treatment Name)
TreatmentVariant
OfferVariant
SampleId (Current Counter)
If there is no result as part of given query Id’s to SeedTestLiveData data set, an error message will be displayed
If the parameter does not match with the channel that is being populated from the corresponding data set, an error
message will be displayed
If IsParentTreatment flag is true (which is applicable for only email channel) and the specified treatment as part of
SeedParametersJSON is not a Parent in the corresponding data set, an error message will be displayed
If Channel is Email, apply below steps
If TargetSubChannel values are not the same for all treatments, an error message will be displayed
If TargetSubChannel is other than MailJet or IMI, an error message will be displayed


If TargetSubChannel is other than MailJet or IMI, an error message will be displayed
All the successful treatment record(s) will be populated into PropositionSRList to be used in further steps
Loop through SeedUserList which contains all the Seed User information to process treatments into the corresponding channels
Populate SeedUserSR page for all the default data tokens defined in AOMBusinessConfig with SeedDataToken config type.
Default data tokens can be any SR attribute being used in SMS, Email & AppPush channels
If UseLiveCustomerData is true, override SeedUserSR data token attributes with the SR attributes that has been populated
from SeedTestLiveData data set. Else, skip the step
If there is any data token defined on seed user level in SeedUser data type, then SeedUserSR page is overridden by Seed
User data tokens
Override below contact information from SeedUser data for each seed user
pySubjectID → CustomerID
CustomerID → CustomerID
pyEmailAddress → EmailAddress
ServiceNumber → ServiceNumber
NamedUser → SubscriberACR
If the channel is AppPush, call Process AppPush Seed Test


3870
If UseLiveCustomerData is false merge proposition data with data tokens, Else as the SeedUserSR page has already data
tokens and treatment SR page skip this step
Call InvokeAppPushNotification activity to push app notification onto users mobile
If the channel is Email, call Process Email Seed Test with SubChannel parameter which should be either MailJet or IMI
Populate Context page with all data token values prepared in SeedUserSR
Populate Subscription.TreatmentList page list to use in PrepareEmailTreatments Strategy
Set the CustomerId, ServiceNumber, BillingAccountNumber, Email, Consent Flags, and CustomerAccount.Contact fields
for Subscription page to contact seed user
If SubChannel is MailJet, call ProcessEmailForMailJet activity
Call PrepareEmailTreatmentsForSeedTest DF to apply bundling (applicable if SeedParametersJSON includes child
treatments) and to apply data token replacement in the PrepareEmailTreatments strategy
If SRList is empty as a result of the DF execution, an error message will be displayed
Loop through SRList.pxResults to set ExecutionMode to SeedTest for each treatment so that records will not be
populated into InteractionHistoryReporting data set
Call OOTB ProcessOffer activity to deliver Email treatments
If SubChannel is IMI, call ProcessEmailForIMI activity
Truncate EmailCustomersWithParentTreatmentsForChannelManagementSeedTest and
EmailCustomersWithChildTreatmentsForChannelManagementSeedTest data sets
Call PrepareEmailTreatmentsByChannelManagementForSeedTest DF to apply bundling (applicable if
SeedParametersJSON includes child treatments) and to apply data token replacement in the
PrepareEmailTreatmentsByChannelManagement strategy
Browse EmailCustomersWithParentTreatmentsForChannelManagementSeedTest data set and store results in SR


Browse EmailCustomersWithParentTreatmentsForChannelManagementSeedTest data set and store results in SR
If SR page is empty as a result of the data set browse, an error message will be displayed
Browse EmailCustomersWithChildTreatmentsForChannelManagementSeedTest data set with the matching keys from
EmailCustomersWithParentTreatmentsForChannelManagementSeedTest data set and store results in
SR.TreatmentList
Call PrepareRequest activity with the payload parameter SR page's JSON
Call SendEmail activity with SourceId and SourceType parameters to send the email
If the channel is SMS, call Process SMS Seed Test
If UseLiveCustomerData is false merge proposition data with data tokens, Else as the SeedUserSR page has already data
tokens and treatment SR page skip this step
Substitute data tokens for SMSBodyText & TreatmentDynamicVariables1 properties, which contains SMS text by taking values
from the given Treatment page
Set ExecutionMode to SeedTest for each treatment so that records will not be populated into InteractionHistoryReporting data set
Call SendSMSMessage activity to deliver SMS treatment
Error Handling and Resolutions
Please supply requested mandatory parameter:
TagTag is mandatory Pass a Tag parameter before calling the
ExecuteSeedTest activity
Please supply requested mandatory parameter:
Channel"Channel is mandatory Pass a Channel parameter before calling the
ExecuteSeedTest activity
Please supply requested mandatory parameter:
SeedParametersJSONSeedParametersJSON is
mandatoryPass a SeedParametersJSON parameter before
calling the ExecuteSeedTest activityError Description Resolution


3871
"Please supply Email or AppPush or SMS channel
instead of: "+Param.ChannelEmail or AppPush or SMS
channel are supported for
Seed TestingPass one of the corresponding channels
"Please supply SeedDataSize value from
parameter when UseLiveCustomerData is " +
Param.UseLiveCustomerDataSeedDataSize is only
available for
UseLiveCustomerData=true
option.Supply a valid positive integer number for
SeedDataSize
"No seed users found for the given tag :
"+Param.TagSeed users are group in the
tags in SeedUser data type
and treatments are delivered
for a given tagSupply a tag that exists in SeedUser data type
Create a new tag and user(s) as part of this tag
"Email Address is not configured for seed test user
CustomerID: "+SeedUser.CustomerIDIf the channel is Email, all
seed users needs to have
their email addresses
definedPopulate email addresses for each seed user for given
tag
"Service Number is not configured for seed test
user CustomerID: "+SeedUser.CustomerIDIf the channel is SMS, all
seed users needs to have
their service numbers
definedPopulate service number for each seed user for given
tag
"Subscriber ACR is not configured for seed test
user CustomerID: "+SeedUser.CustomerIDIf the channel is AppPush, all
seed users needs to have
their SubscriberACR’s
definedPopulate SubscriberACR for each seed user for given
tag
"Please supply a valid JSON structure for
SeedParametersJSON:
"+Param.SeedParametersJSONThe SeedParameters JSON
should be in a valid formatPlease validate your JSON structure
"Proposition is not configured for seed test or data


"Proposition is not configured for seed test or data
not found for the given parameter(s): Treatment
Name: "+SeedParameter.TreatmentName+";
Treatment Variant:
"+SeedParameter.TreatmentVariant+";  Offer
Variant: "+SeedParameter.OfferVariant+";  Channel:
"+Param.ChannelTreatment to be tested
should be available in the
corresponding decision dataCheck SMS, AppPush or Email business groups
for Treatment &
TreatmentToTreatmentVariations business group
for TreatmentVariant and OfferVariant as part of
below below business issues
Retention
CrossSell
Renew
Retain
Service
Upsell
TradeIn
Care
"Treatment Is Child" For email channel if the
treatment combination as
specified
IsParentTreatment=true, it
should not be defined as a
Child in Check ParentChildTreatments decision data and
provide a valid Parent treatment


3872
ParentChildTreatments
decision data

"No Customer Data has been found for the given
Keys : TreatmentName = " +
SeedParameter.TreatmentName + ";
TreatmentVariant = " +
SeedParameter.TreatmentVariant + "; OfferVariant
= " + SeedParameter.OfferVariant + "; SampleId = "
+ Local.CurrentCounterTreatment combinations
should be available in
SeedTestLiveData data set
for each SampleIdCheck SeedTestLiveData data set for treatments
combination and get the highest value of SampleId
and use it as part of seed testing
Param.Channel + " channel is not applicable for
treatment " + .pyNameParameter channel and
Treatment should be
matched as part of seed
testingCheck the channel property for given treatment
combination in SeedTestLiveData and rectify input
parameters accordingly
PropData.TreatmentName +" Treatment is Child" For email channel if the
treatment combination as
specified
IsParentTreatment=true, it
should not be defined as a
Child in
ParentChildTreatments
decision dataCheck the ParentChild property for given treatment
combination in SeedTestLiveData and rectify input
parameters accordingly
"Error in SubstitutePropertyTokens: Unable to get
the value for property - " + propertyName + " - in - "
+ pageAll the data token values
should be available for SMS
body textDefine a ConfigType for SeedDataToken
For UseLiveCustomerData=true option, check
SeedTestLiveData for corresponding treatment
combination if the missing data token value is
existing or not
Define a data token in DataTokens in SeedUser
data type
Invoked Seed Test Successfully. However, Email is
not deliveredAlthough you get a
successfull message email


not deliveredAlthough you get a
successfull message email
may not be deliveredPlease check below agents are in running status
SendEmailChild
SendEmailsInBulk
If Agents are on, please check
dataschema.pr_data_corr_email table for
corresponding seed user(s)
Invoked Seed Test Successfully. However, SMS is
not deliveredAlthough you get a
successfull message SMS
may not be deliveredPlease check below agents are in running status
SendSMSChild
SendSMSInBulk
If the Treatment exists in SMS business groups
and there is no action for corresponding SMS,
create an action for the same SMS treatment and
run ExecuteSeedTest activity. ( Please be aware of
that creating an action creates a treatment in logic
decision data)


3873

Example Parameters for Running ExecuteSeedTest activityIf Agents are on, please check
dataschema.mkt_data_corr_sms table for
corresponding seed user(s)
Invoked Seed Test Successfully. However,
AppPush is not deliveredAlthough you get a
successfull message
AppPush may not be
deliveredCheck if the SubscriberACR that you have is valid
or not
Check TreatmentDynamicExpiry property for the
treatment is up to date and in valid format
Check aom.connect_queue_status table for
corresponding seeduser(s)
“Error in ProcessEmailForMailJet: No Results from
PrepareEmailTreatmentsForSeedTest Data Flow"For Email channel and
MailJet subchannel
treatments, all the treatments
should be eligible as a result
of PrepareEmailTreatments
strategyVerify that you have passed a valid JSON List
structure as below examples
Otherwise, please check with logic team
"Error in ProcessEmailForIMI: No Results from
PrepareEmailTreatmentsByChannelManagementF
orSeedTest Data Flow"For Email channel and IMI
subchannel treatments, all
the treatments should be
eligible as a result of
PrepareEmailTreatmentsBy
ChannelManagement
strategyVerify that you have passed a valid JSON List
structure as below examples
Otherwise, please check with logic team
"Invalid TargetSubChannel: "+ .TargetSubChannelFor Email channel,
TargetSubChannel should be
the same for all treatmentsCheck TargetSubChannel value
Please check with logic team
"TargetSubChannel is not the same for all
treatments. Including target subchannels: " +
Local.FirstSubChannel + ", " + Local.SubChannelFor Email channel,
TargetSubChannel should be


Local.FirstSubChannel + ", " + Local.SubChannelFor Email channel,
TargetSubChannel should be
either MailJet or IMICheck inccluding target subchannel values
Please check with logic team
seed1 AppPush [
{
"TreatmentName":"GenericOffer
_AppPush",
"TreatmentVariant":"DataCapOn
NearDepletion",
"OfferVariant":"OfferVariantDefau
lt"
}
]false NA Send AppPush
Treatment
seed2 SMS [
{
"TreatmentName":"RedirectCall_
SMS",
"TreatmentVariant":"RouteToOnli
ne",
"OfferVariant":"OfferVariantDefau
lt"false NA Send SMS TreatmentTag Channel SeedParametersJSON UseLiveCust
omerDataSeedDataSiz
eNote


3874
}
]
seed1 Email [
{
"TreatmentName":"MobileAddmo
bile_Email",
"TreatmentVariant":"AdCons",
"OfferVariant":"Handset",
"IsParentTreatment":true
}
]false NA Send Standalone
Parent Email
Treatment
seed2 Email [
{
"TreatmentName":"MobileAddmo
bile_Email",
"TreatmentVariant":"AdCons",
"OfferVariant":"Handset",
"IsParentTreatment":true
},
{
"TreatmentName":"AddMobileSI
MO_Email",
"TreatmentVariant":"AdCons",
"OfferVariant":"OfferVariantDefau
lt",
"IsParentTreatment":false
},
{
"TreatmentName":"AddTablet_E
mail",
"TreatmentVariant":"AdConsGala
xyTab",
"OfferVariant":"OfferVariantDefau
lt",
"IsParentTreatment":false
}
]false NA Send Parent Email with
Child Treatment/s
seed1 AppPush [
{
"TreatmentName":"AddTablet_Ap
pPush",
"TreatmentVariant":"AdCons",true 3 Send AppPush
treatments by querying
SeedTestLiveData and
send 3 combination of


3875
Logic Changes"OfferVariant":"OfferVariantDefau
lt"
}
]TreamentName,Treatm
entVariant,OfferVariant
seed1 SMS [
{
"TreatmentName":"AddSmartwat
ch_SMS",
"TreatmentVariant":"AndroidSma
rtWatch",
"OfferVariant":"Android"
}
]true 4 Send SMS treatments
by querying
SeedTestLiveData and
send 4 combination of
TreamentName,Treatm
entVariant,OfferVariant
seed1 Email [
{
"TreatmentName":"MobileAddmo
bile_Email",
"TreatmentVariant":"AdCons",
"OfferVariant":"SIMO",
"IsParentTreatment":true
},
{
"TreatmentName":"AddTablet_E
mail",
"TreatmentVariant":"AdConsGala
xyTab",
"OfferVariant":"OfferVariantDefau
lt",
"IsParentTreatment":false
}
]true 2 Send Parent Email with
Child Treatment by
querying
SeedTestLiveData and
send 2 combination of
TreamentName,Treatm
entVariant,OfferVariant
Strategy Email, SMS,
AppPushGetPropositionData
ForTreatmentAOMFW-
Artifacts:01-
03-05Treatment data is populated for
each TreatmentID,
TreatmentVariant, OfferVariant
included in
SeedParametersJSON
parameter
If the IsParentTreatment is true,
it checks if the selected parent
treatment is parent/child
If the selected treatment is
child, ErrorMessage is
populated as "Treatment Is
Child"1.11 UpdatedRule Type Channel
UsageRule Name Ruleset
VersionDetail of changes Release Status


3876
Data Flow SMS PrepareSMSTreat
mentsForSeedTestAOMFW:01-
03-05This is the Dataflow that calls
PrepareSMSTreatmentsForSee
dTest
Once the logic team updates
the NameValidation strategy, it
will point to the
PrepareSMSTreatments
strategy1.11 New
Strategy SMS PrepareSMSTreat
mentsForSeedTestAOMFW:01-
03-05This strategy is the snapshot of
PrepareSMSTreatments
The strategy calls
PopulateOutputPropertiesForE
mailByBatchForSeedTest
This strategy is created
temporarily
Once the logic team updates
the NameValidation strategy,
this strategy will be withdrawn1.11 New
Strategy SMS PopulateOutputPro
pertiesForSMSByB
atchForSeedTestAOMFW:01-
03-05This strategy is the snapshot of
PopulateOutputPropertiesForS
MSByBatch
The strategy calls
NameValidationForSeedTest
strategy
This strategy is created
temporarily
Once the logic  team updates
the NameValidation strategy,
this strategy will be withdrawn1.11 New
Strategy Email, SMS NameValidationFor
SeedTestAOMFW:01-
03-05This strategy is the snapshot of
NameValidation
“CustomerAccountName” set
property is updated to populate
FirstName from context if it is
available
Data token values are
overridden in this strategy and
if a new data token is used in
the email templates/s, this
strategy needs to be updated
This strategy is created
temporarily
Once the logic team updates
the NameValidation strategy,
this strategy will be withdrawn1.11 New
Data Flow Email PrepareEmailTreat


this strategy will be withdrawn1.11 New
Data Flow Email PrepareEmailTreat
mentsForSeedTestAOMFW:01-
03-05This is the Dataflow that calls
PrepareEmailTreatmentsForSe
edTest1.11 New


3877
Once the logic team updates
the PrepareEmailTreatments
strategy, it will point to the
PrepareEmailTreatments
strategy
Strategy Email PrepareEmailTreat
mentsForSeedTestAOMFW:01-
03-05This strategy is the snapshot of
PrepareEmailTreatments
The strategy calls
PopulateOutputPropertiesForE
mailByBatchForSeedTest
This strategy is created
temporarily
Once the logic team updates
the NameValidation strategy,
this strategy will be withdrawn1.11 New
Strategy Email PopulateOutputPro
pertiesForEmailBy
BatchForSeedTestAOMFW:01-
03-05This strategy is the snapshot of
PopulateOutputPropertiesForE
mailByBatch
The strategy calls
NameValidationForSeedTest
strategy
This strategy is created
temporarily
Once the logic  team updates
the NameValidation strategy,
this strategy will be withdrawn1.11 New
Property Email IsParentTreatmentAOMFW-
Artifacts:01-
03-05The property that indicates if
the selected treatment in
SeedParametersJSON input is
parent or child1.11 New
Strategy Email, SMS,
AppPushGetPropositionData
ForTreatmentAOMFW-
Artifacts:01-
03-15TreatmentID is updated to
TreatmentName2.2 Updated
Strategy Email,SMS NameValidationFor
SeedTestAOMFW 01-
03-15Withdrawn as it is unneeded.
Name validations as applied as
part of NameValidation strategy2.2 Withdrawn
Strategy Email PopulateOutputPro
pertiesForEmailBy
BatchForSeedTestAOMFW 01-
03-15Withdrawn as it is unneeded.
Data token replacement is


03-15Withdrawn as it is unneeded.
Data token replacement is
applied as part of
PopulateOutputPropertiesForE
mailByBatch strategy2.2 Withdrawn
Strategy SMS PopulateOutputPro
pertiesForSMSByB
atchForSeedTestAOMFW 01-
03-15Withdrawn as it is unneeded.
Data token replacement is
applied as part of
ProcessSMSSeedTest activity
by using 2.2 Withdrawn


3878
 @AOMUtilities.SubstitutePrope
rtyTokens function
Strategy Email PrepareEmailTreat
mentsForSeedTestAOMFW 01-
03-15Withdrawn as it is unneeded.
PrepareEmailTreatments
strategy is being used2.2 Withdrawn
Strategy SMS PrepareSMSTreat
mentsForSeedTestAOMFW 01-
03-15Withdrawn as it is unneeded.
No need this straregt as SMS
data token replacements is
applied as part of
ProcessSMSSeedTest activity
by using
@AOMUtilities.SubstitutePrope
rtyTokens function2.2 Withdrawn
Data flow SMS PrepareSMSTreat
mentsForSeedTestAOMFW 01-
03-15Withdrawn as it is unneeded.
No need this straregt as SMS
data token replacements is
applied as part of
ProcessSMSSeedTest activity
by using
@AOMUtilities.SubstitutePrope
rtyTokens function2.2 Withdrawn


3879
SMS & Email Seed Test Functionality HLD
GetPropositionDataForTreatment Strategy
The main path should be Treatment data
Email and SMS should be added to the strategy
Treatment & Treatments Variant should be handled in the strategy, example context:
TreatmentVariant → TreatmentVariant1
TreatmentId → Trt1
Children treatments should be imported wrt parent TreatmentId if children exists
Children treaments should pick up default treatmentvariants.
If the TreatmentVariant is null, all the possible treamentvariants should be populated and send to the customer. @Zeynep Pinar
PrepareSMSTreatment DataFlow
Input: Abstract (Subscription)
Strategy: PrepareSMSTreatments
Output: Abstract (SR)
PrepareEmailTreatment DataFlow
Input: Abstract (Subscription)
Strategy: PrepareEmailTreatments
Output: Abstract (SR)
ExecuteSeedTest Activity:
Update Step 17 as channel specific ( Call 3 channel based sub-activities ):
Activity: ProcessAppPushSeedTest
Activity: ProcessEmailSMSSeedTest
Set Personalization data tokens in Context dynamically as below
FirstName →  Context(SDT_FirstName)
ServiceNumber → Context(SDT_ServiceNumber)
Append Context Page into Subscription Page
Set DecisionRequest page
Append the output of GetPropositionDataForTreatment with Subscription data  (Customer.TreatmentList)
Call PrepareEmailTreatment Data flow (If Channel = Email)
Call PrepareSMSTreatment Data flow (If Channel = SMS)
Call ProcessOffer activity
→ Parameters that should be set to run ProcessOffers:
.ResultPage Param "BatchResults"
.TestExecutionMode Param "TEST"Parameter Page Value


3880
 .DictionaryName Param "Customer"
.SubmitOperator Param pyUserIdentifier
pyEmail1  (Email) Subscription SeedUser.Email / DataToken
ServiceNumber (SMS) Subscription
CustomerID Subscription SeedUser.CustomerID / DataToken


3881
Seed Test Design
Extractor Case - Vishnu
Create a new process in extractor case ProcessSeedTestData
Create a new AOMConfig to call ProcessSeedTestData process
ConfigType: ProcessFlowToggle
ConfigName: ProcessSeedTestData
ConfigValue: TRUE/FALSE/HOLD
Change above ConfigValue as TRUE to not run this process in Prod environment
Create a new AOM Config for DF Work Item
Create a new DF Work Item
Call PopulateSeedTestLiveData DF that logic created
Use existing ProcessFlowToggle process
Check the status of DF and notify support in case of failure
Introduce a new Replace Data Token Function - Kagan -TBC @Suraj
Create a new function as SubstituteTokens(ClipboardPage, String) which will replace all the square brackets in a given String by
using given ClipboardPage
Example:
Inputs:
SR Page has below details
FirstName: Bruce
SecondName: Wayne
String has square brackets to be replaced like below
Hi [FirstName] [SecondName], welcome to the [City]
Output → Hi Bruce Wayne, welcome to the Gotham
If the data is not available in ClipboardPage, throw an error as data token is not found
ExecuteSeedTest Activity - Vishnu, Kagan
Create a new 2 new parameters
UseLiveCustomerData
SeedDataSize
Update TreatmentID → TreatmentName in SeedParametersJSON
Update GetPropositionDataForTreatment Strategy for above change @Logic
Update the ValidateSeedTestParameters DT validation wrt UseLiveCustomerData flag
If UseLiveCustomerData true, SeedDataSize should be available
Browse SeedUserList for given tag
Loop thourgh SeedUSerList
Do the required validation for each channel for each seed user
Email → pyemailadress
SMS → ServiceNumber
AppPush → NamedUser