Views:

Overview

Doctor/Physician certification and credential management is a critical yet complex challenge for healthcare organizations. Medical staff must navigate intricate training pathways where certifications build upon one another, prerequisites must be satisfied in sequence, and documentation requirements vary by specialty and role. Manual tracking of these multi-step processes across large medical staffs creates administrative burden, increases the risk of expired certifications, and can lead to serious compliance violations. When doctors lack current credentials, organizations face operational disruptions including cancelled surgeries, reduced clinical capacity, and potential accreditation issues. 

An automated rules engine solution using North52 Decision Suite and Microsoft Dynamics 365/Dataverse addresses these challenges by intelligently managing prerequisite evaluation, automatically advancing doctors through certification pathways as requirements are met, maintaining comprehensive audit trails, and proactively identifying expiring credentials - ensuring continuous compliance while dramatically reducing administrative workload.

This articles shows some basic building blocks for managing certification requirements - the ideas presented can be enhanced to meet any level of complexity needed. Get in touch with our support team if you have any questions.

Rules for certification management

Rule #Description
1Requirements are grouped into Requirement Sets. When a Doctor is assigned a Requirement Set to complete, Doctor Requirement Detail records are automatically created for all the Requirements in a Requirement Set. 
2Training Completion records are created for each Document Requirement Detail record and rules determine whether the Doctor Requirement Detail record can be completed and the next Doctor Requirement Detail record can be activated.
3Once a Doctor Requirement Detail is completed rules update the progress on the Doctor Requirement record and activate the next requirement for completion. 

 

North52 Decision Suite Solution

The North52 Decision Suite solution has several Formulas to support the workflow:

  • A Formula is set up on the Doctor Requirement table which on create:
    • Finds all the Requirements for the associated Requirements Set
    • Loops over each one and creates a corresponding Doctor Requirement Detail record
  • A Formula is set up on the Training Completion table which:
    • Monitors status and evaluates completion rules for the specific Doctor Requirement
    • Then updates the Doctor Requirement Detail record accordingly
  • A Formula is set up on the Doctor Requirement Details table which:
    • Monitors status and evaluates completion rules
    • Then updates the Doctor Requirement record progress and status, and changes the status of the next Doctor Requirement Detail to Available
  • A Quick Tile Formula and xCache are set up to create the progress visualization

Setup Formulas and xCache

Set up the following Formulas and xCache records to meet the rules requirements above. 

Formula - Doctor Requirement

This Formula Finds all the Requirements for the associated Requirements Set and loops over each one and creates a corresponding Doctor Requirement Detail record.

  • Open the North52 App
  • Navigate to Business Process Activities > Formulas
  • Create a new Formula, setting the following values in the Formula Guide:
    • Source Entity set to Doctor Requirement
    • Set Formula Type to Save - Perform Action
    • Select the Decision Table editor
  • Change the Name of the formula to Doctor Requirement  - Create Requirement Details
  • Set the Event to Create
  • Click Save

Add the ForEachRecord column

  • Right-click on the Decision Table and select Insert > Insert ForEachRecord
  • Select cell A2
  • Click on the Functions tab and search for FindRecords
  • Shift-click on the FindRecords function name to open the function wizard
  • Complete the wizard fields (like in image below) and click Generate

Formula - Training Completion

This Formula Monitors status and evaluates completion rules for the specific Doctor Requirement then updates the Doctor Requirement Detail record accordingly.

  • Create a new Formula, setting the following values in the Formula Guide:
    • Source Entity set to Training Completion
    • Set Formula Type to Save - Perform Action
    • Select the Decision Table editor
  • Change the Name of the formula to Training Completion - Update Doctor Requirement Detail
  • Set the Source Property to Completion Date and Completion Type
  • Click Save

Sheet 1 - Update Requirement Detail Record

Based on the name of the Doctor Requirement Detail record this sheet evaluates the Completion Type, Completion Date and Pass/Fail Status to determine whether to update the Doctor Requirement Detail and set the next requirement as Available.

Sheet 2 - Mark next Requirement Detail Available

If the Move to Next Requirement variable is TRUE and there is a further requirement then update the next requirement's status to Available.

Formula - Doctor Requirement Detail

This Formula executes when a Doctor Requirement Detail record is Completed and updates the progress on the Doctor Requirement record and activates the next requirement for completion. 

  • Create a new Formula, setting the following values in the Formula Guide:
    • Source Entity set to Doctor Requirement Detail
    • Set Formula Type to Save - Perform Action
    • Select the Decision Table editor
  • Change the Name of the formula to Doctor Requirement Detail Completed - Update Doctor Requirement Progress
  • Set the Source Property to Status Reason
  • Click Save

Sheet 1 - Prevalidation

Based on the Status Reason of the Doctor Requirement Detail record equalling Completed this sheet finds and counts all the associated requirements and also counts the completed associated requirements to enable a percentage calculation to be saved into an Overall Progress variable. If the Status Reason does not equal Completed the sheet exits and no further processing is done.

Sheet 2 - Update Doctor Requirement

This sheet updates the parent Doctor Requirement record's Overall Progress and Status Reason columns, depending on the Overall Progress variable value.

 

