Skip to main content

How to build a central exceptions dashboard that surfaces at-risk locations across every operational form in Formaloo

Learn how to build a central exceptions dashboard in Formaloo that rolls up flagged items from every location, scores risk automatically, and uses AI to flag where trouble is concentrating.

What you'll build

By the end of this guide, you'll have a single exception log that any location can report into, whether the flagged item started life as a failed checklist, an open incident, an overdue request, or an equipment alert. Every exception gets a weighted risk score and a private AI-generated read the moment it's logged, and a leadership group gets a rolled-up view across every location and region, capped off by an AI Analyze report that reads the whole picture and writes out where risk is concentrating.

When to use this

  • Leadership has to check five different workflows separately to know which locations are struggling

  • Regional managers only find out about a pattern of problems at a site after it's already become a bigger issue

  • Exceptions get logged in different places (a checklist tool, an inbox, a spreadsheet) so nobody has a single view of risk

  • You want a consistent way to score severity across very different kinds of operational problems

  • You're managing more than a handful of locations and need to prioritize attention by where risk is actually concentrating, not by whichever workflow happens to be loudest

Part 1 — Build the exception log form

This is the single intake point every location uses to flag an exception, no matter which workflow it came from. The fastest way to build it is with Magic Create. Just describe the form in plain language and Formaloo generates the fields for you.

💡 Want a fully-built form in seconds instead of dragging fields one by one? Magic Create builds your form, fields, and field IDs from a plain-language prompt. This is the cornerstone article for every workflow that starts with "describe your form to the AI." See how to create any form with AI using Magic Create in Formaloo.

1. Open Magic Create: From your Formaloo homepage, click Magic Create.

2. Describe the form: Paste this prompt and click Create: "Build a form for logging an operational exception at a business location. Include a dropdown asking which location this is for, a dropdown asking which region the location belongs to, a dropdown asking what type of exception this is with options Failed checklist, Open incident, Overdue request, Equipment alert, and Other, a long text field asking what's going on, a dropdown asking how severe it is with options Low, Medium, High, and Critical, a yes/no field asking if this is actively affecting operations right now, a dropdown asking how long this has been going on with options Just noticed, A few days, Over a week, and Over a month, a file upload for supporting evidence, a short text field asking who is reporting this, and an email field asking for the best way to reach the reporter. Also add these admin-only fields, hidden from whoever fills out the form: a status dropdown with options Open, Under review, Escalated, and Resolved, an assignee field, and an internal notes long text field."

3. Verify the fields: Your form should look like this. Magic Create will have generated most of it. Verify each field and field ID matches exactly.

💡 Want to know exactly what the Assignee field can do, assign to a person, a team, or either? This is the atomic reference for that field type. See how to assign form submissions to team members and teams in Formaloo.

Field (question form)

Field ID

Type

Which location is this for?

location

Dropdown

Which region does this location belong to?

region

Dropdown

What type of exception is this?

exception_type

Dropdown

What's going on?

description

Long text

How severe is this?

severity

Dropdown

Is this actively affecting operations right now?

affects_operations

Yes/No

How long has this been going on?

duration_unresolved

Dropdown

Upload any supporting evidence

evidence_upload

File upload

Who's reporting this?

reporter_name

Short text

Best way to reach you

reporter_email

Email

Status

status

Dropdown (admin-only)

Assignee

assignee

Assignee (admin-only)

Internal notes

internal_notes

Long text (admin-only)

💡 Want internal fields, status, assignee, scores, invisible to the person filling out the form? Admin-only fields are the mechanism. Link it any time a step involves a field that only your team should see or edit. See what are admin-only fields and how they help.

4. Add the risk score field: Manually add one more field, risk_score, as a Formula variable field, admin-only, with a range of 0 to 10. Leave the formula itself empty for now. You'll wire it up with logic in Part 2.

5. Add the escalation status field: Add a Dropdown field, escalation_status, admin-only, with the options Normal, Watch, and Escalated. Default it to Normal.

6. Add the AI risk read field: Add an AI Analysis field, ai_risk_read, admin-only. This field is only available on the Business or Enterprise plan and is admin-only by nature, so it never shows to whoever files the report.

💡 Want a private AI-generated read on every submission, stored on the record and hidden from whoever filled out the form? The AI Analysis field is the mechanism. See how to generate AI analysis and let it update your form's own records in Formaloo.

7. Publish the form: Click Publish in the island bar at the top of the editor. This makes the form live.

Part 2 — Set up the risk scoring and escalation logic

This is where the form stops being a flat list of reports and starts behaving like a risk engine. Every exception gets scored the moment it's logged, from three factors: what kind of exception it is, how severe it is, and how long it's been going on. That score then drives an automatic escalation flag, so the riskiest exceptions surface themselves instead of waiting for someone to notice.

