Detailed format of history taking of ENT every detail
Create an ENT history-taking checklist PDF
otolaryngology AND history taking
ENT history taking checklist otolaryngology professional guide
~/
mkdir -p "/tmp/workspace/ent-history-checklist/src" "/tmp/workspace/ent-history-checklist/output" && python - <<'PY' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import mm from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, PageBreak, KeepTogether from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics from reportlab.lib.enums import TA_CENTER, TA_LEFT from reportlab.pdfbase.pdfmetrics import stringWidth from pathlib import Path out=Path('/tmp/workspace/ent-history-checklist/output/ENT_History_Taking_Checklist.pdf') NAVY=colors.HexColor('#123047'); TEAL=colors.HexColor('#087E8B'); LIGHT=colors.HexColor('#EAF4F5'); PALE=colors.HexColor('#F6F8FA'); GREY=colors.HexColor('#5D6B75'); RED=colors.HexColor('#A53030'); AMBER=colors.HexColor('#FFF5D6') styles=getSampleStyleSheet() styles.add(ParagraphStyle(name='Title2', parent=styles['Title'], fontName='Helvetica-Bold', fontSize=20, leading=24, textColor=NAVY, alignment=TA_CENTER, spaceAfter=4)) styles.add(ParagraphStyle(name='Sub', parent=styles['Normal'], fontName='Helvetica', fontSize=9.5, leading=13, textColor=GREY, alignment=TA_CENTER, spaceAfter=10)) styles.add(ParagraphStyle(name='H', parent=styles['Heading2'], fontName='Helvetica-Bold', fontSize=13, leading=16, textColor=colors.white, spaceBefore=7, spaceAfter=5)) styles.add(ParagraphStyle(name='SH', parent=styles['Heading3'], fontName='Helvetica-Bold', fontSize=10.2, leading=13, textColor=NAVY, spaceBefore=5, spaceAfter=3)) styles.add(ParagraphStyle(name='Body2', parent=styles['BodyText'], fontName='Helvetica', fontSize=8.4, leading=11.2, textColor=colors.HexColor('#202A30'), spaceAfter=3)) styles.add(ParagraphStyle(name='Small', parent=styles['BodyText'], fontName='Helvetica', fontSize=7.4, leading=9.4, textColor=GREY)) styles.add(ParagraphStyle(name='Red', parent=styles['BodyText'], fontName='Helvetica-Bold', fontSize=8.2, leading=10.5, textColor=RED)) def P(t, style='Body2'): return Paragraph(t, styles[style]) def section(title): return Table([[P(title,'H')]], colWidths=[180*mm], style=[('BACKGROUND',(0,0),(-1,-1),TEAL),('LEFTPADDING',(0,0),(-1,-1),5*mm),('RIGHTPADDING',(0,0),(-1,-1),5*mm),('TOPPADDING',(0,0),(-1,-1),2*mm),('BOTTOMPADDING',(0,0),(-1,-1),2*mm)]) def checklist(items): rows=[] for item in items: rows.append([P('☐','Body2'),P(item,'Body2')]) return Table(rows, colWidths=[7*mm,173*mm], hAlign='LEFT', style=[('VALIGN',(0,0),(-1,-1),'TOP'),('LEFTPADDING',(0,0),(-1,-1),1.5*mm),('RIGHTPADDING',(0,0),(-1,-1),1*mm),('TOPPADDING',(0,0),(-1,-1),1.2*mm),('BOTTOMPADDING',(0,0),(-1,-1),1.2*mm),('LINEBELOW',(0,0),(-1,-1),0.15,colors.HexColor('#D8E0E5'))]) def info_table(rows): return Table([[P(a,'Small'),P(b,'Body2'),P(c,'Small'),P(d,'Body2')] for a,b,c,d in rows], colWidths=[25*mm,65*mm,27*mm,63*mm], style=[('GRID',(0,0),(-1,-1),0.35,colors.HexColor('#BAC7CF')),('BACKGROUND',(0,0),(0,-1),PALE),('BACKGROUND',(2,0),(2,-1),PALE),('VALIGN',(0,0),(-1,-1),'MIDDLE'),('LEFTPADDING',(0,0),(-1,-1),2*mm),('RIGHTPADDING',(0,0),(-1,-1),2*mm),('TOPPADDING',(0,0),(-1,-1),2*mm),('BOTTOMPADDING',(0,0),(-1,-1),2*mm)]) def footer(canvas,doc): canvas.saveState(); canvas.setStrokeColor(colors.HexColor('#C8D5DA')); canvas.line(15*mm,12*mm,195*mm,12*mm) canvas.setFont('Helvetica',7.2); canvas.setFillColor(GREY) canvas.drawString(15*mm,7.5*mm,'ENT History-Taking Checklist | Educational clinical prompt sheet') canvas.drawRightString(195*mm,7.5*mm,f'Page {doc.page}') canvas.restoreState() doc=SimpleDocTemplate(str(out),pagesize=A4,rightMargin=15*mm,leftMargin=15*mm,topMargin=13*mm,bottomMargin=17*mm,title='ENT History-Taking Checklist',author='Orris') story=[] story += [P('ENT HISTORY-TAKING CHECKLIST','Title2'),P('A structured clinical and OSCE prompt sheet for ear, nose, throat, larynx, and neck presentations','Sub')] story += [info_table([('Patient name','', 'Date / time',''),('Age / sex','', 'Clinician',''),('Setting / source','', 'Reliability / interpreter','')]),Spacer(1,4*mm)] story += [section('1. OPENING, PRESENTING COMPLAINT, AND HISTORY OF PRESENT ILLNESS'),Spacer(1,2*mm)] story += [checklist([ '<b>Introduce, confirm identity, explain purpose, obtain consent, and ensure comfort, privacy, and communication needs.</b>', '<b>Presenting complaint(s):</b> Record in the patient’s words. Which region is involved: ear, nose/sinuses, oral cavity/throat, voice/airway, or neck?', '<b>Timeline:</b> onset (sudden or gradual), duration, first or recurrent episode, progression, constant or intermittent pattern, and prior baseline.', '<b>Character and severity:</b> site and side (right, left, bilateral), quality, intensity, frequency, duration of attacks, quantity where relevant, and functional impact.', '<b>Context:</b> precipitating and relieving factors; recent upper-respiratory infection, trauma, water exposure, travel, barotrauma, sick contacts, allergens, voice use, dental disease, or foreign body.', '<b>Associated symptoms:</b> Ask region-specific questions on later pages and establish what has been absent as well as present.', '<b>Previous assessment and treatment:</b> consultations, tests, antibiotics, steroids, analgesia, drops/sprays, inhalers, procedures, response, adverse effects, and adherence.' ]),Spacer(1,3*mm), section('2. IMMEDIATE SAFETY SCREEN'),Spacer(1,2*mm)] story += [Table([[P('<b>Escalate urgently if present</b>','Red')],[P('☐ Stridor, severe breathlessness, inability to speak full sentences, rapidly progressive throat/neck swelling, drooling, or inability to handle secretions.','Red')],[P('☐ Severe systemic illness, suspected deep neck infection, facial/orbital swelling or visual symptoms with sinus disease, meningism, or focal neurological deficit.','Red')],[P('☐ Sudden sensorineural hearing loss, acute facial weakness, post-traumatic CSF leak, uncontrolled epistaxis, or airway/burn/caustic injury.','Red')]],colWidths=[180*mm],style=[('BACKGROUND',(0,0),(-1,0),AMBER),('BOX',(0,0),(-1,-1),0.7,colors.HexColor('#D4971D')),('LINEBELOW',(0,1),(-1,-2),0.2,colors.HexColor('#E5C36F')),('LEFTPADDING',(0,0),(-1,-1),3*mm),('RIGHTPADDING',(0,0),(-1,-1),3*mm),('TOPPADDING',(0,0),(-1,-1),1.8*mm),('BOTTOMPADDING',(0,0),(-1,-1),1.8*mm)]),Spacer(1,3*mm)] story += [P('<b>Clinical note:</b> This checklist supports, but does not replace, clinical judgement, local pathways, examination, and urgent senior/ENT review when indicated.','Small')] story.append(PageBreak()) story += [section('3. EAR (OTOLOGICAL) HISTORY'),Spacer(1,2*mm)] for h,items in [ ('Hearing and communication',['☐ Hearing change: side, sudden or gradual onset, fluctuating or progressive, severity, speech understanding, impact on work/school, telephone use, and need to increase volume.','☐ Ask about conductive clues: aural fullness, autophony, “blocked ear”, symptoms varying with pressure or colds.','☐ Ask about sensorineural clues: distortion, poor speech discrimination, recruitment, hyperacusis, or difficulty in background noise.','☐ Tinnitus: unilateral/bilateral, pulsatile or non-pulsatile, constant/intermittent, sound quality, sleep and distress impact.']), ('Pain, discharge, and local symptoms',['☐ Otalgia: site, severity, radiation (jaw, throat, teeth), relation to swallowing, chewing, touch, or movement of pinna.','☐ Otorrhoea: side, onset, amount, colour, odour, blood, clear fluid after trauma, relation to water exposure, and recurrent episodes.','☐ Itching, blocked sensation, foreign-body sensation, bleeding, crusting, or skin lesions around ear.']), ('Balance and neurological symptoms',['☐ Vertigo/dizziness: spinning versus light-headedness, onset, duration, triggers (position, head movement), nausea/vomiting, falls, and hearing association.','☐ Screen for neurological symptoms: facial weakness/numbness, diplopia, dysarthria, limb weakness, severe headache, ataxia, or collapse.']), ('Risk factors and background',['☐ Recent URTI, swimming/diving, flying, blast/noise exposure, ear instrumentation/cotton buds, hearing aids, trauma, surgery, recurrent otitis, perforation, cholesteatoma, or mastoid disease.','☐ Ototoxic exposure: relevant medicines, chemotherapy, aminoglycosides, loop diuretics; occupational/recreational noise; family history of early hearing loss.'])]: story += [P(h,'SH'),checklist(items)] story.append(PageBreak()) story += [section('4. NOSE AND PARANASAL SINUS HISTORY'),Spacer(1,2*mm)] for h,items in [ ('Nasal obstruction and discharge',['☐ Nasal blockage: unilateral/bilateral, alternating or fixed, seasonal/perennial, day/night pattern, exercise or posture effect, mouth breathing, and sleep impairment.','☐ Rhinorrhoea/postnasal drip: watery or purulent, side, quantity, blood staining, foul smell, clear unilateral watery leak after trauma/surgery.','☐ Sneezing, itching of nose/eyes/palate, watery eyes, known allergens, pets, dust, mould, pollen, food or occupational triggers.']), ('Smell, bleeding, and facial symptoms',['☐ Smell/taste change: reduced, absent, distorted, phantom smell; onset after infection, trauma, obstruction, or medication.','☐ Epistaxis: side, frequency, duration, approximate volume, anterior/posterior sensation, triggers (nose picking, trauma, sprays), first aid used, and need for packing/transfusion.','☐ Facial pain/pressure, headache, dental pain, fever, halitosis, purulent discharge, symptom duration, and recurrent acute or chronic pattern.']), ('Sleep and complications',['☐ Snoring, witnessed apnoeas, choking/gasping, non-restorative sleep, daytime sleepiness, morning headache, and impaired concentration.','☐ Ask for eye swelling, visual change/diplopia, severe frontal headache, altered consciousness, or focal neurological signs when sinus disease is suspected.']), ('Risk factors and treatment',['☐ Prior nasal fracture/surgery, polyps, sinus procedures, foreign body, cocaine/intranasal drug use, smoking/vaping, immunosuppression, aspirin/NSAID sensitivity, asthma, eczema, and dental infection.','☐ Current treatments: saline, topical decongestants and duration, intranasal steroids/technique, antihistamines, antibiotics, anticoagulants, and response.'])]: story += [P(h,'SH'),checklist(items)] story.append(PageBreak()) story += [section('5. MOUTH, THROAT, LARYNX, SWALLOWING, AND AIRWAY'),Spacer(1,2*mm)] for h,items in [ ('Throat and oral cavity',['☐ Sore throat: duration, side, severity, fever, recurrent tonsillitis, referred ear pain, trismus, muffled “hot potato” voice, and previous abscess.','☐ Oral lesions: ulcer, lump, white/red patch, bleeding, pain, dental trauma, poorly fitting dentures, tongue mobility, and duration beyond 3 weeks.','☐ Dry mouth, altered taste, halitosis, dental symptoms, salivary swelling or pain with meals.']), ('Voice, cough, and breathing',['☐ Dysphonia: onset, duration, intermittent/persistent, vocal demand, voice fatigue, pitch/volume change, throat clearing, cough, and prior intubation or neck/chest surgery.','☐ Airway: noisy breathing/stridor, dyspnoea, wheeze, choking, positional symptoms, aspiration episodes, and progression.','☐ Reflux-associated symptoms: heartburn, regurgitation, sour taste, nocturnal cough, globus, chronic throat clearing, and relation to food/lying down.']), ('Swallowing',['☐ Dysphagia: solids, liquids, or both; initiation versus food sticking; site; progressive/intermittent; odynophagia; regurgitation; coughing/choking; nasal regurgitation; aspiration or recurrent chest infections.','☐ Nutrition/hydration: reduced intake, modified diet, weight loss, dehydration, feeding tube, and effect on activities.'])]: story += [P(h,'SH'),checklist(items)] story += [Spacer(1,2*mm),section('6. NECK MASS AND HEAD-AND-NECK CANCER SCREEN'),Spacer(1,2*mm),checklist([ '☐ Neck swelling: site, duration, pain, growth rate, fluctuation with infection/meals/valsalva, skin change, discharge, and other lumps.', '☐ Red flags: persistent unilateral sore throat or otalgia, dysphagia/odynophagia, persistent hoarseness, oral lesion, hemoptysis, nasal obstruction/epistaxis, unexplained weight loss, drenching sweats, or persistent neck mass.', '☐ Risk: tobacco in all forms, alcohol, betel/areca nut, HPV-related risk where appropriate, prior head-and-neck cancer or radiotherapy, occupational exposures, and immunosuppression.' ])] story.append(PageBreak()) story += [section('7. BACKGROUND HISTORY AND CLOSING THE CONSULTATION'),Spacer(1,2*mm)] for h,items in [ ('Past history',['☐ ENT history: childhood ear disease/grommets, hearing loss, recurrent tonsillitis, sinusitis/polyps, allergy/asthma, reflux, sleep apnoea, trauma, hospital admissions, surgery, radiotherapy, or prior malignancy.','☐ Medical history: diabetes, bleeding disorder, hypertension, immune compromise, neurological disease, autoimmune disease, tuberculosis, and relevant respiratory/cardiac disease.']), ('Medication and allergy history',['☐ List prescribed, over-the-counter, herbal, and intranasal/otic preparations. Ask about anticoagulants/antiplatelets, steroids/immunosuppressants, ototoxic drugs, and recent antibiotics.','☐ Drug, latex, and food allergies: reaction type and severity.']), ('Family, social, and functional history',['☐ Family history: hearing loss, otosclerosis, allergy/atopy, bleeding disorders, head-and-neck cancer, and genetic conditions where relevant.','☐ Smoking/vaping, alcohol quantity, recreational drugs, occupation (noise, dust, chemicals), voice use, housing/environmental allergens, and travel.','☐ Function: work/school, communication, sleep, diet, mobility/falls, mood/anxiety, support system, and patient concerns, ideas, expectations.']), ('System review and closure',['☐ Targeted review: fever, fatigue, weight/appetite change, skin rash, eye symptoms, chest symptoms, neurological symptoms, and endocrine symptoms as relevant.','☐ Summarise the history, check accuracy, explain next steps, safety-net urgent symptoms, and invite final questions.'])]: story += [P(h,'SH'),checklist(items)] story += [Spacer(1,3*mm),section('ONE-LINE CLINICAL SUMMARY'),Spacer(1,2*mm)] story += [Table([[P('Age/sex + key complaint and duration + laterality + key associated symptoms + major risk/red flag status + functional impact.','Body2')],[P('<br/><br/><br/><br/>','Body2')]],colWidths=[180*mm],style=[('BOX',(0,0),(-1,-1),0.5,colors.HexColor('#96AAB5')),('BACKGROUND',(0,0),(-1,0),LIGHT),('LEFTPADDING',(0,0),(-1,-1),3*mm),('RIGHTPADDING',(0,0),(-1,-1),3*mm),('TOPPADDING',(0,0),(-1,-1),2*mm),('BOTTOMPADDING',(0,0),(-1,-1),2*mm)])] story += [Spacer(1,3*mm),P('Suggested use: select the relevant symptom pathway rather than asking every question mechanically. Adapt for age, communication ability, culture, and clinical setting.','Small')] doc.build(story,onFirstPage=footer,onLaterPages=footer) print(out) PY python - <<'PY' from pypdf import PdfReader p='/tmp/workspace/ent-history-checklist/output/ENT_History_Taking_Checklist.pdf' r=PdfReader(p) text='\n'.join(page.extract_text() or '' for page in r.pages) print('pages=',len(r.pages),'chars=',len(text),'has Ear=', 'EAR (OTOLOGICAL)' in text, 'has Nose=', 'NOSE AND PARANASAL' in text) PY
~/ent-history-checklist/output
ENT History Taking Checklist
PDF Document · PDF
Same for ear in detailed like everthing
ear symptoms AND diagnostic history
ear history taking hearing loss tinnitus vertigo otalgia otorrhea clinical checklist
~/
python - <<'PY' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import mm from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, PageBreak from reportlab.lib.enums import TA_CENTER from pathlib import Path out=Path('/tmp/workspace/ent-history-checklist/output/Detailed_Ear_History_Taking_Checklist.pdf') navy=colors.HexColor('#123047'); teal=colors.HexColor('#087E8B'); pale=colors.HexColor('#F4F8F9'); line=colors.HexColor('#D1DEE3'); gray=colors.HexColor('#5D6B75'); red=colors.HexColor('#9E3030'); amber=colors.HexColor('#FFF5D6') s=getSampleStyleSheet() s.add(ParagraphStyle(name='T',parent=s['Title'],fontName='Helvetica-Bold',fontSize=19,leading=23,textColor=navy,alignment=TA_CENTER,spaceAfter=4)) s.add(ParagraphStyle(name='ST',parent=s['Normal'],fontSize=9.5,leading=12,textColor=gray,alignment=TA_CENTER,spaceAfter=8)) s.add(ParagraphStyle(name='H',parent=s['Heading2'],fontName='Helvetica-Bold',fontSize=12,leading=15,textColor=colors.white,spaceAfter=0)) s.add(ParagraphStyle(name='SH',parent=s['Heading3'],fontName='Helvetica-Bold',fontSize=10,leading=12.5,textColor=navy,spaceBefore=4,spaceAfter=2)) s.add(ParagraphStyle(name='B',parent=s['BodyText'],fontName='Helvetica',fontSize=8.05,leading=10.35,textColor=colors.HexColor('#202A30'))) s.add(ParagraphStyle(name='S',parent=s['BodyText'],fontName='Helvetica',fontSize=7.2,leading=9,textColor=gray)) s.add(ParagraphStyle(name='R',parent=s['BodyText'],fontName='Helvetica-Bold',fontSize=8.15,leading=10.4,textColor=red)) def p(x,sty='B'): return Paragraph(x,s[sty]) def head(x): return Table([[p(x,'H')]],colWidths=[180*mm],style=[('BACKGROUND',(0,0),(-1,-1),teal),('LEFTPADDING',(0,0),(-1,-1),5*mm),('RIGHTPADDING',(0,0),(-1,-1),5*mm),('TOPPADDING',(0,0),(-1,-1),2*mm),('BOTTOMPADDING',(0,0),(-1,-1),2*mm)]) def checks(a): return Table([[p('☐'),p(x)] for x in a],colWidths=[7*mm,173*mm],style=[('VALIGN',(0,0),(-1,-1),'TOP'),('LEFTPADDING',(0,0),(-1,-1),1.3*mm),('RIGHTPADDING',(0,0),(-1,-1),1*mm),('TOPPADDING',(0,0),(-1,-1),1.2*mm),('BOTTOMPADDING',(0,0),(-1,-1),1.2*mm),('LINEBELOW',(0,0),(-1,-1),0.18,line)]) def block(h,a): return [p(h,'SH'),checks(a)] def footer(c,d): c.saveState();c.setStrokeColor(line);c.line(15*mm,12*mm,195*mm,12*mm);c.setFillColor(gray);c.setFont('Helvetica',7);c.drawString(15*mm,7.5*mm,'Detailed Ear History-Taking Checklist | Educational clinical prompt sheet');c.drawRightString(195*mm,7.5*mm,f'Page {d.page}');c.restoreState() doc=SimpleDocTemplate(str(out),pagesize=A4,leftMargin=15*mm,rightMargin=15*mm,topMargin=12*mm,bottomMargin=17*mm,title='Detailed Ear History-Taking Checklist') st=[] st += [p('DETAILED EAR HISTORY-TAKING CHECKLIST','T'),p('Structured prompts for otalgia, otorrhoea, hearing loss, tinnitus, vertigo, trauma, and otological red flags','ST')] info=[['Patient name','','Date / time',''],['Age / sex','','Clinician',''],['Source / reliability','','Interpreter / communication aid','']] st.append(Table([[p(x,'S') if j in (0,2) else p(x) for j,x in enumerate(r)] for r in info],colWidths=[28*mm,62*mm,35*mm,55*mm],style=[('GRID',(0,0),(-1,-1),.35,colors.HexColor('#B7C5CB')),('BACKGROUND',(0,0),(0,-1),pale),('BACKGROUND',(2,0),(2,-1),pale),('VALIGN',(0,0),(-1,-1),'MIDDLE'),('LEFTPADDING',(0,0),(-1,-1),2*mm),('RIGHTPADDING',(0,0),(-1,-1),2*mm),('TOPPADDING',(0,0),(-1,-1),2*mm),('BOTTOMPADDING',(0,0),(-1,-1),2*mm)]));st.append(Spacer(1,3*mm)) st += [head('1. OPENING, COMPLAINT, AND RAPID SAFETY SCREEN'),Spacer(1,2*mm),checks([ '<b>Introduce, confirm identity, explain the consultation, obtain consent, and address hearing, language, cognitive, or communication needs.</b>', '<b>Chief complaint:</b> hearing loss, tinnitus, pain, discharge, dizziness/vertigo, fullness, itching, swelling/deformity, facial weakness, or other symptom. Record side and duration.', '<b>Core timeline:</b> sudden or gradual onset; exact start date/time if acute; progression; first versus recurrent episode; continuous versus episodic; unilateral versus bilateral.', '<b>Immediate safety:</b> recent major head injury, severe vertigo with neurological symptoms, facial weakness, mastoid/postauricular swelling, high fever/toxicity, or severe pain in diabetes/immunosuppression.' ]),Spacer(1,2*mm),Table([[p('<b>Urgent red flags: escalate promptly according to local pathway</b>','R')],[p('☐ Sudden hearing loss, especially within 72 hours; sudden unilateral loss with tinnitus/vertigo; or new neurological deficit.','R')],[p('☐ Striking headache, diplopia, dysarthria, limb weakness/numbness, ataxia, syncope, or other central neurological features with dizziness.','R')],[p('☐ Clear high-volume or bloody ear discharge after head trauma; severe vertigo, facial weakness, or suspected CSF leak.','R')],[p('☐ Severe persistent otalgia with granulation/discharge in diabetes or immunocompromise; fever with postauricular erythema/swelling or protruding pinna.','R')],[p('☐ Persistent unilateral otalgia with a normal ear, hoarseness, dysphagia, neck mass, weight loss, or tobacco/alcohol exposure.','R')]],colWidths=[180*mm],style=[('BACKGROUND',(0,0),(-1,0),amber),('BOX',(0,0),(-1,-1),.7,colors.HexColor('#D4971D')),('LINEBELOW',(0,1),(-1,-2),.2,colors.HexColor('#E7C876')),('LEFTPADDING',(0,0),(-1,-1),3*mm),('RIGHTPADDING',(0,0),(-1,-1),3*mm),('TOPPADDING',(0,0),(-1,-1),1.5*mm),('BOTTOMPADDING',(0,0),(-1,-1),1.5*mm)])] st.append(PageBreak()) st += [head('2. HEARING LOSS: DETAILED HISTORY'),Spacer(1,1.5*mm)] for h,a in [ ('Define the hearing problem',['☐ Which ear? Is loss unilateral, bilateral, symmetrical, alternating, or perceived in one ear only?','☐ Onset: congenital/childhood, sudden (ask exact time), rapidly progressive, gradual, or fluctuating? Constant or episodic?','☐ Functional description: trouble hearing quiet sounds, understanding speech, hearing on telephone, following conversation in noise, television volume, alarm/doorbell, work/school impact.','☐ Is the issue “I hear but cannot understand”? Ask about distortion, clarity, speech discrimination, recruitment (sounds become uncomfortably loud), diplacusis (same note sounds different), or hyperacusis.']), ('Conductive and pressure clues',['☐ Aural fullness, blocked-ear sensation, popping/clicking, pressure with colds or altitude, autophony (own voice/breathing unusually loud), or hearing better in noise (paracusis Willisii).','☐ Previous otitis media, glue ear, perforation, chronic discharge, cholesteatoma, trauma, barotrauma, foreign body, or ear surgery.']), ('Sensorineural and exposure clues',['☐ Tinnitus, vertigo, imbalance, noise sensitivity, or fluctuating hearing. Ask relation of hearing change to vertigo attacks.','☐ Noise: occupational role and duration, firearms, machinery, music/headphones, explosions; use of hearing protection.','☐ Medication/toxin exposure: aminoglycosides, chemotherapy, loop diuretics, antimalarials, high-dose salicylates, solvents, or other new medicines.','☐ Recent viral illness, meningitis, autoimmune disease, diabetes, renal disease, neurological symptoms, or head trauma.']), ('History by age and family',['☐ Childhood: pregnancy infections/ototoxic exposures, prematurity, birth complications, NICU stay, jaundice, meningitis, developmental/speech delay, newborn screen, recurrent otitis, school performance.','☐ Family: early-onset hearing loss, hearing aids, otosclerosis/stapes surgery, syndromic disease, or relatives with similar balance symptoms.'])]: st += block(h,a) st.append(PageBreak()) st += [head('3. TINNITUS AND AURAL FULLNESS'),Spacer(1,1.5*mm)] for h,a in [ ('Characterise tinnitus',['☐ Onset, duration, side, intermittent/constant pattern, progression, and whether the sound is in one/both ears or the head.','☐ Sound: ringing, buzzing, hissing, roaring, clicking, low/high pitch. Does it change with position, exercise, stress, jaw/neck movement, or sound?','☐ Pulsatile? Is it synchronous with the heartbeat? Does it change with jugular pressure, head turn, or exercise? Ask about headache, visual symptoms, or neurological symptoms.','☐ Objective clicking? Ask about palatal movements, middle-ear muscle spasm sensation, or whether others have heard it.']), ('Associated symptoms and impact',['☐ Hearing loss, dizziness/vertigo, fullness, otalgia, discharge, headache, facial weakness/numbness, visual symptoms, or recent trauma.','☐ Sleep disruption, concentration, anxiety, low mood, distress, suicidal thoughts/self-harm risk if severe, and effects on work/relationships.','☐ Caffeine, nicotine, alcohol, noise exposure, stress, medication changes, and prior hearing test or imaging.']), ('Aural fullness / pressure',['☐ Fullness, popping, crackling, pressure, fluctuating hearing, autophony, symptom relation to URTI/allergy, flying/diving, altitude, or Valsalva.','☐ Ask about temporomandibular pain/clicking, migraine features, reflux/throat symptoms, and anxiety where symptoms persist despite normal ear findings.'])]: st += block(h,a) st.append(PageBreak()) st += [head('4. OTALGIA, ITCHING, SWELLING, AND DISCHARGE'),Spacer(1,1.5*mm)] for h,a in [ ('Otalgia',['☐ Exact site: deep ear, canal, pinna, mastoid, jaw, throat, teeth, or diffuse? Severity, quality, constant/episodic, nocturnal pain, and radiation.','☐ Triggers: touching/pulling pinna, pressing tragus, chewing, jaw opening, swallowing, yawning, cold, water, or lying on ear.','☐ Associated itch, discharge, hearing change, fever, rash/vesicles, swelling, headache, sore throat, dental pain, or neck symptoms.','☐ If ear appears normal or symptoms suggest referral: ask about dental disease, TMJ bruxism/clicking, tonsil/throat symptoms, reflux, oral ulcers, dysphagia, hoarseness, neck lump, weight loss.']), ('Otorrhoea',['☐ Side, onset, acute or chronic duration, continuous/intermittent/recurrent pattern, amount, and whether it follows pain relief.','☐ Appearance: watery/clear, mucoid, purulent, blood-stained, foul-smelling, flakes/debris; crusting or fungal-looking material if described.','☐ Relation to swimming, instrumentation/cotton buds, hearing aids, trauma, recent surgery, URI, or previous perforation.','☐ Clear fluid or blood after head trauma, with salty taste/postural leak, headache, vertigo, hearing loss, or facial weakness.']), ('External ear / skin symptoms',['☐ Itching, eczema/psoriasis, dermatitis, pain on tragal pressure, canal trauma, hearing-aid irritation, hair products, ear piercing, insect bite, or foreign body.','☐ Pinna or mastoid swelling, redness, deformity, skin lesion, ulcer, bleeding, recurrent boils, or prior perichondritis.'])]: st += block(h,a) st.append(PageBreak()) st += [head('5. VERTIGO, DIZZINESS, AND IMBALANCE'),Spacer(1,1.5*mm)] for h,a in [ ('Clarify the symptom',['☐ Ask the patient to describe it without leading: spinning/rotation (vertigo), light-headedness, presyncope, imbalance, gait unsteadiness, visual motion sensitivity, or dissociation.','☐ Onset, episode duration (seconds, minutes, hours, days), frequency, first/worst episode, progression, and recovery between attacks.','☐ Triggers: rolling in bed, looking up/down, head movement, standing, coughing/straining, loud noise, exertion, crowds/visual motion, or dietary triggers.']), ('Associated otological features',['☐ Hearing loss, tinnitus, fullness, otalgia, discharge. Do these occur before, during, or after attacks? Is hearing fluctuant?','☐ Nausea/vomiting, sweating, nystagmus noticed by others, falls, oscillopsia, or inability to walk unaided.']), ('Central, migraine, and cardiovascular screen',['☐ Headache, migraine history/aura, photophobia, phonophobia, motion sensitivity, visual aura, menstrual/hormonal association, sleep/stress triggers.','☐ Diplopia, dysarthria, dysphagia, facial numbness/weakness, limb weakness/numbness, severe incoordination, loss of consciousness, seizure, chest pain, palpitations, or orthostatic symptoms.','☐ Recent infection, medication change (sedatives, antihypertensives, anticonvulsants), alcohol/recreational drugs, trauma, and vascular risk factors.'])]: st += block(h,a) st.append(PageBreak()) st += [head('6. EXPOSURES, BACKGROUND HISTORY, AND CLOSURE'),Spacer(1,1.5*mm)] for h,a in [ ('Previous ear care and investigations',['☐ Childhood ear infections, grommets, mastoiditis, perforations, cholesteatoma, previous audiograms, hearing aid/cochlear implant, balance therapy, or imaging.','☐ Ear operations: type, side, date, complications, and current follow-up. Prior radiation to head/neck or skull-base surgery.','☐ Current/recent treatments: ear drops and duration, antibiotics, steroids, analgesia, decongestants, wax removal, hearing aids. Response, adherence, and adverse effects.']), ('Medical, medication, and allergy history',['☐ Diabetes, immunosuppression, HIV, autoimmune/vasculitic disease, renal disease, thyroid disease, migraine, neurological disease, anxiety/depression, bleeding disorders.','☐ Full medicines including ototoxic agents, anticoagulants/antiplatelets, and topical ear products. Drug/latex allergies and reaction.']), ('Social and family history',['☐ Smoking/vaping, alcohol, recreational drugs, occupational/recreational noise, swimming/diving, flying, recent travel, and domestic/occupational trauma risk.','☐ Family history of hearing loss, otosclerosis, Ménière-type symptoms, migraine, neurofibromatosis, or genetic syndromes.','☐ Functional impact: work/school, driving, falls risk, communication, relationships, sleep, mood, support needs, hearing aids and accessibility.']), ('Complete and document',['☐ Summarise key positives and negatives: laterality, time course, hearing status, tinnitus, pain, discharge, dizziness, neurological symptoms, trauma, and red flags.','☐ Check the patient’s ideas, concerns, and expectations. Explain examination/audiology or referral plan, give safety-net advice, and invite questions.'])]: st += block(h,a) st += [Spacer(1,2.5*mm),head('ONE-LINE CLINICAL SUMMARY'),Spacer(1,1.5*mm),Table([[p('Age/sex + chief otological symptom and duration + laterality + key associated features + red-flag status + relevant exposure/history + functional impact.','B')],[p('<br/><br/><br/><br/>','B')]],colWidths=[180*mm],style=[('BOX',(0,0),(-1,-1),.5,colors.HexColor('#94ABB5')),('BACKGROUND',(0,0),(-1,0),pale),('LEFTPADDING',(0,0),(-1,-1),3*mm),('RIGHTPADDING',(0,0),(-1,-1),3*mm),('TOPPADDING',(0,0),(-1,-1),2*mm),('BOTTOMPADDING',(0,0),(-1,-1),2*mm)]),Spacer(1,2*mm),p('Educational resource, not a substitute for examination, audiology, local pathways, or urgent ENT/senior review. Key otologic domains: hearing loss, tinnitus, otalgia, otorrhoea, and vertigo, as described in Cummings Otolaryngology Head and Neck Surgery, Ch. 137, pp. 2631 onwards.','S')] doc.build(st,onFirstPage=footer,onLaterPages=footer) print(out) PY python - <<'PY' from pypdf import PdfReader p='/tmp/workspace/ent-history-checklist/output/Detailed_Ear_History_Taking_Checklist.pdf';r=PdfReader(p);t='\n'.join(x.extract_text() or '' for x in r.pages);print('pages',len(r.pages),'chars',len(t));print('missing',[x for x in ['HEARING LOSS','TINNITUS','OTALGIA','VERTIGO','ONE-LINE CLINICAL'] if x not in t]) PY
~/ent-history-checklist/output
python - <<'PY' from pathlib import Path p=Path('/tmp/workspace/ent-history-checklist/output/Detailed_Ear_History_Taking_Checklist.pdf') print(p.exists(), p.stat().st_size if p.exists() else 'missing') PY
python - <<'PY' from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import A4 p='/tmp/workspace/ent-history-checklist/output/Detailed_Ear_History_Taking_Checklist.pdf' c=canvas.Canvas(p,pagesize=A4); c.drawString(100,700,'test'); c.save() import os print(os.path.exists(p),os.path.getsize(p)) PY
python - <<'PY' from reportlab.lib.pagesizes import A4 from reportlab.lib.units import mm from reportlab.lib import colors from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, PageBreak from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.enums import TA_CENTER from pathlib import Path out='/tmp/workspace/ent-history-checklist/output/Detailed_Ear_History_Taking_Checklist.pdf' s=getSampleStyleSheet(); navy=colors.HexColor('#123047'); teal=colors.HexColor('#087E8B'); grey=colors.HexColor('#59666f') s.add(ParagraphStyle(name='XTitle',parent=s['Title'],fontName='Helvetica-Bold',fontSize=19,leading=23,alignment=TA_CENTER,textColor=navy,spaceAfter=5)) s.add(ParagraphStyle(name='XSub',parent=s['Normal'],fontSize=9,leading=11,alignment=TA_CENTER,textColor=grey,spaceAfter=8)) s.add(ParagraphStyle(name='XHead',parent=s['Heading2'],fontName='Helvetica-Bold',fontSize=12,leading=15,textColor=colors.white)) s.add(ParagraphStyle(name='XSubhead',parent=s['Heading3'],fontName='Helvetica-Bold',fontSize=10,leading=13,textColor=navy,spaceBefore=5,spaceAfter=2)) s.add(ParagraphStyle(name='XBody',parent=s['BodyText'],fontName='Helvetica',fontSize=8.15,leading=10.5,textColor=colors.HexColor('#202a30'))) s.add(ParagraphStyle(name='XSmall',parent=s['BodyText'],fontSize=7.2,leading=9,textColor=grey)) def P(x,sty='XBody'): return Paragraph(x,s[sty]) def H(x): return Table([[P(x,'XHead')]],colWidths=[180*mm],style=[('BACKGROUND',(0,0),(-1,-1),teal),('LEFTPADDING',(0,0),(-1,-1),5*mm),('TOPPADDING',(0,0),(-1,-1),2*mm),('BOTTOMPADDING',(0,0),(-1,-1),2*mm)]) def C(items): return Table([[P('☐'),P(x)] for x in items],colWidths=[7*mm,173*mm],style=[('VALIGN',(0,0),(-1,-1),'TOP'),('LINEBELOW',(0,0),(-1,-1),.15,colors.HexColor('#d4e0e4')),('LEFTPADDING',(0,0),(-1,-1),1.5*mm),('RIGHTPADDING',(0,0),(-1,-1),1*mm),('TOPPADDING',(0,0),(-1,-1),1.3*mm),('BOTTOMPADDING',(0,0),(-1,-1),1.3*mm)]) def sec(title,groups): a=[H(title),Spacer(1,2*mm)] for sub,its in groups: a += [P(sub,'XSubhead'),C(its)] return a def foot(c,d): c.saveState();c.setStrokeColor(colors.HexColor('#cbd8dc'));c.line(15*mm,12*mm,195*mm,12*mm);c.setFillColor(grey);c.setFont('Helvetica',7);c.drawString(15*mm,7*mm,'Detailed Ear History-Taking Checklist | Educational clinical prompt sheet');c.drawRightString(195*mm,7*mm,f'Page {d.page}');c.restoreState() st=[P('DETAILED EAR HISTORY-TAKING CHECKLIST','XTitle'),P('A structured, printable otology history sheet for clinical and OSCE use','XSub')] st.append(Table([[P('Patient name','XSmall'),P(''),P('Date / time','XSmall'),P('')],[P('Age / sex','XSmall'),P(''),P('Clinician','XSmall'),P('')],[P('Source / reliability','XSmall'),P(''),P('Interpreter / communication aid','XSmall'),P('')]],colWidths=[29*mm,61*mm,37*mm,53*mm],style=[('GRID',(0,0),(-1,-1),.35,colors.HexColor('#b8c7cc')),('BACKGROUND',(0,0),(0,-1),colors.HexColor('#f4f8f9')),('BACKGROUND',(2,0),(2,-1),colors.HexColor('#f4f8f9')),('LEFTPADDING',(0,0),(-1,-1),2*mm),('RIGHTPADDING',(0,0),(-1,-1),2*mm),('TOPPADDING',(0,0),(-1,-1),2*mm),('BOTTOMPADDING',(0,0),(-1,-1),2*mm)]));st.append(Spacer(1,3*mm)) st+=sec('1. OPENING, PRESENTING COMPLAINT, AND SAFETY SCREEN',[ ('Start systematically',['Introduce yourself, confirm identity, explain purpose, gain consent, ensure privacy, and address hearing, language, cognitive, or communication needs.','Record the chief complaint in the patient’s words: hearing loss, tinnitus, ear pain, discharge, vertigo/dizziness, fullness, itch, swelling/deformity, facial weakness, or other symptom.','For every symptom document side, onset, duration, sudden or gradual pattern, constant or episodic course, progression, triggers, severity, associated symptoms, functional impact, and previous treatment.']), ('Urgent red flags',['Sudden hearing loss, particularly within 72 hours, or sudden unilateral hearing loss with tinnitus/vertigo.','Vertigo/dizziness with new severe headache, diplopia, dysarthria, dysphagia, facial or limb weakness/numbness, severe ataxia, or loss of consciousness.','Clear high-volume or bloody otorrhoea after head injury, severe vertigo, facial weakness, or possible CSF leak.','Fever with postauricular swelling/protruding pinna; severe persistent otalgia or discharge in diabetes/immunosuppression.','Persistent unilateral otalgia with normal ear examination plus hoarseness, dysphagia, neck lump, weight loss, tobacco/alcohol exposure.'])]) st.append(PageBreak()) st+=sec('2. HEARING LOSS',[ ('Define the loss',['Which ear? Unilateral, bilateral, symmetrical, alternating, or fluctuating? Congenital/childhood or adult onset?','Exact onset, including time and date for any sudden change. Is it stable, progressive, rapidly worsening, intermittent, or fluctuating?','Functional effect: quiet speech, telephone, television volume, alarms, group conversation, speech in background noise, school/work performance, social withdrawal.','Clarify “I can hear but cannot understand”: poor speech clarity, distortion, recruitment, hyperacusis, diplacusis, or difficulty in noise.']), ('Conductive/pressure clues',['Aural blockage/fullness, popping, crackling, pressure related to URTI, allergy, flying, diving, altitude, or Valsalva.','Autophony, hearing own voice/breathing unusually loudly; hearing better in noise; previous wax, otitis, perforation, discharge, cholesteatoma, trauma, grommets, or ear surgery.']), ('Sensorineural/risk clues',['Tinnitus, vertigo, imbalance, noise sensitivity, fluctuating hearing, recent viral illness, meningitis, head injury, autoimmune or neurological illness.','Occupational/recreational noise, firearms, machinery, music/headphones, explosion exposure, hearing protection.','Ototoxic exposures: aminoglycosides, chemotherapy, loop diuretics, antimalarials, high-dose salicylates, solvents, and timing relative to symptoms.','Family history of early deafness, hearing aids, otosclerosis/stapes surgery, genetic or syndromic disease.'])]) st.append(PageBreak()) st+=sec('3. TINNITUS AND AURAL FULLNESS',[ ('Tinnitus description',['Onset, duration, side, continuous/intermittent pattern, progression, sound quality: ringing, buzzing, hissing, roaring, clicking, low/high pitch.','Pulsatile? Does it synchronize with heartbeat? Change with position, exercise, head/neck turn, jaw movement, sound, or gentle neck pressure?','Associated hearing loss, fullness, dizziness, otalgia, discharge, headache, facial symptoms, visual symptoms, or recent trauma.']), ('Impact and modifiers',['Sleep, concentration, anxiety, mood, distress, occupational impact, and self-harm thoughts if distress is severe.','Noise, caffeine, nicotine, alcohol, stress, medication changes, prior audiometry or imaging, and prior tinnitus support/hearing aids.']), ('Aural fullness',['Blocked sensation, popping, pressure, crackling, fluctuation, autophony, relation to colds/allergy/flying/diving.','Ask about TMJ pain/clicking/bruxism, migraine features, dental or throat symptoms if persistent despite normal ear findings.'])]) st.append(PageBreak()) st+=sec('4. OTALGIA, OTORRHOEA, AND EXTERNAL EAR SYMPTOMS',[ ('Otalgia',['Exact location: deep ear, canal, pinna, mastoid, jaw, teeth, throat. Character, severity, radiation, nocturnal pain, and episodic/constant course.','Is it worse when pulling pinna/pressing tragus, chewing, opening mouth, swallowing, yawning, water exposure, cold, or lying on that ear?','Fever, itch, rash/vesicles, swelling, hearing change, discharge, headache, sore throat, dental pain, and neck symptoms.','For referred pain, ask about dental disease, TMJ symptoms, tonsil/throat symptoms, reflux, oral lesion, dysphagia, hoarseness, neck mass, and weight loss.']), ('Otorrhoea',['Side, onset, duration, continuous/intermittent/recurrent pattern, quantity, and whether discharge started after pain was relieved.','Appearance: watery/clear, mucoid, purulent, blood-stained, foul-smelling, flakes/debris. Relation to swimming, cotton buds/instrumentation, hearing aid, trauma, URI, surgery, or perforation.','After head trauma ask about clear or bloody fluid, salty taste, positional leak, headache, vertigo, hearing loss, facial weakness.']), ('External ear',['Itch, eczema/psoriasis, dermatitis, canal trauma, hair products, hearing-aid irritation, piercing, foreign body, insect bite.','Pinna/mastoid redness, swelling, deformity, ulcer, bleeding, skin lesion, recurrent boils, or prior perichondritis.'])]) st.append(PageBreak()) st+=sec('5. VERTIGO, DIZZINESS, AND IMBALANCE',[ ('Clarify the symptom',['Ask open question first: spinning/rotation, light-headedness, presyncope, imbalance, gait unsteadiness, visual motion sensitivity, or other sensation.','Onset, episode duration in seconds/minutes/hours/days, frequency, first/worst event, recovery between episodes, and effect of position.','Triggers: rolling in bed, looking up/down, head movement, standing, coughing/straining, loud sound, exertion, crowds, or visual motion.']), ('Associated symptoms',['Hearing loss, tinnitus, fullness, otalgia, discharge: do these occur before, during, or after attacks? Is hearing fluctuating?','Nausea/vomiting, sweating, nystagmus noted by others, falls, oscillopsia, inability to walk unaided.']), ('Central, migraine, and systemic screen',['Headache, migraine/aura, photophobia, phonophobia, motion sensitivity, visual aura, sleep/stress or hormonal triggers.','Diplopia, dysarthria, dysphagia, facial numbness/weakness, limb weakness/numbness, severe incoordination, blackout, seizure, chest pain, palpitation, postural symptoms.','Recent infection, medication changes including sedatives/antihypertensives/anticonvulsants, alcohol/recreational drugs, trauma, vascular risk factors.'])]) st.append(PageBreak()) st+=sec('6. BACKGROUND HISTORY, CLOSURE, AND SUMMARY',[ ('Past otological and medical history',['Childhood infections, grommets, mastoiditis, perforation, cholesteatoma, audiograms, hearing aid/cochlear implant, vestibular therapy, imaging, ear operations and outcomes.','Diabetes, immune compromise, HIV, autoimmune/vasculitic disease, renal/thyroid disease, migraine, neurological disease, bleeding disorder, anxiety/depression.','All prescribed, OTC, herbal, topical ear medicines; anticoagulants/antiplatelets; ototoxic medicines; drug/latex allergies and reaction.']), ('Personal, family, and functional history',['Smoking/vaping, alcohol, drugs, occupation and noise exposure, hobbies, swimming/diving, flying, travel, trauma risk.','Family hearing loss, otosclerosis, Ménière-type symptoms, migraine, neurofibromatosis or genetic disease.','Impact on work/school, driving, falls, communication, relationships, sleep, mood, support needs and accessibility.']), ('Close',['Summarise laterality, time course, hearing, tinnitus, pain, discharge, balance, neurological/trauma symptoms, and red flag status.','Ask the patient’s ideas, concerns, and expectations. Explain examination/audiology/referral plan, give appropriate safety netting, and invite questions.'])]) st += [Spacer(1,2*mm),H('ONE-LINE CLINICAL SUMMARY'),Spacer(1,2*mm),Table([[P('Age/sex + main otological symptom and duration + laterality + key associated features + red-flag status + relevant risks/exposures + functional impact.')],[P('<br/><br/><br/><br/>')]],colWidths=[180*mm],style=[('BOX',(0,0),(-1,-1),.5,colors.HexColor('#9bb0b8')),('BACKGROUND',(0,0),(-1,0),colors.HexColor('#f4f8f9')),('LEFTPADDING',(0,0),(-1,-1),3*mm),('TOPPADDING',(0,0),(-1,-1),2*mm),('BOTTOMPADDING',(0,0),(-1,-1),2*mm)]),Spacer(1,2*mm),P('Educational resource only. It does not replace examination, tuning-fork testing, audiology, local clinical pathways, or urgent senior/ENT assessment. The five core otological symptom domains are hearing loss, tinnitus, otalgia, otorrhoea, and vertigo. Source: Cummings Otolaryngology Head and Neck Surgery, Ch. 137, pp. 2631 onwards.','XSmall')] doc=SimpleDocTemplate(out,pagesize=A4,leftMargin=15*mm,rightMargin=15*mm,topMargin=12*mm,bottomMargin=17*mm,title='Detailed Ear History-Taking Checklist') doc.build(st,onFirstPage=foot,onLaterPages=foot) print(out) PY python - <<'PY' from pypdf import PdfReader p='/tmp/workspace/ent-history-checklist/output/Detailed_Ear_History_Taking_Checklist.pdf';r=PdfReader(p);t=''.join(page.extract_text() or '' for page in r.pages);print('pages=',len(r.pages),'size=',__import__('os').path.getsize(p),'terms=',[x in t for x in ['HEARING LOSS','TINNITUS','OTORRHOEA','VERTIGO','ONE-LINE CLINICAL']]) PY
~/ent-history-checklist/output
Detailed Ear History Taking Checklist
PDF Document · PDF
lacrimal apparatus disease
Which lacrimal topic should I cover in detail?
ENT History Taking Checklist
PDF Document · PDF
Detailed Ear History Taking Checklist
PDF Document · PDF