Progress Visualization Formula and xCache

The progress visualization is shown on the Doctor Requirement form and is built using North52's Quick Tile functionality, and a custom template stored in xCache. 

xCache Template

  • Open the North52 App
  • Navigate to Business Process Activities > N52 xCache
  • Create a new xCache record
    • Enter QuickTileTemplate for the Category
    • Add DoctorRequirementDetails to the Base Key so that the full BaseKey name is QuickTileTemplate_DoctorRequirementDetails
    • In the Value Information tab enter the HTML/Handlebars code shown below into the Value (Secured) field
  • Click Save

HTML/Handlebars template code

<div style="margin: 20px 0;">
 {{#each tiles}}
   {{#if progress}}
       <!-- Progress Bar -->
       <div style="margin-bottom: 20px; padding: 0 20px;">
         <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px;">
           <span style="font-size: 14px; font-weight: 500; color: #333;">Overall Progress</span>
           <span style="font-size: 14px; font-weight: 600; color: #2183dd;">{{progress.percentage}}%</span>
         </div>
         <div style="width: 100%; height: 8px; background-color: #dfe3e4; border-radius: 4px; overflow: hidden;">
           <div style="width: {{progress.percentage}}%; height: 100%; height: 100%; background-color: #2183dd; transition: width 0.3s ease;"></div>
         </div>
       </div>
   {{/if}}
 {{/each}} 
 <!-- Checklist -→
 <div style="padding: 20px;">
   {{#each tiles}}
     {{#if requirements}}
       {{#each requirements}}
         <div style="position: relative; display: flex; align-items: flex-start; margin-bottom: 20px;">
           <!-- Vertical line connector (hidden for last item) -->
           {{#unless @last}}
             <div style="position: absolute; top: 20px; left: 8px; width: 4px; height: calc(100% + 20px); background-color: #dfe3e4; z-index: 1;"></div>
           {{/unless}}           
           <!-- Status circle -->
           <div style="position: relative; z-index: 2; flex-shrink: 0; margin-right: 15px;">
             {{#if isCompleted}}
               <!-- Completed checkbox with checkmark -->
               <div style="width: 20px; height: 20px; background: #090; border: 4px solid #090; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: white; font-size: 12px; font-weight: bold;">✓</div>
             {{else}}
               {{#if isInProgress}}
                <!-- In Progress circle -->
                 <div style="width: 20px; height: 20px; background: white; border: 4px solid #2183dd; border-radius: 50%; box-shadow: 0 0 0 4px rgba(33, 131, 221, 0.2);"></div>
               {{else}}
                 <!-- Pending/empty circle -->
                 <div style="width: 20px; height: 20px; background: white; border: 4px solid #dfe3e4; border-radius: 50;"></div>
               {{/if}}
             {{/if}}
           </div>
               <!-- Content -->
           <div style="flex: 1; padding-top: 2px;">
             <div style="font-weight: 500; margin-bottom: 4px; color: {{#if isCompleted}}#090{{else}}{{#if isInProgress}}#2183dd{{else}}#888{{/if}}{{/if}};">
               {{RequirementName}}
             </div>
             <div style="font-size: 12px; color: #666;">
               <span style="font-weight: 500;">{{Status}}</span>
               {{#if StartedDate}} • Started: {{StartedDate}}{{/if}}
               {{#if CompletionDate}} • Completed: {{CompletionDate}}{{/if}}
             </div>
             {{#if Notes}}
               <div style="margin-top: 6px; padding: 8px; background-color: #f9f9f9; border-left: 3px solid #ddd; font-size: 12px; color: #555;">
                 {{Notes}}
               </div>
             {{/if}}
           </div>
         </div>
       {{/each}}
     {{/if}}
   {{/each}}   
   <!-- Show "No requirements" only if no tiles have requirements -->
   {{#unless tiles.[1].requirements}}
     <div style="text-align: center; color: #999; font-style: italic; padding: 20px;">
       No requirements defined
     </div>
   {{/unless}}
 </div>
</div>

QuickTile Template Formula

  • Create a new Formula, setting the following values in the Formula Guide:
    • Source Entity set to Doctor Requirement
    • Set Formula Type to Clientside - Calculation
    • Select the Decision Table editor
  • Change the Name of the formula to Doctor Requirement - Quick Tile - Progress Visualization
  • Select Quick Tile from the Snippets menu, to insert the framework for Quick Tiles into the Formula, then modify and duplicate to create the setup outlined in the screen shots below
  • Click Save

Fetch XML query for finding requirement details

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
 <entity name="n52demo_doctorrequirementdetail">
   <attribute name="n52demo_doctorrequirementdetailid" />
   <attribute name="n52demo_name" />
   <attribute name="statuscode" />
   <attribute name="n52demo_starteddate" />
   <attribute name="n52demo_sequenceorder" />
   <attribute name="n52demo_requirement" />
   <attribute name="n52demo_notes" />
   <attribute name="n52demo_completeddate" />
   <order attribute="n52demo_sequenceorder" descending="false" />
   <filter type="and">
     <condition attribute="n52demo_doctorrequirement" operator="eq" value="{0}" />
   </filter>
 </entity>
</fetch>