Extend Microsoft Vaccination Management

This article provides information about the data model, components, and Microsoft Power Automate flows used by Microsoft Vaccination Management. Administrators, developers, and users should be mindful of the solution and possible implications of other solutions that coexist in the same environment.

Integration and extension

Microsoft Vaccination Management uses several capabilities of Microsoft Power Platform, including:

  • Canvas and model-driven apps
  • Portals built using Microsoft Power Apps
  • Flows built using Power Automate

It's important to have some understanding of these components:

It's also important to learn about solutions and using them in implementing healthy application lifecycle management (ALM) practices in Microsoft Power Platform. As you plan to extend the out-of-box functionality in Microsoft Vaccination Management, go to these articles to learn more:

Guidance

You can extend multiple parts of this solution. The following are a couple of components where we give more guidance to customize or tailor them.

Copying a canvas app

The canvas app within Microsoft Vaccination Management can be tailored to your needs. We recommend that you copy the canvas app before you make any changes. That way your changes won't be impacted by new versions. To copy a canvas app:

  1. Sign in to Power Apps.

  2. In the left navigation pane, select Apps, select Frontline worker app, and then select Edit.

  3. Select File > Save As. Select a new location and name for the app, and then select Save.

Security roles

The security roles included in Microsoft Vaccination Management are set up for test and demo purposes. They must be reviewed and understood thoroughly before moving to a production environment or when importing sensitive data.

To learn more about Microsoft Power Platform and Dataverse security, go to:

New security roles can be created and tailored to your needs. The security roles in the solution can serve as a template that can be copied. If the new roles need to be moved to different environments, they need to be added to a new solution.

To copy the security role:

  1. Sign in to the Power Platform admin center.

  2. Select your environment by clicking the environment name, and then select See all under Security roles.

  3. Select the role you want to copy.

  4. Select More actions, and then select Copy.

    Copy security role.

Accessibility considerations

As you plan to extend Microsoft Vaccination Management for your organization, ensure that you adhere to accessibility guidelines. As provided, Microsoft Vaccination Management components adhere to accessibility guidelines. You can find more information about each component here:

Entity relationship diagram

The following entity relationship diagram illustrates the tables and their relationships in Microsoft Vaccination Management. System-generated tables, relationships and columns, such as Created By and Modified By, aren't displayed in the diagram.

Entity relationship diagram.

Browse information about all tables in your environment

You can install the Metadata Tools app by Microsoft to browse all the tables, columns, keys, relationships, privileges in your environment. More information: Browse table definitions in your environment

Metadata Tools app for browsing tables in your environment.

Microsoft Vaccination Management Foundation tables

The tables in this section are available in the Microsoft Vaccination Management Foundation solution and provide the core functionality.

Table Logical name Description
Account account Business that represents a customer or potential customer. The company that is billed in business transactions.
Contact contact Person a business unit has a relationship with, such as customer, supplier, or colleague.
Appointment (Vaccination) msemr_appointmentemr A booking of a healthcare event among residents, practitioners, related persons, and devices for a specific date and time. A booking might result in one or more Encounters.
Medical code msemr_codeableconcept A Codeable concept represents a value that's supplied by providing a reference to one or more terminologies. It can also be defined by the provision of text.
Country msemr_country Information related to countries.
County msemr_county Information related to counties within a state or province.
COVID Vaccination Eligibility msemr_covidvaccineeligibility Tracks a resident response to COVID-related questions.
COVID Vaccination Phase msemr_covidvaccinephase Information related to the phases that are used to manage vaccine registration and administration.
Ethnicity msemr_ethnicity The ethnicity that a contact identifies.
Gender msemr_gender The gender that a contact identifies.
Immunization msemr_immunization Describes the event of a resident being administered a vaccine or a record of an immunization as reported by a resident, a clinician, or another party.
Vaccination Document msemr_immunizationdocument Table that stores a document that is related to a vaccination administration.
Vaccination Education msemr_immunizationeducation Immunization educational material presented to resident.
Vaccination Performer msemr_immunizationperformer Person who performed the immunization event.
Vaccination Protocol Applied msemr_immunizationprotocolapplied Immunization protocol followed by the provider.
Vaccination Reaction msemr_immunizationreaction Details of an immunization reaction that follows immunization.
Vaccination Recommendation msemr_immunizationrecommendation A resident's point-in-time set of recommendations (that is, forecasting) according to a published schedule with optional supporting justification.
Vaccination Site msemr_location Details and position information for a physical place where services are provided, and where resources and participants may be stored, found, contained, or accommodated.
Vaccine msemr_medication Medications.
Vaccine Knowledge msemr_medicationknowledge Information about a medication that is used to support knowledge.
Vaccine Knowledge Administration Guidelines msemr_medicationknowledgeadministrationguide Guidelines for administration of the medication.
Vaccine Batch msemr_medicationpackagebatch Information about a group of medications produced or packaged from one production run.
Race msemr_race The race that a contact identifies.
Schedule msemr_schedule A container for slots of time that might be available for booking appointments.
Slot msemr_slot A slot of time on a schedule that might be available for booking appointments.
State/Province msemr_stateprovince Information related to States and Province values.
User systemizer Person with access to the Microsoft CRM system and who owns objects in the Microsoft CRM database.

