Protocol to treat Anca Vasculitis according to Guidlines
"ANCA vasculitis" AND "treatment guidelines"
"ANCA-associated vasculitis" AND treatment
PMID: 36927642
PMID: 38388102
PMID: 40499922
KDIGO 2024 ANCA vasculitis treatment protocol guidelines summary
https://kdigo.org/wp-content/uploads/2024/02/KDIGO-2024-ANCA…
| Category | Definition |
|---|---|
| Severe / Organ-threatening | Active GN, SCr elevated, pulmonary hemorrhage, mononeuritis multiplex, orbital mass, cardiac involvement |
| Non-severe / Limited | Upper airway disease, skin, joints - without organ-threatening features |
| Life-threatening | Pulmonary hemorrhage with hypoxemia, rapidly progressive GN, dialysis-dependent |
Glucocorticoids + Rituximab OR Cyclophosphamide
Combination (CYC + RTX): A combination of 2 IV pulses of cyclophosphamide with rituximab can be considered for severe GN.
| Measure | Details |
|---|---|
| PCP prophylaxis | Co-trimoxazole 480-960 mg 3x/week (or dapsone/atovaquone if intolerant) during induction |
| Antifungal prophylaxis | Consider during intensive immunosuppression |
| Osteoporosis prophylaxis | Calcium + Vitamin D, consider bisphosphonates for all patients on GC |
| Bladder protection (CYC) | Mesna + high fluid intake; regular urinalysis; urology referral for hematuria |
| ANCA monitoring | Serial PR3/MPO-ANCA; rising titer predicts relapse (especially in renal disease) |
| Renal function | SCr, urinalysis, urine protein/creatinine ratio at each visit |
| Immunoglobulin levels | Monitor IgG with rituximab maintenance; replace if IgG <400 mg/dL |
| Vaccinations | Pneumococcal, influenza, COVID-19, zoster (before starting biologic if possible) |
| Population | Modification |
|---|---|
| Dialysis-dependent ESKD | Avoid or minimize maintenance immunosuppression (low relapse risk, high infection risk); continue treating extrarenal manifestations |
| Pregnancy | Use azathioprine (safe); avoid CYC and MMF; rituximab only if essential |
| Pediatric | Rituximab preferred over CYC; same induction principles |
| Elderly/Frail | Reduce CYC dose; prefer rituximab; avacopan for steroid-sparing; vigilant infection monitoring |
| Pre-transplant | Delay transplant until complete remission for ≥6 months; ANCA positivity alone does NOT delay transplant |
SUSPECTED AAV
|
├─ ANCA+ & compatible clinical → START TREATMENT (biopsy when feasible, don't delay)
|
├─ ORGAN-/LIFE-THREATENING?
| YES → Pulse methylprednisolone → Oral GC taper (reduced-dose protocol)
| + Rituximab (preferred) OR Cyclophosphamide
| ± Avacopan (GC-sparing)
| ± Plasma exchange (if SCr >3.4, dialysis, DAH, anti-GBM overlap)
|
├─ LIMITED/NON-SEVERE?
| → GC + Methotrexate (or MMF)
|
├─ EGPA?
| → GC ± CYC (severe); Mepolizumab (relapsing/refractory)
|
REMISSION ACHIEVED (~3-6 months)
|
└─ MAINTENANCE THERAPY (18 months to 4 years)
Rituximab (preferred) OR Azathioprine + low-dose GC
± Avacopan (complete 12-month course)
Monitor: ANCA, renal function, IgG, infections
Approach to thrombocytopenia
"thrombocytopenia" AND "diagnosis" AND "approach"
| Finding | Significance |
|---|---|
| Petechiae (non-blanching, pinpoint) | Low platelet number (typically <30,000) |
| Wet purpura (oral blood blisters) | High risk of life-threatening hemorrhage |
| Ecchymoses | Platelet number OR function problem |
| Splenomegaly | Sequestration, portal hypertension, lymphoma |
| Lymphadenopathy | Malignancy, infection |
| Signs of chronic liver disease | Decreased thrombopoietin, portal hypertension |
| Jaundice | Hemolysis (TTP/HUS), liver disease |
| Fever + microangiopathy | TTP/HUS, DIC |
THROMBOCYTOPENIA
|
├── DECREASED PRODUCTION (bone marrow problem)
| → Peripheral smear: normal or small platelets
| → Immature Platelet Fraction (IPF): LOW or normal
| → Bone marrow: ↓ megakaryocytes or infiltration
|
├── INCREASED DESTRUCTION / CONSUMPTION
| → Peripheral smear: large platelets (megakaryocytes working harder)
| → IPF: HIGH (elevated reticulated platelets)
| → Bone marrow: normal or ↑ megakaryocytes
|
└── SEQUESTRATION
→ Splenomegaly traps up to 90% of platelet pool
→ Production normal; distribution problem

| Cause | Key Features |
|---|---|
| Aplastic anemia | Pancytopenia, hypocellular marrow |
| Myelodysplastic syndrome (MDS) | Age >60, dysplastic cells on smear |
| Leukemia / lymphoma | Blasts on smear, systemic symptoms |
| Myelofibrosis | Teardrop cells, splenomegaly, leukoerythroblastic picture |
| B12/Folate deficiency | Hypersegmented neutrophils, macrocytosis, pancytopenia |
| Chemotherapy / radiation | Predictable, dose-related |
| Viral infections | HIV, parvovirus B19, EBV, CMV |
| Alcohol toxicity | Marrow suppression + hypersplenism |
| Liver disease | ↓ Thrombopoietin (made in liver) → ↓ megakaryopoiesis |
| Congenital | Fanconi anemia, Shwachman-Diamond syndrome |
| Condition | Key Features |
|---|---|
| ITP (Immune Thrombocytopenic Purpura) | Isolated thrombocytopenia, normal smear except large platelets, otherwise well patient |
| Secondary ITP | Associated with SLE, HIV, HCV, H. pylori, CLL |
| Drug-induced immune thrombocytopenia | Heparin (HIT), quinine, sulfonamides, GP IIb/IIIa inhibitors, many others |
| Post-transfusion purpura | Severe thrombocytopenia 5-10 days post-transfusion |
| Evans syndrome | ITP + autoimmune hemolytic anemia (Coombs positive) |
| Condition | Key Features |
|---|---|
| TTP (Thrombotic Thrombocytopenic Purpura) | FAT RN: Fever, microAngiopathic hemolytic Anemia, Thrombocytopenia, Renal dysfunction, Neurological symptoms; schistocytes; ADAMTS13 deficiency |
| HUS (Hemolytic Uremic Syndrome) | Triad: MAHA + thrombocytopenia + AKI; often post-E. coli O157:H7 (children) |
| DIC (Disseminated Intravascular Coagulation) | Sepsis, trauma, obstetric emergency; prolonged PT/aPTT, ↑D-dimer, ↓fibrinogen |
| HELLP syndrome | Hemolysis, Elevated Liver enzymes, Low Platelets - pregnancy complication |
| Antiphospholipid syndrome | Thrombosis + thrombocytopenia + positive aPL antibodies |
| Kasabach-Merritt | Giant hemangioma consuming platelets |
| Sepsis | Multi-mechanism: DIC + direct marrow suppression |
| Cause | Features |
|---|---|
| Hypersplenism | Splenomegaly (any cause: cirrhosis, portal HTN, lymphoma, malaria, sickle cell, Gaucher's) |
| Typically mild thrombocytopenia (60,000-100,000/µL) |
| Platelet Count | Symptoms | Management |
|---|---|---|
| >30,000/µL | Asymptomatic | Observe; no treatment needed |
| 20,000-30,000/µL | Minor bleeding | Oral prednisone 1 mg/kg/day OR dexamethasone 40 mg/day x 4 days |
| <20,000/µL or significant bleeding | Active bleeding | Hospitalize; high-dose steroids + IVIgG (1-2 g/kg) |
| Life-threatening bleed | Emergency | Steroids + IVIgG + platelet transfusion + consider rituximab |
| Parameter | 2 points | 1 point | 0 points |
|---|---|---|---|
| Thrombocytopenia | >50% fall, nadir ≥20 | 30-50% fall or nadir 10-19 | <30% fall or nadir <10 |
| Timing of fall | Days 5-10, or ≤1 day if prior heparin within 30 days | >10 days or unknown | ≤4 days without recent heparin |
| Thrombosis | New thrombosis or skin necrosis | Progressive/recurrent thrombosis | None |
| OTher cause | None apparent | Possible | Definite |
| Platelet Count | Clinical Correlation |
|---|---|
| >100,000/µL | Normal hemostasis for most procedures |
| 50,000-100,000/µL | Generally asymptomatic; increased bleeding with major trauma/surgery |
| 30,000-50,000/µL | Easy bruising; minor procedures generally safe |
| 10,000-30,000/µL | Spontaneous bruising, mucosal bleeding (epistaxis, gingival); avoid invasive procedures |
| <10,000/µL | Spontaneous intracranial hemorrhage risk; hospitalize; consider prophylactic transfusion |
| Test | What it tells you |
|---|---|
| CBC + peripheral smear | Most critical first step; platelet size, RBC morphology, blasts |
| Immature platelet fraction (IPF) | Distinguishes production vs. destruction |
| PT, aPTT, fibrinogen, D-dimer | DIC screen |
| LDH, haptoglobin, bilirubin, Coombs | Hemolysis (TTP/HUS/Evans) |
| ADAMTS13 activity | TTP diagnosis |
| Anti-PF4/heparin antibody | HIT |
| HIV, HCV, HBV serology | Secondary ITP |
| ANA, anti-dsDNA | SLE-associated ITP |
| H. pylori | Secondary ITP |
| Bone marrow biopsy | Unexplained, age >60, or treatment failure |
| Liver function tests, ultrasound | Hepatic cause, splenomegaly |
| Blood cultures | Sepsis-induced thrombocytopenia |
Can you teach me basics of neurology for MD medicine resident
Can you teach me basics of neurology for MD medicine resident
The #1 skill in neurology is localization - "Where is the lesion?" always before "What is the lesion?"
1. Mental Status
2. Cranial Nerves (I–XII)
3. Motor System
4. Reflexes
5. Coordination & Cerebellar
6. Gait & Balance
7. Sensory System
| Domain | What to Test | Bedside Tools |
|---|---|---|
| Arousal/Consciousness | Is the patient awake, alert, drowsy, stuporous, comatose? | GCS; AVPU scale |
| Attention | Serial 7s (subtract 7 from 100), spelling "WORLD" backwards, digit span | MMSE, MoCA |
| Orientation | Person, place, time, situation | "Where are you? What day is it?" |
| Language | Fluency, comprehension, repetition, naming | "Repeat after me...", name objects |
| Memory | Immediate recall, short-term (3-word recall at 5 min), long-term | MMSE 3-word registration/recall |
| Visuospatial | Copy intersecting pentagons, clock-drawing test | MoCA clock test |
| Aphasia Type | Fluency | Comprehension | Repetition | Lesion Location |
|---|---|---|---|---|
| Broca's | Non-fluent (effortful, telegraphic) | Intact | Impaired | Inferior frontal gyrus (L) |
| Wernicke's | Fluent (but empty, paraphasias) | Impaired | Impaired | Superior temporal gyrus (L) |
| Global | Non-fluent | Impaired | Impaired | Large L hemisphere |
| Conduction | Fluent | Intact | Impaired | Arcuate fasciculus |
| Anomic | Fluent | Intact | Intact | Variable |
Clinical Pearl: In right-handed people (and ~70% of left-handed), language is in the LEFT hemisphere. A fluent patient with poor comprehension = Wernicke's = posterior. A non-fluent patient who understands well = Broca's = anterior.
| CN | Name | Function | How to Test | Key Lesion Pattern |
|---|---|---|---|---|
| I | Olfactory | Smell | Each nostril separately with coffee/soap | Anosmia = frontal lobe, trauma, Parkinson's |
| II | Optic | Vision | Visual acuity, visual fields by confrontation, pupil light reflex (afferent limb), fundoscopy | RAPD = optic neuritis; papilledema = ↑ICP |
| III | Oculomotor | Eye movement (SR, IR, MR, IO), pupil constriction, lid elevation | Eye movements in 9 cardinal positions; pupil size/reaction | Ptosis + down-and-out eye + dilated fixed pupil = CN III palsy (posterior communicating artery aneurysm until proven otherwise!) |
| IV | Trochlear | Superior oblique (intorsion, depression in adduction) | Ask patient to look down and in; tilt head test | Diplopia on downward gaze; head tilt away from lesion |
| V | Trigeminal | Facial sensation (V1/V2/V3) + jaw movement | Light touch + pinprick forehead/cheek/jaw; jaw clench/open | V1 = forehead, V2 = cheek, V3 = jaw; corneal reflex (afferent limb) |
| VI | Abducens | Lateral rectus (abduction) | Follow finger laterally | Failure to abduct eye; diplopia on lateral gaze - "false localizing sign" in raised ICP |
| VII | Facial | Facial muscles + taste anterior 2/3 tongue | Raise eyebrows, close eyes tight, smile, puff cheeks | UMN (forehead spared) vs LMN/Bell's palsy (entire face including forehead) |
| VIII | Vestibulocochlear | Hearing + balance | Whisper test; Rinne/Weber tuning fork; Romberg | Rinne: AC>BC = normal or SNHL; BC>AC = conductive |
| IX/X | Glossopharyngeal/Vagus | Palate movement, gag, swallowing, voice | Say "ah" - uvula deviation; gag reflex | Uvula deviates AWAY from lesion; hoarse voice = X palsy |
| XI | Accessory | SCM + trapezius | Head turning against resistance; shoulder shrug | Weakness turning head to opposite side of lesion |
| XII | Hypoglossal | Tongue movement | Protrude tongue | Tongue deviates TOWARD side of LMN lesion |
Motor Cortex (precentral gyrus)
↓ Corticospinal (pyramidal) tract
Internal Capsule (posterior limb)
↓
Brainstem (crosses at pyramidal decussation in medulla)
↓
Lateral corticospinal tract in CONTRALATERAL spinal cord
↓
Anterior Horn Cell (lower motor neuron)
↓
Peripheral nerve → Neuromuscular junction → Muscle
| Feature | UMN Lesion | LMN Lesion |
|---|---|---|
| Weakness | Yes | Yes |
| Atrophy | Minimal (disuse only) | Yes (prominent) |
| Fasciculations | No | Yes |
| Tone | Increased (spasticity) | Decreased (flaccidity) |
| Reflexes | Increased (hyperreflexia) | Decreased/Absent |
| Plantar response | Extensor (Babinski +ve) | Flexor (normal) |
| Location | Cortex → anterior horn | Anterior horn cell to muscle |
Important caveat: In acute UMN lesions (e.g., acute stroke, acute spinal cord injury), you may see flaccidity and hyporeflexia initially (spinal shock / diaschisis). Spasticity and hyperreflexia develop over days to weeks.
| Grade | Description |
|---|---|
| 0/5 | No contraction at all |
| 1/5 | Flicker of contraction, no movement |
| 2/5 | Movement with gravity eliminated |
| 3/5 | Movement against gravity, not against resistance |
| 4/5 | Movement against some resistance (4-, 4, 4+) |
| 5/5 | Normal strength |
| Reflex | Nerve Root | How to Test |
|---|---|---|
| Biceps | C5, C6 | Tap biceps tendon; elbow flexion |
| Supinator (brachioradialis) | C5, C6 | Tap radial styloid; forearm supination |
| Triceps | C7 | Tap triceps tendon; elbow extension |
| Knee (patellar) | L3, L4 | Tap below patella; knee extension |
| Ankle (Achilles) | S1, S2 | Tap Achilles; plantarflexion |
| Test | Technique | What abnormality looks like |
|---|---|---|
| Finger-nose-finger | Touch your finger, then your nose, back and forth | Dysmetria (past-pointing), intention tremor |
| Heel-shin test | Heel on opposite knee, slide down shin | Irregular, wobbly sliding = ataxia |
| Rapid alternating movements (RAM) | Rapid pronation/supination of hand on thigh | Dysdiadochokinesia = irregular, uneven movements |
| Tandem gait | Walk heel-to-toe in straight line | Wide-based, stumbling = cerebellar or proprioceptive |
| Romberg test | Stand with feet together, eyes open then closed | Falls with eyes CLOSED = proprioceptive/vestibular; falls with eyes OPEN = cerebellar |
| Structure | Controls | Lesion Produces |
|---|---|---|
| Vermis / midline | Gait, axial/truncal stability | Truncal ataxia, wide-based gait, titubation |
| Cerebellar hemispheres | Ipsilateral limb coordination | Ipsilateral limb ataxia, dysmetria |
Key rule: Cerebellar signs are ipsilateral to the lesion (cerebellum does NOT cross). Motor cortex signs are contralateral.
| Gait Pattern | Description | Localization |
|---|---|---|
| Hemiplegic | Circumduction of stiff extended leg; arm flexed | Contralateral corticospinal (stroke) |
| Spastic scissor gait | Both legs stiff, cross, scissors | Bilateral UMN (spinal cord or bilateral hemisphere) |
| Ataxic (cerebellar) | Wide-based, lurching, cannot tandem | Cerebellum |
| Sensory ataxia | Slapping gait, worse eyes closed (Romberg +ve) | Dorsal columns / peripheral neuropathy |
| Parkinsonian | Shuffling small steps, stooped, reduced arm swing, festination, "freezing" | Basal ganglia (substantia nigra) |
| Foot drop (steppage) | High stepping to clear foot | Common peroneal nerve (L4/L5), anterior horn |
| Waddling | Side-to-side trunk shift | Proximal weakness (myopathy), hip disease |
| Apraxic / magnetic | Feet appear "glued to floor," normal leg power, wide-based | Frontal lobe (NPH, subcortical white matter disease) |
This is why Brown-Séquard syndrome (spinal cord hemisection) is so elegant: ipsilateral motor + proprioception loss, contralateral pain + temperature loss - because the two pathways cross at different levels.
| Modality | Pathway | How to Test |
|---|---|---|
| Light touch | Both | Cotton wisp; ask "can you feel this?" |
| Pain (pinprick) | Spinothalamic | Broken tongue depressor or pin; compare sides |
| Temperature | Spinothalamic | Cold tuning fork or tubes |
| Vibration | Dorsal column | 128 Hz tuning fork on bony prominences (great toe, malleolus, knee, wrist, elbow) |
| Joint position (proprioception) | Dorsal column | Hold great toe sides; move up or down; patient says which direction with eyes closed |
| 2-point discrimination | Dorsal column | Fingertip normal ≤5 mm |
| Stereognosis | Higher parietal | Identify coin in hand with eyes closed |
| Graphesthesia | Higher parietal | Identify number drawn on palm |
| Pattern | Location |
|---|---|
| Glove-and-stocking (symmetric, distal) | Peripheral polyneuropathy |
| Single nerve distribution | Mononeuropathy (e.g., median nerve = carpal tunnel) |
| Dermatomal | Nerve root (radiculopathy) |
| Hemisensory loss (whole side) | Contralateral thalamus or cortex |
| Dissociated sensory loss (pain/temp lost, vibration/proprioception preserved) | Syringomyelia, anterior spinal artery infarct |
| Level (all modalities below a horizontal line) | Spinal cord transection |
| Crossed sensory (face one side, body other side) | Brainstem (lateral medullary syndrome) |
1. CORTEX (cerebral cortex)
2. SUBCORTEX (white matter, basal ganglia, thalamus, internal capsule)
3. BRAINSTEM (midbrain, pons, medulla)
4. CEREBELLUM
5. SPINAL CORD
6. ANTERIOR HORN CELL
7. PERIPHERAL NERVE / NERVE ROOT
8. NEUROMUSCULAR JUNCTION / MUSCLE
| Syndrome | Location | Signs |
|---|---|---|
| Weber's | Midbrain (cerebral peduncle) | Ipsilateral CN III palsy + contralateral hemiplegia |
| Benedikt's | Midbrain (tegmentum) | Ipsilateral CN III palsy + contralateral tremor/ataxia |
| Millard-Gubler | Pons | Ipsilateral CN VI + VII + contralateral hemiplegia |
| Lateral Medullary (Wallenberg) | Lateral medulla (PICA) | Ipsilateral: face pain/temp loss, Horner's, ataxia, dysphagia; Contralateral: body pain/temp loss |
| Medial Medullary | Medial medulla (ASA) | Ipsilateral CN XII + contralateral hemiplegia + vibration loss |
| Syndrome | Cause | Features |
|---|---|---|
| Complete cord transection | Trauma | All modalities + UMN below level; autonomic |
| Central cord | Hyperextension injury (elderly) | Arms > legs; cape-like pain/temp loss; sacral sparing |
| Anterior cord | Anterior spinal artery occlusion | Motor + spinothalamic loss preserved; dorsal columns preserved |
| Brown-Séquard | Hemisection (tumor, trauma) | As above |
| Posterior cord | B12 deficiency, tabes dorsalis | Dorsal column loss only: vibration + proprioception |
| Root | Motor | Reflex | Sensory |
|---|---|---|---|
| C5 | Shoulder abduction, elbow flexion | Biceps, supinator | Lateral arm |
| C6 | Wrist extension, elbow flexion | Biceps, supinator | Thumb, index |
| C7 | Elbow/wrist extension | Triceps | Middle finger |
| C8 | Finger flexors | - | Ring, little finger |
| T1 | Finger abduction/adduction | - | Medial forearm |
| L3/L4 | Knee extension (quads) | Knee | Anterior thigh/knee |
| L4 | Ankle dorsiflexion | Knee | Medial leg |
| L5 | Great toe/foot dorsiflexion, hip abduction | - | Lateral leg, dorsum foot |
| S1 | Plantarflexion, toe flexion | Ankle | Lateral foot, sole |
Cortex ──────────────────── Contralateral hemiparesis
+ Aphasia / neglect / seizures
FACE & ARM > LEG (MCA)
LEG > FACE & ARM (ACA)
Internal Capsule ─────────── Contralateral dense hemiplegia
(face = arm = leg)
NO cortical signs
Brainstem ────────────────── CROSSED signs:
Ipsilateral CN palsy
+ Contralateral hemiplegia/sensory
Cerebellum ───────────────── Ipsilateral limb ataxia
Gait ataxia (midline)
NO weakness or sensory loss
Spinal Cord ──────────────── Sensory level
UMN below, LMN at level
Bladder/bowel dysfunction
Anterior Horn Cell ──────── Pure LMN, no sensory loss
Fasciculations prominent
Peripheral Nerve ─────────── LMN + sensory loss
In nerve/dermatomal territory
NMJ ─────────────────────── Fatigable weakness
No sensory, no reflex change
Muscle ──────────────────── Proximal symmetric weakness
No sensory loss
Elevated CK
Detail general examination from basics for MD medicine practical examination
The examiner is watching HOW you examine, not just WHAT you find.
1. GENERAL SURVEY (First Impression / On Inspection)
2. VITAL SIGNS
3. ANTHROPOMETRY
4. THE "BIG 8" CLINICAL SIGNS
- Pallor
- Icterus (Jaundice)
- Cyanosis
- Clubbing
- Lymphadenopathy
- Edema
- Koilonychia / other nail changes
- Dehydration
5. SPECIFIC FACIES
6. SKIN & HAIR
7. HANDS (a complete story in themselves)
| Parameter | What to Assess | Clinical Significance |
|---|---|---|
| General appearance | Well / ill / toxic / moribund | Guides urgency of management |
| Consciousness | Alert, drowsy, stuporous, comatose | GCS or AVPU scale |
| Build & Nutrition | Thin, average, obese; muscle wasting | Malignancy, chronic disease, malabsorption |
| Posture in bed | Still / restless / curled up | Peritonitis = still; colic = restless; meningism = curled away from light |
| Decubitus | Active / passive / forced | Forced = orthopnea (HF), lying on one side (pleurisy) |
| Apparent age vs. stated age | Older-looking = chronic illness | Malignancy, Cushing's, liver disease |
| Mood & behavior | Anxious, depressed, euphoric | Psychiatric disorders, encephalopathy |
| Speech | Normal / dysarthric / aphasic | CNS disease |
| Gait | Observed as patient enters room | Parkinsonian, hemiplegic, ataxic |
| Pattern | Description | Cause |
|---|---|---|
| Continuous | Sustained, <1°C variation, never normal | Typhoid, lobar pneumonia, UTI |
| Remittent | Sustained, >1°C variation, never normal | Viral fevers, most bacterial infections |
| Intermittent | Spikes with return to normal | Malaria (quotidian/tertian/quartan), abscess, TB |
| Hectic/Septic | High swinging spikes with rigors, profuse sweating | Septicemia, abscess |
| Pel-Ebstein | Alternating weeks of fever and afebrile periods | Hodgkin's lymphoma |
| Relapsing | Febrile periods separated by days of normal temp | Brucellosis, Borrelia, malaria |
| Pulse Type | Feel | Cause |
|---|---|---|
| Collapsing (water-hammer) | Rapid rise and fall, best felt by raising arm overhead | Aortic regurgitation, PDA, hyperdynamic states |
| Slow-rising (plateau) | Slow to reach peak | Aortic stenosis |
| Bisferiens | Two peaks per cardiac cycle | Aortic regurgitation + stenosis, HOCM |
| Pulsus paradoxus | Exaggerated fall in systolic BP (>10 mmHg) during inspiration | Cardiac tamponade, severe asthma/COPD, constrictive pericarditis |
| Pulsus alternans | Alternating strong and weak beats | Severe LV failure |
| Pulsus parvus et tardus | Small and slow-rising | Severe aortic stenosis |
| Dicrotic | Two beats per cardiac cycle; second beat is weaker | Typhoid fever, severe heart failure |
| Measurement | How | Normal Values / Significance |
|---|---|---|
| Height | Standing with heels together | Baseline; short stature = growth disorders, achondroplasia |
| Weight | Standard scale | Compare with previous; weight loss in malignancy, CKD, liver disease |
| BMI | Weight(kg) / Height²(m²) | <18.5 = underweight; 18.5-24.9 = normal; 25-29.9 = overweight; ≥30 = obese |
| Waist circumference | At umbilicus | >90 cm (M), >80 cm (F) = central obesity; cardiovascular risk |
| Waist-hip ratio | Waist ÷ hip | >0.9 (M), >0.85 (F) = abdominal obesity |
| BSA | Mosteller formula: √(Ht×Wt/3600) | Chemotherapy dosing |
Exam Tip: Always look at the conjunctiva first. Say: "I am looking for pallor in the lower palpebral conjunctiva, palmar creases, nail beds, and oral mucosa."
| Category | Examples |
|---|---|
| Decreased Hb (anemia) | Iron deficiency, B12/folate, hemolysis, aplastic anemia, CKD, malignancy |
| Decreased blood flow | Shock, syncope, Raynaud's phenomenon |
| Skin (non-anemic) | Albinism, vitiligo (localized) |
"I am examining for icterus in the sclerae under natural light." Turn patient toward the window.
| Type | Bilirubin | Urine | Stool | Key Causes |
|---|---|---|---|---|
| Pre-hepatic (hemolytic) | Unconjugated ↑ | No bilirubinuria; ↑ urobilinogen | Dark (↑ stercobilinogen) | Hemolytic anemia, malaria, G6PD deficiency, sickle cell |
| Hepatic (hepatocellular) | Both ↑ | Bilirubinuria; ↑ urobilinogen | Pale-normal | Viral hepatitis, alcoholic liver disease, drug-induced |
| Post-hepatic (obstructive) | Conjugated ↑ | Dark (bilirubinuria); NO urobilinogen | Clay/pale (no bile in gut) | Choledocholithiasis, carcinoma pancreas head, cholangiocarcinoma, strictures |
Key Point: Cyanosis is NOT detectable in severe anemia (even if O₂ saturation is very low, not enough Hb to reach 5 g/dL of deoxygenated form). Conversely, polycythemia patients may appear cyanotic at relatively higher O₂ saturations.
| Feature | Central Cyanosis | Peripheral Cyanosis |
|---|---|---|
| Mechanism | Reduced arterial O₂ saturation | Reduced blood flow to periphery |
| Where to look | Tongue, oral mucosa (warm well-perfused areas) | Nail beds, fingertips, tip of nose, earlobes, toes |
| Tongue | BLUE | Normal pink |
| Cause | Lung disease (pneumonia, COPD, pulmonary edema), R→L cardiac shunt (cyanotic CHD), high altitude, methemoglobinemia | Cold exposure, cardiac failure, shock, Raynaud's |
| Response to O₂ | Usually improves (except R→L shunt) | No change |
| Differential cyanosis | Lower limbs blue, upper limbs normal = PDA + pulmonary HTN (Eisenmenger) | - |
| Grade | Feature |
|---|---|
| 1 | Fluctuation of nail bed (spongy feel on pressing nail) |
| 2 | Obliteration of hyponychial angle |
| 3 | Drumstick appearance - bulbous, rounded fingertip |
| 4 | Hypertrophic pulmonary osteoarthropathy (HPOA) - periosteal new bone formation, wrist/ankle pain |
| 5 | Hypertrophic osteoarthropathy (full) |
| System | Causes |
|---|---|
| Cardiac | Cyanotic congenital heart disease (Fallot's, TGA, truncus), infective endocarditis |
| Lung | Bronchiectasis, lung abscess, empyema, fibrosing alveolitis, mesothelioma, bronchogenic carcinoma (most common in adults), CF |
| GI / Liver | Crohn's disease, ulcerative colitis, cirrhosis, celiac disease |
| Other | Thyroid acropachy (hyperthyroidism), idiopathic/familial, POEMS syndrome |
Exam Trick: Unilateral clubbing = vascular cause (AV fistula, Pancoast tumor affecting one side). Bilateral = systemic cause.
| Feature | Options | Significance |
|---|---|---|
| Size | <1 cm usually normal; >1 cm = abnormal | |
| Consistency | Soft = infection; Rubbery = lymphoma; Hard = metastasis; Fluctuant = abscess | |
| Tenderness | Tender = acute infection; Non-tender = lymphoma, metastasis | |
| Surface | Smooth vs. irregular | Irregular = malignancy |
| Mobility | Mobile = reactive; Fixed = malignancy, TB with fibrosis | |
| Skin | Skin changes? Redness (abscess), sinus (TB), skin tethering (metastasis) | |
| Matted | Nodes stuck together = TB, lymphoma |
| Grade | Depth of pit | Time to disappear |
|---|---|---|
| 1+ | 2 mm | Immediate |
| 2+ | 4 mm | <15 seconds |
| 3+ | 6 mm | 15-30 seconds |
| 4+ | >8 mm | >30 seconds |
Always examine both: ankles in ambulatory patients + sacrum in bedridden patients
| Distribution | Likely Cause |
|---|---|
| Bilateral ankle (dependent, pitting) | CCF, hypoproteinemia (nephrotic, liver), CKD, drugs (CCBs, corticosteroids), venous insufficiency |
| Unilateral leg edema | DVT, lymphedema, cellulitis, Baker's cyst rupture, filariasis |
| Periorbital edema (morning) | Nephrotic syndrome, hypothyroidism, angioedema |
| Facial + generalized | Nephrotic syndrome, severe hypoproteinemia |
| Non-pitting (firm, brawny) | Lymphedema, myxedema (pretibial in thyroid disease) |
| Anasarca (generalized) | Severe CCF, nephrotic syndrome, cirrhosis with hypoalbuminemia |
| Nail Sign | Appearance | Cause |
|---|---|---|
| Koilonychia | Spoon-shaped nails (concave) | Iron deficiency anemia |
| Leukonychia | White nails/bands | Hypoalbuminemia (Terry's nails - proximal white, distal pink = liver cirrhosis) |
| Beau's lines | Transverse ridges/grooves | Systemic illness, chemotherapy, severe malnutrition |
| Mees' lines | White transverse lines | Arsenic poisoning, renal failure, sepsis |
| Onycholysis | Nail separates from bed | Psoriasis, hyperthyroidism, tinea |
| Pitting | Multiple small pits on nail surface | Psoriasis, alopecia areata, eczema |
| Yellow nails | Thickened, slow-growing, yellow | Yellow nail syndrome (lymphedema + pleural effusion) |
| Half-and-half (Lindsay's) | Proximal white, distal reddish | CKD (chronic renal failure) |
| Splinter hemorrhages | Dark brown longitudinal lines under nail | Infective endocarditis (proximal), trauma (distal) |
| Blue nails | Bluish discoloration | Wilson's disease, cyanosis, medications |
| Sign | Technique | Significance |
|---|---|---|
| Skin turgor | Pinch skin over forearm or abdomen; release | Normal = snaps back immediately; Decreased turgor = dehydration (use abdomen in elderly - age-related loss of turgor in forearm) |
| Dry mucous membranes | Inspect inside mouth | Dry, sticky oral mucosa |
| Sunken eyes | Inspect | Moderate-severe dehydration |
| Sunken fontanelle | Infants only | Dehydration in neonates/infants |
| Capillary refill time | Press fingernail for 5 seconds; time for color to return | Normal <2 seconds; >2 seconds = poor perfusion/dehydration |
| Urine output | History | <0.5 mL/kg/hr = oliguria from dehydration/shock |
| Postural hypotension | BP lying vs standing (see above) | Volume depletion |
| Tachycardia | PR increases with dehydration | Compensatory response |
| Grade | % Body Water Loss | Features |
|---|---|---|
| Mild | 3-5% | Thirst, dry mouth, slight tachycardia |
| Moderate | 6-9% | Decreased skin turgor, dry mucosa, sunken eyes, tachycardia, oliguria |
| Severe | ≥10% | All above + altered consciousness, cold clammy extremities, hypotension, no urine |
| Facies | Appearance | Disease |
|---|---|---|
| Hippocratic facies | Sunken cheeks, pinched nose, hollow eyes, cyanotic lips | Generalized peritonitis, severe chronic illness |
| Cushingoid / Moon face | Round, plethoric, hirsute, acne | Cushing's syndrome/steroid use |
| Acromegalic | Prominent supraorbital ridge, large jaw, broad nose, prognathism | Acromegaly |
| Myxedematous | Puffy, dull, dry skin, loss of lateral eyebrows (Queen Anne's sign), periorbital edema | Hypothyroidism |
| Thyrotoxic | Anxious, staring eyes (lid lag, exophthalmos in Graves'), sweaty | Hyperthyroidism / Graves' disease |
| Parkinson's mask face | Expressionless, reduced blinking, seborrhea | Parkinsonism |
| Mitral facies (malar flush) | Bilateral rosy cheeks/telangiectasias on malar area | Severe mitral stenosis + pulmonary hypertension |
| Plethoric | Red, florid complexion | Polycythemia vera, Cushing's, SVC obstruction |
| Marfanoid | Long, thin face; high arched palate; dolichocephaly | Marfan syndrome |
| Turner/Down/Acromegaly/Pagets | Characteristic dysmorphic features | Respective syndromes |
| Leonine facies | Thick, furrowed, lion-like | Lepromatous leprosy |
| Saddle-nose deformity | Depressed nasal bridge | Wegener's (GPA), syphilis, trauma |
| Risus sardonicus | Fixed "grinning" expression from masseter spasm | Tetanus |
"On general examination, the patient is:
1. Conscious / Oriented / Cooperative
2. Built and nourished: Well built & nourished / Moderately / Poorly
3. Vital Signs:
- Temperature: ___°C
- Pulse: ___ bpm, regular/irregular, volume, character
- BP: ___/___ mmHg (both arms if relevant)
- RR: ___ breaths/min
- SpO2: ___%
- BMI: ___
4. General signs:
- Pallor: Present (mild/moderate/severe) / Absent
- Icterus: Present (mild/moderate/deep) / Absent
- Cyanosis: Present (central/peripheral/differential) / Absent
- Clubbing: Present (Grade ___) / Absent
- Lymphadenopathy: Present (location, characteristics) / Absent
- Edema: Present (pitting, Grade ___, location) / Absent
- Dehydration: Present (mild/moderate/severe) / Absent
5. Facies: Normal / (Specific facies noted)
6. Hands: Relevant nail signs, palmar changes, joint deformity
7. Skin: Rashes, pigmentation, jaundice, purpura, petechiae"
Create a pocket guide PDF of vital signs and clinical signs for quick exam reference
mkdir -p /home/daytona/workspace/pocket-guide && ls /home/daytona/workspace/
~/pocket-guide/generate_pocket_guide.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate
from reportlab.lib.colors import HexColor
import os
OUTPUT = "/home/daytona/workspace/pocket-guide/MD_Medicine_Pocket_Guide.pdf"
# ── Colour palette ────────────────────────────────────────────────────────────
NAVY = HexColor("#1a3c5e")
TEAL = HexColor("#0d7377")
ACCENT = HexColor("#14a085")
GOLD = HexColor("#e8a838")
LIGHT_BG = HexColor("#eef4fb")
ROW_ALT = HexColor("#f4fbf8")
WHITE = colors.white
BLACK = colors.black
RED = HexColor("#c0392b")
ORANGE = HexColor("#e67e22")
GREEN = HexColor("#27ae60")
PURPLE = HexColor("#8e44ad")
GREY = HexColor("#7f8c8d")
LIGHTGREY= HexColor("#ecf0f1")
# ── Page setup ────────────────────────────────────────────────────────────────
PAGE_W, PAGE_H = A4
MARGIN = 12 * mm
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=MARGIN, rightMargin=MARGIN,
topMargin=14*mm, bottomMargin=14*mm,
title="MD Medicine Pocket Guide – Vital Signs & Clinical Signs",
author="Orris Medical AI"
)
# ── Styles ────────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
def S(name, **kw):
return ParagraphStyle(name, **kw)
sTitle = S("sTitle",
fontSize=20, textColor=WHITE, alignment=TA_CENTER,
fontName="Helvetica-Bold", spaceAfter=2*mm, leading=24)
sSubTitle = S("sSubTitle",
fontSize=10, textColor=HexColor("#d4e6f1"), alignment=TA_CENTER,
fontName="Helvetica", spaceAfter=0)
sSectionHead = S("sSectionHead",
fontSize=11, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_LEFT, leading=14, spaceAfter=1*mm, spaceBefore=2*mm)
sSubHead = S("sSubHead",
fontSize=9, textColor=NAVY, fontName="Helvetica-Bold",
alignment=TA_LEFT, leading=12, spaceAfter=1*mm, spaceBefore=2*mm)
sBody = S("sBody",
fontSize=8, textColor=BLACK, fontName="Helvetica",
alignment=TA_LEFT, leading=11, spaceAfter=0.5*mm)
sBodySmall = S("sBodySmall",
fontSize=7.2, textColor=BLACK, fontName="Helvetica",
alignment=TA_LEFT, leading=10, spaceAfter=0.5*mm)
sPearl = S("sPearl",
fontSize=8, textColor=NAVY, fontName="Helvetica-BoldOblique",
alignment=TA_LEFT, leading=11, spaceAfter=1*mm,
leftIndent=4*mm, borderPad=2*mm)
sWarn = S("sWarn",
fontSize=8, textColor=RED, fontName="Helvetica-Bold",
alignment=TA_LEFT, leading=11, spaceAfter=1*mm)
sMnemonic = S("sMnemonic",
fontSize=8.5, textColor=PURPLE, fontName="Helvetica-Bold",
alignment=TA_LEFT, leading=12, spaceAfter=1*mm)
sFooter = S("sFooter",
fontSize=6.5, textColor=GREY, fontName="Helvetica",
alignment=TA_CENTER, leading=9)
# ── Helper builders ───────────────────────────────────────────────────────────
def section_header(text, color=NAVY):
"""Coloured banner for a section heading."""
tbl = Table([[Paragraph(text, sSectionHead)]], colWidths=[PAGE_W - 2*MARGIN])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("ROWBACKGROUNDS", (0,0), (-1,-1), [color]),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("ROUNDEDCORNERS", [3]),
]))
return tbl
def make_table(headers, rows, col_widths, header_color=TEAL, alt_row=True):
"""Build a styled data table."""
# Build header row
header_row = [Paragraph(f"<b>{h}</b>", S("th",
fontSize=7.5, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_LEFT, leading=10)) for h in headers]
data = [header_row]
for i, row in enumerate(rows):
styled = []
for cell in row:
if isinstance(cell, str):
styled.append(Paragraph(cell, sBodySmall))
else:
styled.append(cell)
data.append(styled)
tbl = Table(data, colWidths=col_widths, repeatRows=1)
style = [
("BACKGROUND", (0,0), (-1,0), header_color),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, ROW_ALT] if alt_row else [WHITE]),
("GRID", (0,0), (-1,-1), 0.3, HexColor("#bdc3c7")),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "TOP"),
]
tbl.setStyle(TableStyle(style))
return tbl
def hr(color=ACCENT):
return HRFlowable(width="100%", thickness=0.5, color=color, spaceAfter=2*mm, spaceBefore=1*mm)
def pearl(text):
return Paragraph(f"<b>★ Pearl:</b> {text}", sPearl)
def warn(text):
return Paragraph(f"⚠ {text}", sWarn)
def sp(h=2):
return Spacer(1, h*mm)
# ═════════════════════════════════════════════════════════════════════════════
# CONTENT ASSEMBLY
# ═════════════════════════════════════════════════════════════════════════════
story = []
# ── COVER BANNER ─────────────────────────────────────────────────────────────
cover_data = [[
Paragraph("MD MEDICINE POCKET GUIDE", sTitle),
Paragraph("Vital Signs & Clinical Signs | Quick Exam Reference", sSubTitle),
Paragraph("For MD Medicine Residents • General Physical Examination", sSubTitle),
]]
cover_tbl = Table(cover_data, colWidths=[PAGE_W - 2*MARGIN])
cover_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("ROUNDEDCORNERS", [5]),
]))
story.append(cover_tbl)
story.append(sp(3))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 1 – VITAL SIGNS OVERVIEW
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("SECTION 1 — VITAL SIGNS", NAVY))
story.append(sp(1))
vs_rows = [
["Temperature", "36.5–37.5 °C (oral)", "Pyrexia >38 °C | Hyperpyrexia >41 °C | Hypothermia <35 °C"],
["Pulse Rate", "60–100 bpm", "Brady <60 (athletes, β-blockers, heart block) | Tachy >100 (fever, anaemia, HF, PE)"],
["Blood Pressure","<120/80 mmHg", "Stage 1 HTN 130–139/80–89 | Stage 2 ≥140/90 | HTN crisis ≥180/120"],
["Respiratory Rate","12–20 /min", "Tachypnoea >20 (pneumonia, PE, DKA) | Bradypnoea <12 (opioids, raised ICP)"],
["SpO₂", "≥95 %", "Mild hypoxia 90–94 % | Moderate 85–89 % | Severe <85 %"],
["Pulse Pressure","30–40 mmHg", "Wide >60 (AR, PDA, sepsis, thyrotoxicosis) | Narrow (tamponade, severe AS, cardiogenic shock)"],
]
story.append(KeepTogether([
Paragraph("Normal Ranges at a Glance", sSubHead),
make_table(
["Parameter","Normal Value","Key Deviations"],
vs_rows,
[36*mm, 32*mm, 109*mm],
header_color=TEAL
)
]))
story.append(sp(2))
# ── Pulse types ───────────────────────────────────────────────────────────────
story.append(KeepTogether([
Paragraph("Pulse Character — Quick Reference", sSubHead),
make_table(
["Pulse Type","Character","Classic Cause"],
[
["Collapsing (water-hammer)", "Rapid rise + rapid fall; best felt by lifting arm", "Aortic regurgitation, PDA, hyperdynamic states"],
["Slow-rising (plateau)", "Slow to reach peak, sustained", "Aortic stenosis"],
["Bisferiens", "Two peaks per beat", "AR + AS combined; HOCM"],
["Pulsus paradoxus", "Systolic BP drops >10 mmHg on inspiration", "Cardiac tamponade, severe asthma/COPD"],
["Pulsus alternans", "Alternating strong and weak beats", "Severe LV failure"],
["Dicrotic", "Two beats per cycle; 2nd beat weaker", "Typhoid, severe HF"],
["Pulsus parvus et tardus", "Small volume + slow rising", "Severe aortic stenosis"],
],
[42*mm, 55*mm, 80*mm],
header_color=ACCENT
)
]))
story.append(sp(2))
# ── Fever patterns ────────────────────────────────────────────────────────────
story.append(KeepTogether([
Paragraph("Fever Patterns", sSubHead),
make_table(
["Pattern","Description","Classic Cause"],
[
["Continuous", "Sustained; <1 °C variation; never normal", "Typhoid, lobar pneumonia, UTI"],
["Remittent", "Sustained; >1 °C variation; never normal", "Viral fevers, most bacterial infections"],
["Intermittent", "Spikes with return to normal each day", "Malaria, abscess, pyaemia"],
["Hectic/Septic","High swinging spikes; rigors; sweats", "Septicaemia, liver abscess, endocarditis"],
["Pel-Ebstein", "Weeks of fever alternating with afebrile weeks", "Hodgkin's lymphoma"],
["Relapsing", "Febrile periods separated by days of apyrexia", "Brucellosis, Borrelia, malaria"],
],
[36*mm, 64*mm, 77*mm],
header_color=HexColor("#c0392b")
),
pearl("Use rectal temp in critically ill (0.5 °C higher than oral). Axillary is unreliable.")
]))
story.append(sp(2))
# ── BP Quick reference ────────────────────────────────────────────────────────
story.append(KeepTogether([
Paragraph("Blood Pressure — Key Points", sSubHead),
make_table(
["Scenario","Finding","Interpretation"],
[
["Inter-arm difference", ">10 mmHg systolic", "Aortic dissection, subclavian stenosis, Takayasu's"],
["Postural hypotension", "Systolic ↓>20 or diastolic ↓>10 on standing","Volume depletion, autonomic neuropathy, drugs"],
["Pulse paradoxus", "Systolic ↓>10 on inspiration", "Cardiac tamponade (most specific), constrictive pericarditis, severe asthma"],
["Coarctation of aorta", "BP higher in arms than legs + radio-femoral delay","Aortic coarctation"],
["Wide pulse pressure", ">60 mmHg", "AR, PDA, AV fistula, hyperthyroidism, severe anaemia, sepsis"],
],
[42*mm, 55*mm, 80*mm],
header_color=PURPLE
)
]))
story.append(sp(2))
# ── Breathing patterns ────────────────────────────────────────────────────────
story.append(KeepTogether([
Paragraph("Breathing Patterns", sSubHead),
make_table(
["Pattern","Description","Cause"],
[
["Cheyne-Stokes", "Crescendo-decrescendo cycles with periods of apnoea", "CCF, stroke, uraemia, opioids, high altitude"],
["Kussmaul", "Deep, sighing, regular, rapid breathing", "Metabolic acidosis (DKA, uraemia, salicylate toxicity)"],
["Biot's", "Irregular rate and depth with sudden apnoeic pauses", "Pontine/medullary lesion (raised ICP, meningitis)"],
["Apneustic", "Prolonged end-inspiratory pause", "Pontine infarct"],
["Ataxic (Agonal)", "Completely irregular, gasping", "Pre-terminal brainstem failure"],
],
[36*mm, 66*mm, 75*mm],
header_color=HexColor("#16a085")
),
warn("Kussmaul breathing: the patient does NOT feel short of breath despite deep fast breaths. Key clue!")
]))
story.append(sp(3))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 2 – THE BIG 8 CLINICAL SIGNS
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("SECTION 2 — THE 'BIG 8' CLINICAL SIGNS", NAVY))
story.append(sp(1))
# 2A Pallor
story.append(KeepTogether([
Paragraph("1. PALLOR", sSubHead),
Paragraph(
"<b>Where to look (in order):</b> Lower palpebral conjunctiva (most reliable) → Palmar creases → "
"Nail beds → Oral mucosa → Tongue",
sBody
),
make_table(
["Grade","Features","Approximate Hb"],
[
["Mild", "Pallor only in conjunctiva", ">9 g/dL"],
["Moderate", "Conjunctiva + palmar creases pale", "7–9 g/dL"],
["Severe", "All sites pale including nail beds and tongue", "<7 g/dL"],
],
[25*mm, 95*mm, 57*mm],
header_color=HexColor("#c0392b")
),
Paragraph(
"<b>Causes:</b> Iron deficiency anaemia, B12/folate, haemolysis, aplastic anaemia, "
"CKD, malignancy, haemorrhage, hypothyroidism",
sBodySmall
),
pearl("Palmar crease pallor = Hb usually <7 g/dL. Always assess conjunctiva in natural light.")
]))
story.append(hr(HexColor("#c0392b")))
# 2B Icterus
story.append(KeepTogether([
Paragraph("2. ICTERUS (JAUNDICE)", sSubHead),
Paragraph(
"<b>Where to look:</b> Sclerae first (scleral elastin binds bilirubin avidly) → Under tongue → "
"Skin (visible when bilirubin >5 mg/dL) | Always examine in <b>natural light</b>.",
sBody
),
make_table(
["Type","Bilirubin","Urine","Stool","Common Causes"],
[
["Pre-hepatic\n(Haemolytic)","Unconjugated ↑","No bilirubinuria\n↑ urobilinogen","Dark\n(↑ stercobilinogen)","Haemolytic anaemia, malaria, G6PD, sickle cell"],
["Hepatic\n(Hepatocellular)","Both ↑","Bilirubinuria\n↑ urobilinogen","Pale/normal","Viral hepatitis, alcoholic liver disease, drugs"],
["Post-hepatic\n(Obstructive)","Conjugated ↑","Dark (bilirubinuria)\nNO urobilinogen","Clay/pale\n(no bile in gut)","Choledocholithiasis, Ca head pancreas, cholangiocarcinoma"],
],
[26*mm, 26*mm, 28*mm, 28*mm, 69*mm],
header_color=GOLD
),
pearl("Urine colour: tea/cola-coloured = conjugated hyperbilirubinaemia (obstructive/hepatocellular). "
"Normal urine + dark stools = haemolytic jaundice.")
]))
story.append(hr(GOLD))
# 2C Cyanosis
story.append(KeepTogether([
Paragraph("3. CYANOSIS", sSubHead),
Paragraph(
"<b>Minimum threshold:</b> ≥5 g/dL of deoxygenated Hb in capillaries. "
"<b>Not detectable in severe anaemia.</b> Polycythaemic patients may look cyanosed at higher SpO₂.",
sBody
),
make_table(
["Feature","Central Cyanosis","Peripheral Cyanosis"],
[
["Where to look", "Tongue, oral mucosa (warm areas)", "Nail beds, fingertips, tip of nose, earlobes"],
["Tongue colour", "<b>BLUE</b>", "Normal pink — KEY differentiator"],
["Mechanism", "Reduced arterial O₂ saturation", "Reduced peripheral blood flow"],
["Causes", "Lung disease, R→L cardiac shunt, high altitude, methaemoglobinaemia","Cold exposure, CCF, shock, Raynaud's"],
["O₂ response", "Improves (except fixed R→L shunt)", "No significant change"],
],
[38*mm, 72*mm, 67*mm],
header_color=HexColor("#2980b9")
),
warn("Differential cyanosis (lower limbs blue, upper limbs normal) = PDA + Eisenmenger syndrome."),
pearl("The tongue never lies — if it's blue, it's central cyanosis.")
]))
story.append(hr(HexColor("#2980b9")))
# 2D Clubbing
story.append(KeepTogether([
Paragraph("4. CLUBBING", sSubHead),
Paragraph(
"<b>Schamroth's window test:</b> Place dorsal surfaces of both index fingers together. "
"Normal → diamond-shaped window at nail bases. Clubbing → window <b>obliterated</b>.",
sBody
),
make_table(
["Grade","Features"],
[
["Grade 1","Fluctuation of nail bed (spongy feel on pressing)"],
["Grade 2","Obliteration of hyponychial angle (>180°)"],
["Grade 3","Drumstick/parrot-beak appearance — bulbous, rounded fingertip"],
["Grade 4","HPOA — periosteal new bone formation; wrist/ankle pain and tenderness"],
["Grade 5","Full hypertrophic osteoarthropathy with gross deformity"],
],
[22*mm, 155*mm],
header_color=HexColor("#8e44ad")
),
make_table(
["System","Causes of Clubbing"],
[
["Cardiac", "Cyanotic CHD (Fallot's, TGA, truncus), infective endocarditis"],
["Respiratory", "Bronchiectasis, lung abscess, empyema, fibrosing alveolitis, bronchogenic carcinoma, cystic fibrosis, mesothelioma"],
["GI / Hepatic", "Crohn's disease, ulcerative colitis, cirrhosis, celiac disease"],
["Other", "Thyroid acropachy (hyperthyroidism), idiopathic/familial, POEMS syndrome"],
],
[28*mm, 149*mm],
header_color=HexColor("#8e44ad")
),
warn("Unilateral clubbing = local vascular cause (AV fistula, Pancoast tumour affecting one side)."),
]))
story.append(hr(HexColor("#8e44ad")))
# 2E Lymphadenopathy
story.append(KeepTogether([
Paragraph("5. LYMPHADENOPATHY", sSubHead),
Paragraph(
"<b>Technique:</b> Use pulp of 2–4 fingers; gentle circular palpation. "
"Cervical nodes — stand behind patient. Always compare both sides.",
sBody
),
make_table(
["Characteristic","Suggests"],
[
["Soft, tender, mobile", "Acute reactive (infection)"],
["Firm, rubbery, non-tender", "Lymphoma"],
["Hard, fixed, irregular", "Malignant metastasis"],
["Fluctuant", "Abscess (pyogenic or TB)"],
["Matted together", "TB lymphadenitis, lymphoma"],
["Skin changes/sinus", "TB with sinus (collar-stud abscess)"],
],
[60*mm, 117*mm],
header_color=HexColor("#16a085")
),
make_table(
["Node Group","Key Associations"],
[
["Left supraclavicular (Virchow's node)", "Gastric/GI/pelvic/testicular malignancy (Troisier's sign)"],
["Right supraclavicular", "Lung, oesophageal malignancy"],
["Epitrochlear", "Secondary syphilis, sarcoidosis, lymphoma, hand/forearm infections"],
["Axillary", "Breast cancer, arm infections, lymphoma"],
["Inguinal", "STIs, lower limb infections, genitalia/anal cancers"],
["Generalized lymphadenopathy", "HIV, EBV (glandular fever), lymphoma, CLL, SLE, sarcoidosis, TB"],
],
[62*mm, 115*mm],
header_color=HexColor("#16a085")
),
]))
story.append(hr(HexColor("#16a085")))
# 2F Edema
story.append(KeepTogether([
Paragraph("6. OEDEMA", sSubHead),
Paragraph(
"<b>Method:</b> Press firmly with thumb over tibia/ankle for 5 seconds. Assess depth and duration of pit. "
"<b>Always check sacrum in bedridden patients.</b>",
sBody
),
make_table(
["Grade","Pit Depth","Time to Disappear"],
[
["1+","2 mm","Immediate"],
["2+","4 mm","<15 seconds"],
["3+","6 mm","15–30 seconds"],
["4+",">8 mm",">30 seconds (prolonged pit)"],
],
[20*mm, 30*mm, 127*mm],
header_color=HexColor("#2980b9")
),
make_table(
["Pattern","Likely Cause(s)"],
[
["Bilateral pitting pedal oedema", "CCF, hypoproteinaemia (nephrotic/cirrhosis/malnutrition), CKD, drugs (CCBs, corticosteroids), venous insufficiency"],
["Unilateral leg oedema", "DVT, lymphoedema, cellulitis, filariasis, venous obstruction"],
["Periorbital oedema (AM)", "Nephrotic syndrome, hypothyroidism, angioedema, allergy"],
["Non-pitting (firm/brawny)", "Lymphoedema, pretibial myxoedema (Graves'), lipoedema"],
["Anasarca", "Severe CCF, nephrotic syndrome, severe cirrhosis, protein-losing enteropathy"],
],
[52*mm, 125*mm],
header_color=HexColor("#2980b9")
),
Paragraph(
"<b>4 mechanisms:</b> ↑Hydrostatic pressure | ↓Oncotic pressure | "
"↑Capillary permeability | Lymphatic obstruction",
sBodySmall
),
]))
story.append(hr(HexColor("#2980b9")))
# 2G Nail Signs
story.append(KeepTogether([
Paragraph("7. NAIL SIGNS", sSubHead),
make_table(
["Sign","Appearance","Disease Association"],
[
["Koilonychia", "Spoon-shaped (concave) nails", "Iron deficiency anaemia"],
["Leuconychia (Terry's)", "Proximal white, distal 1–2 mm pink band", "Liver cirrhosis, hypoalbuminaemia"],
["Half-and-half (Lindsay's)","Proximal white, distal red-brown", "Chronic kidney disease"],
["Mees' lines", "White transverse bands", "Arsenic poisoning, renal failure, sepsis"],
["Beau's lines", "Transverse ridges/grooves", "Systemic illness, malnutrition, chemotherapy"],
["Splinter haemorrhages", "Dark-brown longitudinal lines (proximal = pathological)","Infective endocarditis, vasculitis, trauma (distal)"],
["Onycholysis", "Nail separates from nail bed", "Psoriasis, hyperthyroidism, tinea"],
["Nail pitting", "Multiple small surface pits", "Psoriasis, alopecia areata, eczema"],
["Yellow nails", "Thickened, slow-growing, yellow/green", "Yellow nail syndrome (lymphoedema + pleural effusion)"],
["Muehrcke's lines", "Double white transverse lines; disappear on pressure","Hypoalbuminaemia (nephrotic, liver disease)"],
],
[42*mm, 66*mm, 69*mm],
header_color=ACCENT
),
]))
story.append(hr(ACCENT))
# 2H Dehydration
story.append(KeepTogether([
Paragraph("8. DEHYDRATION", sSubHead),
make_table(
["Grade","% Water Loss","Clinical Features"],
[
["Mild", "3–5 %", "Thirst, dry mouth, slight tachycardia — no other signs"],
["Moderate", "6–9 %", "↓Skin turgor, dry mucous membranes, sunken eyes, tachycardia, oliguria, postural hypotension"],
["Severe", "≥10 %", "All above + altered consciousness, cold clammy extremities, hypotension, anuria, shock"],
],
[22*mm, 22*mm, 133*mm],
header_color=RED
),
Paragraph(
"<b>Bedside signs:</b> Skin turgor (abdomen better than forearm in elderly) | "
"Dry sticky mouth | Sunken eyes | CRT >2 sec | Postural hypotension | Low urine output",
sBodySmall
),
warn("Skin turgor is unreliable in the elderly (age-related loss of elasticity). Use oral mucosa + postural BP.")
]))
story.append(sp(3))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 3 – FACIES
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("SECTION 3 — DIAGNOSTIC FACIES", TEAL))
story.append(sp(1))
story.append(make_table(
["Facies","Appearance","Diagnosis"],
[
["Cushingoid / Moon face", "Round, plethoric, red, hirsute, acne, lemon on stick", "Cushing's syndrome / Steroid therapy"],
["Acromegalic", "Prominent supraorbital ridge, large jaw/nose, prognathism, spaces between teeth","Acromegaly (GH excess)"],
["Myxoedematous", "Puffy, dull, dry skin, periorbital oedema, loss of outer 1/3 eyebrow (Queen Anne's sign)","Hypothyroidism"],
["Thyrotoxic", "Anxious, staring eyes, lid lag, exophthalmos (Graves'), sweaty", "Hyperthyroidism / Graves' disease"],
["Parkinson's mask", "Expressionless (hypomimia), seborrhoea, reduced blinking", "Parkinsonism"],
["Mitral facies", "Bilateral malar flush/telangiectasia on cheeks", "Severe mitral stenosis + pulmonary hypertension"],
["Hippocratic facies", "Sunken cheeks, pinched nose, hollow eyes, cyanotic lips", "Generalized peritonitis / terminal illness"],
["Leonine facies", "Thick, furrowed, lion-like, loss of eyebrows", "Lepromatous leprosy"],
["Marfanoid", "Long thin face, high-arched palate, dolichocephaly", "Marfan syndrome, homocystinuria"],
["Plethoric", "Red, florid complexion", "Polycythaemia vera, Cushing's, SVC obstruction"],
["Saddle-nose", "Depressed nasal bridge", "GPA (Wegener's), syphilis, trauma, relapsing polychondritis"],
["Risus sardonicus", "Fixed 'grinning' expression from masseter spasm", "Tetanus"],
["Adenoid facies", "Open mouth, elongated face, dental crowding", "Hypertrophied adenoids"],
],
[38*mm, 72*mm, 67*mm],
header_color=TEAL
))
story.append(sp(3))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 4 – HANDS
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("SECTION 4 — THE HANDS (A COMPLETE CLINICAL STORY)", ACCENT))
story.append(sp(1))
story.append(make_table(
["Finding","Disease Association"],
[
["Palmar erythema", "Liver cirrhosis, RA, pregnancy, polycythaemia, CCF"],
["Dupuytren's contracture", "Alcoholic liver disease, diabetes, epilepsy (phenobarb), idiopathic"],
["Thenar wasting", "Carpal tunnel syndrome, median nerve lesion, T1 root"],
["Hypothenar wasting", "Ulnar nerve palsy, C8-T1 lesion, syringomyelia"],
["Interosseous wasting", "Ulnar nerve, RA, motor neurone disease, T1 root lesion"],
["Osler's nodes", "Infective endocarditis (tender red nodules on fingertip pulp)"],
["Janeway lesions", "Infective endocarditis (non-tender haemorrhagic macules on palms/soles)"],
["Palmar crease xanthomata", "Type III hyperlipoproteinaemia (pathognomonic)"],
["Gottron's papules", "Dermatomyositis (violaceous papules over MCP/PIP joints)"],
["Raynaud's phenomenon", "SLE, systemic sclerosis, mixed CTD, primary Raynaud's"],
["'Mechanic's hands'", "Dermatomyositis, antisynthetase syndrome"],
["Swan-neck / Boutonnière", "Rheumatoid arthritis"],
["Heberden's / Bouchard's nodes","Osteoarthritis (DIP / PIP joints respectively)"],
["Tophi", "Gout (uric acid deposits)"],
],
[55*mm, 122*mm],
header_color=ACCENT
))
story.append(sp(3))
# ══════════════════════════════════════════════════════════════════════════════
# SECTION 5 – EXAM CHECKLIST + PEARLS
# ══════════════════════════════════════════════════════════════════════════════
story.append(section_header("SECTION 5 — EXAM PRESENTATION CHECKLIST", NAVY))
story.append(sp(1))
checklist_text = [
"<b>On general examination, the patient is:</b>",
"1. Conscious / Alert / Oriented to time, place and person",
"2. Built and nourished: Well / Moderately / Poorly",
"3. Vital Signs: Temp ___ °C | PR ___ bpm, regular, good volume | BP ___/___ mmHg | RR ___ /min | SpO₂ ___ %",
"4. BMI: ___ kg/m² | Waist circumference: ___ cm",
"",
"<b>Clinical Signs (state presence/absence for each):</b>",
"• Pallor: Present (Mild / Moderate / Severe) / Absent",
"• Icterus: Present (Mild / Moderate / Deep) / Absent",
"• Cyanosis: Present (Central / Peripheral / Differential) / Absent",
"• Clubbing: Present (Grade ___) / Absent",
"• Lymphadenopathy: Present (location + characteristics) / Absent",
"• Oedema: Present (pitting, Grade ___, level: ankle/shin/thigh/sacral) / Absent",
"• Dehydration: Present (Mild / Moderate / Severe) / Absent",
"• Koilonychia / Other nail signs: ___",
"",
"<b>Facies:</b> Normal / ___ (describe if abnormal)",
"<b>Hands:</b> Relevant findings — palmar erythema / Dupuytren's / wasting / joint deformity",
"<b>Skin:</b> Rashes / pigmentation / petechiae / purpura / spider naevi",
]
for line in checklist_text:
story.append(Paragraph(line, sBody if line else sp(1) and sBody))
story.append(sp(0.5))
story.append(sp(2))
story.append(Paragraph("Top 10 Exam Pearls", sSubHead))
pearls = [
"Never say 'no pallor' without checking the lower palpebral conjunctiva — examiners watch this.",
"Jaundice must be assessed in natural light. The sclerae are the MOST sensitive site.",
"Central cyanosis: tongue is blue. Peripheral cyanosis: tongue is NORMAL. This is the key differentiator.",
"Schamroth's window test — always demonstrate it for clubbing. Obliterated window = positive.",
"Always check sacral oedema in bedridden patients. Ankle oedema alone will be missed.",
"Lymph nodes — always examine BOTH sides; always describe Virchow's node (left supraclavicular).",
"Skin turgor is unreliable in elderly patients — use oral mucosa + postural BP for dehydration.",
"Wide pulse pressure (>60 mmHg) = AR, PDA, AV fistula, thyrotoxicosis, severe anaemia, sepsis.",
"Kussmaul breathing: patient breathes deeply and fast but does NOT feel breathless — DKA, uraemia.",
"Unilateral clubbing = local vascular cause. Bilateral clubbing = systemic cause. Always check toes too.",
]
for i, p in enumerate(pearls, 1):
story.append(Paragraph(f"<b>{i}.</b> {p}", sBodySmall))
story.append(sp(0.5))
story.append(sp(2))
# Footer
story.append(HRFlowable(width="100%", thickness=0.8, color=NAVY))
story.append(sp(1))
story.append(Paragraph(
"MD Medicine Pocket Guide — Vital Signs & Clinical Signs | For Educational Use | "
"Based on Harrison's 22E, Goldman-Cecil Medicine, S. Das Clinical Surgery | Generated by Orris Medical AI",
sFooter
))
# ── Build PDF ─────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/pocket-guide && python generate_pocket_guide.py 2>&1
ls -lh /home/daytona/workspace/pocket-guide/MD_Medicine_Pocket_Guide.pdf
cd /home/daytona/workspace/pocket-guide && python -c " from pypdf import PdfRead…
MD Medicine Pocket Guide
PDF Document · PDF
| Section | Content |
|---|---|
| Section 1 — Vital Signs | Normal ranges, pulse character types, fever patterns, BP scenarios, breathing patterns - all in colour-coded tables |
| Section 2 — The Big 8 Clinical Signs | Pallor, Icterus, Cyanosis, Clubbing, Lymphadenopathy, Oedema, Nail signs, Dehydration - each with grading, where to look, and causes |
| Section 3 — Diagnostic Facies | 13 classic facies with appearance and diagnosis |
| Section 4 — The Hands | 14 hand signs with disease associations |
| Section 5 — Exam Checklist + Pearls | Word-for-word presentation template + 10 clinical pearls |