attachment
attachment
attachment
attachment
attachment
attachment

Make a differentiate table between boil and abcess in answer format in point wise

Here is a detailed differentiation table between Boil (Furuncle) and Abscess based on the textbook content from your images:

Difference Between Boil (Furuncle) and Abscess

S.No.FeatureBoil (Furuncle)Abscess
1.DefinitionAcute staphylococcal infection of a hair follicle with perifolliculitis, proceeding to suppuration and central necrosisA collection of pus in the body, forming a cavity lined by pyogenic membrane
2.Causative OrganismSpecifically Staphylococcus (staphylococcal infection)Pyogenic organisms (varied); also caused by tubercular bacilli in cold abscess
3.Origin / PathologyArises from infection of a single hair follicleOrganisms gain entry by (i) direct infection, (ii) local extension, (iii) lymphatics, (iv) blood stream (haematogenous)
4.Nature of LesionStarts as a painful, indurated swelling; a small pustule forms at summit which bursts, discharging greenish sloughA cavity filled with pus lined by a pyogenic membrane (dead tissue cells + granulation tissue wall)
5.SizeSmall - involves a single hair follicleVariable - can be large, involving deeper tissue planes
6.Pus CharacterSmall amount of greenish slough discharged on spontaneous burstingYellow alkaline fluid (pus) containing disintegrating leucocytes, living/dead bacteria
7.Types- Boil (common) - Blind boil (subsides without suppuration) - Stye (eyelash follicle)- Pyogenic abscess - Pyaemic abscess - Cold abscess
8.Common SitesBack, neck; external auditory meatus; perianal regionAny part of body; neck, axilla (cold abscess); liver, spleen, brain (pyaemic)
9.Cardinal Signs of InflammationPresent - redness, pain, swelling; small pustule on summitAll 5 cardinal signs present: Rubor, Dolor, Calor, Tumor, Functio laesa
10.Fluctuation TestUsually negative (too small/tense)Positive when pus becomes superficial
11.Constitutional SymptomsMild or absentPresent in pyaemic abscess - high fever, rigor, toxaemia
12.Complications(a) Cellulitis (b) Hydradenitis (infection of neighbouring follicles - e.g., axilla) (c) Secondary infection of regional lymph nodes(a) Sinus/fistula formation (b) Spread via blood stream - pyaemia (c) Sinus formation if cold abscess is improperly drained
13.Special InvestigationsNot usually requiredCT scan, Ultrasound, Isotope scanning, Conventional radiology to locate and diagnose
14.Treatment - Conservative- Improve general health - Touch of iodine on pustule to hasten necrosis - Removal of affected hair to allow pus escape- Elevation and rest of affected part - Suitable antibiotic in initial (unlocalized) stage
15.Treatment - SurgicalIncision usually unnecessary; only if pus does not escape spontaneouslyDrainage of pus is mandatory once localized: (a) Free/liberal incision (b) Hilton's method (c) Counter-incision if needed
16.Role of AntibioticsUsually not required; only if boils are multiple or recurrentAntibiotic selected by culture and sensitivity test; started immediately after drainage
17.Post-Treatment Care- Clean twice with disinfectant (hexachlorophene) - Exclude diabetes if recurrent- Corrugated rubber drain used - Dressing changed daily - Vitamins C and B complex given - Packing gradually lightened
18.HealingHeals by itself after pus/slough discharge; deep cavity lined by granulation tissue heals spontaneouslyPyogenic membrane converts to fibrous tissue; cavity covered by granulation tissue transforming to collagen fibres
19.AntibiomaNot applicableCold, firm lump due to continuous antibiotics - called antibioma; may mimic carcinoma
20.RecurrenceRecurrent boils - exclude diabetesCold abscess - full antitubercular regime needed; never make incision directly on cold abscess

Key Points to Remember:

  1. Boil = Hair follicle infection (single follicle, small, staphylococcal)
  2. Abscess = Collection of pus (any tissue, variable size, multiple organisms)
  3. Boil heals spontaneously; Abscess must be drained surgically once localized
  4. Cold Abscess is non-reactive (no heat, pain, tenderness) - always due to tuberculosis - never incise directly
  5. "Where there is pus, let it out" - the golden rule of abscess treatment
  6. A blind boil subsides without suppuration; a stye is infection of eyelash follicle

Make it as short differentiable form only in format of short answer question

Q. Differentiate between Boil (Furuncle) and Abscess.

FeatureBoil (Furuncle)Abscess
DefinitionAcute staphylococcal infection of a hair follicle with perifolliculitisCollection of pus in the body
OrganismStaphylococcus specificallyPyogenic organisms (varied)
OriginSingle hair follicleAny tissue - by direct infection, lymphatics, or blood stream
SizeSmallVariable - can be large
PusSmall, greenish sloughYellow alkaline fluid (frank pus)
FluctuationAbsentPresent (when superficial)
FeverMild/absentPresent (high in pyaemic type)
TypesBoil, Blind boil, StyePyogenic, Pyaemic, Cold abscess
ComplicationsCellulitis, HydradenitisSinus/fistula, Pyaemia
InvestigationsNot requiredUSG, CT scan, Isotope scan
TreatmentIodine touch on pustule; rarely incisionMandatory surgical drainage ("where there is pus, let it out")
AntibioticsUsually not requiredRequired (by culture & sensitivity)
HealingSpontaneousRequires active management
Key line: A boil is a follicular infection that heals on its own; an abscess is a pus cavity that must be drained.

Create a comparison poster of Boil vs Abscess

Generating Image

A medical education comparison poster titled "Boil (Furuncle) vs Abscess" split into two columns. Left column header "BOIL (FURUNCLE)" with a red/orange theme, right column header "ABSCESS" with a blue/teal theme. Each column contains labeled sections: Definition, Organism, Origin, Size, Pus, Fluctuation, Fever, Types, Complications, Treatment, Antibiotics, Healing. Left column facts: Definition - acute staphylococcal infection of hair follicle; Organism - Staphylococcus; Origin - single hair follicle; Size - small; Pus - small greenish slough; Fluctuation - absent; Fever - mild or absent; Types - boil, blind boil, stye; Complications - cellulitis, hydradenitis; Treatment - iodine touch, rarely incision; Antibiotics - usually not required; Healing - spontaneous. Right column facts: Definition - collection of pus in the body; Organism - varied pyogenic organisms; Origin - any tissue via direct/lymphatics/blood; Size - variable, can be large; Pus - yellow alkaline frank pus; Fluctuation - present when superficial; Fever - high especially in pyaemic type; Types - pyogenic, pyaemic, cold abscess; Complications - sinus/fistula, pyaemia; Treatment - mandatory surgical drainage; Antibiotics - required by culture and sensitivity; Healing - requires active management. Bottom banner with key note: "Boil = follicular infection, heals spontaneously | Abscess = pus cavity, must be drained". Clean clinical poster style with icons, bold headings, and white background.

Boil vs Abscess Comparison Poster
Here is your Boil vs Abscess comparison poster! It includes:
  • Two-column layout with color-coded sections (orange for Boil, blue for Abscess)
  • All key differentiating features: definition, organism, origin, size, pus, fluctuation, fever, types, complications, treatment, antibiotics, and healing
  • A key takeaway note at the bottom for quick revision
Great for sticking in your notes or using as a quick-reference study card!

Make a short note on abscess

Short Note on Abscess


Definition

An abscess is a collection of pus in the body, formed as a result of suppurative infection leading to tissue liquefaction.

Types

  1. Pyogenic Abscess - commonest type; caused by pyogenic organisms
  2. Pyaemic Abscess - multiple abscesses from infected emboli in pyaemia
  3. Cold Abscess - non-reactive; almost always due to tuberculosis

Pathology

  • Pyogenic organisms cause cell death and liquefaction
  • Proteolytic enzymes (from dead PMN leucocytes) liquefy dead tissue
  • Resulting fluid = pus (yellow, alkaline, contains dead/living bacteria and leucocytes)
  • Cavity is lined by a pyogenic membrane (dead cells + granulation tissue)
  • On recovery - pyogenic membrane → fibrous tissue → collagen fibres

Clinical Features (5 Cardinal Signs)

SignMeaning
RuborRedness due to hyperaemia
DolorThrobbing pain
CalorHeat due to hyperaemia
TumorSwelling due to pus
Functio LaesaImpaired function
Most important signs: Pain, Redness, Heat

Presence of Pus Detected By:

  1. Elevated temperature
  2. Brawny oedema with induration (deep abscess)
  3. Positive fluctuation test (superficial abscess)

Special Investigations

  • X-ray - fluid levels if air/gas present (subphrenic, lung abscess)
  • Isotope scan - brain abscess, hepatic abscess, osteomyelitis
  • Ultrasound - liver, spleen abscesses; gallbladder empyema
  • CT scan - distinguishes abscess from tumour; locates abdominal/brain abscess

Treatment

Step 1 - Conservative (early/unlocalized stage):
  • Elevation and rest of part
  • Suitable antibiotic started
Step 2 - Surgical (once localized):
  • Golden rule: "Where there is pus, let it out"
  • Drain pus + send for culture & sensitivity + give proper antibiotic
Methods of Drainage:
  • (a) Free/Liberal Incision - on most prominent and dependent part; adequate size for complete drainage
  • (b) Hilton's Method - used near nerves/vessels (neck, axilla, groin); blunt dissection with artery forceps through deep fascia
  • (c) Counter-incision - when prominent part is not the dependent part; second incision made at most dependent part for gravity drainage
Post-operative care:
  • Corrugated rubber drain inserted
  • Dressing changed daily with acriflavine + sterile gauze
  • Packing gradually lightened
  • Vitamins C and B complex given
  • Antibiotics by culture & sensitivity

Antibioma

  • When antibiotics given continuously without drainage, abscess becomes firm and hard
  • Called antibioma - may mimic a carcinomatous lump

Key Line

"The basic principle of abscess treatment is - drain the pus, send for culture, give proper antibiotic."