Microsoft Vaccination Management Integration tables

The tables in this section are found in the Microsoft Vaccination Management Integration solution.

Table Logical name Description
Vaccination Data Sharing Notification Log msemr_iisnotificationlog Logs the HL7 information associated with the Vaccination record.
Immunization msemr_immunization Describes the event of a resident being administered a vaccine or a record of an immunization as reported by a resident, a clinician, or another party.

HL7 FHIR tables

Microsoft Vaccination Management also contains tables that align with the HL7 FHIR (Release 4) standards. These standards are the same as those used in Microsoft Cloud for Healthcare.

For information about these tables, see the Microsoft Cloud for Healthcare reference documentation:

Email flows

This section describes how to configure flows and provides information about Power Automate limitations to consider and email flows.

Power Automate limitations

Power Automate has sets of limitations per day and per user. For more information about these limitations, see Limits for automated, scheduled, and instant flows.

The main limits you need to consider are:

  • Flow limits
  • Connector limits
    • Outlook Connector: 300 requests per 60 seconds (432,000/day)
    • SendGrid Connector: 1200 requests per 60 seconds (1,728,000/day)
    • Custom Connector: 500 requests per 60 seconds (720,000/day)

Exchange Online, independent of connectors, has a limit of 10,000 emails per mailbox per day. This limit isn't included in the following calculations of throughput of each flow.

Flow Trigger Steps in each run Email child flow Env Var child flow Max run per day (daily throughput) Scale-out possibility
Email Booking Confirmation Every record created in Appointments (Vaccination) entity 2 Yes Yes 250000 Yes (based on last name)
Send Email (Registration) Child flow

From Email Booking Confirmation flows
5 N/A N/A 100000 No
Email Appointment Reminder Every 1 hour (max 5,000 records per run) 7 Yes Yes 71000 ?
Email Booking Cancellation (Resident Cancelled) Every record update in Appointments (Vaccination) entity and marked as canceled 2 Yes Yes 250000 Not required
Email Booking Cancellation (Provider Cancelled) Every record update in Appointments (Vaccination) and marked as canceled pending 3 Yes No 166000 ?
Email Vaccine Dose Reminder When a row created in Immunization Recommendation 4 Yes Yes 125000 ?
Email VIS document When a row created in Immunizations (assume one doc per vaccine) 8 Yes No 62000 ?
Get Environment Variable Child flow

From other flows
3 N/A N/A 166000 No
Send Invitation Email When an Invitation record is created 5 Yes N/A 100000 No
Send Email (Phase Opening) Child flow

From Email Booking Confirmation flows
5 N/A N/A 100000 No
Send Email (Generic) Child flow From Email Booking Confirmation flows 5 N/A N/A 100000 No
Bulk Appointment Slots Creator When a new site Schedule is created 32 + days x intervals x slots per interval x 20 No No Depends on steps, which depend on number of slots need to be created in each run ?
Process Automatic Phase Opening When the following are true:

Automate option on a Phase is set to Yes

Booking on a Phase is set to Yes

