I actually think this topic can become **far more impressive than Play** if you structure it as a **clinical reasoning seminar** instead of just teaching behaviour theory. Since you're presenting to an **interdisciplinary pediatric team**, the audience will appreciate content they can immediately apply in the clinic. I'd title it: > **"Understanding and Managing Challenging Behaviours in Children with Special Needs: A Functional and Multidisciplinary Approach"** --- # Suggested Seminar Flow (15–20 min) ## 1. Introduction * Opening case scenario * "Behaviour is communication" * Why understanding behaviour matters --- ## 2. What is Behaviour? * Definition * Appropriate vs Challenging behaviour * Observable vs Hidden behaviour --- ## 3. Why Does Behaviour Occur? * Child development * Communication deficits * Sensory processing * Emotional regulation * Executive functioning * Medical/environmental factors Introduce the **Behaviour Iceberg** here. --- ## 4. Behaviour is Communication Explain that behaviour always serves a purpose. Examples: * Crying * Hitting * Throwing * Running away * Self-injury Ask: > "What is the child trying to communicate?" --- ## 5. Functions of Behaviour (Core Topic) The four functions: * **Attention** * **Escape/Avoidance** * **Access to Tangibles** * **Sensory/Automatic Reinforcement** Include one clinical example for each. --- ## 6. Behaviour Assessment Introduce: * ABC Analysis * Functional Behaviour Assessment (FBA) * Frequency * Duration * Intensity * Antecedent analysis * Consequence analysis --- # 7. Behaviour Therapy Approaches This is where you discuss different approaches instead of focusing on only ABA. ### A. Applied Behaviour Analysis (ABA) Techniques: * Reinforcement * Prompting * Chaining * Shaping * Extinction * Token Economy * Differential Reinforcement --- ### B. Cognitive Behaviour Therapy (CBT) Useful for: * ADHD * Anxiety * Older children Techniques: * Self-talk * Cognitive restructuring * Problem-solving * Relaxation --- ### C. Positive Behaviour Support (PBS) Focus: * Modify environment * Teach replacement skills * Improve quality of life --- ### D. Functional Communication Training (FCT) Instead of reducing behaviour, Teach communication. Example Instead of hitting ↓ Teach "Break please." --- ### E. Parent-Mediated Behaviour Therapy * Consistency * Home routines * Positive reinforcement * Behaviour contracts --- ### F. Sensory-Based Behaviour Management (OT) When behaviour is sensory-driven Use * Sensory diet * Heavy work * Deep pressure * Vestibular input * Environmental modification --- # 8. Behaviour Management Techniques Instead of listing them, group them. ### Reinforcement Techniques Positive reinforcement Negative reinforcement Token economy Premack Principle Praise --- ### Teaching Techniques Prompting Prompt fading Shaping Chaining Modelling Backward chaining Forward chaining Errorless learning --- ### Behaviour Reduction Extinction Response interruption Differential reinforcement Planned ignoring Redirection Choice making Visual schedules First-Then boards --- # 9. Activity Prescription (This will make your seminar unique ⭐⭐⭐⭐⭐) This is something many presentations don't include. | Behaviour | Possible Function | OT Activity Prescription | | -------------------------------- | -------------------------- | ---------------------------------------------------------------------------------- | | Running | Vestibular seeking | Obstacle course, scooter board, trampoline, animal walks | | Spinning | Vestibular input | Spinning chair (graded), platform swing, rotational games with regulation | | Jumping | Proprioceptive seeking | Trampoline, crash mat, jumping games | | Throwing objects | Heavy work/attention | Ball throwing target games, bean bag toss, wall push-ups | | Hitting | Communication/anger | Punching pillow, therapy putty, resistance bands, emotional regulation games | | Biting | Oral sensory seeking | Chewy tubes, crunchy foods, blowing whistles | | Mouthing objects | Oral seeking | Oral motor activities, textured chew tools | | Hand flapping | Excitement/self-regulation | Don't always stop; redirect only if it interferes with participation | | Toe walking | Sensory/postural | Heel walking games, balance beam, weighted cart pushing | | Rocking | Vestibular regulation | Therapy ball, rocking chair, rhythmic movement | | Head banging | Sensory/pain/frustration | Deep pressure, communication alternatives, medical evaluation if needed | | Lining up toys | Need for predictability | Gradually introduce flexible play, turn-taking games | | Repetitive opening/closing doors | Cause-effect interest | Busy boards, locks and latches activities | | Screaming | Attention/escape | Teach functional communication, visual supports, calm corner | | Eloping (running away) | Escape/sensory | Obstacle course before tasks, visual boundaries, movement breaks | | Refusing table work | Escape | First-Then board, task breakdown, movement breaks, choices | | Tantrums | Multiple functions | Identify trigger, co-regulation, teach replacement skills, don't reinforce tantrum | | Poor eye contact | Social communication | Bubble play, peek-a-boo, highly motivating face-to-face games | | Difficulty waiting | Impulse control | Turn-taking board games, timer activities, waiting games | | Difficulty transitioning | Predictability | Visual schedule, countdown timer, transition songs | --- # 10. Clinical Cases Include 2–3 quick cases. ### Case 1 Behaviour Throwing toys ↓ ABC ↓ Function ↓ Intervention --- ### Case 2 Spinning ↓ Sensory assessment ↓ Heavy work ↓ Replacement activities --- ### Case 3 Biting ↓ Communication assessment ↓ Teach requesting ↓ Positive reinforcement --- # 11. Multidisciplinary Roles | Discipline | Contribution | | ---------------- | ---------------------------------------------------------------------------- | | OT | Sensory regulation, environmental adaptation, self-regulation, participation | | PT | Gross motor regulation, movement opportunities, posture | | SLP | Functional communication, AAC, PECS, requesting | | Psychologist | Behaviour plans, CBT, parent counselling | | Special Educator | Classroom behaviour management, structured learning | | Parents | Consistency, reinforcement, home carryover | --- # 12. Clinical Pearls * Every behaviour has a function. * Don't ask, "How do I stop it?" * Ask, "Why is it happening?" * Replace behaviour—don't simply suppress it. * Reinforce the behaviour you want to see. * Behaviour management should be individualized and based on assessment, not assumptions. --- ## This is the seminar I would give. It combines: * **Behaviour science** (ABA, PBS, CBT, FCT) * **Occupational therapy** (sensory integration, environmental adaptation) * **Clinical reasoning** (ABC, FBA) * **Practical intervention** (activity prescriptions) * **Interdisciplinary collaboration** (roles of OT, PT, SLP, psychology, special education) It moves beyond theory and answers the questions clinicians ask every day: **"Why is this child behaving this way, and what can we do about it?"** That practical focus is what will make your presentation memorable. make this topic details with answers into a hand written notes

Reading File
Running Command

mkdir -p /tmp/workspace/behaviour-seminar && ls /tmp/workspace/behaviour-seminar/

Writing File

~/behaviour-seminar/generate_notes.py

