Home > Class Reference > HSLIB namespace > HS.HC.MPI.Manager


class HS.HC.MPI.Manager extends HS.HC.Util.Trace.Helper, Ens.BusinessOperation

The default MPI Manager component.
Determines how to handle MPI requests; sends messages to the MPI Operations component (which is different for different MPIs).

Property Inventory

Method Inventory


parameter DOMAIN = HS;
parameter HSDEPLOY = 1;
parameter INVOCATION = InProc;
Invoke InProc
parameter SETTINGS = DemographicLinkMode,MatchMode,DynamicFacilityRegistration, DynamicAssignAuthorityRegistration, , MaxMatches,PIXManager,IdentifierCompatibilityMode;
Settings for this Business Process


property ConsentProcessor as Ens.DataType.ConfigName;
Name of the Consent Manager component in this production that applies consent filtering
Property methods: ConsentProcessorDisplayToLogical(), ConsentProcessorGet(), ConsentProcessorIsValid(), ConsentProcessorLogicalToDisplay(), ConsentProcessorLogicalToOdbc(), ConsentProcessorNormalize(), ConsentProcessorParseConfigNameSpec(), ConsentProcessorSet()
property DemographicLinkMode as %String (DISPLAYLIST = ",Probable,Strict,Never", VALUELIST = ",Probable,Strict,Never") [ InitialExpression = "Probable" ];
This is only applicable if there's no external patient matching engine Flag to control how/if the MPI should link record based on demographic match. Values are: - Probable: Will match based on lastname+firstname+address+phone+fuzzy birthdate, OR lastname+firstname+zip+birthdate, OR lastname+SSN, OR firstname+SSN+birthdate - Strict: Will match based on lastname+firstname+address+phone+birthdate, OR lastname+SSN+zip+birthdate, OR firstname+SSN+zip+birthdate - Never: No linking of MRNs is done on demographics
Property methods: DemographicLinkModeDisplayToLogical(), DemographicLinkModeGet(), DemographicLinkModeIsValid(), DemographicLinkModeLogicalToDisplay(), DemographicLinkModeLogicalToOdbc(), DemographicLinkModeNormalize(), DemographicLinkModeSet()
property DynamicAssignAuthorityRegistration as %Boolean [ InitialExpression = 1 ];
Set this to false if you do not want to permit inbound update requests to cause new assign authorities to be added to the assigning authority table for medical record numbers And note that an assigning authority may also get created for a facility as part of dynamic facility registration
Property methods: DynamicAssignAuthorityRegistrationDisplayToLogical(), DynamicAssignAuthorityRegistrationGet(), DynamicAssignAuthorityRegistrationIsValid(), DynamicAssignAuthorityRegistrationLogicalToDisplay(), DynamicAssignAuthorityRegistrationNormalize(), DynamicAssignAuthorityRegistrationSet()
property DynamicFacilityRegistration as %Boolean [ InitialExpression = 0 ];
Set this to true if you want to permit inbound update requests to cause new facilities to be added to the facility table.
Property methods: DynamicFacilityRegistrationDisplayToLogical(), DynamicFacilityRegistrationGet(), DynamicFacilityRegistrationIsValid(), DynamicFacilityRegistrationLogicalToDisplay(), DynamicFacilityRegistrationNormalize(), DynamicFacilityRegistrationSet()
property IdentifierCompatibilityMode as %Boolean [ InitialExpression = 1 ];
If IdentifierCompatibilityMode is true, then an incoming patient update with at least one identifier will clear all existing identifiers (except use "SN", insurance IDs), regardless of whether any of the incoming identifiers has the same type. Identifiers with use "SN" will only be replaced if one of the incoming identifiers also has use "SN".
If IdentifierCompatibilityMode is false, then any existing identifiers will only be removed if the incoming patient update has at least one identifier with the same use.
Property methods: IdentifierCompatibilityModeDisplayToLogical(), IdentifierCompatibilityModeGet(), IdentifierCompatibilityModeIsValid(), IdentifierCompatibilityModeLogicalToDisplay(), IdentifierCompatibilityModeNormalize(), IdentifierCompatibilityModeSet()
property MPIOperations as Ens.DataType.ConfigName;
If there's an external patient matching engine, this should be the name of the business operation that sends messages to the external patient matching engine
Property methods: MPIOperationsDisplayToLogical(), MPIOperationsGet(), MPIOperationsIsValid(), MPIOperationsLogicalToDisplay(), MPIOperationsLogicalToOdbc(), MPIOperationsNormalize(), MPIOperationsParseConfigNameSpec(), MPIOperationsSet()
property MPISecondaryOperations as Ens.DataType.ConfigName;
For secondary MPIs, which need to be queried only after getting the primary response
Property methods: MPISecondaryOperationsDisplayToLogical(), MPISecondaryOperationsGet(), MPISecondaryOperationsIsValid(), MPISecondaryOperationsLogicalToDisplay(), MPISecondaryOperationsLogicalToOdbc(), MPISecondaryOperationsNormalize(), MPISecondaryOperationsParseConfigNameSpec(), MPISecondaryOperationsSet()
property MPITimeout as %Integer [ InitialExpression = -1 ];
Timeout in seconds for MPI operations. -1 means no timeout
Property methods: MPITimeoutDisplayToLogical(), MPITimeoutGet(), MPITimeoutIsValid(), MPITimeoutLogicalToDisplay(), MPITimeoutNormalize(), MPITimeoutSet()
property MatchMode as %String (VALUELIST = ",Exact,Any") [ InitialExpression = "Any" ];
Exact match mode, value is one of: Exact: The search results must match only one patient. This means only one MPIID should be returned by the search (perhaps with several records), else it will be aborted (returning no results). The abort will occur even if later conditions (consent, infotype filters, etc) would reduce the number of patients to just 1. Any: The search can match any results (more than one patient)
Property methods: MatchModeDisplayToLogical(), MatchModeGet(), MatchModeIsValid(), MatchModeLogicalToDisplay(), MatchModeLogicalToOdbc(), MatchModeNormalize(), MatchModeSet()
property MaxMatches as %Integer [ InitialExpression = 50 ];
Only applicable if there is no external patient matching engine, or if we're doing a search that bypasses the external engine (by cohort, by relationship, etc.) Maximum number of MPIID matches to return during a patient search
Property methods: MaxMatchesDisplayToLogical(), MaxMatchesGet(), MaxMatchesIsValid(), MaxMatchesLogicalToDisplay(), MaxMatchesNormalize(), MaxMatchesSet()
property PIXManager as Ens.DataType.ConfigName;
Which Host to send IDUpdateNotificationRequests
Property methods: PIXManagerDisplayToLogical(), PIXManagerGet(), PIXManagerIsValid(), PIXManagerLogicalToDisplay(), PIXManagerLogicalToOdbc(), PIXManagerNormalize(), PIXManagerParseConfigNameSpec(), PIXManagerSet()
property PostProcessor as Ens.DataType.ConfigName;
Name of a custom business host that defines a step for the MPI Manager to perform after it processes the search results, update, etc.
Property methods: PostProcessorDisplayToLogical(), PostProcessorGet(), PostProcessorIsValid(), PostProcessorLogicalToDisplay(), PostProcessorLogicalToOdbc(), PostProcessorNormalize(), PostProcessorParseConfigNameSpec(), PostProcessorSet()
property PreProcessor as Ens.DataType.ConfigName;
Name of a custom business host that defines a step for the MPI Manager to perform just before it communicates with the MPI Operations component.
Property methods: PreProcessorDisplayToLogical(), PreProcessorGet(), PreProcessorIsValid(), PreProcessorLogicalToDisplay(), PreProcessorLogicalToOdbc(), PreProcessorNormalize(), PreProcessorParseConfigNameSpec(), PreProcessorSet()
property PushEvaluator as Ens.DataType.ConfigName [ InitialExpression = "HS.Hub.Push.Evaluator" ];
Name of the Push Evaluation Operation component that performs ***
Property methods: PushEvaluatorDisplayToLogical(), PushEvaluatorGet(), PushEvaluatorIsValid(), PushEvaluatorLogicalToDisplay(), PushEvaluatorLogicalToOdbc(), PushEvaluatorNormalize(), PushEvaluatorParseConfigNameSpec(), PushEvaluatorSet()