There are any Automate Remaining recommendations set
5 No No Depends on the number of different Phases running an automation process at the same time ?
Process Phase Opening When a Phase Opening Booking is set to Yes and there are any recommendations to be sent 14 (with phase re-evaluation enabled)

13 (without phase re-evaluation enabled)
Yes (when phase re-evaluation enabled) Yes Depends on number of records the phase is opened for. Max 35,000 records per day with phase re-evaluation enabled. Max 38,000 records per day without phase re-evaluation enabled ?

New environment configurations

  1. Configure environment variable: RegistrationPortalUrl (the base URL to the Portal).
    Example: contoso.powerappsportals.com
    Don’t include https or other parameters.

  2. Configure connections.

    1. Open configuration solution and add or edit Office 365 Outlook connection and set the connection. Create a new one if needed.
    2. Open configuration solution and add or edit Flows CDS Connection #1 connection and set the connection. Create a new one if needed.
    3. Open configuration solution and add or edit Flows CDS Connection #2 connection and set the connection. Create a new one if needed.
  3. Turn on flows.

    1. Open Vaccination Management Flows solution.
    2. Turn on these flows one at a time:
      • Get Environment Variable
      • Send Email - all copies
      • Send Email with Attachment (Base)
    3. Filter the list to only show Cloud Flow.
    4. Select all and choose Turn on from the top menus.
  4. At this point, you should have all flows turned on without any error. You can check the flows status in the Status column.

  5. Update email templates.

Scale Send Email flow

All flows send email using a child flow called Send Email (Base). There are three copies of this flow in the solution:

  • Send Email (Registration) for registration confirmation emails.
  • Send Email (Phase Opening) for phase opening and 1st dose reminder.
  • Send Email (Generic) is shared with all other flows needed to send emails.

Out of box, these base flows use Outlook connections to send email, with a 10,000 email per day limit per mailbox. You can use other email providers to increase the capacity.

Scaling Up

Each Send Email flow has five steps, which means it can run up to 100,000 times per day (500,000/5). Maximum emails per day: 100,000.

Scaling Out

You can create more copies of the Send Email flows to scale out.

Third-party connector

Another option to scale Send Email flows is to use a third-party connector with higher daily limits in this flow, for example, SendGrid on the Azure Marketplace.

You might still need to scale out, depending on how many steps the Send Email flow has.

Scale Registration flows

Registration uses a scheduled flow to query recently added records to send the confirmation email. By default, there are two flows working in parallel, each handling a range of last names:

  • Email Registration Confirmation (Lastname: A-M) only processes records with last names starting from A-M.
  • Email Registration Confirmation (Lastname: N-Z) only processes records with last names starting from N-Z.

Each flow has a loop with four steps to process each record, which means it can run up to 125,000 (500,000/4) records per day. By default, these flows run every three minutes.

Scaling Out

To increase capacity, you can create more copies of Email Registration Confirmation, so each handle smaller section of last names.

If you use this option, you'll also need to update the FilterConditions variable in the flows.

Note

Email Registration Confirmation flows internally call child flow Send Email (Registration) to send email. If you add more copies, you might need to also scale Send Email (Generic).

Scale other flows

You can use other flows to send email or handle other processes in the solution. Each of these flows also needs to scale to prevent reaching the 500,000 steps per day limit. Because all email-sending flows internally call the child flow Send Email to send email, scaling Send Email becomes more critical to handle higher demands.

The other child flow Get Environment Variable can also become a bottleneck, because many other flows use it.

Email sending flows

Email Booking Confirmation

Name Value
Trigger Every record created in Appointments (Vaccination) entity
Steps in each run 2
Max run per day 250,000
Email child flow Yes (Send Email Generic)
Env Var child flow Yes

Email Appointment Reminder

Name Value
Trigger Every 1 hour (max 5,000 records per run)
Steps in each run 7
Max run per day 71,000
Email child flow Yes (Send Email Generic)
Env Var child flow Yes

Email Booking Cancellation (Resident Cancelled)

Name Value
Trigger Every record update in Appointments (Vaccination) entity and marked as canceled
Steps in each run 2
Max run per day 250,000
Email child flow Yes (Send Email Generic)
Env Var child flow Yes

