What is the definition of acute, sudden and insidious onset in Comprehensive textbook of psychiatry
| Feature | Delirium | Dementia |
|---|---|---|
| Onset | Acute | Often insidious |
| Duration | Variable; usually brief | Chronic, unless reversible |
| Consciousness | Impaired, fluctuating | Normal |
| Term | Time frame | Identifiable start? | Typical example |
|---|---|---|---|
| Sudden | Minutes to hours | Yes - explosive | Acute dystonia, PANS, stroke |
| Acute | Hours to days | Yes - clear | Delirium, ATPD, drug-induced psychosis |
| Insidious | Weeks to months/years | No - gradual, imperceptible | Schizophrenia, Alzheimer's dementia |
1st years you have homework till next class ; divide among three of you 1.write common age of onset of unipolar depression, bipolar depression, mania, panic disorder,GAD, various phobic disorder, OCD, schizophrenia, PDD, somatoform disorder, common dementias , Adhd, autism, conduct disorder 2.write disorders common in females/ males 3.onset clarification 4.secondary causes (common) atleast 5 each excluding substance induced for Depression Anxiety Ocd Psychosis 5.Libido definition and questions to ask
Kaplan Sadock age of onset psychiatric disorders depression bipolar schizophrenia OCD panic GAD phobia ADHD autism dementia
https://pmc.ncbi.nlm.nih.gov/articles/PMC8960395
secondary causes depression anxiety OCD psychosis medical conditions Kaplan Sadock psychiatry hypothyroidism lupus temporal lobe epilepsy
https://www.psychiatry.ru/siteconst/userfiles/file/book/%D0%…
libido definition psychiatry questions to ask sexual history clinical interview Kaplan Sadock
| Disorder | Typical Age of Onset | Key Notes |
|---|---|---|
| Unipolar Depression (MDD) | Mean ~30-35 yrs; can occur any age | Peak in 25-44 yrs; second peak in elderly |
| Bipolar Depression | Mean ~30 yrs (range 5-50 yrs) | Earlier onset than unipolar; adolescent prevalence ~2% rising to ~4% by age 18 |
| Mania (Bipolar I) | Mean ~30 yrs | Rare before puberty; more common in young adults |
| Panic Disorder | Late 20s | Bimodal: late adolescence and mid-30s; uncommon in children |
| GAD | Variable; early-mid adulthood (20s-30s) | Can begin in childhood; "new" cases in elderly often represent continuation |
| Specific Phobia | Late childhood (~7-11 yrs) | Earliest onset of all anxiety disorders |
| Social Anxiety Disorder | Mid-teens (~13 yrs) | ~90% onset before age 25 |
| Agoraphobia | Late teens to mid-20s | May increase in late life in women |
| OCD | Mean ~19 yrs | Males: earlier onset (childhood/adolescence); Females: later (young adulthood); onset after 30 is rare |
| Schizophrenia | Men: 15-25 yrs; Women: 25-35 yrs | 50% of cases before age 25; onset <10 yrs (very rare) or >45 yrs (late-onset) |
| PDD/Autism Spectrum Disorder (ASD) | Early developmental period (<3 yrs) | Usually detected by 18-24 months; ~90%+ onset before age 14 |
| Somatoform Disorders | Typically before age 30 | Conversion disorder can be any age; hypochondriasis: 20-30 yrs |
| Common Dementias | Alzheimer's: usually >65 yrs | Early-onset Alzheimer's: 40-65 yrs; Vascular dementia: typically >60 yrs |
| ADHD | Symptoms before age 12 (DSM-5) | Typically noted at 3-7 yrs; ~90%+ onset before age 14 |
| Conduct Disorder | Childhood-onset type: before age 10; Adolescent-onset: 10-18 yrs | Childhood-onset has worse prognosis |
| Disorder | F:M Ratio |
|---|---|
| Major Depressive Disorder | 2:1 |
| Panic disorder with agoraphobia | 2:1 |
| Specific phobia | 2:1 |
| GAD | 2:1 |
| PTSD | 2:1 |
| Somatization disorder (Briquet's syndrome) | Almost exclusively female |
| Borderline Personality Disorder | 3:1 |
| Anorexia Nervosa | 10-20:1 |
| Bulimia Nervosa | 10:1 |
| Conversion disorder | 2-5:1 |
| Thyroid-related psychiatric symptoms | F >> M |
| Disorder | M:F Ratio |
|---|---|
| ASD/Autism | 4:1 |
| ADHD | ~3:1 |
| Conduct disorder | ~3:1 |
| Schizophrenia (earlier onset, more severe) | Equal prevalence; males onset earlier |
| Antisocial Personality Disorder | 3:1 |
| Paraphilias | M >> F |
| Alcohol and substance use disorders | M >> F |
| OCD (childhood/early onset) | Males more common in childhood |
| Term | Timeframe | Start identifiable? | Key example |
|---|---|---|---|
| Sudden | Minutes to hours | Yes - explosive | Acute dystonia, stroke |
| Acute | Hours to days | Yes - clear | Delirium, ATPD, mania |
| Insidious | Weeks to years | No - gradual | Schizophrenia, Alzheimer's |
| # | Cause | Mechanism / Features |
|---|---|---|
| 1 | Hypothyroidism ("Myxedema madness") | Fatigue, depression, suicidal ideation; may mimic schizophrenia |
| 2 | Cushing's Syndrome (hypercortisolism) | Agitated depression, memory deficits, suicidality; physical signs: moon face, buffalo hump, striae |
| 3 | Parkinson's Disease | Depression in ~40-50%; direct neurochemical (dopamine/serotonin depletion) |
| 4 | Stroke / Cerebrovascular Disease | Post-stroke depression; left frontal lesions most associated |
| 5 | HIV/AIDS | Direct CNS involvement; also reactive |
| 6 | Cancer (especially pancreatic) | Pancreatic Ca classically presents with depression before diagnosis |
| 7 | SLE (Systemic Lupus Erythematosus) | CNS lupus; also steroid-induced |
| 8 | Addison's Disease (adrenal insufficiency) | Insidious fatigue, depression, anorexia |
| # | Cause | Features |
|---|---|---|
| 1 | Hyperthyroidism | Palpitations, tremor, anxiety, panic-like episodes |
| 2 | Pheochromocytoma | Episodic hypertension, sweating, palpitations, intense anxiety - classically mimics panic disorder |
| 3 | Hypoglycemia | Episodic anxiety, tremor, diaphoresis |
| 4 | Cardiac arrhythmias (e.g., SVT, PSVT) | Palpitations mistaken for panic attacks |
| 5 | Pulmonary embolism / COPD / Asthma | Dyspnea, air hunger driving anxiety |
| 6 | Temporal lobe epilepsy | Ictal fear, panic-like auras |
| 7 | Hyperparathyroidism / Hypercalcemia | Anxiety, depression, cognitive symptoms |
| # | Cause | Features |
|---|---|---|
| 1 | Basal ganglia disorders (Huntington's, Sydenham's chorea) | Striatal dysfunction drives compulsive behavior |
| 2 | PANDAS/PANS (Streptococcal/other infections) | Acute explosive OCD onset in children post-strep infection; antibody-mediated basal ganglia damage |
| 3 | Traumatic Brain Injury (TBI) - frontal/orbital lesions | Orbitofrontal-striatal circuit disruption |
| 4 | Tourette's Syndrome | High OCD comorbidity (40-60%); shared neurobiological basis |
| 5 | Encephalitis (especially anti-NMDA receptor encephalitis) | OCD-like behaviors prominent in prodrome |
| 6 | Temporal lobe epilepsy | Interictal OCD-spectrum symptoms |
| # | Cause | Features |
|---|---|---|
| 1 | Temporal lobe epilepsy | Interictal psychosis resembles schizophrenia; personality preserved |
| 2 | CNS tumors / space-occupying lesions | Especially frontal and temporal lobe tumors; hallucinations and personality change |
| 3 | Hypothyroidism ("Myxedema madness") | Hallucinations, delusions, thought disorder; reversed with thyroid replacement |
| 4 | SLE / Autoimmune encephalitis (anti-NMDA receptor) | Young women; psychosis, dyskinesias, autonomic instability |
| 5 | Neurosyphilis | "Great imitator" - grandiose delusions, hallucinations, personality change |
| 6 | Wilson's Disease | Copper deposition; personality change, psychosis, movement disorder in young adults |
| 7 | Huntington's Disease | Psychosis can precede chorea by years |
| 8 | HIV encephalopathy | Direct CNS invasion |
convert this to pdf
ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or not found"
mkdir -p /home/daytona/workspace/psych-homework && python3 -c "from reportlab.lib import colors; print('reportlab ok')" && python3 -c "import weasyprint; print('weasyprint ok')" 2>/dev/null || echo "checking tools"
~/psych-homework/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/home/daytona/workspace/psych-homework/Psychiatry_Homework_1st_Year.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm,
topMargin=2.2*cm, bottomMargin=2.2*cm,
title="Psychiatry Homework - 1st Years",
author="Orris Medical"
)
styles = getSampleStyleSheet()
# Custom styles
NAVY = colors.HexColor("#1a3a5c")
TEAL = colors.HexColor("#0d6e6e")
LIGHT = colors.HexColor("#e8f4f8")
PALE = colors.HexColor("#f0f8f0")
GOLD = colors.HexColor("#c8860a")
WHITE = colors.white
GRAY = colors.HexColor("#f5f5f5")
DGRAY = colors.HexColor("#555555")
title_style = ParagraphStyle("TitleStyle", parent=styles["Title"],
fontSize=20, textColor=WHITE, alignment=TA_CENTER, spaceAfter=4,
fontName="Helvetica-Bold", leading=24)
subtitle_style = ParagraphStyle("SubtitleStyle", parent=styles["Normal"],
fontSize=10, textColor=colors.HexColor("#ccddee"), alignment=TA_CENTER,
fontName="Helvetica", spaceAfter=0)
task_header_style = ParagraphStyle("TaskHeader", parent=styles["Heading1"],
fontSize=13, textColor=WHITE, fontName="Helvetica-Bold",
spaceAfter=6, spaceBefore=0, leading=16)
section_style = ParagraphStyle("SectionStyle", parent=styles["Heading2"],
fontSize=11, textColor=TEAL, fontName="Helvetica-Bold",
spaceAfter=4, spaceBefore=8, leading=14)
subsection_style = ParagraphStyle("SubSection", parent=styles["Heading3"],
fontSize=10, textColor=NAVY, fontName="Helvetica-Bold",
spaceAfter=3, spaceBefore=6, leading=13)
body_style = ParagraphStyle("BodyStyle", parent=styles["Normal"],
fontSize=9, textColor=colors.HexColor("#222222"), fontName="Helvetica",
spaceAfter=3, leading=13, alignment=TA_JUSTIFY)
bullet_style = ParagraphStyle("BulletStyle", parent=styles["Normal"],
fontSize=9, textColor=colors.HexColor("#222222"), fontName="Helvetica",
spaceAfter=2, leading=12, leftIndent=14, bulletIndent=4)
note_style = ParagraphStyle("NoteStyle", parent=styles["Normal"],
fontSize=8.5, textColor=DGRAY, fontName="Helvetica-Oblique",
spaceAfter=3, leading=12, leftIndent=10,
borderColor=GOLD, borderPadding=5, borderWidth=0.5,
backColor=colors.HexColor("#fffbf0"))
source_style = ParagraphStyle("SourceStyle", parent=styles["Normal"],
fontSize=7.5, textColor=DGRAY, fontName="Helvetica-Oblique",
spaceAfter=2, leading=10)
def task_banner(task_num, title, color=NAVY):
data = [[Paragraph(f"TASK {task_num} | {title}", task_header_style)]]
t = Table(data, colWidths=[17*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("ROWPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
("ROUNDEDCORNERS", [4]),
("BOX", (0,0), (-1,-1), 0, color),
]))
return t
def make_table(header_row, data_rows, col_widths, alt_color=LIGHT, head_color=NAVY):
table_data = []
# Header
header = [Paragraph(f"<b><font color='white'>{h}</font></b>",
ParagraphStyle("th", parent=styles["Normal"], fontSize=8.5,
fontName="Helvetica-Bold", textColor=WHITE, leading=11))
for h in header_row]
table_data.append(header)
for i, row in enumerate(data_rows):
styled_row = [Paragraph(str(cell),
ParagraphStyle("td", parent=styles["Normal"], fontSize=8.5,
fontName="Helvetica", leading=11, textColor=colors.HexColor("#111111")))
for cell in row]
table_data.append(styled_row)
t = Table(table_data, colWidths=col_widths, repeatRows=1)
style_cmds = [
("BACKGROUND", (0,0), (-1,0), head_color),
("ROWPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#bbbbbb")),
("VALIGN", (0,0), (-1,-1), "TOP"),
("ALIGN", (0,0), (-1,-1), "LEFT"),
]
for i in range(1, len(table_data)):
bg = alt_color if i % 2 == 0 else WHITE
style_cmds.append(("BACKGROUND", (0,i), (-1,i), bg))
t.setStyle(TableStyle(style_cmds))
return t
story = []
# ── COVER BANNER ──────────────────────────────────────────────────────────────
cover_data = [[
Paragraph("PSYCHIATRY HOMEWORK", title_style),
Paragraph("1st Year Students • Kaplan & Sadock's Comprehensive Textbook of Psychiatry", subtitle_style),
]]
# Flatten: title on one row, subtitle on next
cover = Table([
[Paragraph("PSYCHIATRY HOMEWORK", title_style)],
[Paragraph("1st Year Students • Source: Kaplan & Sadock's Comprehensive Textbook of Psychiatry", subtitle_style)],
], colWidths=[17*cm])
cover.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("ROWPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 14),
("ROUNDEDCORNERS", [6]),
]))
story.append(cover)
story.append(Spacer(1, 0.5*cm))
task_colors = [NAVY, TEAL, colors.HexColor("#5c3a1a"), colors.HexColor("#3a1a5c"), colors.HexColor("#1a5c3a")]
# ═══════════════════════════════════════════════════════════════════════════════
# TASK 1 - Age of Onset
# ═══════════════════════════════════════════════════════════════════════════════
story.append(task_banner(1, "AGE OF ONSET OF PSYCHIATRIC DISORDERS", task_colors[0]))
story.append(Spacer(1, 0.25*cm))
onset_headers = ["Disorder", "Typical Age of Onset", "Key Notes"]
onset_data = [
["Unipolar Depression (MDD)", "Mean ~30-35 yrs; any age", "Peak 25-44 yrs; second peak in elderly"],
["Bipolar Depression", "Mean ~30 yrs (range 5-50 yrs)", "Earlier onset than unipolar; adolescent prevalence ~2%, rising to ~4% by age 18"],
["Mania (Bipolar I)", "Mean ~30 yrs", "Rare before puberty; most common in young adults"],
["Panic Disorder", "Late 20s", "Bimodal peaks: late adolescence & mid-30s; uncommon in children"],
["GAD", "Variable; 20s-30s", "Can begin in childhood; 'new' cases in elderly often represent continuation"],
["Specific Phobia", "Late childhood (~7-11 yrs)", "Earliest anxiety disorder onset; ~80% onset before age 14"],
["Social Anxiety Disorder", "Mid-teens (~13 yrs)", "~90% onset before age 25"],
["Agoraphobia", "Late teens to mid-20s", "May increase in late life in women"],
["OCD", "Mean ~19 yrs", "Males: childhood/early adolescence; Females: young adulthood; onset >30 is rare"],
["Schizophrenia", "Men: 15-25 yrs; Women: 25-35 yrs", "50% before age 25; onset <10 yrs (very rare); late-onset >45 yrs"],
["PDD / Autism Spectrum Disorder", "Early developmental period (<3 yrs)", "Usually detected by 18-24 months; >90% onset before age 14"],
["Somatoform Disorders", "Typically before age 30", "Conversion: any age; Hypochondriasis: 20-30 yrs"],
["Alzheimer's Dementia", "Usually >65 yrs", "Early-onset: 40-65 yrs; insidious onset, gradually progressive"],
["Vascular Dementia", "Typically >60 yrs", "Sudden onset; stepwise decline after vascular events"],
["ADHD", "Symptoms before age 12 (DSM-5)", "Typically noted at 3-7 yrs; >90% onset before age 14"],
["Conduct Disorder", "Childhood-onset: <10 yrs; Adolescent-onset: 10-18 yrs", "Childhood-onset has worse prognosis; M>F"],
]
story.append(make_table(onset_headers, onset_data, [4.5*cm, 4*cm, 8.5*cm]))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Memory Rule by Age Group:", subsection_style))
mem_data = [
["Childhood (<12 yrs)", "ASD, ADHD, Specific Phobia, Conduct Disorder, Separation Anxiety"],
["Adolescence (12-18 yrs)", "Social Phobia, OCD, Schizophrenia (men), Eating Disorders"],
["Young Adulthood (20-35 yrs)", "Panic Disorder, GAD, Bipolar Disorder, MDD, Schizophrenia (women)"],
["Late Life (>60 yrs)", "Dementia (Alzheimer's, Vascular), Late-onset Schizophrenia"],
]
t2 = Table(mem_data, colWidths=[5*cm, 12*cm])
t2.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,-1), PALE),
("BACKGROUND", (1,0), (1,-1), WHITE),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")),
("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"),
("FONTNAME", (1,0), (1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("ROWPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(t2)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# TASK 2 - Sex Differences
# ═══════════════════════════════════════════════════════════════════════════════
story.append(task_banner(2, "DISORDERS COMMON IN FEMALES vs. MALES", task_colors[1]))
story.append(Spacer(1, 0.25*cm))
story.append(Paragraph("More Common in FEMALES (F > M)", subsection_style))
female_data = [
["Major Depressive Disorder", "2:1 (F:M)", "Hormonal factors, psychosocial stress"],
["Panic Disorder with Agoraphobia", "2:1", "Higher rates of agoraphobia in women"],
["Specific Phobia", "2:1", "All subtypes except blood-injection type"],
["GAD", "2:1", "Consistent across cultures"],
["PTSD", "2:1", "Higher exposure to sexual violence"],
["Somatization Disorder", "~10:1", "Almost exclusively female; Briquet's syndrome"],
["Borderline Personality Disorder", "3:1", "Emotional dysregulation, trauma history"],
["Anorexia Nervosa", "10-20:1", "Most female-predominant psychiatric disorder"],
["Bulimia Nervosa", "~10:1", "Young women; body image issues"],
["Conversion Disorder", "2-5:1", "Psychogenic neurological symptoms"],
]
story.append(make_table(["Disorder", "F:M Ratio", "Notes"], female_data,
[5.5*cm, 3*cm, 8.5*cm], alt_color=colors.HexColor("#fde8f0"), head_color=colors.HexColor("#8b1a4a")))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("More Common in MALES (M > F)", subsection_style))
male_data = [
["ASD / Autism", "4:1 (M:F)", "Consistent across studies; biological basis"],
["ADHD", "~3:1", "More hyperactive-impulsive type in boys"],
["Conduct Disorder", "~3:1", "Aggression, antisocial behavior"],
["Antisocial Personality Disorder", "3:1", "Deceit, aggression, disregard for rules"],
["Paraphilias", "M >> F", "Nearly exclusively male"],
["Alcohol & Substance Use Disorders", "~2:1", "Closing gender gap in recent decades"],
["OCD (childhood onset)", "M > F", "Males have earlier, more severe childhood onset"],
["Schizophrenia", "Equal prevalence; earlier in men", "Men: 15-25 yrs; Women: 25-35 yrs; men more severe"],
]
story.append(make_table(["Disorder", "M:F Ratio", "Notes"], male_data,
[5.5*cm, 3.5*cm, 8*cm], alt_color=colors.HexColor("#e8f0fd"), head_color=colors.HexColor("#1a3a8b")))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Equal Prevalence (F ≈ M)", subsection_style))
eq_data = [
["Bipolar I Disorder", "1:1", "Episodes differ: more depressive in women, more manic in men"],
["OCD (overall lifetime)", "1:1", "Equal overall; sex differences in onset age and symptom type"],
["Schizophrenia", "1:1", "Prevalence equal; course and onset age differ"],
]
story.append(make_table(["Disorder", "Ratio", "Notes"], eq_data,
[5.5*cm, 3*cm, 8.5*cm], alt_color=LIGHT, head_color=TEAL))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# TASK 3 - Onset Clarification
# ═══════════════════════════════════════════════════════════════════════════════
story.append(task_banner(3, "ONSET CLARIFICATION", task_colors[2]))
story.append(Spacer(1, 0.25*cm))
story.append(Paragraph(
'In psychiatric history-taking, the examiner asks: "Did symptoms begin suddenly or gradually?" '
'(Kaplan & Sadock Table 7.2-1). ICD-11 formally classifies onset as a course qualifier: '
'<b>acute versus insidious onset</b>.', body_style))
story.append(Spacer(1, 0.2*cm))
onset_def_data = [
["Sudden\nOnset",
"Minutes to hours",
"Yes — explosive, near-instantaneous",
"Acute dystonia (minutes after dopamine blockade), PANS/PANDAS, CVA-related aphasia, seizure aura, metabolic crisis",
"Strongly suggests organic/medical etiology. Rule out drug toxicity, vascular event, metabolic emergency."],
["Acute\nOnset",
"Hours to a few days",
"Yes — clear start date identifiable",
"Delirium, Acute & Transient Psychotic Disorder (ATPD), manic episode, acute stress reaction",
"Acute onset in psychosis = better prognosis, more remitting course, better pre-morbid functioning (K&S block21)."],
["Insidious\nOnset",
"Weeks to months/years",
"No — gradual, imperceptible start",
"Schizophrenia ('no clear date of first manifestation'), Alzheimer's dementia, dysthymia, somatoform disorders, adrenal insufficiency",
"Poor prognostic factor in schizophrenia. Linked to negative symptoms, neurodevelopmental model, unremitting course."],
]
onset_def_headers = ["Type", "Timeframe", "Start\nIdentifiable?", "Clinical Examples", "Significance"]
onset_def_col_w = [2.2*cm, 2.8*cm, 2.8*cm, 4.5*cm, 4.7*cm]
table_data = []
header = [Paragraph(f"<b><font color='white'>{h}</font></b>",
ParagraphStyle("th2", parent=styles["Normal"], fontSize=8.5,
fontName="Helvetica-Bold", textColor=WHITE, leading=11))
for h in onset_def_headers]
table_data.append(header)
row_colors = [colors.HexColor("#fff0e8"), colors.HexColor("#e8f8ff"), colors.HexColor("#e8f0e8")]
for i, row in enumerate(onset_def_data):
styled_row = [Paragraph(str(cell),
ParagraphStyle("td2", parent=styles["Normal"], fontSize=8.5,
fontName="Helvetica", leading=11, textColor=colors.HexColor("#111111")))
for cell in row]
table_data.append(styled_row)
t_onset = Table(table_data, colWidths=onset_def_col_w, repeatRows=1)
t_onset.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#5c3a1a")),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#bbbbbb")),
("ROWPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 5),
("RIGHTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "TOP"),
("BACKGROUND", (0,1), (-1,1), row_colors[0]),
("BACKGROUND", (0,2), (-1,2), row_colors[1]),
("BACKGROUND", (0,3), (-1,3), row_colors[2]),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
]))
story.append(t_onset)
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# TASK 4 - Secondary Causes
# ═══════════════════════════════════════════════════════════════════════════════
story.append(task_banner(4, "SECONDARY CAUSES (EXCLUDING SUBSTANCE-INDUCED)", task_colors[3]))
story.append(Spacer(1, 0.25*cm))
story.append(Paragraph(
"Secondary psychiatric disorders arise from an identifiable medical/physiological cause. "
"Always perform medical workup for new-onset psychiatric symptoms, especially in patients "
"with atypical features, older age, or no family psychiatric history.", body_style))
story.append(Spacer(1, 0.2*cm))
# 4A Depression
story.append(Paragraph("A. Secondary DEPRESSION (Depressive Disorder Due to Another Medical Condition)", subsection_style))
dep_data = [
["1", "Hypothyroidism", "'Myxedema madness' — fatigue, depression, suicidal ideation; can mimic schizophrenia with delusions/hallucinations. Reversed by thyroid hormone replacement."],
["2", "Cushing's Syndrome\n(Hypercortisolism)", "Agitated depression, cognitive deficits, suicidality. Physical signs: moon face, buffalo hump, truncal obesity, purple striae."],
["3", "Parkinson's Disease", "Depression in ~40-50%; dopamine/serotonin depletion. Can precede motor symptoms."],
["4", "Stroke / CVA", "Post-stroke depression; left anterior frontal lesions most strongly associated."],
["5", "Pancreatic Carcinoma", "Depression classically precedes diagnosis; possibly paraneoplastic mechanism."],
["6", "HIV/AIDS", "Direct CNS involvement; also reactive depression to diagnosis/disease progression."],
["7", "Addison's Disease\n(Adrenal insufficiency)", "Insidious fatigue, depression, anorexia, weight loss, hyperpigmentation."],
["8", "SLE / Autoimmune disease", "CNS lupus; also corticosteroid-induced depression after treatment."],
]
story.append(make_table(["#", "Cause", "Key Features"], dep_data, [0.8*cm, 4.2*cm, 12*cm],
alt_color=colors.HexColor("#f0e8f8"), head_color=colors.HexColor("#3a1a5c")))
story.append(Spacer(1, 0.3*cm))
# 4B Anxiety
story.append(Paragraph("B. Secondary ANXIETY (Anxiety Disorder Due to Another Medical Condition)", subsection_style))
anx_data = [
["1", "Hyperthyroidism", "Palpitations, tremor, anxiety, panic-like episodes; TSH low, T3/T4 elevated."],
["2", "Pheochromocytoma", "Classic mimic of panic disorder — episodic hypertension, sweating, palpitations, intense anxiety; check urinary catecholamines."],
["3", "Hypoglycemia", "Episodic anxiety, tremor, diaphoresis; check fasting glucose."],
["4", "Cardiac Arrhythmias\n(SVT, PSVT)", "Palpitations mistaken for panic attacks; ECG/Holter essential."],
["5", "COPD / Pulmonary Embolism", "Dyspnea, air hunger driving anxiety and panic; check O2 sat, D-dimer."],
["6", "Temporal Lobe Epilepsy", "Ictal fear and panic-like auras; EEG diagnosis."],
["7", "Hyperparathyroidism\n/ Hypercalcemia", "Anxiety, depression, cognitive symptoms; check serum calcium/PTH."],
]
story.append(make_table(["#", "Cause", "Key Features"], anx_data, [0.8*cm, 4.2*cm, 12*cm],
alt_color=colors.HexColor("#e8f0f8"), head_color=colors.HexColor("#1a3a5c")))
story.append(Spacer(1, 0.3*cm))
# 4C OCD
story.append(Paragraph("C. Secondary OCD-like Symptoms", subsection_style))
ocd_data = [
["1", "Basal Ganglia Disorders\n(Huntington's, Sydenham's chorea)", "Striatal dysfunction → compulsive behaviors; OCD often precedes chorea in Huntington's."],
["2", "PANDAS / PANS", "Streptococcal infection → antibody-mediated basal ganglia damage → sudden explosive OCD onset in children."],
["3", "Traumatic Brain Injury\n(Frontal/Orbital lesions)", "Orbitofrontal-striatal circuit disruption → compulsive, repetitive behaviors."],
["4", "Tourette's Syndrome", "High OCD comorbidity (40-60%); shared dopaminergic/serotonergic pathways."],
["5", "Anti-NMDA Receptor Encephalitis", "OCD-like behaviors prominent in prodromal phase; predominantly affects young women."],
["6", "Temporal Lobe Epilepsy", "Interictal OCD-spectrum symptoms; 'viscous' personality with religiosity and scrupulosity."],
]
story.append(make_table(["#", "Cause", "Key Features"], ocd_data, [0.8*cm, 4.5*cm, 11.7*cm],
alt_color=colors.HexColor("#f8f0e8"), head_color=colors.HexColor("#5c3a1a")))
story.append(PageBreak())
# 4D Psychosis
story.append(task_banner(4, "SECONDARY CAUSES (CONT.) — PSYCHOSIS", task_colors[3]))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("D. Secondary PSYCHOSIS (Psychotic Disorder Due to Another Medical Condition)", subsection_style))
psy_data = [
["1", "Temporal Lobe Epilepsy", "Interictal psychosis resembling schizophrenia; personality relatively preserved; auditory/olfactory hallucinations."],
["2", "CNS Tumors / Space-Occupying Lesions", "Frontal & temporal lobe tumors → hallucinations, personality change; suspect with new-onset psychosis + neurological signs."],
["3", "Hypothyroidism ('Myxedema madness')", "Thought disorder, delusions, hallucinations, paranoia; reversed with levothyroxine."],
["4", "Anti-NMDA Receptor Encephalitis\n/ SLE", "Young women; psychosis + dyskinesias + autonomic instability; check anti-NMDA antibodies, ANA/anti-dsDNA."],
["5", "Neurosyphilis", "The 'Great Imitator' — grandiose delusions, hallucinations, personality change; check VDRL/TPHA."],
["6", "Wilson's Disease", "Copper deposition in brain; psychosis can precede movement disorder in young adults; check ceruloplasmin, slit-lamp."],
["7", "Huntington's Disease", "Psychosis, personality change, depression can precede chorea by years; autosomal dominant."],
["8", "HIV Encephalopathy", "Direct CNS viral invasion; psychosis, cognitive decline, motor features."],
]
story.append(make_table(["#", "Cause", "Key Features"], psy_data, [0.8*cm, 4.5*cm, 11.7*cm],
alt_color=colors.HexColor("#f0e8f8"), head_color=colors.HexColor("#3a1a5c")))
story.append(PageBreak())
# ═══════════════════════════════════════════════════════════════════════════════
# TASK 5 - Libido
# ═══════════════════════════════════════════════════════════════════════════════
story.append(task_banner(5, "LIBIDO — DEFINITION & CLINICAL QUESTIONS", task_colors[4]))
story.append(Spacer(1, 0.25*cm))
story.append(Paragraph("Definition", subsection_style))
story.append(Paragraph(
"<b>Libido</b> (from Latin: <i>libīdo</i>, 'lust, desire') is the <b>psychological and biological drive "
"for sexual activity</b> — the desire, motivation, or appetite for sex.", body_style))
story.append(Spacer(1, 0.1*cm))
lib_def_data = [
["Freudian definition",
"Originally referred to psychosexual energy specifically tied to sexual needs. "
"Freud later expanded it to a universal life energy ('life instinct'/Eros), with the id as its 'great reservoir'."],
["Jungian definition",
"Carl Jung identified libido with psychic energy in general — 'appetite in its natural state... "
"bodily needs like hunger, thirst, sleep, and sex, and emotional states or affects.' "
"Manifests through five instincts: hunger, sexuality, activity, reflection, and creativity."],
["Clinical/DSM definition",
"Sexual desire/drive. Clinically assessed as: Normal, Decreased (Hypoactive Sexual Desire Disorder — HSDD), "
"or Increased (hypersexuality, seen in mania/frontal disinhibition)."],
]
t_lib = Table(lib_def_data, colWidths=[4*cm, 13*cm])
t_lib.setStyle(TableStyle([
("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"),
("FONTNAME", (1,0), (1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("BACKGROUND", (0,0), (0,-1), colors.HexColor("#e8f8f0")),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")),
("ROWPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(t_lib)
story.append(Spacer(1, 0.25*cm))
story.append(Paragraph(
"<b>Clinical relevance:</b> Decreased libido is a key biological symptom of <b>depression</b>, "
"a side effect of SSRIs/SNRIs, antipsychotics, antihypertensives, and OCPs, and is affected by "
"testosterone/estrogen levels, relationship factors, and chronic illness.", note_style))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Questions to Ask About Libido", subsection_style))
story.append(Paragraph(
"Organized as per Kaplan & Sadock's Sexual History framework (Table 1-3, Synopsis):", body_style))
story.append(Spacer(1, 0.1*cm))
q_data = [
["SCREENING",
"1. 'Are you currently sexually active?'\n"
"2. 'Have you noticed any changes or problems with sex recently?'\n"
"3. 'Has your interest in sex changed?'"],
["DESIRE PHASE\n(Libido directly)",
"4. 'Do you experience sexual thoughts or fantasies? How often?'\n"
"5. 'Do you feel a desire for sex? Has that changed recently?'\n"
"6. 'Who initiates sex — you, your partner, or is it mutual?'\n"
"7. 'Has your interest in sex decreased, increased, or stayed the same compared to before?'"],
["CONTEXT\n& DURATION",
"8. 'When did you first notice a change in your sexual desire?'\n"
"9. 'Is the change constant or does it vary (e.g., only with this partner)?'\n"
"10. 'Is there no desire at all, or desire without arousal?'"],
["ASSOCIATED\nFACTORS",
"11. 'Do you feel tired, low in mood, or lacking energy?' (Screen for depression)\n"
"12. 'Are you on any medications?' (SSRIs, antipsychotics, antihypertensives, OCPs)\n"
"13. 'Any recent medical problems?' (Thyroid, diabetes, hormonal changes)\n"
"14. 'Have you been under major stress or had relationship difficulties?'"],
["EXCITEMENT\n& ORGASM\n(Complete sexual\nstatus exam)",
"15. 'Do you have difficulty with arousal?' (erections/lubrication during foreplay)\n"
"16. 'Do you reach orgasm? Too soon or not at all?'\n"
"17. 'Is there pain during sex?'"],
["IN DEPRESSION\n(Neurovegetative\nsymptom)",
"Ask as part of biological symptoms of depression:\n"
"'Do you still find yourself interested in activities you used to enjoy — including sex?'\n"
"Also screen for medication-induced libido changes: 'Has your sex drive changed since starting [drug name]?'"],
]
t_q = Table(q_data, colWidths=[3.5*cm, 13.5*cm])
t_q.setStyle(TableStyle([
("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"),
("FONTNAME", (1,0), (1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
("BACKGROUND", (0,0), (0,-1), colors.HexColor("#1a5c3a")),
("TEXTCOLOR", (0,0), (0,-1), WHITE),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#aaaaaa")),
("ROWPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
("BACKGROUND", (1,0), (1,-1), WHITE),
("ROWBACKGROUNDS", (1,0), (1,-1), [WHITE, PALE]),
]))
for i in range(len(q_data)):
bg = PALE if i % 2 == 0 else WHITE
t_q.setStyle(TableStyle([("BACKGROUND", (1,i), (1,i), bg)]))
story.append(t_q)
story.append(Spacer(1, 0.5*cm))
story.append(HRFlowable(width="100%", thickness=0.5, color=DGRAY))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph(
"Sources: Kaplan & Sadock's Comprehensive Textbook of Psychiatry (ISBN 9781975175733) | "
"Kaplan & Sadock's Synopsis of Psychiatry (2021) | "
"Kaplan & Sadock's Pocket Handbook of Clinical Psychiatry | "
"PMC meta-analysis on age of onset of mental disorders (PMC8960395)",
source_style))
# Build PDF
doc.build(story)
print(f"PDF generated: {OUTPUT}")
cd /home/daytona/workspace/psych-homework && python3 generate_pdf.py 2>&1
ls -lh /home/daytona/workspace/psych-homework/Psychiatry_Homework_1st_Year.pdf
Psychiatry Homework 1st Year
PDF Document · PDF
you can convert this to MS word?
ls /home/daytona/skills/docx/scripts/office/ && node --version && npm list -g docx 2>/dev/null | head -5
~/psych-homework/generate_docx.js
const {
Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
HeadingLevel, AlignmentType, BorderStyle, WidthType, ShadingType,
VerticalAlign, PageBreak, Header, Footer, PageNumber,
NumberFormat, convertInchesToTwip, UnderlineType
} = require('docx');
const fs = require('fs');
const OUTPUT = '/home/daytona/workspace/psych-homework/Psychiatry_Homework_1st_Year.docx';
// ── Colour palette ──────────────────────────────────────────────────────────
const NAVY = "1A3A5C";
const TEAL = "0D6E6E";
const PURPLE = "3A1A5C";
const BROWN = "5C3A1A";
const GREEN = "1A5C3A";
const WHITE = "FFFFFF";
const LGRAY = "F5F5F5";
const LBLUE = "E8F4F8";
const LGREEN = "F0F8F0";
const LPUR = "F0E8F8";
const LPINK = "FDE8F0";
const LORANG = "FFF0E8";
// ── Helpers ──────────────────────────────────────────────────────────────────
function shading(fill, type = ShadingType.CLEAR) {
return { type, color: "auto", fill };
}
function cell(text, opts = {}) {
const {
bold = false, color = "111111", bg = WHITE, width,
colSpan = 1, vAlign = VerticalAlign.TOP, italic = false,
fontSize = 19 // half-points: 19 = 9.5pt
} = opts;
const runs = [];
const lines = String(text).split('\n');
lines.forEach((line, i) => {
if (i > 0) runs.push(new TextRun({ break: 1 }));
runs.push(new TextRun({ text: line, bold, color, italics: italic, size: fontSize, font: "Calibri" }));
});
return new TableCell({
children: [new Paragraph({ children: runs, spacing: { before: 40, after: 40 } })],
shading: shading(bg),
columnSpan: colSpan,
verticalAlign: vAlign,
margins: { top: 80, bottom: 80, left: 110, right: 110 },
...(width ? { width: { size: width, type: WidthType.DXA } } : {}),
});
}
function headerRow(cells_data, bgColor, colWidths) {
return new TableRow({
tableHeader: true,
children: cells_data.map((txt, i) =>
cell(txt, { bold: true, color: WHITE, bg: bgColor, width: colWidths[i], fontSize: 19 })
),
});
}
function dataRow(cells_data, colWidths, bg = WHITE) {
return new TableRow({
children: cells_data.map((txt, i) =>
cell(txt, { bg, width: colWidths[i], fontSize: 18 })
),
});
}
function makeTable(headers, rows, colWidths, headBg = NAVY, altBg = LBLUE) {
const tableRows = [headerRow(headers, headBg, colWidths)];
rows.forEach((row, i) => {
tableRows.push(dataRow(row, colWidths, i % 2 === 0 ? WHITE : altBg));
});
return new Table({
rows: tableRows,
width: { size: 100, type: WidthType.PERCENTAGE },
borders: {
top: { style: BorderStyle.SINGLE, size: 4, color: "AAAAAA" },
bottom: { style: BorderStyle.SINGLE, size: 4, color: "AAAAAA" },
left: { style: BorderStyle.SINGLE, size: 4, color: "AAAAAA" },
right: { style: BorderStyle.SINGLE, size: 4, color: "AAAAAA" },
insideH:{ style: BorderStyle.SINGLE, size: 4, color: "CCCCCC" },
insideV:{ style: BorderStyle.SINGLE, size: 4, color: "CCCCCC" },
},
});
}
function taskBanner(num, title, bgColor = NAVY) {
return new Table({
rows: [new TableRow({
children: [new TableCell({
children: [new Paragraph({
children: [
new TextRun({ text: `TASK ${num} | `, bold: true, color: WHITE, size: 26, font: "Calibri" }),
new TextRun({ text: title, bold: true, color: "DDEEEE", size: 24, font: "Calibri" }),
],
spacing: { before: 60, after: 60 },
})],
shading: shading(bgColor),
margins: { top: 100, bottom: 100, left: 160, right: 160 },
})],
})],
width: { size: 100, type: WidthType.PERCENTAGE },
borders: {
top: { style: BorderStyle.NONE },
bottom: { style: BorderStyle.NONE },
left: { style: BorderStyle.NONE },
right: { style: BorderStyle.NONE },
insideH:{ style: BorderStyle.NONE },
insideV:{ style: BorderStyle.NONE },
},
});
}
function heading(text, level = HeadingLevel.HEADING_2, color = TEAL) {
return new Paragraph({
heading: level,
children: [new TextRun({ text, bold: true, color, size: 22, font: "Calibri" })],
spacing: { before: 160, after: 60 },
});
}
function subheading(text, color = NAVY) {
return new Paragraph({
children: [new TextRun({ text, bold: true, color, size: 20, font: "Calibri" })],
spacing: { before: 120, after: 60 },
});
}
function body(text) {
return new Paragraph({
children: [new TextRun({ text, size: 19, font: "Calibri", color: "222222" })],
spacing: { before: 40, after: 60 },
});
}
function note(text) {
return new Table({
rows: [new TableRow({
children: [new TableCell({
children: [new Paragraph({
children: [new TextRun({ text, size: 18, font: "Calibri", color: "555555", italics: true })],
spacing: { before: 40, after: 40 },
})],
shading: shading("FFFBF0"),
margins: { top: 80, bottom: 80, left: 120, right: 120 },
borders: {
left: { style: BorderStyle.THICK, size: 12, color: "C8860A" },
top: { style: BorderStyle.NONE }, bottom: { style: BorderStyle.NONE }, right: { style: BorderStyle.NONE },
},
})],
})],
width: { size: 100, type: WidthType.PERCENTAGE },
borders: { top:{style:BorderStyle.NONE}, bottom:{style:BorderStyle.NONE}, left:{style:BorderStyle.NONE}, right:{style:BorderStyle.NONE}, insideH:{style:BorderStyle.NONE}, insideV:{style:BorderStyle.NONE} },
});
}
function sp(n = 1) {
return new Paragraph({ children: [new TextRun("")], spacing: { before: 0, after: n * 80 } });
}
function pageBreak() {
return new Paragraph({ children: [new PageBreak()] });
}
// ── COVER ────────────────────────────────────────────────────────────────────
const cover = [
new Table({
rows: [
new TableRow({ children: [new TableCell({
children: [
new Paragraph({
alignment: AlignmentType.CENTER,
children: [new TextRun({ text: "PSYCHIATRY HOMEWORK", bold: true, color: WHITE, size: 52, font: "Calibri" })],
spacing: { before: 120, after: 60 },
}),
new Paragraph({
alignment: AlignmentType.CENTER,
children: [new TextRun({ text: "1st Year Students • Kaplan & Sadock's Comprehensive Textbook of Psychiatry", color: "CCDDEE", size: 20, font: "Calibri" })],
spacing: { before: 0, after: 120 },
}),
],
shading: shading(NAVY),
margins: { top: 160, bottom: 160, left: 200, right: 200 },
})]})
],
width: { size: 100, type: WidthType.PERCENTAGE },
borders: { top:{style:BorderStyle.NONE}, bottom:{style:BorderStyle.NONE}, left:{style:BorderStyle.NONE}, right:{style:BorderStyle.NONE}, insideH:{style:BorderStyle.NONE}, insideV:{style:BorderStyle.NONE} },
}),
sp(2),
];
// ── TASK 1 ──────────────────────────────────────────────────────────────────
const task1 = [
taskBanner(1, "AGE OF ONSET OF PSYCHIATRIC DISORDERS", NAVY), sp(),
makeTable(
["Disorder", "Typical Age of Onset", "Key Notes"],
[
["Unipolar Depression (MDD)", "Mean ~30-35 yrs; any age", "Peak 25-44 yrs; second peak in elderly"],
["Bipolar Depression", "Mean ~30 yrs (range 5-50 yrs)", "Earlier onset than unipolar; adolescent prevalence ~2%, rising to ~4% by age 18"],
["Mania (Bipolar I)", "Mean ~30 yrs", "Rare before puberty; most common in young adults"],
["Panic Disorder", "Late 20s", "Bimodal peaks: late adolescence & mid-30s; uncommon in children"],
["GAD", "Variable; 20s-30s", "Can begin in childhood; 'new' elderly cases often represent continuation"],
["Specific Phobia", "Late childhood (~7-11 yrs)", "Earliest anxiety disorder onset; ~80% onset before age 14"],
["Social Anxiety Disorder", "Mid-teens (~13 yrs)", "~90% onset before age 25"],
["Agoraphobia", "Late teens to mid-20s", "May increase in late life in women"],
["OCD", "Mean ~19 yrs", "Males: childhood/early adolescence; Females: young adulthood; onset >30 rare"],
["Schizophrenia", "Men: 15-25 yrs; Women: 25-35 yrs", "50% before age 25; onset <10 yrs (very rare); late-onset >45 yrs"],
["PDD / Autism Spectrum Disorder", "Early developmental period (<3 yrs)", "Usually detected by 18-24 months; >90% onset before age 14"],
["Somatoform Disorders", "Typically before age 30", "Conversion: any age; Hypochondriasis: 20-30 yrs"],
["Alzheimer's Dementia", "Usually >65 yrs", "Early-onset: 40-65 yrs; insidious, gradually progressive"],
["Vascular Dementia", "Typically >60 yrs", "Sudden onset; stepwise decline after vascular events"],
["ADHD", "Symptoms before age 12 (DSM-5)", "Typically noted at 3-7 yrs; >90% onset before age 14"],
["Conduct Disorder", "Childhood-onset: <10 yrs; Adolescent-onset: 10-18 yrs", "Childhood-onset has worse prognosis; M>F"],
],
[convertInchesToTwip(1.9), convertInchesToTwip(1.6), convertInchesToTwip(3.5)],
NAVY, LBLUE
),
sp(), subheading("Memory Rule by Age Group", TEAL),
makeTable(
["Age Group", "Disorders"],
[
["Childhood (<12 yrs)", "ASD, ADHD, Specific Phobia, Conduct Disorder, Separation Anxiety"],
["Adolescence (12-18 yrs)", "Social Phobia, OCD, Schizophrenia (men), Eating Disorders"],
["Young Adulthood (20-35 yrs)", "Panic Disorder, GAD, Bipolar Disorder, MDD, Schizophrenia (women)"],
["Late Life (>60 yrs)", "Dementia (Alzheimer's, Vascular), Late-onset Schizophrenia"],
],
[convertInchesToTwip(2.0), convertInchesToTwip(5.0)],
TEAL, LGREEN
),
pageBreak(),
];
// ── TASK 2 ──────────────────────────────────────────────────────────────────
const task2 = [
taskBanner(2, "DISORDERS COMMON IN FEMALES vs. MALES", TEAL), sp(),
subheading("More Common in FEMALES (F > M)", "8B1A4A"),
makeTable(
["Disorder", "F:M Ratio", "Notes"],
[
["Major Depressive Disorder", "2:1", "Hormonal factors, psychosocial stress"],
["Panic Disorder with Agoraphobia", "2:1", "Higher rates of agoraphobia in women"],
["Specific Phobia", "2:1", "All subtypes except blood-injection type"],
["GAD", "2:1", "Consistent across cultures"],
["PTSD", "2:1", "Higher exposure to sexual violence"],
["Somatization Disorder", "~10:1", "Almost exclusively female; Briquet's syndrome"],
["Borderline Personality Disorder", "3:1", "Emotional dysregulation, trauma history"],
["Anorexia Nervosa", "10-20:1", "Most female-predominant psychiatric disorder"],
["Bulimia Nervosa", "~10:1", "Young women; body image issues"],
["Conversion Disorder", "2-5:1", "Psychogenic neurological symptoms"],
],
[convertInchesToTwip(2.2), convertInchesToTwip(1.2), convertInchesToTwip(3.6)],
"8B1A4A", LPINK
),
sp(), subheading("More Common in MALES (M > F)", "1A3A8B"),
makeTable(
["Disorder", "M:F Ratio", "Notes"],
[
["ASD / Autism", "4:1", "Consistent across studies; biological basis"],
["ADHD", "~3:1", "More hyperactive-impulsive type in boys"],
["Conduct Disorder", "~3:1", "Aggression, antisocial behaviour"],
["Antisocial Personality Disorder", "3:1", "Deceit, aggression, disregard for rules"],
["Paraphilias", "M >> F", "Nearly exclusively male"],
["Alcohol & Substance Use Disorders", "~2:1", "Closing gender gap in recent decades"],
["OCD (childhood onset)", "M > F", "Males have earlier, more severe childhood onset"],
["Schizophrenia", "Equal prevalence; earlier in men", "Men: 15-25 yrs; Women: 25-35 yrs; men more severe course"],
],
[convertInchesToTwip(2.2), convertInchesToTwip(1.6), convertInchesToTwip(3.2)],
"1A3A8B", "E8F0FD"
),
sp(), subheading("Equal Prevalence (F ≈ M)", TEAL),
makeTable(
["Disorder", "Ratio", "Notes"],
[
["Bipolar I Disorder", "1:1", "Episodes differ: more depressive in women, more manic in men"],
["OCD (overall lifetime)", "1:1", "Equal overall; sex differences in onset age and symptom type"],
["Schizophrenia", "1:1", "Prevalence equal; course and onset age differ"],
],
[convertInchesToTwip(2.2), convertInchesToTwip(1.2), convertInchesToTwip(3.6)],
TEAL, LBLUE
),
pageBreak(),
];
// ── TASK 3 ──────────────────────────────────────────────────────────────────
const task3 = [
taskBanner(3, "ONSET CLARIFICATION", BROWN), sp(),
body('In psychiatric history-taking, the examiner asks: "Did symptoms begin suddenly or gradually?" (Kaplan & Sadock Table 7.2-1). ICD-11 formally classifies onset as a course qualifier: acute versus insidious onset.'),
sp(),
makeTable(
["Type", "Timeframe", "Start Identifiable?", "Clinical Examples", "Significance"],
[
["SUDDEN\nONSET", "Minutes to hours", "Yes — explosive, near-instantaneous",
"Acute dystonia, PANS/PANDAS, stroke-related aphasia, seizure aura, metabolic crisis",
"Strongly suggests organic/medical etiology. Rule out drug toxicity, vascular event, metabolic emergency."],
["ACUTE\nONSET", "Hours to a few days", "Yes — clear start date identifiable",
"Delirium, ATPD, manic episode, acute stress reaction",
"Acute onset in psychosis = better prognosis, more remitting course, better pre-morbid functioning."],
["INSIDIOUS\nONSET", "Weeks to months/years", "No — gradual, imperceptible start",
"Schizophrenia ('no clear date of first manifestation'), Alzheimer's, dysthymia, somatoform disorders",
"Poor prognostic factor in schizophrenia. Linked to negative symptoms, unremitting course."],
],
[convertInchesToTwip(0.9), convertInchesToTwip(1.0), convertInchesToTwip(1.2), convertInchesToTwip(1.8), convertInchesToTwip(2.1)],
BROWN, LORANG
),
pageBreak(),
];
// ── TASK 4 ──────────────────────────────────────────────────────────────────
const task4 = [
taskBanner(4, "SECONDARY CAUSES (EXCLUDING SUBSTANCE-INDUCED)", PURPLE), sp(),
body("Secondary psychiatric disorders arise from an identifiable medical/physiological cause. Always perform medical workup for new-onset psychiatric symptoms, especially with atypical features, older age, or no family psychiatric history."),
sp(),
subheading("A. Secondary DEPRESSION (Depressive Disorder Due to Another Medical Condition)", PURPLE),
makeTable(
["#", "Cause", "Key Features"],
[
["1", "Hypothyroidism ('Myxedema madness')", "Fatigue, depression, suicidal ideation; can mimic schizophrenia with delusions/hallucinations. Reversed by levothyroxine."],
["2", "Cushing's Syndrome (Hypercortisolism)", "Agitated depression, cognitive deficits, suicidality. Physical signs: moon face, buffalo hump, truncal obesity, purple striae."],
["3", "Parkinson's Disease", "Depression in ~40-50%; dopamine/serotonin depletion. Can precede motor symptoms."],
["4", "Stroke / CVA", "Post-stroke depression; left anterior frontal lesions most strongly associated."],
["5", "Pancreatic Carcinoma", "Depression classically precedes diagnosis; possibly paraneoplastic mechanism."],
["6", "HIV/AIDS", "Direct CNS involvement; also reactive depression to diagnosis/disease progression."],
["7", "Addison's Disease (Adrenal insufficiency)", "Insidious fatigue, depression, anorexia, weight loss, hyperpigmentation."],
["8", "SLE / Autoimmune disease", "CNS lupus; also corticosteroid-induced depression after treatment."],
],
[convertInchesToTwip(0.4), convertInchesToTwip(2.0), convertInchesToTwip(4.6)],
PURPLE, LPUR
),
sp(), subheading("B. Secondary ANXIETY (Anxiety Disorder Due to Another Medical Condition)", NAVY),
makeTable(
["#", "Cause", "Key Features"],
[
["1", "Hyperthyroidism", "Palpitations, tremor, anxiety, panic-like episodes; TSH low, T3/T4 elevated."],
["2", "Pheochromocytoma", "Classic mimic of panic disorder — episodic hypertension, sweating, palpitations; check urinary catecholamines."],
["3", "Hypoglycemia", "Episodic anxiety, tremor, diaphoresis; check fasting glucose."],
["4", "Cardiac Arrhythmias (SVT, PSVT)", "Palpitations mistaken for panic attacks; ECG/Holter essential."],
["5", "COPD / Pulmonary Embolism", "Dyspnoea, air hunger driving anxiety and panic; check O2 saturation, D-dimer."],
["6", "Temporal Lobe Epilepsy", "Ictal fear and panic-like auras; EEG diagnosis."],
["7", "Hyperparathyroidism / Hypercalcaemia", "Anxiety, depression, cognitive symptoms; check serum calcium/PTH."],
],
[convertInchesToTwip(0.4), convertInchesToTwip(2.0), convertInchesToTwip(4.6)],
NAVY, LBLUE
),
sp(), subheading("C. Secondary OCD-like Symptoms", BROWN),
makeTable(
["#", "Cause", "Key Features"],
[
["1", "Basal Ganglia Disorders (Huntington's, Sydenham's chorea)", "Striatal dysfunction drives compulsive behaviour; OCD often precedes chorea in Huntington's."],
["2", "PANDAS / PANS", "Strep infection → antibody-mediated basal ganglia damage → sudden explosive OCD onset in children."],
["3", "TBI (Frontal/Orbital lesions)", "Orbitofrontal-striatal circuit disruption → compulsive, repetitive behaviours."],
["4", "Tourette's Syndrome", "High OCD comorbidity (40-60%); shared dopaminergic/serotonergic pathways."],
["5", "Anti-NMDA Receptor Encephalitis", "OCD-like behaviours prominent in prodrome; predominantly young women."],
["6", "Temporal Lobe Epilepsy", "Interictal OCD-spectrum symptoms; viscous personality with religiosity."],
],
[convertInchesToTwip(0.4), convertInchesToTwip(2.2), convertInchesToTwip(4.4)],
BROWN, LORANG
),
sp(), subheading("D. Secondary PSYCHOSIS (Psychotic Disorder Due to Another Medical Condition)", PURPLE),
makeTable(
["#", "Cause", "Key Features"],
[
["1", "Temporal Lobe Epilepsy", "Interictal psychosis resembling schizophrenia; personality relatively preserved; auditory/olfactory hallucinations."],
["2", "CNS Tumours / Space-Occupying Lesions", "Frontal & temporal lobe tumours → hallucinations, personality change; new-onset psychosis + neurological signs."],
["3", "Hypothyroidism ('Myxedema madness')", "Thought disorder, delusions, hallucinations, paranoia; reversed with levothyroxine."],
["4", "Anti-NMDA Receptor Encephalitis / SLE", "Young women; psychosis + dyskinesias + autonomic instability; check anti-NMDA antibodies, ANA/anti-dsDNA."],
["5", "Neurosyphilis", "The 'Great Imitator' — grandiose delusions, hallucinations, personality change; check VDRL/TPHA."],
["6", "Wilson's Disease", "Copper deposition; psychosis precedes movement disorder in young adults; check ceruloplasmin, slit-lamp."],
["7", "Huntington's Disease", "Psychosis and personality change can precede chorea by years; autosomal dominant."],
["8", "HIV Encephalopathy", "Direct CNS viral invasion; psychosis, cognitive decline, motor features."],
],
[convertInchesToTwip(0.4), convertInchesToTwip(2.2), convertInchesToTwip(4.4)],
PURPLE, LPUR
),
pageBreak(),
];
// ── TASK 5 ──────────────────────────────────────────────────────────────────
const task5 = [
taskBanner(5, "LIBIDO — DEFINITION & CLINICAL QUESTIONS", GREEN), sp(),
subheading("Definition", GREEN),
body("Libido (from Latin: libīdo, 'lust, desire') is the psychological and biological drive for sexual activity — the desire, motivation, or appetite for sex."),
sp(),
makeTable(
["Framework", "Definition"],
[
["Freudian", "Originally referred to psychosexual energy tied to sexual needs. Freud later expanded it to a universal life energy ('life instinct'/Eros), with the id as its 'great reservoir'."],
["Jungian", "Carl Jung identified libido with psychic energy in general — 'appetite in its natural state... bodily needs like hunger, thirst, sleep, and sex, and emotional states or affects.' Manifests through five instincts: hunger, sexuality, activity, reflection, and creativity."],
["Clinical / DSM", "Sexual desire/drive. Clinically assessed as: Normal, Decreased (Hypoactive Sexual Desire Disorder — HSDD), or Increased (hypersexuality — seen in mania, frontal lobe disinhibition)."],
],
[convertInchesToTwip(1.5), convertInchesToTwip(5.5)],
GREEN, LGREEN
),
sp(),
note("Clinical relevance: Decreased libido is a key biological symptom of depression, a side effect of SSRIs/SNRIs, antipsychotics, antihypertensives, and OCPs, and is affected by testosterone/estrogen levels, relationship factors, and chronic illness."),
sp(),
subheading("Questions to Ask About Libido", GREEN),
body("Organised as per Kaplan & Sadock's Sexual History framework (Table 1-3, Synopsis of Psychiatry):"),
sp(),
makeTable(
["Category", "Questions"],
[
["SCREENING",
"1. 'Are you currently sexually active?'\n2. 'Have you noticed any changes or problems with sex recently?'\n3. 'Has your interest in sex changed?'"],
["DESIRE PHASE\n(Libido directly)",
"4. 'Do you experience sexual thoughts or fantasies? How often?'\n5. 'Do you feel a desire for sex? Has that changed recently?'\n6. 'Who initiates sex — you, your partner, or is it mutual?'\n7. 'Has your interest in sex decreased, increased, or stayed the same compared to before?'"],
["CONTEXT\n& DURATION",
"8. 'When did you first notice a change in your sexual desire?'\n9. 'Is the change constant or does it vary (e.g., only with this partner)?'\n10. 'Is there no desire at all, or desire without arousal?'"],
["ASSOCIATED\nFACTORS",
"11. 'Do you feel tired, low in mood, or lacking energy?' (Screen for depression)\n12. 'Are you on any medications?' (SSRIs, antipsychotics, antihypertensives, OCPs)\n13. 'Any recent medical problems?' (Thyroid, diabetes, hormonal changes)\n14. 'Have you been under major stress or had relationship difficulties?'"],
["EXCITEMENT\n& ORGASM",
"15. 'Do you have difficulty with arousal?' (erections/lubrication during foreplay)\n16. 'Do you reach orgasm? Too soon or not at all?'\n17. 'Is there pain during sex?'"],
["IN DEPRESSION\n(Neurovegetative\nsymptom)",
"'Do you still find yourself interested in activities you used to enjoy — including sex?'\nAlso screen for medication-induced changes: 'Has your sex drive changed since starting [drug name]?'"],
],
[convertInchesToTwip(1.5), convertInchesToTwip(5.5)],
GREEN, LGREEN
),
sp(2),
new Table({
rows: [new TableRow({ children: [new TableCell({
children: [new Paragraph({
alignment: AlignmentType.CENTER,
children: [new TextRun({
text: "Sources: Kaplan & Sadock's Comprehensive Textbook of Psychiatry (ISBN 9781975175733) | Synopsis of Psychiatry (2021) | Pocket Handbook of Clinical Psychiatry | PMC8960395",
size: 16, italics: true, color: "777777", font: "Calibri"
})],
spacing: { before: 60, after: 60 },
})],
shading: shading(LGRAY),
margins: { top: 80, bottom: 80, left: 120, right: 120 },
})]})],
width: { size: 100, type: WidthType.PERCENTAGE },
borders: { top:{style:BorderStyle.NONE}, bottom:{style:BorderStyle.NONE}, left:{style:BorderStyle.NONE}, right:{style:BorderStyle.NONE}, insideH:{style:BorderStyle.NONE}, insideV:{style:BorderStyle.NONE} },
}),
];
// ── BUILD DOCUMENT ───────────────────────────────────────────────────────────
const doc = new Document({
creator: "Orris Medical",
title: "Psychiatry Homework - 1st Year Students",
description: "Comprehensive psychiatry homework covering age of onset, sex differences, onset clarification, secondary causes, and libido.",
styles: {
default: {
document: {
run: { font: "Calibri", size: 19 },
},
},
},
sections: [{
properties: {
page: {
margin: {
top: convertInchesToTwip(1.0),
bottom: convertInchesToTwip(1.0),
left: convertInchesToTwip(1.0),
right: convertInchesToTwip(1.0),
},
},
},
children: [
...cover,
...task1,
...task2,
...task3,
...task4,
...task5,
],
}],
});
Packer.toBuffer(doc).then(buffer => {
fs.writeFileSync(OUTPUT, buffer);
console.log(`DOCX generated: ${OUTPUT}`);
}).catch(err => {
console.error("Error:", err);
process.exit(1);
});
cd /home/daytona/workspace/psych-homework && node generate_docx.js 2>&1
ls -lh /home/daytona/workspace/psych-homework/Psychiatry_Homework_1st_Year.docx && python3 /home/daytona/skills/docx/scripts/office/validate.py /home/daytona/workspace/psych-homework/Psychiatry_Homework_1st_Year.docx 2>&1 | tail -5
cd /tmp && cp /home/daytona/workspace/psych-homework/Psychiatry_Homework_1st_Year.docx test.zip && unzip -q test.zip -d docx_check && python3 -c " import os, xml.etree.ElementTree as ET errors = [] for root, dirs, files in os.walk('/tmp/docx_check'): for f in files: if f.endswith('.xml') or f.endswith('.rels'): path = os.path.join(root, f) try: ET.parse(path) except Exception as e: errors.append(f'{f}: {e}') if errors: print('XML errors:', errors) else: print('All XML files valid') # Count tables and paragraphs import re with open('/tmp/docx_check/word/document.xml') as fp: content = fp.read() print(f'Tables: {content.count(\"<w:tbl\")}') print(f'Paragraphs: {content.count(\"<w:p \")}') "
Psychiatry Homework 1st Year
Word Document · DOCX