Extend Microsoft Return to School
This article provides a detailed description of the data model, workflows, and Microsoft Power Automate flows used by Microsoft Return to School. Return to School extends the Common Data Model and uses several of its components. Administrators, developers, and users should be mindful of Return to School and possible implications for solutions that coexist in the same environment.
The definitions provided in this article indicate the intended purpose of the tables, relationships, columns, flows, and workflows contained in Microsoft Return to School. These definitions can be fully or partially adopted, depending on your business requirements.
Integration and extension
Microsoft Return to School is built on Microsoft Power Platform. To learn more about working with model-driven apps and Microsoft Dataverse, go to:
- Model-driven apps guide
- Microsoft Dataverse developer guide
- Microsoft Dataverse entities
- Work with data using code in Microsoft Dataverse
- Best practices and guidance for Microsoft Dataverse
- Business process flows
To learn more about solutions and application lifecycle management (ALM) guidance to maintain solution integrity, go to:
To learn more about supported extension methods, go to:
Guidance
Numerous parts of Return to School can be extended. The following are a couple of components where we give more guidance to customize or tailor them.
Security roles
The security roles included in Microsoft Return to School 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 Microsoft Dataverse security, go to:
New security roles can be created and tailored to your needs. The supplied security roles can serve as a template that you copy and modify. If the new roles need to be moved to different environments, they need to be added to a new Return to School solution.
To copy the security role:
Sign in to the Power Platform admin center.
Select your environment by clicking the environment name, and then select See all under Security roles.
Select the role you want to copy.
Select More actions, and then select Copy.