Email Booking Cancellation (Provider Cancelled)

Name Value
Trigger Every record update in Appointments (Vaccination) and marked as canceled pending
Steps in each run 3
Max run per day 166,000
Email child flow Yes (Send Email Generic)
Env Var child flow No

Email Vaccine 1st Dose Reminder

Name Value
Trigger When a row created in Immunization Recommendation
Steps in each run 4
Max run per day 125,000
Email child flow Yes (Send Email Phase Opening)
Env Var child flow Yes

Email Vaccine 2st Dose Reminder

Name Value
Trigger When a row created in Immunization Recommendation
Steps in each run 5
Max run per day 100,000
Email child flow Yes (Send Email Generic)
Env Var child flow Yes

Email VIS Document

Name Value
Trigger When a row created in Immunizations
Steps in each run 8 (assume one doc per vaccine)
Max run per day 62,000
Email child flow Yes (Send Email with attachment)
Env Var child flow No

Resend Email Appointment Reminder

Name Value
Trigger Every record update in Appointments (Vaccination) and Resend field is enabled
Steps in each run 4
Max run per day 125,000
Email child flow Yes (Send Email Generic)
Env Var child flow Yes

Email Unsubscribe from Notifications

Name Value
Trigger Every record update in Contacts when the Email Opt In field is set to no
Steps in each run 2
Max run per day 250,000
Email child flow Yes (Send Email Generic)
Env Var child flow Yes

Process Phase Opening

Name Value
Trigger When a Phase is set to Booking Open yes and there are recommendations to send
Steps in each run 14 with phase re-evaluation enabled

13 without phase re-evaluation enabled
Max run per day Max 35,000 records per day with phase re-evaluation enabled.

Max 38,000 records per day without phase re-evaluation enabled
Email child flow Yes (when phase re-evaluation enabled)
Env Var child flow Yes

Send Invitation Email

Name Value
Trigger When an Invitation record is created
Steps in each run 5
Max run per day 100000
Email child flow Yes
Env Var child flow No

Email Vaccination Recovery Process

Name Value
Trigger When an Invitation record is created
Steps in each run 7 If Registration Phase

10 If Schedule Phase

11 If Reminder Phase
Max run per day 71,000 If Registration Phase

50,000 If Schedule Phase

36,000 If Reminder Phase
Email child flow Yes
Env Var child flow No

Child flows

Get Environment Variable

Name Value
Trigger From other Flows
Steps in each run 3
Max run per day 166,000

Send Email (Registration)

Name Value
Trigger From Email Booking Confirmation flows
Steps in each run 5
Max run per day 100,000

Send Email (Phase Opening)

Name Value
Trigger From Process Phase Opening flow
Steps in each run 5
Max run per day 100,000

Send Email (Generic)

Name Value
Trigger From flows other than booking confirmation and phase opening
Steps in each run 5
Max run per day 100,000

Send Email (Registration) is used for registration confirmation emails.

Send Email With Attachment (Base)

Name Value
Trigger Every record update in Appointments (Vaccination) and Resend field is enabled
Steps in each run 5
Max run per day 100,000

Processor flows

Bulk Appointment Slots Creator

Name Value
Trigger When a new site Schedule is created
Steps in each run 32 + days x intervals x slots per interval x 20
Max run per day Depends on steps, which depend on number of slots need to be created in each run
Email child flow No
Env Var child flow No

Process Automatic Phase Opening

Name Value
Trigger When a Phase Opening Booking is set to Yes, Automate is set to Yes and there are Automate remaining recommendations to send
Steps in each run 5
Max run per day 100,000
Email child flow No
Env Var child flow No

Process Unattested Registrations

Name Value
Trigger Every 2 hours
Steps in each run 6
Max run per day 83,000
Email child flow No
Env Var child flow No

Process No-Show Appointments

Name Value
Trigger Every 1 hour
Steps in each run 3
Max run per day 166,000
Email child flow No
Env Var child flow No

Process Tentative Slots

Name Value
Trigger Every 1 hour
Steps in each run 5
Max run per day 100,000
Email child flow No
Env Var child flow No

