Hello

Hi there! How can I help you today?

I am an Ent surgeon

Great to meet you! As an ENT (Ear, Nose & Throat) surgeon, you're working in one of the most technically demanding surgical specialties. I'm here to help with whatever you need — whether it's:
  • Clinical questions - diagnoses, differential workups, management protocols
  • Surgical topics - procedures, anatomy, techniques, complications
  • Pharmacology - medications, dosing, drug interactions relevant to ENT
  • Research - latest evidence, guidelines, PubMed literature
  • Education - explaining conditions to patients or trainees
What can I help you with today?
analyse_media
This is an intraoperative photograph showing the left nasal ala region in a patient under sterile draping. Here is what I can identify:

Findings

Anatomical region: Left alar lobule and nasal vestibule, close-up view.
Lesion: There is a prominent, engorged, lobulated, dark purplish-red vascular mass involving the left nasal ala, extending slightly toward the nasolabial area. The mass is:
  • Tense and highly vascular in appearance
  • Showing two points of active bright red bleeding (one on the alar rim, one lateral)
Intraoperative details:
  • A fine blue monofilament suture (likely 4-0 or 5-0 Prolene/nylon) is visible lateral to the lesion on the cheek skin - suggesting a stay or traction suture has been placed
  • Sterile gauze/pack visible superiorly (eye protection / nasal packing)
  • Towel clip/hemostatic forceps securing the drape

Differential Diagnosis

DiagnosisFavoring features
Pyogenic granuloma (lobular capillary hemangioma)Lobulated, friable, bleeds easily, alar location common
Vascular malformation (venous/arteriovenous)Engorged, tense, dark-red discoloration
Nasal vestibule furuncle/abscessTense, inflamed alar region
Kaposi sarcomaPurplish vascular lesion (less likely without context)
The appearance is most consistent with a pyogenic granuloma or a vascular lesion being excised/biopsied.

Could you share more clinical context - patient age, duration of lesion, any prior trauma or instrumentation? That would help narrow the diagnosis further. Are you in the middle of the procedure, or is this a pre-excision image?

I got a patient with unilateral snhl for 1 yr

Reading File
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Unilateral SNHL for 1 year is a red flag presentation that demands systematic evaluation. Here is a structured approach:

Unilateral SNHL - 1 Year Duration: Clinical Approach

Key Red Flag - Rule Out Vestibular Schwannoma First

"Any patient with unilateral SNHL and/or unilateral tinnitus, with or without balance disturbance, should be suspected of having a vestibular schwannoma."
  • Shambaugh Surgery of the Ear
"It is essential to perform MRI on all patients with persistent unilateral SNHL or tinnitus."
  • Bailey & Love's Surgery

Step 1: History

Must ask:
  • Onset: sudden vs. gradual?
  • Tinnitus (unilateral tinnitus is a key red flag)?
  • Vertigo / imbalance?
  • Aural fullness / ear pressure?
  • Any fluctuation in hearing?
  • Headache, facial numbness, visual disturbance (larger tumor)?
  • Family history of NF2 (bilateral VS)?
  • Prior noise exposure, ototoxic drugs, head trauma?
  • Systemic illness (autoimmune, syphilis, Lyme)?

Step 2: Physical Examination

  • Full otoscopy
  • Tuning fork tests (Weber lateralizes to better ear; Rinne positive bilaterally)
  • Neurotologic exam:
    • Spontaneous nystagmus (Frenzel lenses)
    • Romberg, Fukuda step test
    • Cranial nerve screen (especially V, VII, VIII, IX, X)
    • Cerebellar signs (finger-nose, heel-shin, gait)

Step 3: Investigations

InvestigationPurpose
Pure Tone Audiogram + Speech DiscriminationQuantify loss, note pattern
Tympanometry + Stapedial reflexesAbsent ipsilateral reflex suggests retrocochlear pathology
ABR (BERA)Retrocochlear screening - prolonged I-V interpeak latency
Gadolinium-enhanced MRI IAC/CPAGold standard - most sensitive for vestibular schwannoma
VEMP (cervical + ocular)Saccular/utricular function, aids tumor localization
Caloric testing / Video HITVestibular hypofunction on affected side

