These r picture of textbook of ENT Do explain me this in detail I don't know basics So make sure you explain me in easiest way
| Part | What it looks like |
|---|---|
| Antral | The stalk (thin string-like part, inside the sinus) |
| Choanal | Round and globular (balloon-like, at the back) |
| Nasal | Flat from side to side (the part in the nose) |
| Feature | Antrochoanal | Ethmoidal |
|---|---|---|
| Age | Children/young adults | Adults |
| Cause | Infection | Allergy/multifactorial |
| Number | Solitary (single) | Multiple |
| Laterality | Unilateral (one side) | Bilateral (both sides) |
| Origin | Maxillary sinus (near ostium) | Ethmoid sinuses, uncinate process, middle meatus |
| Growth | Grows backward toward choana, hangs behind soft palate | Grows forward, may present at nares |
| Size/Shape | Trilobed (antral + nasal + choanal parts) | Small, grape-like masses |
| Recurrence | Uncommon if fully removed | Common |
| Treatment | Endoscopic sinus surgery | Endoscopic sinus surgery |
| Nasal Polyp | Epistaxis | |
|---|---|---|
| What is it? | Swollen grape-like lump in the nose | Bleeding from inside the nose |
| Antrochoanal = | Single, children, from maxillary sinus | 90% = Little's area (front of septum) |
| Ethmoidal = | Multiple, adults, from ethmoid sinuses | Posterior = Woodruff's plexus (back) |
| Main symptom | Blocked nose | Nosebleed |
| Best investigation | CT scan | Clinical + history |
| Best treatment | FESS (endoscopic surgery) | Step-wise: Pinch → Pack → Cauterize → Ligate/Embolize |
Make this into pdf and give Include all points which u gave
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "workspace ready"
mkdir -p /tmp/workspace/ent-notes && python3 << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm from reportlab.lib import colors from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, PageBreak) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY doc = SimpleDocTemplate( "/tmp/workspace/ent-notes/ENT_Nasal_Polypi_and_Epistaxis.pdf", pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm ) styles = getSampleStyleSheet() # Custom styles title_style = ParagraphStyle( 'CustomTitle', parent=styles['Title'], fontSize=22, textColor=colors.HexColor('#2C3E7A'), spaceAfter=8, alignment=TA_CENTER, fontName='Helvetica-Bold' ) chapter_style = ParagraphStyle( 'Chapter', parent=styles['Heading1'], fontSize=17, textColor=colors.white, spaceBefore=16, spaceAfter=8, fontName='Helvetica-Bold', backColor=colors.HexColor('#2C3E7A'), borderPad=6, leading=22 ) h2_style = ParagraphStyle( 'H2', parent=styles['Heading2'], fontSize=13, textColor=colors.HexColor('#B03060'), spaceBefore=12, spaceAfter=4, fontName='Helvetica-Bold' ) h3_style = ParagraphStyle( 'H3', parent=styles['Heading3'], fontSize=11, textColor=colors.HexColor('#2C7A4A'), spaceBefore=8, spaceAfter=3, fontName='Helvetica-Bold' ) body_style = ParagraphStyle( 'Body', parent=styles['Normal'], fontSize=9.5, leading=14, spaceAfter=4, alignment=TA_JUSTIFY, fontName='Helvetica' ) bullet_style = ParagraphStyle( 'Bullet', parent=styles['Normal'], fontSize=9.5, leading=14, spaceAfter=3, leftIndent=14, bulletIndent=0, fontName='Helvetica' ) sub_bullet_style = ParagraphStyle( 'SubBullet', parent=styles['Normal'], fontSize=9.5, leading=14, spaceAfter=2, leftIndent=28, fontName='Helvetica' ) table_header_style = ParagraphStyle( 'TableHeader', parent=styles['Normal'], fontSize=9, fontName='Helvetica-Bold', textColor=colors.white, alignment=TA_CENTER ) table_cell_style = ParagraphStyle( 'TableCell', parent=styles['Normal'], fontSize=8.5, fontName='Helvetica', leading=12 ) note_style = ParagraphStyle( 'Note', parent=styles['Normal'], fontSize=9, leading=13, fontName='Helvetica-Oblique', textColor=colors.HexColor('#555555'), leftIndent=10, backColor=colors.HexColor('#FFF8DC'), borderPad=5 ) subtitle_style = ParagraphStyle( 'Subtitle', parent=styles['Normal'], fontSize=11, textColor=colors.HexColor('#444444'), spaceAfter=4, alignment=TA_CENTER, fontName='Helvetica-Oblique' ) def B(text): return f'<b>{text}</b>' def I(text): return f'<i>{text}</i>' def BI(text): return f'<b><i>{text}</i></b>' def bullet(text, style=bullet_style): return Paragraph(f'• {text}', style) def subbullet(text): return Paragraph(f'– {text}', sub_bullet_style) def h2(text): return Paragraph(text, h2_style) def h3(text): return Paragraph(text, h3_style) def body(text): return Paragraph(text, body_style) def sp(n=6): return Spacer(1, n) def hr(): return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor('#CCCCCC'), spaceAfter=4, spaceBefore=4) def chapter_heading(num, title, color_hex='#2C3E7A'): style = ParagraphStyle( 'ChapterH', parent=styles['Heading1'], fontSize=18, textColor=colors.white, spaceBefore=0, spaceAfter=0, fontName='Helvetica-Bold', backColor=colors.HexColor(color_hex), borderPad=8, leading=24 ) return Paragraph(f'Chapter {num}: {title}', style) def section_box(text, color_hex='#B03060'): style = ParagraphStyle( 'SectionBox', parent=styles['Heading2'], fontSize=12, textColor=colors.white, spaceBefore=10, spaceAfter=6, fontName='Helvetica-Bold', backColor=colors.HexColor(color_hex), borderPad=5, leading=18 ) return Paragraph(text, style) def make_table(data, col_widths, header_color='#2C3E7A'): table = Table(data, colWidths=col_widths, repeatRows=1) n_rows = len(data) n_cols = len(data[0]) style_cmds = [ ('BACKGROUND', (0,0), (-1,0), colors.HexColor(header_color)), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, colors.HexColor('#F2F6FF')]), ('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#AAAAAA')), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ('LEFTPADDING', (0,0), (-1,-1), 5), ('RIGHTPADDING', (0,0), (-1,-1), 5), ] table.setStyle(TableStyle(style_cmds)) return table # ───────────────────────────────────────────── # BUILD CONTENT # ───────────────────────────────────────────── story = [] # COVER story.append(sp(30)) story.append(Paragraph('ENT Textbook Notes', title_style)) story.append(sp(8)) story.append(Paragraph('Beginner-Friendly Detailed Explanation', subtitle_style)) story.append(sp(6)) story.append(hr()) story.append(sp(6)) story.append(Paragraph('Chapter 32: Nasal Polypi | Chapter 33: Epistaxis', subtitle_style)) story.append(sp(4)) story.append(Paragraph('Complete notes with causes, symptoms, signs, diagnosis & treatment', subtitle_style)) story.append(sp(30)) story.append(PageBreak()) # ═══════════════════════════════════════════════════ # CHAPTER 32 - NASAL POLYPI # ═══════════════════════════════════════════════════ story.append(chapter_heading(32, 'NASAL POLYPI', '#2C3E7A')) story.append(sp(8)) story.append(h2('🔵 What is a Nasal Polyp? (The Absolute Basics)')) story.append(body('Imagine the inside lining of your nose (called the <b>mucosa</b>) getting swollen and puffy, like a blister. Over time, this puffy tissue hangs down like a grape or a teardrop inside your nose. That hanging, swollen, non-cancerous lump is called a <b>nasal polyp</b>.')) story.append(sp(4)) story.append(bullet(f'{B("Non-neoplastic")} = NOT cancerous. It is just swollen, watery (oedematous) tissue.')) story.append(bullet(f'{B("Oedematous")} = Swollen due to fluid collection inside the tissue.')) story.append(sp(6)) story.append(body(f'There are {B("two main types")}:')) story.append(bullet('Antrochoanal Polyp (Type 1)')) story.append(bullet('Bilateral Ethmoidal Polypi (Type 2)')) story.append(sp(10)) story.append(section_box('TYPE 1 - ANTROCHOANAL POLYP (Killian\'s Polyp)', '#7B2D8B')) story.append(h3('Where does it come from?')) story.append(bullet(f'Starts in the {B("maxillary antrum")} — a hollow space (sinus) inside your cheekbone.')) story.append(bullet(f'Has a tiny opening called the {B("accessory ostium")} (a side door). The polyp squeezes out through this.')) story.append(bullet(f'Grows into the {B("nasal cavity")} and then back into the {B("choana")} (opening at back of nose connecting to throat).')) story.append(h3('It has 3 Parts (like a balloon on a string):')) parts_data = [ [Paragraph(B('Part'), table_header_style), Paragraph(B('Description'), table_header_style)], [Paragraph('Antral', table_cell_style), Paragraph('Thin stalk (inside the sinus)', table_cell_style)], [Paragraph('Choanal', table_cell_style), Paragraph('Round and globular (balloon-like, at the back)', table_cell_style)], [Paragraph('Nasal', table_cell_style), Paragraph('Flat from side to side (the part inside the nose)', table_cell_style)], ] story.append(make_table(parts_data, [4*cm, 12*cm])) story.append(sp(6)) story.append(h3('Who gets it?')) story.append(bullet('Mostly children and young adults')) story.append(bullet('Usually single and on ONE side only (unilateral)')) story.append(bullet('Caused by nasal allergy + sinus infection')) story.append(h3('Symptoms (What the patient complains about):')) story.append(bullet(f'{B("Unilateral nasal obstruction")} = blockage in ONE nostril (main complaint)')) story.append(bullet('When polyp grows very big, it can block BOTH sides')) story.append(bullet('Voice becomes dull and nasal (hyponasality)')) story.append(bullet('Mucus (nasal discharge) from one or both sides')) story.append(h3('Signs (What the doctor sees):')) story.append(bullet('Anterior rhinoscopy may miss it if small')) story.append(bullet(f'When large: a {B("smooth greyish mass")} covered with mucus, soft, moveable')) story.append(bullet('A big polyp may stick out of the nostril and appear pink on its outer part')) story.append(bullet('Posterior rhinoscopy shows a globular mass hanging down behind the soft palate, dangling into the throat')) story.append(h3('How is it diagnosed?')) story.append(bullet('Endoscope (thin camera tube) can find a polyp hidden at the back of the nose')) story.append(bullet(f'{B("X-ray of sinuses")}: shows opacity (whitish clouding) of the involved sinus')) story.append(bullet(f'{B("CT scan")} — BEST method: shows polyp, origin, and extent in detail')) story.append(h3('Differential Diagnosis (Things that look similar but are NOT a polyp):')) story.append(bullet('Blob of mucus (snot) — disappears when you blow your nose; a polyp does NOT')) story.append(bullet('Hypertrophied middle turbinate — pink and feels hard/bony when probed; polyp is soft')) story.append(bullet('Angiofibroma — bleeds heavily and easily; history of massive nosebleeds in young boys')) story.append(bullet('Neoplasms (tumours) — fleshy, bleed easily, look different')) story.append(h3('Treatment:')) story.append(bullet(f'{B("Endoscopic sinus surgery (ESS)")} is the gold standard today')) story.append(bullet('Polyp removed by avulsion (pulling it out) through nasal or oral route')) story.append(bullet('Old operations like Caldwell-Luc (opening the cheek) are now mostly avoided')) story.append(sp(10)) story.append(section_box('TYPE 2 - BILATERAL ETHMOIDAL POLYPI', '#1A6B3C')) story.append(h3('Where do they come from?')) story.append(bullet('Come from the ethmoid sinuses (small air pockets between your eyes)')) story.append(bullet('Specifically from lateral wall of nose — uncinate process, bulla ethmoidalis, middle meatus')) story.append(h3('Causes (Aetiology):')) aet_data = [ [Paragraph(B('Condition'), table_header_style), Paragraph(B('Notes'), table_header_style)], [Paragraph('Chronic rhinosinusitis', table_cell_style), Paragraph('Long-standing sinus inflammation (allergic or non-allergic)', table_cell_style)], [Paragraph('Asthma', table_cell_style), Paragraph('7% of asthma patients have nasal polyps', table_cell_style)], [Paragraph('Aspirin intolerance', table_cell_style), Paragraph('36% of patients get polyps. Samter\'s Triad = nasal polyps + asthma + aspirin intolerance', table_cell_style)], [Paragraph('Cystic fibrosis', table_cell_style), Paragraph('20% get polyps; due to abnormal mucus production', table_cell_style)], [Paragraph('Allergic fungal sinusitis', table_cell_style), Paragraph('Almost ALL cases form nasal polyps', table_cell_style)], [Paragraph('Kartagener syndrome', table_cell_style), Paragraph('Bronchiectasis + situs inversus + ciliary dyskinesia', table_cell_style)], [Paragraph('Young syndrome', table_cell_style), Paragraph('Sinopulmonary disease + azoospermia (no sperm)', table_cell_style)], [Paragraph('Churg-Strauss syndrome', table_cell_style), Paragraph('Asthma + fever + eosinophilia + vasculitis + granuloma', table_cell_style)], [Paragraph('Nasal mastocytosis', table_cell_style), Paragraph('Mast cell infiltration in nose; IgE normal; few eosinophils', table_cell_style)], ] story.append(make_table(aet_data, [4.5*cm, 12*cm], '#1A6B3C')) story.append(sp(6)) story.append(h3('How do polyps form? (Pathogenesis — Simplified):')) story.append(bullet('Nasal lining near the middle meatus gets swollen due to fluid collection')) story.append(bullet('This creates polypoidal (grape-like) change')) story.append(bullet('Initially sessile (sitting flat, attached broadly)')) story.append(bullet('Becomes pedunculated (hanging on a stalk) due to gravity and sneezing')) story.append(h3('Pathology (Under microscope):')) story.append(bullet('Early: covered by normal ciliated columnar epithelium (normal nose lining cells)')) story.append(bullet('Later: changes to squamous/transitional type due to air irritation')) story.append(bullet('Submucosa: large spaces filled with serous (watery) fluid + eosinophils + round cells')) story.append(h3('Symptoms:')) story.append(bullet('Nasal stuffiness — can lead to complete blockage')) story.append(bullet('Partial or total loss of smell (anosmia)')) story.append(bullet('Headache from associated sinusitis')) story.append(bullet('Sneezing and watery discharge from allergy')) story.append(bullet('Mass protruding from the nostril in severe cases')) story.append(h3('Signs (What doctor sees):')) story.append(bullet('Smooth, glistening (shiny), grape-like masses — pale in colour')) story.append(bullet('Insensitive to probing — patient feels little pain when poked')) story.append(bullet('Do NOT bleed on touch — important for differentiating from tumours')) story.append(bullet('Sessile or pedunculated; often multiple and bilateral (both sides)')) story.append(bullet('Long-standing cases: broadening of nose, increased intercanthal distance')) story.append(bullet('Purulent (pus-like) nasal discharge from associated sinusitis')) story.append(h3('Diagnosis:')) story.append(bullet('Clinical exam — easily seen with rhinoscopy')) story.append(bullet('CT scan — most important; shows extent, bony erosion; helps plan surgery')) story.append(bullet('CT rules out malignancy — especially in people over 40 years')) story.append(h3('Treatment:')) story.append(body(f'{B("Conservative (Non-surgical):")}')) story.append(bullet('Antihistamines + allergy control — early polypoidal changes may reverse')) story.append(bullet('Steroids (short course) — reduces swelling')) story.append(subbullet('Contraindicated in: hypertension, peptic ulcer, diabetes, pregnancy, tuberculosis')) story.append(sp(4)) story.append(body(f'{B("Surgical:")}')) story.append(bullet(f'{B("FESS — Functional Endoscopic Sinus Surgery")}: Gold standard today')) story.append(subbullet('Uses cameras (0°, 30°, 70° angulation)')) story.append(subbullet('Removes polyps + clears ethmoid cells + restores drainage')) story.append(body('Older operations (before FESS — now rarely done):')) story.append(bullet('Polypectomy — remove 1–2 pedunculated polyps with snare')) story.append(bullet('Intranasal ethmoidectomy — clear ethmoid cells through the nose')) story.append(bullet('Extranasal ethmoidectomy — when polyps recur; cut near inner corner of eye')) story.append(bullet('Transantral ethmoidectomy — when maxillary sinus also infected')) story.append(sp(10)) story.append(section_box('KEY TABLE: Antrochoanal vs Ethmoidal Polypi', '#2C3E7A')) story.append(sp(4)) comp_data = [ [Paragraph(B('Feature'), table_header_style), Paragraph(B('Antrochoanal'), table_header_style), Paragraph(B('Ethmoidal'), table_header_style)], [Paragraph('Age', table_cell_style), Paragraph('Children/young adults', table_cell_style), Paragraph('Adults', table_cell_style)], [Paragraph('Cause', table_cell_style), Paragraph('Infection', table_cell_style), Paragraph('Allergy/multifactorial', table_cell_style)], [Paragraph('Number', table_cell_style), Paragraph('Solitary (single)', table_cell_style), Paragraph('Multiple', table_cell_style)], [Paragraph('Laterality', table_cell_style), Paragraph('Unilateral (one side)', table_cell_style), Paragraph('Bilateral (both sides)', table_cell_style)], [Paragraph('Origin', table_cell_style), Paragraph('Maxillary sinus near ostium', table_cell_style), Paragraph('Ethmoid sinuses, uncinate process, middle meatus', table_cell_style)], [Paragraph('Growth', table_cell_style), Paragraph('Grows backward to choana; may hang behind soft palate', table_cell_style), Paragraph('Grows forward; may present at nares', table_cell_style)], [Paragraph('Size/Shape', table_cell_style), Paragraph('Trilobed (antral + nasal + choanal parts)', table_cell_style), Paragraph('Small, grape-like masses', table_cell_style)], [Paragraph('Recurrence', table_cell_style), Paragraph('Uncommon if removed completely', table_cell_style), Paragraph('Common', table_cell_style)], [Paragraph('Treatment', table_cell_style), Paragraph('Endoscopic sinus surgery', table_cell_style), Paragraph('Endoscopic sinus surgery', table_cell_style)], ] story.append(make_table(comp_data, [3.5*cm, 7.5*cm, 7*cm])) # ═══════════════════════════════════════════════════ # CHAPTER 33 - EPISTAXIS # ═══════════════════════════════════════════════════ story.append(PageBreak()) story.append(chapter_heading(33, 'EPISTAXIS (NOSEBLEED)', '#8B1A1A')) story.append(sp(8)) story.append(h2('🔵 What is Epistaxis?')) story.append(body(f'{B("Epistaxis = Bleeding from inside the nose.")} Simple as that.')) story.append(bullet('Very common — seen in children, adults, and old people')) story.append(bullet('Often comes as an emergency')) story.append(bullet(f'It is a {B("sign")} (symptom of something else), NOT a disease by itself')) story.append(bullet('You must always look for the underlying cause')) story.append(sp(10)) story.append(section_box('BLOOD SUPPLY OF THE NOSE', '#8B1A1A')) story.append(body('The nose has a very rich blood supply from two separate systems:')) story.append(sp(4)) story.append(h3('1. Internal Carotid System (via Ophthalmic artery):')) story.append(bullet('Anterior ethmoidal artery')) story.append(bullet('Posterior ethmoidal artery')) story.append(body('These supply the upper and inner parts of the nose.')) story.append(h3('2. External Carotid System:')) story.append(bullet(f'{B("Sphenopalatine artery (SPA)")} — main artery of the nose; gives nasopalatine and posterior medial nasal branches')) story.append(bullet('Greater palatine artery (from maxillary artery)')) story.append(bullet('Superior labial artery (branch of facial artery) — gives a septal branch')) story.append(body('These supply the lower and outer parts.')) story.append(h3('IMPORTANT VASCULAR AREAS:')) story.append(body(f'{B("🔴 LITTLE\'S AREA (Kiesselbach\'s Plexus)")}')) story.append(bullet('Location: Anterior inferior part of the nasal septum, just above the vestibule (nostril entrance)')) story.append(bullet(f'{B("4 arteries meet here")}: anterior ethmoidal + septal branch of greater palatine + septal branch of superior labial + sphenopalatine')) story.append(bullet('Exposed to: drying effect of inspired air + fingernail trauma (nose picking!)')) story.append(Paragraph(f'⭐ {B("THIS IS WHERE 90% OF NOSEBLEEDS HAPPEN")} — especially in children and young adults', ParagraphStyle('Star', parent=styles['Normal'], fontSize=10, fontName='Helvetica-Bold', textColor=colors.HexColor('#8B1A1A'), leftIndent=14, spaceAfter=4))) story.append(sp(4)) story.append(body(f'{B("🔴 WOODRUFF\'S PLEXUS")}')) story.append(bullet('Location: Back of the nose — inferior to posterior end of inferior turbinate')) story.append(bullet('A venous plexus (veins, not arteries)')) story.append(bullet('Site of posterior epistaxis in adults')) story.append(sp(4)) story.append(body(f'{B("Retrocolumellar Vein")}')) story.append(bullet('Runs behind the columella (strip between the two nostrils)')) story.append(bullet('Common site of venous bleeding in young people')) story.append(sp(10)) story.append(section_box('CAUSES OF EPISTAXIS', '#8B1A1A')) story.append(h3('A. LOCAL CAUSES (Problem in the nose/nasopharynx itself):')) story.append(body(f'{B("Nose:")}')) story.append(bullet(f'{B("Trauma")} — fingernail picking, nose injury, surgery, fractures, hard blowing, violent sneeze')) story.append(bullet(f'{B("Infections:")}')) story.append(subbullet('Acute: Viral rhinitis, nasal diphtheria, acute sinusitis')) story.append(subbullet('Chronic: Atrophic rhinitis, rhinitis sicca, TB, syphilis, granulomas (rhinosporidiosis)')) story.append(bullet(f'{B("Foreign bodies:")}')) story.append(subbullet('Non-living: Rhinolith (calcium deposits)')) story.append(subbullet('Living: Maggots, leeches')) story.append(bullet(f'{B("Tumours/Neoplasms:")}')) story.append(subbullet('Benign: Haemangioma (blood vessel tumour), papilloma')) story.append(subbullet('Malignant: Carcinoma (cancer), sarcoma')) story.append(bullet(f'{B("Atmospheric changes")} — high altitude, sudden decompression (Caisson disease)')) story.append(bullet(f'{B("Deviated nasal septum (DNS)")}')) story.append(sp(4)) story.append(body(f'{B("Nasopharynx:")}')) story.append(bullet('Adenoiditis (infected adenoids)')) story.append(bullet('Juvenile angiofibroma (vascular tumour in teenage boys — causes massive, recurrent bleeds)')) story.append(bullet('Malignant tumours')) story.append(h3('B. GENERAL CAUSES (Systemic — whole body problems):')) story.append(bullet(f'{B("Cardiovascular system")} — Hypertension, arteriosclerosis, mitral stenosis, pregnancy')) story.append(bullet(f'{B("Blood disorders")} — Aplastic anaemia, leukaemia, thrombocytopenia, haemophilia, Christmas disease, scurvy, Vitamin K deficiency, Hereditary Haemorrhagic Telangiectasia (HHT)')) story.append(bullet(f'{B("Liver disease")} — Cirrhosis (deficiency of clotting factors II, VII, IX, X)')) story.append(bullet(f'{B("Kidney disease")} — Chronic nephritis')) story.append(bullet(f'{B("Drugs")} — Aspirin, other analgesics, anticoagulants (blood thinners)')) story.append(bullet(f'{B("Mediastinal compression")} — tumours raising venous pressure')) story.append(bullet(f'{B("Acute infections")} — influenza, measles, chickenpox, typhoid, malaria, dengue')) story.append(bullet(f'{B("Vicarious menstruation")} — epistaxis occurring at the time of menstruation (hormonal)')) story.append(h3('C. IDIOPATHIC:')) story.append(body('"Idiopathic" literally means we do not know the cause. Many times the cause of epistaxis is simply not clear.')) story.append(sp(10)) story.append(section_box('SITES OF EPISTAXIS (Where exactly does it bleed?)', '#2C3E7A')) story.append(bullet(f'{B("Little\'s area")} — 90% of all epistaxis. Front of the septum.')) story.append(bullet(f'{B("Above the middle turbinate")} — from anterior and posterior ethmoidal vessels (internal carotid system)')) story.append(bullet(f'{B("Below the middle turbinate")} — from branches of SPA (external carotid system); may be hidden')) story.append(bullet(f'{B("Diffuse")} — from both septum and lateral nasal wall; in systemic disorders and blood diseases')) story.append(bullet(f'{B("Nasopharynx")}')) story.append(sp(10)) story.append(section_box('CLASSIFICATION OF EPISTAXIS', '#2C3E7A')) ep_compare = [ [Paragraph(B('Feature'), table_header_style), Paragraph(B('Anterior Epistaxis'), table_header_style), Paragraph(B('Posterior Epistaxis'), table_header_style)], [Paragraph('Incidence', table_cell_style), Paragraph('More common', table_cell_style), Paragraph('Less common', table_cell_style)], [Paragraph('Site', table_cell_style), Paragraph("Mostly from Little's area or anterior part of lateral wall", table_cell_style), Paragraph('Mostly from posterosuperior part of nasal cavity; hard to locate', table_cell_style)], [Paragraph('Age', table_cell_style), Paragraph('Mostly children or young adults', table_cell_style), Paragraph('After 40 years of age', table_cell_style)], [Paragraph('Cause', table_cell_style), Paragraph('Mostly trauma', table_cell_style), Paragraph('Spontaneous; often due to hypertension or arteriosclerosis', table_cell_style)], [Paragraph('Bleeding', table_cell_style), Paragraph('Usually mild; can be controlled by local pressure or anterior pack', table_cell_style), Paragraph('Bleeding is severe; requires hospitalisation; postnasal pack often required', table_cell_style)], ] story.append(make_table(ep_compare, [3*cm, 7*cm, 7*cm])) story.append(sp(4)) story.append(Paragraph(f'⚠ {B("Posterior epistaxis warning")}: Blood flows backward into the throat. Patient may swallow it and later vomit "coffee-coloured" vomit. This can be {B("misdiagnosed as haematemesis")} (vomiting blood from stomach).', ParagraphStyle('Warn', parent=styles['Normal'], fontSize=9.5, fontName='Helvetica', textColor=colors.HexColor('#8B1A1A'), leftIndent=10, spaceAfter=4, backColor=colors.HexColor('#FFF0F0'), borderPad=5))) story.append(sp(10)) story.append(section_box('MANAGEMENT OF EPISTAXIS (Step-by-Step)', '#1A6B3C')) story.append(body(f'{B("When a patient comes in with a nosebleed, the doctor needs to know:")}')) story.append(bullet('Mode of onset — spontaneous or from finger trauma?')) story.append(bullet('Duration and frequency of bleeding')) story.append(bullet('Amount of blood lost')) story.append(bullet('Which side is bleeding?')) story.append(bullet('Anterior or posterior type?')) story.append(bullet('Any family or personal history of bleeding tendency?')) story.append(bullet('Any known illness (hypertension, liver disease, kidney disease)?')) story.append(bullet('Any drugs (aspirin, anticoagulants)?')) story.append(h3('STEP 1 — FIRST AID (What to do immediately):')) story.append(bullet('Pinch the nose between thumb and index finger for 5 minutes — compresses Little\'s area')) story.append(bullet('Patient should sit up, lean forward over a basin (blood drains out, not into throat)')) story.append(bullet('Breathe through the mouth')) story.append(bullet('Apply cold compresses to the nose — causes reflex vasoconstriction (vessels narrow, bleed less)')) story.append(h3('STEP 2 — CAUTERIZATION:')) story.append(bullet('Used when the bleeding point CAN be seen (anterior epistaxis)')) story.append(bullet('Area is numbed with local anaesthesia first')) story.append(bullet(f'Bleeding point cauterized with: {B("Silver nitrate bead")} (chemical cautery) OR {B("Electrocautery")}')) story.append(h3('STEP 3 — ANTERIOR NASAL PACKING:')) story.append(bullet('Used when bleeding is heavy and the site is difficult to find')) story.append(bullet('Nose first cleared of blood clots by suction')) story.append(bullet(f'{B("Ribbon gauze soaked in liquid paraffin")} is used:')) story.append(subbullet('Adults: 1 metre of gauze, 2.5 cm wide')) story.append(subbullet('Children: 12 mm wide')) story.append(bullet('Gauze layered from floor to roof and front to back — tightly packing the whole nasal cavity')) story.append(bullet('Two methods: Vertical layering OR Horizontal layering')) story.append(bullet('Pack stays for 24 hours (up to 2–3 days if needed)')) story.append(bullet('If kept >24 hours: give antibiotics to prevent sinusitis and toxic shock syndrome')) story.append(h3('STEP 4 — POSTERIOR NASAL PACKING:')) story.append(body('Used when blood flows into the throat (posterior epistaxis).')) story.append(sp(4)) story.append(body(f'{B("Traditional method (Postnasal pack):")}')) story.append(bullet('Cone-shaped gauze pack made by rolling gauze and tying 3 silk threads to it')) story.append(bullet('Rubber catheter passed through nose, comes out of mouth')) story.append(bullet('Silk threads tied to catheter, catheter pulled back — drags pack into nasopharynx')) story.append(bullet('Threads tied over a dental roll outside the nose')) story.append(bullet('Anterior nasal packing done simultaneously')) story.append(bullet(f'{B("Patient MUST be hospitalised")}')) story.append(sp(4)) story.append(body(f'{B("Modern method (Foley\'s catheter or Epistaxis balloon):")}')) story.append(bullet('Foley catheter inserted through nose; balloon inflated with 5–10 mL saline — blocks choana')) story.append(bullet('Anterior packing then done')) story.append(bullet(f'{B("Epistaxis balloon")} (modern device) has TWO balloons:')) story.append(subbullet('Posterior balloon (A): inflated with 10 mL — sits in nasopharynx')) story.append(subbullet('Anterior balloon (B): inflated with 30 mL — fills the nasal cavity')) story.append(h3('STEP 5 — ENDOSCOPIC CAUTERIZATION:')) story.append(bullet('Under topical or general anaesthesia')) story.append(bullet('Bleeding point found with a rigid endoscope, then cauterized directly')) story.append(h3('STEP 6 — ELEVATION OF MUCOPERIOCHONDRIAL FLAP / SMR OPERATION:')) story.append(bullet('For persistent or recurrent septal bleeds')) story.append(bullet('Mucoperiochondrial flap (lining of septum) is elevated and repositioned')) story.append(bullet('Causes fibrosis (scarring) that constricts blood vessels')) story.append(bullet('SMR operation can also remove septal spur (bony projection) causing epistaxis')) story.append(h3('STEP 7 — LIGATION OF VESSELS (Tying off arteries):')) story.append(bullet(f'{B("External carotid artery ligation")} — tied above origin of superior thyroid artery; mostly replaced by embolization now')) story.append(bullet(f'{B("Maxillary artery ligation")} — for uncontrollable posterior epistaxis; via Caldwell-Luc operation. Now superseded by TESPAL')) story.append(bullet(f'{B("Ethmoidal artery ligation")} — for anterosuperior bleeding; vessels exposed through Lynch incision (cut at inner corner of eye)')) story.append(sp(4)) story.append(body(f'{B("TESPAL — Transnasal Endoscopic Sphenopalatine Artery Ligation:")}')) story.append(bullet('Done with rigid endoscope under topical/general anaesthesia')) story.append(bullet('A mucosal flap is lifted in posterior nasal cavity')) story.append(bullet('SPA is found and ligated (clipped)')) story.append(bullet('High success rate for refractory posterior bleeding')) story.append(h3('STEP 8 — EMBOLIZATION:')) story.append(bullet('Done by an interventional radiologist')) story.append(bullet('Catheter passed through femoral artery (groin) up to internal maxillary artery')) story.append(bullet('Artery blocked using gelfoam, polyvinyl alcohol, or coils')) story.append(bullet('Both sides may need to be done (cross-circulation)')) story.append(bullet(f'Risk: {B("cerebral thromboembolism")}, haematoma at local site')) story.append(bullet(f'{B("Ethmoidal arteries CANNOT be embolized")} — too risky (internal carotid/ophthalmic artery)')) story.append(h3('GENERAL MEASURES (Always do alongside specific treatment):')) story.append(bullet('Sit patient up, note blood loss')) story.append(bullet('Reassure the patient + mild sedation')) story.append(bullet('Check pulse, BP, respiration')) story.append(bullet('Maintain haemodynamics — blood transfusion if needed')) story.append(bullet('Antibiotics if packing kept beyond 24 hours')) story.append(bullet('Intermittent oxygen if bilateral packing done (packing increases nasal resistance)')) story.append(bullet('Investigate and treat the underlying cause')) story.append(sp(6)) story.append(body(f'{B("Special Case — Hereditary Haemorrhagic Telangiectasia (HHT / Osler-Weber-Rendu disease):")}')) story.append(bullet('Abnormal blood vessels on nasal septum, tongue, palate, fingertips')) story.append(bullet('Causes recurrent nosebleeds')) story.append(bullet('Treated with: Argon, KTP, or Nd:YAG laser')) story.append(bullet('May need repeated treatments as telangiectasia recurs')) story.append(bullet('Some cases need septodermoplasty — remove front septal mucosa, replace with split-skin graft')) # FINAL SUMMARY TABLE story.append(PageBreak()) story.append(section_box('QUICK SUMMARY TABLE', '#2C3E7A')) story.append(sp(4)) summary_data = [ [Paragraph(B(''), table_header_style), Paragraph(B('Nasal Polyp'), table_header_style), Paragraph(B('Epistaxis'), table_header_style)], [Paragraph('What is it?', table_cell_style), Paragraph('Swollen grape-like lump in the nose', table_cell_style), Paragraph('Bleeding from inside the nose', table_cell_style)], [Paragraph('Type 1', table_cell_style), Paragraph('Antrochoanal: single, children, maxillary sinus', table_cell_style), Paragraph('Anterior: 90% from Little\'s area (front of septum)', table_cell_style)], [Paragraph('Type 2', table_cell_style), Paragraph('Ethmoidal: multiple, adults, ethmoid sinuses', table_cell_style), Paragraph('Posterior: Woodruff\'s plexus (back of nose)', table_cell_style)], [Paragraph('Main symptom', table_cell_style), Paragraph('Blocked nose', table_cell_style), Paragraph('Nosebleed', table_cell_style)], [Paragraph('Best investigation', table_cell_style), Paragraph('CT scan', table_cell_style), Paragraph('Clinical history + examination', table_cell_style)], [Paragraph('Best treatment', table_cell_style), Paragraph('FESS (Functional Endoscopic Sinus Surgery)', table_cell_style), Paragraph('Step-wise: Pinch → Pack → Cauterize → Ligate/Embolize', table_cell_style)], ] story.append(make_table(summary_data, [3.5*cm, 8*cm, 7*cm])) story.append(sp(20)) story.append(hr()) story.append(Paragraph('End of ENT Notes — Chapter 32 & 33', ParagraphStyle('Footer', parent=styles['Normal'], fontSize=9, textColor=colors.grey, alignment=TA_CENTER))) # BUILD PDF doc.build(story) print("PDF created successfully!") PYEOF
ENT Nasal Polypi and Epistaxis
PDF Document · PDF