Also include it's type also to make it as full answer

Full Answer: Abscess


Definition

An abscess is a collection of pus in the body. There are three surgical varieties:
  1. Pyogenic Abscess
  2. Pyaemic Abscess
  3. Cold Abscess

TYPE 1: PYOGENIC ABSCESS

How Organisms Gain Entry:

  1. Direct infection from penetrating wounds
  2. Local extension from adjacent focus of infection
  3. Lymphatics
  4. Blood stream (haematogenous)

Pathology:

  • Pyogenic organisms kill both tissue cells and exudate cells
  • Dead tissue liquefied by proteolytic enzymes from dead PMN leucocytes
  • Resulting fluid = pus (yellow, alkaline)
  • Pus contains - disintegrating + living leucocytes + living + dead bacteria
  • Cavity lined by pyogenic membrane (dead tissue cells + granulation tissue wall of phagocytic histiocytes)
  • On recovery: pyogenic membrane → fibrous tissue → granulation tissue → collagen fibres

Clinical Features (5 Cardinal Signs):

SignDetail
Rubor (Redness)Due to hyperaemia; present before localization
Dolor (Pain)Throbbing pain - characteristic of pus
Calor (Heat)Due to hyperaemia (absent in cold abscess)
Tumor (Swelling)Due to pus inside cavity
Functio LaesaImpaired function; obvious near joints
Most important: Pain, Redness, Heat

Presence of Pus Detected By:

  1. Elevated temperature
  2. Brawny oedema with induration (deep - breast, parotid, ischiorectal)
  3. Positive fluctuation test (when pus becomes superficial)

Special Investigations:

InvestigationUse
X-rayFluid levels if air/gas with pus (subphrenic, lung abscess)
Isotope scanBrain, hepatic abscess, osteomyelitis; pelvic, perinephric abscess
UltrasoundLiver, spleen abscess; gallbladder empyema
CT scanDistinguishes abscess from tumour; locates abdominal/brain abscess

Treatment:

Stage 1 - Conservative (unlocalized):
  • Elevation + rest of affected part
  • Suitable antibiotic started
Stage 2 - Surgical (once localized):
"Where there is pus, let it out"
Basic principle:
  1. Drain the pus
  2. Send pus for culture & sensitivity
  3. Give proper antibiotic
Methods of Drainage:
(a) Free / Liberal Incision:
  • Made on most prominent + most dependent part
  • Incision must be adequate (liberal) for complete drainage
  • Muscle incised along line of fibres
  • If nerve/vessel nearby - incision made parallel to those structures
(b) Hilton's Method:
  • Used when important nerves/vessels surround abscess cavity (neck, axilla, groin)
  • Skin + subcutaneous tissue incised at most prominent + dependent part
  • Artery/sinus forceps forced through deep fascia into cavity
  • Blades opened gradually to extrude pus
  • Finger introduced to explore and break all loculi
(c) Counter-incision:
  • When prominent part is NOT the dependent part
  • Second incision at most dependent part for gravity drainage
  • Sinus forceps passed from first incision to most dependent part; knife makes fresh incision between forceps tips
Post-operative Care:
  • Corrugated rubber drain (extends from incision to counter-incision if used)
  • Dressing changed daily - acriflavine lotion + sterile gauze
  • Packing gradually lightened to help cavity heal
  • Vitamins C (wound healing) and B complex (when tetracycline used)
  • Antibiotics by culture & sensitivity

TYPE 2: PYAEMIC ABSCESS

Definition:

Multiple abscesses developing from infected emboli in pyaemia.

Pathology:

  • Septic emboli (clump of organisms + infected clot) lodge in various body parts
  • Result of breaking up of an infected thrombus
  • Associated with: acute osteomyelitis, intracranial sinus inflammation, bacterial endocarditis
  • Portal pyaemia - infective emboli pass into portal venous system → multiple pyaemic liver abscesses (e.g., acute appendicitis)

Three Important Terms:

TermMeaning
BacteraemiaBacteria circulating in blood stream (transient, little significance)
SepticaemiaBacteria + clinical manifestations (pyrexia, rigors, hypotension, DIC, petechial haemorrhages)
ToxaemiaToxins (chemical/bacterial) circulating in blood stream

Features of Pyaemic Abscess:

  1. Generally multiple
  2. Occur in subfascial plane
  3. Non-reacting in nature - calor, rubor, dolor are absent
  4. Tremendous constitutional disturbances - high fever, rigor, toxaemia
  5. May occur in viscera (spleen, kidneys) - death may result from brain/heart abscess

Treatment:

  • Suitable antibiotic parenterally as quickly as possible (by culture & sensitivity)
  • Superficial abscesses drained
  • Search and treat the source of infection

TYPE 3: COLD ABSCESS

Definition:

A non-reactive abscess - does not produce hot, painful features as seen in pyogenic abscess.

Cause:

Almost always a sequel of tubercular infection anywhere in the body - commonly lymph nodes, bone, joint.

Features:

  • No heat, no pain, no tenderness (conspicuous by their absence)
  • Brawny induration, oedema absent
  • Only when secondary infection occurs - a few acute features may appear
  • Caseation of lymph nodes forms the cold abscess
  • On palpation: soft and matted nodes

Common Sites:

  1. Neck and axilla (commonest)
  2. Loin - from caries spine
  3. Side of chest wall - from tuberculosis of ribs
  4. Back/side of chest wall - along intercostal nerve, cutaneous nerve, posterior mediastinal lymph nodes
  5. Near ends of long bones and joints - from bone/joint tuberculosis

Treatment:

  1. Full antitubercular regime started once diagnosis confirmed
  2. Aspiration attempted obliquely through normal surrounding skin (NOT through most prominent/dependent part - to avoid sinus formation)
  3. Aspiration followed by local instillation of I.N.H. solution
  4. If abscess persists - affected lymph node group excised as a whole
⚠️ GOLDEN WARNING: "An incision should NEVER be made on a cold abscess for drainage" - it almost always invites secondary infection and forms a persistent sinus.

Antibioma

  • Continuous antibiotics without drainage make abscess firm, hard, sterile
  • Called antibioma
  • Wall becomes thick; may mimic a carcinomatous lump

Summary Table of Types:

FeaturePyogenicPyaemicCold
NumberSingleMultipleSingle/Multiple
Heat/PainPresentAbsentAbsent
CausePyogenic organismsSeptic emboliTuberculosis
FeverModerateVery high + rigorsAbsent
PlaneAnySubfascialLymph nodes/bone
TreatmentDrain + antibioticsParenteral antibiotics + drainAnti-TB drugs + aspiration
Special ruleDrain pusFind source of infectionNever incise

Key Line: "The basic principle of abscess treatment - drain the pus, send for culture, give proper antibiotic."

Generate a quick reference PDF on abscess types

Reading File
Running Command

mkdir -p /tmp/workspace/abscess-pdf && ls /tmp/workspace/

Writing File

~/abscess-pdf/generate_abscess_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import PageBreak

OUTPUT = "/tmp/workspace/abscess-pdf/Abscess_Quick_Reference.pdf"

# ── Colour palette ──────────────────────────────────────────────────────────
DARK_BLUE   = colors.HexColor("#1a3a5c")
MID_BLUE    = colors.HexColor("#2e6da4")
LIGHT_BLUE  = colors.HexColor("#d6e8fa")
RED         = colors.HexColor("#c0392b")
ORANGE      = colors.HexColor("#e67e22")
GREEN       = colors.HexColor("#1e8449")
TEAL        = colors.HexColor("#117a65")
LIGHT_GREY  = colors.HexColor("#f4f6f8")
MID_GREY    = colors.HexColor("#bdc3c7")
WHITE       = colors.white
YELLOW_BG   = colors.HexColor("#fef9e7")
WARN_ORANGE = colors.HexColor("#fff3cd")

doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    rightMargin=1.5*cm, leftMargin=1.5*cm,
    topMargin=1.5*cm,   bottomMargin=1.5*cm
)

styles = getSampleStyleSheet()

# Custom styles
def S(name, **kw):
    return ParagraphStyle(name, **kw)

title_style = S("Title2", fontSize=22, textColor=WHITE,
                fontName="Helvetica-Bold", alignment=TA_CENTER, spaceAfter=4)
subtitle_style = S("Sub", fontSize=11, textColor=LIGHT_BLUE,
                   fontName="Helvetica", alignment=TA_CENTER, spaceAfter=2)
sec_hd = S("SecHd", fontSize=13, textColor=WHITE,
           fontName="Helvetica-Bold", alignment=TA_CENTER,
           spaceBefore=6, spaceAfter=4)
body = S("Body2", fontSize=9, textColor=colors.black,
         fontName="Helvetica", spaceAfter=3, leading=13)
bold_body = S("BoldBody", fontSize=9, textColor=DARK_BLUE,
              fontName="Helvetica-Bold", spaceAfter=2)
warn = S("Warn", fontSize=9, textColor=RED,
         fontName="Helvetica-BoldOblique", spaceAfter=4, leading=13)
key_line = S("KeyLine", fontSize=10, textColor=DARK_BLUE,
             fontName="Helvetica-BoldOblique", alignment=TA_CENTER,
             spaceBefore=4, spaceAfter=4)
bullet = S("Bullet", fontSize=9, textColor=colors.black,
           fontName="Helvetica", leftIndent=14, spaceAfter=2, leading=13,
           bulletIndent=4)

def section_header(text, bg_color):
    tbl = Table([[Paragraph(text, sec_hd)]], colWidths=[17.5*cm])
    tbl.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), bg_color),
        ("ROUNDEDCORNERS", [6,6,6,6]),
        ("TOPPADDING",    (0,0), (-1,-1), 6),
        ("BOTTOMPADDING", (0,0), (-1,-1), 6),
    ]))
    return tbl

