What you'll build
A client-facing clinical assessment that clients fill out from their own portal login before a session or check-in. Each item uses a four-point frequency scale, and advanced logic adds up the points behind the scenes into one total score and a severity band the moment the client submits. Your clinical team gets an automatic notification with the score, a generated PDF summary for the client's file, and a portal where each therapist only sees their own assigned clients.
Note: This workflow handles protected health information. Formaloo is HIPAA-ready with a HIPAA BAA available, and supports GDPR compliance alongside role-based access, so you can restrict every page and field in this portal to the right team members.
When to use this
You run a therapy or counseling practice and want a standardized way to score intake or check-in assessments instead of tallying paper scoresheets by hand
You need every clinician on your team to score assessments the same way, with no manual math and no missed items
You want a clinical summary ready for the client's file the moment they submit, without anyone copying numbers into a document
You want each therapist to see only their own caseload, not the whole practice's submissions
You want to flag assessments that come back with an elevated score so they don't sit in a shared inbox unnoticed
Part 1 — Build the client assessment form
Start with the form itself. This is where clients answer a short set of frequency-scale questions about their wellbeing over the past two weeks, plus a few intake details and a consent question. The fastest way to build it is with Magic Create: describe the form in plain text and Formaloo generates the fields for you.
1. Open Magic Create: From your Formaloo homepage, click Magic Create.
2. Describe your form: Paste a prompt describing the intake fields you need: client name, date of birth, email, reason for assessment (dropdown), 8 frequency-scale items (each a single-choice field with the options "Not at all," "Several days," "More than half the days," and "Nearly every day"), a consent yes/no question, and a long text field for additional notes. In the same prompt, describe the admin-only fields: a status dropdown, an assignee field, and an internal notes long text field. Click Create.
3. Verify your fields: Your form should look like the table below. Magic Create will have generated most of it. Verify each field and field ID matches exactly, since logic, emails, and the PDF template all reference these IDs later.
Field | Field ID | Type |
What's the client's full name? | client_name | Short text |
What's the client's date of birth? | client_dob | Date |
What's the client's email address? | client_email | |
What's the reason for today's assessment? | assessment_reason | Dropdown |
In the past two weeks, how would you rate your overall mood? | item_mood | Single-choice |
In the past two weeks, how often have you lost interest in things you'd normally enjoy? | item_interest | Single-choice |
In the past two weeks, how often has your sleep been disrupted? | item_sleep | Single-choice |
In the past two weeks, how often have you felt low on energy or fatigued? | item_energy | Single-choice |
In the past two weeks, how often has your appetite changed noticeably? | item_appetite | Single-choice |
In the past two weeks, how often have you had trouble concentrating? | item_concentration | Single-choice |
In the past two weeks, how often have you felt anxious or on edge? | item_anxiety | Single-choice |
In the past two weeks, how often have you avoided spending time with others? | item_social | Single-choice |
Do you consent to your therapist reviewing these responses to guide your care? | consent | Yes/No |
Is there anything else you'd like your therapist to know before your session? | additional_notes | Long text |
4. Replace the example items with your own instrument: The 8 items above are placeholders. Swap in your practice's own validated assessment questions. Formaloo handles the scoring mechanics; the clinical content is yours to define.
📖 See what are admin-only fields and how they help for how the status, assignee, and internal notes fields stay hidden from clients.
Part 2 — Score responses automatically with logic
This is the part the whole workflow depends on: turning each answer into points and adding them up into a single total, without anyone doing math by hand. Formaloo's advanced logic can do this on any single-choice or dropdown field, which is why this guide uses individual frequency-scale fields instead of one combined matrix field. More on that trade-off after the steps.
1. Add your scoring variables: In the form editor, add an Integer variable field named Total assessment score with the field ID total_score, and set its default value to 0. Add a Text variable field named Score band with the field ID score_band.
2. Open advanced logic: In the form settings panel on the right side of the form editor, click Advanced logic, then open the Logic tab.
3. Generate the scoring rules with Magic Logic: Click Magic Logic in the top right corner. Describe the scoring in plain text: "For each of the 8 assessment items (mood, interest, sleep, energy, appetite, concentration, anxiety, social), if the answer is 'Not at all,' add 0 points to the total_score variable. If 'Several days,' add 1 point. If 'More than half the days,' add 2 points. If 'Nearly every day,' add 3 points." Click Generate rules and review the preview.
4. Add the score band rule: In the same Magic Logic prompt, add: "If total_score is between 0 and 6, set score_band to 'Minimal.' If between 7 and 12, set it to 'Mild.' If between 13 and 18, set it to 'Moderate.' If between 19 and 24, set it to 'Elevated.'" Approve the rules, make any manual adjustments, and click Save.
5. Gate the assessment behind consent: Add one more rule: if the consent question is answered "No," hide all 8 assessment items and show a message asking the client to contact their therapist directly. Assessment items stay required only while consent is "Yes."
Note: Setting the Total assessment score variable's default value to 0 keeps the total accurate even if a client leaves an item unanswered.
Part 3 — Create your email templates
Three emails run this workflow: a confirmation to the client, a notification to the clinical team, and a follow-up once the assessment has been reviewed.
1. Open the email templates panel: Click your profile icon, go to Apps & integrations, then Email templates, and click + Add new template.
2. Build the "Assessment received" template: Name it, then set the subject and body below. This one only confirms receipt, it never mentions scores or results.
Subject: We've received your assessment, @client_name
Body: Hi @client_name,
Thanks for taking a few minutes to complete your assessment. Your therapist will review your responses before your next session.
If anything urgent comes up before then, please reach out to your therapist directly.
Talk soon, [Practice name]
3. Build the "New assessment for review" template: Name it, then set the subject and body below. This one is internal, so it includes the score and band using answer piping.
Subject: New assessment submitted by @client_name
Body: Hi team,
@client_name just submitted a new assessment (reason: @assessment_reason).
Total score: @total_score / 24 Score band: @score_band
Review the full submission and clinical summary PDF in the portal before the client's next session.
4. Build the "Assessment reviewed" template: Name it, then set the subject and body below. Keep it warm and free of any score or clinical detail, since this one goes straight to the client.
Subject: Your therapist has reviewed your assessment
Body: Hi @client_name,
Your therapist has reviewed your recent assessment and looks forward to discussing it with you at your next session.
See you soon, [Practice name]
📖 See how to create and send custom email templates for the full template editor walkthrough, including answer piping with @field_id.
Part 4 — Trigger the emails and generate the PDF
With the templates built, wire them to the right moments in the workflow.
1. Trigger the client confirmation: In advanced logic, open On submit, add a rule, and set it to send the "Assessment received" template to @client_email.
2. Trigger the team notification: Add another On submit rule that sends the "New assessment for review" template to the assigned team member.
3. Trigger the conditional review email: Switch to On update. Add a rule: if Status is changed to "Reviewed" or "Discussed in session," send the "Assessment reviewed" template to @client_email.
4. Generate a PDF on every submission: Still in On submit, add a Generate PDF rule using the clinical summary PDF template from Part 5 so a document lands on every submission automatically.
Part 5 — Build the clinical summary PDF template
Every submission generates a clean, print-ready summary for the client's file: intake details, each item's response, the total score, score band, risk flag, and a sign-off line for the reviewing therapist.
1. Open the PDF template panel: Click your profile icon, go to Apps & integrations, then PDF templates, and click + Add new template.
2. Switch to HTML view: Toggle the editor to the HTML view so you can paste custom code directly.
3. Paste the template code: Use the HTML below. It already references the field IDs from Part 1, so it works as soon as you paste it in.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Clinical Assessment Summary</title> <style> @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=EB+Garamond:ital@1&display=swap'); * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; background: #ffffff; color: #2a2a2a; -webkit-font-smoothing: antialiased; } .page { max-width: 760px; margin: 0 auto; padding: 60px 72px; } .header { display: flex; justify-content: space-between; align-items: flex-start; padding-bottom: 28px; border-bottom: 1px solid #ececec; margin-bottom: 36px; } .header h1 { font-size: 22px; font-weight: 600; letter-spacing: -0.01em; color: #1a1a1a; } .header .subtitle { font-size: 13px; color: #999; margin-top: 4px; } .header .meta { text-align: right; font-size: 12px; color: #999; line-height: 1.6; } .header .meta strong { color: #555; font-weight: 500; } .section { margin-bottom: 32px; } .section-title { font-size: 10px; text-transform: uppercase; letter-spacing: 0.12em; color: #aaa; font-weight: 600; margin-bottom: 14px; } .field-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 24px; } .field { padding: 10px 0; 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; } .item-row { display: flex; justify-content: space-between; align-items: baseline; padding: 12px 0; border-bottom: 1px solid #f0f0f0; } .item-row:last-child { border-bottom: none; } .item-label { font-size: 13px; color: #444; max-width: 70%; line-height: 1.5; } .item-response { font-size: 13px; color: #1a1a1a; font-weight: 600; text-align: right; white-space: nowrap; } .score-summary { display: flex; gap: 20px; } .score-card { flex: 1; background: #f9f9f9; border-radius: 10px; padding: 20px 22px; } .score-card .score-label { font-size: 10px; text-transform: uppercase; letter-spacing: 0.1em; color: #aaa; margin-bottom: 8px; } .score-card .score-value { font-size: 28px; font-weight: 700; color: #1a1a1a; } .score-card .score-value span { font-size: 14px; font-weight: 500; color: #999; } .inset { background: #f9f9f9; border-left: 3px solid #d8d8d8; padding: 16px 20px; border-radius: 0 6px 6px 0; font-size: 12px; color: #777; line-height: 1.6; } .signature-block { display: flex; justify-content: space-between; align-items: flex-end; margin-top: 8px; } .signature-name { font-family: 'EB Garamond', Georgia, serif; font-style: italic; font-size: 22px; color: #333; border-bottom: 1px solid #ddd; padding-bottom: 6px; min-width: 260px; } .signature-date { font-size: 12px; color: #999; } .footer { display: flex; justify-content: space-between; align-items: center; margin-top: 48px; padding-top: 20px; border-top: 1px solid #ececec; font-size: 11px; color: #b3b3b3; } </style> </head> <body> <div class="page"> <div class="header"> <div> <h1>Clinical assessment summary</h1> <div class="subtitle">Confidential clinical document</div> </div> <div class="meta"> <div><strong>Reference:</strong> @submission_id</div> <div><strong>Submitted:</strong> @submission_date</div> </div> </div> <div class="section"> <div class="section-title">Client information</div> <div class="field-grid"> <div class="field"><div class="field-label">Client name</div><div class="field-value">@client_name</div></div> <div class="field"><div class="field-label">Date of birth</div><div class="field-value">@client_dob</div></div> <div class="field"><div class="field-label">Email</div><div class="field-value">@client_email</div></div> <div class="field"><div class="field-label">Reason for assessment</div><div class="field-value">@assessment_reason</div></div> </div> </div> <div class="section"> <div class="section-title">Assessment responses — past two weeks</div> <div class="item-row"><div class="item-label">Overall mood</div><div class="item-response">@item_mood</div></div> <div class="item-row"><div class="item-label">Interest or pleasure in usual activities</div><div class="item-response">@item_interest</div></div> <div class="item-row"><div class="item-label">Sleep disruption</div><div class="item-response">@item_sleep</div></div> <div class="item-row"><div class="item-label">Energy level / fatigue</div><div class="item-response">@item_energy</div></div> <div class="item-row"><div class="item-label">Appetite change</div><div class="item-response">@item_appetite</div></div> <div class="item-row"><div class="item-label">Concentration</div><div class="item-response">@item_concentration</div></div> <div class="item-row"><div class="item-label">Anxiety / feeling on edge</div><div class="item-response">@item_anxiety</div></div> <div class="item-row"><div class="item-label">Social withdrawal</div><div class="item-response">@item_social</div></div> </div> <div class="section"> <div class="section-title">Score summary</div> <div class="score-summary"> <div class="score-card"><div class="score-label">Total score</div><div class="score-value">@total_score <span>/ 24</span></div></div> <div class="score-card"><div class="score-label">Score band</div><div class="score-value">@score_band</div></div> <div class="score-card"><div class="score-label">Clinical risk flag</div><div class="score-value">@risk_flag</div></div> </div> </div> <div class="section"> <div class="section-title">Additional notes from client</div> <div class="field full" style="padding-top:0;"><div class="field-value" style="font-weight:400; line-height:1.6;">@additional_notes</div></div> </div> <div class="section"> <div class="section-title">Client consent</div> <div class="inset">Client consented to this assessment being reviewed by their assigned therapist to guide care: <strong>@consent</strong>. This document contains protected health information and should be stored and shared in accordance with your practice's confidentiality and record-keeping policies.</div> </div> <div class="section"> <div class="section-title">Reviewed by</div> <div class="signature-block"> <div class="signature-name">@assignee</div> <div class="signature-date">Reviewed on @submission_date</div> </div> </div> <div class="footer"> <div>Confidential — for clinical use only. Not to be shared outside the care team.</div> <div>[Practice name]</div> </div> </div> </body> </html>4. Name and save: Name the template "Clinical assessment summary" and click Save.
📖 See how to create PDF templates to turn responses into documents and how to dynamically pull form data into custom emails, PDFs, and AI prompts for the full variables reference.
Part 6 — Set up the client and clinical team portal
The last piece is a portal: one place where clients submit assessments and track their own history, and where your clinical team reviews submissions without digging through a shared inbox.
1. Activate the portal: Open your project, click the gear icon in the top-right corner, and select Activate client portal.
2. Set up the user directory: Click Manage users, then Setup wizard, and create a new user directory for clients. Configure login options and add your practice's branding.
3. Restrict clients to their own history: On the "My assessments" page, restrict data by the client_email profile field so each client only ever sees their own past submissions, never anyone else's.
4. Restrict therapists to their own caseload: On the "My assigned clients" and similar pages, restrict data by the Assignee field so each therapist only sees the clients assigned to them.
5. Set up roles: In the user directory, add Client and Therapist/admin roles so each group lands on the right set of pages after logging in.
📖 See how to create and assign user roles in your portal for the full walkthrough.
What you now have
A client-facing clinical assessment that scores itself the moment someone submits it. No paper scoresheets, no manual tallying, and no two clinicians scoring the same instrument differently. Every submission produces a total score, a severity band, and a print-ready clinical summary PDF, automatically. Your clinical team gets notified immediately and only sees the clients assigned to them, and clients can track their own assessment history from a portal that carries your practice's branding.
What's next
Route submissions to the right therapist automatically As your caseload grows, you'll want new assessments assigned without anyone picking them manually. → How to automatically assign submissions to the right team member or team
Track score trends over time Once you have a few months of submissions, a chart of average scores or score-band distribution helps you spot caseload trends at a glance. → How to sort and filter your submissions data
Go deeper on answer piping This guide uses @field_id variables throughout the emails and PDF. The full variable reference covers everything you can pipe into a template. → How to dynamically pull form data into custom emails, PDFs, and AI prompts
Ready-to-use templates
Don't build this from scratch — we've already put it together for you.
Patient intake & consent workflow for healthcare — A two-page intake and consent form with conditional insurance logic and an admin Kanban pipeline. Reuse its consent-gating logic and PDF consent document as a starting point for your own assessment's consent flow.
Scholarship & grant application with scoring and approval — A multi-reviewer scoring workflow that auto-calculates scores and sends approval or rejection emails. Its variable-based scoring setup mirrors the point-scoring logic in Part 2.
AI lead qualification & scoring form — Scores incoming submissions and routes them with conditional emails. Useful as a reference for the score-band and notification pattern this guide builds for clinical use instead of sales.
Learn more how-tos
See a similar scoring pattern in a different context If you want to see this same point-and-band scoring mechanic applied to a non-clinical use case, this is a close cousin. → How to build a score-based learning style quiz with personalized results
Compare against another healthcare intake workflow This guide covers a similar consent-gated, healthcare-specific setup with conditional insurance logic. → How to build a patient intake and consent workflow for healthcare clinics
See variable-based scoring in an approval context Combines calculated scores with a multi-stage approval workflow, useful if your practice adds a supervisor sign-off step. → Scholarship & grant application with scoring and approval workflow