💡 Want your form to show, hide, skip, or require fields based on what someone just answered? This is the foundational guide to logic in Formaloo, what it is, and the difference between logic and calculation. See what is logic in Formaloo.

1. Open Advanced logic: In the form settings panel on the right side of the form editor, click Advanced logic and go to the Logic tab.

2. Open Magic Logic: Click Magic Logic in the top right corner of the Logic panel.

3. Describe the rules: Paste this prompt and click Generate rules: "If 'Is this actively affecting operations right now?' is Yes, show and require 'How long has this been going on?'. Hide it and don't require it by default. Create three hidden number variables: type_points, severity_points, and duration_points. Set type_points based on What type of exception is this: Failed checklist to 1, Overdue request to 1, Equipment alert to 2, Open incident to 3, Other to 1. Set severity_points based on How severe is this: Low to 1, Medium to 2, High to 3, Critical to 4. Set duration_points to 0 if Is this actively affecting operations right now is No, otherwise based on How long has this been going on: Just noticed to 0, A few days to 1, Over a week to 2, Over a month to 3."

4. Review the AI-generated rules: Approve each rule, or redo any that don't match. Once approved, the rules apply for a final review, and you can still make manual adjustments if needed.

5. Wire up the risk score: Open the risk_score Formula field you added in Part 1 and set its formula to type_points + severity_points + duration_points. This gives every exception a score from 0 to 10.

📖 Formula and variable fields only calculate from numeric fields and Integer or Decimal variables. See how to use a variable with a formula.

6. Add the escalation rule: Back in Magic Logic, add one more rule: "If risk_score is between 0 and 3, set Escalation status to Normal. If risk_score is between 4 and 6, set Escalation status to Watch. If risk_score is between 7 and 10, set Escalation status to Escalated." Approve the rule.

7. Save your logic: Click Save in the top right corner.

Part 3 — Build the email templates

Three emails carry this workflow: a confirmation to whoever reported the exception, an alert to the regional lead the moment something crosses the escalation threshold, and a status update once it's resolved. Build all three before wiring up the triggers in Part 4.

💡 Want to send branded, personalized emails instead of Formaloo's plain default notification? This is the foundational guide to building and sending custom email templates. See how to create and send custom email templates.

1. Open the template editor: Click your profile icon, go to Apps and integrations, find Custom email templates, and click Add new template.

2. Build the confirmation email: Name it "Exception logged confirmation." Set the subject to "We've logged your exception report, @exception_type at @location." Clear the body, add an AI block, and enter this prompt: "Write a warm, brief, factual confirmation email to @reporter_name thanking them for flagging an exception at @location. Reference the exception type, @exception_type, and reassure them it's been logged and is under review. Keep the tone calm and professional, not alarmed, since severity varies. Under 80 words. End with a note that they'll hear back if follow-up is needed. Design it with a white background, a single centered column max-width 560px, Inter or system-ui font, a small muted 'Received' status badge near the top, and a footer in a muted gray with an organization name placeholder." Click Save.

3. Build the escalation alert email: Add a second template, "Exception escalated, regional lead alert." Set the subject to "Escalated exception at @location, risk score @risk_score." Add an AI block with this prompt: "Write a direct, composed internal alert to the regional lead about an exception that just crossed the escalation threshold. Include location @location, region @region, exception type @exception_type, severity @severity, how long it's been ongoing @duration_unresolved, and the risk score @risk_score. Reference the AI risk read, @ai_risk_read, as prioritization context. Instruct the reader to review and assign it promptly. Under 100 words, factual and urgent but not alarmist. Design it with a white background, a single centered column max-width 560px, Inter or system-ui font, a bold red-tinted 'Escalated' badge, a small data table with location, region, type, severity, and risk score, and a muted footer." Click Save.

4. Build the resolution email: Add a third template, "Exception resolved, reporter update." Set the subject to "Update on the exception you reported at @location." Add an AI block with this prompt: "Write a short, appreciative email to @reporter_name letting them know the exception they reported, @exception_type at @location, has been marked resolved. Thank them for flagging it and reinforce that reporting exceptions helps the team catch risk early. Under 70 words, warm tone. Design it with a white background, a single centered column max-width 560px, Inter or system-ui font, a green-tinted 'Resolved' badge, and a muted footer." Click Save.

📖 Any of these variables can be swapped or extended. See how to dynamically pull form data into custom emails, PDFs, and AI prompts for the full list of supported variables.

Part 4 — Turn on the notification triggers

Templates don't send themselves. This part turns on the confirmation email for every new report and wires the escalation and resolution emails to the logic that already updates the record.

1. Turn on the confirmation email: In the form settings panel, click Notify, then Send email to respondent. Turn on the toggle, select the "Exception logged confirmation" template, and click Publish.

Note: this only works because the form has an Email field, reporter_email. Formaloo sends respondent notifications to the first Email field on the form.