Differential Diagnosis

CauseFeatures
Vestibular schwannomaGradual progressive, tinnitus, mild imbalance
Sudden SNHL (resolved/residual)Acute onset, may have preceding viral illness
Meniere's diseaseEpisodic vertigo, fluctuating hearing, low-frequency loss
Autoimmune inner ear diseaseBilateral eventually, responds to steroids
CPA meningioma / epidermoidMRI differentiates
Endolymphatic sac tumorProgressive unilateral SNHL + tinnitus
Syphilis / LymeSerology, systemic features
Labyrinthitis (viral/bacterial)Acute onset, often with vertigo
NF2Bilateral, family history
Superior semicircular canal dehiscenceAutophony, low frequency air-bone gap

Bottom Line Protocol

  1. Gadolinium MRI of IAC/CPA - mandatory for any unexplained unilateral SNHL lasting > 3 months
  2. Full audiological battery including speech discrimination scores
  3. Neurotologic exam for vestibular and cranial nerve involvement
  4. If MRI negative, broaden workup: FTA-ABS (syphilis), ANA/anti-Ro/La (autoimmune), ESR, CBC

Would you like to go deeper on any specific aspect - audiogram interpretation, MRI findings, or management once a diagnosis is established?

Can u give me some template for my work in opd

Asking for Preferences
Reading File
Running Command

ls /home/daytona/workspace/ && mkdir -p /home/daytona/workspace/ent-opd-template

Writing File

~/ent-opd-template/create_template.js

const {
  Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
  AlignmentType, HeadingLevel, BorderStyle, WidthType, VerticalAlign,
  ShadingType, Header, PageNumber, NumberFormat, UnderlineType
} = require('docx');
const fs = require('fs');

// Helper: section heading paragraph
function sectionHeading(text) {
  return new Paragraph({
    children: [new TextRun({ text, bold: true, size: 24, color: '1F4E79' })],
    spacing: { before: 200, after: 80 },
    border: {
      bottom: { style: BorderStyle.SINGLE, size: 6, color: '1F4E79' }
    }
  });
}

// Helper: label + blank line row (single-column fill-in)
function fillLine(label, width = 9000) {
  return new Paragraph({
    children: [
      new TextRun({ text: label + '  ', bold: true, size: 20 }),
      new TextRun({ text: '_'.repeat(60), size: 20, color: 'AAAAAA' })
    ],
    spacing: { before: 60, after: 60 }
  });
}

// Helper: two-column fill row
function twoColFill(label1, label2) {
  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    borders: {
      top: { style: BorderStyle.NONE }, bottom: { style: BorderStyle.NONE },
      left: { style: BorderStyle.NONE }, right: { style: BorderStyle.NONE },
      insideH: { style: BorderStyle.NONE }, insideV: { style: BorderStyle.NONE }
    },
    rows: [new TableRow({
      children: [
        new TableCell({
          width: { size: 50, type: WidthType.PERCENTAGE },
          borders: { top: { style: BorderStyle.NONE }, bottom: { style: BorderStyle.NONE }, left: { style: BorderStyle.NONE }, right: { style: BorderStyle.NONE } },
          children: [new Paragraph({
            children: [
              new TextRun({ text: label1 + '  ', bold: true, size: 20 }),
              new TextRun({ text: '_'.repeat(30), size: 20, color: 'AAAAAA' })
            ], spacing: { before: 60, after: 60 }
          })]
        }),
        new TableCell({
          width: { size: 50, type: WidthType.PERCENTAGE },
          borders: { top: { style: BorderStyle.NONE }, bottom: { style: BorderStyle.NONE }, left: { style: BorderStyle.NONE }, right: { style: BorderStyle.NONE } },
          children: [new Paragraph({
            children: [
              new TextRun({ text: label2 + '  ', bold: true, size: 20 }),
              new TextRun({ text: '_'.repeat(30), size: 20, color: 'AAAAAA' })
            ], spacing: { before: 60, after: 60 }
          })]
        })
      ]
    })]
  });
}

// Helper: checkbox row
function checkboxRow(items) {
  const runs = [];
  items.forEach((item, i) => {
    runs.push(new TextRun({ text: '☐ ' + item + '   ', size: 20 }));
  });
  return new Paragraph({ children: runs, spacing: { before: 60, after: 60 } });
}

