Gnm k bad best option kya h
GNM ke baad best career options courses India 2025
| Goal | Best Option |
|---|---|
| Higher degree + growth | B.Sc Post Basic Nursing |
| Sarkari naukri jaldi | Staff Nurse exam prep |
| Zyada salary | Abroad Nursing (Gulf/UK) |
| Specialization | ICU/OT short courses |
| Teaching/Research | M.Sc Nursing |
Gnm k bad doctor bn skte h ??
| Kya Chahte Ho | Kya Karna Hoga |
|---|---|
| MBBS Doctor | 12th PCB + NEET clear karo |
| Ayurvedic Doctor | NEET + BAMS (5.5 yr) |
| Homeopathy Doctor | NEET + BHMS (5.5 yr) |
| Abroad mein Doctor jaisi practice | B.Sc Nursing + NP course |
Npcc kya hota h
Nurse practitioner in critical care
NPCC Nurse Practitioner Critical Care course India eligibility 2025
| Detail | Info |
|---|---|
| Full Form | Nurse Practitioner in Critical Care |
| Duration | 2 saal (typically) |
| Level | Post Graduate / Advanced Diploma |
| Main Institute | AIIMS New Delhi (pioneer in India) |
| Kab Shuru Hua | ~2014-15 se India mein |
GNM (3 yr)
โ
B.Sc Post Basic Nursing (2 yr) โ Pehle yeh karo
โ
ICU mein 2-3 saal kaam karo โ Experience lo
โ
NPCC Course (2 yr) at AIIMS/other institutes
โ
Nurse Practitioner in Critical Care โ
Npcc or bams m kya different h
| Point | Detail |
|---|---|
| Field | Nursing (Advanced) |
| Degree Type | Post Graduate Diploma / Certificate |
| Duration | 2 saal |
| Base Required | B.Sc Nursing + ICU Experience |
| Title | "Nurse Practitioner" - "Dr." nahi |
| Kaam | ICU mein advanced nursing care, ventilator, critical patients |
| Prescribing | Limited / Supervised |
| Recognition | India mein abhi bhi developing |
| Salary | โน50k - โน1.5 lakh/month |
| Point | Detail |
|---|---|
| Field | Ayurvedic Medicine (Doctor) |
| Degree Type | Undergraduate Degree (MBBS jaisi) |
| Duration | 5.5 saal (incl. 1 yr internship) |
| Base Required | 12th PCB + NEET |
| Title | "Dr." laga sakte ho legally โ |
| Kaam | Patient diagnose karna, medicine likhna, surgery (basic) |
| Prescribing | Full prescribing rights |
| Recognition | Nationally & Internationally recognized |
| Salary | โน30k - โน1 lakh+ (Govt), private practice mein unlimited |
| NPCC | BAMS | |
|---|---|---|
| "Doctor" ban sakte ho? | โ Nahi | โ Haan |
| "Dr." title | โ Nahi | โ Haan |
| NEET chahiye? | โ Nahi | โ Haan |
| Independent practice | โ Limited | โ Full |
| Own clinic khol sakte ho? | โ Nahi | โ Haan |
| GNM ke baad direct? | โ Nahi | โ Nahi (NEET chahiye) |
| Aapka Goal | Best Option |
|---|---|
| "Dr." title + own clinic | BAMS |
| ICU/hospital mein high salary job | NPCC |
| Jaldi career start karna | NPCC (BAMS 5.5 saal leta hai) |
| Ayurvedic treatment mein interest | BAMS |
| Abroad nursing career | NPCC |
| Government doctor banna | BAMS |
BAMS vs BHMS mein kya difference hai?
| Point | Detail |
|---|---|
| Full Form | Bachelor of Ayurvedic Medicine & Surgery |
| System | Ayurveda (Indian ancient system) |
| Duration | 5.5 saal (4.5 + 1 yr internship) |
| Governing Body | CCIM (Central Council of Indian Medicine) |
| Main Focus | Herbs, Panchakarma, Ayurvedic surgery, Rasayana |
| Surgery Rights | โ Limited surgery allowed |
| Seats in India | ~25,000+ seats |
| Top Colleges | BHU, Gujarat Ayurved Uni, NIA Jaipur |
| Point | Detail |
|---|---|
| Full Form | Bachelor of Homeopathic Medicine & Surgery |
| System | Homeopathy (German system) |
| Duration | 5.5 saal (4.5 + 1 yr internship) |
| Governing Body | CCH (Central Council of Homeopathy) |
| Main Focus | Highly diluted medicines, constitutional treatment |
| Surgery Rights | โ Surgery allowed nahi |
| Seats in India | ~13,000+ seats |
| Top Colleges | NHMC Mumbai, Fr. Muller Mangalore, Govt colleges |
| Comparison | BAMS | BHMS |
|---|---|---|
| Medical System | Ayurveda (Indian) | Homeopathy (German/European) |
| Surgery | โ Yes (limited) | โ No |
| Medicine type | Herbal / Natural | Ultra-diluted remedies |
| Scope in Govt jobs | โญโญโญโญโญ Zyada | โญโญโญ Thoda kam |
| NEET cutoff | Thoda high | Thoda low (easy admission) |
| Seats | Zyada | Kam |
| Abroad scope | Limited | Very limited |
| Private practice | โ Good | โ Good |
| Patient trust | โญโญโญโญโญ High | โญโญโญโญ Good |
| BAMS | BHMS | |
|---|---|---|
| Govt Doctor (AYUSH) | โ Bahut posts | โ Posts available |
| Private Practice | โ Excellent | โ Good |
| Hospital Jobs | โ Many options | โ ๏ธ Limited |
| MD (PG) | MD (Ayurveda) | MD (Homeopathy) |
| Starting Salary | โน30k-60k/month | โน25k-50k/month |
| Own clinic | โ | โ |
| Aapka Interest | Best Choice |
|---|---|
| Indian traditional medicine, surgery bhi chahiye | BAMS โ |
| Chronic disease, gentle treatment approach | BHMS โ |
| Govt jobs zyada chahiye | BAMS โ |
| NEET rank thoda kam hai | BHMS (easy admission) |
| Research + modern integration | BAMS โ |
| Dedicated homeopathy practice | BHMS โ |
BAMS > BHMS overall scope ke hisaab se - zyada government posts, surgery rights, aur India mein Ayurveda ka future bahut bright hai AYUSH mission ke wajah se.
BHMS tab chunein jab specifically homeopathy mein interest ho ya NEET rank se BAMS nahi mil raha.
Gnm k bad bams kase kre
BAMS ke liye 12th mein Physics, Chemistry, Biology (PCB) hona ZAROORI hai
| Aapki 12th Stream | BAMS possible? |
|---|---|
| 12th PCB se ki hai | โ Haan, bilkul |
| 12th Arts/Commerce se ki hai | โ Seedha nahi - pehle 12th PCB karni hogi |
| GNM ke time 12th PCB thi | โ Direct apply kar sakte ho |
STEP 1๏ธโฃ
12th PCB check karo
(Agar nahi hai โ Open School se 12th PCB karo - NIOS)
โ
STEP 2๏ธโฃ
NEET UG ki taiyari karo
(Physics + Chemistry + Biology)
โ
STEP 3๏ธโฃ
NEET exam do (har saal May mein)
โ
STEP 4๏ธโฃ
NEET rank se BAMS college mein
counselling ke through admission lo
โ
STEP 5๏ธโฃ
BAMS 5.5 saal karo
โ
STEP 6๏ธโฃ
"Dr." ban jao โ
| Detail | Info |
|---|---|
| Exam name | NEET UG |
| Conduct karta hai | NTA (National Testing Agency) |
| Kab hota hai | Har saal May mein |
| Subjects | Physics (50), Chemistry (50), Biology (100) |
| Total marks | 720 |
| BAMS ke liye cutoff | ~400-500+ (General) |
| MBBS se comparison | BAMS mein kam rank chahiye |
GNM karne ke wajah se Biology aur medical knowledge already strong hai!
| Stage | Time |
|---|---|
| 12th PCB (agar nahi hai - NIOS se) | 1 saal |
| NEET taiyari | 6 months - 1 saal |
| BAMS course | 5.5 saal |
| Total (without 12th PCB) | ~7-8 saal |
| Total (with 12th PCB already) | ~6-6.5 saal |
| College Type | Fees |
|---|---|
| Government college | โน10,000 - โน50,000/year |
| Private college | โน1-3 lakh/year |
| Deemed university | โน2-5 lakh/year |
Abhi se NEET ki taiyari shuru karo - Physics aur Chemistry focus karo, Biology already strong hai GNM se!
Pehle NIOS se 12th PCB karo, phir NEET do
BAMS direct nahi ho sakta - tab NPCC ya B.Sc Nursing better option hai
Art site s gnm k liye best option kya h
Arts stream se 12th ki hai matlab Physics, Chemistry, Biology nahi hai Isliye BAMS, BHMS, MBBS - directly possible nahi โ
| Detail | Info |
|---|---|
| Duration | 2 saal |
| Eligibility | GNM + Nursing Registration |
| PCB required? | โ Nahi chahiye |
| Kahan se | IGNOU, various nursing colleges |
| Faida | Degree upgrade, salary badhhegi, abroad scope |
Yahi sabse pehle karo - Arts walo ke liye best first step!
| Detail | Info |
|---|---|
| Kya hai | Open school se Biology stream 12th |
| Duration | 1 saal |
| Fees | โน2,000 - โน5,000 only |
| Fir kya | NEET deke BAMS/BHMS kar sakte ho |
| Age limit | 25 saal (General) |
Agar age 25 se kam hai aur doctor banana hai - NIOS se PCB karo, phir NEET do!
Arts + GNM Complete โ
โ
2 Raaste:
๐ต RAASTA 1 - Nursing Career ๐ข RAASTA 2 - Doctor Banana
(Age ki limit nahi) (Age 25 se kam ho)
โ โ
B.Sc Post Basic Nursing (2yr) NIOS se 12th PCB (1yr)
โ โ
Staff Nurse Govt Job / Abroad NEET taiyari (1yr)
โ โ
NPCC / M.Sc Nursing BAMS / BHMS (5.5yr)
โ โ
Senior Nurse / NP โ
"Dr." Title โ
| Option | PCB chahiye? | Time | Best For |
|---|---|---|---|
| B.Sc Post Basic Nursing | โ Nahi | 2 saal | Sabke liye best |
| Govt Staff Nurse job | โ Nahi | Direct | Jaldi job chahiye |
| Abroad Nursing | โ Nahi | 1-2 saal prep | High salary |
| NIOS PCB โ NEET โ BAMS | โ Haan (leni padegi) | 7-8 saal | Doctor banana hai |
NIOS se PCB lo โ NEET do โ BAMS karo
B.Sc Post Basic Nursing karo โ Govt job ya Abroad jao
Npcc k bad kya krna chahiye
| Detail | Info |
|---|---|
| Duration | 2 saal |
| Eligibility | B.Sc Nursing + Experience |
| Specialization | Medical-Surgical, Critical Care |
| Faida | Teaching + Senior clinical roles |
| Salary after | โน80k - โน2 lakh/month |
NPCC + M.Sc = Double powerful combination โญ
| Country | Exam Required | Salary |
|---|---|---|
| USA | NCLEX-RN | โน3-6 lakh/month |
| UK | CBT + OSCE | โน2-4 lakh/month |
| Canada | NCLEX-RN | โน3-5 lakh/month |
| Australia | AHPRA registration | โน2-4 lakh/month |
| Gulf (UAE/Saudi) | Dataflow + exam | โน1.5-3 lakh/month |
NPCC qualification abroad mein ICU Nurse ke liye bahut valuable hai!
| Detail | Info |
|---|---|
| After | M.Sc Nursing |
| Duration | 3-5 saal |
| Career | Professor, Research officer, WHO/ICMR jobs |
| Salary | โน1-2 lakh/month+ |
NPCC Complete โ
โ
Senior ICU Nurse (1-2 saal experience)
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
๐ ABROAD ๐ฎ๐ณ INDIA
NCLEX/CBT exam M.Sc Nursing (2yr)
USA/UK/Canada โ
โน3-6 lakh/month โโโโโโโโโโดโโโโโโโโโ
โ โ
Nurse Educator PhD / Research
/Faculty /WHO/ICMR
โน80k-1.5L โน1-2L+/month
| Stage | Salary/Month |
|---|---|
| GNM Staff Nurse | โน20-35k |
| B.Sc Nursing | โน30-50k |
| NPCC done | โน60k-1.5L |
| NPCC + M.Sc | โน80k-2L |
| NPCC + Abroad | โน2-6L ๐ฅ |
| NPCC + PhD/Faculty | โน1-2L+ |
Senior ICU Nurse ka position lo, experience gain karo
M.Sc Nursing karo ya Abroad (NCLEX) ki taiyari karo
PhD / Hospital Administration / Abroad settle
NPCC + M.Sc Nursing + NCLEX =
Maximum salary + Maximum career growth ๐
I have completely blanked in my mind about theory mughe theory kase revision krni chahiye
| GNM Subjects | Priority |
|---|---|
| Anatomy & Physiology | ๐ด High |
| Medical-Surgical Nursing | ๐ด High |
| Pharmacology | ๐ด High |
| Community Health Nursing | ๐ก Medium |
| Pediatric Nursing | ๐ก Medium |
| OBG Nursing | ๐ก Medium |
| Mental Health Nursing | ๐ข Normal |
| Nutrition | ๐ข Normal |
MORNING 6:00 - 8:00 AM โ New topic padho (fresh mind)
โ
AFTERNOON 2:00 - 4:00 PM โ Revision karo (jo subah padha)
โ
EVENING 7:00 - 9:00 PM โ Notes likhเฅ / Questions solve karo
โ
NIGHT Sone se pehle โ Sirf 10 min - points repeat karo
READ โ Ek baar pura topic padho
RECALL โ Book band karo, jo yaad hai likho
REVIEW โ Compare karo book se, gap fill karo
Definition โ Causes โ Signs/Symptoms โ
Diagnosis โ Treatment โ Nursing Care
A - Action
B - Brand name
C - Contraindications
D - Dose
E - Effects (side effects)
| Din | Kaam |
|---|---|
| Monday | Naya topic padho |
| Tuesday | Uska revision + notes |
| Wednesday | Naya topic |
| Thursday | Mon + Wed revision |
| Friday | Naya topic |
| Saturday | Poore hafte ka revision |
| Sunday | Rest + Light review only ๐ด |
๐ Ek din mein sab mat padho - roz thoda thoda ๐ Samajh ke padho - ratt mat maro ๐ Notes zaroor likhะพ - likhne se yaad rehta hai ๐ Sleep mat chodo - neend mein memory consolidate hoti hai ๐ Consistency > Intensity - roz 2 ghante > ek din 10 ghante
Make a GNM revision study guide PDF
mkdir -p /tmp/workspace/gnm-study-guide && ls /tmp/workspace/
~/gnm-study-guide/create_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 inch, cm
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
from reportlab.pdfgen import canvas as pdfcanvas
OUTPUT = "/tmp/workspace/gnm-study-guide/GNM_Revision_Study_Guide.pdf"
# โโ Color Palette โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
DARK_BLUE = colors.HexColor("#1A3A5C")
MED_BLUE = colors.HexColor("#2E86AB")
LIGHT_BLUE = colors.HexColor("#D6EAF8")
TEAL = colors.HexColor("#17A589")
LIGHT_TEAL = colors.HexColor("#D1F2EB")
ORANGE = colors.HexColor("#E67E22")
LIGHT_ORANGE= colors.HexColor("#FDEBD0")
RED = colors.HexColor("#C0392B")
LIGHT_RED = colors.HexColor("#FADBD8")
PURPLE = colors.HexColor("#7D3C98")
LIGHT_PURPLE= colors.HexColor("#E8DAEF")
YELLOW = colors.HexColor("#F1C40F")
LIGHT_YELLOW= colors.HexColor("#FEF9E7")
WHITE = colors.white
LIGHT_GRAY = colors.HexColor("#F2F3F4")
MID_GRAY = colors.HexColor("#BDC3C7")
DARK_GRAY = colors.HexColor("#2C3E50")
# โโ Styles โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
styles = getSampleStyleSheet()
def S(name, **kw):
return ParagraphStyle(name, **kw)
cover_title = S("CoverTitle", fontSize=32, textColor=WHITE,
alignment=TA_CENTER, fontName="Helvetica-Bold", leading=40)
cover_sub = S("CoverSub", fontSize=16, textColor=colors.HexColor("#AED6F1"),
alignment=TA_CENTER, fontName="Helvetica", leading=24)
cover_note = S("CoverNote", fontSize=11, textColor=colors.HexColor("#D5D8DC"),
alignment=TA_CENTER, fontName="Helvetica-Oblique", leading=16)
ch_title = S("ChTitle", fontSize=20, textColor=WHITE,
alignment=TA_LEFT, fontName="Helvetica-Bold", leading=26,
spaceAfter=4)
section_hd = S("SecHd", fontSize=14, textColor=DARK_BLUE,
fontName="Helvetica-Bold", spaceBefore=10, spaceAfter=4)
sub_hd = S("SubHd", fontSize=12, textColor=TEAL,
fontName="Helvetica-Bold", spaceBefore=6, spaceAfter=3)
body = S("Body", fontSize=10, textColor=DARK_GRAY,
fontName="Helvetica", leading=15, spaceAfter=3)
body_bold = S("BodyBold", fontSize=10, textColor=DARK_GRAY,
fontName="Helvetica-Bold", leading=15, spaceAfter=3)
bullet_s = S("Bullet", fontSize=10, textColor=DARK_GRAY,
fontName="Helvetica", leading=15, leftIndent=14,
bulletIndent=0, spaceAfter=2,
bulletText="\u2022")
tip_s = S("Tip", fontSize=10, textColor=colors.HexColor("#1A5276"),
fontName="Helvetica-Oblique", leading=14,
leftIndent=8, spaceAfter=2)
small_bold = S("SmallBold", fontSize=9, textColor=DARK_GRAY,
fontName="Helvetica-Bold", leading=12)
table_hd = S("TblHd", fontSize=9, textColor=WHITE,
fontName="Helvetica-Bold", alignment=TA_CENTER, leading=12)
table_cell = S("TblCell", fontSize=9, textColor=DARK_GRAY,
fontName="Helvetica", alignment=TA_LEFT, leading=12)
footer_s = S("Footer", fontSize=8, textColor=MID_GRAY,
alignment=TA_CENTER, fontName="Helvetica-Oblique")
# โโ Page callbacks โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def cover_bg(canv, doc):
w, h = A4
# gradient-like background: two rects
canv.setFillColor(DARK_BLUE)
canv.rect(0, 0, w, h, fill=1, stroke=0)
canv.setFillColor(MED_BLUE)
canv.rect(0, h*0.55, w, h*0.45, fill=1, stroke=0)
# decorative bar
canv.setFillColor(TEAL)
canv.rect(0, h*0.54, w, 6, fill=1, stroke=0)
canv.setFillColor(ORANGE)
canv.rect(0, h*0.54-8, w, 4, fill=1, stroke=0)
def normal_page(canv, doc):
w, h = A4
# top bar
canv.setFillColor(DARK_BLUE)
canv.rect(0, h-36, w, 36, fill=1, stroke=0)
canv.setFont("Helvetica-Bold", 9)
canv.setFillColor(WHITE)
canv.drawString(1.5*cm, h-24, "GNM Revision Study Guide")
canv.drawRightString(w-1.5*cm, h-24, "Nursing Excellence Series")
# bottom bar
canv.setFillColor(DARK_BLUE)
canv.rect(0, 0, w, 28, fill=1, stroke=0)
canv.setFont("Helvetica", 8)
canv.setFillColor(MID_GRAY)
canv.drawCentredString(w/2, 9, f"Page {doc.page}")
# side accent
canv.setFillColor(TEAL)
canv.rect(0, 28, 4, h-64, fill=1, stroke=0)
def chapter_page(canv, doc):
normal_page(canv, doc)
# โโ Helper builders โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def chapter_header(title, subtitle="", color=MED_BLUE):
w, _ = A4
inner_w = w - 3.5*cm # account for left accent bar + margins
tbl = Table([[Paragraph(title, ch_title)],
[Paragraph(subtitle, S("ChSub", fontSize=11, textColor=colors.HexColor("#AED6F1"),
fontName="Helvetica-Oblique", leading=16))]],
colWidths=[inner_w])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 14),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("ROUNDEDCORNERS", [6]),
]))
return tbl
def info_box(text, bg=LIGHT_BLUE, border=MED_BLUE):
w, _ = A4
inner_w = w - 3.5*cm
tbl = Table([[Paragraph(text, tip_s)]], colWidths=[inner_w])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("LINERIGHT", (0,0), (-1,-1), 4, border),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 8),
]))
return tbl
def two_col_table(headers, rows, col_widths=None, hdr_color=MED_BLUE):
w, _ = A4
inner_w = w - 3.5*cm
if col_widths is None:
col_widths = [inner_w * 0.38, inner_w * 0.62]
data = [[Paragraph(h, table_hd) for h in headers]]
for row in rows:
data.append([Paragraph(str(c), table_cell) for c in row])
tbl = Table(data, colWidths=col_widths, repeatRows=1)
style = [
("BACKGROUND", (0,0), (-1,0), hdr_color),
("BACKGROUND", (0,1), (-1,-1), LIGHT_GRAY),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_GRAY]),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]
tbl.setStyle(TableStyle(style))
return tbl
def three_col_table(headers, rows, col_widths=None, hdr_color=TEAL):
w, _ = A4
inner_w = w - 3.5*cm
if col_widths is None:
col_widths = [inner_w*0.28, inner_w*0.38, inner_w*0.34]
data = [[Paragraph(h, table_hd) for h in headers]]
for row in rows:
data.append([Paragraph(str(c), table_cell) for c in row])
tbl = Table(data, colWidths=col_widths, repeatRows=1)
style = [
("BACKGROUND", (0,0), (-1,0), hdr_color),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_TEAL]),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]
tbl.setStyle(TableStyle(style))
return tbl
def B(text):
return Paragraph(f"\u2022 {text}", bullet_s)
def sp(n=6):
return Spacer(1, n)
def HR():
return HRFlowable(width="100%", thickness=1, color=MID_GRAY, spaceAfter=4, spaceBefore=4)
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# BUILD DOCUMENT
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
doc = BaseDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=1.8*cm, rightMargin=1.2*cm,
topMargin=1.5*cm, bottomMargin=1.2*cm,
title="GNM Revision Study Guide",
author="Orris Nursing Series"
)
cover_frame = Frame(0, 0, A4[0], A4[1], leftPadding=1.8*cm, rightPadding=1.2*cm,
topPadding=1.5*cm, bottomPadding=1.2*cm, id="cover")
normal_frame = Frame(0.5*cm, 1.0*cm, A4[0]-1.7*cm, A4[1]-2.8*cm,
leftPadding=1.0*cm, rightPadding=0.5*cm,
topPadding=0.3*cm, bottomPadding=0.3*cm, id="normal")
doc.addPageTemplates([
PageTemplate(id="Cover", frames=[cover_frame], onPage=cover_bg),
PageTemplate(id="Normal", frames=[normal_frame], onPage=normal_page),
])
story = []
# โโโโโโโโโโโโโโโโโโโโโโโโโโโ COVER PAGE โโโโโโโโโโโโโโโโโโโโโโโ
story.append(Spacer(1, 3.2*cm))
story.append(Paragraph("๐ GNM", cover_title))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Revision Study Guide", cover_title))
story.append(Spacer(1, 0.6*cm))
story.append(Paragraph("General Nursing and Midwifery", cover_sub))
story.append(Spacer(1, 0.4*cm))
story.append(Paragraph("Complete Theory + Quick Revision + Career Roadmap", cover_sub))
story.append(Spacer(1, 1.2*cm))
story.append(Paragraph("โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ", cover_note))
story.append(Spacer(1, 0.5*cm))
story.append(Paragraph("Anatomy & Physiology โข Medical-Surgical Nursing", cover_note))
story.append(Paragraph("Pharmacology โข Community Health โข OBG โข Pediatrics", cover_note))
story.append(Paragraph("Mental Health โข Career Options โข Revision Techniques", cover_note))
story.append(Spacer(1, 1.0*cm))
story.append(Paragraph("Orris Nursing Excellence Series | 2026", cover_note))
from reportlab.platypus import NextPageTemplate
story.append(NextPageTemplate("Normal"))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโ PAGE 2: HOW TO USE โโโโโโโโโโโโโโโ
story.append(chapter_header("๐ How to Use This Guide", "Smart revision strategies for GNM students", DARK_BLUE))
story.append(sp(10))
story.append(Paragraph("Revision Techniques", section_hd))
story.append(HR())
techniques = [
["Technique", "Description", "Best For"],
["3R Method", "Read โ Recall โ Review\nClose book, write what you remember, then compare", "All subjects"],
["Flowcharts", "Convert theory into visual diagrams\n1 page theory = 1 diagram", "Anatomy, Physiology"],
["Mnemonics", "Create Hindi/English shortcuts\nfor long lists", "Pharmacology, Cranial nerves"],
["Teach-Back", "Explain topic to yourself/friend\nIf can't explain = not learned yet", "Any difficult topic"],
["PYQ Practice", "Solve previous year exam questions\nIdentifies important topics", "Exam preparation"],
["Flashcards", "Front: Question | Back: Answer\nRevise 20-30 cards daily (use Anki app)", "Definitions, Drug names"],
]
w, _ = A4
inner_w = w - 3.5*cm
tdata = [[Paragraph(techniques[0][i], table_hd) for i in range(3)]]
for row in techniques[1:]:
tdata.append([Paragraph(c, table_cell) for c in row])
t = Table(tdata, colWidths=[inner_w*0.22, inner_w*0.48, inner_w*0.30], repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), PURPLE),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_PURPLE]),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(t)
story.append(sp(10))
story.append(Paragraph("Daily Study Timetable", section_hd))
story.append(HR())
timetable = [
["Time", "Activity"],
["6:00 - 8:00 AM", "New topic study (fresh mind - best retention)"],
["2:00 - 4:00 PM", "Revision of morning topic + make notes"],
["7:00 - 9:00 PM", "Previous year questions / Flashcards"],
["Before sleep", "10 min - repeat key points mentally"],
["Sunday", "Full week revision only - NO new topics"],
]
story.append(two_col_table(["Time", "Activity"], timetable[1:], [inner_w*0.3, inner_w*0.7], hdr_color=ORANGE))
story.append(sp(10))
story.append(info_box("๐ก Golden Rule: Consistency > Intensity. 2 hours daily beats 10 hours once a week. Sleep is when memory consolidates - never sacrifice sleep!", LIGHT_YELLOW, ORANGE))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโ CHAPTER 1: ANATOMY โโโโโโโโโโโโโโโ
story.append(chapter_header("Chapter 1: Anatomy & Physiology", "Body systems, structures and functions", MED_BLUE))
story.append(sp(10))
story.append(Paragraph("Key Body Systems Overview", section_hd))
story.append(HR())
systems = [
["Body System", "Key Organs", "Main Function"],
["Cardiovascular", "Heart, Blood vessels, Blood", "Pump blood, transport O2/nutrients"],
["Respiratory", "Lungs, Trachea, Bronchi", "Gas exchange (O2 in, CO2 out)"],
["Renal/Urinary", "Kidneys, Ureters, Bladder", "Filter blood, remove waste, regulate fluid"],
["Nervous", "Brain, Spinal cord, Nerves", "Control all body functions"],
["Endocrine", "Pituitary, Thyroid, Pancreas", "Hormone secretion, metabolism"],
["Digestive", "Stomach, Intestines, Liver", "Digestion and absorption of nutrients"],
["Musculoskeletal","Bones, Muscles, Joints", "Support, movement, protection"],
["Reproductive", "Ovaries/Testes, Uterus", "Reproduction"],
["Immune/Lymphatic","Lymph nodes, Spleen, WBC", "Defense against infection"],
]
story.append(three_col_table(["Body System", "Key Organs", "Main Function"], systems[1:]))
story.append(sp(10))
story.append(Paragraph("Heart - Quick Revision", section_hd))
story.append(HR())
story.append(B("4 chambers: Right Atrium, Right Ventricle, Left Atrium, Left Ventricle"))
story.append(B("4 valves: Tricuspid, Pulmonary, Mitral (Bicuspid), Aortic"))
story.append(B("Normal heart rate: 60-100 bpm | Normal BP: 120/80 mmHg"))
story.append(B("Cardiac output = Heart rate ร Stroke volume (Normal: ~5 L/min)"))
story.append(B("SA node = natural pacemaker of heart (60-100 bpm)"))
story.append(B("AV node delays impulse by 0.1 sec to allow ventricular filling"))
story.append(sp(8))
story.append(Paragraph("Respiratory System - Key Values", section_hd))
story.append(HR())
resp_vals = [
["Parameter", "Normal Value"],
["Tidal Volume (TV)", "500 mL"],
["Respiratory Rate", "12-20 breaths/min"],
["Vital Capacity (VC)", "~4800 mL (male)"],
["Residual Volume (RV)", "~1200 mL"],
["O2 Saturation (SpO2)", "95-100%"],
["PaO2", "80-100 mmHg"],
["PaCO2", "35-45 mmHg"],
["pH (arterial blood)", "7.35-7.45"],
]
story.append(two_col_table(["Parameter", "Normal Value"], resp_vals[1:], [inner_w*0.5, inner_w*0.5], hdr_color=TEAL))
story.append(sp(8))
story.append(info_box("๐ Exam Tip: Learn normal values by heart - questions on ABG (Arterial Blood Gas) values are very common in GNM exams!", LIGHT_TEAL, TEAL))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโ CHAPTER 2: MED-SURG โโโโโโโโโโโโโโ
story.append(chapter_header("Chapter 2: Medical-Surgical Nursing", "Disease management and nursing care", TEAL))
story.append(sp(10))
story.append(Paragraph("Disease Revision Format (Use for EVERY disease)", section_hd))
story.append(HR())
story.append(info_box("Always study each disease in this format:\nDefinition โ Causes (Etiology) โ Signs & Symptoms โ Diagnosis โ Treatment โ Nursing Care โ Complications", LIGHT_BLUE, MED_BLUE))
story.append(sp(8))
story.append(Paragraph("Common Diseases - Quick Reference", section_hd))
story.append(HR())
diseases = [
["Disease", "Key Signs/Symptoms", "Key Nursing Care"],
["Myocardial Infarction (MI)", "Crushing chest pain, radiation to left arm/jaw, diaphoresis, nausea", "Bed rest, O2, ECG monitoring, IV access, pain relief (morphine)"],
["Diabetes Mellitus", "Polyuria, polydipsia, polyphagia, weight loss, fatigue", "Blood sugar monitoring, insulin admin, foot care, diet education"],
["Hypertension", "Headache, dizziness, BP >140/90, blurred vision", "Antihypertensives, low-sodium diet, stress reduction, BP monitoring"],
["Pneumonia", "Fever, cough with sputum, chest pain, dyspnea, crackles", "Antibiotics, O2, deep breathing exercises, hydration, positioning"],
["Urinary Tract Infection", "Dysuria, frequency, urgency, fever, cloudy urine", "Antibiotics, increased fluid intake, perineal hygiene, urine culture"],
["Appendicitis", "RLQ pain, Rebound tenderness, Nausea, Fever, Rovsing sign +", "Pre-op prep, NPO, IV fluids, surgery (appendicectomy)"],
["Asthma", "Wheezing, dyspnea, cough (night/early morning), chest tightness", "Bronchodilators (salbutamol), corticosteroids, avoid triggers, peak flow"],
["Stroke (CVA)", "Sudden weakness one side, slurred speech, facial droop, vision loss", "ABC assessment, positioning (HOB 30ยฐ), neuro checks, rehabilitation"],
]
w2 = [inner_w*0.20, inner_w*0.38, inner_w*0.42]
story.append(three_col_table(["Disease", "Key Signs/Symptoms", "Key Nursing Care"], diseases[1:], col_widths=w2))
story.append(sp(8))
story.append(Paragraph("Vital Signs - Normal Ranges", section_hd))
story.append(HR())
vitals = [
["Vital Sign", "Normal Adult Range", "Action if Abnormal"],
["Temperature", "36.5ยฐC - 37.5ยฐC (97.7-99.5ยฐF)", "Antipyretics, tepid sponging, report >38.5ยฐC"],
["Pulse Rate", "60 - 100 bpm", "Report <60 (bradycardia) or >100 (tachycardia)"],
["Respiration", "12 - 20 breaths/min", "Report <10 or >24, check O2 saturation"],
["Blood Pressure", "90/60 - 120/80 mmHg", "Report <90/60 (hypotension) or >140/90 (HTN)"],
["SpO2", "95 - 100%", "Give O2 if <95%, urgent action if <90%"],
["Blood Sugar (fasting)", "70 - 100 mg/dL", "Check insulin, treat hypo/hyperglycemia"],
]
story.append(three_col_table(["Vital Sign", "Normal Adult Range", "Action if Abnormal"], vitals[1:], col_widths=[inner_w*0.22, inner_w*0.35, inner_w*0.43], hdr_color=RED))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโ CHAPTER 3: PHARMACOLOGY โโโโโโโโโ
story.append(chapter_header("Chapter 3: Pharmacology", "Drug classifications, actions and nursing considerations", ORANGE))
story.append(sp(10))
story.append(Paragraph("ABCDE Drug Study Method", section_hd))
story.append(HR())
abcde = [
["Letter", "Stands For", "What to Study"],
["A", "Action", "How does the drug work? (mechanism)"],
["B", "Brand Name", "Common brand names used in hospitals"],
["C", "Contraindications","When NOT to give this drug"],
["D", "Dose", "Adult dose, pediatric dose, frequency"],
["E", "Effects", "Side effects and adverse reactions to monitor"],
]
story.append(three_col_table(["Letter", "Stands For", "What to Study"], abcde[1:],
col_widths=[inner_w*0.12, inner_w*0.28, inner_w*0.60], hdr_color=ORANGE))
story.append(sp(10))
story.append(Paragraph("Common Drug Groups - Quick Reference", section_hd))
story.append(HR())
drugs = [
["Drug Class", "Examples", "Key Use & Nursing Points"],
["Antibiotics (Penicillin)", "Amoxicillin, Ampicillin", "Bacterial infections. Check allergy before giving. Complete full course."],
["Antibiotics (Cephalosporin)", "Ceftriaxone, Cefixime", "Broad spectrum. Cross-allergy with penicillin possible."],
["Analgesics (Opioid)", "Morphine, Tramadol", "Severe pain. Monitor resp. rate - can cause respiratory depression."],
["Analgesics (Non-opioid)", "Paracetamol, Ibuprofen", "Mild-moderate pain. Paracetamol safe in pregnancy."],
["Antihypertensives (ACE-I)", "Enalapril, Lisinopril", "HTN, heart failure. Monitor BP, check for dry cough (common SE)."],
["Antidiabetics (Insulin)", "Regular, NPH, Glargine", "DM management. Check blood sugar before giving. Rotate injection sites."],
["Antidiabetics (Oral)", "Metformin, Glipizide", "Type 2 DM. Metformin: give with food, check kidney function."],
["Bronchodilators", "Salbutamol, Ipratropium", "Asthma, COPD. Teach inhaler technique. Monitor heart rate."],
["Diuretics", "Furosemide, Spironolactone", "Edema, HTN, heart failure. Monitor K+ levels (Furosemide causes loss)."],
["Anticoagulants", "Heparin, Warfarin", "Prevent clots. Monitor aPTT (heparin) / INR (warfarin). Bleeding risk!"],
["Antacids / PPIs", "Omeprazole, Ranitidine", "GERD, peptic ulcer. Give before meals. Monitor Mg+ long-term."],
["Corticosteroids", "Prednisolone, Dexamethasone", "Inflammation, asthma, allergy. Taper slowly - do not stop abruptly."],
]
story.append(three_col_table(["Drug Class", "Examples", "Key Use & Nursing Points"], drugs[1:],
col_widths=[inner_w*0.25, inner_w*0.22, inner_w*0.53], hdr_color=ORANGE))
story.append(sp(8))
story.append(info_box("โ ๏ธ Safety Rule: ALWAYS check the 5 Rights before giving any drug:\nRight Patient โข Right Drug โข Right Dose โข Right Route โข Right Time", LIGHT_RED, RED))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโ CHAPTER 4: COMMUNITY HEALTH โโโโโโ
story.append(chapter_header("Chapter 4: Community Health Nursing", "National programs, immunization and public health", colors.HexColor("#1F618D")))
story.append(sp(10))
story.append(Paragraph("Important National Health Programs", section_hd))
story.append(HR())
programs = [
["Program", "Full Form", "Focus Area"],
["NHM", "National Health Mission", "Overall healthcare strengthening"],
["RMNCH+A", "Reproductive, Maternal, Newborn, Child, Adolescent Health", "Mother & child health"],
["JSSK", "Janani Shishu Suraksha Karyakram", "Free delivery services"],
["JSY", "Janani Suraksha Yojana", "Institutional delivery incentive"],
["PMMVY", "Pradhan Mantri Matru Vandana Yojana", "Cash benefit for pregnant women"],
["NPCDCS", "National Programme for Non-Communicable Diseases", "Cancer, diabetes, CVD"],
["NTEP", "National Tuberculosis Elimination Programme", "TB elimination by 2025"],
["NVBDCP", "National Vector Borne Disease Control Programme", "Malaria, Dengue, Filaria"],
["NPCB", "National Programme for Control of Blindness", "Eye care, cataract surgery"],
["RKSK", "Rashtriya Kishor Swasthya Karyakram", "Adolescent health"],
]
story.append(three_col_table(["Program", "Full Form", "Focus Area"], programs[1:],
col_widths=[inner_w*0.14, inner_w*0.52, inner_w*0.34], hdr_color=colors.HexColor("#1F618D")))
story.append(sp(10))
story.append(Paragraph("Immunization Schedule (Universal Immunization Programme)", section_hd))
story.append(HR())
vaccines = [
["Age", "Vaccine", "Disease Protected Against"],
["Birth", "BCG, OPV-0, Hep-B-0", "TB, Polio, Hepatitis B"],
["6 weeks", "OPV-1, Penta-1, IPV-1, RVV-1", "Polio, DPT+HepB+Hib, Rotavirus"],
["10 weeks", "OPV-2, Penta-2, RVV-2", "Polio, DPT+HepB+Hib, Rotavirus"],
["14 weeks", "OPV-3, Penta-3, IPV-2, RVV-3", "Polio, DPT+HepB+Hib, Rotavirus"],
["9-12 months", "MR-1, JE-1, Vitamin A (1st)", "Measles-Rubella, Japanese Encephalitis"],
["16-24 months","MR-2, DPT Booster-1, OPV Boost", "Measles-Rubella, DPT, Polio"],
["5-6 years", "DPT Booster-2", "Diphtheria, Pertussis, Tetanus"],
["10 years", "Td", "Tetanus, Diphtheria"],
["16 years", "Td", "Tetanus, Diphtheria"],
]
story.append(three_col_table(["Age", "Vaccine", "Disease Protected Against"], vaccines[1:],
col_widths=[inner_w*0.20, inner_w*0.42, inner_w*0.38], hdr_color=TEAL))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโ CHAPTER 5: OBG โโโโโโโโโโโโโโโโโโโ
story.append(chapter_header("Chapter 5: OBG Nursing", "Obstetrics, Gynaecology and Midwifery", colors.HexColor("#884EA0")))
story.append(sp(10))
story.append(Paragraph("Stages of Labour", section_hd))
story.append(HR())
labour = [
["Stage", "Description", "Duration"],
["1st Stage - Latent Phase", "Cervix dilates 0-3 cm, mild contractions", "~8 hours (primi), ~5 hrs (multi)"],
["1st Stage - Active Phase", "Cervix dilates 4-10 cm, strong contractions", "~6 hours (primi), ~4 hrs (multi)"],
["2nd Stage", "Full dilation to delivery of baby", "30 min-2 hrs (primi), 15-30 min (multi)"],
["3rd Stage", "Delivery of placenta", "5-30 minutes"],
["4th Stage", "1-4 hours after delivery, monitoring", "~4 hours"],
]
story.append(three_col_table(["Stage", "Description", "Duration"], labour[1:],
col_widths=[inner_w*0.28, inner_w*0.45, inner_w*0.27], hdr_color=colors.HexColor("#884EA0")))
story.append(sp(8))
story.append(Paragraph("Antenatal Care (ANC) Schedule", section_hd))
story.append(HR())
anc = [
["Visit", "When", "Key Activities"],
["1st ANC Visit", "Within 12 weeks (1st trimester)", "Registration, blood tests, urine test, weight, BP, iron + folic acid"],
["2nd ANC Visit", "14-26 weeks (2nd trimester)", "BP, weight, Hb, anomaly scan (18-20 wks), TT injection"],
["3rd ANC Visit", "28-34 weeks", "Lie and presentation of fetus, BP, urine protein, GDM screening"],
["4th ANC Visit", "36 weeks onwards", "Birth plan, danger signs, breastfeeding counseling, hospital bag"],
]
story.append(three_col_table(["Visit", "When", "Key Activities"], anc[1:],
col_widths=[inner_w*0.20, inner_w*0.30, inner_w*0.50], hdr_color=colors.HexColor("#884EA0")))
story.append(sp(8))
story.append(Paragraph("Danger Signs in Pregnancy (MUST KNOW)", section_hd))
story.append(HR())
story.append(info_box("๐จ Refer immediately if patient has:\nโข Severe headache or blurred vision (Pre-eclampsia)\nโข Excessive swelling of face, hands, feet\nโข Heavy vaginal bleeding (Antepartum Haemorrhage)\nโข Reduced fetal movements\nโข High fever with rigors\nโข Convulsions (Eclampsia)\nโข Premature rupture of membranes (PROM)", LIGHT_RED, RED))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโ CHAPTER 6: PEDIATRIC โโโโโโโโโโโโโ
story.append(chapter_header("Chapter 6: Pediatric Nursing", "Child health, growth and development", TEAL))
story.append(sp(10))
story.append(Paragraph("Growth and Development Milestones", section_hd))
story.append(HR())
milestones = [
["Age", "Motor Skills", "Language/Social"],
["1 month", "Lifts chin when prone", "Responds to sound, cries"],
["3 months", "Holds head up, follows objects", "Cooing, social smile"],
["6 months", "Sits with support, rolls over", "Babbles, laughs"],
["9 months", "Sits without support, crawls", "Mama/Dada (non-specific)"],
["12 months", "Stands, cruises, first steps", "1-3 words with meaning"],
["18 months", "Walks alone, climbs stairs", "10-20 words, points"],
["2 years", "Runs, kicks ball", "2-word sentences, 50+ words"],
["3 years", "Rides tricycle, draws circle", "Tells name/age, 3-word sentences"],
["5 years", "Skips, ties shoes", "Full sentences, reads simple words"],
]
story.append(three_col_table(["Age", "Motor Skills", "Language/Social"], milestones[1:],
col_widths=[inner_w*0.18, inner_w*0.42, inner_w*0.40], hdr_color=TEAL))
story.append(sp(8))
story.append(Paragraph("Pediatric Normal Values", section_hd))
story.append(HR())
ped_vals = [
["Parameter", "Newborn", "1 Year", "5 Years"],
["Heart Rate (bpm)", "120-160", "80-130", "70-110"],
["RR (breaths/min)", "30-60", "20-40", "20-30"],
["BP (mmHg)", "60-90/30-60", "80-100/50-70", "90-110/55-75"],
["Temperature (ยฐC)", "36.5-37.5", "36.5-37.5", "36.5-37.5"],
["Weight (approx kg)", "2.5-4.0", "~10", "~18-20"],
]
ww = [inner_w*0.30, inner_w*0.18, inner_w*0.18, inner_w*0.18]
# use manual table
pdata = [[Paragraph(h, table_hd) for h in ["Parameter","Newborn","1 Year","5 Years"]]]
for row in ped_vals[1:]:
pdata.append([Paragraph(c, table_cell) for c in row])
pt = Table(pdata, colWidths=ww, repeatRows=1)
pt.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_TEAL]),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(pt)
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโ CHAPTER 7: MENTAL HEALTH โโโโโโโโโ
story.append(chapter_header("Chapter 7: Mental Health Nursing", "Psychiatric disorders and therapeutic communication", PURPLE))
story.append(sp(10))
story.append(Paragraph("Common Psychiatric Disorders - Quick Reference", section_hd))
story.append(HR())
mental = [
["Disorder", "Key Features", "Nursing Intervention"],
["Schizophrenia", "Hallucinations, delusions, flat affect, disorganized thinking", "Antipsychotics (Haloperidol), safe environment, reality orientation"],
["Depression (MDD)", "Persistent sadness, anhedonia, sleep changes, suicidal ideation", "Antidepressants (SSRIs), therapeutic relationship, suicide precautions"],
["Bipolar Disorder", "Manic episodes (grandiosity, decreased sleep) + depression", "Mood stabilizers (Lithium), monitor lithium levels, safety"],
["Anxiety Disorder", "Excessive worry, palpitations, sweating, restlessness", "Anxiolytics (short-term), relaxation techniques, CBT support"],
["OCD", "Obsessions + compulsions, significant distress", "SSRIs, response prevention, non-judgmental approach"],
["PTSD", "Flashbacks, nightmares, hypervigilance after trauma", "Safe environment, trauma-informed care, counseling"],
["Dementia (Alzheimer)", "Memory loss, confusion, disorientation, personality change", "Reality orientation, safe environment, caregiver education"],
]
story.append(three_col_table(["Disorder", "Key Features", "Nursing Intervention"], mental[1:],
col_widths=[inner_w*0.22, inner_w*0.40, inner_w*0.38], hdr_color=PURPLE))
story.append(sp(8))
story.append(Paragraph("Therapeutic Communication Techniques", section_hd))
story.append(HR())
comm = [
["Technique", "Example"],
["Active Listening", "Maintain eye contact, nod, don't interrupt"],
["Open-ended Questions", "'Tell me how you're feeling today?'"],
["Reflection", "'You seem sad when you talk about your family.'"],
["Clarification", "'Can you tell me more about what you mean?'"],
["Silence", "Allow patient time to think and express"],
["Empathy", "'I understand that must be very difficult for you.'"],
["Avoid giving advice", "Don't say 'You should...' - let patient decide"],
["Avoid false reassurance","Don't say 'Everything will be fine' - be honest"],
]
story.append(two_col_table(["Technique", "Example"], comm[1:],
col_widths=[inner_w*0.35, inner_w*0.65], hdr_color=PURPLE))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโ CHAPTER 8: CAREER ROADMAP โโโโโโโโ
story.append(chapter_header("Chapter 8: Career Roadmap After GNM", "Your complete guide to career growth and further education", DARK_BLUE))
story.append(sp(10))
story.append(Paragraph("Career Options After GNM", section_hd))
story.append(HR())
career = [
["Option", "Duration", "Eligibility", "Outcome"],
["B.Sc Post Basic Nursing", "2 years", "GNM + Registration", "Degree upgrade, better salary, abroad scope"],
["Govt Staff Nurse Job", "Direct", "GNM + Registration", "AIIMS/ESIC/Railway/Army - โน35-60k/month"],
["Abroad Nursing", "1-2 yr prep", "GNM + B.Sc + IELTS", "UK/Canada/Gulf - โน1.5-6L/month"],
["NPCC", "2 years", "B.Sc + 2yr ICU exp", "ICU specialist - โน60k-1.5L/month"],
["M.Sc Nursing", "2 years", "B.Sc Nursing", "Teaching + senior clinical roles"],
["BAMS (via NEET)", "5.5 years","12th PCB + NEET", "'Dr.' title, own clinic possible"],
["BHMS (via NEET)", "5.5 years","12th PCB + NEET", "'Dr.' title, Homeopathy practice"],
["NIOS 12th PCB โ NEET", "1+yr", "Age <25 (General)", "Gateway to BAMS/BHMS/MBBS"],
]
wc = [inner_w*0.26, inner_w*0.14, inner_w*0.24, inner_w*0.36]
cdata = [[Paragraph(h, table_hd) for h in ["Option","Duration","Eligibility","Outcome"]]]
for row in career[1:]:
cdata.append([Paragraph(c, table_cell) for c in row])
ct = Table(cdata, colWidths=wc, repeatRows=1)
ct.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_BLUE]),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(ct)
story.append(sp(10))
story.append(Paragraph("Salary Growth Chart", section_hd))
story.append(HR())
salary = [
["Stage / Qualification", "Monthly Salary (Approx)"],
["GNM - Fresh Graduate", "โน18,000 - โน25,000"],
["GNM - Staff Nurse (Govt)", "โน35,000 - โน60,000"],
["B.Sc Post Basic Nursing", "โน35,000 - โน70,000"],
["NPCC (ICU Specialist)", "โน60,000 - โน1,50,000"],
["M.Sc Nursing", "โน80,000 - โน2,00,000"],
["Abroad Nursing (Gulf)", "โน1,50,000 - โน3,00,000"],
["Abroad Nursing (USA/UK/Canada)","โน3,00,000 - โน6,00,000+"],
["BAMS/BHMS Doctor - Own Clinic", "โน50,000 - Unlimited"],
]
story.append(two_col_table(["Stage / Qualification", "Monthly Salary (Approx)"], salary[1:],
col_widths=[inner_w*0.55, inner_w*0.45], hdr_color=ORANGE))
story.append(sp(10))
story.append(info_box("๐ฏ Best Path (Arts Stream GNM): GNM โ B.Sc Post Basic Nursing (2yr) โ Govt Job / Abroad Nursing. If age <25 and want 'Doctor' title: NIOS 12th PCB โ NEET โ BAMS (5.5yr)", LIGHT_YELLOW, ORANGE))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโ CHAPTER 9: QUICK REVISION โโโโโโโโ
story.append(chapter_header("Chapter 9: Quick Revision - Must-Know Lists", "Key facts, normal values and mnemonics", RED))
story.append(sp(10))
story.append(Paragraph("Important Normal Values - Master Reference", section_hd))
story.append(HR())
norm_vals = [
["Parameter", "Normal Value", "Notes"],
["Blood Pressure", "120/80 mmHg", "HTN: >140/90"],
["Heart Rate", "60-100 bpm", "Brady <60, Tachy >100"],
["Respiratory Rate", "12-20/min", "Tachypnea >24/min"],
["Temperature", "36.5-37.5ยฐC", "Fever >38ยฐC"],
["SpO2", "95-100%", "Give O2 if <95%"],
["Fasting Blood Sugar", "70-100 mg/dL", "DM if >126 mg/dL"],
["Hb (Male)", "13.5-17.5 g/dL", "Anemia if <13.5"],
["Hb (Female)", "12.0-15.5 g/dL", "Anemia if <12.0"],
["WBC Count", "4,000-11,000/ยตL", "Infection >11,000"],
["Platelet Count", "1.5-4.5 lakh/ยตL", "Thrombocytopenia <1.5L"],
["Serum Sodium (Na+)", "135-145 mEq/L", "Hyponatremia <135"],
["Serum Potassium (K+)", "3.5-5.0 mEq/L", "Hypokalemia <3.5, Hyperkalemia >5.0"],
["Serum Creatinine", "0.6-1.2 mg/dL", "Raised in kidney disease"],
["Urine Output", ">0.5 mL/kg/hr", "Oliguria <400mL/day"],
["INR (Warfarin patients)", "2.0-3.0 (therapeutic)","Bleeding risk if >3.0"],
["pH (Arterial blood)", "7.35-7.45", "Acidosis <7.35, Alkalosis >7.45"],
]
story.append(three_col_table(["Parameter", "Normal Value", "Notes"], norm_vals[1:],
col_widths=[inner_w*0.35, inner_w*0.28, inner_w*0.37], hdr_color=RED))
story.append(sp(8))
story.append(Paragraph("Key Mnemonics", section_hd))
story.append(HR())
mnemonics = [
["Mnemonic", "Full Form", "Topic"],
["SAMPLE", "Symptoms, Allergies, Medications, Past history, Last meal, Events", "History taking"],
["ABCDE", "Airway, Breathing, Circulation, Disability, Exposure", "Emergency assessment"],
["5 Rights", "Right Patient, Drug, Dose, Route, Time", "Drug administration"],
["APGAR", "Appearance, Pulse, Grimace, Activity, Respiration", "Newborn assessment (0-10 score)"],
["RICE", "Rest, Ice, Compression, Elevation", "Musculoskeletal injury"],
["SOCRATES", "Site, Onset, Character, Radiation, Alleviating, Timing, Exacerbating, Severity", "Pain assessment"],
["SMART Goals","Specific, Measurable, Achievable, Realistic, Time-bound", "Nursing care plan"],
["OLDCARTS", "Onset, Location, Duration, Character, Aggravating, Relieving, Timing, Severity", "Symptom assessment"],
]
story.append(three_col_table(["Mnemonic", "Full Form / Meaning", "Used In"], mnemonics[1:],
col_widths=[inner_w*0.14, inner_w*0.57, inner_w*0.29], hdr_color=RED))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโ FINAL PAGE: MOTIVATIONAL โโโโโโโโโ
story.append(chapter_header("You've Got This! ๐ช", "Final words before your exam", TEAL))
story.append(sp(20))
motivation = [
"โ
Study 2 hours daily - consistency is key",
"โ
Use the ABCDE format for every drug",
"โ
Learn normal values by heart",
"โ
Practice previous year questions daily",
"โ
Make short notes and flashcards",
"โ
Sleep 7-8 hours - memory consolidates during sleep",
"โ
Take 10 min breaks every hour",
"โ
Believe in yourself - you have already completed GNM clinical practice!",
]
for m in motivation:
story.append(B(m))
story.append(sp(4))
story.append(sp(20))
story.append(info_box(
"\"The secret of getting ahead is getting started.\"\n\n"
"Aap GNM complete kar chuke ho - sabse mushkil kaam ho gaya. "
"Ab sirf revision aur focus chahiye. Aap kar sakte ho! ๐",
LIGHT_TEAL, TEAL))
story.append(sp(20))
story.append(Paragraph("All the best for your exams and career! ๐", section_hd))
story.append(sp(6))
story.append(Paragraph("Orris Nursing Excellence Series | GNM Revision Study Guide | 2026",
S("Footer2", fontSize=9, textColor=MID_GRAY, alignment=TA_CENTER,
fontName="Helvetica-Oblique")))
# โโ Build โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /tmp/workspace/gnm-study-guide && python create_pdf.py 2>&1
ls -lh /tmp/workspace/gnm-study-guide/GNM_Revision_Study_Guide.pdf
GNM Revision Study Guide
PDF Document ยท PDF
| Chapter | Content |
|---|---|
| How to Use | 3R Method, Daily timetable, Smart techniques |
| Ch 1 - Anatomy & Physiology | Body systems table, Heart facts, Respiratory values |
| Ch 2 - Medical-Surgical | 8 common diseases, Vital signs reference |
| Ch 3 - Pharmacology | ABCDE drug method, 12 drug groups with nursing points |
| Ch 4 - Community Health | 10 national programs, Full immunization schedule |
| Ch 5 - OBG Nursing | Stages of labour, ANC schedule, Danger signs |
| Ch 6 - Pediatric Nursing | Growth milestones, Normal values by age |
| Ch 7 - Mental Health | 7 disorders, Therapeutic communication |
| Ch 8 - Career Roadmap | All options after GNM + Salary chart |
| Ch 9 - Quick Revision | 17 normal values, 8 key mnemonics |
Start with one chapter today and follow the daily timetable
โ
Heart ki structure (4 chambers, 4 valves)
โ
Blood flow: Right side โ Lungs โ Left side โ Body
โ
Normal values: BP, HR, Cardiac Output
โ
SA Node, AV Node, Bundle of His
โ
ECG waves: P, QRS, T - kya represent karte hain
๐ PDF ka Chapter 1 kholo - Heart section padho. Book band karo, 5 points likhะพ.
โ
Subah jo padha usse bina dekhe likhะพ
โ
Ek simple heart diagram banao (copy mat karo - khud banao)
โ
Compare karo PDF se - gap fill karo
โ
5 flashcard banao:
- Q: Normal HR kya hai? โ A: 60-100 bpm
- Q: Heart ke kitne chambers? โ A: 4
- Q: SA Node kya hai? โ A: Natural pacemaker
- Q: Normal BP? โ A: 120/80 mmHg
- Q: Cardiac Output? โ A: ~5 L/min
- Heart mein blood flow ka order kya hai?
- Normal Cardiac Output kitna hota hai?
- Systole aur Diastole mein kya difference hai?
- Tricuspid valve kahan hota hai?
- SA node ki normal rate kya hai?
Aankhein band karo aur mentally repeat karo:
"4 chambers... 4 valves... SA node... 60-100 bpm... 120/80..."
| Din | Morning Topic | Revision |
|---|---|---|
| Aaj - Tue | Ch 1 - CVS (Heart) | Afternoon |
| Wed | Ch 1 - Respiratory System | CVS + Respiratory |
| Thu | Ch 2 - Med-Surg (MI, DM) | All previous |
| Fri | Ch 3 - Pharmacology basics | Thu revision |
| Sat | Ch 4 - Community Health | Poore hafte ka |
| Sun | โ No new topic | Poora hafte revision only |
Morning session time nikal gaya - koi baat nahi! Abhi aap afternoon session ke liye taiyar ho.
Abhi (9:30 AM - 11:30 AM) โ Heart chapter padho (PDF Chapter 1)
2:00 - 3:00 PM โ Notes + Diagram banao
7:00 - 9:00 PM โ 5 questions practice karo
Sone se pehle โ 5 min mental recap
๐ก Ek kaam abhi karo: PDF kholo, Chapter 1 ka Heart section padho - sirf 30 min. Bas itna kaafi hai aaj ke liye shuru karne ke liye! ๐
Anatomy chapter 1 pdf
~/gnm-study-guide/create_anatomy_ch1.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch, cm
from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table,
TableStyle, HRFlowable, PageBreak, KeepTogether)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY, TA_RIGHT
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
from reportlab.pdfgen import canvas as pdfcanvas
OUTPUT = "/tmp/workspace/gnm-study-guide/GNM_Anatomy_Chapter1_CVS.pdf"
# โโ Colors โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
DARK_RED = colors.HexColor("#922B21")
MED_RED = colors.HexColor("#E74C3C")
LIGHT_RED = colors.HexColor("#FADBD8")
DARK_BLUE = colors.HexColor("#1A3A5C")
MED_BLUE = colors.HexColor("#2E86AB")
LIGHT_BLUE = colors.HexColor("#D6EAF8")
TEAL = colors.HexColor("#17A589")
LIGHT_TEAL = colors.HexColor("#D1F2EB")
ORANGE = colors.HexColor("#E67E22")
LIGHT_ORANGE= colors.HexColor("#FDEBD0")
PURPLE = colors.HexColor("#7D3C98")
LIGHT_PURPLE= colors.HexColor("#E8DAEF")
GOLD = colors.HexColor("#D4AC0D")
LIGHT_GOLD = colors.HexColor("#FEF9E7")
WHITE = colors.white
LIGHT_GRAY = colors.HexColor("#F2F3F4")
MID_GRAY = colors.HexColor("#BDC3C7")
DARK_GRAY = colors.HexColor("#2C3E50")
# โโ Styles โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def S(name, **kw):
return ParagraphStyle(name, **kw)
cover_title = S("CT", fontSize=36, textColor=WHITE, alignment=TA_CENTER,
fontName="Helvetica-Bold", leading=44)
cover_sub = S("CS", fontSize=15, textColor=colors.HexColor("#AED6F1"),
alignment=TA_CENTER, fontName="Helvetica", leading=22)
cover_note = S("CN", fontSize=11, textColor=colors.HexColor("#D5D8DC"),
alignment=TA_CENTER, fontName="Helvetica-Oblique", leading=16)
ch_title = S("ChT", fontSize=18, textColor=WHITE, fontName="Helvetica-Bold", leading=24)
sec_hd = S("SH", fontSize=13, textColor=DARK_RED, fontName="Helvetica-Bold",
spaceBefore=10, spaceAfter=4)
sub_hd = S("SSH", fontSize=11, textColor=DARK_BLUE, fontName="Helvetica-Bold",
spaceBefore=6, spaceAfter=3)
body = S("B", fontSize=10, textColor=DARK_GRAY, fontName="Helvetica",
leading=15, spaceAfter=3)
bullet_s = S("BL", fontSize=10, textColor=DARK_GRAY, fontName="Helvetica",
leading=15, leftIndent=14, spaceAfter=2)
tip_s = S("TIP", fontSize=10, textColor=DARK_GRAY, fontName="Helvetica",
leading=14, leftIndent=8, spaceAfter=2)
table_hd = S("TH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, leading=12)
table_cell = S("TC", fontSize=9, textColor=DARK_GRAY, fontName="Helvetica",
alignment=TA_LEFT, leading=12)
table_cell_c= S("TCC", fontSize=9, textColor=DARK_GRAY, fontName="Helvetica",
alignment=TA_CENTER, leading=12)
bold_body = S("BB", fontSize=10, textColor=DARK_GRAY, fontName="Helvetica-Bold",
leading=15, spaceAfter=3)
red_bold = S("RB", fontSize=10, textColor=DARK_RED, fontName="Helvetica-Bold",
leading=15, spaceAfter=3)
small_s = S("SM", fontSize=8, textColor=MID_GRAY, fontName="Helvetica",
alignment=TA_CENTER, leading=11)
q_style = S("QS", fontSize=10, textColor=DARK_BLUE, fontName="Helvetica-Bold",
leading=15, leftIndent=6, spaceAfter=2)
a_style = S("AS", fontSize=10, textColor=colors.HexColor("#1A5276"),
fontName="Helvetica", leading=14, leftIndent=20, spaceAfter=4)
# โโ Page callbacks โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
def cover_bg(canv, doc):
w, h = A4
canv.setFillColor(DARK_RED)
canv.rect(0, 0, w, h, fill=1, stroke=0)
canv.setFillColor(MED_RED)
canv.rect(0, h*0.56, w, h*0.44, fill=1, stroke=0)
canv.setFillColor(GOLD)
canv.rect(0, h*0.555, w, 6, fill=1, stroke=0)
canv.setFillColor(WHITE)
canv.rect(0, h*0.555-9, w, 3, fill=1, stroke=0)
# decorative heart symbol area
canv.setFillColor(colors.HexColor("#922B21"))
canv.rect(0, 0, w, h*0.15, fill=1, stroke=0)
def normal_page(canv, doc):
w, h = A4
canv.setFillColor(DARK_RED)
canv.rect(0, h-36, w, 36, fill=1, stroke=0)
canv.setFont("Helvetica-Bold", 9)
canv.setFillColor(WHITE)
canv.drawString(1.5*cm, h-24, "GNM Anatomy | Chapter 1: Cardiovascular System")
canv.drawRightString(w-1.5*cm, h-24, "Nursing Excellence Series")
# bottom
canv.setFillColor(DARK_RED)
canv.rect(0, 0, w, 28, fill=1, stroke=0)
canv.setFont("Helvetica", 8)
canv.setFillColor(colors.HexColor("#AED6F1"))
canv.drawCentredString(w/2, 9, f"Page {doc.page}")
# left accent
canv.setFillColor(GOLD)
canv.rect(0, 28, 4, h-64, fill=1, stroke=0)
# โโ Helpers โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
w_page, _ = A4
inner_w = w_page - 3.5*cm
def ch_header(title, subtitle="", color=MED_RED):
tbl = Table([[Paragraph(title, ch_title)],
[Paragraph(subtitle, S("CSub", fontSize=10, textColor=colors.HexColor("#FDEBD0"),
fontName="Helvetica-Oblique", leading=14))]],
colWidths=[inner_w])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 14),
]))
return tbl
def info_box(text, bg=LIGHT_BLUE, border=MED_BLUE, fs=10):
tbl = Table([[Paragraph(text, S("IB", fontSize=fs, textColor=DARK_GRAY,
fontName="Helvetica", leading=15,
leftIndent=6))]], colWidths=[inner_w])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("LINERIGHT", (0,0), (-1,-1), 5, border),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING",(0,0),(-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
]))
return tbl
def warn_box(text):
return info_box(text, bg=LIGHT_RED, border=MED_RED)
def tip_box(text):
return info_box(text, bg=LIGHT_GOLD, border=GOLD)
def mk_table(headers, rows, col_widths, hdr_color=MED_RED, alt=LIGHT_RED):
data = [[Paragraph(h, table_hd) for h in headers]]
for row in rows:
data.append([Paragraph(str(c), table_cell) for c in row])
tbl = Table(data, colWidths=col_widths, repeatRows=1)
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), hdr_color),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, alt]),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
return tbl
def mk_table_c(headers, rows, col_widths, hdr_color=MED_RED, alt=LIGHT_RED):
data = [[Paragraph(h, table_hd) for h in headers]]
for row in rows:
data.append([Paragraph(str(c), table_cell_c) for c in row])
tbl = Table(data, colWidths=col_widths, repeatRows=1)
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), hdr_color),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, alt]),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
return tbl
def B(text, color=DARK_GRAY):
return Paragraph(f"<font color='#{MED_RED.hexval()[2:]}'>♥</font> {text}",
S(f"BL{id(text)}", fontSize=10, textColor=color,
fontName="Helvetica", leading=15, leftIndent=16, spaceAfter=3))
def Bblue(text):
return Paragraph(f"\u2022 {text}", S(f"BLB{id(text)}", fontSize=10, textColor=DARK_GRAY,
fontName="Helvetica", leading=15, leftIndent=16, spaceAfter=3))
def sp(n=6): return Spacer(1, n)
def HR(): return HRFlowable(width="100%", thickness=1, color=colors.HexColor("#E8DAEF"),
spaceAfter=4, spaceBefore=4)
def box_diagram(lines, title="", bg=LIGHT_BLUE, border=MED_BLUE):
"""Render a text diagram in a monospace-style box."""
content = []
if title:
content.append(Paragraph(f"<b>{title}</b>", S("DT", fontSize=10, textColor=border,
fontName="Helvetica-Bold", leading=14,
spaceAfter=4)))
for line in lines:
content.append(Paragraph(line, S("DL", fontSize=9, textColor=DARK_GRAY,
fontName="Courier", leading=13)))
tbl = Table([[content]], colWidths=[inner_w])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("LINEBEFORE", (0,0), (-1,-1), 4, border),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 8),
]))
return tbl
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# BUILD
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
doc = BaseDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=1.8*cm, rightMargin=1.2*cm,
topMargin=1.5*cm, bottomMargin=1.2*cm,
title="GNM Anatomy Chapter 1 - Cardiovascular System",
author="Orris Nursing Series"
)
cover_frame = Frame(0, 0, A4[0], A4[1], leftPadding=2*cm, rightPadding=1.5*cm,
topPadding=2*cm, bottomPadding=1.5*cm, id="cover")
normal_frame = Frame(0.5*cm, 1.0*cm, A4[0]-1.7*cm, A4[1]-2.8*cm,
leftPadding=1.0*cm, rightPadding=0.5*cm,
topPadding=0.3*cm, bottomPadding=0.3*cm, id="normal")
doc.addPageTemplates([
PageTemplate(id="Cover", frames=[cover_frame], onPage=cover_bg),
PageTemplate(id="Normal", frames=[normal_frame], onPage=normal_page),
])
story = []
# โโ COVER โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(Spacer(1, 2.5*cm))
story.append(Paragraph("โฅ GNM Anatomy", cover_title))
story.append(sp(6))
story.append(Paragraph("Chapter 1", cover_title))
story.append(sp(10))
story.append(Paragraph("Cardiovascular System", cover_sub))
story.append(sp(6))
story.append(Paragraph("Heart โข Blood Vessels โข Circulation โข ECG โข Nursing Values", cover_sub))
story.append(sp(1.2*cm))
story.append(Paragraph("โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ", cover_note))
story.append(sp(6))
story.append(Paragraph("Complete theory with diagrams, tables, mnemonics", cover_note))
story.append(Paragraph("and self-test questions for GNM exam preparation", cover_note))
story.append(sp(1.5*cm))
story.append(Paragraph("Orris Nursing Excellence Series | 2026", cover_note))
from reportlab.platypus import NextPageTemplate
story.append(NextPageTemplate("Normal"))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# SECTION 1: INTRODUCTION
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(ch_header("1.1 Introduction to Cardiovascular System",
"Overview, components and functions"))
story.append(sp(10))
story.append(Paragraph("What is the Cardiovascular System?", sec_hd))
story.append(HR())
story.append(Paragraph(
"The Cardiovascular System (CVS) is the transport system of the body. "
"It consists of the <b>heart</b>, <b>blood vessels</b>, and <b>blood</b>. "
"Its main job is to deliver oxygen and nutrients to every cell and remove "
"carbon dioxide and waste products.", body))
story.append(sp(6))
story.append(Paragraph("Three Main Components", sec_hd))
story.append(HR())
comps = [
["Component", "Parts", "Function"],
["โค๏ธ Heart", "4 chambers, 4 valves, wall layers",
"Pump that pushes blood through the body (like an engine)"],
["๐ฉธ Blood Vessels", "Arteries, Veins, Capillaries",
"Pipes that carry blood to and from all organs"],
["๐ Blood", "RBC, WBC, Platelets, Plasma",
"Fluid that carries O2, nutrients, hormones, waste"],
]
story.append(mk_table(["Component", "Parts", "Function"], comps[1:],
[inner_w*0.20, inner_w*0.32, inner_w*0.48], hdr_color=DARK_RED, alt=LIGHT_RED))
story.append(sp(8))
story.append(info_box(
"๐ก Easy Yaad Karne Ka Trick:\n"
"CVS = C (circulation) + V (vessels) + S (supply)\n"
"Heart = Body ka PUMP | Arteries = Body se Door jaana | Veins = Heart ki taraf Aana",
LIGHT_GOLD, GOLD))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# SECTION 2: HEART ANATOMY
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(ch_header("1.2 Heart - Detailed Anatomy",
"Structure, chambers, valves and layers"))
story.append(sp(10))
story.append(Paragraph("Location and Size", sec_hd))
story.append(HR())
story.append(B("Location: Mediastinum (middle of chest), slightly LEFT of midline"))
story.append(B("Size: Approximately your own closed FIST"))
story.append(B("Weight: ~250-350 grams (adult)"))
story.append(B("Apex (tip): Points downward and to the LEFT (5th intercostal space, midclavicular line)"))
story.append(B("Base: Upper part, connected to great vessels"))
story.append(sp(8))
story.append(Paragraph("Layers of Heart Wall (3 Layers - BAD to EPI)", sec_hd))
story.append(HR())
layers = [
["Layer", "Location", "Description", "Mnemonic"],
["Epicardium", "Outermost", "Thin outer covering, also called visceral pericardium", "EPI = Outside (Epidermis jaisi)"],
["Myocardium", "Middle", "Thick muscular layer - does the actual pumping (cardiac muscle)", "MYO = Muscle (Myalgia = muscle pain)"],
["Endocardium", "Innermost", "Smooth inner lining of heart chambers and valves", "ENDO = Inside (Endoscopy = inside)"],
]
story.append(mk_table(["Layer", "Location", "Description", "Mnemonic"], layers[1:],
[inner_w*0.18, inner_w*0.14, inner_w*0.40, inner_w*0.28], hdr_color=DARK_RED))
story.append(sp(6))
story.append(info_box("๐ Pericardium = Protective sac surrounding the heart (2 layers: fibrous outer + serous inner). "
"Pericardial fluid between layers prevents friction during heartbeat.", LIGHT_BLUE, MED_BLUE))
story.append(sp(10))
story.append(Paragraph("Four Chambers of the Heart", sec_hd))
story.append(HR())
chambers = [
["Chamber", "Side", "Receives Blood From", "Sends Blood To", "Wall Thickness"],
["Right Atrium (RA)", "Right", "Superior & Inferior Vena Cava (whole body)", "Right Ventricle via Tricuspid valve", "Thin"],
["Right Ventricle (RV)", "Right", "Right Atrium", "Lungs via Pulmonary artery", "Moderate"],
["Left Atrium (LA)", "Left", "Pulmonary veins (4 veins from lungs)", "Left Ventricle via Mitral valve", "Thin"],
["Left Ventricle (LV)", "Left", "Left Atrium", "Whole body via Aorta", "THICKEST (most work)"],
]
story.append(mk_table(
["Chamber", "Side", "Receives From", "Sends To", "Wall"],
[[r[0],r[1],r[2],r[3],r[4]] for r in chambers[1:]],
[inner_w*0.20, inner_w*0.10, inner_w*0.27, inner_w*0.27, inner_w*0.16],
hdr_color=DARK_RED, alt=LIGHT_RED))
story.append(sp(6))
story.append(tip_box("๐ Key: Left Ventricle has the THICKEST wall because it pumps blood to the ENTIRE body (highest pressure needed)."))
story.append(sp(10))
story.append(Paragraph("Four Valves of the Heart", sec_hd))
story.append(HR())
story.append(Paragraph("Valves prevent backflow of blood - they act like one-way doors.", body))
story.append(sp(4))
valves = [
["Valve Name", "Location", "Type", "Opens When"],
["Tricuspid", "Between RA and RV", "AV valve (3 cusps)", "RA contracts โ blood enters RV"],
["Pulmonary", "RV to Pulmonary artery", "Semilunar valve", "RV contracts โ blood goes to lungs"],
["Mitral (Bicuspid)", "Between LA and LV", "AV valve (2 cusps)", "LA contracts โ blood enters LV"],
["Aortic", "LV to Aorta", "Semilunar valve", "LV contracts โ blood goes to body"],
]
story.append(mk_table(["Valve", "Location", "Type", "Opens When"], valves[1:],
[inner_w*0.18, inner_w*0.27, inner_w*0.20, inner_w*0.35], hdr_color=PURPLE, alt=LIGHT_PURPLE))
story.append(sp(6))
story.append(info_box(
"๐ค MNEMONIC for valves (Right to Left, top to bottom):\n"
"\"Tri Pul Mi Ao\" โ \"Tigers Prefer Milk Always\"\n"
"T = Tricuspid | P = Pulmonary | M = Mitral | A = Aortic",
LIGHT_PURPLE, PURPLE))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# SECTION 3: BLOOD FLOW
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(ch_header("1.3 Blood Circulation",
"Pulmonary and systemic circuits"))
story.append(sp(10))
story.append(Paragraph("Two Circuits of Circulation", sec_hd))
story.append(HR())
circuits = [
["Circuit", "Path", "Purpose"],
["Pulmonary\n(Small circulation)", "Right heart โ Lungs โ Left heart",
"Oxygenate blood (CO2 out, O2 in) at the lungs"],
["Systemic\n(Large circulation)", "Left heart โ Whole body โ Right heart",
"Deliver O2 + nutrients to all body tissues"],
]
story.append(mk_table(["Circuit", "Path", "Purpose"], circuits[1:],
[inner_w*0.20, inner_w*0.38, inner_w*0.42], hdr_color=TEAL, alt=LIGHT_TEAL))
story.append(sp(10))
story.append(Paragraph("Complete Blood Flow - Step by Step", sec_hd))
story.append(HR())
story.append(box_diagram([
"BODY TISSUES (deoxygenated blood)",
" |",
" v",
"Superior Vena Cava + Inferior Vena Cava",
" |",
" v",
"RIGHT ATRIUM --> Tricuspid Valve --> RIGHT VENTRICLE",
" |",
" v (Pulmonary Valve)",
"PULMONARY ARTERY --> LUNGS (CO2 out, O2 in)",
" |",
" v",
"PULMONARY VEINS (4 veins)",
" |",
" v",
"LEFT ATRIUM --> Mitral Valve --> LEFT VENTRICLE",
" |",
" v (Aortic Valve)",
"AORTA --> BODY TISSUES (O2 delivered)",
], title="Complete Blood Flow Diagram", bg=LIGHT_BLUE, border=MED_BLUE))
story.append(sp(8))
story.append(tip_box(
"โ ๏ธ Important: Pulmonary ARTERY carries DE-oxygenated blood (Right heart to lungs)\n"
"Pulmonary VEIN carries OXYGENATED blood (Lungs to Left heart)\n"
"This is the ONLY exception to the rule: Arteries = oxygenated, Veins = deoxygenated"))
story.append(sp(10))
story.append(Paragraph("Types of Blood Vessels", sec_hd))
story.append(HR())
vessels = [
["Vessel", "Direction", "Wall", "Examples", "Key Feature"],
["Arteries", "Away from heart", "Thick, muscular, elastic", "Aorta, Coronary, Pulmonary artery", "High pressure, pulse felt"],
["Arterioles", "Away from heart", "Thin muscular", "Smaller branches of arteries", "Controls blood pressure"],
["Capillaries", "Both directions", "Single cell layer (thinnest)", "Tissue capillaries", "Gas/nutrient exchange occurs here"],
["Venules", "Toward heart", "Thin", "Collecting small veins", "Low pressure"],
["Veins", "Toward heart", "Thin, valves present", "Vena cava, Jugular, Portal", "Valves prevent backflow"],
]
story.append(mk_table(["Vessel","Direction","Wall","Examples","Key Feature"], vessels[1:],
[inner_w*0.14, inner_w*0.18, inner_w*0.20, inner_w*0.24, inner_w*0.24],
hdr_color=MED_BLUE, alt=LIGHT_BLUE))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# SECTION 4: CARDIAC CYCLE & CONDUCTION
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(ch_header("1.4 Cardiac Cycle & Conduction System",
"How the heart beats - electrical system"))
story.append(sp(10))
story.append(Paragraph("Cardiac Cycle - Systole and Diastole", sec_hd))
story.append(HR())
cycle = [
["Phase", "What Happens", "Duration"],
["Systole", "Ventricles CONTRACT - blood pumped out", "~0.3 seconds"],
["Diastole", "Ventricles RELAX - heart fills with blood","~0.5 seconds"],
["Full Cycle","One complete heartbeat", "~0.8 seconds (75 bpm)"],
]
story.append(mk_table(["Phase","What Happens","Duration"], cycle[1:],
[inner_w*0.18, inner_w*0.58, inner_w*0.24], hdr_color=DARK_RED))
story.append(sp(6))
story.append(info_box(
"๐ฉบ Korotkoff sounds heard with stethoscope during BP measurement:\n"
"โข First sound (systolic BP) = ventricle contracting\n"
"โข Last sound (diastolic BP) = ventricle relaxing\n"
"Lub-Dub = S1 (Mitral + Tricuspid closing) and S2 (Aortic + Pulmonary closing)",
LIGHT_RED, MED_RED))
story.append(sp(10))
story.append(Paragraph("Cardiac Conduction System - The Heart's Electrical Circuit", sec_hd))
story.append(HR())
story.append(box_diagram([
"SA NODE (Sinoatrial Node)",
" - Located: Right Atrium wall",
" - Called: Natural Pacemaker",
" - Rate: 60-100 impulses/min",
" - Initiates EVERY heartbeat",
" |",
" v (impulse spreads through atria -> atrial contraction)",
"AV NODE (Atrioventricular Node)",
" - Located: Between RA and RV (AV junction)",
" - Delays impulse by 0.1 second",
" - Reason: Allows ventricles to fill before contracting",
" |",
" v",
"BUNDLE OF HIS (AV Bundle)",
" - Located: Interventricular septum",
" - Divides into Right and Left Bundle Branches",
" |",
" v",
"PURKINJE FIBERS",
" - Located: Ventricular walls",
" - Rapidly spreads impulse -> ventricular contraction",
], title="Conduction Pathway", bg=LIGHT_TEAL, border=TEAL))
story.append(sp(8))
story.append(Paragraph("Key Normal Values - Conduction", sec_hd))
story.append(HR())
cond_vals = [
["Node / Parameter", "Normal Rate", "Clinical Note"],
["SA Node (Pacemaker)", "60-100 /min", "If SA node fails, AV node takes over"],
["AV Node (backup)", "40-60 /min", "Slower backup - AV block if damaged"],
["Ventricular (backup)", "20-40 /min", "Last resort pacemaker - very slow"],
["PR Interval (ECG)", "0.12-0.20 sec","Prolonged = AV block"],
["QRS Duration (ECG)", "0.06-0.10 sec","Widened = bundle branch block"],
["QT Interval (ECG)", "0.36-0.44 sec","Prolonged = dangerous arrhythmia risk"],
]
story.append(mk_table(["Node / Parameter","Normal Rate","Clinical Note"], cond_vals[1:],
[inner_w*0.35, inner_w*0.22, inner_w*0.43], hdr_color=TEAL, alt=LIGHT_TEAL))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# SECTION 5: ECG
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(ch_header("1.5 ECG - Electrocardiogram",
"Reading and understanding ECG waves"))
story.append(sp(10))
story.append(Paragraph("ECG Waves - What Each Means", sec_hd))
story.append(HR())
ecg_waves = [
["Wave / Segment", "Represents", "Normal Duration"],
["P Wave", "Atrial depolarization (atria contracting)", "< 0.12 sec"],
["PR Interval", "Time from atrial to ventricular activation", "0.12-0.20 sec"],
["QRS Complex", "Ventricular depolarization (ventricles contracting)", "0.06-0.10 sec"],
["ST Segment", "Ventricular plateau (between contraction and recovery)", "Isoelectric (flat)"],
["T Wave", "Ventricular repolarization (ventricles recovering)", "0.16 sec"],
["QT Interval", "Total ventricular electrical activity", "0.36-0.44 sec"],
["U Wave", "Purkinje fiber repolarization (not always seen)", "Small, after T wave"],
]
story.append(mk_table(["Wave/Segment","Represents","Normal Duration"], ecg_waves[1:],
[inner_w*0.20, inner_w*0.52, inner_w*0.28], hdr_color=DARK_RED, alt=LIGHT_RED))
story.append(sp(8))
story.append(box_diagram([
" R",
" |",
" |",
" P | T",
" / \\ | / \\",
"-------/ \\ | / \\---- U",
" \\ | /",
" Q--+--S---/",
" | |",
" P-R interval S-T segment",
"",
" P = Atrial contraction",
" QRS = Ventricular contraction (largest wave)",
" T = Ventricular recovery",
], title="ECG Wave Pattern", bg=LIGHT_BLUE, border=MED_BLUE))
story.append(sp(8))
story.append(warn_box(
"๐จ Critical ECG Changes - Report IMMEDIATELY:\n"
"โข ST elevation โ Myocardial Infarction (Heart Attack!)\n"
"โข No P waves + irregular rhythm โ Atrial Fibrillation\n"
"โข Wide bizarre QRS โ Ventricular Tachycardia (VT)\n"
"โข No recognizable waves โ Ventricular Fibrillation (VF) = EMERGENCY"))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# SECTION 6: CARDIAC OUTPUT & BLOOD PRESSURE
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(ch_header("1.6 Cardiac Output & Blood Pressure",
"Important formulas and normal values"))
story.append(sp(10))
story.append(Paragraph("Cardiac Output (CO)", sec_hd))
story.append(HR())
story.append(box_diagram([
"CARDIAC OUTPUT (CO) = Heart Rate (HR) x Stroke Volume (SV)",
"",
" CO = ~5 Litres/min (at rest, adult)",
" HR = 70-75 bpm (resting average)",
" SV = ~70 mL per beat",
"",
" EXAMPLE: CO = 70 bpm x 70 mL = 4,900 mL โ 5 L/min",
"",
" During exercise: CO can increase to 20-25 L/min!",
], title="Cardiac Output Formula", bg=LIGHT_GOLD, border=GOLD))
story.append(sp(8))
story.append(Paragraph("Factors Affecting Cardiac Output", sec_hd))
story.append(HR())
co_factors = [
["Factor", "Increases CO", "Decreases CO"],
["Heart Rate", "Exercise, fever, anxiety, drugs", "Beta-blockers, sleep, athletes"],
["Stroke Volume","Increased venous return, exercise", "Heart failure, hypovolemia"],
["Preload", "More blood returning to heart", "Dehydration, blood loss"],
["Afterload", "(Decreased afterload = more CO)", "Hypertension, aortic stenosis"],
["Contractility","Catecholamines, digoxin", "Acidosis, heart failure, beta-blockers"],
]
story.append(mk_table(["Factor","Increases CO","Decreases CO"], co_factors[1:],
[inner_w*0.20, inner_w*0.40, inner_w*0.40], hdr_color=ORANGE, alt=LIGHT_ORANGE))
story.append(sp(10))
story.append(Paragraph("Blood Pressure (BP)", sec_hd))
story.append(HR())
story.append(box_diagram([
"BLOOD PRESSURE = Cardiac Output x Peripheral Vascular Resistance",
"",
" BP is recorded as: Systolic / Diastolic",
" e.g. 120 / 80 mmHg",
"",
" Systolic = pressure when ventricle CONTRACTS (top number)",
" Diastolic = pressure when ventricle RELAXES (bottom number)",
" Pulse Pressure = Systolic - Diastolic = 120 - 80 = 40 mmHg",
" Mean Arterial Pressure (MAP) = Diastolic + 1/3 Pulse Pressure",
" Normal MAP = 80 + 1/3(40) = ~93 mmHg",
], title="Blood Pressure Formula", bg=LIGHT_TEAL, border=TEAL))
story.append(sp(8))
story.append(Paragraph("BP Classification (JNC / WHO)", sec_hd))
story.append(HR())
bp_class = [
["Category", "Systolic (mmHg)", "Diastolic (mmHg)", "Action"],
["Normal", "< 120", "< 80", "No action needed"],
["Elevated", "120-129", "< 80", "Lifestyle changes"],
["HTN Stage 1", "130-139", "80-89", "Lifestyle + consider drug"],
["HTN Stage 2", "โฅ 140", "โฅ 90", "Drug therapy required"],
["Hypertensive Crisis","โฅ 180", "โฅ 120", "EMERGENCY - immediate Rx"],
["Hypotension", "< 90", "< 60", "Monitor, IV fluids, find cause"],
]
story.append(mk_table(["Category","Systolic","Diastolic","Action"], bp_class[1:],
[inner_w*0.28, inner_w*0.17, inner_w*0.17, inner_w*0.38],
hdr_color=DARK_RED, alt=LIGHT_RED))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# SECTION 7: BLOOD
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(ch_header("1.7 Blood - Composition and Functions",
"Components of blood and normal values"))
story.append(sp(10))
story.append(Paragraph("Blood Composition", sec_hd))
story.append(HR())
blood = [
["Component", "% of Blood", "Types / Details", "Main Function"],
["Plasma", "55%", "Water (90%), proteins, hormones, nutrients", "Transport medium, clotting factors"],
["Red Blood Cells (RBC/Erythrocytes)", "~44%", "No nucleus, contain Haemoglobin (Hb)", "Carry O2 (via Hb) and CO2"],
["White Blood Cells (WBC/Leukocytes)", "< 1%", "Neutrophils, Lymphocytes, Monocytes, etc.", "Immunity and defense"],
["Platelets (Thrombocytes)", "< 1%", "Tiny cell fragments, no nucleus", "Blood clotting (haemostasis)"],
]
story.append(mk_table(["Component","% of Blood","Types / Details","Main Function"], blood[1:],
[inner_w*0.28, inner_w*0.10, inner_w*0.35, inner_w*0.27],
hdr_color=MED_RED, alt=LIGHT_RED))
story.append(sp(8))
story.append(Paragraph("Normal Blood Values - Master Table", sec_hd))
story.append(HR())
blood_vals = [
["Parameter", "Male", "Female", "Clinical Note"],
["Haemoglobin (Hb)", "13.5-17.5 g/dL","12.0-15.5 g/dL","Anemia if below normal"],
["RBC Count", "4.5-5.5 million/ยตL","3.8-4.8 million/ยตL","Polycythemia if high"],
["WBC Count", "4,000-11,000/ยตL","4,000-11,000/ยตL","Leukocytosis if >11,000"],
["Platelet Count", "1.5-4.5 lakh/ยตL","1.5-4.5 lakh/ยตL","Thrombocytopenia if <1 lakh"],
["Haematocrit (PCV)", "40-54%", "36-48%", "% of blood that is RBCs"],
["MCV (mean cell volume)", "80-100 fL", "80-100 fL", "Low = iron deficiency; High = B12/folate"],
["Bleeding Time", "1-3 minutes", "1-3 minutes", "Platelet function test"],
["Clotting Time", "3-8 minutes", "3-8 minutes", "Coagulation test"],
["ESR", "0-15 mm/hr", "0-20 mm/hr", "Raised in infection/inflammation"],
["Serum Iron", "60-160 ยตg/dL", "50-150 ยตg/dL", "Low in iron deficiency anemia"],
]
story.append(mk_table(["Parameter","Male","Female","Clinical Note"], blood_vals[1:],
[inner_w*0.32, inner_w*0.17, inner_w*0.17, inner_w*0.34],
hdr_color=DARK_RED, alt=LIGHT_RED))
story.append(sp(8))
story.append(Paragraph("Blood Groups", sec_hd))
story.append(HR())
bg = [
["Blood Group","Antigen on RBC","Antibody in Plasma","Can Donate To","Can Receive From"],
["A", "A antigen", "Anti-B", "A, AB", "A, O"],
["B", "B antigen", "Anti-A", "B, AB", "B, O"],
["AB", "A and B", "None", "AB only", "ALL (Universal Recipient)"],
["O", "None", "Anti-A and Anti-B","ALL (Universal Donor)", "O only"],
]
story.append(mk_table(["Group","Antigen","Antibody","Donate To","Receive From"], bg[1:],
[inner_w*0.12, inner_w*0.17, inner_w*0.23, inner_w*0.20, inner_w*0.28],
hdr_color=PURPLE, alt=LIGHT_PURPLE))
story.append(sp(6))
story.append(info_box("๐ Universal Donor = O negative (O-) | Universal Recipient = AB positive (AB+)\n"
"Rh factor: Rh+ (has D antigen) more common. Rh- mother + Rh+ baby = Rh incompatibility risk.", LIGHT_BLUE, MED_BLUE))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# SECTION 8: NURSING CARE & CVS CONDITIONS
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(ch_header("1.8 Common CVS Conditions & Nursing Care",
"Exam-focused nursing management"))
story.append(sp(10))
story.append(Paragraph("Myocardial Infarction (Heart Attack)", sec_hd))
story.append(HR())
story.append(Paragraph("<b>Definition:</b> Death of cardiac muscle due to prolonged ischemia (blocked coronary artery)", body))
story.append(sp(4))
mi = [
["Aspect", "Details"],
["Causes", "Coronary artery blockage (atherosclerosis, thrombus, spasm)"],
["Signs & Symptoms","Crushing/squeezing chest pain, radiates to left arm/jaw/shoulder\nDiaphoresis (sweating), nausea, vomiting, dyspnea, anxiety\nPain NOT relieved by rest or nitrates"],
["Diagnosis", "ECG (ST elevation in STEMI), Cardiac enzymes (Troponin, CK-MB, LDH)\nEcho, Coronary Angiography"],
["Treatment", "MONA: Morphine, O2, Nitrates, Aspirin\nThrombolytics (streptokinase), PCI (angioplasty), CABG"],
["Nursing Care", "Bed rest (position: semi-Fowler's)\nContinuous ECG monitoring\nIV access, O2 at 2-4 L/min\nPain assessment (PQRST scale)\n12-lead ECG immediately\nNPO until stable, emotional support"],
["Complications", "Arrhythmia, Heart failure, Cardiogenic shock, Pericarditis, Death"],
]
story.append(mk_table(["Aspect","Details"], mi[1:],
[inner_w*0.20, inner_w*0.80], hdr_color=DARK_RED))
story.append(sp(8))
story.append(Paragraph("Heart Failure", sec_hd))
story.append(HR())
hf = [
["Aspect", "Left Heart Failure", "Right Heart Failure"],
["Main Problem", "LV cannot pump โ backs up to lungs","RV cannot pump โ backs up to body"],
["Key Symptoms", "Dyspnea, orthopnea, PND\nPink frothy sputum, crackles","Peripheral oedema (ankle, legs)\nJugular vein distension (JVD)\nHepatomegaly, ascites"],
["Nursing Care", "Fowler's position (upright)\nO2 therapy, diuretics\nFluid restriction, daily weights",
"Legs elevated, diuretics\nFluid/sodium restriction\nMonitor intake/output"],
]
data = [[Paragraph(h, table_hd) for h in ["Aspect","Left Heart Failure","Right Heart Failure"]]]
for row in hf[1:]:
data.append([Paragraph(c, table_cell) for c in row])
t = Table(data, colWidths=[inner_w*0.18, inner_w*0.41, inner_w*0.41], repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), DARK_RED),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_RED]),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(t)
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# SECTION 9: SELF-TEST
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(ch_header("1.9 Self-Test Questions",
"Test yourself before moving on!"))
story.append(sp(10))
story.append(info_box("๐ Instructions: Answer all questions WITHOUT looking at notes first. "
"Then check your answers below. Score yourself out of 20.", LIGHT_BLUE, MED_BLUE))
story.append(sp(10))
story.append(Paragraph("Section A - Fill in the Blanks", sec_hd))
story.append(HR())
fill = [
"1. The natural pacemaker of the heart is the ____________.",
"2. Normal adult heart rate is _______ to _______ bpm.",
"3. Normal blood pressure is _______ / _______ mmHg.",
"4. The thickest chamber of the heart is the ____________.",
"5. The valve between Left Atrium and Left Ventricle is ____________.",
"6. Blood group known as Universal Donor is ____________.",
"7. Cardiac Output = Heart Rate ร ____________.",
"8. ST elevation on ECG indicates ____________.",
"9. Normal Haemoglobin in adult female is _______ to _______ g/dL.",
"10. The layer of heart that does the pumping is called ____________.",
]
for q in fill:
story.append(Paragraph(q, body))
story.append(sp(4))
story.append(sp(8))
story.append(Paragraph("Section B - Short Answer Questions", sec_hd))
story.append(HR())
short = [
"11. Name the 4 chambers of the heart.",
"12. What is the difference between Systole and Diastole?",
"13. Describe the blood flow from body to lungs and back.",
"14. What are the 5 Rights of drug administration?",
"15. List 4 signs and symptoms of Myocardial Infarction.",
"16. What is the function of the AV node?",
"17. Differentiate between Left and Right Heart Failure.",
"18. What are the components of blood?",
"19. What nursing actions do you take for a patient with chest pain?",
"20. What does the MONA protocol stand for in MI treatment?",
]
for q in short:
story.append(Paragraph(q, body))
story.append(sp(14)) # space for writing answer
story.append(PageBreak())
# ANSWER KEY
story.append(ch_header("Answer Key", "Check your answers here", TEAL))
story.append(sp(10))
story.append(Paragraph("Section A - Answers", sec_hd))
story.append(HR())
answers_a = [
("1", "SA Node (Sinoatrial Node)"),
("2", "60 to 100 bpm"),
("3", "120/80 mmHg"),
("4", "Left Ventricle"),
("5", "Mitral valve (Bicuspid valve)"),
("6", "Blood group O (O negative = universal donor)"),
("7", "Stroke Volume (CO = HR ร SV)"),
("8", "Myocardial Infarction (Heart Attack - STEMI)"),
("9", "12.0 to 15.5 g/dL"),
("10", "Myocardium"),
]
for num, ans in answers_a:
story.append(Paragraph(f"<b>{num}.</b> {ans}", body))
story.append(sp(3))
story.append(sp(8))
story.append(Paragraph("Section B - Key Points", sec_hd))
story.append(HR())
answers_b = [
("11", "Right Atrium, Right Ventricle, Left Atrium, Left Ventricle"),
("12", "Systole = ventricles contracting (pumping blood out). Diastole = ventricles relaxing (filling with blood)"),
("13", "Body โ Vena Cava โ Right Atrium โ Tricuspid โ Right Ventricle โ Pulmonary Valve โ Pulmonary Artery โ Lungs โ Pulmonary Veins โ Left Atrium โ Mitral Valve โ Left Ventricle โ Aortic Valve โ Aorta โ Body"),
("14", "Right Patient, Right Drug, Right Dose, Right Route, Right Time"),
("15", "Crushing chest pain, radiation to left arm/jaw, diaphoresis (sweating), nausea/vomiting, dyspnea, anxiety, pallor"),
("16", "AV node delays electrical impulse by 0.1 second to allow ventricles to fill completely before contracting"),
("17", "Left HF: backs up into lungs โ dyspnea, crackles, pink frothy sputum. Right HF: backs up into body โ pedal edema, JVD, hepatomegaly"),
("18", "Plasma (55%) + Red Blood Cells + White Blood Cells + Platelets"),
("19", "Sit patient up (semi-Fowler's), give O2, 12-lead ECG, IV access, pain assessment, call doctor immediately, prepare for MONA"),
("20", "M = Morphine (pain relief), O = Oxygen, N = Nitrates (vasodilator), A = Aspirin (antiplatelet)"),
]
for num, ans in answers_b:
story.append(Paragraph(f"<b>{num}.</b> {ans}", body))
story.append(sp(5))
story.append(sp(10))
story.append(info_box(
"๐ Score Yourself:\n"
"18-20 = Excellent! Move to Chapter 2 โ
\n"
"14-17 = Good! Review weak areas, then proceed\n"
"10-13 = Fair - Re-read sections you got wrong\n"
"Below 10 = Revise the full chapter once more\n\n"
"Remember: Understanding > Memorising. If you understand the concepts, "
"exam answers will come naturally!", LIGHT_TEAL, TEAL))
story.append(PageBreak())
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# SECTION 10: QUICK REFERENCE CARD
# โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(ch_header("Quick Reference Card", "All key values at a glance - cut and keep!", DARK_RED))
story.append(sp(10))
story.append(Paragraph("CVS Normal Values - Master Summary", sec_hd))
story.append(HR())
ref_vals = [
["Parameter", "Normal Value", "Abnormal = Action"],
["Heart Rate", "60-100 bpm", "<60 = Bradycardia | >100 = Tachycardia"],
["Blood Pressure", "120/80 mmHg", "<90/60 = Hypotension | >140/90 = HTN"],
["Cardiac Output", "~5 L/min", "<4 = Concern | Increases in exercise"],
["Stroke Volume", "~70 mL/beat", "Reduced in heart failure"],
["PR Interval (ECG)", "0.12-0.20 sec", ">0.20 = AV block"],
["QRS Duration (ECG)", "0.06-0.10 sec", ">0.12 = Bundle branch block"],
["Haemoglobin (Male)", "13.5-17.5 g/dL", "<13.5 = Anaemia"],
["Haemoglobin (Female)", "12.0-15.5 g/dL", "<12.0 = Anaemia"],
["WBC Count", "4,000-11,000 /ยตL", ">11,000 = Leukocytosis (infection)"],
["Platelet Count", "1.5-4.5 lakh/ยตL", "<1 lakh = Thrombocytopenia"],
["Bleeding Time", "1-3 minutes", "Prolonged = platelet problem"],
["MAP (Mean Arterial Pressure)","70-100 mmHg", "<60 = Inadequate organ perfusion"],
]
story.append(mk_table(["Parameter","Normal Value","Abnormal = Action"], ref_vals[1:],
[inner_w*0.35, inner_w*0.22, inner_w*0.43], hdr_color=DARK_RED, alt=LIGHT_RED))
story.append(sp(10))
story.append(Paragraph("Key Mnemonics Summary", sec_hd))
story.append(HR())
mnemonics = [
["Mnemonic", "Meaning", "Remembers"],
["Tigers Prefer Milk Always", "Tricuspid, Pulmonary, Mitral, Aortic", "4 heart valves in order"],
["MONA", "Morphine, Oxygen, Nitrates, Aspirin", "MI emergency treatment"],
["PQRST", "Provocation, Quality, Radiation, Severity, Timing", "Pain assessment"],
["Lub-Dub", "S1 = AV valves close | S2 = Semilunar valves close", "Heart sounds"],
["5 Rights", "Patient, Drug, Dose, Route, Time", "Safe drug giving"],
["EPI-MYO-ENDO", "Outer, Middle, Inner layers of heart", "Heart wall layers"],
["SA โ AV โ Bundle โ Purkinje", "Electrical pathway", "Conduction system"],
]
story.append(mk_table(["Mnemonic","Meaning","Remembers"], mnemonics[1:],
[inner_w*0.28, inner_w*0.42, inner_w*0.30], hdr_color=PURPLE, alt=LIGHT_PURPLE))
story.append(sp(10))
story.append(tip_box(
"๐ Chapter 1 Complete! What to do next:\n"
"1. Afternoon: Make your own heart diagram from memory\n"
"2. Evening: Do the self-test questions (Page 8-9)\n"
"3. Before sleep: Repeat key values in your head\n"
"4. Tomorrow: Start Respiratory System (Chapter 1 Part 2)\n\n"
"All the best! You are doing great! ๐ช"))
# โโ Build โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /tmp/workspace/gnm-study-guide && python create_anatomy_ch1.py 2>&1
ls -lh /tmp/workspace/gnm-study-guide/GNM_Anatomy_Chapter1_CVS.pdf
GNM Anatomy Chapter1 CVS
PDF Document ยท PDF
| Section | Topic |
|---|---|
| 1.1 | CVS Introduction - 3 components, overview |
| 1.2 | Heart Anatomy - 3 layers, 4 chambers, 4 valves + mnemonics |
| 1.3 | Blood Circulation - Pulmonary & Systemic circuits + step-by-step flow diagram |
| 1.4 | Cardiac Cycle & Conduction - SA Node, AV Node, Purkinje fibers |
| 1.5 | ECG Waves - P, QRS, T with diagram + critical changes |
| 1.6 | Cardiac Output & BP - Formulas, BP classification table |
| 1.7 | Blood - Composition, normal values, blood groups |
| 1.8 | CVS Conditions - MI, Heart Failure nursing care |
| 1.9 | Self-Test - 20 questions + Answer Key |
| 1.10 | Quick Reference Card - All values + mnemonics |
| Time | Kaam |
|---|---|
| Abhi - 11:30 AM | PDF Section 1.1 to 1.4 padho |
| 2:00 - 4:00 PM | Section 1.5 to 1.7 + notes banao |
| 7:00 - 9:00 PM | Self-test ke 20 questions solve karo |
| Sone se pehle | Quick Reference Card ek baar dekho |
Find research articles on cardiovascular nursing
cardiovascular nursing care outcomes
cardiac nursing intervention heart failure
| # | Article | Journal | Year | Key Topic |
|---|---|---|---|---|
| 1 | Nurse-led Self-Care in HF | J Clin Nurs | 2024 | Self-care programs |
| 2 | Teach-Back Method | BMC Cardiovasc | 2024 | Patient education |
| 3 | eHealth Nursing HF | Int J Nurs Stud | 2024 | Digital nursing |
| 4 | Psych Interventions Cardiac | Cochrane | 2024 | Mental health care |
| 5 | Modifiable CVD Risk Factors | NEJM | 2023 | Prevention |
| 6 | Exercise & Cardiac Dysfunction | Int J Nurs Stud | 2025 | Exercise nursing |
1. Nurse-led education (teach-back method) - jo aap padh rahe ho - evidence-based hai โ 2. Holistic care (physical + mental) - cardiac patients ke liye essential 3. Patient self-care education = hospitalizations kam hoti hain 4. Digital health tools - future of nursing practice 5. Lifestyle modification counseling = nurse ka important role
I want to be with a picture
A professional medical research infographic titled "Cardiovascular Nursing - Recent Research Articles 2023-2025". Clean white background with red and blue medical theme. Show 6 research article cards arranged in a 2x3 grid layout. Each card has a colored header and bullet points with key findings: Card 1 (red header): "1. Nurse-Led Self-Care in Heart Failure" - Journal of Clinical Nursing, 2024 - "Nurse-led programs reduce hospitalizations and improve quality of life in HF patients" Card 2 (blue header): "2. Teach-Back Education Method" - BMC Cardiovascular Disorders, 2024 - "Teach-back method significantly improves self-care and quality of life" Card 3 (teal header): "3. Digital/eHealth Nursing" - Int. Journal of Nursing Studies, 2024 - "Nurse-led digital tools improve chronic heart failure management" Card 4 (purple header): "4. Psychological Interventions" - Cochrane Reviews, 2024 - "Psych support by nurses reduces depression & anxiety in cardiac patients" Card 5 (orange header): "5. Modifiable CVD Risk Factors" - New England Journal of Medicine, 2023 - "Controlling lifestyle risk factors reduces CVD mortality globally" Card 6 (green header): "6. Exercise & Cardiac Dysfunction" - Int. Journal of Nursing Studies, 2025 - "Exercise-based nursing prevents chemotherapy-related heart damage" At the top, a bold title with a small red heart icon. At the bottom, a key takeaway box: "Nurse-led education, holistic care and patient self-care = better cardiac outcomes". Include small medical icons like heart, stethoscope, clipboard next to each card. Modern, clean, professional design suitable for nursing students.
404 Not Found. {'message': '{\n "error": {\n "code": 404,\n "message": "Publisher model `projects/engaged-beaker-474810-u2/locations/global/publishers/google/models/gemini-3-pro-image-preview` was not found or your project does not have access to it. Ensure you are using a valid model name and that the model is available in the specified region. For more information, see: https://docs.cloud.google.com/gemini-enterprise-agent-platform/resources/locations.",\n "status": "NOT_FOUND"\n }\n}\n', 'status': 'Not Found'}
We encountered an error while processing your request. Please try again or reach out to us for help.
Anatomy chapter 1 pdf with a picture
heart anatomy diagram labeled free public domain wikimedia commons PNG
cd /tmp/workspace/gnm-study-guide && curl -L -o heart_diagram.png "https://upload.wikimedia.org/wikipedia/commons/1/12/Anatomy_of_the_Heart.jpg" --max-time 30 && ls -lh heart_diagram.png
cd /tmp/workspace/gnm-study-guide && python3 - << 'EOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.styles import ParagraphStyle from reportlab.lib.units import cm from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, PageBreak, Image, KeepTogether) from reportlab.lib.enums import TA_CENTER, TA_LEFT from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate from reportlab.lib.utils import ImageReader import os OUTPUT = "/tmp/workspace/gnm-study-guide/GNM_Anatomy_Ch1_With_Picture.pdf" IMG = "/tmp/workspace/gnm-study-guide/heart_diagram.png" # โโ Colors โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ DARK_RED = colors.HexColor("#922B21") MED_RED = colors.HexColor("#E74C3C") LIGHT_RED = colors.HexColor("#FADBD8") DARK_BLUE = colors.HexColor("#1A3A5C") MED_BLUE = colors.HexColor("#2E86AB") LIGHT_BLUE = colors.HexColor("#D6EAF8") TEAL = colors.HexColor("#17A589") LIGHT_TEAL = colors.HexColor("#D1F2EB") ORANGE = colors.HexColor("#E67E22") LIGHT_ORANGE= colors.HexColor("#FDEBD0") PURPLE = colors.HexColor("#7D3C98") LIGHT_PURPLE= colors.HexColor("#E8DAEF") GOLD = colors.HexColor("#D4AC0D") LIGHT_GOLD = colors.HexColor("#FEF9E7") WHITE = colors.white LIGHT_GRAY = colors.HexColor("#F2F3F4") MID_GRAY = colors.HexColor("#BDC3C7") DARK_GRAY = colors.HexColor("#2C3E50") def S(name, **kw): return ParagraphStyle(name, **kw) cover_title = S("CT", fontSize=34, textColor=WHITE, alignment=TA_CENTER, fontName="Helvetica-Bold", leading=42) cover_sub = S("CS", fontSize=14, textColor=colors.HexColor("#AED6F1"), alignment=TA_CENTER, fontName="Helvetica", leading=20) cover_note = S("CN", fontSize=10, textColor=colors.HexColor("#D5D8DC"), alignment=TA_CENTER, fontName="Helvetica-Oblique", leading=15) ch_title_s = S("ChT", fontSize=17, textColor=WHITE, fontName="Helvetica-Bold", leading=22) sec_hd = S("SH", fontSize=13, textColor=DARK_RED, fontName="Helvetica-Bold", spaceBefore=10, spaceAfter=4) sub_hd = S("SSH", fontSize=11, textColor=DARK_BLUE, fontName="Helvetica-Bold", spaceBefore=6, spaceAfter=3) body = S("B", fontSize=10, textColor=DARK_GRAY, fontName="Helvetica", leading=15, spaceAfter=3) bullet_s = S("BL", fontSize=10, textColor=DARK_GRAY, fontName="Helvetica", leading=15, leftIndent=14, spaceAfter=2) tip_s = S("TIP", fontSize=10, textColor=DARK_GRAY, fontName="Helvetica", leading=14, leftIndent=8, spaceAfter=2) table_hd = S("TH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=12) table_cell = S("TC", fontSize=9, textColor=DARK_GRAY, fontName="Helvetica", alignment=TA_LEFT, leading=12) caption_s = S("CAP", fontSize=9, textColor=colors.HexColor("#717D7E"), fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=12) img_title_s = S("IT", fontSize=12, textColor=DARK_RED, fontName="Helvetica-Bold", alignment=TA_CENTER, spaceBefore=4, spaceAfter=4) w_page, _ = A4 inner_w = w_page - 3.5*cm # โโ Page callbacks โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ def cover_bg(canv, doc): w, h = A4 canv.setFillColor(DARK_RED); canv.rect(0, 0, w, h, fill=1, stroke=0) canv.setFillColor(MED_RED); canv.rect(0, h*0.56, w, h*0.44, fill=1, stroke=0) canv.setFillColor(GOLD); canv.rect(0, h*0.555, w, 6, fill=1, stroke=0) canv.setFillColor(WHITE); canv.rect(0, h*0.555-9, w, 3, fill=1, stroke=0) def normal_page(canv, doc): w, h = A4 canv.setFillColor(DARK_RED); canv.rect(0, h-36, w, 36, fill=1, stroke=0) canv.setFont("Helvetica-Bold", 9); canv.setFillColor(WHITE) canv.drawString(1.5*cm, h-24, "GNM Anatomy | Chapter 1: Cardiovascular System") canv.drawRightString(w-1.5*cm, h-24, "Nursing Excellence Series") canv.setFillColor(DARK_RED); canv.rect(0, 0, w, 28, fill=1, stroke=0) canv.setFont("Helvetica", 8); canv.setFillColor(colors.HexColor("#AED6F1")) canv.drawCentredString(w/2, 9, f"Page {doc.page} | Image: Anatomy of the Heart (Wikimedia Commons, CC BY-SA)") canv.setFillColor(GOLD); canv.rect(0, 28, 4, h-64, fill=1, stroke=0) # โโ Helpers โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ def ch_header(title, subtitle="", color=MED_RED): tbl = Table([[Paragraph(title, ch_title_s)], [Paragraph(subtitle, S("CSub2", fontSize=10, textColor=colors.HexColor("#FDEBD0"), fontName="Helvetica-Oblique", leading=14))]], colWidths=[inner_w]) tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), color), ("TOPPADDING", (0,0), (-1,-1), 10), ("BOTTOMPADDING", (0,0), (-1,-1), 10), ("LEFTPADDING", (0,0), (-1,-1), 14), ])) return tbl def info_box(text, bg=LIGHT_BLUE, border=MED_BLUE): tbl = Table([[Paragraph(text, S("IB2", fontSize=10, textColor=DARK_GRAY, fontName="Helvetica", leading=15, leftIndent=6))]], colWidths=[inner_w]) tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg), ("LINERIGHT", (0,0), (-1,-1), 5, border), ("TOPPADDING", (0,0), (-1,-1), 8), ("BOTTOMPADDING",(0,0), (-1,-1), 8), ("LEFTPADDING", (0,0), (-1,-1), 10), ])) return tbl def tip_box(text): return info_box(text, bg=LIGHT_GOLD, border=GOLD) def warn_box(text): return info_box(text, bg=LIGHT_RED, border=MED_RED) def mk_table(headers, rows, col_widths, hdr_color=MED_RED, alt=LIGHT_RED): data = [[Paragraph(h, table_hd) for h in headers]] for row in rows: data.append([Paragraph(str(c), table_cell) for c in row]) tbl = Table(data, colWidths=col_widths, repeatRows=1) tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), hdr_color), ("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, alt]), ("GRID", (0,0), (-1,-1), 0.5, MID_GRAY), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 6), ("VALIGN", (0,0), (-1,-1), "TOP"), ])) return tbl def box_diagram(lines, title="", bg=LIGHT_BLUE, border=MED_BLUE): content = [] if title: content.append(Paragraph(f"<b>{title}</b>", S("DT2", fontSize=10, textColor=border, fontName="Helvetica-Bold", leading=14, spaceAfter=4))) for line in lines: content.append(Paragraph(line, S("DL2", fontSize=9, textColor=DARK_GRAY, fontName="Courier", leading=13))) tbl = Table([[content]], colWidths=[inner_w]) tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg), ("LINEBEFORE", (0,0), (-1,-1), 4, border), ("TOPPADDING", (0,0), (-1,-1), 10), ("BOTTOMPADDING",(0,0), (-1,-1), 10), ("LEFTPADDING", (0,0), (-1,-1), 12), ("RIGHTPADDING", (0,0), (-1,-1), 8), ])) return tbl def B(text): return Paragraph(f"<font color='#E74C3C'>♥</font> {text}", bullet_s) def sp(n=6): return Spacer(1, n) def HR(): return HRFlowable(width="100%", thickness=1, color=MID_GRAY, spaceAfter=4, spaceBefore=4) def image_box(img_path, width_cm=13, caption=""): """Embed image centered in a styled box with caption.""" img_w = width_cm * cm img = Image(img_path, width=img_w, height=img_w * 0.75) # 4:3 ratio items = [img] if caption: items.append(Paragraph(caption, caption_s)) border_tbl = Table([items] if len(items)==1 else [[img],[Paragraph(caption, caption_s)]], colWidths=[inner_w]) border_tbl.setStyle(TableStyle([ ("ALIGN", (0,0), (-1,-1), "CENTER"), ("BACKGROUND", (0,0), (-1,-1), LIGHT_GRAY), ("BOX", (0,0), (-1,-1), 1.5, MED_RED), ("TOPPADDING", (0,0), (-1,-1), 8), ("BOTTOMPADDING",(0,0), (-1,-1), 8), ("LEFTPADDING", (0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8), ])) return border_tbl # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ # BUILD DOCUMENT # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ doc = BaseDocTemplate(OUTPUT, pagesize=A4, leftMargin=1.8*cm, rightMargin=1.2*cm, topMargin=1.5*cm, bottomMargin=1.2*cm, title="GNM Anatomy Chapter 1 - Cardiovascular System", author="Orris Nursing Series") cover_frame = Frame(0, 0, A4[0], A4[1], leftPadding=2*cm, rightPadding=1.5*cm, topPadding=2*cm, bottomPadding=1.5*cm, id="cover") normal_frame = Frame(0.5*cm, 1.0*cm, A4[0]-1.7*cm, A4[1]-2.8*cm, leftPadding=1.0*cm, rightPadding=0.5*cm, topPadding=0.3*cm, bottomPadding=0.3*cm, id="normal") doc.addPageTemplates([ PageTemplate(id="Cover", frames=[cover_frame], onPage=cover_bg), PageTemplate(id="Normal", frames=[normal_frame], onPage=normal_page), ]) story = [] # โโ COVER โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ story.append(Spacer(1, 2.2*cm)) story.append(Paragraph("โฅ GNM Anatomy", cover_title)) story.append(sp(6)) story.append(Paragraph("Chapter 1", cover_title)) story.append(sp(10)) story.append(Paragraph("Cardiovascular System", cover_sub)) story.append(sp(4)) story.append(Paragraph("Heart โข Blood Vessels โข Circulation โข ECG โข Nursing Values", cover_sub)) story.append(sp(1.0*cm)) story.append(Paragraph("โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ", cover_note)) story.append(sp(5)) story.append(Paragraph("Complete theory with labeled heart diagram,", cover_note)) story.append(Paragraph("tables, mnemonics and 20 self-test questions", cover_note)) story.append(sp(1.2*cm)) story.append(Paragraph("Orris Nursing Excellence Series | 2026", cover_note)) from reportlab.platypus import NextPageTemplate story.append(NextPageTemplate("Normal")) story.append(PageBreak()) # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ # PAGE 2-3: INTRODUCTION + HEART PICTURE # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ story.append(ch_header("1.1 Introduction to Cardiovascular System", "Overview, components and functions")) story.append(sp(8)) story.append(Paragraph("What is the Cardiovascular System?", sec_hd)) story.append(HR()) story.append(Paragraph( "The Cardiovascular System (CVS) is the body's transport system. " "It consists of the <b>heart</b>, <b>blood vessels</b>, and <b>blood</b>. " "Its job is to deliver oxygen and nutrients to every cell and remove " "carbon dioxide and waste products.", body)) story.append(sp(6)) comps = [ ["Component", "Parts", "Function"], ["โค๏ธ Heart", "4 chambers, 4 valves, 3 wall layers", "Pump that pushes blood (like an engine)"], ["๐ฉธ Blood Vessels", "Arteries, Veins, Capillaries", "Pipes carrying blood to/from organs"], ["๐ Blood", "RBC, WBC, Platelets, Plasma", "Carries O2, nutrients, hormones, waste"], ] story.append(mk_table(["Component","Parts","Function"], comps[1:], [inner_w*0.20, inner_w*0.32, inner_w*0.48], hdr_color=DARK_RED)) story.append(sp(10)) # โโ HEART DIAGRAM IMAGE โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ story.append(Paragraph("โฅ Labeled Diagram of the Human Heart", img_title_s)) story.append(sp(4)) story.append(image_box( IMG, width_cm=13, caption="Figure 1.1: Anatomy of the Human Heart showing chambers, valves and major blood vessels.\n" "Source: Wikimedia Commons (CC BY-SA 3.0)")) story.append(sp(8)) story.append(info_box( "๐ Study this diagram carefully:\n" "โข Identify the 4 chambers: Right Atrium (RA), Right Ventricle (RV), Left Atrium (LA), Left Ventricle (LV)\n" "โข Locate the 4 valves: Tricuspid, Pulmonary, Mitral, Aortic\n" "โข Find the major vessels: Aorta, Pulmonary Artery, Vena Cava, Pulmonary Veins\n" "โข Note: Left Ventricle wall is THICKEST (pumps to whole body)", LIGHT_GOLD, GOLD)) story.append(PageBreak()) # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ # SECTION 2: HEART ANATOMY DETAIL # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ story.append(ch_header("1.2 Heart - Detailed Anatomy", "Location, layers, chambers and valves")) story.append(sp(8)) story.append(Paragraph("Location and Size", sec_hd)) story.append(HR()) story.append(B("Location: Mediastinum - middle of chest, slightly LEFT of midline")) story.append(B("Size: Approximately your own closed FIST")) story.append(B("Weight: ~250-350 grams in adults")) story.append(B("Apex (tip): 5th intercostal space, midclavicular line (left side)")) story.append(sp(8)) story.append(Paragraph("3 Layers of Heart Wall", sec_hd)) story.append(HR()) layers = [ ["Layer", "Position", "Description", "Mnemonic"], ["Epicardium", "Outermost", "Thin outer covering = visceral pericardium", "EPI = Outside (like Epidermis)"], ["Myocardium", "Middle", "Thick muscular layer - does the actual pumping", "MYO = Muscle (Myalgia = muscle pain)"], ["Endocardium", "Innermost", "Smooth inner lining of chambers and valves", "ENDO = Inside (Endoscopy = looking inside)"], ] story.append(mk_table(["Layer","Position","Description","Mnemonic"], layers[1:], [inner_w*0.17, inner_w*0.14, inner_w*0.38, inner_w*0.31], hdr_color=DARK_RED)) story.append(sp(8)) story.append(Paragraph("4 Chambers of the Heart", sec_hd)) story.append(HR()) chambers = [ ["Chamber", "Side", "Receives Blood From", "Sends To", "Wall"], ["Right Atrium (RA)", "Right", "Superior & Inferior Vena Cava (whole body)", "RV via Tricuspid valve", "Thin"], ["Right Ventricle (RV)", "Right", "Right Atrium", "Lungs via Pulmonary artery", "Moderate"], ["Left Atrium (LA)", "Left", "Pulmonary veins (4 veins from lungs)", "LV via Mitral valve", "Thin"], ["Left Ventricle (LV)", "Left", "Left Atrium", "Whole body via Aorta", "THICKEST"], ] story.append(mk_table(["Chamber","Side","Receives From","Sends To","Wall"], [[r[0],r[1],r[2],r[3],r[4]] for r in chambers[1:]], [inner_w*0.22, inner_w*0.09, inner_w*0.27, inner_w*0.27, inner_w*0.15], hdr_color=DARK_RED)) story.append(sp(6)) story.append(tip_box("๐ Key: LV (Left Ventricle) has the THICKEST wall - it pumps blood to the ENTIRE body against highest pressure.")) story.append(sp(8)) story.append(Paragraph("4 Valves of the Heart", sec_hd)) story.append(HR()) valves = [ ["Valve", "Location", "Type", "Function"], ["Tricuspid", "Between RA and RV", "AV valve (3 cusps)", "Prevents backflow from RV to RA"], ["Pulmonary", "RV to Pulmonary artery", "Semilunar valve", "Prevents backflow from pulmonary artery to RV"], ["Mitral (Bicuspid)","Between LA and LV", "AV valve (2 cusps)", "Prevents backflow from LV to LA"], ["Aortic", "LV to Aorta", "Semilunar valve", "Prevents backflow from Aorta to LV"], ] story.append(mk_table(["Valve","Location","Type","Function"], valves[1:], [inner_w*0.18, inner_w*0.25, inner_w*0.20, inner_w*0.37], hdr_color=PURPLE, alt=LIGHT_PURPLE)) story.append(sp(6)) story.append(info_box( "๐ค MNEMONIC - 4 Valves Order (Right to Left):\n" "\"Tigers Prefer Milk Always\"\n" "T = Tricuspid | P = Pulmonary | M = Mitral | A = Aortic", LIGHT_PURPLE, PURPLE)) story.append(PageBreak()) # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ # SECTION 3: CIRCULATION # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ story.append(ch_header("1.3 Blood Circulation", "Pulmonary and systemic circuits - step by step")) story.append(sp(8)) story.append(Paragraph("Two Circuits of Circulation", sec_hd)) story.append(HR()) circuits = [ ["Circuit", "Path", "Purpose"], ["Pulmonary (Small) Circulation","Right heart โ Lungs โ Left heart", "Blood picks up O2 and releases CO2 in lungs"], ["Systemic (Large) Circulation","Left heart โ Whole body โ Right heart","O2 and nutrients delivered to all body cells"], ] story.append(mk_table(["Circuit","Path","Purpose"], circuits[1:], [inner_w*0.24, inner_w*0.36, inner_w*0.40], hdr_color=TEAL, alt=LIGHT_TEAL)) story.append(sp(10)) story.append(Paragraph("Complete Blood Flow - Step by Step", sec_hd)) story.append(HR()) story.append(box_diagram([ " BODY TISSUES (deoxygenated blood - dark red)", " |", " v", " Superior Vena Cava + Inferior Vena Cava", " |", " v", " RIGHT ATRIUM --> [Tricuspid Valve] --> RIGHT VENTRICLE", " |", " v [Pulmonary Valve opens]", " PULMONARY ARTERY --> LUNGS (CO2 released, O2 absorbed)", " |", " v", " PULMONARY VEINS (4 veins carry oxygenated blood)", " |", " v", " LEFT ATRIUM --> [Mitral Valve] --> LEFT VENTRICLE", " |", " v [Aortic Valve opens]", " AORTA --> BODY TISSUES (O2 and nutrients delivered)", ], title="Complete Blood Flow Diagram", bg=LIGHT_BLUE, border=MED_BLUE)) story.append(sp(8)) story.append(warn_box( "โ ๏ธ EXCEPTION - Must Remember for Exam:\n" "โข Pulmonary ARTERY carries DE-oxygenated blood (Right heart โ Lungs)\n" "โข Pulmonary VEIN carries OXYGENATED blood (Lungs โ Left heart)\n" "This is opposite to ALL other arteries (oxygenated) and veins (deoxygenated)!")) story.append(PageBreak()) # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ # SECTION 4: CARDIAC CYCLE + CONDUCTION # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ story.append(ch_header("1.4 Cardiac Cycle & Conduction System", "How each heartbeat is generated and controlled")) story.append(sp(8)) story.append(Paragraph("Cardiac Cycle", sec_hd)) story.append(HR()) cycle = [ ["Phase", "What Happens", "Duration"], ["Systole", "Ventricles CONTRACT - push blood out", "~0.3 sec"], ["Diastole", "Ventricles RELAX - fill with blood", "~0.5 sec"], ["Full Cycle","One complete heartbeat at 75 bpm", "~0.8 sec"], ] story.append(mk_table(["Phase","What Happens","Duration"], cycle[1:], [inner_w*0.18, inner_w*0.58, inner_w*0.24])) story.append(sp(6)) story.append(info_box("๐ฉบ Heart Sounds: Lub (S1) = Mitral + Tricuspid valves CLOSING at start of systole. " "Dub (S2) = Aortic + Pulmonary valves CLOSING at end of systole.", LIGHT_RED, MED_RED)) story.append(sp(8)) story.append(Paragraph("Conduction System - The Heart's Electrical Circuit", sec_hd)) story.append(HR()) story.append(box_diagram([ " SA NODE (Sinoatrial Node) <-- Natural Pacemaker", " Location: Right Atrium wall", " Rate: 60-100 impulses/min", " Action: Starts EVERY heartbeat", " |", " v (atria contract - P wave on ECG)", " AV NODE (Atrioventricular Node)", " Location: Between RA and RV (AV junction)", " Action: DELAYS impulse 0.1 sec", " Purpose: Allows ventricles to fill before contracting", " |", " v", " BUNDLE OF HIS", " Location: Interventricular septum", " Divides into: Right Bundle Branch + Left Bundle Branch", " |", " v", " PURKINJE FIBERS", " Location: Ventricular walls", " Action: Rapid spread of impulse -> ventricular contraction (QRS on ECG)", ], title="Conduction Pathway", bg=LIGHT_TEAL, border=TEAL)) story.append(sp(8)) cond_vals = [ ["Node / Structure", "Intrinsic Rate", "Clinical Significance"], ["SA Node", "60-100/min", "Primary pacemaker. Failure = AV node takes over"], ["AV Node", "40-60/min", "Backup pacemaker. AV block = heart rate drops"], ["Bundle Branches", "20-40/min", "Last resort. Very slow - dangerous"], ["PR Interval (ECG)", "0.12-0.20 sec", "Prolonged = 1st degree AV block"], ["QRS Duration (ECG)", "0.06-0.10 sec", "Widened = bundle branch block"], ] story.append(mk_table(["Node / Structure","Intrinsic Rate","Clinical Significance"], cond_vals[1:], [inner_w*0.33, inner_w*0.20, inner_w*0.47], hdr_color=TEAL, alt=LIGHT_TEAL)) story.append(PageBreak()) # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ # SECTION 5: ECG # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ story.append(ch_header("1.5 ECG - Electrocardiogram", "Reading ECG waves and critical changes")) story.append(sp(8)) story.append(Paragraph("ECG Waves - What Each Represents", sec_hd)) story.append(HR()) ecg = [ ["Wave/Segment", "Represents", "Normal Value"], ["P Wave", "Atrial depolarization (atria contracting)", "< 0.12 sec, smooth rounded"], ["PR Interval", "Atrial โ ventricular conduction time", "0.12 - 0.20 sec"], ["QRS Complex", "Ventricular depolarization (ventricles contracting)","0.06 - 0.10 sec"], ["ST Segment", "Ventricular plateau (between contraction-recovery)","Isoelectric (flat, no elevation/depression)"], ["T Wave", "Ventricular repolarization (recovery)", "0.16 sec, upright in most leads"], ["QT Interval", "Total ventricular electrical activity", "0.36 - 0.44 sec"], ] story.append(mk_table(["Wave/Segment","Represents","Normal Value"], ecg[1:], [inner_w*0.20, inner_w*0.48, inner_w*0.32], hdr_color=DARK_RED)) story.append(sp(8)) story.append(box_diagram([ " R", " /|\\", " / | \\", " P / | \\ T", " / \\ / | \\ / \\", "------/ \\----/ | \\------/ \\------", " Q | S", " |_______|", " (QRS complex)", "", " P = Atrial contraction (small wave)", " QRS = Ventricular contraction (tallest wave)", " T = Ventricular recovery (dome-shaped)", ], title="Normal ECG Wave Pattern", bg=LIGHT_BLUE, border=MED_BLUE)) story.append(sp(8)) story.append(warn_box( "๐จ Critical ECG Changes - REPORT IMMEDIATELY to doctor:\n" "โข ST Elevation โ STEMI (Heart Attack!) - Emergency!\n" "โข No P waves + Irregular rhythm โ Atrial Fibrillation (AF)\n" "โข Wide bizarre QRS + fast rate โ Ventricular Tachycardia (VT)\n" "โข Chaotic wavy baseline, no recognizable waves โ Ventricular Fibrillation (VF) = ARREST!\n" "โข Prolonged PR interval โ AV Block")) story.append(PageBreak()) # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ # SECTION 6: BLOOD VALUES # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ story.append(ch_header("1.6 Cardiac Output, BP & Blood Values", "Formulas, classifications and normal ranges")) story.append(sp(8)) story.append(Paragraph("Cardiac Output Formula", sec_hd)) story.append(HR()) story.append(box_diagram([ " CARDIAC OUTPUT (CO) = Heart Rate (HR) ร Stroke Volume (SV)", "", " Normal CO = ~5 L/min (at rest)", " Normal HR = 60-100 bpm", " Normal SV = ~70 mL/beat", "", " Example: CO = 70 bpm ร 70 mL = 4,900 mL โ 5 L/min", " During exercise: CO can rise to 20-25 L/min!", ], title="Cardiac Output", bg=LIGHT_GOLD, border=GOLD)) story.append(sp(8)) story.append(Paragraph("Blood Pressure Classification", sec_hd)) story.append(HR()) bp_class = [ ["Category", "Systolic", "Diastolic", "Nursing Action"], ["Normal", "< 120", "< 80", "Reassure, healthy lifestyle"], ["Elevated", "120-129", "< 80", "Lifestyle modification counseling"], ["Hypertension Stage 1","130-139", "80-89", "Lifestyle + monitor closely"], ["Hypertension Stage 2","โฅ 140", "โฅ 90", "Antihypertensive medication"], ["Hypertensive Crisis", "โฅ 180", "โฅ 120", "EMERGENCY - call doctor immediately"], ["Hypotension", "< 90", "< 60", "Lay flat, IV fluids, find cause"], ] story.append(mk_table(["Category","Systolic (mmHg)","Diastolic (mmHg)","Nursing Action"], bp_class[1:], [inner_w*0.28, inner_w*0.15, inner_w*0.15, inner_w*0.42], hdr_color=DARK_RED)) story.append(sp(8)) story.append(Paragraph("Blood Normal Values", sec_hd)) story.append(HR()) blood_vals = [ ["Parameter", "Male", "Female", "Abnormal"], ["Haemoglobin", "13.5-17.5 g/dL", "12.0-15.5 g/dL", "Low = Anaemia"], ["WBC Count", "4,000-11,000/ยตL","4,000-11,000/ยตL", "High = Infection/Leukocytosis"], ["Platelet Count", "1.5-4.5 lakh/ยตL","1.5-4.5 lakh/ยตL","Low = Thrombocytopenia"], ["Serum Na+ (Sodium)", "135-145 mEq/L", "135-145 mEq/L", "Low = Hyponatremia"], ["Serum K+ (Potassium)","3.5-5.0 mEq/L", "3.5-5.0 mEq/L", "Low = Hypokalemia (arrhythmia risk)"], ["Blood Sugar (fasting)","70-100 mg/dL", "70-100 mg/dL", "High = Hyperglycemia/DM"], ["Serum Creatinine", "0.6-1.2 mg/dL", "0.5-1.1 mg/dL", "High = Kidney disease"], ["INR", "0.8-1.2 (normal)","Therapeutic: 2-3","High = Bleeding risk"], ] story.append(mk_table(["Parameter","Male","Female","Abnormal"], blood_vals[1:], [inner_w*0.30, inner_w*0.18, inner_w*0.18, inner_w*0.34], hdr_color=MED_BLUE, alt=LIGHT_BLUE)) story.append(PageBreak()) # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ # SECTION 7: NURSING CARE # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ story.append(ch_header("1.7 CVS Conditions & Nursing Care", "MI and Heart Failure - exam-focused management")) story.append(sp(8)) story.append(Paragraph("Myocardial Infarction (MI) - Heart Attack", sec_hd)) story.append(HR()) mi_data = [ ["Aspect", "Details"], ["Definition", "Death of cardiac muscle due to blocked coronary artery (ischemia)"], ["Causes", "Atherosclerosis (plaque), thrombus (blood clot), coronary artery spasm"], ["Signs & Symptoms", "โข Crushing chest pain - radiates to left arm, jaw, shoulder\n" "โข Diaphoresis (profuse sweating)\n" "โข Nausea, vomiting, dyspnea\n" "โข Anxiety, pale/clammy skin\n" "โข Pain NOT relieved by rest or position change"], ["Diagnosis", "12-lead ECG (ST elevation in STEMI), Troponin I & T (cardiac enzymes), CK-MB, Echo"], ["Treatment", "MONA: Morphine + Oxygen + Nitrates + Aspirin\n" "Thrombolytics (streptokinase), PCI (balloon angioplasty), CABG surgery"], ["Nursing Care", "1. Semi-Fowler's position (30-45ยฐ) for comfort\n" "2. O2 therapy at 2-4 L/min via nasal cannula\n" "3. 12-lead ECG immediately + continuous cardiac monitoring\n" "4. IV access - at least 2 large bore cannulas\n" "5. Administer MONA as prescribed\n" "6. NPO until stable, monitor vitals every 15 min\n" "7. Emotional support - reduce anxiety\n" "8. Document time of pain onset"], ["Complications", "Arrhythmia, Heart failure, Cardiogenic shock, Pericarditis, Sudden death"], ] story.append(mk_table(["Aspect","Details"], mi_data[1:], [inner_w*0.20, inner_w*0.80], hdr_color=DARK_RED)) story.append(sp(10)) story.append(Paragraph("Heart Failure - Left vs Right", sec_hd)) story.append(HR()) hf_data = [ ["", "Left Heart Failure", "Right Heart Failure"], ["Problem", "LV fails โ backs up to lungs", "RV fails โ backs up to body"], ["Key Symptoms", "Dyspnea, orthopnea, PND\n(paroxysmal nocturnal dyspnea)\nPink frothy sputum\nCrackles at lung bases", "Peripheral edema (ankle/legs)\nJugular Vein Distension (JVD)\nHepatomegaly, ascites\nWeight gain"], ["Nursing Position","Semi-Fowler's / Fowler's (upright)", "Legs elevated (unless also has LHF)"], ["Key Nursing Care","O2 therapy\nDiuretics (furosemide)\nFluid/sodium restriction\nDaily weight monitoring", "Diuretics\nMonitor intake & output\nSkin care (edematous limbs)\nDaily weight"], ] data = [[Paragraph(h, table_hd) for h in ["","Left Heart Failure","Right Heart Failure"]]] for row in hf_data[1:]: data.append([Paragraph(c, table_cell) for c in row]) t = Table(data, colWidths=[inner_w*0.18, inner_w*0.41, inner_w*0.41], repeatRows=1) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), DARK_RED), ("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_RED]), ("GRID", (0,0), (-1,-1), 0.5, MID_GRAY), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 6), ("VALIGN", (0,0), (-1,-1), "TOP"), ])) story.append(t) story.append(PageBreak()) # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ # SECTION 8: SELF-TEST # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ story.append(ch_header("Self-Test Questions (20 Marks)", "Answer without notes first - then check answers on next page!")) story.append(sp(8)) story.append(info_box("๐ Instructions: First close your notes and attempt all 20 questions. " "Then flip to the answer key. Score yourself honestly!", LIGHT_BLUE, MED_BLUE)) story.append(sp(8)) story.append(Paragraph("Section A - Fill in the Blanks (10 marks)", sec_hd)) story.append(HR()) fills = [ "1. The natural pacemaker of the heart is the ________________________.", "2. Normal adult heart rate = _______ to _______ bpm.", "3. Normal blood pressure = _______ / _______ mmHg.", "4. The thickest chamber of the heart is the ________________________.", "5. The valve between Left Atrium and Left Ventricle = ________________________.", "6. Normal Haemoglobin in adult female = _______ to _______ g/dL.", "7. Cardiac Output = Heart Rate ร ________________________.", "8. ST elevation on ECG indicates ________________________.", "9. Pulmonary ARTERY carries ________________________ blood.", "10. The middle muscular layer of the heart is called ________________________.", ] for q in fills: story.append(Paragraph(q, body)) story.append(sp(6)) story.append(sp(6)) story.append(Paragraph("Section B - Short Answer (10 marks)", sec_hd)) story.append(HR()) shorts = [ "11. Name the 4 chambers of the heart.", "12. What is MONA protocol in MI treatment? Expand each letter.", "13. Describe complete blood flow from body โ lungs โ back to body.", "14. Difference between Systole and Diastole.", "15. What are the 5 Rights of drug administration?", "16. List 4 symptoms of Myocardial Infarction.", "17. What is the function of the AV node?", "18. Difference between Left and Right Heart Failure symptoms.", "19. What ECG change indicates a heart attack?", "20. What nursing position do you place a breathless cardiac patient in?", ] for q in shorts: story.append(Paragraph(q, body)) story.append(sp(16)) story.append(PageBreak()) # ANSWER KEY story.append(ch_header("Answer Key", "Check your score!", TEAL)) story.append(sp(8)) story.append(Paragraph("Section A Answers", sec_hd)) story.append(HR()) ans_a = [ ("1","SA Node (Sinoatrial Node)"), ("2","60 to 100 bpm"), ("3","120 / 80 mmHg"), ("4","Left Ventricle"), ("5","Mitral valve (Bicuspid valve)"), ("6","12.0 to 15.5 g/dL"), ("7","Stroke Volume (CO = HR ร SV)"), ("8","Myocardial Infarction / STEMI (Heart Attack)"), ("9","De-oxygenated blood (dark red blood going to lungs)"), ("10","Myocardium"), ] for n, a in ans_a: story.append(Paragraph(f"<b>{n}.</b> {a}", body)) story.append(sp(3)) story.append(sp(8)) story.append(Paragraph("Section B Key Points", sec_hd)) story.append(HR()) ans_b = [ ("11","Right Atrium, Right Ventricle, Left Atrium, Left Ventricle"), ("12","M = Morphine (pain relief) | O = Oxygen | N = Nitrates (vasodilator) | A = Aspirin (antiplatelet)"), ("13","Body โ Vena Cava โ RA โ Tricuspid โ RV โ Pulmonary valve โ Pulmonary artery โ Lungs โ Pulmonary veins โ LA โ Mitral โ LV โ Aortic valve โ Aorta โ Body"), ("14","Systole = ventricles contracting, blood pumped out. Diastole = ventricles relaxing, heart fills with blood."), ("15","Right Patient, Right Drug, Right Dose, Right Route, Right Time"), ("16","Crushing chest pain, radiation to left arm/jaw, diaphoresis, nausea/vomiting, dyspnea, pallor, anxiety"), ("17","AV node delays electrical impulse by 0.1 second to allow ventricles to fill completely before contracting"), ("18","Left HF: Dyspnea, crackles, pink frothy sputum (lungs congested). Right HF: Pedal edema, JVD, hepatomegaly (body congested)"), ("19","ST segment elevation (STEMI = ST Elevation Myocardial Infarction)"), ("20","Semi-Fowler's position (30-45 degrees) or Fowler's (90 degrees) - upright to reduce dyspnea"), ] for n, a in ans_b: story.append(Paragraph(f"<b>{n}.</b> {a}", body)) story.append(sp(5)) story.append(sp(10)) story.append(info_box( "๐ Your Score:\n" "18-20 = Excellent! Ready for Chapter 2 โ \n" "14-17 = Good! Review weak sections and retry\n" "10-13 = Fair - Re-read the full chapter\n" "Below 10 = Start from beginning - understanding before memorising!\n\n" "Next Step: Tomorrow - Chapter 1 Part 2: Respiratory System ๐ซ", LIGHT_TEAL, TEAL)) # โโ Build โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ doc.build(story) print(f"PDF created: {OUTPUT}") EOF
ls -lh /tmp/workspace/gnm-study-guide/GNM_Anatomy_Ch1_With_Picture.pdf
GNM Anatomy Ch1 With Picture
PDF Document ยท PDF
| Feature | Detail |
|---|---|
| โค๏ธ Heart Diagram | Page 2 pe real labeled anatomy image - chambers, valves, vessels sab dikhte hain |
| Image Source | Wikimedia Commons - free public domain medical image |
| Study Tip Box | Diagram ke neeche - kya identify karna hai step by step |
| 7 Sections | Introduction โ Anatomy โ Circulation โ ECG โ BP/Blood Values โ Nursing Care โ Self-Test |
| 20 Question Test | Fill-in-the-blanks + short answers with full answer key |
| File Size | 374 KB (image ke saath bhi fast open hogi) |
Abhi โ PDF kholo, Heart Diagram dekho (Page 2)
Sab labels identify karo - chambers, valves
11 AM โ Section 1.1 to 1.3 padho
2:00 PM โ Apna khud ka heart diagram banao (memory se!)
7:00 PM โ 20 questions solve karo (Section 8)
Sone se pehle โ Score check karo, weak areas note karo