def two_col_table(rows, col1_w=5*cm, col2_w=12*cm, header=None):
    data = []
    if header:
        data.append([Paragraph(f"<b>{header[0]}</b>", bold_body),
                     Paragraph(f"<b>{header[1]}</b>", bold_body)])
    for r in rows:
        data.append([Paragraph(str(r[0]), bold_body),
                     Paragraph(str(r[1]), body)])
    tbl = Table(data, colWidths=[col1_w, col2_w])
    style = [
        ("BACKGROUND", (0,0), (-1,0), LIGHT_BLUE if header else LIGHT_GREY),
        ("GRID",       (0,0), (-1,-1), 0.4, MID_GREY),
        ("VALIGN",     (0,0), (-1,-1), "TOP"),
        ("TOPPADDING", (0,0), (-1,-1), 4),
        ("BOTTOMPADDING",(0,0),(-1,-1), 4),
        ("LEFTPADDING",(0,0), (-1,-1), 6),
    ]
    if header:
        style += [("FONTNAME",(0,0),(-1,0),"Helvetica-Bold"),
                  ("BACKGROUND",(0,0),(-1,0), MID_BLUE),
                  ("TEXTCOLOR",(0,0),(-1,0), WHITE)]
    tbl.setStyle(TableStyle(style))
    return tbl

def highlight_box(text, bg=YELLOW_BG, text_color=DARK_BLUE):
    p = Paragraph(text, S("hb", fontSize=9, textColor=text_color,
                           fontName="Helvetica-BoldOblique", alignment=TA_CENTER,
                           leading=13))
    t = Table([[p]], colWidths=[17.5*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0),(-1,-1), bg),
        ("BOX",           (0,0),(-1,-1), 1, RED if bg==WARN_ORANGE else MID_BLUE),
        ("TOPPADDING",    (0,0),(-1,-1), 6),
        ("BOTTOMPADDING", (0,0),(-1,-1), 6),
    ]))
    return t

# ── Build story ──────────────────────────────────────────────────────────────
story = []

# ── TITLE BANNER ─────────────────────────────────────────────────────────────
title_data = [[Paragraph("ABSCESS", title_style)],
              [Paragraph("Quick Reference Guide  |  Surgery", subtitle_style)],
              [Paragraph("A Concise Textbook of Surgery", subtitle_style)]]
title_tbl = Table(title_data, colWidths=[17.5*cm])
title_tbl.setStyle(TableStyle([
    ("BACKGROUND", (0,0),(-1,-1), DARK_BLUE),
    ("TOPPADDING",    (0,0),(-1,-1), 10),
    ("BOTTOMPADDING", (0,0),(-1,-1), 10),
]))
story += [title_tbl, Spacer(1, 8)]

# ── DEFINITION ───────────────────────────────────────────────────────────────
story += [
    section_header("DEFINITION", MID_BLUE), Spacer(1,4),
    Paragraph("An <b>abscess</b> is a <b>collection of pus in the body</b>.", body),
    Paragraph("Three surgical varieties:", body),
    Paragraph("• <b>1. Pyogenic Abscess</b> - commonest type", bullet),
    Paragraph("• <b>2. Pyaemic Abscess</b> - multiple, from infected emboli", bullet),
    Paragraph("• <b>3. Cold Abscess</b> - non-reactive, tubercular origin", bullet),
    Spacer(1,6),
]

# ── TYPE 1: PYOGENIC ──────────────────────────────────────────────────────────
story += [section_header("TYPE 1: PYOGENIC ABSCESS (Commonest)", colors.HexColor("#1e8449")), Spacer(1,4)]

story += [Paragraph("<b>Routes of Entry of Organisms:</b>", bold_body)]
entry_rows = [
    ("(i)",   "Direct infection from penetrating wounds"),
    ("(ii)",  "Local extension from adjacent focus of infection"),
    ("(iii)", "Lymphatics"),
    ("(iv)",  "Blood stream (haematogenous)"),
]
story += [two_col_table(entry_rows, col1_w=1.5*cm, col2_w=16*cm), Spacer(1,5)]

story += [Paragraph("<b>Pathology:</b>", bold_body),
    Paragraph("• Suppurative infection causes cell death and <b>liquefaction</b>", bullet),
    Paragraph("• Proteolytic enzymes from dead PMN leucocytes liquefy dead tissue", bullet),
    Paragraph("• Resulting fluid = <b>PUS</b> (yellow, alkaline, contains disintegrating + living leucocytes + living + dead bacteria)", bullet),
    Paragraph("• Cavity lined by <b>Pyogenic membrane</b> (dead tissue cells + granulation tissue of phagocytic histiocytes)", bullet),
    Paragraph("• Recovery: pyogenic membrane → fibrous tissue → collagen fibres", bullet),
    Spacer(1,5)]

story += [Paragraph("<b>Clinical Features (5 Cardinal Signs):</b>", bold_body)]
cardinal = [
    ["Sign", "Meaning"],
    ["Rubor (Redness)", "Due to hyperaemia; present before localization"],
    ["Dolor (Pain)", "Throbbing pain - characteristic of pus"],
    ["Calor (Heat)", "Due to hyperaemia (absent in cold abscess)"],
    ["Tumor (Swelling)", "Due to pus inside cavity"],
    ["Functio Laesa", "Impaired function; obvious near joints"],
]
card_tbl = Table(cardinal, colWidths=[5*cm, 12*cm])
card_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,0),  MID_BLUE),
    ("TEXTCOLOR",     (0,0),(-1,0),  WHITE),
    ("FONTNAME",      (0,0),(-1,0),  "Helvetica-Bold"),
    ("BACKGROUND",    (0,1),(-1,-1), LIGHT_GREY),
    ("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, LIGHT_GREY]),
    ("GRID",          (0,0),(-1,-1), 0.4, MID_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 4),
    ("BOTTOMPADDING", (0,0),(-1,-1), 4),
    ("LEFTPADDING",   (0,0),(-1,-1), 6),
    ("FONTSIZE",      (0,0),(-1,-1), 9),
]))
story += [card_tbl, Spacer(1,3)]
story += [highlight_box("Most important signs: Pain (Dolor), Redness (Rubor), Heat (Calor)"), Spacer(1,5)]

story += [Paragraph("<b>Detection of Pus:</b>", bold_body),
    Paragraph("(i) Temperature becomes elevated", bullet),
    Paragraph("(ii) Brawny oedema with induration - deep abscess (breast, parotid, ischiorectal)", bullet),
    Paragraph("(iii) <b>Positive fluctuation test</b> - when pus becomes superficial", bullet),
    Spacer(1,5)]

story += [Paragraph("<b>Special Investigations:</b>", bold_body)]
inv_rows = [
    ["Investigation", "Use"],
    ["X-ray (Radiology)", "Fluid levels if air/gas present - subphrenic, lung abscess; opacity in nasal antrum, pleural cavity"],
    ["Isotope Scan", "Brain abscess, hepatic abscess, osteomyelitis; pelvic, perinephric, mediastinal abscess"],
    ["Ultrasound", "Liver & spleen abscess; gallbladder empyema"],
    ["CT Scan", "Distinguishes abscess from tumour (necrotic centre); locates abdominal and brain abscess"],
]
inv_tbl = Table(inv_rows, colWidths=[4*cm, 13*cm])
inv_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,0), MID_BLUE),
    ("TEXTCOLOR",     (0,0),(-1,0), WHITE),
    ("FONTNAME",      (0,0),(-1,0), "Helvetica-Bold"),
    ("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, LIGHT_GREY]),
    ("GRID",          (0,0),(-1,-1), 0.4, MID_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 4),
    ("BOTTOMPADDING", (0,0),(-1,-1), 4),
    ("LEFTPADDING",   (0,0),(-1,-1), 6),
    ("FONTSIZE",      (0,0),(-1,-1), 9),
    ("VALIGN",        (0,0),(-1,-1), "TOP"),
]))
story += [inv_tbl, Spacer(1,5)]

story += [Paragraph("<b>Treatment:</b>", bold_body),
    Paragraph("<b>Stage 1 - Conservative (unlocalized):</b> Elevation + rest + antibiotic", bullet),
    Paragraph("<b>Stage 2 - Surgical (once localized):</b>", bullet)]
story += [highlight_box('"Where there is pus, let it out"  |  Drain + Culture & Sensitivity + Proper Antibiotic'), Spacer(1,4)]

drain_rows = [
    ["Method", "Details"],
    ["(a) Free/Liberal Incision",
     "Made on most prominent + dependent part. Adequate size for complete drainage. Muscle incised along fibre lines. If nerves/vessels nearby - incision parallel to them."],
    ["(b) Hilton's Method",
     "Used near nerves/vessels (neck, axilla, groin). Skin incised; artery/sinus forceps pushed through deep fascia. Blades opened to extrude pus. Finger inserted to break all loculi."],
    ["(c) Counter-incision",
     "When prominent part is NOT the dependent part. Second incision at most dependent part. Sinus forceps passed from first incision; knife makes fresh cut between forceps tips."],
]
drain_tbl = Table(drain_rows, colWidths=[4.5*cm, 13*cm])
drain_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,0), colors.HexColor("#1e8449")),
    ("TEXTCOLOR",     (0,0),(-1,0), WHITE),
    ("FONTNAME",      (0,0),(-1,0), "Helvetica-Bold"),
    ("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, colors.HexColor("#eafaf1")]),
    ("GRID",          (0,0),(-1,-1), 0.4, MID_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 4),
    ("BOTTOMPADDING", (0,0),(-1,-1), 4),
    ("LEFTPADDING",   (0,0),(-1,-1), 6),
    ("FONTSIZE",      (0,0),(-1,-1), 9),
    ("VALIGN",        (0,0),(-1,-1), "TOP"),
]))
story += [drain_tbl, Spacer(1,4)]