"""
Handwritten-style clinical seminar notes using ReportLab.
Topic: Understanding and Managing Challenging Behaviours in Children with Special Needs
"""

from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm, cm
from reportlab.lib.colors import (
    HexColor, white, black
)
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.enums import TA_LEFT, TA_CENTER
import math, os

# ── Colour palette (warm notebook feel) ──────────────────────────────────────
BG          = HexColor("#FFFDF4")   # cream page
LINE_COL    = HexColor("#C8D8E8")   # soft blue ruled lines
MARGIN_LINE = HexColor("#F2A0A0")   # red margin line
INK         = HexColor("#1A1A2E")   # near-black ink
HEADING_INK = HexColor("#1B3A6B")   # navy for section headings
ACCENT1     = HexColor("#E63946")   # red accent (stars, bullets)
ACCENT2     = HexColor("#2A9D8F")   # teal accent
ACCENT3     = HexColor("#F4A261")   # orange accent
HIGHLIGHT   = HexColor("#FFF176")   # yellow highlight box
BOX_BG      = HexColor("#EAF4FB")   # light blue box
BOX_BG2     = HexColor("#FFF0E0")   # peach box
BOX_BG3     = HexColor("#E8F5E9")   # mint box
RULE_COLOUR = HexColor("#90CAF9")   # table rule

W, H = A4  # 595 x 842 pt

# ── Fonts ─────────────────────────────────────────────────────────────────────
# Use built-in Helvetica family (universally available).  We simulate the
# "handwritten" look through colour, ruled lines, margin rule and styling.
FONT_BODY   = "Helvetica"
FONT_BOLD   = "Helvetica-Bold"
FONT_ITALIC = "Helvetica-Oblique"
FONT_BI     = "Helvetica-BoldOblique"

# ── Layout constants ──────────────────────────────────────────────────────────
LEFT_MARGIN   = 22 * mm
RIGHT_MARGIN  = 15 * mm
TOP_MARGIN    = 20 * mm
BOTTOM_MARGIN = 18 * mm
LINE_SPACE    = 7.5 * mm   # ruled-line spacing
MARGIN_X      = 18 * mm    # red margin rule x-position
CONTENT_LEFT  = LEFT_MARGIN + 3 * mm
CONTENT_RIGHT = W - RIGHT_MARGIN

