Scenario Background
...
An employee has a change in demographic and contact information from an institutional source system.
Narrative
...
- The institutional source system invokes the Person Registration and Update service either via a REST API (synchronous method) or by placing a Person Update message in the Person Update queue (asynchronous method).
- The Person Registration and Update Service invokes the Person Match service to determine if the change to demographic information results in a match with another person in the Entity Registry.
- If not, the update proceeds without an attempt to link.
- If the demographic update triggers a match, a message is placed in the Person Verification queue, and an institutionally defined workflow is invoked to resolve the link. Once the institutionally defined workflow completes and a link has been performed (if needed), the update will continue.
- The Person Registration and Update Service stores the updated demographic and contact data in the Master Person Store.
- The Person Registration and Update Service places a message in the Person Update queue to indicate to downstream systems that this person's data has been updated.
Pseudocode
function Registry.handleUpdate(incomingAttributes) { var matches = PersonMatchService.findMatchesByAttributes(incomingAttributes); if(matches.size() == 1) { currentPerson = matches.getNext(); currentPerson.replaceAttributes(incomingAttributes); return currentPerson; } else if(matches.size() > 1) { var matchResolutionTicket = MatchResolutionQueue.enqueue(new WorkItem(matches, incomingAttributes)) return matchResolutionTicket; } else if(matches.isEmpty()) { /* TODO: what do we want to do here? Create a new person, or throw an error? */ throw NoMatchingPerson_Exception; } } }