// Helper: titled checkbox group
function checkboxGroup(label, items) {
  return [
    new Paragraph({
      children: [new TextRun({ text: label, bold: true, size: 20 })],
      spacing: { before: 80, after: 40 }
    }),
    checkboxRow(items)
  ];
}

// Helper: empty line
function emptyLine() {
  return new Paragraph({ text: '', spacing: { before: 40, after: 40 } });
}

// ─── DOCUMENT ─────────────────────────────────────────────────────────────────

const doc = new Document({
  styles: {
    default: {
      document: {
        run: { font: 'Calibri', size: 20 }
      }
    }
  },
  sections: [{
    properties: {
      page: {
        margin: { top: 720, bottom: 720, left: 900, right: 900 }
      }
    },
    headers: {
      default: new Header({
        children: [new Paragraph({
          children: [
            new TextRun({ text: 'ENT OPD CONSULTATION PROFORMA', bold: true, size: 28, color: '1F4E79' })
          ],
          alignment: AlignmentType.CENTER,
          border: { bottom: { style: BorderStyle.THICK, size: 8, color: '1F4E79' } },
          spacing: { after: 100 }
        })]
      })
    },
    children: [

      // ── PATIENT DETAILS ─────────────────────────────────────────────────────
      sectionHeading('PATIENT DETAILS'),
      twoColFill('Name:', 'Date:'),
      twoColFill('Age:', 'Sex:  ☐ M   ☐ F   ☐ Other'),
      twoColFill('OP No.:', 'Referred by:'),
      fillLine('Address / Contact:'),

      emptyLine(),

      // ── CHIEF COMPLAINT ─────────────────────────────────────────────────────
      sectionHeading('CHIEF COMPLAINT'),
      fillLine('Chief Complaint:'),
      fillLine('Duration:'),

      emptyLine(),

      // ── EAR SYMPTOMS ────────────────────────────────────────────────────────
      sectionHeading('EAR SYMPTOMS'),
      ...checkboxGroup('Hearing:', ['Normal', 'Decreased - Right', 'Decreased - Left', 'Bilateral decrease', 'Sudden onset', 'Gradual onset', 'Fluctuating']),
      ...checkboxGroup('Type of Loss (if known):', ['Conductive', 'Sensorineural', 'Mixed']),
      ...checkboxGroup('Tinnitus:', ['Absent', 'Right', 'Left', 'Bilateral', 'Pulsatile', 'Non-pulsatile']),
      ...checkboxGroup('Vertigo / Dizziness:', ['Absent', 'Episodic vertigo', 'Constant imbalance', 'BPPV-type', 'With nausea/vomiting']),
      ...checkboxGroup('Ear Discharge:', ['Absent', 'Right', 'Left', 'Bilateral', 'Purulent', 'Mucoid', 'Blood-stained', 'Foul-smelling']),
      ...checkboxGroup('Otalgia:', ['Absent', 'Right', 'Left', 'Constant', 'Intermittent']),
      ...checkboxGroup('Aural Fullness:', ['Absent', 'Right', 'Left']),
      fillLine('Other Ear Symptoms:'),

      emptyLine(),

      // ── NOSE & SINUS SYMPTOMS ───────────────────────────────────────────────
      sectionHeading('NOSE & SINUS SYMPTOMS'),
      ...checkboxGroup('Nasal Obstruction:', ['Absent', 'Right', 'Left', 'Bilateral', 'Constant', 'Intermittent']),
      ...checkboxGroup('Rhinorrhoea:', ['Absent', 'Watery', 'Mucoid', 'Mucopurulent', 'Blood-stained', 'Unilateral', 'Bilateral']),
      ...checkboxGroup('Epistaxis:', ['Absent', 'Right', 'Left', 'Bilateral', 'Recurrent']),
      ...checkboxGroup('Smell:', ['Normal', 'Hyposmia', 'Anosmia', 'Parosmia']),
      ...checkboxGroup('Sneezing / Allergy:', ['Absent', 'Sneezing', 'Itching', 'Watery eyes', 'Seasonal', 'Perennial']),
      ...checkboxGroup('Facial Pain / Headache:', ['Absent', 'Frontal', 'Maxillary', 'Ethmoidal', 'Occipital', 'Post-nasal drip']),

      emptyLine(),

      // ── THROAT / ORAL SYMPTOMS ──────────────────────────────────────────────
      sectionHeading('THROAT & ORAL SYMPTOMS'),
      ...checkboxGroup('Sore Throat:', ['Absent', 'Acute', 'Recurrent', 'Chronic']),
      ...checkboxGroup('Dysphagia:', ['Absent', 'Solids', 'Liquids', 'Both']),
      ...checkboxGroup('Voice Change:', ['Absent', 'Hoarseness', 'Dysphonia', 'Aphonia', 'Nasal voice', 'Weak voice']),
      ...checkboxGroup('Stridor:', ['Absent', 'Inspiratory', 'Expiratory', 'Biphasic']),
      ...checkboxGroup('Neck Swelling:', ['Absent', 'Midline', 'Right', 'Left', 'Bilateral', 'Painful', 'Painless']),
      ...checkboxGroup('Snoring / Sleep Apnoea:', ['Absent', 'Snoring', 'Witnessed apnoeas', 'Daytime somnolence', 'OSA diagnosed']),
      fillLine('Other Throat Symptoms:'),

      emptyLine(),

      // ── PAST HISTORY ────────────────────────────────────────────────────────
      sectionHeading('PAST HISTORY'),
      ...checkboxGroup('Previous ENT Surgery:', ['None', 'Myringoplasty', 'Tympanoplasty', 'Mastoidectomy', 'FESS', 'Septoplasty', 'Tonsillectomy', 'Adenoidectomy', 'Laryngoscopy', 'Other']),
      fillLine('Other Surgery:'),
      fillLine('Medical History (DM / HTN / Thyroid / Autoimmune / Other):'),
      ...checkboxGroup('Medications:', ['None', 'Ototoxic drugs (aminoglycosides, loop diuretics, cisplatin)', 'Anticoagulants', 'NSAIDs', 'Other']),
      fillLine('Allergies:'),

      emptyLine(),

      // ── SOCIAL HISTORY ──────────────────────────────────────────────────────
      sectionHeading('SOCIAL HISTORY'),
      ...checkboxGroup('Noise Exposure:', ['None', 'Occupational', 'Recreational (music/firearms)']),
      ...checkboxGroup('Smoking:', ['Non-smoker', 'Ex-smoker', 'Current smoker']),
      ...checkboxGroup('Alcohol:', ['None', 'Occasional', 'Regular']),
      twoColFill('Occupation:', 'Family History (ENT / NF2):'),

      emptyLine(),

      // ── GENERAL EXAMINATION ─────────────────────────────────────────────────
      sectionHeading('GENERAL EXAMINATION'),
      twoColFill('Built / Nourishment:', 'Pallor / Icterus / Clubbing:'),
      twoColFill('Pulse:', 'BP:'),
      twoColFill('Temp:', 'SpO2:'),
      fillLine('LN (cervical / submandibular / parotid):'),

      emptyLine(),

      // ── EAR EXAMINATION ─────────────────────────────────────────────────────
      sectionHeading('EAR EXAMINATION'),

      new Paragraph({
        children: [new TextRun({ text: 'Otoscopy', bold: true, size: 22, underline: { type: UnderlineType.SINGLE } })],
        spacing: { before: 100, after: 60 }
      }),

      new Table({
        width: { size: 100, type: WidthType.PERCENTAGE },
        rows: [
          new TableRow({
            tableHeader: true,
            children: [
              new TableCell({ children: [new Paragraph({ children: [new TextRun({ text: 'Finding', bold: true, size: 20 })], alignment: AlignmentType.CENTER })], shading: { type: ShadingType.CLEAR, fill: 'BDD7EE' } }),
              new TableCell({ children: [new Paragraph({ children: [new TextRun({ text: 'RIGHT EAR', bold: true, size: 20 })], alignment: AlignmentType.CENTER })], shading: { type: ShadingType.CLEAR, fill: 'BDD7EE' } }),
              new TableCell({ children: [new Paragraph({ children: [new TextRun({ text: 'LEFT EAR', bold: true, size: 20 })], alignment: AlignmentType.CENTER })], shading: { type: ShadingType.CLEAR, fill: 'BDD7EE' } })
            ]
          }),
          ...['Pinna / Tragus / Post-auricular', 'EAC (Meatus)', 'Tympanic Membrane', 'TM Perforation (if present)', 'Middle ear / Discharge', 'Remarks'].map(label =>
            new TableRow({
              children: [
                new TableCell({ children: [new Paragraph({ children: [new TextRun({ text: label, size: 20 })] })] }),
                new TableCell({ children: [new Paragraph({ text: '' })] }),
                new TableCell({ children: [new Paragraph({ text: '' })] })
              ]
            })
          )
        ]
      }),

      emptyLine(),

      new Paragraph({
        children: [new TextRun({ text: 'Tuning Fork Tests', bold: true, size: 22, underline: { type: UnderlineType.SINGLE } })],
        spacing: { before: 100, after: 60 }
      }),

      new Table({
        width: { size: 100, type: WidthType.PERCENTAGE },
        rows: [
          new TableRow({
            tableHeader: true,
            children: [
              new TableCell({ children: [new Paragraph({ children: [new TextRun({ text: 'Test', bold: true, size: 20 })], alignment: AlignmentType.CENTER })], shading: { type: ShadingType.CLEAR, fill: 'BDD7EE' } }),
              new TableCell({ children: [new Paragraph({ children: [new TextRun({ text: 'Frequency', bold: true, size: 20 })], alignment: AlignmentType.CENTER })], shading: { type: ShadingType.CLEAR, fill: 'BDD7EE' } }),
              new TableCell({ children: [new Paragraph({ children: [new TextRun({ text: 'Result', bold: true, size: 20 })], alignment: AlignmentType.CENTER })], shading: { type: ShadingType.CLEAR, fill: 'BDD7EE' } })
            ]
          }),
          ...['Rinne (Right)', 'Rinne (Left)', 'Weber', 'Absolute Bone Conduction (ABC)'].map(label =>
            new TableRow({
              children: [
                new TableCell({ children: [new Paragraph({ children: [new TextRun({ text: label, size: 20 })] })] }),
                new TableCell({ children: [new Paragraph({ children: [new TextRun({ text: '512 Hz', size: 20 })] })] }),
                new TableCell({ children: [new Paragraph({ text: '' })] })
              ]
            })
          )
        ]
      }),

      emptyLine(),

      // ── NOSE EXAMINATION ────────────────────────────────────────────────────
      sectionHeading('NOSE EXAMINATION'),
      fillLine('External Nose:'),
      fillLine('Anterior Rhinoscopy - Septum:'),
      fillLine('Turbinates:'),
      fillLine('Discharge / Polyp / Mass:'),
      fillLine('Posterior Rhinoscopy / Nasopharynx:'),
      fillLine('PNS Tenderness:'),

      emptyLine(),

      // ── THROAT EXAMINATION ──────────────────────────────────────────────────
      sectionHeading('THROAT EXAMINATION'),
      fillLine('Oral cavity / Teeth / Gums:'),
      fillLine('Oropharynx / Tonsils / Posterior pharyngeal wall:'),
      fillLine('Tonsil size (Brodsky):  ☐ T1   ☐ T2   ☐ T3   ☐ T4'),
      fillLine('Indirect Laryngoscopy / Flexible Nasopharyngoscopy:'),
      fillLine('Vocal Cords:'),
      fillLine('Subglottis / Trachea:'),

      emptyLine(),

      // ── NECK EXAMINATION ────────────────────────────────────────────────────
      sectionHeading('NECK EXAMINATION'),
      fillLine('Lymph Nodes (site / size / consistency / mobility):'),
      fillLine('Thyroid / Parotid / Other swelling:'),

      emptyLine(),

      // ── INVESTIGATIONS ──────────────────────────────────────────────────────
      sectionHeading('INVESTIGATIONS'),
      ...checkboxGroup('Audiology:', ['PTA', 'Tympanometry', 'BERA/ABR', 'OAE', 'VEMP', 'Speech audiometry']),
      ...checkboxGroup('Imaging:', ['X-ray PNS (Waters / PA)', 'HRCT Temporal Bone', 'CT PNS', 'MRI IAC with Gadolinium', 'MRI brain', 'CT Neck', 'MRI Neck', 'USG Neck']),
      ...checkboxGroup('Bloods:', ['CBC', 'ESR', 'CRP', 'Blood glucose', 'Thyroid function', 'FTA-ABS / VDRL', 'ANA / Anti-dsDNA', 'LFT', 'RFT']),
      ...checkboxGroup('Microbiology:', ['Ear swab C/S', 'Throat swab', 'Nasal swab']),
      ...checkboxGroup('Biopsy / Histology:', ['Nasal biopsy', 'Ear biopsy', 'Throat / Tonsil biopsy', 'Neck FNAC']),
      fillLine('Other:'),

      emptyLine(),

      // ── DIAGNOSIS ───────────────────────────────────────────────────────────
      sectionHeading('DIAGNOSIS / IMPRESSION'),
      fillLine('Provisional Diagnosis:'),
      fillLine('Differential Diagnosis:'),

      emptyLine(),

      // ── MANAGEMENT ──────────────────────────────────────────────────────────
      sectionHeading('MANAGEMENT PLAN'),
      ...checkboxGroup('Plan:', ['Medicines', 'Investigations ordered', 'Review with reports', 'Refer to Audiology', 'Refer to Neurotology', 'Refer to Ophthalmology', 'Refer to Neurology', 'Surgical plan', 'Admission']),
      fillLine('Rx / Medications:'),
      fillLine('Patient Counselling:'),
      twoColFill('Follow-up:', 'Surgeon Signature:'),

      emptyLine(),

      new Paragraph({
        children: [new TextRun({ text: '─────────────────────────────────────────────────────────────────', color: 'CCCCCC', size: 16 })],
        alignment: AlignmentType.CENTER
      }),
      new Paragraph({
        children: [new TextRun({ text: 'ENT OPD Proforma  |  Confidential Medical Record', size: 16, color: '888888', italics: true })],
        alignment: AlignmentType.CENTER
      })
    ]
  }]
});

