SanteMPI can generate a unique identifier in any format you choose whenever a patient is registered. This generation can occur regardless of where the registration originated (FHIR, HL7v2, UI, etc.).
This generator will use the Business Rules Engine to generate a new ID each time a master record is created for the patient.
Create a new Business Rules File
Create a new JavaScript file in the rules/ folder of your applet / plugin for SanteMPI. The basic structure of this file should be:
/// <referencepath="../.ref/js/santedb-bre.js" />/// <referencepath="../.ref/js/santedb-model.js" />/// <referencepath="../.ref/js/santedb.js" />/** * Elbonia MPI / SanteMPI Rules for Generating new ID * -- */
Write Generator Function
Next, write your ID generator in JavaScript, for example, this generator will create a 10 digit random identifier from UUID, and appends a mod 97 check digit to the end:
/** * @summary Generates an Elbonia Health Card ID */functiongenerateElboniaId() {// Use UUID RNG to get a random stringvar source =SanteDBBre.NewGuid().replace(/[a-zA-Z\-]/ig,'').substring(0,10);// Pad to 10 digits source =source.pad('0',10);// Convert to an array of digitsvar key ="0123456789";var seed = ("0"+ source).split('').map(function (c) { returnkey.indexOf(c); }).reduce(function (a, v, i) { return ((a + v) *10) %97; });// Generate check digit seed *=10; seed %=97;var checkDigit = (97- seed +1) %97; checkDigit +="";// Return identifiervar retVal = source +checkDigit.pad('0',2);return retVal;};
Write Business Rule
Next, we'll write a small function which accepts a patient as a parameter and adds a new identifier if one has not already been assigned
/** * @summary Business rule function */functionappendPatientID(patient) {// Does patient have no identifiers?if (!patient.identifier)patient.identifier = {};// If operating in a server environmentif (SanteDBBre.Environment ==ExecutionEnvironment.Server) {// Append ID only an existing one doesn't exist.if (!patient.identifier.ELB_HEALTH_ID)patient.identifier.ELB_HEALTH_ID= { value:generateElboniaId() }; }return patient;}
Attach Business Rules to Triggers
Finally, attach the business rule functions to the SanteDB triggers. The example below will attach the append function to the BeforeInsert trigger on PatientMaster
// Bind the business rulesSanteDBBre.AddBusinessRule("elb.rule.id","PatientMaster","BeforeInsert", { "deceasedDate":"null" }, appendPatientID);
Register the Identifier Generator
You can also have the UI made aware of the presence of this generator by registering an identifier generator.