Entity relationship diagram
The entity relationship diagram illustrates the tables and their relationships that are present in the Microsoft Dataverse environment. System-generated tables, relationships, and columns, such as Created By and Modified By, aren't displayed in the diagram.
The lists of tables in the following sections are grouped by the app they support in Microsoft Return to School.
Core tables
These tables are used across multiple applications and are considered core to the platform.
| Table name | Information in the table |
|---|---|
| General Setting | Contains metadata used to set up the application |
| School Group | Contains logic grouping metadata used to create a hierarchical relationship of schools |
| School | Contains description of schools |
| Person (Contact) | Summary information about a person |
| Reopen Phase | Contains information on reopening phases for schools |
| Reopen Phase Transition | Contains a list of requests to move from one phase to another with relevant process information |
| Access Action | Used to manage school access for a person |
| Notification | Used to send notifications to the portal user |
| Labs | Used to set up labs that will process the test specimen for a specific healthcare service |
| Test Location | Onsite location where a person's test will be administered or was administered |
| Healthcare Service | Used to define the healthcare services covered under the application |
| Location Schedules | Used to set up the schedule (dates and times) and capacity at a test location |
| Slots | Used to define the start and end time of a slot and capacity of a slot |
| Questionnaire | A set of questions associated with a healthcare service |
| Questions | Questions associated with a healthcare service |
| Health And Safety Plans | Used to define the periodic test plan |
| Appointments | Contains appointment details scheduled by portal users in the portal app |
| Test Results | Contains Test Result details entered by portal or model-driven app users |
| Visits | Contains associations of contacts and schools for a given time representing a physical entry and exit |
| Daily Passes | Contains associations of contacts to their daily passes |
| Share Daily Passes | Contains records of daily passes that will be emailed to a guest |
| Case Contact | Contains individuals associated with a case |
| Case | Contains associations of contacts and information relevant to their case |
Data definitions
The data definitions section provides information about a list of tables, columns, and the areas of Return to School where they're used. System-generated columns such as Created On and Modified On aren't displayed.
Access Action
| Display name | Column type | Description | Platform use |
|---|---|---|---|
| Person | Lookup | Used to associate the contact. | Model-driven app |
| Access Status | Option set | Used to set type of access action. | Model-driven app |
| Access Available date | Date time | Set expiration date for this record. | Model-driven app |
| Block Reason | Option set | Reason why the person was blocked. Available options are: Quarantine, Isolation, and Others. This value defaults to Isolation when the access action is created from a case. | Model-driven app |
| Submitted by | Lookup | Lookup to system user. This is used to capture the original record creator. | Model-driven app |
| Source | Text | Used to capture source name, and defaults to manual when created in model-driven app. | Model-driven app |
| Notes | Text | Used to capture reason for the block or instructions to the end user. | Model-driven app |
| Notification | Lookup | Used to associate to a specific notification so notes and body can be synchronized. | Model-driven app and portal app |
Case Contact
| Display name | Column type | Description | Platform use |
|---|---|---|---|
| Name | Text | Primary identifier of the record | Model-driven app |
| Person | Lookup | Contact associated with the record | Model-driven app |
| Comment | Text | Used to capture details of the possible contact | Model-driven app |
| Open Case | Lookup | Used to associate an open case for the case contact | Model-driven app |
Person (Contact)
| Display name | Column type | Description | Platform use | Return to School |
|---|---|---|---|---|
| Contact Type | Option set | Used to set type of contact | Model-driven app | Base |
| Default School | Lookup | Used to associate a school to the person | Model-driven app | Base |
| Requires portal access | Two Option | Used to send an invite to the contact | Model-driven app | Portal |
| Student / Faculty Id | Text | ID used to identify a student or a faculty in the application | Model-driven app | Portal |
| Graph Id | Text | The unique identifier for the graph object user | Model-driven app | Portal |
| Graph user principal name | Text | The user principal name (UPN) for the SDS graph object user | Model-driven app | Portal |
| Portal invitation sent | Two Option | Indicates if an email invitation has been sent to a person | Model-driven app | Portal |
| Portal invitation sent date & time | Date and Time | Indicates the date and time the portal invitation was sent successfully | Model-driven app | Portal |
Case
| Display name | Column type | Description | Platform use |
|---|---|---|---|
| Case Number | Text | Unique identifier for the person case | Model-driven app |
| Duration in Days | Whole number | Used to capture the number of days a case was open | Model driven app |
| School Access Available | Option Set | Used to denote whether the person can get a pass for a school | Model-driven app |
| School Access Available Date | Date and Time | Used to specify when the person will be able to get a pass for a school | Model-driven app |
| Instructions | Text Area | Used to give the person a note on why they are blocked from booking a pass | Model-driven app |
| Person | Lookup | Used to associate the person to the person case | Model-driven app |
| Person Contacted | Option Set | Used to denote whether the person was contacted | Model-driven app |
| Instructions Provided | Option Set | Used to denote whether the person was provided instructions | Model-driven app |
| Public Health Official Notified | Option Set | Used to denote whether the appropriate public health officials have been notified, if applicable | Model-driven app |
| Screened | Option Set | Used to denote whether the screening process has occurred | Model-driven app |
| First Time Person Contacted | Date and Time | Marked by a workflow and used in the Power BI dashboards to track performance | Model-driven app |
| First Time to Investigation | Date and Time | Marked by a workflow and used in the Power BI dashboards to track performance | Model-driven app |
| Originating Case | Lookup | Used to associate a case to the case where it was created from (through case contacts) | Model-driven app |
| Process Stage | Text | Indicates the actual process stage of the business process flow | Model-driven app |
Visit
| Display name | Column type | Description | Platform use |
|---|---|---|---|
| Daily Pass | Lookup | Used to associate a daily pass | Model-driven app |
| Person | Lookup | Used to associate the person creating the visit | Model-driven app |
| End Time | Date and Time | Used to denote the end of the visit | Model-driven app |
| School | Lookup | Used to denote the school visited | Model-driven app |
| Name | Text | Primary identifier of the record | Model-driven app |
| Start Time | Date and Time | Used to denote the beginning of the visit | Model-driven app |
School
| Display name | Column type | Description | Platform use |
|---|---|---|---|
| Address Street 1 | Text | Used to provide address information for the school | Model-driven app |
| Address City | Text | Used to provide address information for the school | Model-driven app |
| Address Country | Lookup | Used to associate the standardized country, with the default option being US | Model-driven app |
| Address Postal Code | Text | Used to provide address information for the school | Model-driven app |
| Address State/Province | Lookup | Used to associate the standardized state to the school | Model-driven app |
| Description | Text | Used to provide address information for the school | Model-driven app |
| School Group | Lookup | Used to associate the group this school belongs to | Model-driven app |
| Name | Text | Used to provide a recognizable name for the school | Model-driven app |
| Reopen Phase | Lookup | Used to associate the current reopen phase | Model-driven app |
School Group
| Display name | Column type | Description | Platform use |
|---|---|---|---|
| Description | Text | Used to provide additional details about the school group | Model-driven app |
| Name | Text | Used to provide a name for the school group | Model-driven app |
Daily Pass
| Display name | Column type | Description | Platform use |
|---|---|---|---|
| Pass Date | Date and Time | Used to capture the date and time that the daily pass was generated | Model-driven app |
| Attested | Option Set | Used to capture whether the person has attested | Model-driven |
| Person | Lookup | Used to denote the person completing the attestation | Model-driven app |
| School | Lookup | Used to associate the school for which the person is attesting | Model-driven |
| Name | Text | Used to create a name for the daily pass record | Model-driven app |
Notification
| Display name | Column type | Description | Platform use |
|---|---|---|---|
| Recipient | Lookup | Used to associate the contact | Model-driven app |
| Notification Type | Option set | Used to set warning level | Model-driven app |
| Header | Text | Header text to be displayed or subject line of the email | Model-driven app |
| Body | Text | Main text of the message | Model-driven app |
| Send as email | Two option | Checked if notification must be sent by email | Model-driven app |
| Send as text | Two option | Checked if notification must be sent by text | Model-driven app |
Reopen Phase
| Display name | Column type | Description | Platform use |
|---|---|---|---|
| Capacity Limit Percentage | Decimal Number | Used to scale available capacity in a school | Model-driven app |
| Description | Text | Used to document details about the reopen phase | Model-driven app |
| Name | Text | The name of the reopen phase | Model-driven app |
| Index | Whole Number | Used to provide a logical sequence to reopen phases | Model-driven app |
| Process Stage | Lookup | Used to associate a reopen phase to the correct business process flow stage | Model-driven app |
Reopen Phase Transition
| Display name | Column type | Description | Platform use |
|---|---|---|---|
| Name | Text | The primary identifier of the record | Model-driven app |
| School | Lookup | Used to associate the applicable school | Model-driven app |
| Proposed Reopen Phase | Lookup | Used to capture the reopen phase the school is attempting to transition to | Model-driven app |
| Current Reopen Phase | Lookup | Used to capture the current reopen phase of the applicable school | Model-driven app |
| Review Comments | Text | Used to capture notes from the review | Model-driven app |
| Reviewer | Lookup | Used to associate the appropriate reviewer to the transition record | Model-driven app |
| Review Status | Option Set | Used to denote the current status of the reopen phase transition | Model-driven app |
| Summary | Text | Used to provide an additional context for the transition | Model-driven app |
Share Daily Pass
| Display name | Column type | Description | Platform use | Return to School |
|---|---|---|---|---|
| Name | Text | The primary identifier of the record | Portal | Portal |
| Recipient | Text | Used to capture the email address of the recipient | Portal | Portal |
| Language | Text | Used to capture the language used in the email | Portal | Portal |
| Daily Pass | Lookup | Used to associate the daily pass to share | Portal | Portal |
General Setting
| Display name | Column type | Description | Platform use |
|---|---|---|---|
| Allow Dependent Registrations | Option Set | Indicates if users are able to register a dependent | Model-driven app and portal app |
| Allow on behalf of attestations | Option Set | Indicates if guest is allowed to register other guest | Model-driven app |
| Allow Storing of Negative Attestations | Option Set | Indicates if you want to store negative attestations | Model-driven app |
| Allow QR codes | Option Set | Indicates if QR codes are displayed on the pass | Model-driven app |
| Allow Share Guest Registrations | Option Set | Indicates if sharing of a guest registration is available | Model-driven app |
| Company Name | Text | Used to describe the solution settings record | Model-driven app |
| School Group | Lookup | Links solution settings record to specific school group | Model-driven app |
| Health & Safety Instructions | Text | Instructions provided to a person when making a booking | Model-driven app |
| General Terms & Agreement | Text | Instructions provided to a person when making a booking | Model-driven app |
| Guest Health Terms & Agreement | Text | Instructions provided to a person when registration is for a guest | Model-driven app |
| Guest Privacy Terms & Agreement | Text | Instructions provided to a person when registration is for a guest | Model-driven app |
| Name | Text | The primary name of the setting record | Model-driven app |
| Resources Text | Text | Instruction provided to resources when registering to the portal | Model-driven app and Portal |
| Instructions for Negative Attestations | Text | Instructions displayed after the user selects the I disagree button on the Health Terms & Agreement page. | Model-driven app and Portal |
Test Locations
| Display name | Column type | Description | Platform use | Return to School |
|---|---|---|---|---|
| Name | Text | Name of test location | Model-driven app and portal app | Base |
| School | Lookup | School where test location is located | Model-driven app and portal app | Base |
Healthcare Service
| Display name | Column type | Description | Platform use | Return to School |
|---|---|---|---|---|
| Name | Text | Model-driven app and portal app | Base |
Location Schedules
| Display name | Column type | Description | Platform use | Return to School |
|---|---|---|---|---|
| Name | Text | Name of the schedule | Model-driven app and portal app | Base |
| Location | Lookup | Associated test location that will offer the schedule | Model-driven app and portal app | Base |
| Healthcare Service | Lookup | Associated healthcare service at the test location for which schedule is being set up | Model-driven app and portal app | Base |
| Start Date | Date | Start date of the schedule | Model-driven app and portal app | Base |
| End Date | Date | End date of the schedule | Model-driven app and portal app | Base |
Slots
| Display name | Column type | Description | Platform use | Return to School |
|---|---|---|---|---|
| Name | Text | Name of the slot | Model-driven app and portal app | Base |
| Slot Capacity | Whole Number | Capacity of the slot (for example, How many appointments can be booked in that time period) | Model-driven app and portal app | Base |
| Start Time Hour | Whole Number | Time slot Start Time Hour | Model-driven app and portal app | Base |
| Start Time Minute | Whole Number | Time slot Start Time Minute | Model-driven app and portal app | Base |
| End Time Hour | Whole Number | Time slot End Time Hour | Model-driven app and portal app | Base |
| End Time Minute | Whole Number | Time slot End Time Minute | Model-driven app and portal app | Base |
Questionnaire
| Display name | Column type | Description | Platform use | Return to School |
|---|---|---|---|---|
| Name | Text | Questionnaire name | Model-driven app and portal app | Base |
| Healthcare Service | Lookup | Healthcare service that the questionnaire is associated to | Model-driven app and portal app | Base |
| Language | Lookup | Language that the questions will be displayed as on the portal | Model-driven app and portal app | Base |
Question
| Display name | Column type | Description | Platform use | Return to School |
|---|---|---|---|---|
| Question | Text | Identifier for the question | Model-driven app and portal app | Base |
| Question Text | Multiline Text | Question text as it will appear to the user on the portal | Model-driven app and portal app | Base |
| Questionnaire | Lookup | Questionnaire that the questions are associated with | Model-driven app and portal app | Base |
| Question Order | Whole Number | Order that the question should appear in the portal | Model-driven app and portal app | Base |
| Response Type | Option Set | Type of response answer, such as Yes/No, Text, Date | Model-driven app and portal app | Base |
Health and Safety Plan
| Display name | Column type | Description | Platform use | Return to School |
|---|---|---|---|---|
| Name | Text | Name of the health and safety plan | Model-driven app | Base |
| Start Date | Date | Start date of the plan | Model-driven app | Base |
| End Date | Lookup | End date of the plan | Model-driven app | Base |
| Frequency | Option Set | Frequency of testing for a person | Model-driven app | Base |
| Healthcare Service | Lookup | Associated healthcare service | Model-driven app | Base |
Appointments
| Display name | Column type | Description | Platform use | Return to School |
|---|---|---|---|---|
| Subject | Text | Subject of the appointment | Model-driven app and portal app | Base |
| Start Time | Date and Time | Planned start date and time of the appointment | Model-driven app and portal app | Base |
| End Time | Date and Time | Planned end date and time of the appointment | Model-driven app and portal app | Base |
| Person | Lookup | Person who was administered the test | Model-driven app and portal app | Base |
| Healthcare Service | Lookup | Associated healthcare service | Model-driven app and portal app | Base |
| Test Location | Lookup | Onsite location that a person's test will be administered at or was administered from | Model-driven app and portal app | Base |
| Actual Start Time | Date and Time | Actual start date and time of the appointment | Model-driven app and portal app | Base |
| Actual End Time | Date and Time | Actual end date and time of the appointment | Model-driven app and portal app | Base |
Test Results
| Display name | Column type | Description | Platform use | Return to School |
|---|---|---|---|---|
| Test Date | Date | Appointment date at which the Healthcare service was performed | Model-driven app and portal app | Base |
| Lab | Date and Time | The associated lab that will process the test specimens | Model-driven app and portal app | Base |
| Test Location | Lookup | Onsite location that a person's test will be administered at or was administered from | Model-driven app and portal app | Base |
| Appointment | Lookup | The associated appointment for the test result (blank for self-reported test results) | Model-driven app and portal app | Base |
| Walk In | Option Set | Yes/No flag that identifies whether the person receiving onsite test had a prior appointment | Model-driven app and portal app | Base |
| Self Reported | Option Set | Yes/No flag that identifies whether the test was administered onsite or self-reported | Model-driven app and portal app | Base |
| Result | Option Set | A test outcome that will be displayed as one of the following values: Positive, Negative, or Inconclusive | Model-driven app and portal app | Base |
| Result Interpretation | Text | A description of an interpretation of the test results | Model-driven app and portal app | Base |
| Result Date | Date and Time | Date and time for which the test result or outcome was determined | Model-driven app and portal app | Base |
| Specimen Code | Text | A field that labs are able to populate to allow linking a test result to a particular specimen | Model-driven app and portal app | Base |
Related persons
| Display name | Column type | Description | Platform use | Return to School |
|---|---|---|---|---|
| Student | Lookup | Student contact that is associated with the parent/guardian. | Model-driven app and portal app | Base |
| Relationship type | Option set | Describes the relationship type between the student and parent/guardian. Available options are Parent/Guardian and Others. Default values is set to Parent/Guardian. | Model-driven app and portal app | Base |
| Parent / Guardian | Lookup | Parent / Guardian contact that is associated with the student. | Model-driven app and portal app | Base |
Portal invitations
| Display name | Column type | Description | Platform use |
|---|---|---|---|
| Name | Text | Name of the portal invitation batch configuration | Model-driven app |
| Max number of invitations to send | Whole Number | Number of invitations to send in a batch | Model-driven app |
| Invitations in progress | Two Option | Indicates if the process that sends the invitations is currently running | Model-driven app |
Cloud flows
This section describes the different flows in Return to School and explains their purpose. These flows can be extended, used, or turned off, depending on your business requirements.
Tip
As a best practice, create an unmanaged solution to add the flows that you want to edit, and then edit the flows in the new unnmanaged solution to ensure that you don't lose your customization in case you need to update Return to School.
| Flow | Table | Description |
|---|---|---|
| Access Action - Reset school access | Access Action | Deactivates records when past the date in "Access available date." |
| Access Action - Update linked case | Access Action | Updates linked person case through source field when record is deactivated. |
| Access Action - Update notification | Access Action | Updates the body of the linked notification when the notes change. |
| Access Action - Validate and create notification | Access Action | Checks if owner is set to linked person and creates a notification record. |
| Appointment - Send email confirmation | Appointment | Sends email confirmation after an appointment is booked |
| Contact - Send portal invitation | Portal Invitation | Sends portal email invitations in batches. Maximum number of invitations is set at 5000 each day. |
| Guest Attestation - Disable Earlier Pass | Daily Pass | When a person creates multiple passes on a single day, earlier passes will be disabled. |
| Employee Case - Create Access Action | Person Case | Creates access action blocking the person when "School Access Available" is set to "No." |
| Employee Case - Disable Access Action | Person Case | Deactivates access action linked to the person case when "School Access Available" is set to "Yes." |
| Employee Case – Update Access Action | Person Case | Updates linked access action when "School Access Available Date" or "Person Instructions" changes. |
| Employee Case - Update Case Contacts | Case Contact | Deactivates case contact records for a person if an employee case is created for the person. |
| Employee Visit - Name and match to booking or attestation | Person Visit | Sets the name of the person visit and matches a visit to bookings and attestations. |
| Guest Attestation - Disable earlier pass | Guest Attestation | Disables earlier attestations and guest registrations for that person so number of guests stays correct. |
| Guest Registration - Disable earlier pass | Guest Registration | Disables earlier registrations for that person on the same day so number of guest stays correct. |
| Notification - Send as email | Notification | Sends an email to the person when the notification is set to "Yes" on "Send as email." |
| Notification - Validate and set correct owner | Notification | Sets owner to correct user record of the person contact. |
| Reopen Phase - Update Capacity | Reopen phase | Update capacity when the capacity limits change for a reopen phase. |
| Reopen Phase Transition - Update school reopen phase | Reopen phase transition | Updates and changes the reopen phase for a school. |
| Share Guest Attestation - Email | Share daily pass | Emails the daily pass details to an email address specified from the portal |
| Share Guest Registration - Email | Share Guest Registration | Shares the guest registration details with the host and the guest. |
| Share Guest Registration – Email with portal link | Share Guest Registration | Shares the registration details with the host and the guest, but includes link to the portal to make a guest attestation. |
| Test Results – Send Notification | Test Result | Creates a notification record in English or Spanish when a test result record is created. |
| Health and Safety Plan – Notification Daily | Notification | Creates a notification record in English or Spanish when a health and safety plan daily appointment is due the next day. This flow is triggered on a recurring schedule (for example, daily at 6:00 PM). |
| Health and Safety Plan – Notification Weekly | Notification | Creates a notification record in English or Spanish when a health and safety weekly plan appointment is due the next day. This flow is triggered on a recurring schedule (for example, daily at 6:00 PM). |
| Health and Safety Plan – Notification Monthly | Notification | Creates a notification record in English or Spanish when a health and safety monthly plan appointment is due the next day. This flow is triggered on a recurring schedule (for example, daily at 6:00 PM). |
Sending portal invitations in batch
Out of the box, Return to School is limited to emailing 5,000 portal invitations per day. This can be customized by changing the Maximum Value property of the Max number of invitations to send field of the Portal Invitations table and updating the Script for portal invitations validation code. See Scaling Email Flows for more information on how to scale up the Return to School email flows.
Negative attestation scenario
Some schools or school districts want to provide detailed negative attestation forms that give students, parents, and guardians instructions depending on their responses. Also, schools want school access to be managed or a case to be created depending on their responses. This can be done through Microsoft Forms and Cloud Flows. Separate licenses may be required for Microsoft Forms and Cloud Flows.
Instructions on how to set up a redirect to a Microsoft Form from the portal
Open Portal Management.
Select Web Templates on the left.
Open “Pass” Web Template.
For the window to redirect to the form upon selection of the I disagree button, add the following line of code in a script tag:
window.location.href = "FORM URL";within the below if condition code:
{% if guestattestations.results.entities[0].msft_attested == false %}
Sample screenshots of a Microsoft health check form

Instructions and screenshots on how to set up a flow to create a case depending on the response in the form
Create a cloud flow.
Configure the flow to be triggered whenever the form is submitted. For this, add a trigger to the flow “When a new response is submitted” and select the appropriate form ID in this step.
Note: Form ID can be found in the address bar URL where the form is loaded. Once the form ID is selected, get the response details from it.

Next, get the contact details based on the student information from the response.

Get the App ID of the model app.

Create the case record mapped to this contact and create a note mapped to this case.

Send an email regarding the case that is created. For this, the Case URL has to be dynamically built as below.

Feedback about Microsoft Return to School
To provide feedback about Microsoft Return to School, visit the community page.