Packer.toBuffer(doc).then(buffer => {
  fs.writeFileSync('/home/daytona/workspace/ent-opd-template/ENT_OPD_Proforma.docx', buffer);
  console.log('Done: ENT_OPD_Proforma.docx created successfully.');
});
Running Command

cd /home/daytona/workspace/ent-opd-template && node create_template.js

Running Command

python /home/daytona/skills/docx/scripts/office/validate.py /home/daytona/worksp…

Running Command

cd /home/daytona/workspace/ent-opd-template && python3 -c " import zipfile, os w…

Your ENT OPD proforma is ready. Download it here:

ENT OPD Proforma

Word Document · DOCX


What's included in the template:
SectionContents
Patient DetailsName, age, sex, OP number, date, referral
Chief ComplaintFree text + duration
Ear SymptomsHearing loss, tinnitus, vertigo, discharge, otalgia, aural fullness - all with checkboxes
Nose & Sinus SymptomsObstruction, rhinorrhoea, epistaxis, smell, allergy, facial pain
Throat & Oral SymptomsDysphagia, hoarseness, stridor, neck swelling, snoring/OSA
Past HistoryPrior ENT surgery (specific procedures), medical conditions, ototoxic medications
Social HistoryNoise exposure, smoking, alcohol, occupation, family history
General ExaminationVitals, LN, built
Ear ExaminationOtoscopy table (Right/Left), tuning fork tests (Rinne, Weber, ABC)
Nose ExaminationAnterior/posterior rhinoscopy, septal findings, turbinates
Throat ExaminationOral cavity, tonsil grading (Brodsky), ILS/flexible scope findings, vocal cords
Neck ExaminationLN, thyroid, parotid
InvestigationsCheckboxes for audiology, imaging, bloods, microbiology, biopsy
Diagnosis / ManagementProvisional + differential diagnosis, Rx, plan, follow-up, signature
Open in Word - you can fill it digitally or print for paper-based OPD use. Let me know if you want any section added or customized (e.g., your hospital name/logo in the header).
This is a shared conversation. Sign in to Orris to start your own chat.