story += [Paragraph("<b>Post-operative Care:</b>", bold_body),
    Paragraph("• Corrugated rubber drain (extends incision to counter-incision if used)", bullet),
    Paragraph("• Dressing changed daily - acriflavine lotion + sterile gauze", bullet),
    Paragraph("• Packing gradually lightened to allow healing", bullet),
    Paragraph("• Vitamin <b>C</b> (wound healing) + Vitamin <b>B complex</b> (when tetracycline used)", bullet),
    Paragraph("• Antibiotics by culture & sensitivity started immediately", bullet),
    Spacer(1,4)]

story += [highlight_box("ANTIBIOMA: Continuous antibiotics without drainage → firm, sterile lump → may mimic carcinoma", WARN_ORANGE, RED), Spacer(1,8)]

# ── TYPE 2: PYAEMIC ───────────────────────────────────────────────────────────
story += [section_header("TYPE 2: PYAEMIC ABSCESS", colors.HexColor("#7d3c98")), Spacer(1,4)]

story += [
    Paragraph("<b>Definition:</b> Multiple abscesses from <b>infected emboli in pyaemia</b> (septic emboli = clump of organisms + infected clot/vagitation from broken infected thrombus).", body),
    Spacer(1,3),
    Paragraph("<b>Associated conditions:</b> Acute osteomyelitis, Intracranial sinus inflammation, Bacterial endocarditis, Portal pyaemia (appendicitis → liver abscesses)", body),
    Spacer(1,4),
]

story += [Paragraph("<b>Three Key Terms:</b>", bold_body)]
terms = [
    ["Term", "Definition"],
    ["Bacteraemia", "Bacteria circulating in blood stream. Transient, little clinical significance. Occurs after tooth extraction, infections, etc."],
    ["Septicaemia", "Bacteria + clinical manifestations from bacterial toxins: pyrexia, rigors, hypotension, DIC, petechial haemorrhages. Treated with IV antibiotics (aminoglycoside + metronidazole) + blood transfusion."],
    ["Toxaemia", "Toxins (chemical/bacterial) circulating in blood stream, producing toxaemic symptoms."],
]
terms_tbl = Table(terms, colWidths=[3.5*cm, 14*cm])
terms_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,0), colors.HexColor("#7d3c98")),
    ("TEXTCOLOR",     (0,0),(-1,0), WHITE),
    ("FONTNAME",      (0,0),(-1,0), "Helvetica-Bold"),
    ("ROWBACKGROUNDS",(0,1),(-1,-1), [WHITE, colors.HexColor("#f9ebff")]),
    ("GRID",          (0,0),(-1,-1), 0.4, MID_GREY),
    ("TOPPADDING",    (0,0),(-1,-1), 4),
    ("BOTTOMPADDING", (0,0),(-1,-1), 4),
    ("LEFTPADDING",   (0,0),(-1,-1), 6),
    ("FONTSIZE",      (0,0),(-1,-1), 9),
    ("VALIGN",        (0,0),(-1,-1), "TOP"),
]))
story += [terms_tbl, Spacer(1,4)]

story += [Paragraph("<b>Features of Pyaemic Abscess:</b>", bold_body),
    Paragraph("(a) Generally <b>multiple</b>", bullet),
    Paragraph("(b) Occur in <b>subfascial plane</b>", bullet),
    Paragraph("(c) <b>Non-reacting</b> - calor, rubor, dolor are ABSENT", bullet),
    Paragraph("(d) Tremendous constitutional disturbances - <b>high fever, rigor, toxaemia</b>", bullet),
    Paragraph("(e) May occur in viscera (spleen, kidneys); <b>death</b> may result from brain/heart abscess", bullet),
    Spacer(1,4)]

story += [Paragraph("<b>Treatment:</b>", bold_body),
    Paragraph("• Parenteral antibiotic ASAP (by culture & sensitivity of pus)", bullet),
    Paragraph("• Drain superficial abscesses", bullet),
    Paragraph("• <b>Locate and treat the source of infection</b>", bullet),
    Spacer(1,8)]

# ── TYPE 3: COLD ABSCESS ──────────────────────────────────────────────────────
story += [section_header("TYPE 3: COLD ABSCESS", colors.HexColor("#2e86c1")), Spacer(1,4)]

story += [
    Paragraph("<b>Definition:</b> A <b>non-reactive abscess</b> - does not produce hot, painful features. Caused almost always by <b>tuberculosis</b>.", body),
    Spacer(1,3),
]

story += [Paragraph("<b>Features:</b>", bold_body),
    Paragraph("• <b>No heat, no pain, no tenderness</b> - conspicuous by their absence", bullet),
    Paragraph("• Brawny induration and oedema are absent", bullet),
    Paragraph("• A few acute features may appear only with secondary infection", bullet),
    Paragraph("• Caseation of lymph nodes forms the cold abscess", bullet),
    Paragraph("• On palpation: <b>soft and matted nodes</b>", bullet),
    Spacer(1,4)]

story += [Paragraph("<b>Common Sites:</b>", bold_body)]
sites = [
    ["(i)",   "Neck and axilla (commonest)"],
    ["(ii)",  "Loin - from caries spine"],
    ["(iii)", "Side of chest wall - from tuberculosis of ribs"],
    ["(iv)",  "Back/side of chest wall - along intercostal/cutaneous nerve from posterior mediastinal lymph nodes (may travel long distance)"],
    ["(v)",   "Near ends of long bones and joints - from bone/joint tuberculosis"],
]
story += [two_col_table(sites, col1_w=1.5*cm, col2_w=16*cm), Spacer(1,5)]

story += [Paragraph("<b>Treatment:</b>", bold_body),
    Paragraph("1. Start <b>full antitubercular regime</b> once diagnosis confirmed", bullet),
    Paragraph("2. Aspiration obliquely through <b>NORMAL surrounding skin</b> (NOT through most prominent/dependent part - to avoid sinus formation)", bullet),
    Paragraph("3. Followed by local instillation of <b>I.N.H. solution</b>", bullet),
    Paragraph("4. If abscess persists - excise the <b>affected lymph node group as a whole</b>", bullet),
    Spacer(1,4)]

story += [highlight_box(
    "⚠ GOLDEN WARNING: NEVER make an incision on a cold abscess for drainage!\n"
    "It almost always invites secondary infection and forms a PERSISTENT SINUS.",
    WARN_ORANGE, RED), Spacer(1,8)]

# ── SUMMARY COMPARISON TABLE ─────────────────────────────────────────────────
story += [section_header("SUMMARY: Comparison of All Three Types", DARK_BLUE), Spacer(1,4)]

comp = [
    ["Feature", "Pyogenic", "Pyaemic", "Cold"],
    ["Number",       "Single",           "Multiple",                  "Single/Multiple"],
    ["Heat/Pain",    "Present",          "Absent",                    "Absent"],
    ["Cause",        "Pyogenic organisms","Septic emboli",            "Tuberculosis"],
    ["Fever",        "Moderate",         "Very high + rigors",        "Absent"],
    ["Plane",        "Any tissue",       "Subfascial",                "Lymph nodes/bone"],
    ["Fluctuation",  "Present",          "May be absent",             "Present (soft)"],
    ["Treatment",    "Drain + antibiotics","Parenteral AB + drain",   "Anti-TB + aspiration"],
    ["Special rule", "Drain pus",        "Find infection source",     "NEVER incise"],
]
comp_tbl = Table(comp, colWidths=[4*cm, 4.5*cm, 4.5*cm, 4.5*cm])
comp_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0),   DARK_BLUE),
    ("TEXTCOLOR",     (0,0), (-1,0),   WHITE),
    ("FONTNAME",      (0,0), (-1,0),   "Helvetica-Bold"),
    ("BACKGROUND",    (0,1), (0,-1),   LIGHT_BLUE),
    ("FONTNAME",      (0,1), (0,-1),   "Helvetica-Bold"),
    ("ROWBACKGROUNDS",(1,1), (-1,-1),  [WHITE, LIGHT_GREY]),
    ("GRID",          (0,0), (-1,-1),  0.4, MID_GREY),
    ("TOPPADDING",    (0,0), (-1,-1),  4),
    ("BOTTOMPADDING", (0,0), (-1,-1),  4),
    ("LEFTPADDING",   (0,0), (-1,-1),  5),
    ("FONTSIZE",      (0,0), (-1,-1),  8.5),
    ("VALIGN",        (0,0), (-1,-1),  "MIDDLE"),
    ("ALIGN",         (1,0), (-1,-1),  "CENTER"),
]))
story += [comp_tbl, Spacer(1,8)]

# ── KEY LINE ──────────────────────────────────────────────────────────────────
story += [
    HRFlowable(width="100%", thickness=1.5, color=MID_BLUE),
    Spacer(1,4),
    highlight_box(
        '"The basic principle of abscess treatment — drain the pus, send for culture & sensitivity, give proper antibiotic."',
        LIGHT_BLUE, DARK_BLUE
    ),
    Spacer(1,4),
    HRFlowable(width="100%", thickness=1.5, color=MID_BLUE),
    Spacer(1,4),
    Paragraph("Source: A Concise Textbook of Surgery | Quick Reference Guide", 
              S("foot", fontSize=8, textColor=MID_GREY, alignment=TA_CENTER)),
]

# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF saved to: {OUTPUT}")
Running Command

cd /tmp/workspace/abscess-pdf && python generate_abscess_pdf.py

Your PDF is ready! Download it here:

Abscess Quick Reference

PDF Document · PDF


What's included in the PDF:

SectionContent
Title BannerDark blue header with title and source
DefinitionAll 3 types listed
Type 1: PyogenicRoutes of entry, Pathology, 5 Cardinal Signs table, Pus detection, Investigations table, Treatment (Conservative + Surgical drainage methods), Post-op care, Antibioma warning
Type 2: PyaemicDefinition, Bacteraemia/Septicaemia/Toxaemia table, Features, Treatment
Type 3: ColdDefinition, Features, Sites table, Treatment, ⚠ Golden Warning box
Summary TableAll 3 types compared across 9 features side by side
Key LineGolden rule of abscess treatment

Make a differentiable table on types of abcess in simple short answer question

Q. Differentiate between types of Abscess.