Process Null Appointments

Name Value
Trigger Every 1 hour
Steps in each run 3
Max run per day 166,000
Email child flow No
Env Var child flow No

Microsoft Vaccination Management flows

The cloud flows in this section are available in the Vaccination Management Flows solution.

Cloud flow name Description
Bulk Appointment Activity Status Cleaner Manual execution of updating appointments (vaccinations) with an activity status. Max execution of 5000 records per execution. Rerun until list records returned is 0.
Bulk Appointment Slot Cleaner Fills the Vaccine, Day, Month, Year, and Dose fields of lost records that don't have data. Depending on the slots records, this flow should be run multiple times (up to 5000 updates per run).
Bulk Appointment Slots Creator Generate appointment slots when a new schedule is created.
Email Appointment Reminder Send an email about 36 hours to 12 hours before the appointment to remind the resident about their upcoming appointment. This will process up to 10,000 records in each run.
Email Booking Cancellation (Provider Cancelled) Sends an email notifying a resident when their appointment is canceled by the provider.
Email Booking Cancellation (Resident Cancelled) Sends an email notifying a resident when their appointment is canceled.
Email Booking Confirmation Notify the resident that their appointment is booked successfully. Provides the appointment details, QR code, location address, and date and time of the appointment.
Email Registration Confirmation (Lastname: A-M) Notify residents with last names that start from A-M that their registration is successfully submitted. Also notify if they're eligible for the current phase or not.
Email Registration Confirmation (Lastname: N-Z) Notify residents with last names that start from N-Z that their registration is successfully submitted. Also notify if they're eligible for the current phase or not.
Email Unsubscribe From Notifications Sends an email of unsubscription to the user with the URL to resubscribe.
Email Vaccine 1st Dose Reminder Every time a new immunization recommendation is created, this flow will send a reminder email to resident with the appointment portal URL.
Email Vaccine 2nd Dose Reminder Every time a new immunization recommendation is created with dose number equal to 2, this flow will send a reminder email to the resident with the appointment portal URL.
Email VIS Document Send an email to resident after they've received the vaccine with VIS docs.
Process Automatic Phase Opening Processes the automation part of the phase opening. It will use the functionality of the Process Phase Opening flow to trigger the evaluation of eligibility.
Process Clean Custom Email Generator Entity Deletes the email generator records created by the actions for email templates.
Process no-show appointments Runs periodically and marks any appointment that is marked as booked and past due for more than 8 hours to no-show.
Process Null Appointments Runs everyday to delete all appointments with null status.
Process Phase Opening When a phase is updated or opened, a set of residents (specified in the phase record) will be sent invitations to set up an appointment or re-register to reassess eligibility.
Process Tentative Slots Runs periodically and marks any Slot that is in Busy Tentative state to free if it hasn't been updated in the last one hour.
Process unattested registrations A recurring flow that removes eligibility records that are unattested. Also removes the associated contacts if they have no attested eligibility.
Re-Send Email Appointment Reminder When an appointment is updated with Resend set to true, resends an appointment reminder to the resident on the appointment.
Send Email (Generic) Flow to send emails not otherwise categorized by other send email flows. This is intended for flows that won't have much traffic.
Send Email (Phase Opening) Flow to send emails to residents to either set up an appointment or resubmit eligibility when a phase is opened or updated.
Send Email (Registration) Flow to send registration email confirmation for the resident.
Send Email With Attachment (Base) Flow to send an email including an attachment.
Vaccination - Clear Web Form Session Cookies Hourly Hourly recurring flow that will delete web form session cookies older than a specified time.
Vaccination - Clear Web Form Sessions Hourly Hourly recurring flow that deletes Web Form Sessions that haven't been modified for a specified time period.
Vaccination - Clear Web Session Challenge Hourly recurring flow that deletes Web Session Challenges that haven't been modified for a specified time period.

Microsoft Vaccination Management actions for email templates

These actions are available in the Vaccination Management Email Actions solution.