2. Open the conditional logic for escalation: Go back to Advanced logic, and in the On Update section, click Add rule.

3. Set the escalation email rule: Define the condition: "When Escalation status is Escalated, then send email using the 'Exception escalated, regional lead alert' template to the assigned regional lead's email address." Click Save.

4. Set the resolution email rule: Add a second On Update rule: "When Status is Resolved, then send email using the 'Exception resolved, reporter update' template to reporter_email." Click Save.

💡 Want different emails to go to different people depending on the answer? This guide covers routing email notifications with conditional rules. See how to send and receive conditional email notifications.

Part 5 — Build the exception record PDF

Every exception can be exported as a print-ready record, useful for a compliance file or a handoff to whoever picks it up. This template pulls in the AI risk read alongside the standard fields.

1. Open the PDF template editor: Click your profile icon, go to Apps and integrations, and click Custom PDF template.

2. Add a new template: Click Add new template, switch the editor to HTML view, and paste the code below.

3. Name and save it: Name it "Exception record," and click Save.

<!doctype html> <html> <head> <meta charset="utf-8" /> <title>Exception record</title> <style>   * { box-sizing: border-box; }   body {     margin: 0;     background: #ffffff;     font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;     color: #222;   }   .page {     max-width: 760px;     margin: 0 auto;     padding: 60px 72px;   }   .header {     display: flex;     justify-content: space-between;     align-items: flex-start;     border-bottom: 1px solid #eee;     padding-bottom: 24px;     margin-bottom: 32px;   }   .header h1 {     font-size: 22px;     font-weight: 600;     margin: 0 0 6px 0;     color: #111;   }   .header .meta {     font-size: 12px;     color: #999;   }   .header .ref {     text-align: right;     font-size: 12px;     color: #999;   }   .header .ref strong {     display: block;     font-size: 14px;     color: #333;     margin-bottom: 2px;   }   .section {     margin-bottom: 32px;   }   .section-title {     font-size: 10px;     text-transform: uppercase;     letter-spacing: 1.5px;     color: #aaa;     margin-bottom: 14px;     font-weight: 600;   }   .grid {     display: grid;     grid-template-columns: 1fr 1fr;     gap: 16px 32px;   }   .field {     padding-bottom: 10px;     border-bottom: 1px solid #f0f0f0;   }   .field.full {     grid-column: 1 / -1;   }   .field-label {     font-size: 11px;     color: #999;     margin-bottom: 4px;   }   .field-value {     font-size: 14px;     color: #222;     font-weight: 500;   }   .ai-block {     background: #f9f9f9;     border-left: 3px solid #999;     padding: 18px 20px;     border-radius: 4px;     font-size: 13.5px;     line-height: 1.6;     color: #444;   }   .ai-block .ai-label {     font-size: 10px;     text-transform: uppercase;     letter-spacing: 1.5px;     color: #999;     margin-bottom: 8px;     font-weight: 600;   }   .footer {     display: flex;     justify-content: space-between;     border-top: 1px solid #eee;     padding-top: 16px;     margin-top: 40px;     font-size: 11px;     color: #999;   } </style> </head> <body>   <div class="page">      <div class="header">       <div>         <h1>Exception record</h1>         <div class="meta">Central exceptions dashboard</div>       </div>       <div class="ref">         <strong>EXC-@rowid</strong>         Logged @created_at       </div>     </div>      <div class="section">       <div class="section-title">Location and classification</div>       <div class="grid">         <div class="field">           <div class="field-label">Location</div>           <div class="field-value">@location</div>         </div>         <div class="field">           <div class="field-label">Region</div>           <div class="field-value">@region</div>         </div>         <div class="field">           <div class="field-label">Exception type</div>           <div class="field-value">@exception_type</div>         </div>         <div class="field">           <div class="field-label">Severity</div>           <div class="field-value">@severity</div>         </div>       </div>     </div>      <div class="section">       <div class="section-title">Description</div>       <div class="grid">         <div class="field full">           <div class="field-value">@description</div>         </div>       </div>     </div>      <div class="section">       <div class="section-title">Status and risk</div>       <div class="grid">         <div class="field">           <div class="field-label">Status</div>           <div class="field-value">@status</div>         </div>         <div class="field">           <div class="field-label">Assigned to</div>           <div class="field-value">@assignee</div>         </div>         <div class="field">           <div class="field-label">Risk score</div>           <div class="field-value">@risk_score / 10</div>         </div>         <div class="field">           <div class="field-label">Escalation status</div>           <div class="field-value">@escalation_status</div>         </div>       </div>     </div>      <div class="section">       <div class="section-title">AI risk assessment</div>       <div class="ai-block">         <div class="ai-label">AI-generated read</div>         @ai_risk_read       </div>     </div>      <div class="section">       <div class="section-title">Reported by</div>       <div class="grid">         <div class="field">           <div class="field-label">Name</div>           <div class="field-value">@reporter_name</div>         </div>         <div class="field">           <div class="field-label">Email</div>           <div class="field-value">@reporter_email</div>         </div>       </div>     </div>      <div class="footer">       <div>Confidential, for internal use only</div>       <div>[Organization name]</div>     </div>    </div> </body> </html>

📖 See how to create PDF templates to turn responses into documents and how to send custom PDFs with email notifications if you want the exception record attached automatically to the escalation alert.

Part 6 — Set up the portal and project pages

The intake form stays public with no login, since anyone at any location needs to be able to report an exception in seconds. Everything after that, reviewing, assigning, and rolling up risk, lives behind a portal split into three groups: the regional team, corporate leadership, and a small setup group for reference material.

💡 Want to give clients, applicants, or teammates their own space to submit and track requests? This is the foundational guide to building a portal and controlling who can see it. See how to create a portal and manage users' access.

Here's the full page layout before you build anything:

Group

Page

Access level

Data block

Filter

Sort

Form?

Report

Log an exception

Public, no login required

Form

None

N/A

Yes

Regional team

My region's exceptions

Regional lead, view only their assigned exceptions

Table

Assignee = logged-in user

Newest first

No

Regional team

Escalated in my region

Regional lead, view only their assigned exceptions

Table

Assignee = logged-in user AND Escalation status = Escalated

Risk score, highest first

No

Leadership

All exceptions

Corporate leadership, full visibility, all locations

Kanban

None

Grouped by Escalation status

No

Leadership

Exceptions by location

Corporate leadership, full visibility, all locations

Table

None

Grouped by Location, risk score highest first

No

Leadership

Exceptions by region

Corporate leadership, full visibility, all locations

Table

None

Grouped by Region, risk score highest first

No

Leadership

Escalated exceptions

Corporate leadership, full visibility, all locations

Table

Escalation status = Escalated

Risk score, highest first

No

Leadership

Risk by location

Corporate leadership, full visibility, all locations

Chart (bar, average risk score by location)

None

N/A

No

Leadership

AI risk briefing

Corporate leadership, full visibility, all locations

AI Analyze

None

N/A

No

Setup and resources

Email templates

Corporate leadership

Reference page

None

N/A

No

Setup and resources

PDF templates

Corporate leadership

Reference page

None

N/A

No

Setup and resources

How to use this template

Corporate leadership

Reference page

None

N/A

No

1. Activate the portal: Go to your project, click the Settings icon, select Activate portal, click Manage user, and complete the Setup wizard to create a user directory.

2. Set the report page to public: On the "Log an exception" page, open the three-dot menu, click Access, and set external access to Public.

3. Add the regional team pages: Create "My region's exceptions" and "Escalated in my region" as Table data blocks. On each, switch to Edit mode, click Options, scroll to Manage access, select the Assignee field, and turn on Allow assignees to view only their data. Then, on the page's Access menu, set internal access to your regional team.

4. Add the leadership pages: Create "All exceptions" as a Kanban board grouped by Escalation status, "Exceptions by location," "Exceptions by region," and "Escalated exceptions" as Table data blocks, and "Risk by location" as a bar Chart averaging risk_score by location. Set each page's Access menu to your corporate leadership team.

5. Add the AI risk briefing: Add a page called "AI risk briefing" and insert an AI Analyze block. This reads across every logged exception, every location and every type, and generates a plain-language report of where risk is concentrating. Set its access to corporate leadership.

6. Add the setup and resources pages: Create "Email templates" and "PDF templates" as reference pages describing each template built in Parts 3 and 5, and a "How to use this template" page linking out to the Help Center articles referenced throughout this guide. Set access to corporate leadership.

What you now have

Every location now has one place to flag an exception, whatever workflow it came from. Each report gets scored on type, severity, and how long it's been going on, and escalates itself automatically once it crosses a threshold, without anyone having to notice manually. Regional leads see only what's assigned to them, and corporate leadership gets a full picture across every location and region, capped by an AI Analyze report that reads the whole dataset and writes out exactly where risk is concentrating. Nobody has to open five different tools to answer "which locations are struggling right now."

Ready-to-use templates

Don't build this from scratch, we've already put it together for you.

  • Employee request workflow — Internal request management for HR and ops teams. The same status, assignee, and routing pattern this dashboard uses to move exceptions through review.

  • AI lead qualification and scoring form — Scores incoming leads with AI and routes hot ones automatically. The same weighted-score-plus-AI-narrative pattern behind this dashboard's risk score and AI risk read.

  • Job applicant tracking workflow — Tracks records across pipeline stages with reviewer assignments. A close match for the Kanban-based "All exceptions" board in Part 6.

Learn more how-tos

Did this answer your question?