FeaturePyogenic AbscessPyaemic AbscessCold Abscess
DefinitionCollection of pus caused by pyogenic organismsMultiple abscesses from infected emboli in pyaemiaNon-reactive abscess; no hot/painful features
CausePyogenic organismsSeptic emboli from infected thrombusTuberculosis (almost always)
NumberSingleMultipleSingle or multiple
NatureReactive (hot, painful)Non-reactingNon-reacting (cold)
Heat & PainPresentAbsentAbsent
RednessPresentAbsentAbsent
FeverModerateVery high with rigors and toxaemiaAbsent
PlaneAny tissue planeSubfascial planeLymph nodes, bone, joint
FluctuationPresent (when superficial)May be absentPresent (soft, matted)
Common SitesAny part of bodySpleen, kidneys, brain, liverNeck, axilla, loin, chest wall, near joints
Pus characterYellow, alkaline, frank pusSterile/thinCaseous material
Constitutional symptomsMild to moderateSevere - high fever, rigors, toxaemia; death may occurAbsent
Special featureAntibioma if untreated with drainagePortal pyaemia - multiple liver abscessesTravels along anatomical planes (e.g. from spine to loin)
InvestigationsUSG, CT scanBlood culture, USGX-ray spine, Mantoux, USG
TreatmentDrain pus + antibiotics by C&SParenteral antibiotics ASAP + drain superficial abscessesFull antitubercular regime + aspiration through normal skin + INH instillation
DrainageMandatory - free incision / Hilton's methodDrain only superficial onesNEVER incise - causes persistent sinus
Special rule"Where there is pus, let it out"Find and treat the source of infectionAspiration through normal surrounding skin only

Key lines to remember:
  1. Pyogenic = hot, painful, single, drain it
  2. Pyaemic = multiple, non-reacting, high fever, find the source
  3. Cold = non-reactive, tubercular, never incise - always aspirate

Make a differentiate table on type of abcess under headings like definition, it's cause, it's pathology, it's site, it's clinical feature, complications, treatment.

Q. Differentiate between types of Abscess under standard headings.


1. DEFINITION

Pyogenic AbscessPyaemic AbscessCold Abscess
Collection of pus in body caused by pyogenic organismsMultiple abscesses developing from infected emboli in pyaemiaNon-reactive abscess which does not produce hot and painful features

2. CAUSE

Pyogenic AbscessPyaemic AbscessCold Abscess
Pyogenic organisms gain entry by: (i) Direct infection from wounds (ii) Local extension from adjacent focus (iii) Lymphatics (iv) Blood stream (haematogenous)Septic emboli (clump of organisms + infected clot) formed by breaking up of an infected thrombus lodge in various body partsAlmost always a sequel of tubercular infection - commonly in lymph nodes, bone and joint

3. PATHOLOGY

Pyogenic AbscessPyaemic AbscessCold Abscess
Suppurative infection → cell death → liquefaction by proteolytic enzymes of dead PMN leucocytes → pus (yellow, alkaline fluid) → cavity lined by pyogenic membrane (dead cells + granulation tissue). Recovery: pyogenic membrane → fibrous tissue → collagen fibresSeptic emboli lodge in subfascial plane → non-reacting suppuration. Associated with acute osteomyelitis, bacterial endocarditis, intracranial sinus inflammation. Portal pyaemia → multiple liver abscessesCaseation of lymph nodes/bone → forms cold abscess. No acute inflammatory reaction. Only when secondary infection occurs do a few acute features appear

4. SITE

Pyogenic AbscessPyaemic AbscessCold Abscess
Any part of body(i) Subfascial plane (ii) Viscera - spleen, kidneys (iii) Brain, heart (fatal) (iv) Liver - portal pyaemia(i) Neck and axilla - commonest (ii) Loin - from caries spine (iii) Side of chest wall - from rib TB (iv) Back/side of chest - along intercostal/cutaneous nerve (v) Near ends of long bones and joints - from bone/joint TB

5. CLINICAL FEATURES

FeaturePyogenic AbscessPyaemic AbscessCold Abscess
NumberSingleMultipleSingle or multiple
HeatPresent (Calor)AbsentAbsent
PainThrobbing (Dolor)AbsentAbsent
RednessPresent (Rubor)AbsentAbsent
SwellingPresent (Tumor)May be presentPresent (soft, matted nodes)
FunctionImpaired (Functio Laesa)ImpairedMildly affected
FeverModerateVery high with rigors + toxaemiaAbsent
FluctuationPositive (superficial)May be absentPositive (soft)
NatureReactive - hot, tenderNon-reactingNon-reacting - cold

6. COMPLICATIONS

Pyogenic AbscessPyaemic AbscessCold Abscess
(i) Sinus or fistula formation if inadequately drained (ii) Spread to adjacent structures (iii) Antibioma - firm sterile lump if antibiotics given without drainage; may mimic carcinoma (iv) Chronicity if loculi not broken(i) Death - if abscess occurs in brain or heart (ii) Septicaemia and multiorgan failure (iii) Involvement of viscera - spleen, kidneys (iv) Portal pyaemia - multiple liver abscesses(i) Persistent sinus - if incision made directly (most important) (ii) Secondary pyogenic infection (iii) Spread along anatomical planes to distant sites (iv) Chronic discharging sinus

7. TREATMENT

AspectPyogenic AbscessPyaemic AbscessCold Abscess
ConservativeElevation + rest + antibiotic (unlocalized stage)Parenteral antibiotic ASAP by culture & sensitivityFull antitubercular regime started immediately
SurgicalMandatory drainage once localized: (a) Free/liberal incision (b) Hilton's method (c) Counter-incisionDrain only superficial abscesses; find + treat source of infectionAspiration obliquely through normal surrounding skin + instil INH solution locally
Drainage rule"Where there is pus, let it out"Drain superficial ones onlyNEVER incise - forms persistent sinus
Follow-upCorrugated drain + daily dressing + Vit C + Vit B complexBlood transfusion + plasma expanders if neededExcise lymph node group if abscess persists
Special ruleSend pus for culture & sensitivity; give proper antibioticFind and treat the source of infectionIncision is absolutely contraindicated

Memory Aid:
  • Pyogenic = ONE abscess, HOT & PAINFUL → DRAIN IT
  • Pyaemic = MANY abscesses, NO SIGNS, HIGH FEVER → FIND THE SOURCE
  • Cold = TB origin, COLD & SOFT → ASPIRATE, NEVER INCISE

Create a summary document of all abscess types for quick revision

Reading File
Writing File

~/abscess-pdf/generate_abscess_summary.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, KeepTogether, PageBreak
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY, TA_RIGHT

OUTPUT = "/tmp/workspace/abscess-pdf/Abscess_Types_Summary.pdf"

# Colour palette
C = {
    "dark_blue":   colors.HexColor("#1a3a5c"),
    "mid_blue":    colors.HexColor("#2e6da4"),
    "light_blue":  colors.HexColor("#d6e8fa"),
    "green":       colors.HexColor("#1e8449"),
    "light_green": colors.HexColor("#d5f5e3"),
    "purple":      colors.HexColor("#6c3483"),
    "light_purple":colors.HexColor("#e8daef"),
    "teal":        colors.HexColor("#117a65"),
    "light_teal":  colors.HexColor("#d0ece7"),
    "red":         colors.HexColor("#c0392b"),
    "orange":      colors.HexColor("#e67e22"),
    "warn_bg":     colors.HexColor("#fff3cd"),
    "warn_border": colors.HexColor("#e67e22"),
    "light_grey":  colors.HexColor("#f4f6f8"),
    "mid_grey":    colors.HexColor("#bdc3c7"),
    "dark_grey":   colors.HexColor("#5d6d7e"),
    "white":       colors.white,
    "black":       colors.black,
    "gold":        colors.HexColor("#f0b429"),
    "light_gold":  colors.HexColor("#fffbe6"),
}

doc = SimpleDocTemplate(
    OUTPUT, pagesize=A4,
    rightMargin=1.4*cm, leftMargin=1.4*cm,
    topMargin=1.3*cm, bottomMargin=1.3*cm
)

W = 18.2*cm  # usable width

def style(name, **kw):
    return ParagraphStyle(name, **kw)

# Paragraph styles
ST = {
    "title":    style("title",    fontSize=24, textColor=C["white"],  fontName="Helvetica-Bold", alignment=TA_CENTER, spaceAfter=3, leading=28),
    "subtitle": style("sub",      fontSize=10, textColor=C["light_blue"], fontName="Helvetica", alignment=TA_CENTER, spaceAfter=2),
    "pg_title": style("pg_title", fontSize=14, textColor=C["white"],  fontName="Helvetica-Bold", alignment=TA_CENTER, spaceAfter=4, spaceBefore=4),
    "sec_hd":   style("sec_hd",   fontSize=11, textColor=C["white"],  fontName="Helvetica-Bold", alignment=TA_LEFT,   spaceAfter=3, spaceBefore=3),
    "body":     style("body",     fontSize=8.5,textColor=C["black"],  fontName="Helvetica",      spaceAfter=2, leading=12),
    "bold":     style("bold",     fontSize=8.5,textColor=C["dark_blue"], fontName="Helvetica-Bold", spaceAfter=2),
    "bullet":   style("bullet",   fontSize=8.5,textColor=C["black"],  fontName="Helvetica",      leftIndent=12, spaceAfter=2, leading=12),
    "warn":     style("warn",     fontSize=9,  textColor=C["red"],    fontName="Helvetica-BoldOblique", spaceAfter=3, leading=13, alignment=TA_CENTER),
    "key":      style("key",      fontSize=9.5,textColor=C["dark_blue"], fontName="Helvetica-BoldOblique", alignment=TA_CENTER, leading=14),
    "footer":   style("footer",   fontSize=7.5,textColor=C["mid_grey"], fontName="Helvetica", alignment=TA_CENTER),
    "memory":   style("memory",   fontSize=9,  textColor=C["dark_blue"], fontName="Helvetica-Bold", alignment=TA_CENTER, leading=14),
}

