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

  1. 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.




  2. When a Workflow Action triggers the Behavior, the Message Queue is used to call the Atlas eligibility API. Prolydian is notified of:

    1. The Candidate Id, a unqiue identifier for the candidate themselves, and

    2. 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. 


  3. 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)

    1. Workflow Attributes are updated with relevant pieces of the result data, per the Behavior configuration

    2. 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 (Christopher made up this stuff, so someone needs to make it real (like @Steve Ross, @Scott Reed, or @Mallory Bucell)

Data

Value

Customer contact



Prolydian contact



Prolydian-provided key



Exam name



Client name



Form code



Configuration

Configure the Prolydian integration as follows ( @Steve Ross needs to provide details):

  1. 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" }  }

If the issue where the Feature does not handle new vs existing candidates is not yet addressed.

8. Include these behaviors on the action on the Exam Workflow that is trigger when the eligklbity should be sent:

See https://heuristicsolutions.atlassian.net/browse/LB-2712

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.