Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Info
title

Summary

Exam eligibility information, sometimes called "Authorization to Test", can be automatically sent to

Pearson VUE

Prolydian by a Workflow Behavior.

This integration:
  • Establishes a candidate record in the Pearson system
  • Allows the practitioner to schedule their own exam date using a seamless "single-sign-on" redirect to Pearson's website
  • Retrieves exam results using SFTP
  • Updates the exam Activity's Workflow, depending on the results

     

    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.


    Jira LegacyserverSystem JIRAcolumnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution

    Overview

    LearningBuilder can integrate seamlessly with Pearson VUE with Prolydian to:

    • Establish eligibility for a candidate to sit for an

      examAllow the candidate to schedule their

      exam

      using Pearson's self-service website

    • Obtain exam results

      from Pearson VUE

      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

    • Complete Activity
    • Complete Learning Plan
    • Grant/Edit Member Role

    Data Flow

    Data Flow

    1. When the Behavior is configured, administrator selects a Queue Template that controls the eligibility API payload sent to Prolydian, and an /wiki/spaces/DOCS/pages/639991859 which specifies what happens when results are received.

      Image AddedImage Added



    2. When a Workflow Action triggers the Behavior,

    which:
  • Makes an API call to Pearson's "Candidate Demographic Data" service to establish a Candidate Id
  • Makes an API call to Pearson's "Exam Authorization Data" service and sends an exam authorization for the Candidate ID (using an Exam Code and eligibility period pulled from the Behavior configuration)
    Workflow refreshes, Candidate sees a "Schedule Exam" button.Clicking this button navigates the user to the Pearson VUE self-service exam scheduling website where they can schedule their exam
    Candidate is redirected to LearningBuilder and either continues with their Workflow or exits, depending on configuration.
    1. 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. 

    2. At some point in the future, after the candidate has actually taken the exam,

    a file containing
    1.  Prolydian calls the xAPI API endpoint and provides an xAPI document representing the exam results

    is placed by Pearson VUE on an SFTP site that is monitored by LearningBuilder.Exam file is retrieved, parsed, and processed.
    1. . 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)

    Configuration

    AnchorFeatureToggleFeatureToggleEnable the integration via App Config

    The Behavior cannot be added to a Workflow unless the "PearsonVueMode" App Config setting is "Test" or "Prod". If set to "Off" the integration is disabled.

    AnchorClientCertClientCertObtain client certificate from Pearson VUE

    Each client will need to obtain, from Pearson, a client certificate. This will be a PKS #12 file with a .p12 extension.

    Upload the certificate to Sys Admin → App Configuration → Client Certificates. The name that you assign the certificate is not significant, but make note of it because you'll need it for the app config settings.

    AnchorWebServiceConfigWebServiceConfigConfigure the Pearson VUE web service

    The Behavior can be configured once the feature toggle is enabled, but it will not function properly until the Pearson VUE web service is properly configured.

    Note that some settings have separate values for TEST and PROD modes.

    SettingDescriptionPearsonVueMode

    Can be "Off", "Test", or "Prod".

    Setting this to "Off" disables the entire feature and prevents the Behavior from being added to a Workflow.

    PearsonVueCertificateNameProd

    PearsonVueCertificateNameTest

    The names of the Client Certificates (from Sys Admin → App Configuration → Client Certificates) to use for the web service. calls

    PearsonVueClientId

    PearsonVueUserName(Test|Prod)

    PearsonVuePassword(Test|Prod)

    PearsonVuePassphrase(Test|Prod)

    Credentials used when calling the EAD and CDD services.

    These are client-specific and should be obtained from Pearson.

    PearsonVueClientCode

    PearsonVueSsoPassphrase(Test|Prod)

    Credentials used during the "SSO" handshake when redirecting users to Pearson's self-service exam scheduling website.

    These are client-specific and should be obtained from Pearson.

    PearsonVueSFTPUsername

    PearsonVueSFTPPassword(Test|Prod)

    Credentials used when polling Pearson's SFTP server.

    These are client-specific and should be obtained from Pearson.

    AnchorCreateAttributesCreateAttributesCreate the Attributes used by the integration

    Before configuring the Behavior you must first configure some Workflow Attributes that will be referenced by the Behavior configuration:

    Exam Code - Tells Pearson VUE which exam the eligibility record is for. Can be a text-based attribute or a Template. Common configurations are a Picklist that gets the value from the candidate, a Template that calculates the exam code based on custom business logic, or a value that is specified on one of the Workflow's "reference entities" as part of the back-end configuration.
    Eligibility Start / End Date - Specifies the date range within which the candidate is allowed to sit for their exam. Can be a date-based attribute or a Template.
    Special Accommodations - (optional) Specifies a semicolon-delimited list of accommodation codes recognized by Pearson. Can be a text-based attribute, Picklist, Multi-select, or Template. 
    Authorization Id - A Short Text attribute into which the Authorization Id, which is established by Pearson VUE, is stored following a successful connection to their eligibility API.
    API Result - A Long Text attribute into which the full API response is stored. This is not generally displayed to the candidate and is stored primarily for troubleshooting purposes.
    Exam Date - A DateTime attribute into which the actual exam date is stored during the processing of the exam results file. 
    Exam Score - A Numeric attribute into which the candidate's exam score is stored during the processing of the exam results file. 
    Exam Grade - A Short Text attribute into which the "grade", which is either "Pass" or "Fail", is stored during the processing of the exam results file.
  • Exam Attempts - A Numeric attribute into which the current attempt # is stored during the processing of the exam results files. 
  • AnchorCreateActionsCreateActionsCreate the Actions used by the integration

    In addition, you must also configure the Workflow Actions that will be executed after processing the exam results file. LearningBuilder can execute different Actions based on the grade:

    "On Pass" Action - the Action to execute if the candidate passed the exam.
  • "On Fail" Action - the Action to execute if the candidate failed the exam.
  • (warning) IMPORTANT: The Workflow must be on the step that owns the specified Action at the time that the results file is processed or else the result processing will fail. (The Workflow doesn't have to transition to that step immediately upon sending the eligibility, it just has to be on that step by the time the exam results are processed)

    AnchorAddBehaviorToWorkflowAddBehaviorToWorkflowAdd the Behavior to a Workflow

    Once the supporting fields and actions are created, add the Behavior to a Workflow Action, Workflow Step, or Workflow Completion State configuration.

    SFTP details

    The SFTP website is managed by Pearson VUE. Credentials are stored in App Config. The site is checked for new files on a nightly basis.

    Requirements

    LearningBuilder 9.2 or later
    Client Certificate from Pearson VUE (client-specific)
  • Web service and SFTP credentials from Pearson VUE (client-specific)
  • Capabilities

    Calls Pearson VUE's "Candidate Demographic Data" web service to establish a Candidate Id
    Calls Pearson VUE's "Exam Authorization Data" web service to create an eligibility record for a specified Exam Code and within a specified eligibility period. All values are pulled from Workflow Attributes and support Templates
    Special Accommodations can be collected and passed to Pearson
    Exam results can be stored in additional Attributes:
  • Exam Date
  • Exam Score
  • Exam Grade
  • Exam Attempts
    Can execute a specific Workflow Action upon receiving a "pass" result. 
    Can execute a specific Workflow Action upon receiving a "fail" result. 
  • Candidates schedule their own exams via "SSO" to Pearson's self-service scheduling website (button is displayed on the Workflow popup once the eligibility has been established)
  • Filter by label (Content by label)
    cqllabel = "pearson-vue"



    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 :

    Note

    This is a high-level summary. Please copy and fill out the /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):

    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

      Code Block
      @( 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:

    Image Added
    Info

    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.

    Code Block
    @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"
        } 
    }
    
    
    Info

    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:

    Image Added
    Info

    The last two behaviors and the conditional rules are only needed if the issue where the Feature does not handle new vs existing candidates is not yet addressed.

    See 

    Jira Legacy
    serverSystem Jira
    serverId80a5de98-58ff-3b59-a4bd-e013083b8a1d
    keyLB-

    15 Page Properties
    hiddentrue
    Related issues

    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 /wiki/spaces/DOCS/pages/639991859 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.