Prolydian Integration
Summary
Exam eligibility information, sometimes called "Authorization to Test", can be automatically sent to Prolydian by a Workflow Behavior.
LearningBuilder supports "Test-First" registration via Prolydian . In this model, candidates take their test before they establish an account in LearningBuilder. During the application process, these candidates can "claim" their exam results.
Overview
LearningBuilder can integrate seamlessly with Prolydian to:
Establish eligibility for a candidate to sit for an exam
Obtain exam results from Prolydian
Dynamically update the candidate's application based on those results
The integration is enabled via a Workflow Behavior. It supports these Workflow types:
Create Activity
Data Flow
When the Behavior is configured, administrator selects a Queue Template that controls the eligibility API payload sent to Prolydian, and an xAPI Event Handler which specifies what happens when results are received.
When a Workflow Action triggers the Behavior, the Message Queue is used to call the Atlas eligibility API. Prolydian is notified of:
The Candidate Id, a unqiue identifier for the candidate themselves, and
The Eligibility Id, a unique identifier which represents the authorization to sit for a specific exam administration. The Eligibility Id is determined by the Activity Instance.
At some point in the future, after the candidate has actually taken the exam, Prolydian calls the xAPI API endpoint and provides an xAPI document representing the exam results. The configured handler is executed which parses the document, extracts the document, and maps its values to the Activity Instance as configured. (Note: technically, Prolydian calls an endpoint in the Integration Hub, which then forwards the request to LearningBuilder. This prevents exam results from being dropped if LearningBuilder is down for maintenance. The integration hub plugin is NOT client-specific)
Workflow Attributes are updated with relevant pieces of the result data, per the Behavior configuration
The appropriate Workflow Action is executed depending on the exam grade. (This typically moves the Workflow forward into the next step)
How to set up Prolydian integration for a new customer
Please complete for each customer. This will become a template so we can create one for each project with minimal hand-off between Implementation and Integration Support.
We need the following :
This is a high-level summary. Please copy and fill out the https://heuristicsolutions.atlassian.net/wiki/spaces/IC/pages/4105732097 for your specific client implementation.
Data | Value |
---|---|
Customer contact | |
Prolydian contact | |
PTI contact (If HS client contracts Prolydian through PTI) |
|
Prolydian API access Credentials (often the same across clients, but validate w/ Prolydian at Kickoff) |
|
Prolydian-provided key | |
Exam Code | |
Test Group | |
ClientCandidateId Prefix |
|
ClientAuthorizationId Prefix |
|
Form code (if to be passed in) |
Configuration
Configure the Prolydian integration as follows ( @Steve Ross needs to provide details):
If the client has used Prolydian in the past, and you need to maintain the PTI ID, create a short text PTI ID on the Member Role, Learning Plan Instance, and the Exam Activity Instance and also create a Template field call PTI - Computed on the Member Role with logic similar to
@( Model.MemberRole.GetText("PTI ID").IsNotNullOrEmpty() ? Model.MemberRole.GetText("PTI ID") : "PTINIGPCPP8" + ("000000000" + Model.MemberRole.GetText("Unique Identifier")).Right(9) )
The prefix “PTINIGPCCP8” will be changed to whatever the PTI tells us it needs to be for the client. In this example the template also support PTI IDs assigned prior to launching in LearningBuilder and thus will not overwrite an existing value.
3. Include an Update Workflow Instance Attribute behavior on the Role Grant Workflow or an Update Member Role for Learning Plan behavior on the LPI workflow to set the PTI ID prior to exam eligibility.
4. Include a series of behaviors on the LPI prior to scheduling similar to below:
The last two behaviors are only needed if the issue where the Feature does not handle new vs existing candidates is not yet addressed.
5. Prior to these behaviors being executed, the Exam Activity must already be added to the learning plan.
Option 1: Pre-add the exam activity on the Learning Plan Definition
Option 2: Have an administrator manually add it prior to approving the eligibility
Option 3: Create a custom SPROC to add it as part of the process
Option 4: Use the new Add Activity to Learning Plan behavior to do it, (not tested)
Option 5: Have the practitioner do it themselves (see NIGP). In this case, the must be an action on the Activity Instance that is executed prior to sending the eligibility that Executes an Action on the Parent Learning Plan that does the above behaviors. If there is a payment required on the exam exactivity, the Save action on Payment is a good candidate for this (see NIGP). If not, there need to be at least two practitioner steps on the Exam Workflow as the above behaviors must be executed on an entirely separate action from the one that sends the eligibility to Prolydian.
6. Create a Rabbit MQ template called Prolydian Exam Eligibility with the message to send the eligibility. Below is an example.
Update the Client prefix and Authorization prefix for the client.
Ensure the Activity Dates are mapped correctly
Update the Test Group
Ensure the Code is mapped correctly, or if only one, hard code it here. If no, include it as an extrinsic attribute on the Exam Activity Definition.
@using Heuristics.Library.Extensions
@{
var ptiId = Model.GetAttributeValue("PTI ID");
var clientCandidateId = ptiId.Replace("PTINIGPCPP", "");
var clientAuthorizationId = "PTINIGPLB" + ("00000000000" + Model.Instance.WriteToItemId.ToString()).Right(11);
var examCode = Model.GetAttributeValue("Exam Code");
var activityStartDate = Model.GetAttributeValue("Activity Start Date");
var activityEndDate = Model.GetAttributeValue("Activity End Date");
var address = Model.Member.DefaultMemberAddress;
var phone = Model.Member.DefaultPhone;
var country = address.Country.ToUpper();
country =
country == "UNITED STATES" ? "USA" :
country == "CANADA" ? "CAN" :
country.IsNull() ? "" : (country+"XXX").Substring(0,3);
var zip = address.MailCode;
zip = zip.IsNull() ? "" : (zip+"00000").Substring(0,5);
}
{
"TestAdministrationId": "@examCode",
"PearsonCandidate":
{
"ClientCandidateId": "@clientCandidateId",
"TestGroup": "NIGP"
},
"PearsonAuthorization": {
"TestAdministrationId": "@examCode",
"StartDate": "@activityStartDate",
"EndDate": "@activityEndDate",
"ClientAuthorizationId": "@clientAuthorizationId",
"AuthorizationCount": 1
},
"FamilyName": "@Model.Member.LastName",
"GivenName": "@Model.Member.FirstName",
"Address":
{
"AddressLine1": "@address.Street1",
"AddressLine2": "@address.Street2",
"AddressLine3": "@address.Street3",
"City": "@address.City",
"State": "@address.State",
"Zip": "@zip",
"ZipExtension": null,
"Country": "@country"
},
"Phone":
{
"Number": "@phone",
"CountryCode": "1"
},
"Email":
{
"Address": "@Model.Member.Email",
"EmailType": "Work"
},
"object":
{
"identifier": "@clientAuthorizationId",
"objectType": "LearningBuilderXApiMessage",
"xApiHandler": "Prolydian",
"activityInstanceId": "@Model.Instance.WriteToItemId",
"ownerId": "@Model.Instance.OwnerId"
}
}
8. Include these behaviors on the action on the Exam Workflow that is trigger when the eligklbity should be sent:
Requirements
LearningBuilder 11.0.3 or later
Capabilities
Makes an API call to Prolydian using a configurable template, which allows for customization of the data that are passed
When exam results are reported back to LearningBuilder, a custom xAPI Event Handler allows values in the payload to be mapped back into Workflow Attributes
Candidates may take their test before they have an account in LearningBuilder. Exam results are stored in a pending state until they are "claimed" during the application process.
Technical details
Prolydian uses OAuth for authentication, so the 1st class Behavior in LearningBuilder calls a productized LearningBuilder Lambda endpoint that handles the authentication and then forwards the payload (which is controlled by a System Template) to Prolydian.