~/therapeutic-relationship/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
OUTPUT = "/home/daytona/workspace/therapeutic-relationship/Therapeutic_Relationship_Study_Guide.pdf"
# ── Colours ──────────────────────────────────────────────────────────────
NAVY = colors.HexColor("#1a3a5c")
TEAL = colors.HexColor("#0d7377")
TEAL_LIGHT = colors.HexColor("#e6f7f7")
ORANGE = colors.HexColor("#e07b39")
ORANGE_LT = colors.HexColor("#fff3ec")
GREEN = colors.HexColor("#2e7d32")
GREEN_LT = colors.HexColor("#e8f5e9")
YELLOW_LT = colors.HexColor("#fffde7")
RED = colors.HexColor("#c62828")
RED_LT = colors.HexColor("#ffebee")
BLUE_LT = colors.HexColor("#e3f2fd")
GREY_LT = colors.HexColor("#f5f5f5")
WHITE = colors.white
BLACK = colors.HexColor("#212121")
# ── Page header/footer ────────────────────────────────────────────────────
def header_footer(canvas, doc):
canvas.saveState()
w, h = A4
# Top bar
canvas.setFillColor(NAVY)
canvas.rect(0, h - 22*mm, w, 22*mm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica-Bold", 11)
canvas.drawCentredString(w/2, h - 13*mm,
"GNM 2nd Year | Mental Health Nursing | Therapeutic Nurse-Patient Relationship")
# Bottom bar
canvas.setFillColor(TEAL)
canvas.rect(0, 0, w, 10*mm, fill=1, stroke=0)
canvas.setFillColor(WHITE)
canvas.setFont("Helvetica", 8)
canvas.drawString(15*mm, 3.5*mm, "Study Guide - Marathi & English Mix")
canvas.drawRightString(w - 15*mm, 3.5*mm, f"Page {doc.page}")
canvas.restoreState()
# ── Document ──────────────────────────────────────────────────────────────
doc = BaseDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=18*mm, rightMargin=18*mm,
topMargin=30*mm, bottomMargin=18*mm
)
frame = Frame(doc.leftMargin, doc.bottomMargin,
doc.width, doc.height, id="main")
doc.addPageTemplates([PageTemplate(id="main", frames=frame,
onPage=header_footer)])
# ── Styles ────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
def sty(name, **kw):
return ParagraphStyle(name, **kw)
S = {
"cover_title": sty("ct", fontSize=26, fontName="Helvetica-Bold",
textColor=NAVY, alignment=TA_CENTER, spaceAfter=6),
"cover_sub": sty("cs", fontSize=14, fontName="Helvetica",
textColor=TEAL, alignment=TA_CENTER, spaceAfter=4),
"cover_info": sty("ci", fontSize=11, fontName="Helvetica",
textColor=BLACK, alignment=TA_CENTER, spaceAfter=3),
"h1": sty("h1", fontSize=15, fontName="Helvetica-Bold",
textColor=WHITE, backColor=NAVY,
leftIndent=-2, rightIndent=-2,
borderPad=6, spaceAfter=8, spaceBefore=14, leading=20),
"h2": sty("h2", fontSize=12, fontName="Helvetica-Bold",
textColor=WHITE, backColor=TEAL,
leftIndent=0, borderPad=5,
spaceAfter=6, spaceBefore=10, leading=16),
"h3": sty("h3", fontSize=11, fontName="Helvetica-Bold",
textColor=NAVY, spaceAfter=4, spaceBefore=8),
"body": sty("body", fontSize=9.5, fontName="Helvetica",
textColor=BLACK, leading=14, spaceAfter=3,
alignment=TA_JUSTIFY),
"bullet": sty("bullet", fontSize=9.5, fontName="Helvetica",
textColor=BLACK, leading=14, spaceAfter=2,
leftIndent=12, bulletIndent=2),
"note": sty("note", fontSize=9, fontName="Helvetica-Oblique",
textColor=NAVY, backColor=BLUE_LT,
borderPad=5, leading=13, spaceAfter=5),
"warn": sty("warn", fontSize=9, fontName="Helvetica-Oblique",
textColor=RED, backColor=RED_LT,
borderPad=5, leading=13, spaceAfter=5),
"tip": sty("tip", fontSize=9, fontName="Helvetica-Oblique",
textColor=GREEN, backColor=GREEN_LT,
borderPad=5, leading=13, spaceAfter=5),
}
def H1(t): return Paragraph(f" {t}", S["h1"])
def H2(t): return Paragraph(f" {t}", S["h2"])
def H3(t): return Paragraph(t, S["h3"])
def P(t): return Paragraph(t, S["body"])
def B(t): return Paragraph(f"• {t}", S["bullet"])
def Note(t): return Paragraph(f" {t}", S["note"])
def Warn(t): return Paragraph(f" {t}", S["warn"])
def Tip(t): return Paragraph(f" {t}", S["tip"])
def SP(n=6): return Spacer(1, n)
def HR(): return HRFlowable(width="100%", thickness=1, color=TEAL_LIGHT, spaceAfter=4)
# ── Table helpers ─────────────────────────────────────────────────────────
def make_table(headers, rows, col_widths=None, header_bg=NAVY):
w = doc.width
n = len(headers)
if col_widths is None:
col_widths = [w/n]*n
data = [[Paragraph(f"<b><font color='white'>{h}</font></b>",
ParagraphStyle("th", fontSize=9, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=12))
for h in headers]]
for i, row in enumerate(rows):
bg = GREY_LT if i % 2 == 0 else WHITE
data.append([
Paragraph(str(c), ParagraphStyle("td", fontSize=9, fontName="Helvetica",
leading=12, alignment=TA_LEFT))
for c in row
])
t = Table(data, colWidths=col_widths, repeatRows=1)
style = TableStyle([
("BACKGROUND", (0,0), (-1,0), header_bg),
("ROWBACKGROUNDS", (0,1), (-1,-1), [GREY_LT, WHITE]),
("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#cccccc")),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
])
t.setStyle(style)
return t
def box_table(content_rows, bg=TEAL_LIGHT, border=TEAL):
"""Single-column box for definition/highlight blocks."""
data = [[Paragraph(r, ParagraphStyle("box", fontSize=9.5, fontName="Helvetica",
leading=14, textColor=BLACK))]
for r in content_rows]
t = Table(data, colWidths=[doc.width])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 1.5, border),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
return t
# ══════════════════════════════════════════════════════════════════════════
# CONTENT
# ══════════════════════════════════════════════════════════════════════════
story = []
# ─── COVER PAGE ──────────────────────────────────────────────────────────
story += [
SP(40),
# Big colour block title
]
cover_block = Table(
[[Paragraph("<b>Therapeutic<br/>Nurse-Patient<br/>Relationship</b>",
ParagraphStyle("ctb", fontSize=30, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=38))]],
colWidths=[doc.width]
)
cover_block.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 18),
("BOTTOMPADDING", (0,0), (-1,-1), 18),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
("ROUNDEDCORNERS", [8], ),
]))
story.append(cover_block)
story.append(SP(16))
story.append(Paragraph("GNM 2nd Year | Mental Health Nursing",
ParagraphStyle("cs2", fontSize=14, fontName="Helvetica-Bold",
textColor=TEAL, alignment=TA_CENTER)))
story.append(SP(8))
story.append(Paragraph("Marathi & English Mix Notes",
ParagraphStyle("cs3", fontSize=12, fontName="Helvetica",
textColor=ORANGE, alignment=TA_CENTER)))
story.append(SP(30))
# Subject pill boxes
pills = [
["Definition & Overview", "Types of Relationships", "Phases (4 Phases)"],
["Nurse's Tasks", "Communication Techniques", "Professional Boundaries"],
["Transference", "Quick Revision", "Exam Q&A"],
]
for row in pills:
pill_data = [[Paragraph(f"<b>{r}</b>",
ParagraphStyle("pill", fontSize=9, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER))
for r in row]]
pt = Table(pill_data, colWidths=[doc.width/3]*3)
pt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), TEAL),
("GRID", (0,0), (-1,-1), 2, WHITE),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
]))
story.append(pt)
story.append(SP(4))
story.append(SP(30))
story.append(Paragraph("Reference: A Guide to Mental Health & Psychiatric Nursing | Stuart & Sundeen",
ParagraphStyle("ref", fontSize=8, fontName="Helvetica-Oblique",
textColor=colors.grey, alignment=TA_CENTER)))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════
# SECTION 1 – DEFINITION
# ══════════════════════════════════════════════════════════════════════════
story.append(H1("Section 1: Definition / व्याख्या"))
story.append(SP(4))
story.append(box_table([
"<b>\"Therapeutic Nurse-Patient Relationship is a mutual learning experience and a "
"corrective emotional experience for the patient, based on humanity, mutual respect, "
"and acceptance of sociocultural differences.\"</b>",
"<i>- Stuart & Sundeen</i>"
], bg=TEAL_LIGHT, border=TEAL))
story.append(SP(8))
story.append(P("<b>Sopyaa bhashet (सोप्या भाषेत):</b> Nurse aani Patient yanchyatil ek "
"<b>uddeshapoorna (purposeful), vyavasayik (professional), "
"vel-maryadit (time-limited) sambandh</b> - jo patient chya barey honyasathi "
"asato. Yaat patient chya sharirik, mansik aani samajik garajaa poorna kelya jatat."))
story.append(SP(6))
story.append(Note("Concept dila: Hildegard Peplau (1952) - 'Mother of Psychiatric Nursing'"))
story.append(SP(6))
story.append(H3("Goals / Uddishte (उद्दिष्टे):"))
goals = [
"Enhanced <b>self-realization</b> - Swatahala jaast changlya prakare olakhne",
"Increased <b>self-acceptance</b> aani <b>self-respect</b>",
"Strong <b>personal identity</b>",
"Better <b>coping skills</b> - Samasyanna samory janyachi kshamata",
"Improved <b>insight</b> - Swatachya problems samjun ghene",
"<b>Behavioral change</b> - Vagane sudharne",
"Ability to form interdependent <b>interpersonal relationships</b>",
]
for g in goals: story.append(B(g))
story.append(SP(8))
# ══════════════════════════════════════════════════════════════════════════
# SECTION 2 – TYPES OF RELATIONSHIPS
# ══════════════════════════════════════════════════════════════════════════
story.append(H1("Section 2: Types of Relationships / Sambandhancha Prakar"))
story.append(SP(4))
story.append(P("Relationships mainly <b>3 prakarache</b> astat:"))
story.append(SP(6))
types_headers = ["Mudda", "Social Relationship", "Intimate Relationship", "Therapeutic Relationship"]
types_rows = [
["Focus", "Donhanche needs", "Emotional bond", "Patient chya needs"],
["Goal", "Pleasure / fun", "Love / commitment", "Patient bara hone"],
["Time", "No limit", "No limit", "Time-limited"],
["Boundaries", "Loose", "Nahi", "Strict professional"],
["Self-disclosure", "Donhi bajunni", "Purn", "Nurse nahi karat"],
["Skills", "Lagat nahit", "Lagat nahit", "Professional skills"],
["Confidentiality", "Nahi", "Limited", "Hoy – purn"],
["Udaharan", "Mitra, Shejari", "Aai-mul, Spouse", "Nurse-Patient"],
]
cw = [doc.width*0.18, doc.width*0.25, doc.width*0.27, doc.width*0.30]
story.append(make_table(types_headers, types_rows, cw))
story.append(SP(8))
story.append(Warn("Therapeutic relationship he Social ya Intimate nasel! "
"Professional boundaries always palayach ahet."))
story.append(SP(6))
# Sub-types by duration
story.append(H3("Sub-types by Duration / Velanusaar:"))
dur_headers = ["Type", "Vel (Duration)", "Setting", "Focus"]
dur_rows = [
["Brief / Short-term", "Kahi minute - Kahi taas", "Emergency / OPD", "Immediate needs"],
["Moderate / Inpatient", "Kahi divas - Aathavde", "Hospital ward", "Short-term goals"],
["Long-term", "Kahi mahine - Varsh", "Residential / Community", "Behavior modification"],
]
cw2 = [doc.width*0.22, doc.width*0.23, doc.width*0.28, doc.width*0.27]
story.append(make_table(dur_headers, dur_rows, cw2, header_bg=TEAL))
story.append(SP(8))
# ══════════════════════════════════════════════════════════════════════════
# SECTION 3 – COMPONENTS
# ══════════════════════════════════════════════════════════════════════════
story.append(H1("Section 3: Components / Ghatak (घटक)"))
story.append(SP(4))
comp_data = [
["1. Rapport (Javlik)", "Relationship cha paaya. Acceptance, warmth, friendship yavar aadharit. Patient la comfortable vaatte."],
["2. Trust (Vishwaas)", "Sarvaant mahatvacha component. Nurse consistent + honest + reliable aslavar trust yeto."],
["3. Respect (Aadar)", "Unconditional positive regard. Patient chya culture/background judge na karane. Dignity japane."],
["4. Genuineness (Pramaanikataa)", "Nurse authentic + honest. Je manaat teyach bolane - fake naahi."],
["5. Empathy (Sahaanubhuti)", "Patient chya jagii swaatahala theun vichar karane. Sympathy ≠ Empathy."],
["6. Intimacy (without sexual element)", "Emotional closeness - pan professional boundaries sah. Patient la safe vaatte."],
["7. Confidentiality (Gopaniyataa)", "Patient chi mahiti gupt thevanee - itr lokat saangane nahi."],
]
for i, (comp, desc) in enumerate(comp_data):
bg = TEAL_LIGHT if i % 2 == 0 else BLUE_LT
ct = Table([[
Paragraph(f"<b>{comp}</b>",
ParagraphStyle("cn", fontSize=10, fontName="Helvetica-Bold",
textColor=NAVY, leading=14)),
Paragraph(desc, ParagraphStyle("cd", fontSize=9.5, fontName="Helvetica",
textColor=BLACK, leading=14))
]], colWidths=[doc.width*0.33, doc.width*0.67])
ct.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 0.5, TEAL),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
]))
story.append(ct)
story.append(SP(3))
story.append(SP(4))
story.append(Tip("Sarvaant mahatvacha component = TRUST (Vishwaas). Trust shivay therapeutic relationship shakya naahi!"))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════
# SECTION 4 – PHASES
# ══════════════════════════════════════════════════════════════════════════
story.append(H1("Section 4: Phases of Therapeutic Relationship / Tapppe"))
story.append(SP(4))
story.append(P("Hildegard Peplau (1952) yanni <b>4 Phases</b> sangitlya ahet:"))
story.append(SP(6))
# Phase flow diagram as coloured table
phase_flow = Table(
[[
Paragraph("<b>Phase 1</b><br/>Pre-Interaction<br/>poorv-sanvaad",
ParagraphStyle("pf", fontSize=9, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=13)),
Paragraph("➜", ParagraphStyle("ar", fontSize=16, fontName="Helvetica-Bold",
textColor=NAVY, alignment=TA_CENTER)),
Paragraph("<b>Phase 2</b><br/>Orientation<br/>olakh",
ParagraphStyle("pf2", fontSize=9, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=13)),
Paragraph("➜", ParagraphStyle("ar2", fontSize=16, fontName="Helvetica-Bold",
textColor=NAVY, alignment=TA_CENTER)),
Paragraph("<b>Phase 3 ⭐</b><br/>Working<br/>karya tapaa",
ParagraphStyle("pf3", fontSize=9, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=13)),
Paragraph("➜", ParagraphStyle("ar3", fontSize=16, fontName="Helvetica-Bold",
textColor=NAVY, alignment=TA_CENTER)),
Paragraph("<b>Phase 4</b><br/>Termination<br/>samaapti",
ParagraphStyle("pf4", fontSize=9, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=13)),
]],
colWidths=[doc.width*0.19, doc.width*0.05, doc.width*0.19,
doc.width*0.05, doc.width*0.22, doc.width*0.05, doc.width*0.25]
)
phase_flow.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), colors.HexColor("#1565c0")),
("BACKGROUND", (2,0), (2,0), colors.HexColor("#00838f")),
("BACKGROUND", (4,0), (4,0), ORANGE),
("BACKGROUND", (6,0), (6,0), RED),
("BACKGROUND", (1,0), (1,0), WHITE),
("BACKGROUND", (3,0), (3,0), WHITE),
("BACKGROUND", (5,0), (5,0), WHITE),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("ALIGN", (0,0), (-1,-1), "CENTER"),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(phase_flow)
story.append(SP(12))
# ── Phase 1
story.append(H2("Phase 1: Pre-Interaction Phase (पूर्व-संवाद टप्पा)"))
story.append(P("<b>Kadi?</b> Patient la bhetnyapurvi — Patient la pahilyanda bhetanyapurvi"))
story.append(SP(4))
story.append(H3("Nurse's Tasks (Jabaabaari):"))
tasks_p1 = [
"Patient chi <b>file, records, history</b> vachane",
"Swatachya <b>feelings, fantasies, fears</b> explore karane (self-examination)",
"Swatachya <b>professional strengths & limitations</b> analyze karane",
"Patient la <b>pahilyanda bhetnyachi plan</b> tayaar karane",
"<b>Supervision / consultation</b> ghene (garaj aslyaas)",
]
for t in tasks_p1: story.append(B(t))
story.append(SP(4))
story.append(Note("Key Task: Self-awareness + Preparation | 'Know yourself before you help others'"))
story.append(SP(8))
# ── Phase 2
story.append(H2("Phase 2: Orientation Phase (ओळख टप्पा)"))
story.append(P("<b>Kadi?</b> Nurse aani patient pahilyanda bhettat — 'First Impression' ithe tayaar hote!"))
story.append(SP(4))
story.append(H3("Nurse's Tasks:"))
tasks_p2 = [
"<b>Swatachi olakh</b> karun dene — name, role sangane",
"<b>Rapport establish</b> karane — javaliki nirmaan karane",
"Patient chi <b>assessment</b> karane — problems identify karane",
"<b>Trust and acceptance</b> nirmaan karane",
"<b>Roles & boundaries</b> spasht karane",
"<b>Confidentiality</b> assure karane",
"<b>Contract</b> tayaar karane (meeting kadi, kiti vel, goals kaay)",
]
for t in tasks_p2: story.append(B(t))
story.append(SP(4))
# AIDET box
aidet = Table([
[Paragraph("<b>AIDET Framework</b>", ParagraphStyle("ah", fontSize=10,
fontName="Helvetica-Bold", textColor=WHITE, alignment=TA_CENTER))],
[Paragraph(
"<b>A</b> – Acknowledge (olakh karune) | "
"<b>I</b> – Introduce (parichay) | "
"<b>D</b> – Duration (vel sangane) | "
"<b>E</b> – Explanation (kay karanaar te sangane) | "
"<b>T</b> – Thank You (aabhaar)",
ParagraphStyle("ab", fontSize=9, fontName="Helvetica", leading=14,
alignment=TA_CENTER))]
], colWidths=[doc.width])
aidet.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), TEAL),
("BACKGROUND", (0,1), (0,1), TEAL_LIGHT),
("BOX", (0,0), (-1,-1), 1, TEAL),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
story.append(aidet)
story.append(SP(6))
story.append(H3("Problems in Orientation Phase:"))
story.append(P("<b>Transference (Transference)</b> — Patient nurse var bhutakalatil ekhadya vaktichya bhavana project karato."))
story.append(B("Patient nurse la 'significant individual' saarkha treat karato"))
story.append(B("Udaa: 'Tumhi mazya aaisaarkha vaatata'"))
story.append(SP(4))
story.append(P("<b>Countertransference</b> — Nurse patient baabat personal feelings develop karte."))
story.append(B("Nurse patient la bhutakalatil konyashi relate karte"))
story.append(B("Udaa: 'Ha patient mala mazya bhaavasaarkha vaatato'"))
story.append(SP(4))
trans_headers = ["", "Transference", "Countertransference"]
trans_rows = [
["Kon karto?", "Patient", "Nurse"],
["Kunavar?", "Nurse var", "Patient baabat"],
["Udaaharan", "'Aaisaarkha vaatata'", "'Bhaavaasaarkha vaatato'"],
["Kaay karava?", "Acknowledge kara, professionally respond kara", "Supervisor la sanga, self-reflection kara"],
]
cw3 = [doc.width*0.22, doc.width*0.38, doc.width*0.40]
story.append(make_table(trans_headers, trans_rows, cw3, header_bg=ORANGE))
story.append(SP(8))
# ── Phase 3
story.append(H2("Phase 3: Working Phase (कार्य टप्पा) ⭐ - Sarvaant Mahatvacha!"))
story.append(P("<b>Kadi?</b> Trust established zhalyanantar — Pratyksha care / treatment hoté"))
story.append(SP(4))
story.append(H3("Nurse's Tasks:"))
tasks_p3 = [
"<b>Problems identify</b> aani prioritize karane",
"<b>Nursing interventions</b> implement karane",
"<b>Therapeutic communication</b> techniques vaparane",
"<b>Health education</b> dene",
"<b>Coping skills</b> shikvane",
"Patient la <b>self-care</b> sathi encourage karane",
"Patient chi <b>independence</b> vadhavane",
"<b>Progress evaluate</b> karane",
]
for t in tasks_p3: story.append(B(t))
story.append(SP(4))
story.append(H3("Problems in Working Phase:"))
probs_p3 = [
"<b>Resistance</b> — Patient treatment naakarto",
"<b>Testing behavior</b> — Patient limits test karto",
"<b>Dependency</b> — Patient atirikt dependent hoto",
"<b>Anxiety / Boredom</b> — Nurse la yeu shakto",
"<b>Countertransference</b> — Nurse la patient baabat personal feelings",
]
for pr in probs_p3: story.append(B(pr))
story.append(SP(4))
story.append(Tip("Patient ne 'I' chi baajane 'We' vaaparne suruv kele tar Working phase successful chalto aahe!"))
story.append(SP(8))
# ── Phase 4
story.append(H2("Phase 4: Termination Phase (समाप्ती टप्पा) - Sarvaant Kathin!"))
story.append(P("<b>Kadi?</b> Goals achieved zhalyavar / Discharge veli"))
story.append(SP(4))
story.append(Warn("Book nusaar: 'Termination is one of the most DIFFICULT but most IMPORTANT phases'"))
story.append(SP(4))
story.append(H3("Nurse's Tasks:"))
tasks_p4 = [
"<b>Progress review</b> karane — goals achieve zale ka te tharavane",
"Patient la <b>feelings express</b> karu dene",
"<b>Discharge planning</b> karane",
"<b>Referrals</b> dene",
"<b>Follow-up plan</b> sangane",
"Professional <b>goodbye</b> karane",
]
for t in tasks_p4: story.append(B(t))
story.append(SP(4))
story.append(H3("Patient che Reactions / Problems:"))
react_p4 = [
"<b>Separation Anxiety</b> — Nurse pasun dur honyachi bhiti (sarvaant common)",
"<b>Regression</b> — Purvicha behavior paravat yene",
"<b>Acting out</b> — Gairu vatan karane (termination talavnyasathi)",
"<b>Denial</b> — 'Mala kaahi problem naahi' ase sangane",
]
for r in react_p4: story.append(B(r))
story.append(SP(6))
# Patient ready check
ready_headers = ["Patient Readiness Criteria (Termination Sathi)"]
ready_rows = [
["Presenting problem pasun relief aahe"],
["Functioning improve zale aahe"],
["Self-esteem vadhali aahe"],
["Stronger sense of identity aahe"],
["Independent decision gheu shakto / shakate"],
]
ready_t = Table(
[[Paragraph(f"<b>Patient Readiness Criteria</b> — Termination sathi patient tayaar aahe ka?",
ParagraphStyle("rh", fontSize=10, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER))]] +
[[Paragraph(f"✓ {r[0]}", ParagraphStyle("rc", fontSize=9.5, fontName="Helvetica",
leading=14, textColor=GREEN))]
for r in ready_rows],
colWidths=[doc.width]
)
ready_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), GREEN),
("BACKGROUND", (0,1), (-1,-1), GREEN_LT),
("BOX", (0,0), (-1,-1), 1, GREEN),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
]))
story.append(ready_t)
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════
# SECTION 5 – NURSE'S ROLES (PEPLAU)
# ══════════════════════════════════════════════════════════════════════════
story.append(H1("Section 5: Peplau's Roles of Nurse / Peplau chya Nurse chya Bhumika"))
story.append(SP(6))
roles = [
("1. Stranger (Anolakhi)", "Pahilyanda bhetataana — patient la respectfully treat karane", "Orientation phase"),
("2. Resource Person", "Mahiti aani answers dene — patient chya prashnanna uttare", "Working phase"),
("3. Teacher (Shikshak)", "Health education dene — medicines, care shikvane", "Working phase"),
("4. Leader (Neta)", "Care guide karane, decisions madhe madad karane", "Working phase"),
("5. Surrogate (Paryaay)", "Patient la nurse ekhad-ya javalchya manasaasaarkhi vaatte — transference", "Working phase"),
("6. Counselor (Samupadesha)", "Patient la feelings express karayla madad karane", "All phases"),
]
roles_headers = ["Role", "Mhanje Kaay", "Kadi"]
roles_rows = [[r[0], r[1], r[2]] for r in roles]
cw4 = [doc.width*0.28, doc.width*0.48, doc.width*0.24]
story.append(make_table(roles_headers, roles_rows, cw4, header_bg=NAVY))
story.append(SP(8))
# ══════════════════════════════════════════════════════════════════════════
# SECTION 6 – THERAPEUTIC COMMUNICATION
# ══════════════════════════════════════════════════════════════════════════
story.append(H1("Section 6: Therapeutic Communication Techniques"))
story.append(SP(4))
# Helpful
story.append(H2("Helpful / Therapeutic Techniques (Upayukt - Vaparaychi)"))
story.append(SP(4))
help_headers = ["Technique", "Marathi Arth", "Example"]
help_rows = [
["Active Listening", "Lakshapurvak aikaane", "Dole milavne, 'Ho, sanga'"],
["Open-ended Questions", "Mukt prashna", "'Tumhala kasa vaatay?'"],
["Reflection", "Patient chech shabd paravt sangane", "'Tumhala ekatam vaatay ase mhanalat?'"],
["Clarification", "Spashtiikaran", "'Mala nit samajla nahi, sangaal ka?'"],
["Empathy", "Sahaanubhuti", "'He khuup kathin asel tumchyasathi'"],
["Silence", "Shaantataa", "Bolanyasaathi vel dene"],
["Summarizing", "Saransh", "Bollelya goshti thodkyaat sangane"],
["Focusing", "Ekaa topic var laksha", "'Ya eka goshtibaadal bolu'"],
["Accepting", "Swikaraaane", "'Ho, mi aikatooy'"],
["Offering Self", "Sobat dene", "'Mi ithech aahe tumchyasaathi'"],
]
cw5 = [doc.width*0.28, doc.width*0.30, doc.width*0.42]
story.append(make_table(help_headers, help_rows, cw5, header_bg=GREEN))
story.append(SP(8))
# Non-therapeutic
story.append(H2("Non-Therapeutic Techniques (Talavayachya goshti) ❌"))
story.append(SP(4))
nonhelp_headers = ["Technique", "Kaay Hote", "Example"]
nonhelp_rows = [
["False Reassurance", "Guarantee nastana sangane", "'Sagalam thik hoil' — guarantee nastana"],
["Giving Advice", "Patient la judge karne", "'Tumhi ase karayla havay hota'"],
["Why Questions", "Defensive banvate", "'Tumhi ka ase kele?'"],
["Changing Subject", "Patient chya feelings dismiss hotaat", "Patient bolat astana topic badlane"],
["Minimizing", "Problem la kami lavane", "'Are, he kaay evadhay?'"],
["Arguing / Disagreeing", "Trust nakarlo jaato", "Patient shi vaad ghalane"],
["Judgmental Statements", "Patient inferior vaatato", "'Tumhi kase kela he?'"],
]
cw6 = [doc.width*0.28, doc.width*0.32, doc.width*0.40]
story.append(make_table(nonhelp_headers, nonhelp_rows, cw6, header_bg=RED))
story.append(SP(8))
# ══════════════════════════════════════════════════════════════════════════
# SECTION 7 – PROFESSIONAL BOUNDARIES
# ══════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
story.append(H1("Section 7: Professional Boundaries / Vyavasayik Simaa"))
story.append(SP(6))
# Two-column: violations vs correct
cols_data = [
[
Paragraph("<b>Boundary Violations ❌ (Chukiche)</b>",
ParagraphStyle("bvh", fontSize=10, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER)),
Paragraph("<b>Correct Boundaries ✓ (Yogya)</b>",
ParagraphStyle("bch", fontSize=10, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER)),
],
[
Paragraph(
"• Patient la personal phone number dene<br/>"
"• Patient baadal gossip karane<br/>"
"• Gifts dene / ghene<br/>"
"• Personal problems patient la sangane<br/>"
"• Romantic / sexual feelings develop hone<br/>"
"• Over-involvement — atirikt javaliki",
ParagraphStyle("bv", fontSize=9.5, fontName="Helvetica", leading=15, textColor=RED)
),
Paragraph(
"• Professional tone thevaane<br/>"
"• Confidentiality paaLane<br/>"
"• Supervision ghene (confused aslyaas)<br/>"
"• Patient baadal personal feelings supervisor la sangane<br/>"
"• Patient chya dignity che rakshan karane<br/>"
"• Role clarity thevaane",
ParagraphStyle("bc", fontSize=9.5, fontName="Helvetica", leading=15, textColor=GREEN)
),
]
]
bt = Table(cols_data, colWidths=[doc.width/2 - 4, doc.width/2 - 4])
bt.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), RED),
("BACKGROUND", (1,0), (1,0), GREEN),
("BACKGROUND", (0,1), (0,1), RED_LT),
("BACKGROUND", (1,1), (1,1), GREEN_LT),
("BOX", (0,0), (0,-1), 1, RED),
("BOX", (1,0), (1,-1), 1, GREEN),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("VALIGN", (0,0), (-1,-1), "TOP"),
("COLPADDING", (0,0), (-1,-1), 4),
]))
story.append(bt)
story.append(SP(8))
# ══════════════════════════════════════════════════════════════════════════
# SECTION 8 – BARRIERS
# ══════════════════════════════════════════════════════════════════════════
story.append(H1("Section 8: Barriers to Therapeutic Relationship / Adathaale"))
story.append(SP(6))
barrier_headers = ["Source", "Barriers"]
barrier_rows = [
["Nurse kadun", "Self-awareness nasane • Poor communication • Burnout / thakava • Judgmental attitude • Lack of empathy • Countertransference"],
["Patient kadun", "Trust nasane • Language barrier • Cultural differences • Severe mental illness • Denial / Resistance • Fear"],
["Environment kadun", "Privacy nasane • Time pressure • Noise / interruptions • Patients chi jaast gaardi"],
]
cw7 = [doc.width*0.22, doc.width*0.78]
story.append(make_table(barrier_headers, barrier_rows, cw7, header_bg=ORANGE))
story.append(SP(8))
# Ways to overcome
story.append(H2("Ways to Overcome / Maat Kashi Karaavi"))
story.append(SP(4))
overcome = [
"<b>Supervisor aani peers</b> kadun help ghene — self-analysis sathi",
"<b>Self-awareness</b> vadhavane — swatachya feelings, biases taapaasane",
"<b>Consultation</b> karane — supervisor kade jaaane",
"Patient sathi <b>goals</b> likhun kadhane — clarity saathi",
"<b>Cultural sensitivity</b> shikaane — patient chya background samjun ghene",
"Regular <b>supervision sessions</b> gheNe",
]
for o in overcome: story.append(B(o))
story.append(SP(8))
# ══════════════════════════════════════════════════════════════════════════
# SECTION 9 – SELF-AWARENESS & QUALITIES
# ══════════════════════════════════════════════════════════════════════════
story.append(H1("Section 9: Qualities of Therapeutic Nurse / Gunn"))
story.append(SP(4))
story.append(P("Ek chaaanglya therapeutic nurse madhe he <b>6 mahatvaache gunn</b> asavet (Stuart):"))
story.append(SP(6))
qual_data = [
["1. Self-Awareness", "Swatachya feelings, attitudes, beliefs olakhne. Biases aadhich taapaasne."],
["2. Empathy", "Patient chya jaagi swaatahala theun vichar karane. (Sympathy ≠ Empathy)"],
["3. Genuineness / Congruence", "Je manaat asel teyach bolane, daakhavane. Real + honest + authentic asane."],
["4. Positive Regard / Respect", "Patient la unconditionally accept karane. Behavior, culture judge na karane."],
["5. Immediacy", "Present moment madhe kaay hote ahe te notice karane. 'Right now tumhala kasa vaatay?'"],
["6. Cultural Sensitivity", "Patient chya culture, religion, values cha aadar karane."],
]
for i, (qual, desc) in enumerate(qual_data):
bg = ORANGE_LT if i % 2 == 0 else YELLOW_LT
qt = Table([[
Paragraph(f"<b>{qual}</b>",
ParagraphStyle("qn", fontSize=10, fontName="Helvetica-Bold",
textColor=ORANGE, leading=14)),
Paragraph(desc, ParagraphStyle("qd", fontSize=9.5, fontName="Helvetica",
textColor=BLACK, leading=14))
]], colWidths=[doc.width*0.32, doc.width*0.68])
qt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 0.5, ORANGE),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
]))
story.append(qt)
story.append(SP(3))
story.append(PageBreak())
# ══════════════════════════════════════════════════════════════════════════
# SECTION 10 – QUICK REVISION TABLE
# ══════════════════════════════════════════════════════════════════════════
story.append(H1("Section 10: Quick Revision Table / Thodkyaat Revision"))
story.append(SP(6))
qr_headers = ["Mahatvacha Mudda", "Correct Uttar"]
qr_rows = [
["Concept koni dila?", "Hildegard Peplau (1952) — 'Mother of Psychiatric Nursing'"],
["Phases kiti?", "4 (Pre-interaction, Orientation, Working, Termination)"],
["Sarvaant mahatvacha phase?", "Working Phase"],
["Sarvaant kathin phase?", "Termination Phase"],
["Contract asto kuthla phase?", "Orientation Phase"],
["Transference karto?", "Patient (nurse var)"],
["Countertransference karto?", "Nurse (patient baabat)"],
["Separation anxiety yete kadi?", "Termination Phase madhe"],
["Peplau chya 6 roles?", "Stranger, Resource, Teacher, Leader, Surrogate, Counselor"],
["Sarvaant mahatvacha component?", "TRUST (Vishwaas)"],
["Types of relationships?", "Social, Intimate, Therapeutic"],
["Duration nusaar sub-types?", "Brief, Moderate (Inpatient), Long-term"],
["Non-therapeutic example?", "False Reassurance — 'Sagala thik hoil'"],
["Professional boundary violation?", "Patient la personal number dene, gifts ghene"],
["AIDET madhye D = ?", "Duration — vel kit vel laanel te sangane"],
]
cw8 = [doc.width*0.45, doc.width*0.55]
story.append(make_table(qr_headers, qr_rows, cw8, header_bg=NAVY))
story.append(SP(10))
# ══════════════════════════════════════════════════════════════════════════
# SECTION 11 – EXAM Q&A
# ══════════════════════════════════════════════════════════════════════════
story.append(H1("Section 11: Exam Questions & Answers / Pareekshe Saathi"))
story.append(SP(6))
qa_list = [
(
"Q1. Therapeutic Nurse-Patient Relationship define kara. (2 marks)",
"Therapeutic Nurse-Patient Relationship mhanje nurse aani patient yanchyamdhil ek purposeful, "
"professional, time-limited sambandh — jo patient chya sharirik, mansik aani samajik garajaa "
"poorna karatana patient la bary hanyasaathi madad karato. He Stuart & Sundeen nusaar 'a mutual "
"learning experience and corrective emotional experience' aahe."
),
(
"Q2. Peplau chya Therapeutic Relationship chya phases aani tasks sanga. (5 marks)",
"Hildegard Peplau yanni 4 phases sangitlya:\n"
"1. Pre-interaction — Patient chi mahiti gola karane, swatachya fears explore karane, plan karane.\n"
"2. Orientation — Rapport establish, trust build, contract formulate karane. "
"Problems: Transference (patient), Countertransference (nurse).\n"
"3. Working (sarvaant mahatvacha) — Nursing interventions implement, goals achieve, "
"health education, coping skills shikvane.\n"
"4. Termination (sarvaant kathin) — Progress review, discharge planning, referrals. "
"Problem: Separation anxiety."
),
(
"Q3. Therapeutic vs Social Relationship madhla fark sanga. (3 marks)",
"Therapeutic relationship: Patient chya needs var focus, time-limited, professional boundaries, "
"specific goals, nurse chya professional skills vaparalya jatat, confidentiality paali jaate.\n"
"Social relationship: Donhanchya needs var focus, vel-maryadaa naahi, boundaries naasat, "
"pleasure-oriented, specific skills lagat nahit."
),
(
"Q4. Transference aani Countertransference madha fark sanga. (3 marks)",
"Transference: PATIENT nurse var bhutakalatil ekhadya vaktichya bhavana project karto. "
"Patient nurse la 'significant individual' saarkha treat karto. "
"Udaa: 'Tumhi mazya aaisaarkha vaatata.'\n"
"Countertransference: NURSE patient baadal personal feelings develop karte. "
"Nurse patient la bhutakalatil konyashi relate karte. "
"Solution: Self-awareness + Supervisor kade jaane."
),
(
"Q5. Therapeutic Communication chya techniques sanga. (5 marks)",
"Helpful techniques: Active Listening, Open-ended Questions, Reflection, Clarification, "
"Empathy, Silence, Summarizing, Focusing, Accepting, Offering Self.\n"
"Non-therapeutic techniques (talavayachya): False Reassurance, Giving Advice, Why Questions, "
"Changing Subject, Minimizing, Arguing, Judgmental Statements.\n"
"Rule: Hamesha patient chya feelings validate kara. Judge karu naka."
),
(
"Q6. Professional Boundaries mhanje kaay? Violation chi udaaharne sanga. (3 marks)",
"Professional boundaries mhanje nurse aani patient yanchyamdhil vyavasayik maryadaa — "
"jo relationship la professional thavataat aani patient la safe vaatavun detaat.\n"
"Violations: Patient la personal number dene, gifts ghene/dene, personal problems share karane, "
"romantic feelings develop hone, over-involvement.\n"
"Yogya: Professional tone, confidentiality, supervision."
),
(
"Q7. Termination Phase kathin ka asate? Separation Anxiety mhanje kaay? (3 marks)",
"Termination phase kathin asate kaaran patient nurse var trust aani attachment develop karto. "
"Nurse pasun door hanyachi bhiti yeate — yaala 'Separation Anxiety' mhantaat.\n"
"Patient chi reactions: Regression, denial, acting out.\n"
"Nurse ne: Feelings share karu dyaavyat, progress review karaava, professional goodbye karaava."
),
]
for i, (q, a) in enumerate(qa_list):
# Question box
q_t = Table(
[[Paragraph(q, ParagraphStyle("qq", fontSize=10, fontName="Helvetica-Bold",
textColor=WHITE, leading=14))]],
colWidths=[doc.width]
)
q_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
story.append(q_t)
# Answer box
a_t = Table(
[[Paragraph(a.replace("\n", "<br/>"),
ParagraphStyle("qa", fontSize=9.5, fontName="Helvetica",
textColor=BLACK, leading=14))]],
colWidths=[doc.width]
)
a_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), YELLOW_LT),
("BOX", (0,0), (-1,-1), 1, NAVY),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
]))
story.append(a_t)
story.append(SP(8))
# ══════════════════════════════════════════════════════════════════════════
# FINAL PAGE – MIND MAP SUMMARY
# ══════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
story.append(H1("Section 12: Summary Mind Map / Saransh"))
story.append(SP(6))
# Central concept
center = Table(
[[Paragraph("<b>THERAPEUTIC<br/>NURSE-PATIENT<br/>RELATIONSHIP</b>",
ParagraphStyle("center", fontSize=14, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER, leading=20))]],
colWidths=[doc.width]
)
center.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 14),
("BOTTOMPADDING", (0,0), (-1,-1), 14),
("ALIGN", (0,0), (-1,-1), "CENTER"),
]))
story.append(center)
story.append(SP(10))
mm_items = [
(TEAL, "DEFINITION", "Mutual learning + corrective emotional experience | Peplau 1952"),
(ORANGE, "3 TYPES", "Social | Intimate | Therapeutic"),
(colors.HexColor("#1565c0"), "4 PHASES", "Pre-interaction > Orientation > Working* > Termination"),
(GREEN, "7 COMPONENTS", "Rapport | Trust* | Respect | Genuineness | Empathy | Intimacy | Confidentiality"),
(colors.HexColor("#6a1b9a"), "6 NURSE ROLES", "Stranger | Resource | Teacher | Leader | Surrogate | Counselor"),
(RED, "BOUNDARIES", "Professional limits | Violations talavaa | Supervision ghyaa"),
(ORANGE, "COMMUNICATION", "Therapeutic: Active Listening, Empathy, Reflection | Non-therapeutic: False Reassurance, Advice, Why"),
(colors.HexColor("#00838f"), "BARRIERS", "Nurse | Patient | Environment kadun hotat"),
]
for clr, title, content in mm_items:
mm_t = Table([[
Paragraph(f"<b>{title}</b>",
ParagraphStyle("mmt", fontSize=10, fontName="Helvetica-Bold",
textColor=WHITE, alignment=TA_CENTER)),
Paragraph(content,
ParagraphStyle("mmc", fontSize=9.5, fontName="Helvetica",
textColor=BLACK, leading=14))
]], colWidths=[doc.width*0.25, doc.width*0.75])
mm_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), clr),
("BACKGROUND", (1,0), (1,0), GREY_LT),
("BOX", (0,0), (-1,-1), 0.5, clr),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
]))
story.append(mm_t)
story.append(SP(4))
story.append(SP(10))
story.append(Paragraph(
"<i>All the best for your GNM 2nd Year Exams! "
"Reference: A Guide to Mental Health & Psychiatric Nursing | Stuart & Sundeen | Hildegard Peplau (1952)</i>",
ParagraphStyle("footer_note", fontSize=8.5, fontName="Helvetica-Oblique",
textColor=colors.grey, alignment=TA_CENTER)
))
# ── Build ─────────────────────────────────────────────────────────────────
doc.build(story)
print("PDF generated successfully!")