def banner(text, sub, bg=C["dark_blue"]):
    rows = [[Paragraph(text, ST["title"])], [Paragraph(sub, ST["subtitle"])]]
    t = Table(rows, colWidths=[W])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0),(-1,-1), bg),
        ("TOPPADDING",    (0,0),(-1,-1), 12),
        ("BOTTOMPADDING", (0,0),(-1,-1), 10),
    ]))
    return t

def page_header(text, bg):
    t = Table([[Paragraph(text, ST["pg_title"])]], colWidths=[W])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0),(-1,-1), bg),
        ("TOPPADDING",    (0,0),(-1,-1), 7),
        ("BOTTOMPADDING", (0,0),(-1,-1), 7),
        ("LEFTPADDING",   (0,0),(-1,-1), 10),
    ]))
    return t

def section_bar(text, bg):
    t = Table([[Paragraph(text, ST["sec_hd"])]], colWidths=[W])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0),(-1,-1), bg),
        ("TOPPADDING",    (0,0),(-1,-1), 5),
        ("BOTTOMPADDING", (0,0),(-1,-1), 5),
        ("LEFTPADDING",   (0,0),(-1,-1), 8),
    ]))
    return t

def make_table(rows, col_widths, header_bg, row_bgs=None):
    if row_bgs is None:
        row_bgs = [C["white"], C["light_grey"]]
    t = Table(rows, colWidths=col_widths)
    style_cmds = [
        ("BACKGROUND",    (0,0),(-1,0),  header_bg),
        ("TEXTCOLOR",     (0,0),(-1,0),  C["white"]),
        ("FONTNAME",      (0,0),(-1,0),  "Helvetica-Bold"),
        ("FONTSIZE",      (0,0),(-1,-1), 8.5),
        ("ROWBACKGROUNDS",(0,1),(-1,-1), row_bgs),
        ("GRID",          (0,0),(-1,-1), 0.35, C["mid_grey"]),
        ("TOPPADDING",    (0,0),(-1,-1), 4),
        ("BOTTOMPADDING", (0,0),(-1,-1), 4),
        ("LEFTPADDING",   (0,0),(-1,-1), 5),
        ("VALIGN",        (0,0),(-1,-1), "TOP"),
    ]
    t.setStyle(TableStyle(style_cmds))
    return t

def info_box(text, bg, border_color, txt_style="warn"):
    p = Paragraph(text, ST[txt_style])
    t = Table([[p]], colWidths=[W])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0),(-1,-1), bg),
        ("BOX",           (0,0),(-1,-1), 1.2, border_color),
        ("TOPPADDING",    (0,0),(-1,-1), 7),
        ("BOTTOMPADDING", (0,0),(-1,-1), 7),
        ("LEFTPADDING",   (0,0),(-1,-1), 10),
        ("RIGHTPADDING",  (0,0),(-1,-1), 10),
    ]))
    return t

def P(text, s="body"): return Paragraph(text, ST[s])
def B(text): return Paragraph(text, ST["bullet"])
def SP(h=4): return Spacer(1, h)
def HR(): return HRFlowable(width="100%", thickness=0.8, color=C["mid_grey"])

# ─────────────────────────────────────────────────────────────────
story = []

# ══════════════════════════════════════════
# COVER / TITLE PAGE
# ══════════════════════════════════════════
story += [
    banner("ABSCESS", "Types, Pathology, Clinical Features & Treatment  |  Quick Revision Summary"),
    SP(10),
]

# Index boxes
idx_data = [
    [P("<b>PAGE 1</b>", "bold"), P("<b>PAGE 2</b>", "bold"), P("<b>PAGE 3</b>", "bold")],
    [P("Pyogenic Abscess\nDefinition, Pathology,\nClinical Features,\nInvestigations, Treatment", "body"),
     P("Pyaemic Abscess\nDefinition, Pathology,\nKey Terms, Features,\nComplications, Treatment", "body"),
     P("Cold Abscess\nDefinition, Pathology,\nSites, Features,\nComplications, Treatment", "body")],
    [P("<b>PAGE 4</b>", "bold"), P("<b>PAGE 5</b>", "bold"), P("<b>PAGE 6</b>", "bold")],
    [P("Master Comparison\nTable across all\n7 headings", "body"),
     P("Memory Aids &\nKey Lines\nGolden Rules", "body"),
     P("Drainage Methods\nPost-op Care\nAntibioma", "body")],
]
idx_tbl = Table(idx_data, colWidths=[W/3]*3)
idx_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(2,0), C["mid_blue"]),
    ("BACKGROUND",    (0,2),(2,2), C["dark_blue"]),
    ("TEXTCOLOR",     (0,0),(2,0), C["white"]),
    ("TEXTCOLOR",     (0,2),(2,2), C["white"]),
    ("FONTNAME",      (0,0),(2,0), "Helvetica-Bold"),
    ("FONTNAME",      (0,2),(2,2), "Helvetica-Bold"),
    ("BACKGROUND",    (0,1),(2,1), C["light_blue"]),
    ("BACKGROUND",    (0,3),(2,3), C["light_grey"]),
    ("GRID",          (0,0),(-1,-1), 0.5, C["mid_grey"]),
    ("TOPPADDING",    (0,0),(-1,-1), 8),
    ("BOTTOMPADDING", (0,0),(-1,-1), 8),
    ("LEFTPADDING",   (0,0),(-1,-1), 8),
    ("ALIGN",         (0,0),(-1,-1), "CENTER"),
    ("VALIGN",        (0,0),(-1,-1), "MIDDLE"),
    ("FONTSIZE",      (0,0),(-1,-1), 8.5),
]))
story += [P("CONTENTS AT A GLANCE", "bold"), SP(4), idx_tbl, SP(8)]

story += [
    info_box(
        '"An abscess is a collection of pus in the body."\n'
        'Three types: 1. Pyogenic  |  2. Pyaemic  |  3. Cold',
        C["light_blue"], C["mid_blue"], "key"
    ),
    SP(8),
    P("Source: A Concise Textbook of Surgery", "footer"),
    PageBreak()
]

# ══════════════════════════════════════════
# PAGE 1 — PYOGENIC ABSCESS
# ══════════════════════════════════════════
story += [page_header("PAGE 1:  PYOGENIC ABSCESS  (Commonest Type)", C["green"]), SP(5)]

# Definition
story += [section_bar("DEFINITION", C["green"]), SP(3),
    P("Commonest variety of abscess. Organisms gain entry and cause suppurative infection leading to "
      "cell death, liquefaction and pus formation inside a cavity lined by a <b>pyogenic membrane</b>."),
    SP(5)]

# Cause
story += [section_bar("CAUSE - Routes of Entry", C["green"]), SP(3)]
entry = [["Route", "Details"],
    ["(i) Direct", "Penetrating wounds"],
    ["(ii) Local extension", "From adjacent focus of infection"],
    ["(iii) Lymphatics", "Via lymphatic channels"],
    ["(iv) Haematogenous", "Via blood stream"],
]
story += [make_table(entry, [3*cm, 15*cm], C["green"], [C["white"], C["light_green"]]), SP(5)]

# Pathology
story += [section_bar("PATHOLOGY", C["green"]), SP(3),
    B("Suppurative infection kills tissue cells and exudate cells"),
    B("Proteolytic enzymes from dead PMN leucocytes liquefy dead tissue"),
    B("<b>PUS</b> = yellow, alkaline fluid with disintegrating + living leucocytes + living + dead bacteria"),
    B("Cavity lined by <b>Pyogenic membrane</b> = dead tissue cells + granulation tissue of phagocytic histiocytes"),
    B("Recovery: pyogenic membrane → fibrous tissue → granulation tissue → collagen fibres"),
    B("<b>Antibioma</b>: continuous antibiotics without drainage → firm, sterile lump → may mimic carcinoma"),
    SP(5)]

# Clinical Features
story += [section_bar("CLINICAL FEATURES (5 Cardinal Signs)", C["green"]), SP(3)]
cardinal = [
    ["Sign", "Feature", "Detail"],
    ["Rubor", "Redness", "Due to hyperaemia; present before localization"],
    ["Dolor", "Pain", "Throbbing pain - characteristic of pus presence"],
    ["Calor", "Heat", "Due to hyperaemia (absent in cold abscess)"],
    ["Tumor", "Swelling", "Due to pus inside cavity"],
    ["Functio Laesa", "Impaired function", "Obvious near joints; patient avoids movement"],
]
story += [make_table(cardinal, [3*cm, 3.5*cm, 11.5*cm], C["green"], [C["white"], C["light_green"]]), SP(3)]
story += [P("<b>Detection of pus:</b>"), SP(2),
    B("(i) Elevated temperature"),
    B("(ii) Brawny oedema + induration (deep - breast, parotid, ischiorectal)"),
    B("(iii) <b>Positive fluctuation test</b> when pus becomes superficial"),
    SP(5)]

# Investigations
story += [section_bar("SPECIAL INVESTIGATIONS", C["green"]), SP(3)]
inv = [["Investigation", "Use"],
    ["X-ray", "Fluid levels with air/gas (subphrenic, lung abscess); opacity in nasal antrum, pleural cavity"],
    ["Isotope scan", "Brain, hepatic, osteomyelitis, pelvic, perinephric, mediastinal abscess"],
    ["Ultrasound", "Liver & spleen abscess; gallbladder empyema"],
    ["CT scan", "Distinguishes abscess from tumour (necrotic centre); locates abdominal & brain abscess"],
]
story += [make_table(inv, [3.5*cm, 14.5*cm], C["green"], [C["white"], C["light_green"]]), SP(5)]

# Treatment
story += [section_bar("TREATMENT", C["green"]), SP(3),
    P("<b>Stage 1 - Conservative (unlocalized):</b> Elevation + rest + suitable antibiotic"),
    SP(3)]
