Patient Identification
The Patient Identification module adds a configurable flow that verifies a patient’s identity by having them enter information and checking it against their patient record. It also has one time passcode functionality.
If enabling One Time Passcode verification, version 4.2 or higher is required and Redis caching must be enabled.
Dependencies
The Patient Identification module is dependent on the following modules:
Integration
The Patient Identification module exposes the flow ID of its main flow as:
patientIdentification.flows.patientIdentification.id
This can be used for example when setting the launch flow ID when rendering a chatbot page:
const { chatbot, patientIdentification } = flow.get("project");
const customData = {
launchFlowId: patientIdentification.flows.patientIdentification.id,
token: msg.req.params.token
};
chatbot.render(msg, customData, "outreach");
When the patient either succeeds or fails to verify their identity, the appropriate handler is called. These handles can be overridden to change to an appropriate flow in each case:
const SUCCESS_FLOW_ID = "...";
const FAILURE_FLOW_ID = "...";
const { patientIdentification, flowManager } = flow.get("project");
const success = (msg, patient) => {
// Patient data is passed if useful
node.warn(patient);
flowManager.changeFlow(msg, SUCCESS_FLOW_ID);
};
patientIdentification.registerHandler("success", success);
const failure = (msg, patient) => {
// Patient data is passed if useful
node.warn(patient);
flowManager.changeFlow(msg, FAILURE_FLOW_ID);
};
patientIdentification.registerHandler("failure", failure);
Configuration
The Patient Identification module will read and respect the values shown below. To add or edit configuration values follow this path: Experience Manager > Create tab > Content component > Settings item > patientIdentification section.
verify (object): Container for verification toggle settings
dob (boolean): Whether or not to verify the patient’s date of birth
zipCode (boolean): Whether or not to verify the patient’s zip code
name (boolean): Whether or not to verify the patient’s name
otp (boolean): Whether or not to have the patient enter a one time passcode
otpChannelSelection (boolean): Whether or not to allow the user to select their preferred communication channel to receive the one time passcode, if they have both an email and phone number in their record.
patientDobFormat (string): If the format of date of birth in the patient record is non-standard, specify the format (as a moment.js format string) in this setting.
content (object): Container for content override settings
dob (object): A container for settings for date of birth verification:
prompt (string): A custom date of birth prompt message
retry (string): A custom date of birth retry prompt message
incorrect (string): A custom message when date of birth verification has failed
zipCode (object): A container for settings for zip code verification:
prompt (string): A custom zip code prompt message
invalid (string): A custom invalid zip code message
retry (string): A custom zip code retry prompt message
incorrect (string): A custom message when zip code verification has failed
name (object): A container for settings for name verification:
prompt (string): A custom name verification prompt message
incorrect (string): A custom message when name verification has failed
otp (object): A container for settings for one time passcode verification:
channelPrompt (string): A custom prompt for one time passcode channel selection
noChannels (string): A custom prompt for when no one time passcode channel is available
prompt (string): A custom one time passcode prompt message
retry (string): A custom one time passcode retry prompt message
incorrect (string): A custom message when one time passcode verification has failed
The following tokens can be used in the above content override settings:
{{patient.firstName}}
{{patient.lastName}}
{{otpChannel}}
An example of JSON for the above settings:
"patientIdentification": {
"verify": {
"dob": true,
"zipCode": true,
"name": true,
"otp": true
},
"otpChannelSelection": true,
"patientDobFormat": "MM/DD/YYYY",
"content": {
"dob": {
"prompt": "Custom DOB verification prompt.",
"retry": "Custom DOB retry prompt.",
"incorrect": "Custom DOB incorrect message."
},
"zipCode": {
"prompt": "Custom zip verification prompt.",
"invalid": "Custom zip invalid prompt.",
"retry": "Custom zip retry prompt.",
"incorrect": "Custom zip incorrect message."
},
"name": {
"prompt": "Custom name verification prompt ({{patient.firstName}} {{patient.lastName}})",
"incorrect": "Custom name incorrect message."
},
"otp": {
"channelPrompt": "Custom OTP channel prompt message.",
"noChannels": "Custom OTP no channels available message.",
"prompt": "Custom OTP prompt message ({{otpChannel}}).",
"retry": "Custom OTP retry prompt.",
"incorrect": "Custom OTP incorrect message."
}
}
}
Handlers
dobVerificationFailed
This handler is called when a patient fails to verify their date of birth twice.
Parameters:
patient (object): The patient data (see Patient intermediary model).
Returns: Nothing.
The default implementation of this handler does nothing.
zipCodeVerificationFailed
This handler is called when a patient fails to verify their zip code twice.
Parameters:
patient (object): The patient data (see Patient intermediary model).
Returns: Nothing.
The default implementation of this handler does nothing.
nameVerificationFailed
This handler is called when a patient indicates they are not the named patient.
Parameters:
patient (object): The patient data (see Patient intermediary model).
Returns: Nothing.
The default implementation of this handler does nothing.
otpVerificationFailed
This handler is called when a patient enters an incorrect one time passcode three times.
Parameters:
patient (object): The patient data (see Patient intermediary model).
Returns: Nothing.
The default implementation of this handler does nothing.
success
This handler is called when a patient has successfully verified their identity.
Parameters:
msg (object): The Orbita message object.
patient (object): The patient data (see Patient intermediary model).
Returns: Nothing.
The default implementation of this handler does nothing but call flowManager.handle(msg)
This handler is expected to handle the message in some way, for example by calling flowManager.changeFlow(msg, flowId)
failure
This handler is called when a patient fails to verify their identity.
Parameters:
msg (object): The Orbita message object.
patient (object): The patient data (see Patient intermediary model).
Returns: Nothing.
The default implementation of this handler does nothing but call flowManager.handle(msg)
This handler is expected to handle the message in some way, for example by calling flowManager.changeFlow(msg, flowId)
Overriding Handlers
Any of the above handlers can be overridden with a custom version by using the registerHandler method exposed by the Patient Identification module. For example:
Your custom handler can accept any of the documented parameters and there is an expectation that it will return an appropriate value for handlers expected to return something.
Implementation Documentation
To help with customer specific content updates: https://aikeras.sharepoint.com/:w:/r/sites/Product-Team/_layouts/15/Doc.aspx?sourcedoc=%7B0BCE78BC-453B-4799-B3B1-58328D9D1AED%7D&file=Patient%20Identification%20Module%20-%20How%20to%20Configure%20Content%20within%20Settings.docx&action=default&mobileredirect=true