# ─────────────────────────────────────────────────────────────────────────────
class NotesDoc:
    def __init__(self, filename):
        self.c = canvas.Canvas(filename, pagesize=A4)
        self.c.setTitle("Challenging Behaviours in Children – Seminar Notes")
        self.c.setAuthor("Interdisciplinary Paediatric Team")
        self.filename = filename
        self.page_num = 0
        self._new_page()

    # ── Page infrastructure ───────────────────────────────────────────────────
    def _draw_ruled_background(self):
        c = self.c
        c.setFillColor(BG)
        c.rect(0, 0, W, H, fill=1, stroke=0)
        # Horizontal ruled lines
        c.setStrokeColor(LINE_COL)
        c.setLineWidth(0.4)
        y = H - TOP_MARGIN
        while y > BOTTOM_MARGIN:
            c.line(0, y, W, y)
            y -= LINE_SPACE
        # Red margin line
        c.setStrokeColor(MARGIN_LINE)
        c.setLineWidth(0.9)
        c.line(MARGIN_X, 0, MARGIN_X, H)
        # Binding holes (decorative)
        for yh in [H * 0.25, H * 0.5, H * 0.75]:
            c.setFillColor(HexColor("#D0D0D0"))
            c.circle(8 * mm, yh, 3.5 * mm, fill=1, stroke=0)

    def _draw_page_footer(self):
        c = self.c
        c.setFont(FONT_ITALIC, 7)
        c.setFillColor(HexColor("#999999"))
        c.drawCentredString(W / 2, 10 * mm,
            f"Challenging Behaviours in Children with Special Needs  ·  Page {self.page_num}")
        # top corner tab
        c.setFillColor(HEADING_INK)
        c.rect(W - 22*mm, H - 10*mm, 22*mm, 10*mm, fill=1, stroke=0)
        c.setFillColor(white)
        c.setFont(FONT_BOLD, 7)
        c.drawCentredString(W - 11*mm, H - 6.5*mm, f"p.{self.page_num}")

    def _new_page(self):
        if self.page_num > 0:
            self._draw_page_footer()
            self.c.showPage()
        self.page_num += 1
        self._draw_ruled_background()
        self.y = H - TOP_MARGIN - 4 * mm   # current write head

    def _check_space(self, needed=10*mm):
        if self.y < BOTTOM_MARGIN + needed:
            self._new_page()

    # ── Drawing primitives ────────────────────────────────────────────────────
    def _snap(self, y):
        """Snap y down to nearest ruled line."""
        steps = (H - TOP_MARGIN - y) / LINE_SPACE
        return H - TOP_MARGIN - math.ceil(steps) * LINE_SPACE

    def move_down(self, amount=LINE_SPACE):
        self.y -= amount
        self._check_space()

    def write_line(self, text, font=FONT_BODY, size=9.5, color=INK,
                   x=None, center=False, indent=0):
        if x is None:
            x = CONTENT_LEFT + indent
        self.c.setFont(font, size)
        self.c.setFillColor(color)
        if center:
            self.c.drawCentredString(W / 2, self.y, text)
        else:
            self.c.drawString(x, self.y, text)
        self.move_down(LINE_SPACE)

    def write_wrapped(self, text, font=FONT_BODY, size=9.5, color=INK,
                      indent=0, leading=LINE_SPACE, max_width=None):
        """Simple word-wrap writer."""
        if max_width is None:
            max_width = CONTENT_RIGHT - CONTENT_LEFT - indent
        x = CONTENT_LEFT + indent
        self.c.setFont(font, size)
        self.c.setFillColor(color)
        words = text.split()
        line = ""
        for word in words:
            test = (line + " " + word).strip()
            if self.c.stringWidth(test, font, size) <= max_width:
                line = test
            else:
                self.c.drawString(x, self.y, line)
                self.y -= leading
                self._check_space()
                line = word
        if line:
            self.c.drawString(x, self.y, line)
            self.y -= leading
            self._check_space()

    def bullet(self, text, symbol="•", color=ACCENT2, font=FONT_BODY,
               size=9.5, indent=5*mm, text_indent=12*mm):
        self.c.setFont(FONT_BOLD, size)
        self.c.setFillColor(color)
        self.c.drawString(CONTENT_LEFT + indent, self.y, symbol)
        self.c.setFont(font, size)
        self.c.setFillColor(INK)
        max_w = CONTENT_RIGHT - CONTENT_LEFT - text_indent
        words = text.split()
        line = ""
        first = True
        for word in words:
            test = (line + " " + word).strip()
            if self.c.stringWidth(test, font, size) <= max_w:
                line = test
            else:
                xpos = CONTENT_LEFT + (text_indent if first else text_indent)
                self.c.drawString(xpos, self.y, line)
                self.y -= LINE_SPACE
                self._check_space()
                first = False
                line = word
        if line:
            self.c.drawString(CONTENT_LEFT + text_indent, self.y, line)
            self.y -= LINE_SPACE
            self._check_space()

    def sub_bullet(self, text, symbol="–", indent=10*mm, text_indent=17*mm):
        self.c.setFont(FONT_BODY, 9)
        self.c.setFillColor(ACCENT3)
        self.c.drawString(CONTENT_LEFT + indent, self.y, symbol)
        self.c.setFillColor(INK)
        max_w = CONTENT_RIGHT - CONTENT_LEFT - text_indent
        words = text.split()
        line = ""
        for word in words:
            test = (line + " " + word).strip()
            if self.c.stringWidth(test, FONT_BODY, 9) <= max_w:
                line = test
            else:
                self.c.drawString(CONTENT_LEFT + text_indent, self.y, line)
                self.y -= LINE_SPACE
                self._check_space()
                line = word
        if line:
            self.c.drawString(CONTENT_LEFT + text_indent, self.y, line)
            self.y -= LINE_SPACE
            self._check_space()

    def section_heading(self, number, title, color=HEADING_INK):
        self._check_space(20 * mm)
        self.move_down(3 * mm)
        c = self.c
        # Coloured tab behind number
        tab_w = 28 * mm
        c.setFillColor(HEADING_INK)
        c.roundRect(CONTENT_LEFT - 2*mm, self.y - 2*mm,
                    tab_w, LINE_SPACE + 2*mm, 2*mm, fill=1, stroke=0)
        c.setFillColor(white)
        c.setFont(FONT_BOLD, 10.5)
        c.drawString(CONTENT_LEFT + 1*mm, self.y + 1*mm, number)
        # Title text
        c.setFillColor(color)
        c.setFont(FONT_BI, 11)
        c.drawString(CONTENT_LEFT + tab_w + 2*mm, self.y + 1*mm, title)
        # Underline
        c.setStrokeColor(ACCENT2)
        c.setLineWidth(1.2)
        c.line(CONTENT_LEFT, self.y - 2*mm, CONTENT_RIGHT, self.y - 2*mm)
        self.y -= LINE_SPACE + 4 * mm
        self._check_space()

    def sub_heading(self, text, color=ACCENT2):
        self._check_space(14 * mm)
        self.move_down(1.5 * mm)
        self.c.setFont(FONT_BOLD, 10)
        self.c.setFillColor(color)
        self.c.drawString(CONTENT_LEFT + 3*mm, self.y, text)
        self.c.setStrokeColor(color)
        self.c.setLineWidth(0.6)
        self.c.line(CONTENT_LEFT + 3*mm, self.y - 1.5*mm,
                    CONTENT_LEFT + 3*mm + self.c.stringWidth(text, FONT_BOLD, 10) + 2*mm,
                    self.y - 1.5*mm)
        self.y -= LINE_SPACE + 1 * mm
        self._check_space()

    def highlight_box(self, lines, bg=HIGHLIGHT, border=ACCENT1, indent=3*mm):
        self._check_space((len(lines) + 2) * LINE_SPACE + 4*mm)
        pad = 3 * mm
        box_h = len(lines) * LINE_SPACE + 2 * pad
        bx = CONTENT_LEFT + indent
        self.c.setFillColor(bg)
        self.c.setStrokeColor(border)
        self.c.setLineWidth(1.2)
        self.c.roundRect(bx, self.y - box_h + LINE_SPACE, CONTENT_RIGHT - bx, box_h,
                         3*mm, fill=1, stroke=1)
        self.y -= pad
        for line in lines:
            font = FONT_BOLD if line.startswith("★") or line.startswith("!") else FONT_ITALIC
            self.c.setFont(font, 9.5)
            self.c.setFillColor(INK)
            self.c.drawString(bx + pad, self.y, line)
            self.y -= LINE_SPACE
        self.y -= pad
        self._check_space()

    def info_box(self, title, lines, bg=BOX_BG, title_color=HEADING_INK):
        self._check_space((len(lines) + 3) * LINE_SPACE + 6*mm)
        pad = 3.5 * mm
        box_h = (len(lines) + 1.5) * LINE_SPACE + 2 * pad
        bx = CONTENT_LEFT + 2*mm
        by = self.y - box_h + LINE_SPACE
        self.c.setFillColor(bg)
        self.c.setStrokeColor(ACCENT2)
        self.c.setLineWidth(1)
        self.c.roundRect(bx, by, CONTENT_RIGHT - bx - 2*mm, box_h, 3*mm, fill=1, stroke=1)
        self.c.setFont(FONT_BOLD, 9.5)
        self.c.setFillColor(title_color)
        self.c.drawString(bx + pad, self.y - 1*mm, title)
        self.c.setStrokeColor(title_color)
        self.c.setLineWidth(0.5)
        self.c.line(bx + pad, self.y - 3*mm, bx + pad + self.c.stringWidth(title, FONT_BOLD, 9.5), self.y - 3*mm)
        self.y -= LINE_SPACE + 1*mm
        for line in lines:
            self.c.setFont(FONT_BODY, 9)
            self.c.setFillColor(INK)
            self.c.drawString(bx + pad + 2*mm, self.y, line)
            self.y -= LINE_SPACE
        self.y -= pad
        self._check_space()

    def flow_arrow(self, items, color=ACCENT2):
        """Draw a horizontal flow: item → item → item"""
        self._check_space(16 * mm)
        total = len(items)
        box_w = (CONTENT_RIGHT - CONTENT_LEFT - 2*mm) / total - 3*mm
        x = CONTENT_LEFT + 2*mm
        y_box = self.y - 8*mm
        for i, item in enumerate(items):
            bx = x + i * (box_w + 6*mm)
            self.c.setFillColor(BOX_BG)
            self.c.setStrokeColor(color)
            self.c.setLineWidth(0.8)
            self.c.roundRect(bx, y_box, box_w, 8*mm, 2*mm, fill=1, stroke=1)
            self.c.setFont(FONT_BOLD, 8)
            self.c.setFillColor(HEADING_INK)
            tw = self.c.stringWidth(item, FONT_BOLD, 8)
            self.c.drawString(bx + (box_w - tw) / 2, y_box + 2.5*mm, item)
            if i < total - 1:
                ax = bx + box_w + 1*mm
                ay = y_box + 4*mm
                self.c.setStrokeColor(ACCENT1)
                self.c.setLineWidth(1.2)
                self.c.line(ax, ay, ax + 4*mm, ay)
                # arrowhead
                self.c.setFillColor(ACCENT1)
                self.c.polygon([ax + 4*mm, ay + 1.5*mm,
                                 ax + 4*mm, ay - 1.5*mm,
                                 ax + 6*mm, ay], fill=1, stroke=0)
        self.y = y_box - 3*mm
        self._check_space()

    def two_col_list(self, col1_items, col2_items, header1="", header2="", bg=BOX_BG):
        mid = CONTENT_LEFT + (CONTENT_RIGHT - CONTENT_LEFT) / 2
        rows = max(len(col1_items), len(col2_items))
        box_h = (rows + (1.5 if header1 else 0)) * LINE_SPACE + 6*mm
        self._check_space(box_h + 4*mm)
        bx = CONTENT_LEFT + 1*mm
        by = self.y - box_h + LINE_SPACE
        self.c.setFillColor(bg)
        self.c.setStrokeColor(ACCENT2)
        self.c.setLineWidth(0.8)
        self.c.roundRect(bx, by, CONTENT_RIGHT - bx - 1*mm, box_h, 3*mm, fill=1, stroke=1)
        # divider
        self.c.setStrokeColor(ACCENT2)
        self.c.line(mid, by, mid, by + box_h)
        pad = 4*mm
        cy = self.y - 2*mm
        if header1:
            self.c.setFont(FONT_BOLD, 9)
            self.c.setFillColor(HEADING_INK)
            self.c.drawString(bx + pad, cy, header1)
            self.c.drawString(mid + pad, cy, header2)
            cy -= LINE_SPACE
        self.c.setFont(FONT_BODY, 8.5)
        self.c.setFillColor(INK)
        for i in range(rows):
            if i < len(col1_items):
                self.c.drawString(bx + pad, cy, "• " + col1_items[i])
            if i < len(col2_items):
                self.c.drawString(mid + pad, cy, "• " + col2_items[i])
            cy -= LINE_SPACE
        self.y = cy - 3*mm
        self._check_space()

    def big_table(self, headers, rows, col_widths=None):
        """Draw a table with given headers and rows."""
        n_cols = len(headers)
        if col_widths is None:
            avail = CONTENT_RIGHT - CONTENT_LEFT - 2*mm
            col_widths = [avail / n_cols] * n_cols
        row_h = LINE_SPACE + 2*mm
        total_rows = len(rows) + 1
        needed = total_rows * row_h + 4*mm
        self._check_space(needed + 4*mm)

        bx = CONTENT_LEFT + 1*mm
        ty = self.y

        # Header row
        self.c.setFillColor(HEADING_INK)
        self.c.rect(bx, ty - row_h, sum(col_widths), row_h, fill=1, stroke=0)
        cx = bx + 2*mm
        self.c.setFont(FONT_BOLD, 8)
        self.c.setFillColor(white)
        for i, h in enumerate(headers):
            self.c.drawString(cx, ty - row_h + 3*mm, h)
            cx += col_widths[i]
        ty -= row_h

        alt = False
        for row in rows:
            # check if this row needs a new page
            if ty - row_h < BOTTOM_MARGIN + 5*mm:
                self._draw_page_footer()
                self.c.showPage()
                self.page_num += 1
                self._draw_ruled_background()
                ty = H - TOP_MARGIN - 4*mm
                # re-draw header
                self.c.setFillColor(HEADING_INK)
                self.c.rect(bx, ty - row_h, sum(col_widths), row_h, fill=1, stroke=0)
                cx = bx + 2*mm
                self.c.setFont(FONT_BOLD, 8)
                self.c.setFillColor(white)
                for i, h in enumerate(headers):
                    self.c.drawString(cx, ty - row_h + 3*mm, h)
                    cx += col_widths[i]
                ty -= row_h

            bg_row = HexColor("#F0F8FF") if alt else white
            self.c.setFillColor(bg_row)
            self.c.rect(bx, ty - row_h, sum(col_widths), row_h, fill=1, stroke=0)
            cx = bx + 2*mm
            self.c.setFont(FONT_BODY, 7.5)
            self.c.setFillColor(INK)
            for i, cell in enumerate(row):
                max_cw = col_widths[i] - 4*mm
                # truncate if too wide
                txt = str(cell)
                while self.c.stringWidth(txt, FONT_BODY, 7.5) > max_cw and len(txt) > 3:
                    txt = txt[:-2] + "…"
                self.c.drawString(cx, ty - row_h + 3*mm, txt)
                cx += col_widths[i]
            # grid lines
            self.c.setStrokeColor(RULE_COLOUR)
            self.c.setLineWidth(0.3)
            self.c.rect(bx, ty - row_h, sum(col_widths), row_h, fill=0, stroke=1)
            ty -= row_h
            alt = not alt

        self.y = ty - 3*mm
        self._check_space()

    def save(self):
        self._draw_page_footer()
        self.c.save()
        print(f"Saved: {self.filename}")