story += [info_box('"Where there is pus, let it out" — Drain + Culture & Sensitivity + Proper Antibiotic',
    C["light_green"], C["green"], "key"), SP(4)]

drain = [["Method", "Details"],
    ["(a) Free / Liberal Incision",
     "Made on most prominent + most dependent part. Adequate (liberal) size. Muscle incised along fibres. Near nerves/vessels - incision parallel to them."],
    ["(b) Hilton's Method",
     "Used near nerves/vessels (neck, axilla, groin). Skin incised; artery/sinus forceps pushed through deep fascia into cavity. Blades opened to extrude pus. Finger explores and breaks all loculi."],
    ["(c) Counter-incision",
     "When prominent part is not the dependent part. Second incision at most dependent site for gravity drainage. Sinus forceps passed from first incision; knife makes fresh incision between forceps tips."],
]
story += [make_table(drain, [4.5*cm, 13.5*cm], C["teal"], [C["white"], C["light_teal"]]), SP(4),
    P("<b>Post-op care:</b>"), SP(2),
    B("Corrugated rubber drain (from incision to counter-incision)"),
    B("Daily dressing - acriflavine lotion + sterile gauze; packing gradually lightened"),
    B("Vitamin C (wound healing) + Vitamin B complex (if tetracycline used)"),
    B("Antibiotics by culture & sensitivity started immediately"),
    PageBreak()]

# ══════════════════════════════════════════
# PAGE 2 — PYAEMIC ABSCESS
# ══════════════════════════════════════════
story += [page_header("PAGE 2:  PYAEMIC ABSCESS", C["purple"]), SP(5)]

story += [section_bar("DEFINITION", C["purple"]), SP(3),
    P("Multiple abscesses developing from <b>infected emboli in pyaemia</b>. Septic emboli = clump of organisms + infected clot (vagitation) formed by breaking up of an infected thrombus."),
    SP(5)]

story += [section_bar("CAUSE & PATHOLOGY", C["purple"]), SP(3),
    B("Septic emboli lodge in various body parts (subfascial plane, viscera)"),
    B("Associated with: acute osteomyelitis, intracranial sinus inflammation, bacterial endocarditis"),
    B("<b>Portal pyaemia:</b> infective emboli pass into portal venous system → multiple pyaemic liver abscesses (e.g. acute appendicitis)"),
    SP(5)]

story += [section_bar("THREE KEY TERMS", C["purple"]), SP(3)]
terms = [["Term", "Definition", "Treatment"],
    ["Bacteraemia",  "Bacteria circulating in blood. Transient, little clinical significance. Occurs after tooth extraction etc.",
     "Usually self-limiting"],
    ["Septicaemia",  "Bacteria + clinical manifestations from toxins: pyrexia, rigors, hypotension, DIC, petechial haemorrhages.",
     "IV aminoglycoside + metronidazole + blood transfusion + plasma expanders + hydrocortisone"],
    ["Toxaemia",     "Toxins (chemical/bacterial) circulating in blood, producing toxaemic symptoms.",
     "Treat underlying cause"],
]
story += [make_table(terms, [3*cm, 8*cm, 7*cm], C["purple"],
    [C["white"], C["light_purple"]]), SP(5)]

story += [section_bar("CLINICAL FEATURES", C["purple"]), SP(3)]
pya_feat = [["Feature", "Detail"],
    ["Number",          "Multiple"],
    ["Plane",           "Subfascial"],
    ["Nature",          "Non-reacting (calor, rubor, dolor ABSENT)"],
    ["Constitutional",  "Tremendous - high fever, rigor, toxaemia"],
    ["Visceral",        "May involve spleen, kidneys; DEATH from brain/heart abscess"],
]
story += [make_table(pya_feat, [4*cm, 14*cm], C["purple"],
    [C["white"], C["light_purple"]]), SP(5)]

story += [section_bar("COMPLICATIONS", C["purple"]), SP(3),
    B("Death - if abscess in brain or heart"),
    B("Septicaemia and multi-organ failure"),
    B("Portal pyaemia - multiple liver abscesses"),
    B("Visceral involvement - spleen, kidneys"),
    SP(5)]

story += [section_bar("TREATMENT", C["purple"]), SP(3),
    B("Parenteral antibiotic ASAP - chosen by culture & sensitivity of pus"),
    B("Drain superficial abscesses"),
    B("<b>Locate and treat the SOURCE of infection</b>"),
    SP(4)]
story += [info_box("Key Rule: Find the source of infection and treat it",
    C["light_purple"], C["purple"], "key"), SP(4), PageBreak()]

# ══════════════════════════════════════════
# PAGE 3 — COLD ABSCESS
# ══════════════════════════════════════════
story += [page_header("PAGE 3:  COLD ABSCESS", C["mid_blue"]), SP(5)]

story += [section_bar("DEFINITION", C["mid_blue"]), SP(3),
    P("A <b>non-reactive abscess</b> which does not produce hot and painful features as seen in pyogenic abscess. Almost always a sequel of <b>tubercular infection</b> anywhere in the body - commonly lymph nodes, bone and joint."),
    SP(5)]

story += [section_bar("CAUSE & PATHOLOGY", C["mid_blue"]), SP(3),
    B("Caseation of lymph nodes forms the cold abscess"),
    B("Commonly from TB of lymph nodes, bone (caries spine), joints, ribs"),
    B("<b>No acute inflammatory reaction</b> - hence 'cold'"),
    B("Secondary infection - a few acute features may then appear"),
    B("On palpation: <b>soft and matted nodes</b>"),
    SP(5)]

story += [section_bar("COMMON SITES", C["mid_blue"]), SP(3)]
sites = [["#", "Site", "Origin"],
    ["(i)",   "Neck and axilla",            "Commonest sites"],
    ["(ii)",  "Loin",                        "From caries spine (TB of vertebrae)"],
    ["(iii)", "Side of chest wall",          "From tuberculosis of ribs"],
    ["(iv)",  "Back/side of chest wall",     "Along intercostal/cutaneous nerve from posterior mediastinal lymph nodes; may travel long distance along anatomical plane"],
    ["(v)",   "Near ends of long bones and joints", "From bone/joint tuberculosis"],
]
story += [make_table(sites, [1.5*cm, 5.5*cm, 11*cm], C["mid_blue"],
    [C["white"], C["light_blue"]]), SP(5)]

story += [section_bar("CLINICAL FEATURES", C["mid_blue"]), SP(3)]
cold_feat = [["Feature", "Detail"],
    ["Heat",          "ABSENT"],
    ["Pain",          "ABSENT"],
    ["Tenderness",    "ABSENT"],
    ["Redness",       "ABSENT"],
    ["Oedema",        "Brawny induration and oedema ABSENT"],
    ["Swelling",      "Present - soft, fluctuant, matted nodes"],
    ["Fever",         "Absent (unless secondary infection)"],
    ["Nature",        "Cold, non-reacting"],
]
story += [make_table(cold_feat, [4*cm, 14*cm], C["mid_blue"],
    [C["white"], C["light_blue"]]), SP(5)]

story += [section_bar("COMPLICATIONS", C["mid_blue"]), SP(3),
    B("<b>Persistent sinus</b> - if incision made directly (most important complication)"),
    B("Secondary pyogenic infection - if improperly handled"),
    B("Spread along anatomical planes to distant sites"),
    B("Chronic discharging sinus"),
    SP(5)]

story += [section_bar("TREATMENT", C["mid_blue"]), SP(3),
    B("1. Start <b>full antitubercular regime</b> immediately on diagnosis"),
    B("2. Aspiration obliquely through <b>NORMAL surrounding skin</b> (NOT most prominent/dependent part)"),
    B("3. Aspiration followed by local instillation of <b>I.N.H. solution</b>"),
    B("4. If abscess persists - <b>excise affected lymph node group as a whole</b>"),
    SP(4)]
story += [
    info_box(
        "GOLDEN WARNING: NEVER make an incision on a cold abscess for drainage!\n"
        "It almost always invites secondary infection and forms a PERSISTENT SINUS.",
        C["warn_bg"], C["red"], "warn"
    ),
    SP(4), PageBreak()
]

# ══════════════════════════════════════════
# PAGE 4 — MASTER COMPARISON TABLE
# ══════════════════════════════════════════
story += [page_header("PAGE 4:  MASTER COMPARISON TABLE", C["dark_blue"]), SP(5)]

comp_data = [
    ["Heading", "Pyogenic", "Pyaemic", "Cold"],
    ["Definition",
     "Collection of pus from pyogenic organisms",
     "Multiple abscesses from infected emboli in pyaemia",
     "Non-reactive abscess from tuberculosis"],
    ["Cause",
     "Pyogenic organisms (direct/lymphatics/blood)",
     "Septic emboli from infected thrombus",
     "Tubercular infection (lymph nodes, bone, joint)"],
    ["Pathology",
     "Liquefaction of tissue → pus → pyogenic membrane cavity",
     "Emboli lodge in subfascial plane → non-reacting suppuration",
     "Caseation of lymph nodes; no acute reaction"],
    ["Number",
     "Single",
     "Multiple",
     "Single or multiple"],
    ["Site",
     "Any tissue plane",
     "Subfascial; viscera (liver, spleen, brain)",
     "Neck, axilla, loin, chest wall, near joints/bones"],
    ["Heat & Pain",
     "Present (hot, tender, throbbing)",
     "ABSENT",
     "ABSENT"],
    ["Fever",
     "Moderate",
     "Very high with rigors + toxaemia",
     "Absent"],
    ["Fluctuation",
     "Present when superficial",
     "May be absent",
     "Present (soft, matted)"],
    ["Complications",
     "Sinus/fistula, antibioma, chronicity",
     "Death (brain/heart), multi-organ failure",
     "Persistent sinus if incised, secondary infection"],
    ["Treatment",
     "Drain + C&S + antibiotics",
     "Parenteral AB + drain superficial + find source",
     "Anti-TB regime + aspiration + INH instillation"],
    ["Drainage",
     "Mandatory (free incision/Hilton's/counter)",
     "Superficial only",
     "NEVER incise - aspiration only"],
    ["Special rule",
     '"Where there is pus, let it out"',
     "Find and treat the source of infection",
     "NEVER make incision - causes persistent sinus"],
]
comp_tbl = Table(comp_data, colWidths=[3.5*cm, 4.9*cm, 4.9*cm, 4.9*cm])
comp_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0),  C["dark_blue"]),
    ("TEXTCOLOR",     (0,0), (-1,0),  C["white"]),
    ("FONTNAME",      (0,0), (-1,0),  "Helvetica-Bold"),
    ("BACKGROUND",    (0,1), (0,-1),  C["light_blue"]),
    ("FONTNAME",      (0,1), (0,-1),  "Helvetica-Bold"),
    ("TEXTCOLOR",     (0,1), (0,-1),  C["dark_blue"]),
    ("ROWBACKGROUNDS",(1,1), (-1,-1), [C["white"], C["light_grey"]]),
    ("GRID",          (0,0), (-1,-1), 0.4, C["mid_grey"]),
    ("TOPPADDING",    (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("LEFTPADDING",   (0,0), (-1,-1), 5),
    ("FONTSIZE",      (0,0), (-1,-1), 8),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
]))
story += [comp_tbl, SP(4), PageBreak()]

