Design a treatment plan using the techniques of REBT and CBT for a patient who has moderate to severe OCD, depression and anxiety Also give some worksheets for the same
"obsessive-compulsive disorder" AND "cognitive behavioral therapy"
Quick answer
| Obsession/Trigger | Compulsion/Avoidance | SUDS (0-100) | Exposure Task | Date Completed | Post-exposure SUDS |
|---|---|---|---|---|---|
| e.g., touching doorknob | washing hands 10x | 75 | Touch doorknob, wait 30 min, no washing |
| A - Activating Event | B - Belief (identify the "must/should") | C - Consequence (emotion/behavior, rate 0-10) | D - Dispute (evidence/logic/usefulness) | E - New Effective Belief |
|---|---|---|---|---|
| Situation | Automatic Thought | Emotion (0-100%) | Cognitive Distortion (name it) | Evidence For | Evidence Against | Balanced Thought | New Emotion Rating |
|---|
| Date/Time | Exposure Exercise | Anxiety Before (0-100) | Anxiety Peak | Anxiety After 20/40/60 min | Compulsion Resisted? (Y/N) | Notes/Learning |
|---|
| Day | Planned Activity | Type (Mastery/Pleasure/Necessary) | Predicted Mood (0-10) | Actual Mood After (0-10) |
|---|---|---|---|---|
| Mon |
| Week | OCD severity (self-rated) | Depression (PHQ-9 or similar) | Anxiety (GAD-7 or similar) | Notes |
|---|
Create a customizable Word document with all 7 worksheets ready to print and use with clients
mkdir -p /tmp/workspace/ocd-cbt-worksheets && ls -la /tmp/workspace/
~/ocd-cbt-worksheets/build_worksheets.py
#!/usr/bin/env python3
"""
Build a printable, customizable Word document containing 7 clinical worksheets
for a CBT + REBT treatment plan for comorbid OCD, Depression, and Anxiety.
"""
from docx import Document
from docx.shared import Pt, Inches, RGBColor, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
from docx.enum.section import WD_SECTION
NAVY = RGBColor(0x1F, 0x3B, 0x57)
TEAL = RGBColor(0x1B, 0x6E, 0x6E)
GREY = RGBColor(0x55, 0x55, 0x55)
LIGHT_FILL = "EAF2F2"
HEADER_FILL = "1F3B57"
doc = Document()
# ---------- Global styles ----------
normal = doc.styles["Normal"]
normal.font.name = "Calibri"
normal.font.size = Pt(11)
normal.font.color.rgb = RGBColor(0x22, 0x22, 0x22)
# Page margins (comfortable for printing/filling by hand)
for section in doc.sections:
section.top_margin = Cm(1.6)
section.bottom_margin = Cm(1.6)
section.left_margin = Cm(1.8)
section.right_margin = Cm(1.8)
def set_cell_shading(cell, hex_color):
tcPr = cell._tc.get_or_add_tcPr()
shd = OxmlElement('w:shd')
shd.set(qn('w:val'), 'clear')
shd.set(qn('w:color'), 'auto')
shd.set(qn('w:fill'), hex_color)
tcPr.append(shd)
def set_repeat_header(row):
tr = row._tr
trPr = tr.get_or_add_trPr()
tblHeader = OxmlElement('w:tblHeader')
tblHeader.set(qn('w:val'), "true")
trPr.append(tblHeader)
def style_table_borders(table):
tbl = table._tbl
tblPr = tbl.tblPr
borders = OxmlElement('w:tblBorders')
for edge in ('top', 'left', 'bottom', 'right', 'insideH', 'insideV'):
el = OxmlElement(f'w:{edge}')
el.set(qn('w:val'), 'single')
el.set(qn('w:sz'), '6')
el.set(qn('w:space'), '0')
el.set(qn('w:color'), '999999')
borders.append(el)
tblPr.append(borders)
def add_header_bar(title_text, subtitle_text=None):
"""Adds a colored header bar as a 1x1 table for visual branding."""
tbl = doc.add_table(rows=1, cols=1)
tbl.alignment = WD_TABLE_ALIGNMENT.CENTER
cell = tbl.rows[0].cells[0]
set_cell_shading(cell, HEADER_FILL)
cell.width = Inches(6.8)
p = cell.paragraphs[0]
p.alignment = WD_ALIGN_PARAGRAPH.LEFT
run = p.add_run(title_text)
run.font.size = Pt(18)
run.font.bold = True
run.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF)
run.font.name = "Calibri"
if subtitle_text:
p2 = cell.add_paragraph()
r2 = p2.add_run(subtitle_text)
r2.font.size = Pt(10.5)
r2.font.italic = True
r2.font.color.rgb = RGBColor(0xE0, 0xE8, 0xE8)
# remove table borders for the banner
tbl_el = tbl._tbl
tblPr = tbl_el.tblPr
borders = OxmlElement('w:tblBorders')
for edge in ('top', 'left', 'bottom', 'right', 'insideH', 'insideV'):
el = OxmlElement(f'w:{edge}')
el.set(qn('w:val'), 'nil')
borders.append(el)
tblPr.append(borders)
doc.add_paragraph()
def add_client_info_block(fields=("Client Name:", "Date:", "Session #:", "Clinician:")):
"""A fill-in header row for each worksheet: name/date/session."""
tbl = doc.add_table(rows=1, cols=len(fields))
tbl.alignment = WD_TABLE_ALIGNMENT.CENTER
style_table_borders(tbl)
row = tbl.rows[0]
for i, label in enumerate(fields):
cell = row.cells[i]
set_cell_shading(cell, LIGHT_FILL)
p = cell.paragraphs[0]
run = p.add_run(label + " " + "_" * 18)
run.font.size = Pt(10)
run.font.bold = True
run.font.color.rgb = NAVY
doc.add_paragraph()
def add_instructions(text):
p = doc.add_paragraph()
run = p.add_run("Instructions: ")
run.bold = True
run.font.color.rgb = TEAL
run.font.size = Pt(10.5)
run2 = p.add_run(text)
run2.italic = True
run2.font.size = Pt(10.5)
run2.font.color.rgb = GREY
doc.add_paragraph()
def add_section_note(text, bold_lead=None):
p = doc.add_paragraph()
if bold_lead:
r = p.add_run(bold_lead + " ")
r.bold = True
r.font.size = Pt(10.5)
r2 = p.add_run(text)
r2.font.size = Pt(10.5)
r2.font.color.rgb = GREY
def make_table(headers, col_widths, n_rows=8, header_fill=HEADER_FILL):
n_cols = len(headers)
tbl = doc.add_table(rows=n_rows + 1, cols=n_cols)
tbl.alignment = WD_TABLE_ALIGNMENT.CENTER
style_table_borders(tbl)
tbl.autofit = False
hdr_row = tbl.rows[0]
set_repeat_header(hdr_row)
for i, htext in enumerate(headers):
cell = hdr_row.cells[i]
set_cell_shading(cell, header_fill)
cell.width = Inches(col_widths[i])
p = cell.paragraphs[0]
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(htext)
run.font.bold = True
run.font.size = Pt(9.5)
run.font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF)
for r in range(1, n_rows + 1):
row = tbl.rows[r]
for i in range(n_cols):
cell = row.cells[i]
cell.width = Inches(col_widths[i])
# add empty paragraph with min height for writing space
cell.paragraphs[0].text = ""
# set row height
tr = row._tr
trPr = tr.get_or_add_trPr()
trHeight = OxmlElement('w:trHeight')
trHeight.set(qn('w:val'), "500")
trHeight.set(qn('w:hRule'), "atLeast")
trPr.append(trHeight)
return tbl
def footer_note(ws_num):
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(f"Worksheet {ws_num} | CBT + REBT Treatment Program | For use under clinician supervision")
run.font.size = Pt(8)
run.italic = True
run.font.color.rgb = RGBColor(0xAA, 0xAA, 0xAA)
def page_break():
doc.add_page_break()
# =====================================================================
# COVER PAGE
# =====================================================================
doc.add_paragraph().add_run("\n\n")
title_p = doc.add_paragraph()
title_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = title_p.add_run("CBT + REBT Clinical Worksheet Packet")
run.font.size = Pt(30)
run.font.bold = True
run.font.color.rgb = NAVY
sub_p = doc.add_paragraph()
sub_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = sub_p.add_run("Treatment Plan Support Tools for Comorbid OCD, Depression & Anxiety")
run.font.size = Pt(14)
run.font.color.rgb = TEAL
doc.add_paragraph()
box = doc.add_table(rows=1, cols=1)
box.alignment = WD_TABLE_ALIGNMENT.CENTER
cell = box.rows[0].cells[0]
set_cell_shading(cell, LIGHT_FILL)
style_table_borders(box)
p = cell.paragraphs[0]
p.alignment = WD_ALIGN_PARAGRAPH.LEFT
lead = p.add_run("Contents:\n")
lead.bold = True
lead.font.color.rgb = NAVY
contents = [
"1. OCD Symptom & Exposure Hierarchy",
"2. REBT ABCDE Log",
"3. Daily Thought Record (Beck's CBT)",
"4. Exposure Practice Log (ERP Diary)",
"5. Behavioral Activation Activity Schedule",
"6. Core Irrational Belief Identification Sheet",
"7. Weekly Symptom Tracker",
]
for line in contents:
para = cell.add_paragraph()
r = para.add_run(line)
r.font.size = Pt(11)
doc.add_paragraph()
info_p = cell.add_paragraph()
info_run = info_p.add_run(
"\nAll fields, scales, and rows in this packet are fully customizable -- "
"edit labels, add/remove rows, or adjust rating scales to fit your client's "
"needs and your clinical protocol before printing."
)
info_run.italic = True
info_run.font.size = Pt(9.5)
info_run.font.color.rgb = GREY
doc.add_paragraph()
client_p = doc.add_paragraph()
client_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = client_p.add_run("Client Name: ________________________ Clinician: ________________________")
r.font.size = Pt(11)
r.font.color.rgb = NAVY
page_break()
# =====================================================================
# WORKSHEET 1: OCD Symptom & Exposure Hierarchy
# =====================================================================
add_header_bar("Worksheet 1: OCD Symptom & Exposure Hierarchy",
"Building a graded hierarchy for Exposure and Response Prevention (ERP)")
add_client_info_block()
add_instructions(
"List obsessions/triggers from least to most distressing. Rate anxiety using the "
"Subjective Units of Distress Scale (SUDS: 0 = no distress, 100 = worst distress imaginable). "
"Work through exposures gradually, starting around SUDS 40-50, without performing the compulsion."
)
make_table(
headers=["Obsession / Trigger", "Compulsion / Avoidance", "SUDS\n(0-100)", "Planned Exposure Task", "Date Completed", "Post-Exposure SUDS"],
col_widths=[1.5, 1.4, 0.6, 1.7, 0.9, 0.9],
n_rows=10,
)
doc.add_paragraph()
add_section_note("SUDS Scale reference: 0 = totally calm | 25 = mild discomfort | 50 = moderate anxiety | "
"75 = severe anxiety | 100 = worst distress ever felt.", bold_lead="Note:")
footer_note(1)
page_break()
# =====================================================================
# WORKSHEET 2: REBT ABCDE Log
# =====================================================================
add_header_bar("Worksheet 2: REBT ABCDE Log",
"Identifying and disputing irrational beliefs (Albert Ellis's REBT model)")
add_client_info_block()
add_instructions(
"For a recent distressing moment, work through each column. Focus Column B on rigid "
"'must/should/have to' beliefs. In Column D, dispute the belief empirically (what is the evidence?), "
"logically (does it follow?), and pragmatically (does holding this belief help me?)."
)
make_table(
headers=["A - Activating Event", "B - Belief\n(the 'must/should')", "C - Consequence\n(emotion/behavior, 0-10)", "D - Dispute\n(evidence / logic / usefulness)", "E - New Effective Belief"],
col_widths=[1.3, 1.4, 1.3, 1.6, 1.4],
n_rows=9,
)
doc.add_paragraph()
add_section_note("Common irrational belief categories: demandingness ('musts'), catastrophizing, "
"low frustration tolerance, global self/other-rating.", bold_lead="Tip:")
footer_note(2)
page_break()
# =====================================================================
# WORKSHEET 3: Daily Thought Record (Beck's CBT)
# =====================================================================
add_header_bar("Worksheet 3: Daily Thought Record",
"Cognitive restructuring for depressive and anxious automatic thoughts (Beck's CBT)")
add_client_info_block()
add_instructions(
"Complete as soon as possible after a mood shift. Name the cognitive distortion (e.g., "
"all-or-nothing thinking, catastrophizing, mind-reading, personalization, overgeneralization) "
"before writing the balanced thought."
)
make_table(
headers=["Situation", "Automatic Thought", "Emotion\n(0-100%)", "Cognitive\nDistortion", "Evidence For", "Evidence Against", "Balanced Thought", "New Emotion\nRating"],
col_widths=[0.95, 1.1, 0.65, 0.85, 0.95, 0.95, 1.1, 0.75],
n_rows=9,
)
footer_note(3)
page_break()
# =====================================================================
# WORKSHEET 4: Exposure Practice Log (ERP Diary)
# =====================================================================
add_header_bar("Worksheet 4: Exposure Practice Log (ERP Diary)",
"Tracking daily/weekly exposure practice and habituation")
add_client_info_block()
add_instructions(
"Record each exposure practice. Track anxiety at the start, at the peak, and at set intervals "
"afterward to observe habituation over time. Note whether the compulsion/ritual was successfully resisted."
)
make_table(
headers=["Date /\nTime", "Exposure Exercise", "Anxiety\nBefore\n(0-100)", "Anxiety\nPeak", "Anxiety After\n20/40/60 min", "Compulsion\nResisted?\n(Y/N)", "Notes / Learning"],
col_widths=[0.8, 1.5, 0.7, 0.7, 1.0, 0.8, 1.3],
n_rows=10,
)
footer_note(4)
page_break()
# =====================================================================
# WORKSHEET 5: Behavioral Activation Activity Schedule
# =====================================================================
add_header_bar("Worksheet 5: Behavioral Activation Activity Schedule",
"Rebuilding engagement and countering depressive withdrawal")
add_client_info_block()
add_instructions(
"Plan at least one activity per day. Classify each as Mastery (accomplishment), Pleasure "
"(enjoyment), or Necessary (routine obligation). Predict your mood before, and record actual mood "
"after, to build evidence against 'nothing will help' beliefs."
)
make_table(
headers=["Day", "Planned Activity", "Type\n(Mastery / Pleasure / Necessary)", "Predicted Mood\n(0-10)", "Actual Mood After\n(0-10)"],
col_widths=[0.7, 2.0, 1.5, 1.1, 1.1],
n_rows=7,
)
doc.add_paragraph()
add_section_note("Rows are pre-labeled Mon-Sun below; edit or leave blank as needed.", bold_lead="Tip:")
# Optional: pre-fill day names
tbl = doc.tables[-1]
days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
for i, day in enumerate(days):
tbl.rows[i + 1].cells[0].paragraphs[0].text = day
footer_note(5)
page_break()
# =====================================================================
# WORKSHEET 6: Core Irrational Belief Identification Sheet
# =====================================================================
add_header_bar("Worksheet 6: Core Irrational Belief Identification Sheet",
"Tracking strength of core beliefs over the course of treatment")
add_client_info_block()
add_instructions(
"Rate how strongly you believe each statement right now (0% = do not believe it at all, "
"100% = completely believe it). Revisit this sheet every 2-4 weeks to track change. Add your own "
"beliefs in the blank rows."
)
make_table(
headers=["Core Belief Statement", "Belief Strength Today (0-100%)", "Date", "Belief Strength (Follow-up)", "Date"],
col_widths=[2.6, 1.1, 0.7, 1.1, 0.7],
n_rows=9,
)
tbl = doc.tables[-1]
prefilled = [
"I must be 100% certain to feel safe.",
"I must never make a mistake or something terrible will happen.",
"I am a bad/worthless person if I have these thoughts.",
"I must always be in control of my thoughts.",
"If I feel anxious, something must be wrong.",
"Everyone must approve of me for me to be okay.",
]
for i, belief in enumerate(prefilled):
tbl.rows[i + 1].cells[0].paragraphs[0].text = belief
footer_note(6)
page_break()
# =====================================================================
# WORKSHEET 7: Weekly Symptom Tracker
# =====================================================================
add_header_bar("Worksheet 7: Weekly Symptom Tracker",
"Monitoring OCD, depression, and anxiety severity across treatment")
add_client_info_block(fields=("Client Name:", "Start Date:", "Clinician:"))
add_instructions(
"Complete weekly, ideally at the same time/day. Use standardized measures where available "
"(e.g., Y-BOCS for OCD, PHQ-9 for depression, GAD-7 for anxiety) or a consistent self-rated 0-10 scale."
)
make_table(
headers=["Week", "OCD Severity\n(self-rated / Y-BOCS)", "Depression\n(PHQ-9 or 0-10)", "Anxiety\n(GAD-7 or 0-10)", "Notes"],
col_widths=[0.6, 1.5, 1.3, 1.3, 1.7],
n_rows=12,
)
tbl = doc.tables[-1]
for i in range(12):
tbl.rows[i + 1].cells[0].paragraphs[0].text = f"Wk {i+1}"
footer_note(7)
# =====================================================================
# Save
# =====================================================================
out_path = "/tmp/workspace/ocd-cbt-worksheets/CBT_REBT_OCD_Worksheets.docx"
doc.save(out_path)
print("Saved:", out_path)
cd /tmp/workspace/ocd-cbt-worksheets && python3 build_worksheets.py
cd /tmp/workspace/ocd-cbt-worksheets && python3 -c " from docx import Document doc = Document('CBT_REBT_OCD_Worksheets.docx') print('Paragraphs:', len(doc.paragraphs)) print('Tables:', len(doc.tables)) for i,t in enumerate(doc.tables): print(i, len(t.rows), 'x', len(t.columns)) " && ls -la CBT_REBT_OCD_Worksheets.docx
CBT REBT OCD Worksheets
Word Document · DOCX
Give a detailed step by step treatment plan which can directly be used by a psychologist for the patient
| Measure | Baseline | Session 9 | Session 12 | Session 19 | Termination |
|---|---|---|---|---|---|
| Y-BOCS | ✓ | ✓ | ✓ | ||
| PHQ-9 | ✓ | ✓ | ✓ | ✓ | |
| GAD-7 | ✓ | ✓ | ✓ | ✓ | |
| Belief strength (Worksheet 6) | ✓ | ✓ | ✓ |
Ybocs, ham-A and BDI have already been administered for the patient
| Measure | Baseline (done) | Session 9 | Session 12 | Session 19 | Termination |
|---|---|---|---|---|---|
| Y-BOCS (OCD) | ✓ | ✓ | ✓ | ||
| BDI (depression) | ✓ | ✓ | ✓ | ✓ | |
| HAM-A (anxiety) | ✓ | ✓ | ✓ | ✓ |
Ybocs, ham-A and BDI have already been administered for the patient And all there of them have shown moderate to severe results
Ybocs, ham-A and BDI have already been administered for the patient And all there of them have shown moderate to severe results Now design a treatment plan with detailed methods and techniques mentioned using erp, REBT and cbt
| Measure | Baseline | Session 14 | Session 27 (termination) |
|---|---|---|---|
| Y-BOCS | Moderate-severe | ✓ | ✓ |
| HAM-A | Moderate-severe | ✓ | ✓ |
| BDI | Moderate-severe | ✓ | ✓ |
| Belief strength (Worksheet 6) | ✓ | ✓ | ✓ |