# ═══════════════════════════════════════════════════════════════════════════════
#  CONTENT
# ═══════════════════════════════════════════════════════════════════════════════
def build_notes():
    out = "/tmp/workspace/behaviour-seminar/Challenging_Behaviours_Seminar_Notes.pdf"
    doc = NotesDoc(out)
    c = doc.c

    # ── COVER PAGE ─────────────────────────────────────────────────────────────
    # Large title banner
    c.setFillColor(HEADING_INK)
    c.roundRect(CONTENT_LEFT - 2*mm, H - 80*mm, CONTENT_RIGHT - CONTENT_LEFT + 4*mm, 55*mm,
                4*mm, fill=1, stroke=0)
    c.setFillColor(white)
    c.setFont(FONT_BOLD, 14)
    c.drawCentredString(W/2, H - 38*mm, "Understanding & Managing")
    c.setFont(FONT_BOLD, 13)
    c.drawCentredString(W/2, H - 50*mm, "Challenging Behaviours in Children")
    c.setFont(FONT_BOLD, 11)
    c.drawCentredString(W/2, H - 62*mm, "with Special Needs")
    c.setFillColor(ACCENT3)
    c.setFont(FONT_ITALIC, 9.5)
    c.drawCentredString(W/2, H - 72*mm, "A Functional & Multidisciplinary Approach")

    # Subtitle band
    c.setFillColor(ACCENT2)
    c.roundRect(CONTENT_LEFT + 10*mm, H - 92*mm,
                CONTENT_RIGHT - CONTENT_LEFT - 20*mm, 8*mm, 2*mm, fill=1, stroke=0)
    c.setFillColor(white)
    c.setFont(FONT_BOLD, 9)
    c.drawCentredString(W/2, H - 87.5*mm, "Clinical Reasoning Seminar  ·  Interdisciplinary Paediatric Team")

    # Decorative divider
    c.setStrokeColor(ACCENT1)
    c.setLineWidth(2)
    c.line(CONTENT_LEFT + 20*mm, H - 97*mm, CONTENT_RIGHT - 20*mm, H - 97*mm)

    # Key icons / legend row
    doc.y = H - 105*mm
    legend = [
        ("★", ACCENT1, "Key Pearl"),
        ("◆", ACCENT2, "Core Concept"),
        ("●", ACCENT3, "Technique"),
        ("→", HEADING_INK, "Flow / Example"),
    ]
    lx = CONTENT_LEFT + 4*mm
    for sym, col, label in legend:
        c.setFillColor(col)
        c.setFont(FONT_BOLD, 11)
        c.drawString(lx, doc.y, sym)
        c.setFillColor(INK)
        c.setFont(FONT_ITALIC, 9)
        c.drawString(lx + 7*mm, doc.y, label)
        lx += 36*mm

    doc.y -= LINE_SPACE * 2

    # Seminar overview box
    doc.info_box("Seminar at a Glance", [
        "Duration : 15 – 20 minutes",
        "Audience : OT · PT · SLP · Psychology · Special Education · Paediatricians",
        "Sections : 12   (Introduction → Clinical Pearls)",
        "Approach : Behaviour Science + Sensory Integration + Clinical Reasoning",
    ], bg=BOX_BG2)

    doc.y -= LINE_SPACE

    # Behaviour = Communication call-out
    doc.highlight_box([
        '★  "Behaviour is Communication."',
        "   Every behaviour serves a function.",
        "   Don't ask  'How do I stop it?'",
        "   Ask  'Why is this happening?'",
    ], bg=HIGHLIGHT, border=ACCENT1)

    doc.y -= LINE_SPACE
    c.setFont(FONT_ITALIC, 8)
    c.setFillColor(HexColor("#888888"))
    c.drawCentredString(W/2, doc.y,
        "Handwritten-style seminar notes  ·  All content evidence-based  ·  For educational use")

    # ── PAGE 2 : SECTION 1 & 2 ─────────────────────────────────────────────────
    doc._new_page()

    doc.section_heading("1", "Introduction")
    doc.sub_heading("Opening Case Scenario", ACCENT1)
    doc.write_wrapped(
        "A 5-year-old boy with ASD is brought to the paediatric OPD. "
        "He suddenly starts hitting his head against the wall during "
        "a waiting-room assessment. The mother says: 'He always does "
        "this. I don't know how to stop him.' — What is he trying to tell us?",
        font=FONT_ITALIC, color=HexColor("#333355"))
    doc.move_down(2*mm)

    doc.sub_heading("Why Behaviour Matters", ACCENT2)
    for item in [
        "Behaviour is the PRIMARY language of children who cannot yet speak effectively.",
        "Understanding function → correct intervention → better outcomes.",
        "Ignoring function → suppression of behaviour but unmet need persists.",
        "Multidisciplinary teams must share a common behaviour language.",
    ]:
        doc.bullet(item)

    doc.move_down(2*mm)
    doc.section_heading("2", "What is Behaviour?")

    doc.sub_heading("Definition")
    doc.write_wrapped(
        "Any observable, measurable action of an individual in response to "
        "an internal or external stimulus.",
        font=FONT_BODY, color=INK)
    doc.move_down(1*mm)

    doc.two_col_list(
        ["Goal-directed", "Purposeful", "Learned or reinforced", "Context-dependent"],
        ["Observable (hitting, running)", "Hidden (internal anxiety)", "Functional (serves a need)", "Communicative"],
        header1="All behaviours are…", header2="Types of behaviour", bg=BOX_BG
    )
    doc.move_down(2*mm)

    doc.sub_heading("Appropriate vs Challenging Behaviour")
    doc.two_col_list(
        ["Age-appropriate curiosity", "Emotional expression", "Social play", "Routine seeking"],
        ["Self-injurious (SIB)", "Aggression to others", "Property destruction", "Eloping"],
        header1="Appropriate", header2="Challenging", bg=BOX_BG3
    )
    doc.move_down(2*mm)

    doc.sub_heading("The Behaviour Iceberg")
    doc.highlight_box([
        "Observable (above water): hitting, biting, screaming, running",
        "Hidden (below water): sensory overload, fear, pain, hunger,",
        "  communication deficit, anxiety, unmet need, executive dysfunction",
        "★  Treat the ICEBERG, not just the tip!",
    ], bg=BOX_BG2, border=ACCENT2)

    # ── PAGE 3 : SECTION 3 ─────────────────────────────────────────────────────
    doc._new_page()
    doc.section_heading("3", "Why Does Behaviour Occur?")

    factors = [
        ("Child Development", [
            "Developmental stage & age expectations",
            "Cognitive, social, emotional maturity",
            "Temperament and personality traits",
        ]),
        ("Communication Deficits", [
            "Cannot express needs verbally",
            "Limited requesting / protesting skills",
            "Behaviour replaces words",
        ]),
        ("Sensory Processing", [
            "Hyper- or hypo-sensitivity",
            "Sensory seeking or avoiding",
            "Vestibular · Proprioceptive · Tactile · Auditory · Visual",
        ]),
        ("Emotional Regulation", [
            "Difficulty identifying emotions",
            "Poor frustration tolerance",
            "Meltdown vs. tantrum distinction",
        ]),
        ("Executive Functioning", [
            "Impulse control deficits",
            "Difficulty shifting attention",
            "Working memory limitations",
        ]),
        ("Medical / Environmental", [
            "Pain (otitis, GI issues, dental)",
            "Medications / sleep disorders",
            "Overstimulating environment",
        ]),
    ]

    for title, pts in factors:
        doc.sub_heading(title, ACCENT2)
        for p in pts:
            doc.bullet(p, symbol="◆", color=ACCENT2)
        doc.move_down(1*mm)

    # ── PAGE 4 : SECTION 4 & 5 ─────────────────────────────────────────────────
    doc._new_page()
    doc.section_heading("4", "Behaviour is Communication")
    doc.write_wrapped(
        "Every behaviour has a purpose. Before asking 'How do I stop it?' — ask "
        "'What is the child trying to communicate?'",
        font=FONT_BI, color=HEADING_INK)
    doc.move_down(2*mm)

    examples = [
        ("Crying",       "Pain · fear · hunger · fatigue · loneliness"),
        ("Hitting",      "Frustration · communication breakdown · attention need"),
        ("Throwing",     "Protest · escape · heavy-work seeking · anger"),
        ("Running away", "Escape from demand · sensory overload · seeking space"),
        ("Self-injury",  "Sensory stimulation · extreme frustration · pain · communication"),
    ]
    doc.sub_heading("Behaviour Examples — What are they communicating?")
    doc.big_table(
        ["Behaviour", "Possible Communication"],
        examples,
        col_widths=[50*mm, 110*mm]
    )

    doc.move_down(3*mm)
    doc.section_heading("5", "Functions of Behaviour  (SEAT)")

    functions = [
        ("Attention", ACCENT1,
         "Child wants social interaction, eye contact, or a response from others.",
         "Example: Child throws toy → teacher rushes over → toy-throwing is reinforced."),
        ("Escape / Avoidance", ACCENT2,
         "Child wants to get away from a demand, activity, person, or environment.",
         "Example: Child cries at handwriting task → sent to cool-down → escape achieved."),
        ("Access to Tangibles", ACCENT3,
         "Child wants an object, food, activity, or preferred item.",
         "Example: Child screams in store → parent buys candy → access achieved."),
        ("Sensory / Automatic", HEADING_INK,
         "Behaviour produces its own sensory reward — no external reinforcement needed.",
         "Example: Rocking, hand-flapping, spinning — self-regulating sensory input."),
    ]

    for name, col, desc, ex in functions:
        doc.move_down(1*mm)
        doc.sub_heading(f"S·E·A·T → {name}", col)
        doc.write_wrapped(desc, color=INK)
        doc.write_wrapped(ex, font=FONT_ITALIC, color=HexColor("#444466"),
                          indent=5*mm)
        doc.move_down(0.5*mm)

    doc.highlight_box([
        "★  The SAME behaviour can serve DIFFERENT functions in different children.",
        "   → Always assess the function before choosing an intervention.",
        "   SEAT = Sensory · Escape · Attention · Tangible",
    ], bg=HIGHLIGHT, border=ACCENT1)

    # ── PAGE 5 : SECTION 6 ─────────────────────────────────────────────────────
    doc._new_page()
    doc.section_heading("6", "Behaviour Assessment")

    doc.sub_heading("ABC Analysis", ACCENT1)
    doc.flow_arrow(["A  Antecedent", "B  Behaviour", "C  Consequence"])
    doc.move_down(2*mm)
    abc = [
        ("Antecedent", "What happened BEFORE the behaviour?", "Teacher gave instruction to sit"),
        ("Behaviour",  "What did the child DO? (Observable, measurable)", "Child screamed and ran"),
        ("Consequence","What happened AFTER? (Maintains behaviour?)", "Teacher stopped instruction"),
    ]
    doc.big_table(["Component", "Question to Ask", "Example"], abc,
                  col_widths=[35*mm, 80*mm, 45*mm])

    doc.move_down(2*mm)
    doc.sub_heading("Functional Behaviour Assessment (FBA)", ACCENT2)
    for item in [
        "Indirect: interviews, rating scales, questionnaires with parents/teachers",
        "Direct: structured ABC observation in natural setting",
        "Experimental (FA): systematic manipulation to confirm function",
        "Output: Behaviour Support Plan (BSP) with hypothesis statement",
    ]:
        doc.bullet(item)

    doc.move_down(2*mm)
    doc.sub_heading("Measurement Parameters")
    doc.two_col_list(
        ["Frequency – how often?", "Duration – how long?", "Intensity – how severe?"],
        ["Latency – time to respond", "Antecedent triggers", "Consequence patterns"],
        bg=BOX_BG
    )
    doc.move_down(2*mm)

    doc.sub_heading("Hypothesis Statement Template", ACCENT3)
    doc.highlight_box([
        "When [ANTECEDENT] occurs,",
        "[CHILD'S NAME] engages in [BEHAVIOUR]",
        "in order to [FUNCTION].",
        "",
        "Example: When asked to do handwriting,",
        "Riya screams and flips the table in order to escape the task.",
    ], bg=BOX_BG2, border=ACCENT2)

    # ── PAGE 6 : SECTION 7A & 7B ───────────────────────────────────────────────
    doc._new_page()
    doc.section_heading("7", "Behaviour Therapy Approaches")

    doc.sub_heading("A.  Applied Behaviour Analysis (ABA)", ACCENT1)
    doc.write_wrapped(
        "Evidence-based approach based on principles of learning and behaviour. "
        "Focuses on measurable behaviour change through reinforcement and systematic teaching.",
        color=INK)
    doc.move_down(1*mm)
    aba_tech = [
        ("Reinforcement",           "Increase a desired behaviour using positive/negative consequences"),
        ("Prompting",               "Physical · gestural · verbal · visual cues to elicit correct response"),
        ("Prompt Fading",           "Systematically reduce prompt level to build independence"),
        ("Chaining",                "Link steps; forward chain (start→end) / backward chain (end→start)"),
        ("Shaping",                 "Reinforce successive approximations toward target behaviour"),
        ("Extinction",              "Withhold reinforcement for problem behaviour (use with caution)"),
        ("Token Economy",           "Earn tokens for desired behaviours; exchange for preferred reward"),
        ("Differential Reinforcement","DRI · DRA · DRO · DRL — reinforce behaviours incompatible with problem"),
    ]
    doc.big_table(["Technique", "Description"], aba_tech,
                  col_widths=[42*mm, 118*mm])

    doc.move_down(3*mm)
    doc.sub_heading("B.  Cognitive Behaviour Therapy (CBT)", ACCENT2)
    doc.write_wrapped(
        "Best for older children (5+) with ADHD, anxiety, oppositional behaviour, "
        "depression. Addresses thoughts → feelings → behaviour cycle.",
        color=INK)
    doc.move_down(1*mm)
    doc.two_col_list(
        ["Self-talk / self-monitoring", "Cognitive restructuring", "Problem-solving steps", "Relaxation training"],
        ["Best for: ADHD inattention", "Best for: anxiety, anger", "Requires: language skills", "Co-regulation first"],
        header1="CBT Techniques", header2="Clinical Notes", bg=BOX_BG
    )

    # ── PAGE 7 : SECTION 7C–7F ─────────────────────────────────────────────────
    doc._new_page()
    doc.sub_heading("C.  Positive Behaviour Support (PBS)", ACCENT3)
    doc.write_wrapped(
        "Person-centred, proactive framework. Changes environment and systems "
        "rather than just targeting the child. Improves quality of life.",
        color=INK)
    for item in [
        "Modify the environment BEFORE behaviour occurs (antecedent intervention)",
        "Teach replacement skills (communication, coping, social)",
        "Build on strengths, preferences, and motivators",
        "Family and team consistency is essential",
    ]:
        doc.bullet(item)

    doc.move_down(2*mm)
    doc.sub_heading("D.  Functional Communication Training (FCT)", HEADING_INK)
    doc.write_wrapped(
        "Replace a problem behaviour with an appropriate communicative "
        "alternative that serves the SAME function.",
        color=INK)
    doc.move_down(1*mm)
    doc.flow_arrow(["Problem Behaviour", "Identify Function", "Teach Equivalent Comm.", "Reinforce New Behaviour"])
    doc.move_down(2*mm)
    fct_ex = [
        ("Hitting",       "Escape",     "\"Break please\" (sign/card/PECS)"),
        ("Screaming",     "Attention",  "Tap shoulder + wait"),
        ("Biting",        "Sensory",    "Request chewy toy"),
        ("Running away",  "Escape",     "\"Help me\" + movement break"),
    ]
    doc.big_table(["Behaviour", "Function", "FCT Replacement"], fct_ex,
                  col_widths=[38*mm, 35*mm, 87*mm])

    doc.move_down(3*mm)
    doc.sub_heading("E.  Parent-Mediated Behaviour Therapy", ACCENT2)
    for item in [
        "Consistency across settings: home · school · clinic",
        "Establish predictable routines and visual schedules",
        "Use positive reinforcement, not punishment",
        "Behaviour contracts for older children",
        "Parent coaching sessions; include siblings if possible",
    ]:
        doc.bullet(item)

    doc.move_down(2*mm)
    doc.sub_heading("F.  Sensory-Based Behaviour Management (OT Focus)", ACCENT1)
    doc.write_wrapped(
        "When behaviour is driven by sensory processing differences — "
        "treat the sensory root, not just the behaviour.",
        font=FONT_BI, color=HEADING_INK)
    doc.move_down(1*mm)
    doc.two_col_list(
        ["Sensory diet (scheduled input)", "Heavy work activities", "Deep pressure (weighted vest · squeeze)"],
        ["Vestibular input (swing · trampoline)", "Environmental modification", "Noise/visual reduction strategies"],
        bg=BOX_BG3
    )

    # ── PAGE 8 : SECTION 8 ─────────────────────────────────────────────────────
    doc._new_page()
    doc.section_heading("8", "Behaviour Management Techniques")

    doc.sub_heading("Group 1 — Reinforcement Techniques", ACCENT1)
    rein = [
        ("Positive Reinforcement",  "Add something desirable → increases behaviour"),
        ("Negative Reinforcement",  "Remove something aversive → increases behaviour (≠ punishment)"),
        ("Token Economy",           "Earn tokens → exchange for reward; visual and systematic"),
        ("Premack Principle",       "'First work, then play' — preferred activity reinforces non-preferred"),
        ("Behaviour-specific Praise","Immediate, specific, warm: 'Great waiting with your hands in your lap!'"),
    ]
    doc.big_table(["Technique", "How It Works"], rein, col_widths=[52*mm, 108*mm])

    doc.move_down(3*mm)
    doc.sub_heading("Group 2 — Teaching Techniques", ACCENT2)
    teaching = [
        ("Prompting",           "Physical · gestural · verbal · visual; least-to-most or most-to-least"),
        ("Prompt Fading",       "Systematically reduce prompts to build independence"),
        ("Shaping",             "Reinforce successive approximations; build toward goal gradually"),
        ("Forward Chaining",    "Teach Step 1 first; complete rest for child; add steps sequentially"),
        ("Backward Chaining",   "Teach last step first; child finishes task; builds success momentum"),
        ("Modelling",           "Demonstrate target behaviour; peer/therapist/video model"),
        ("Errorless Learning",  "Provide immediate prompt so child always succeeds; fades over time"),
    ]
    doc.big_table(["Technique", "Description"], teaching, col_widths=[42*mm, 118*mm])

    doc.move_down(3*mm)
    doc.sub_heading("Group 3 — Behaviour Reduction Techniques", ACCENT3)
    reduction = [
        ("Extinction",              "Withhold reinforcement; expect extinction burst first"),
        ("Differential Reinforcement","DRI/DRA/DRO/DRL — reward alternative or incompatible behaviour"),
        ("Planned Ignoring",        "Ignore attention-motivated behaviours consistently"),
        ("Redirection",             "Re-direct to appropriate activity before behaviour escalates"),
        ("Response Interruption",   "Interrupt and redirect repetitive/disruptive behaviour"),
        ("Choice Making",           "Offer 2 acceptable choices — increases control, reduces resistance"),
        ("Visual Schedule",         "Predictable sequence reduces anxiety and transitions resistance"),
        ("First-Then Board",        "Visual 'First __  Then __' — clear contingency, reduces protests"),
    ]
    doc.big_table(["Technique", "Note"], reduction, col_widths=[52*mm, 108*mm])

    # ── PAGE 9 : SECTION 9 (Activity Prescription) ─────────────────────────────
    doc._new_page()
    doc.section_heading("9", "Activity Prescription  ★ OT Unique Contribution ★")
    doc.write_wrapped(
        "Match the sensory function of the behaviour to a therapeutic activity. "
        "This is NOT about stopping behaviour — it is about meeting the underlying need.",
        font=FONT_ITALIC, color=HEADING_INK)
    doc.move_down(2*mm)

    act_rows = [
        ("Running",              "Vestibular seeking",      "Obstacle course · scooter board · trampoline · animal walks"),
        ("Spinning",             "Vestibular input",        "Spinning chair (graded) · platform swing · rotational games"),
        ("Jumping",              "Proprioceptive seeking",  "Trampoline · crash mat · jumping games"),
        ("Throwing objects",     "Heavy work / attention",  "Ball-throwing target games · bean-bag toss · wall push-ups"),
        ("Hitting",              "Communication / anger",   "Punching pillow · therapy putty · resistance bands"),
        ("Biting",               "Oral sensory seeking",    "Chewy tubes · crunchy foods · blowing whistles"),
        ("Mouthing objects",     "Oral seeking",            "Oral motor activities · textured chew tools"),
        ("Hand flapping",        "Excitement / self-reg.",  "Don't always stop; redirect only if interferes with tasks"),
        ("Toe walking",          "Sensory / postural",      "Heel-walking games · balance beam · weighted cart pushing"),
        ("Rocking",              "Vestibular regulation",   "Therapy ball · rocking chair · rhythmic movement"),
        ("Head banging",         "Sensory / pain / frustration","Deep pressure · communication alternatives · medical eval."),
        ("Lining up toys",       "Need for predictability", "Flexible play gradually · turn-taking games"),
        ("Repetitive door opening","Cause-effect interest", "Busy boards · locks and latches activities"),
        ("Screaming",            "Attention / escape",      "Functional communication · visual supports · calm corner"),
        ("Eloping",              "Escape / sensory",        "Obstacle course before tasks · visual boundaries · movement breaks"),
        ("Refusing table work",  "Escape",                  "First-Then board · task breakdown · movement breaks · choices"),
        ("Tantrums",             "Multiple functions",      "Identify trigger · co-regulation · teach replacement · don't reinforce"),
        ("Poor eye contact",     "Social communication",    "Bubble play · peek-a-boo · highly motivating face-to-face games"),
        ("Difficulty waiting",   "Impulse control",         "Turn-taking board games · timer activities · waiting games"),
        ("Difficulty transitioning","Predictability",       "Visual schedule · countdown timer · transition songs"),
    ]
    doc.big_table(
        ["Behaviour", "Possible Function", "OT Activity Prescription"],
        act_rows,
        col_widths=[38*mm, 38*mm, 84*mm]
    )

    # ── PAGE 10 : SECTION 10 (Cases) ───────────────────────────────────────────
    doc._new_page()
    doc.section_heading("10", "Clinical Cases")

    cases = [
        {
            "title": "Case 1 — Throwing Toys",
            "steps": [
                ("Behaviour", "4-year-old boy throws toys repeatedly during structured OT session"),
                ("ABC", "A: Therapist introduces puzzle task  |  B: Child throws puzzle pieces  |  C: Task removed"),
                ("Function", "Escape / Avoidance — behaviour is maintained by task termination"),
                ("Intervention", "FCT: teach 'break please' card  ·  Break contingent on requesting, not throwing  ·"
                               "  Gradually increase task tolerance  ·  Offer choices within task"),
            ],
            "col": ACCENT1,
        },
        {
            "title": "Case 2 — Spinning",
            "steps": [
                ("Behaviour", "6-year-old girl spins repeatedly; difficult to redirect"),
                ("Assessment", "Sensory profile → vestibular seeking · Spinning increases with task demands"),
                ("Function", "Sensory / Automatic reinforcement"),
                ("Intervention", "Sensory diet: platform swing before school  ·  Spinning chair (graded)  ·"
                               "  Rotational movement breaks scheduled  ·  Do not use extinction"),
            ],
            "col": ACCENT2,
        },
        {
            "title": "Case 3 — Biting",
            "steps": [
                ("Behaviour", "3-year-old nonverbal boy bites peers and self"),
                ("Assessment", "Communication assessment → minimal requesting skills  ·  Oral sensory seeking"),
                ("Function", "Dual: oral sensory + communication"),
                ("Intervention", "FCT: PECS / AAC to request 'help' / 'break'  ·  Chewy tubes on schedule  ·"
                               "  Oral motor warm-up before sessions  ·  Positive reinforcement for manding"),
            ],
            "col": ACCENT3,
        },
    ]

    for case in cases:
        doc._check_space(40*mm)
        doc.sub_heading(case["title"], case["col"])
        rows = [(step, detail) for step, detail in case["steps"]]
        doc.big_table(["Step", "Detail"], rows, col_widths=[30*mm, 130*mm])
        doc.move_down(3*mm)

    # ── PAGE 11 : SECTION 11 ────────────────────────────────────────────────────
    doc._new_page()
    doc.section_heading("11", "Multidisciplinary Roles")
    doc.write_wrapped(
        "Behaviour management is most effective when the whole team works from "
        "a shared understanding. Each discipline brings a unique lens.",
        color=INK)
    doc.move_down(2*mm)

    mdt = [
        ("OT (Occupational Therapist)",
         "Sensory regulation · environmental adaptation · self-regulation · "
         "fine motor participation · sensory diet · activity prescription"),
        ("PT (Physiotherapist)",
         "Gross motor regulation · movement opportunities · posture & body awareness · "
         "heavy work activities"),
        ("SLP (Speech-Language Pathologist)",
         "Functional communication training · AAC · PECS · requesting & protesting · "
         "social communication"),
        ("Psychologist",
         "FBA · behaviour support plans · CBT · parent counselling · "
         "diagnostic clarity (ASD, ADHD, anxiety)"),
        ("Special Educator",
         "Classroom behaviour management · structured learning environment · "
         "visual supports · social skills curriculum"),
        ("Parents / Caregivers",
         "Consistency across home and school · reinforcement strategies · "
         "behaviour contracts · carryover of therapy goals"),
    ]
    doc.big_table(["Discipline", "Key Contributions"], mdt,
                  col_widths=[50*mm, 110*mm])

    doc.move_down(3*mm)
    doc.info_box("Keys to Effective MDT Collaboration", [
        "→ Shared behaviour vocabulary (everyone uses ABC, FBA, SEAT)",
        "→ Regular team meetings with case discussions",
        "→ Unified behaviour plan — same responses across settings",
        "→ Parent as equal team member, not just recipient of advice",
        "→ Data collection and shared monitoring of behaviour trends",
    ], bg=BOX_BG2)

    # ── PAGE 12 : SECTION 12 (Clinical Pearls) ─────────────────────────────────
    doc._new_page()
    doc.section_heading("12", "Clinical Pearls  ★")

    pearls = [
        "Every behaviour has a function — understand it before intervening.",
        "Don't ask 'How do I stop it?' — ask 'Why is it happening?'",
        "Replace the behaviour — don't just suppress it.",
        "Reinforce the behaviour you WANT to see, not the one you want to stop.",
        "Behaviour management must be individualised — based on assessment, not assumptions.",
        "The same behaviour can have different functions in different children.",
        "Sensory-driven behaviour needs a sensory solution, not only a behavioural one.",
        "Consistency across home, school, and clinic is essential for behaviour change.",
        "Parent training is as important as direct therapy.",
        "Document ABC data before every behaviour support plan — guessing the function is risky.",
        "Extinction produces an extinction burst — prepare the team and family.",
        "FCT is one of the most powerful tools: give the child a voice.",
    ]

    for i, pearl in enumerate(pearls, 1):
        doc._check_space(10*mm)
        c = doc.c
        # Star badge
        c.setFillColor(ACCENT1)
        c.circle(CONTENT_LEFT + 4*mm, doc.y + 2*mm, 4*mm, fill=1, stroke=0)
        c.setFillColor(white)
        c.setFont(FONT_BOLD, 8)
        c.drawCentredString(CONTENT_LEFT + 4*mm, doc.y + 0.5*mm, str(i))
        c.setFillColor(INK)
        c.setFont(FONT_BODY, 9.5)
        max_w = CONTENT_RIGHT - CONTENT_LEFT - 14*mm
        words = pearl.split()
        line = ""
        first = True
        for word in words:
            test = (line + " " + word).strip()
            if c.stringWidth(test, FONT_BODY, 9.5) <= max_w:
                line = test
            else:
                c.drawString(CONTENT_LEFT + 12*mm, doc.y + (2*mm if first else 0), line)
                doc.y -= LINE_SPACE
                doc._check_space()
                first = False
                line = word
        if line:
            c.drawString(CONTENT_LEFT + 12*mm, doc.y + (2*mm if first else 0), line)
        doc.y -= LINE_SPACE + 1*mm
        doc._check_space()

    doc.move_down(3*mm)
    doc.highlight_box([
        "★  SUMMARY: Behaviour = Communication. Assess it. Understand it.",
        "   Match your intervention to the FUNCTION — not just the topography.",
        "   Work as a team. Include the parents. Document. Review. Adjust.",
    ], bg=HIGHLIGHT, border=ACCENT1)

    doc.move_down(4*mm)

    # Final footer note
    doc.c.setFont(FONT_ITALIC, 8)
    doc.c.setFillColor(HexColor("#777777"))
    doc.c.drawCentredString(W/2, doc.y,
        "Prepared for Interdisciplinary Paediatric Team  ·  Clinical Reasoning Seminar  ·  2024")
    doc.move_down(LINE_SPACE)
    doc.c.setFont(FONT_BOLD, 8)
    doc.c.setFillColor(HEADING_INK)
    doc.c.drawCentredString(W/2, doc.y,
        "References: Cooper et al. (ABA); Schreibman et al. (PBS); Bundy & Murray (Sensory Integration)")

    doc.save()
    return out


if __name__ == "__main__":
    result = build_notes()
    print(f"Done: {result}")
Your credits are exhausted. You can purchase a top-up or subscribe to a plan to continue using Orris. If you're already subscribed, your daily credits will reset tomorrow.

ok js type n send your content in chat

Your credits are exhausted. You can purchase a top-up or subscribe to a plan to continue using Orris. If you're already subscribed, your daily credits will reset tomorrow.
This is a shared conversation. Sign in to Orris to start your own chat.