Skip to main content

How to build a matrix-scored clinical assessment tool for therapists in Formaloo

Learn how to build a scored clinical intake assessment in Formaloo, with Likert-style items, automatic logic-based point scoring, and a clinical summary PDF for therapists.

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

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.


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


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

Did this answer your question?