# ══════════════════════════════════════════
# PAGE 5 — MEMORY AIDS & KEY LINES
# ══════════════════════════════════════════
story += [page_header("PAGE 5:  MEMORY AIDS, KEY LINES & GOLDEN RULES", C["orange"]), SP(5)]

# Memory aid boxes
mem_data = [
    [P("<b>PYOGENIC</b>", "bold"),
     P("<b>PYAEMIC</b>", "bold"),
     P("<b>COLD</b>", "bold")],
    [P("ONE abscess\nHOT & PAINFUL\nDRAIN IT", "body"),
     P("MANY abscesses\nNO SIGNS\nHIGH FEVER\nFIND THE SOURCE", "body"),
     P("TB origin\nCOLD & SOFT\nASPIRATE\nNEVER INCISE", "body")],
]
mem_tbl = Table(mem_data, colWidths=[W/3]*3)
mem_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(0,0), C["green"]),
    ("BACKGROUND",    (1,0),(1,0), C["purple"]),
    ("BACKGROUND",    (2,0),(2,0), C["mid_blue"]),
    ("TEXTCOLOR",     (0,0),(-1,0), C["white"]),
    ("FONTNAME",      (0,0),(-1,0), "Helvetica-Bold"),
    ("BACKGROUND",    (0,1),(0,1), C["light_green"]),
    ("BACKGROUND",    (1,1),(1,1), C["light_purple"]),
    ("BACKGROUND",    (2,1),(2,1), C["light_blue"]),
    ("GRID",          (0,0),(-1,-1), 0.5, C["mid_grey"]),
    ("TOPPADDING",    (0,0),(-1,-1), 8),
    ("BOTTOMPADDING", (0,0),(-1,-1), 8),
    ("LEFTPADDING",   (0,0),(-1,-1), 8),
    ("ALIGN",         (0,0),(-1,-1), "CENTER"),
    ("VALIGN",        (0,0),(-1,-1), "MIDDLE"),
    ("FONTSIZE",      (0,0),(-1,-1), 9),
]))
story += [mem_tbl, SP(8)]

# Golden rules
story += [section_bar("GOLDEN RULES", colors.HexColor("#b7950b")), SP(4)]
rules = [
    ["#", "Golden Rule"],
    ["1", '"Where there is pus, let it out" - Drainage is mandatory in pyogenic abscess once localized'],
    ["2", "Send pus for culture & sensitivity and give proper antibiotic"],
    ["3", "NEVER incise a cold abscess - always aspirate through normal surrounding skin"],
    ["4", "Aspirate cold abscess obliquely - NOT through most prominent/dependent part (sinus will form)"],
    ["5", "Antibioma = continuous antibiotics without drainage → firm lump mimicking carcinoma"],
    ["6", "In pyaemic abscess - FIND and TREAT the source of infection"],
    ["7", "Full antitubercular regime MUST be started for cold abscess"],
    ["8", "Hilton's method - used near nerves/vessels (neck, axilla, groin) to avoid injury"],
    ["9", "Counter-incision - when prominent part is not dependent; gravity aids drainage"],
    ["10","Portal pyaemia - infected emboli from portal system → multiple liver abscesses (e.g. appendicitis)"],
]
rules_tbl = Table(rules, colWidths=[1*cm, 17.2*cm])
rules_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0),(-1,0),  colors.HexColor("#b7950b")),
    ("TEXTCOLOR",     (0,0),(-1,0),  C["white"]),
    ("FONTNAME",      (0,0),(-1,0),  "Helvetica-Bold"),
    ("ROWBACKGROUNDS",(0,1),(-1,-1), [C["light_gold"], C["white"]]),
    ("GRID",          (0,0),(-1,-1), 0.35, C["mid_grey"]),
    ("TOPPADDING",    (0,0),(-1,-1), 4),
    ("BOTTOMPADDING", (0,0),(-1,-1), 4),
    ("LEFTPADDING",   (0,0),(-1,-1), 5),
    ("FONTSIZE",      (0,0),(-1,-1), 8.5),
    ("VALIGN",        (0,0),(-1,-1), "TOP"),
    ("ALIGN",         (0,0),(0,-1),  "CENTER"),
]))
story += [rules_tbl, SP(6)]

# Three key terms
story += [section_bar("THREE KEY TERMS IN PYAEMIA", C["purple"]), SP(4)]
terms2 = [["Term", "Definition"],
    ["Bacteraemia", "Bacteria in blood stream - transient, little significance, occurs after tooth extraction"],
    ["Septicaemia", "Bacteria + clinical signs from toxins (pyrexia, rigors, hypotension, DIC, petechiae)"],
    ["Toxaemia",    "Toxins (chemical/bacterial) circulating in blood producing toxaemic symptoms"],
]
story += [make_table(terms2, [3.5*cm, 14.5*cm], C["purple"],
    [C["white"], C["light_purple"]]), SP(4), PageBreak()]

# ══════════════════════════════════════════
# PAGE 6 — DRAINAGE METHODS & POST-OP CARE
# ══════════════════════════════════════════
story += [page_header("PAGE 6:  DRAINAGE METHODS, POST-OP CARE & ANTIBIOMA", C["teal"]), SP(5)]

story += [section_bar("DRAINAGE METHODS IN DETAIL", C["teal"]), SP(4)]
drain2 = [["Method", "When Used", "Technique"],
    ["Free / Liberal\nIncision",
     "Standard pyogenic abscess",
     "Liberal incision on most prominent + dependent part. Adequate size for drainage. Muscle along fibres. Parallel to nerves/vessels if nearby."],
    ["Hilton's\nMethod",
     "Near nerves/vessels:\nneck, axilla, groin",
     "Skin + subcutaneous tissue incised. Artery forceps through deep fascia. Blades opened to extrude pus. Finger breaks all loculi. Exploration mandatory."],
    ["Counter-\nincision",
     "Prominent part NOT\ndependent part",
     "First incision at prominent part. Second (counter) incision at most dependent part. Sinus forceps passed between. Gravity aids drainage via lower opening."],
]
story += [make_table(drain2, [3*cm, 4*cm, 11*cm], C["teal"],
    [C["white"], C["light_teal"]]), SP(6)]

story += [section_bar("POST-OPERATIVE CARE", C["teal"]), SP(4)]
postop = [["Step", "Action"],
    ["Drain",        "Corrugated rubber drain (extends from incision to counter-incision if used)"],
    ["Granulation",  "If granulation tissue bleeds too much - roller gauze packing for 48 hrs; some surgeons instil local antibiotic"],
    ["Rest",         "Very important post-op measure; expedites healing"],
    ["Dressing",     "Daily dressing with acriflavine lotion + sterile gauze; packing gradually lightened"],
    ["Antibiotics",  "Proper antibiotic by culture & sensitivity started immediately"],
    ["Vitamins",     "Vitamin C - wound healing; Vitamin B complex - when tetracycline used as antibiotic"],
    ["Follow-up",    "Drain/dressing removed after 48 hrs; cavity healed by gradual lightening of packing"],
]
story += [make_table(postop, [3.5*cm, 14.5*cm], C["teal"],
    [C["white"], C["light_teal"]]), SP(6)]

story += [section_bar("ANTIBIOMA", C["red"]), SP(4),
    B("Occurs when continuous antibiotics are given WITHOUT adequate drainage"),
    B("Abscess becomes <b>firm, hard and sterile</b>"),
    B("Due to <b>thickness of the wall</b>"),
    B("Lump may even be <b>hard</b> - mimics a carcinomatous lump"),
    B("Correct management: stop antibiotics, aspirate/drain, culture & sensitivity"),
    SP(4)]

story += [info_box(
    "ANTIBIOMA = Antibiotics + Abscess without drainage\n"
    "Firm, sterile lump that mimics carcinoma",
    C["warn_bg"], C["orange"], "warn"), SP(6)]

# Final key line
story += [
    HRFlowable(width="100%", thickness=1.5, color=C["dark_blue"]),
    SP(5),
    info_box(
        '"The basic principle of abscess treatment —\n'
        'Drain the pus | Send for culture & sensitivity | Give proper antibiotic"',
        C["light_blue"], C["dark_blue"], "key"
    ),
    SP(5),
    HRFlowable(width="100%", thickness=1.5, color=C["dark_blue"]),
    SP(4),
    P("Quick Revision Summary  |  Source: A Concise Textbook of Surgery  |  Page 78-83", "footer"),
]

doc.build(story)
print(f"PDF saved to: {OUTPUT}")
Your credits are exhausted. You can purchase a top-up or subscribe to a plan to continue using Orris. If you're already subscribed, your daily credits will reset tomorrow.
This is a shared conversation. Sign in to Orris to start your own chat.