classmethod AAQBackground(pGateway) [ Language = objectscript ]
This is jobbed by the management operations when it receives a gateway registration request which changes a gateway's FeedAnalytics property, and when we're globally set up to do analytics feeding
classmethod AAResendQ(pMPIID, pNoCheck=0) [ Language = objectscript ]
pNoCheck avoids a redundant check to see if we're doing analytics feeding
classmethod AAUpdateQ(pRequest, pMPIID, pMRN) as %Status [ Language = objectscript ]
method AddPatient(ByRef pRequest As HS.Message.AddPatientRequest, pAddUpRequest As HS.Message.AddUpdateHubRequest, pIsHomeFacility) as %Status [ Language = objectscript ]
method AddUpdateHub(pRequest As HS.Message.AddUpdateHubRequest, Output pResponse As HS.Message.AddUpdateHubResponse) as %Status [ Language = objectscript ]
classmethod Audit(pEventAction, pPatient As HS.Registry.Patient, pRequest As HS.Types.RequestInfo, pOldData As %String = "") as %Status [ Language = objectscript ]
event action - C - create, U - Update, D - Delete
method AuditSearchResponse(pNewRequest, pResponse) as %Status [ Language = objectscript ]
method ConsentProcessing(pNewRequest, Output pResponse, pProgramConsent) as %Status [ Language = objectscript ]
classmethod CopyAndHandleQuotes(pOriginal As %RegisteredObject) as %RegisteredObject [ Language = objectscript ]
Copies an object, replacing any properties equal to double quotes with an empty value
Recurses on object properties, and handles array and list collections of both objects and datatypes
method CreateAndSendPIXNotification(pMPIID, pUpdateNotification As HS.Message.IDUpdateNotificationRequest = "") as %Status [ Language = objectscript ]
method DelegateToMPI(pRequest As Ens.Request, ByRef pResponse As Ens.Response) as %Status [ Language = objectscript ]
Delegate this message to the MPI
method DetermineMPIID(ByRef pRequest As HS.Message.AddPatientRequest) as %Status [ Language = objectscript ]
If no external patient matching engine, determine this directly from the registry
method ExternalUpdateMPIIDRequest(pRequest As HS.Message.IDUpdateNotificationRequest, Output pResponse As HS.Message.AddUpdateHubResponse) as %Status [ Language = objectscript ]
Invoke pre and postprocessors when an inbound request is received from an external MPI to update the MPI ID for one or many MRN's
classmethod GetMPIID(pRequest As HS.Message.PatientSearchRequest, ByRef pResponse As HS.Message.PatientSearchResponse, pFull As %Boolean = 1) as %Status [ Language = objectscript ]
Utility method Used to fetch a patient search response, based on an MPIID, or MRN+AA. For compatibility, this uses the more generic search request, but ignores everything except for the MPIID, MRN, AA Used to get the patient name or to get a list of MRN, for audit reports, etc. pFull - if true, load the full patient. Otherwise, just return MRN, Facility, AA
classmethod HasFeedableMRNs(pMPIID) as %Boolean [ Language = objectscript ]
Pass in an MPIID. Will determine if the MPIID has any MRNs which belong to facilities which reside on a gateway that is configured to feed analytics
method InvokePostProcessor(pRequest As Ens.Request, ByRef pResponse As Ens.Response) as %Status [ Language = objectscript ]
method InvokePreProcessor(ByRef pRequest As Ens.Request) as %Status [ Language = objectscript ]
classmethod LoadPatient(pPatient As HS.Registry.Patient, ByRef pPatientInfo As HS.Types.PatientInfo) as %Status [ Language = objectscript ]
classmethod MRNtoMPIID(pAA, pMRN) as %String [ Language = objectscript ]
Utility method - pass in pAA, pMRN, and it will return either the corresponding MPIID if found, or "" if not
method MergePatient(pRequest As HS.Message.MergePatientRequest, Output pResponse As HS.Message.MergePatientResponse) as %Status [ Language = objectscript ]
classmethod OnMPIUpdate(pIDUpdateRequest As HS.Message.IDUpdateNotificationRequest = "") as %Status [ Language = objectscript ]
Updating the MPI ID from one value to another
classmethod OnMRNDelete(pMRN As %String, pAA As %String, pMPIID As %String, pPatientId As %String) [ Language = objectscript ]
Called when an MRN is deleted.
classmethod OnMRNMerge(pRequest As HS.Message.MergePatientRequest, pPriorMPIID As %String, pTargetMPIID As %String) as %Status [ Language = objectscript ]
Called when one MRN is merged into another to update cohorts / consent
method PrimarySearch(pRequest As HS.Message.PatientSearchRequest, ByRef pResponse As HS.Message.PatientSearchResponse) as %Status [ Language = objectscript ]
method ProcessSecondaryMPISearch(pRequest As HS.Message.PatientSecondarySearchRequest, ByRef pResponse As HS.Message.PatientSearchResponse, pSecondaryOps) as %Status [ Language = objectscript ]
Run a patient search through multiple MPIs
classmethod ReturnMPIID(pMPIID, ByRef pResponse, pFull As %Boolean = 0) as %Status [ Language = objectscript ]
Utility method, a bit simpler than GetMPIID, for those who will be fetching only by MPIID
method SearchMPI(pRequest As HS.Message.PatientSearchRequest, pResponse As HS.Message.PatientSearchResponse) as %Status [ Language = objectscript ]
Search the MPI. pRequest.SearchMode: user - regular view-type search. Does consent & infotype filter, drops results whose facility has no gateway (i.e. mini-reg only) Admin: administrative: no consent filter, no return of facility/MRN. participation: special for RI participation gateway. Suppress Audit clinician: special consent filter - also passes if there's a relationship PIXPDQ: for PIX or PDQ PIXPDQ_c: for PIX or PDQ, consent applied AuditReport: deprecated
classmethod UpdateAnalytics(pMPIID) [ Language = objectscript ]
method UpdateMPIIDRequest(pRequest As HS.Message.IDUpdateNotificationRequest, Output pResponse As HS.Message.AddUpdateHubResponse) as %Status [ Language = objectscript ]
An inbound request from the MPI to update the MPI ID for one or many MRN's
classmethod UpdateNotificationGetPriorIdentifiers(pMPIID As %String) as HS.Message.IDUpdateNotificationRequest [ Language = objectscript ]
method UpdatePatient(pPatient As HS.Registry.Patient, ByRef pRequest As HS.Message.AddPatientRequest, pAddUpRequest As HS.Message.AddUpdateHubRequest, pIsHomeFacility) as %Status [ Language = objectscript ]

Inherited Members

Inherited Properties

Inherited Methods

FeedbackOpens in a new window