Process name (Action) Description
ComposeHeaderAndFooter Composes the email header and footer that will be replicated in all the compose email actions.
ComposeAppointmentConfirmation(FirstDose) Composes the email body for the confirmation of the first dose of a resident.
ComposeAppointmentConfirmation(SecondDose) Composes the email body for the confirmation of the second dose of a resident.
ComposeAppointmentCancellationEmail(FirstDose) Composes the email body for the cancellation when the patient cancels their first dose.
ComposeAppointmentCancellationEmail(SecondDose) Composes the email body for the cancellation when the patient cancels their second dose.
ComposeProviderCancellationEmail Composes the email body for the cancellation when the provider cancels an appointment in the Vaccination management app.
ComposeVaccineAppointmentReminderEmail Composes the email body for the cancellation when the option to send the reminder is set in the Vaccine management app.
ComposeEligibilityConfirmationEmail Composes the email body for the eligibility when the patient isn't going to get a shot immediately and is put in another phase different than phase 1.
ComposeEligibilityReCheckEmail Composes the email body for the phase opening process so patients can recheck their eligibility.
ComposeUnsubscribeEmail Composes the email body to unsubscribe from emails.
ComposeFollowUpVISAndLinkEmail Composes the email body for the email that should be sent with the VIS document attached; this is for the first dose of a vaccine with two doses. This email should include the option to reschedule for the second dose.
ComposeFollowUpVISOnlyEmail Composes the email body for the email that should be sent with the VIS document attached; this is for the first dose of a vaccine with two doses.
ComposeFollowUpSingleDoseEmail Composes the email body for the email that should be sent with the VIS document attached; this is for the vaccines that are single dose only.
ComposeFollowUpSecondDoseEmail Composes the email body for the email that should be sent with the VIS document attached; this is for the second and final does of a vaccine with two doses.
ComposeScheduleAppointmentEmail(FirstDose) Composes the email body for the patients to schedule their first dose if eligible.
ComposeScheduleAppointmentEmail(SecondDose) Composes the email body for the patients to schedule their second dose.

For information about how to configure email templates used in these actions, go to Configure actions for email templates.

Microsoft Vaccination Management workflows

The workflows in this section are found in the Vaccination Management Workflows solution.

Process name (Workflow) Description
Vaccination - Vaccine Phase set Pending to Send  Resets To Send after copying that value to Pending to Send
Vaccination - Set Performer Full Name  Concatenates the performer’s first name and last name on Vaccination performer.
Vaccination - Set Eligibility Contact 1 to 1 Populates the Vaccination Eligibility onto the Contact form to create a 1 to 1 relationship.
Vaccination - Set Contacts Eligibility 1 to 1  Populates the Contact onto the Vaccination Eligibility form to create a 1 to 1 relationship.
Vaccination - Set Appointment Fulfilled on Vaccinated  Updates the appointment status to Fulfilled when the patient is vaccinated.
Vaccination - Recommendation copy session cookie value  Copies the Web Form Session Cookie Value Insert into the Web Form Session Cookie Value and then clears the value in Web Form Session Cookie Value Insert.
Vaccination - Generate recommendation from phase  Creates a first or second dose recommendation depending on the inputs from the eligibility record.
Vaccination - Email Update From Contact  Copies the patient associated with the Eligibility into the Email Update field.
Vaccination - Eligibility Phase Determination  Used to determine which Phase group a patient is eligible to be in by evaluating the eligibility form submitted.
Vaccination - Eligibility Email Update  Copy the email provided in the eligibility into the Contact’s primary email field.
Vaccination - Create 2nd Dose Immunization Recommendation Generates a second Immunization Recommendation when the first appointment is fulfilled (if applicable for the scheduled vaccine).
Vaccination - Complete Vaccination Information  Ensures that the fields on the Vaccination record are populated with the vaccine information. If not specified, determines the vaccination education to be associated with the vaccine and updates the appointment with an actual end date and time and associates the vaccination record. 
Vaccination - Cancel Appointment  An on-demand workflow that updates the appointment status to Cancelled.
Vaccination - Appointment cancellation  If an appointment is canceled, free up the slot and recommendation by removing the association with the appointment.
Vaccination - Appointment (EMR) Booked with Primary Slot Updates the appointment information with the information in the selected slot, and then updates the status of the slots to busy.