0% fanden dieses Dokument nützlich (0 Abstimmungen)
8 Ansichten40 Seiten

PDF Code

Das Dokument beschreibt die Erstellung eines Dokuments mit der ReportLab-Bibliothek zur Generierung von PDF-Dateien. Es definiert eine Farbpalette, verschiedene Textstile und Layouts für Tabellen sowie Funktionen zur Erstellung von Inhalten wie Überschriften, Karten und Abschnitten. Zudem wird eine Hintergrundgrafik und eine Fußzeile für die Seiten festgelegt.

Hochgeladen von

letsmailharini
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als DOCX, PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
8 Ansichten40 Seiten

PDF Code

Das Dokument beschreibt die Erstellung eines Dokuments mit der ReportLab-Bibliothek zur Generierung von PDF-Dateien. Es definiert eine Farbpalette, verschiedene Textstile und Layouts für Tabellen sowie Funktionen zur Erstellung von Inhalten wie Überschriften, Karten und Abschnitten. Zudem wird eine Hintergrundgrafik und eine Fußzeile für die Seiten festgelegt.

Hochgeladen von

letsmailharini
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als DOCX, PDF, TXT herunterladen oder online auf Scribd lesen

from [Link].

pagesizes import A4

from [Link] import colors

from [Link] import mm

from [Link] import (

SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,

HRFlowable, KeepTogether, PageBreak

from [Link] import ParagraphStyle

from [Link] import TA_LEFT, TA_CENTER, TA_RIGHT

from [Link] import Flowable

from [Link] import HexColor, Color

import [Link] as rl_colors

# ── PALETTE ──────────────────────────────────────────────────────────────────

BG = HexColor('#0a0e27')

CARD_BG = HexColor('#111830')

CARD_BG2 = HexColor('#141c38')

BORDER = HexColor('#1e2d5a')

ACCENT = HexColor('#4f8ef7')

ACCENT2 = HexColor('#7ec8e3')

TEAL = HexColor('#2dd4bf')

GOLD = HexColor('#fbbf24')

ROSE = HexColor('#f87171')

LAVENDER = HexColor('#a78bfa')

GREEN = HexColor('#34d399')

WHITE = HexColor('#ffffff')

TEXT = HexColor('#e2e8f0')

MUTED = HexColor('#94a3b8')

SOFT = HexColor('#cbd5e1')

DEEP = HexColor('#0d1333')
W, H = A4

MARGIN = 14*mm

# ── STYLES ───────────────────────────────────────────────────────────────────

def S(name, **kw):

base = dict(

fontName='Helvetica', fontSize=9, leading=13,

textColor=TEXT, backColor=None, spaceAfter=2

[Link](kw)

return ParagraphStyle(name, **base)

STYLES = {

'hero_title': S('hero_title', fontName='Helvetica-Bold', fontSize=22,

textColor=WHITE, leading=26, spaceAfter=4),

'hero_sub': S('hero_sub', fontSize=9, textColor=MUTED, spaceAfter=2),

'sec_title': S('sec_title', fontName='Helvetica-Bold', fontSize=13,

textColor=WHITE, leading=17, spaceBefore=6, spaceAfter=4),

'card_title': S('card_title', fontName='Helvetica-Bold', fontSize=8,

textColor=ACCENT, leading=11, spaceAfter=4,

textTransform='uppercase'),

'body': S('body', fontSize=8, textColor=SOFT, leading=12, spaceAfter=1),

'body_bold': S('body_bold', fontName='Helvetica-Bold', fontSize=8,

textColor=WHITE, leading=12, spaceAfter=1),

'bullet': S('bullet', fontSize=8, textColor=SOFT, leading=12,

leftIndent=10, spaceAfter=1),

'hl': S('hl', fontName='Helvetica-Bold', fontSize=8,

textColor=WHITE, leading=12, spaceAfter=2),

'tag': S('tag', fontName='Helvetica-Bold', fontSize=7,

textColor=ACCENT, leading=10),

'th': S('th', fontName='Helvetica-Bold', fontSize=7.5,


textColor=ACCENT, leading=10, alignment=TA_LEFT),

'td': S('td', fontSize=7.5, textColor=SOFT, leading=11),

'td_bold': S('td_bold', fontName='Helvetica-Bold', fontSize=7.5,

textColor=WHITE, leading=11),

'qf_label': S('qf_label', fontSize=6.5, textColor=MUTED, leading=9,

spaceAfter=1),

'qf_val': S('qf_val', fontName='Helvetica-Bold', fontSize=9,

textColor=WHITE, leading=12),

'unit_label': S('unit_label', fontName='Helvetica-Bold', fontSize=6.5,

textColor=MUTED, leading=9, spaceAfter=3),

'sub_head': S('sub_head', fontName='Helvetica-Bold', fontSize=8,

textColor=ACCENT2, leading=11, spaceBefore=6, spaceAfter=3),

'viva_q': S('viva_q', fontName='Helvetica-Bold', fontSize=8,

textColor=GOLD, leading=11, spaceAfter=1),

'viva_a': S('viva_a', fontSize=8, textColor=SOFT, leading=12,

leftIndent=8, spaceAfter=5),

P = lambda text, style='body': Paragraph(text, STYLES[style])

SP = lambda h=4: Spacer(1, h)

HR = lambda color=BORDER: HRFlowable(width='100%', thickness=0.5,

color=color, spaceAfter=6, spaceBefore=2)

def bullet(text, color=ACCENT):

return Paragraph(f'<font color="#{[Link]()[1:]}">\u25b8</font> {text}', STYLES['bullet'])

def bullets(items, color=ACCENT):

return [bullet(t, color) for t in items]

def card_title(text, dot_color=ACCENT):

return Paragraph(
f'<font color="#{dot_color.hexval()[1:]}">&#9632;</font> '

f'<b>{[Link]()}</b>', STYLES['card_title']

def hl_box(text, accent=ACCENT, bg_alpha=0.08):

# We'll render as a table cell with colored left border effect

data = [[Paragraph(text, STYLES['hl'])]]

t = Table(data, colWidths=['100%'])

[Link](TableStyle([

('BACKGROUND', (0,0), (-1,-1), CARD_BG2),

('LEFTPADDING', (0,0), (-1,-1), 8),

('RIGHTPADDING', (0,0), (-1,-1), 8),

('TOPPADDING', (0,0), (-1,-1), 6),

('BOTTOMPADDING', (0,0), (-1,-1), 6),

('LINEAFTER', (0,0), (0,-1), 0, [Link]),

('LINEBEFORE', (0,0), (0,-1), 3, accent),

('ROUNDEDCORNERS', [4,4,4,4]),

]))

return t

def make_table(headers, rows, col_widths=None, accent=ACCENT):

th_row = [Paragraph(h, STYLES['th']) for h in headers]

data = [th_row]

for row in rows:

[Link]([Paragraph(str(c), STYLES['td']) for c in row])

t = Table(data, colWidths=col_widths)

style = [

('BACKGROUND', (0,0), (-1,0), HexColor('#0d1a3a')),

('BACKGROUND', (0,1), (-1,-1), CARD_BG),

('ROWBACKGROUNDS', (0,1), (-1,-1), [CARD_BG, CARD_BG2]),

('LINEBELOW', (0,0), (-1,0), 0.8, accent),


('LINEBELOW', (0,1), (-1,-1), 0.3, BORDER),

('LEFTPADDING', (0,0), (-1,-1), 7),

('RIGHTPADDING', (0,0), (-1,-1), 7),

('TOPPADDING', (0,0), (-1,-1), 5),

('BOTTOMPADDING', (0,0), (-1,-1), 5),

('VALIGN', (0,0), (-1,-1), 'TOP'),

('GRID', (0,0), (-1,-1), 0.2, BORDER),

[Link](TableStyle(style))

return t

def two_col(left_items, right_items, lw=None, rw=None):

avail = W - 2*MARGIN - 4

lw = lw or avail * 0.5

rw = rw or avail * 0.5

left_paras = left_items if isinstance(left_items[0], (list, Flowable.__class__)) else left_items

right_paras = right_items if isinstance(right_items[0], (list, Flowable.__class__)) else right_items

data = [[left_paras, right_paras]]

t = Table(data, colWidths=[lw, rw])

[Link](TableStyle([

('VALIGN', (0,0), (-1,-1), 'TOP'),

('LEFTPADDING', (0,0), (-1,-1), 0),

('RIGHTPADDING', (0,0), (-1,-1), 4),

('TOPPADDING', (0,0), (-1,-1), 0),

('BOTTOMPADDING', (0,0), (-1,-1), 0),

]))

return t

def three_col(c1, c2, c3):

avail = W - 2*MARGIN - 8

cw = avail / 3
data = [[c1, c2, c3]]

t = Table(data, colWidths=[cw, cw, cw])

[Link](TableStyle([

('VALIGN', (0,0), (-1,-1), 'TOP'),

('LEFTPADDING', (0,0), (-1,-1), 0),

('RIGHTPADDING', (0,0), (-1,-1), 6),

('TOPPADDING', (0,0), (-1,-1), 0),

('BOTTOMPADDING', (0,0), (-1,-1), 0),

]))

return t

def section_header(title, subtitle, icon, color=ACCENT):

data = [[

Paragraph(f'<font size="16">{icon}</font>', STYLES['body']),

[Paragraph(f'<font color="#{[Link]()[1:]}"><b>{title}</b></font>', STYLES['sec_title']),

Paragraph(subtitle, STYLES['unit_label'])]

]]

t = Table(data, colWidths=[28, W - 2*MARGIN - 28])

[Link](TableStyle([

('VALIGN', (0,0), (-1,-1), 'MIDDLE'),

('LEFTPADDING', (0,0), (-1,-1), 0),

('RIGHTPADDING', (0,0), (-1,-1), 0),

('TOPPADDING', (0,0), (-1,-1), 2),

('BOTTOMPADDING', (0,0), (-1,-1), 2),

]))

return t

def card_wrap(content, accent=ACCENT, bg=CARD_BG):

if not isinstance(content, list):

content = [content]

t = Table([[content]], colWidths=[W - 2*MARGIN])


[Link](TableStyle([

('BACKGROUND', (0,0), (-1,-1), bg),

('LINEABOVE', (0,0), (-1,0), 0.5, BORDER),

('LINEBELOW', (0,0), (-1,-1), 0.5, BORDER),

('LINEBEFORE', (0,0), (0,-1), 0.5, BORDER),

('LINEAFTER', (0,0), (-1,-1), 0.5, BORDER),

('LINEBEFORE', (0,0), (0,-1), 2.5, accent),

('LEFTPADDING', (0,0), (-1,-1), 10),

('RIGHTPADDING', (0,0), (-1,-1), 10),

('TOPPADDING', (0,0), (-1,-1), 8),

('BOTTOMPADDING', (0,0), (-1,-1), 8),

('VALIGN', (0,0), (-1,-1), 'TOP'),

]))

return t

def qf_item(label, val):

data = [

[Paragraph([Link](), STYLES['qf_label'])],

[Paragraph(val, STYLES['qf_val'])]

t = Table(data, colWidths=[(W-2*MARGIN)/4 - 4])

[Link](TableStyle([

('BACKGROUND', (0,0), (-1,-1), CARD_BG2),

('LINEABOVE', (0,0), (-1,0), 0.4, BORDER),

('LINEBELOW', (0,0), (-1,-1), 0.4, BORDER),

('LINEBEFORE', (0,0), (0,-1), 0.4, BORDER),

('LINEAFTER', (0,0), (-1,-1), 0.4, BORDER),

('LEFTPADDING', (0,0), (-1,-1), 7),

('RIGHTPADDING', (0,0), (-1,-1), 7),

('TOPPADDING', (0,0), (-1,-1), 5),

('BOTTOMPADDING', (0,0), (-1,-1), 5),


]))

return t

def qf_row(items):

avail = W - 2*MARGIN

n = len(items)

cw = avail / n

data = [items]

t = Table(data, colWidths=[cw]*n)

[Link](TableStyle([

('VALIGN', (0,0), (-1,-1), 'TOP'),

('LEFTPADDING', (0,0), (-1,-1), 0),

('RIGHTPADDING', (0,0), (-1,-1), 4),

('TOPPADDING', (0,0), (-1,-1), 0),

('BOTTOMPADDING', (0,0), (-1,-1), 4),

]))

return t

# ── PAGE BACKGROUND ──────────────────────────────────────────────────────────

class DarkBackground(Flowable):

def __init__(self, w, h):

Flowable.__init__(self)

self.w, self.h = w, h

def draw(self):

[Link](BG)

[Link](0, 0, self.w, self.h, fill=1, stroke=0)

def on_page(canvas, doc):

[Link]()

[Link](BG)

[Link](0, 0, W, H, fill=1, stroke=0)


# footer

[Link](MUTED)

[Link]('Helvetica', 7)

[Link](MARGIN, 8*mm,

'Audiology Viva Cheat Sheet · B5.3 Paediatric Audiology & B5.4 Aural Rehabilitation')

[Link](W - MARGIN, 8*mm, f'Page {[Link]}')

[Link](BORDER)

[Link](0.5)

[Link](MARGIN, 11*mm, W - MARGIN, 11*mm)

[Link]()

# ─────────────────────────────────────────────────────────────────────────────

# BUILD STORY

# ─────────────────────────────────────────────────────────────────────────────

story = []

#
═════════════════════════════════════════════════════════
══════════════

# HERO PAGE

#
═════════════════════════════════════════════════════════
══════════════

hero_data = [[

Paragraph('<font color="#4f8ef7"><b>SEMESTER 5 · AUDIOLOGY VIVA PREP</b></font>',


STYLES['unit_label']),

], [

Paragraph('<font color="#ffffff"><b>AUDIOLOGY</b></font> '

'<font color="#4f8ef7"><b>MASTER CHEAT SHEET</b></font>', STYLES['hero_title']),

], [

Paragraph('B5.3 Paediatric Audiology · B5.4 Aural Rehabilitation in Children · B5.6 Clinicals · All
5 Units', STYLES['hero_sub']),

]]
hero_t = Table(hero_data, colWidths=[W - 2*MARGIN])

hero_t.setStyle(TableStyle([

('BACKGROUND', (0,0), (-1,-1), DEEP),

('LINEABOVE', (0,0), (-1,0), 2, ACCENT),

('LINEBEFORE', (0,0), (0,-1), 4, ACCENT),

('LEFTPADDING', (0,0), (-1,-1), 16),

('RIGHTPADDING', (0,0), (-1,-1), 16),

('TOPPADDING', (0,0), (-1,-1), 5),

('BOTTOMPADDING', (0,0), (-1,-1), 5),

('TOPPADDING', (0,1), (0,1), 12),

('BOTTOMPADDING', (0,1), (0,1), 12),

]))

story += [hero_t, SP(8)]

# Quick ref grid (top facts)

qf_items = [

qf_item('1-3-6 Rule', 'Screen·Dx·Intervene (months)'),

qf_item('HL Incidence', '1–3 / 1000 newborns'),

qf_item('Sensitive Period', '0–3.5 years'),

qf_item('VRA Age Range', '6 mo – 2.5 yr'),

qf_item('CPA Age Range', '2.5 – 5 years'),

qf_item('Probe tone (infants)', '1000 Hz (<4 mo)'),

qf_item('CAPD Dx age', '≥ 7 years'),

qf_item('ABR Wave V (adult)', '~5.5 ms'),

[Link](qf_row(qf_items[:4]))

[Link](SP(4))

[Link](qf_row(qf_items[4:]))

[Link](SP(8))

[Link](HR(ACCENT))
#
═════════════════════════════════════════════════════════
══════════════

# UNIT 1: AUDITORY DEVELOPMENT

#
═════════════════════════════════════════════════════════
══════════════

story += [section_header('AUDITORY DEVELOPMENT', 'Unit 1 — B5.3 Paediatric Audiology', '🧠',


ACCENT), SP(4)]

# Two col: Embryology + Pathway

emb = [card_title('Embryology of the Ear', ACCENT)] + bullets([

'Inner ear from otic placode/vesicle — ectodermal origin',

'Cochlea fully coiled by ~10 weeks gestation',

'Middle ear from 1st & 2nd pharyngeal arches + 1st pouch',

'Ossicles: malleus/incus (1st arch); stapes (2nd arch)',

'Inner ear functional ~20 weeks gestation',

])

path = [card_title('Auditory Pathway (Periphery → Cortex)', TEAL)] + bullets([

'Cochlea → CN VIII → Cochlear Nuclei (brainstem)',

'Superior Olivary Complex → Lateral Lemniscus',

'Inferior Colliculus → Medial Geniculate Body (thalamus)',

'Primary Auditory Cortex (Heschl\'s gyrus) — temporal lobe',

'Myelination continues postnatally up to ~5 years',

], TEAL)

[Link](two_col(emb, path))

[Link](SP(6))

# Three col: neuroplasticity, prenatal, incidence

neuro = [card_title('Neuroplasticity', GOLD)] + bullets([

'Sensitive period: 0–3.5 years',

'Deprivation → cortical reorganisation',

'Cross-modal plasticity in deaf (visual takeover)',


'Earlier intervention = better outcomes',

'CI most effective if implanted early',

], GOLD)

prenatal = [card_title('Prenatal Hearing', ROSE)] + bullets([

'Responds to sound from ~28 weeks gestation',

'Startle to loud sounds (fetal audiometry)',

'Discriminates mother\'s voice prenatally',

'Low frequencies perceived better in utero',

'Amniotic fluid attenuates ~40 dB',

], ROSE)

incid = [card_title('Incidence & Prevalence', GREEN)] + bullets([

'~1–3/1000 newborns with significant HL',

'Rises to 2–4/1000 by school age',

'India: ~63 million with HL (WHO)',

'Most common sensory disability at birth',

'50% have NO risk factors → need UNHS',

], GREEN)

[Link](three_col(neuro, prenatal, incid))

[Link](SP(6))

# Developmental milestone table

[Link](card_title('Normal Auditory Development 0–2 Years', LAVENDER))

dev_table = make_table(

['Age', 'Expected Behaviour', 'Key Milestone'],

['0–3 months', 'Startle to loud sound, quiets to voice', 'BOA responses present'],

['3–6 months', 'Localises to side, turns to voice', 'Beginning VRA candidacy'],

['6–9 months', 'Localises directly to sound source', 'VRA fully reliable'],

['9–12 months', 'Localises below ear level, responds to name', 'Babbling, proto-words'],

['12–18 months', 'Localises all angles, follows simple commands', 'First words ~12 mo'],

['18–24 months', 'Identifies objects by name, 2-word combos', '~50 words vocabulary'],
],

col_widths=[60, 200, 150],

accent=LAVENDER

story += [dev_table, SP(10), HR()]

#
═════════════════════════════════════════════════════════
══════════════

# UNIT 2: AUDITORY DISORDERS

#
═════════════════════════════════════════════════════════
══════════════

story += [section_header('AUDITORY DISORDERS IN CHILDREN', 'Unit 2 — B5.3 Paediatric Audiology',


'🔇', ROSE), SP(4)]

left_dis = (

[card_title('Congenital HL — Causes', ROSE)] +

[P('GENETIC (50%)', 'sub_head')] +

bullets(['Autosomal recessive — most common (GJB2/Connexin 26)',

'Autosomal dominant (DFNA genes)', 'X-linked, mitochondrial',

'Syndromic: Usher, Pendred, Waardenburg, Treacher Collins, Alport'], ROSE) +

[P('NON-GENETIC (25%)', 'sub_head')] +

bullets(['TORCH: Toxoplasmosis, Rubella, CMV, Herpes',

'Prematurity, low birth weight', 'Neonatal hyperbilirubinemia',

'Ototoxic drugs (aminoglycosides, furosemide)',

'Birth asphyxia / hypoxia', 'Unknown ~25%'], ROSE)

right_dis = (

[card_title('Acquired Hearing Loss', GOLD)] +

bullets(['Otitis media with effusion (OME) — conductive',

'Meningitis — most common acquired SNHL',

'Mumps, measles, encephalitis', 'Head trauma',


'Noise-induced hearing loss', 'Ototoxic medications'], GOLD) +

[P('HL Impact Areas', 'sub_head')] +

bullets(['Auditory skills development', 'Speech-language delay',

'Educational achievement', 'Socio-emotional development'], GOLD)

[Link](two_col(left_dis, right_dis))

[Link](SP(6))

# ANSD + CAPD

ansd = (

[card_title('ANSD — Auditory Neuropathy Spectrum Disorder', ROSE)] +

[hl_box('<b>KEY PATTERN:</b> Normal OAE + Absent/Abnormal ABR = ANSD', ROSE)] +

[SP(4)] +

bullets(['OHC intact → OAE present (at least initially)',

'Neural dyssynchrony → abnormal ABR',

'Risk factors: hyperbilirubinemia, prematurity, hypoxia',

'Pure tone audiogram: variable, can change over time',

'Speech understanding disproportionately poor',

'CI outcomes generally good; FM systems helpful'], ROSE)

capd = (

[card_title('CAPD — Central Auditory Processing Disorder', ACCENT2)] +

[hl_box('<b>Definition:</b> Difficulty processing auditory info despite normal peripheral hearing',


ACCENT2)] +

[SP(4)] +

bullets(['Pure tone audiogram normal',

'Difficulty in noise, with competing signals',

'Problems with temporal processing, binaural integration',

'Common in ADHD, dyslexia, LD populations',

'Diagnose ONLY after age 7 (brain maturity)',

'SCAN, Buffalo model tests used',


'Management: FM, auditory training, modifications'], ACCENT2)

[Link](two_col(ansd, capd))

[Link](SP(6))

# Special populations

sp_col = (

[card_title('Special Populations', MUTED)] +

bullets(['Down syndrome — recurrent OME, conductive loss',

'Cleft palate — Eustachian tube dysfunction → OME',

'Autism — auditory processing issues',

'CP/Multiple disabilities — modified test protocols',

'Team-based assessment essential'], MUTED)

pseudo = (

[card_title('Pseudohypacusis (Non-organic HL)', GREEN)] +

bullets(['Feigned or exaggerated hearing loss — no organic pathology',

'Stenger test (most reliable), SISI, Doerfler-Stewart',

'ABR/OAEs reveal true thresholds',

'Common in school-age; may seek attention/avoid school'], GREEN)

[Link](two_col(sp_col, pseudo))

[Link](SP(8))

[Link](HR())

[Link](PageBreak())

#
═════════════════════════════════════════════════════════
══════════════

# UNIT 3: SCREENING
#
═════════════════════════════════════════════════════════
══════════════

story += [section_header('EARLY IDENTIFICATION & HEARING SCREENING', 'Unit 3 — B5.3 Paediatric


Audiology', '🔍', TEAL), SP(4)]

[Link](hl_box('<b>GOAL — 1-3-6 MODEL:</b> Screen by 1 month · Diagnose by 3 months ·


Intervene by 6 months', TEAL))

[Link](SP(6))

jcih = (

[card_title('JCIH Position Statements', TEAL)] +

[make_table(

['Year', 'Key Additions'],

[['2000', 'Established 1-3-6; UNHS recommended'],

['2007', 'Included ANSD; bilateral & unilateral HL; medical home; family-centered care'],

['2013', 'Extended to <35 wks gestation; mild & unilateral HL tracking; EHDI benchmarks']],

col_widths=[40, 220],

accent=TEAL

)]

hrr = (

[card_title('High Risk Register (HRR) — JCIH 2007', ACCENT)] +

bullets(['Family history of HL', 'NICU stay >5 days',

'Craniofacial anomalies', 'In-utero infections (TORCH)',

'Hyperbilirubinemia (exchange transfusion)',

'Ototoxic medications', 'Bacterial meningitis',

'Low Apgar (0-4 at 1 min; 0-6 at 5 min)',

'Mechanical ventilation >5 days',

'Syndromes associated with HL'], ACCENT) +

[hl_box('<b>NOTE:</b> 50% with HL have NO risk factors — Universal screening is essential!',


ACCENT)]

[Link](two_col(jcih, hrr))
[Link](SP(6))

# Screening tests

oae_scr = (

[card_title('Newborn Screening Tests', GOLD)] +

[P('TEOAE Screening', 'sub_head')] +

bullets(['Quick, non-invasive, objective',

'Pass/Refer criterion (SNR ≥6 dB)',

'Misses ANSD (normal OAE in ANSD!)',

'Most common for newborn screen'], GOLD) +

[P('AABR Screening', 'sub_head')] +

bullets(['Automated ABR — detects ANSD',

'JCIH recommends AABR for NICU',

'Better sensitivity (~99%) vs OAE (~95%)',

'Takes longer; more expensive'], GOLD)

sens = (

[card_title('Sensitivity & Specificity', LAVENDER)] +

[make_table(

['Measure', 'Value'],

[['Sensitivity', 'Ability to detect true positives'],

['Specificity', 'Ability to identify true negatives'],

['OAE Sensitivity', '~95%'],

['AABR Sensitivity', '~99%'],

['OAE Refer rate', '~4–10%'],

['AABR Refer rate', '~2–4%']],

col_widths=[130, 130],

accent=LAVENDER

)] +

[SP(4)] +

[bullet('High sensitivity preferred in screening', LAVENDER),


bullet('False positives acceptable; false negatives are not', LAVENDER)]

[Link](two_col(oae_scr, sens))

[Link](SP(6))

# Preschool + school age screening

pre = (

[P('PRESCHOOL (2–5 years)', 'sub_head')] +

bullets(['Play audiometry / VRA',

'OAE, tympanometry',

'Parent/teacher questionnaire (MAIS, IT-MAIS)'], TEAL)

sch = (

[P('SCHOOL AGE (5+ years)', 'sub_head')] +

bullets(['Pure tone sweep test (1, 2, 4 kHz at 20 dB)',

'Tympanometry for OME',

'CAPD screening: SCAN-C, dichotic digits'], TEAL)

india_scr = (

[card_title('India-Specific Screening', GOLD)] +

bullets(['RBSK — Rashtriya Bal Swasthya Karyakram (school)',

'NPPCD — National Programme Prevention & Control of Deafness',

'AIISH Mysore protocols', 'DISTV / screening camps at district level',

'Many states lack universal newborn screening',

'RCI-trained personnel for school screening'], GOLD)

[Link](two_col(pre + [SP(4)] + sch, india_scr))

[Link](SP(8))

[Link](HR())
#
═════════════════════════════════════════════════════════
══════════════

# UNIT 4: BEHAVIOURAL ASSESSMENT

#
═════════════════════════════════════════════════════════
══════════════

story += [section_header('PAEDIATRIC ASSESSMENT I — BEHAVIOURAL', 'Unit 4 — B5.3 Paediatric


Audiology', '📊', GOLD), SP(4)]

boa = (

[card_title('BOA — Behavioural Observation Audiometry', GOLD)] +

[hl_box('<b>Age:</b> 0–6 months (also difficult-to-test patients)', GOLD)] +

[SP(3)] +

bullets(['Unconditioned — no conditioning required',

'Responses: startle (Moro), eye widening, sucking change, quieting',

'Stimuli: calibrated noisemakers, warble tones, speech',

'LIMITATION: subjective, habituates, not frequency-specific',

'Overestimates hearing — used for observation, not threshold alone'], GOLD)

cor = (

[card_title('COR — Conditioned Orientation Reflex', TEAL)] +

[hl_box('<b>Age:</b> 5–12 months (precursor to VRA)', TEAL)] +

[SP(3)] +

bullets(['Visual reinforcement without formal conditioning',

'Child orients to illuminated toy on hearing sound',

'Spontaneous orientation — no training needed',

'Less precise than VRA'], TEAL)

[Link](two_col(boa, cor))

[Link](SP(6))

vra = (
[card_title('VRA — Visual Reinforcement Audiometry', ACCENT)] +

[hl_box('<b>Age:</b> 6 months – 2.5 years (developmental age)', ACCENT)] +

[SP(3)] +

bullets(['Conditioned head-turn to visual reinforcer (animated toy/video)',

'2–3 person technique: audiologist + assistant (distractor)',

'Stimuli: warble tones, NBN, speech',

'Soundfield or insert earphones (for ear-specific results)',

'Test-retest reliable; close to adult thresholds',

'TROCA: Tangible Reinforcement OC Audiometry — food reward variant'], ACCENT)

cpa = (

[card_title('CPA — Conditioned Play Audiometry', LAVENDER)] +

[hl_box('<b>Age:</b> 2.5 – 5 years', LAVENDER)] +

[SP(3)] +

bullets(['Child performs play task on hearing sound (drop block in bucket)',

'Conditioning phase required before testing',

'Stimuli: warble tones, PTA frequencies',

'Can obtain full audiogram including bone conduction',

'Reinforcement: social praise, tangible rewards'], LAVENDER)

[Link](two_col(vra, cpa))

[Link](SP(6))

# Speech audiometry + immittance

speech_aud = (

[card_title('Speech Audiometry', ROSE)] +

[make_table(

['Test', 'What it Measures'],

[['SRT — Speech Reception Threshold', 'Lowest level to repeat 50% spondees'],

['SDT — Speech Detection Threshold', 'Softest level to detect speech (young children)'],

['Speech Recognition', '% words correct at suprathreshold'],


['BC Speech', 'Bypasses outer/middle ear; tests inner ear']],

col_widths=[160, 155],

accent=ROSE

)] +

[SP(4)] +

[hl_box('Indian tools: Hindi, Kannada, Tamil speech tests from AIISH, NIMHANS, JIPMER', ROSE)]

immit = (

[card_title('Immittance Evaluation', TEAL)] +

[P('Tympanometry', 'sub_head')] +

bullets(['Type A: normal (peak at 0 daPa)',

'Type B: flat (OME, perforation)',

'Type C: negative peak (ET dysfunction)',

'<b>1000 Hz probe tone</b> for infants <4 months'], TEAL) +

[P('Acoustic Reflexes', 'sub_head')] +

bullets(['Ipsilateral & contralateral stapedial reflexes',

'Normal: 70–100 dB above threshold',

'Absent in: conductive HL, SNHL, facial nerve disorders',

'Reflex decay: suggests retrocochlear lesion'], TEAL)

[Link](two_col(speech_aud, immit))

[Link](SP(8))

[Link](HR())

[Link](PageBreak())

#
═════════════════════════════════════════════════════════
══════════════

# UNIT 5: ELECTROPHYSIOLOGICAL

#
═════════════════════════════════════════════════════════
══════════════
story += [section_header('PAEDIATRIC ASSESSMENT II — ELECTROPHYSIOLOGICAL', 'Unit 5 — B5.3
Paediatric Audiology', '⚡', LAVENDER), SP(4)]

# OAE

teoae = (

[P('TEOAE (Transient Evoked OAE)', 'sub_head')] +

bullets(['Stimulus: click (broad-band) or tone-burst',

'Tests outer hair cell (OHC) function',

'Frequency range: ~1–4 kHz',

'Pass: SNR ≥6 dB, reproducibility ≥70%',

'Primary tool for newborn screening',

'Absent if HL >30–35 dB'], TEAL)

dpoae = (

[P('DPOAE (Distortion Product OAE)', 'sub_head')] +

bullets(['Two pure tone primaries f1, f2 (ratio f2/f1 = 1.22)',

'DP frequency: 2f1–f2',

'Frequency-specific: assesses cochlear map',

'Better for monitoring ototoxicity',

'More frequency-specific than TEOAE'], TEAL)

oae_wrap = [card_title('Otoacoustic Emissions (OAE)', TEAL)] + [two_col(teoae, dpoae)]

[Link](card_wrap(oae_wrap, TEAL))

[Link](SP(6))

# ABR

abr_waves = (

[P('ABR Waves & Generators', 'sub_head')] +

[make_table(

['Wave', 'Generator', 'Latency (adult)'],

[['I', 'Distal CN VIII', '~1.5 ms'],


['II', 'Proximal CN VIII', '~2.5 ms'],

['III', 'Cochlear nucleus', '~3.5 ms'],

['IV', 'Superior Olivary Complex', '~4.5 ms'],

['V', 'Lateral Lemniscus / IC', '~5.5 ms']],

col_widths=[35, 140, 90],

accent=ACCENT

)] +

[SP(4)] +

[hl_box('<b>Wave V</b> — most robust; used for threshold estimation', ACCENT)]

abr_thresh = (

[P('Threshold Estimation ABR', 'sub_head')] +

bullets(['Click ABR: assesses 2–4 kHz region',

'Tone burst ABR: frequency-specific (500–4000 Hz)',

'ABR threshold ≈ behavioural + 10–20 dB (correction factor)',

'Natural or sedated sleep in infants',

'Insert earphones preferred (ear-specific)'], ACCENT) +

[P('Factors Affecting ABR in Children', 'sub_head')] +

bullets(['Age: latencies longer in neonates (immature myelination)',

'Conductive component increases latency',

'Sleep state, electrode impedance, movement artefact',

'Body temperature, gestational age'], ACCENT)

[Link](two_col(

[card_title('ABR — Auditory Brainstem Response', ACCENT)] + [two_col(abr_waves, abr_thresh)],

[]

))

[Link](hl_box('<b>Site of Lesion (Neurodiagnostic ABR):</b> Prolonged I–III = cochlear


nerve/low brainstem | Prolonged III–V = upper brainstem | Absent I–V = severe HL or
retrocochlear', GOLD))

[Link](SP(6))
# ASSR + AMLR + battery

assr = (

[card_title('ASSR', GOLD)] +

bullets(['Auditory Steady State Response',

'Frequency-specific: 500–4000 Hz',

'Both ears simultaneously (MASTER system)',

'Automated statistical detection',

'Good for profound HL; predicts audiogram',

'ASSR threshold ≈ behavioural ± 5–10 dB'], GOLD)

amlr = (

[card_title('AMLR & ALLR', LAVENDER)] +

[P('AMLR (Middle Latency)', 'sub_head')] +

bullets(['Waves Pa, Pb; latency 15–50 ms',

'Generators: thalamus, primary auditory cortex',

'Affected by sleep/anaesthesia'], LAVENDER) +

[P('ALLR (Long Latency / Cortical)', 'sub_head')] +

bullets(['N1, P2, N2; latency 50–300 ms',

'P300 (cognitive) for CAPD; MMN for discrimination'], LAVENDER)

battery = (

[card_title('Diagnostic Test Battery', TEAL)] +

[make_table(

['Age', 'Tests'],

[['<6 mo', 'OAE, ABR (click+TB), Tymp (1kHz), BOA'],

['6–12 mo', 'OAE, ABR/ASSR, VRA, Tympanometry'],

['1–2.5 yr', 'VRA, Tympanometry, OAE, ASSR if needed'],

['2.5–5 yr', 'CPA, Tympanometry, SRT/SDT, OAE'],

['5+ yr', 'PTA, SRT/SRS, Immittance, CAPD tests']],

col_widths=[50, 200],

accent=TEAL
)]

[Link](three_col(assr, amlr, battery))

[Link](SP(8))

[Link](HR())

# ABR maturation table

[Link](card_title('ABR Maturation — Key Latency Values', ACCENT))

[Link](make_table(

['Age', 'Wave I', 'Wave V', 'I–V Interval'],

[['Newborn', '~1.7 ms', '~7.0–7.5 ms', '~5.0–5.5 ms'],

['3 months', '~1.6 ms', '~6.5 ms', '~4.8 ms'],

['6 months', '~1.6 ms', '~6.0 ms', '~4.5 ms'],

['12 months', '~1.6 ms', '~5.8 ms', '~4.3 ms'],

['Adult (≥18 mo)', '~1.5 ms', '~5.5 ms', '~4.0 ms']],

col_widths=[100, 90, 90, 100],

accent=ACCENT

))

[Link](hl_box('Wave V latency shortens with age due to myelination. Adult values reached by
~18–24 months.', ACCENT))

[Link](SP(8))

[Link](HR())

[Link](PageBreak())

#
═════════════════════════════════════════════════════════
══════════════

# B5.4 AURAL REHABILITATION

#
═════════════════════════════════════════════════════════
══════════════

story += [section_header('AURAL REHABILITATION IN CHILDREN', 'B5.4 — All 5 Units', '🦻', GREEN),


SP(4)]
# Acoustic accessibility

snr_tech = (

[card_title('Acoustic Accessibility & SNR Technologies', GREEN)] +

[P('Key Factors', 'sub_head')] +

bullets(['SNR ideal in classroom: +15–20 dB (HI children need +20 dB)',

'Reverberation: RT60 <0.4 s for classrooms',

'Distance: every doubling = 6 dB drop in level'], GREEN) +

[P('SNR Technologies', 'sub_head')] +

bullets(['Personal FM systems (most effective)',

'Sound field FM / loop systems',

'Desktop group systems',

'Bluetooth / Roger system (newer FM)'], GREEN)

env_mod = (

[P('Environmental Modifications', 'sub_head')] +

bullets(['Carpeting, curtains (reduce reverberation)',

'Preferential seating (front, near teacher)',

'Reducing background noise sources',

'Good lighting for speechreading',

'Teacher wears FM microphone'], GREEN) +

[P('Hearing Device Types', 'sub_head')] +

bullets(['BTE — preferred for children (growing ear)',

'Paediatric features: tamper-resistant battery, retention',

'Earmold: custom fit, soft, frequent remaking needed',

'CROS aids for unilateral HL'], GREEN)

[Link](two_col(snr_tech, env_mod))

[Link](SP(6))

# HA + CI
ha = (

[card_title('Hearing Aids for Children', ACCENT)] +

bullets(['Fitting targets: DSL v5 or NAL-NL2 prescriptive',

'Verification: Real Ear Measurement (REM) / RECD',

'Validation: MAIS, IT-MAIS, PEACH questionnaires',

'Candidacy: from birth for bilateral HL ≥40 dB',

'RECD: Real Ear-to-Coupler Difference — accounts for child ear canal'], ACCENT)

ci = (

[card_title('Cochlear Implants', LAVENDER)] +

bullets(['Candidacy: bilateral severe-profound SNHL; limited HA benefit',

'Optimal age: 12 months (or earlier in some guidelines)',

'Parts: microphone, processor, transmitter, internal array',

'Benefits greatest with early implantation',

'Bilateral implants: better localization',

'ANSD patients often benefit significantly',

'Post-implant: intensive auditory-verbal therapy essential'], LAVENDER)

[Link](two_col(ha, ci))

[Link](SP(6))

# Communication options

ao = (

[P('Auditory-Oral (AO)', 'sub_head')] +

bullets(['Spoken language only; hearing aids/CI used',

'Lip reading allowed; no formal sign system'], GOLD)

avt = (

[P('Auditory-Verbal Therapy (AVT)', 'sub_head')] +

bullets(['Listening emphasized (mouth covered)',

'Parent coaching central; LSLS credential',


'Individual sessions — involves caregiver'], GOLD)

tc = (

[P('Total Communication (TC)', 'sub_head')] +

bullets(['Speech + signs + lip reading + writing',

'Signed Exact English (SEE)'], GOLD)

sign = (

[P('Manual / Sign Language', 'sub_head')] +

bullets(['ISL (Indian Sign Language) in India',

'ASL, BSL globally; bilingual-bicultural approach'], GOLD)

comm_title = [card_title('Communication Options (Unit 2)', GOLD)]

[Link](card_wrap(comm_title + [two_col(ao + [SP(2)] + avt, tc + [SP(2)] + sign)], GOLD))

[Link](SP(6))

# Auditory training levels

[Link](card_title('Auditory Training — 4 Levels (Unit 4)', TEAL))

[Link](make_table(

['Level', 'Definition', 'Example Activity'],

[['DETECTION / Awareness', 'Sound present or absent?', 'Raise hand when hear drum; Ling 6-
sound test'],

['DISCRIMINATION', 'Same or different?', '"ba" vs "pa" — same or different?'],

['IDENTIFICATION', 'What did you hear?', 'Point to picture of named animal'],

['COMPREHENSION', 'Understand message', 'Follow directions; answer WH-questions']],

col_widths=[110, 140, 165],

accent=TEAL

))

[Link](hl_box('<b>4 Design Principles for Auditory Training:</b> Skill · Stimuli · Activity ·


Difficulty Level', TEAL))

[Link](SP(4))
analytic = [P('ANALYTIC Training (Bottom-up)', 'sub_head')] + bullets([

'Focus on individual phonemes/words',

'Minimal pairs, feature discrimination',

], TEAL)

synthetic = [P('SYNTHETIC Training (Top-down)', 'sub_head')] + bullets([

'Focus on whole message/context',

'Sentences, discourse, conversational',

'More functional for real-world listening',

], TEAL)

[Link](two_col(analytic, synthetic))

[Link](SP(6))

# Validation tools

quest = (

[card_title('Validation Questionnaires', ROSE)] +

bullets(['MAIS — Meaningful Auditory Integration Scale (2+ yrs)',

'IT-MAIS — Infant-Toddler MAIS (<2 yrs)',

'PEACH — Parents\' Evaluation of Aural/Oral Performance',

'CHILD — Children\'s Home Inventory for Listening Difficulties',

'LittlEARS — for very young children'], ROSE)

sptests = (

[card_title('Speech Perception Tests', ROSE)] +

bullets(['ESP — Early Speech Perception Test',

'MLNT — Multisyllabic Lexical Neighbourhood Test',

'HINT-C — Hearing in Noise Test for Children',

'LING 6-Sound Test (m, ah, oo, ee, sh, s) — daily HA/CI check',

'CASLLS, CASD — Indian tools from NIMHANS, AIISH'], ROSE)

[Link](two_col(quest, sptests))

[Link](SP(8))
[Link](HR())

[Link](PageBreak())

#
═════════════════════════════════════════════════════════
══════════════

# INDIAN PERSPECTIVES

#
═════════════════════════════════════════════════════════
══════════════

story += [section_header('INDIAN PERSPECTIVES', 'Unit 5 — B5.4 Aural Rehabilitation', '🇮🇳', GOLD),


SP(4)]

prev = (

[card_title('Prevalence & Statistics', GOLD)] +

bullets(['~63 million people with hearing loss in India (WHO)',

'~1.84 million children under 15 with HL',

'Leading disability category in India',

'Rural areas: severely limited access to services',

'NPPCD — GoI initiative for prevention & control'], GOLD)

hist = (

[card_title('Education of the Deaf — History', TEAL)] +

bullets(['First school for deaf in India: 1883, Bombay',

'AYJNIHH — Ali Yavar Jung National Institute (apex body)',

'RCI Act 1992 — Rehabilitation Council of India',

'PWD Act 1995 → RPWD Act 2016 (rights of persons with disability)',

'SSA — Sarva Shiksha Abhiyan: inclusive education push'], TEAL)

[Link](two_col(prev, hist))

[Link](SP(6))

educ = (
[card_title('Educational Options', ACCENT)] +

bullets(['Residential schools for the deaf (state-run)',

'Day schools — integrated settings',

'Special schools (oral + signing)',

'Inclusive mainstream with support / resource rooms',

'NIOS — open schooling for HI',

'Polytechnics, colleges with interpreters'], ACCENT)

isl = (

[card_title('Indian Sign Language (ISL)', LAVENDER)] +

bullets(['Distinct language — NOT derived from ASL/BSL',

'ISLRTC — Indian Sign Language Research & Training Centre, Noida',

'ISL recognised as official language (2023)',

'ISL interpreters trained by ISLRTC / Ali Yavar Jung',

'ISL interpreter exam conducted by RCI'], LAVENDER)

[Link](two_col(educ, isl))

[Link](SP(6))

ei_centres = (

[card_title('Early Intervention Centres', GREEN)] +

bullets(['AYJNIHH — Mumbai (apex)',

'AIISH — Mysore', 'SRRI — Chennai',

'NIEPMD — Chennai (multiple disabilities)',

'Ali Yavar Jung Regional: Delhi, Kolkata, Bhubaneswar, Secunderabad',

'NGOs: Sense International, CBM India'], GREEN)

manpower = (

[card_title('Manpower & Training', ROSE)] +

bullets(['BASLP — 4-year program (Bachelor)',

'MASLP — 2-year Masters; PhD programs',


'RCI — regulates training; CRE required',

'AIISH, NIMHANS, JIPMER: premier institutes',

'Teleaudiology: emerging post-COVID',

'TELE-NIPMED: tele-rehabilitation services'], ROSE)

[Link](two_col(ei_centres, manpower))

[Link](SP(6))

[Link](card_title('India-Specific Assessment & Therapy Tools', ACCENT2))

[Link](make_table(

['Tool', 'Developed By', 'Purpose'],

[['CASLLS (Cottage Acquisition Scale)', 'Schuyler & Rushmer, adapted India', 'Listening & language
levels'],

['IT-MAIS (adapted)', 'Various centres India', 'Auditory integration in infants'],

['HA Counselling Manual', 'NIPMED Chennai (Rout & Rajendran 2015)', 'HA counselling in Indian
languages'],

['Hindi/Kannada/Tamil Speech Tests', 'AIISH, JIPMER', 'Speech audiometry in Indian languages'],

['CASD', 'NIMHANS', 'Communication assessment in children with HL']],

col_widths=[150, 140, 130],

accent=ACCENT2

))

[Link](SP(8))

[Link](HR())

#
═════════════════════════════════════════════════════════
══════════════

# CLINICALS B5.6

#
═════════════════════════════════════════════════════════
══════════════

story += [section_header('CLINICALS — B5.6', 'Know / Know-How / Show / Do Requirements', '🏥',


ACCENT), SP(4)]
know = (

[card_title('KNOW (Concepts)', ACCENT)] +

bullets(['Tympanometry & reflexometry protocols',

'ABR protocols (threshold & site of lesion)',

'OAE screening & diagnostic protocols',

'Vestibular assessment tests',

'Implantable hearing device indications',

'Speech stimulation & auditory training techniques'], ACCENT)

knowhow = (

[card_title('KNOW-HOW (Application)', TEAL)] +

bullets(['Administer ABR — threshold estimation & site of lesion',

'High frequency tympanometry + resonance frequency calculation',

'Administer high risk register (HRR)',

'Modify environment for hearing impairment'], TEAL)

[Link](two_col(know, knowhow))

[Link](SP(6))

[Link](card_title('DO — Clinical Requirements (Numbers to Know!)', GOLD))

[Link](make_table(

['Clinical Task', 'Required Cases'],

[['ABR waveform analysis — threshold estimation', '5'],

['ABR waveform analysis — site of lesion', '5'],

['Immittance audiometry — conductive HL', '5'],

['Immittance audiometry — SNHL', '5'],

['Threshold estimation: infants <2 years', '5'],

['TEOAE & DPOAE: infants <2 years', '5'],

['BOA: infants <2 years', '5'],

['VRA: infants 6 mo – 3 yr', '2'],

['Conditioned play audiometry: 3–6 years', '3'],


['Hearing aid fitment: infants <3 years', '1'],

['Hearing aid fitment: children 3–6 years', '2'],

['Listening age assessment of children with HI', '3'],

['Auditory training on children with HL', '5']],

col_widths=[350, 65],

accent=GOLD

))

[Link](SP(6))

eval_int = (

[card_title('Evaluation — Internal', TEAL)] +

bullets(['Attendance', 'Clinical diary', 'Log book', 'Learning conference'], TEAL)

eval_ext = (

[card_title('Evaluation — External', ACCENT)] +

bullets(['Spot test', 'OSCE (Objective Structured Clinical Examination)',

'Record (log book / clinical diary)', 'Viva-voce', 'Case work'], ACCENT)

[Link](two_col(eval_int, eval_ext))

[Link](SP(8))

[Link](HR())

[Link](PageBreak())

#
═════════════════════════════════════════════════════════
══════════════

# QUICK REFERENCE + VIVA TIPS

#
═════════════════════════════════════════════════════════
══════════════

story += [section_header('QUICK REFERENCE & VIVA TIPS', 'Key Facts, Tables & Commonly Asked
Questions', '⚡', TEAL), SP(4)]
# Tympanogram types

[Link](card_title('Tympanogram Types — Jerger Classification', TEAL))

[Link](make_table(

['Type', 'Peak', 'Interpretation', 'Clinical Significance'],

[['A', 'Normal, 0 daPa', 'Normal middle ear', 'Normal'],

['As', 'Shallow, 0 daPa', 'Reduced compliance', 'Otosclerosis, malleus fixation'],

['Ad', 'Deep/peaked', 'Increased compliance', 'Ossicular discontinuity, TM flaccidity'],

['B', 'Flat, no peak', 'No compliance change', 'OME, TM perforation, impacted cerumen'],

['C', 'Negative pressure peak', 'Negative ME pressure', 'Eustachian tube dysfunction']],

col_widths=[35, 110, 110, 160],

accent=TEAL

))

[Link](SP(6))

# Hearing degree classification

[Link](card_title('Degree of Hearing Loss — ASHA Classification', ACCENT))

[Link](make_table(

['Degree', 'Range (dB HL)', 'Typical Impact'],

[['Normal', '-10 to 15 dB', 'No significant impact'],

['Minimal', '16–25 dB', 'Difficulty in noise, faint speech'],

['Mild', '26–40 dB', 'Difficulty with soft/distant speech'],

['Moderate', '41–55 dB', 'Conversational speech problematic'],

['Moderately Severe', '56–70 dB', 'Loud speech needed'],

['Severe', '71–90 dB', 'Only amplified speech; HA/CI'],

['Profound', '91+ dB', 'May not benefit from HA; CI candidate']],

col_widths=[110, 110, 200],

accent=ACCENT

))

[Link](SP(6))

# Ling 6 + ANSD
ling = (

[card_title('Ling 6-Sound Test', GOLD)] +

[hl_box('<b>Daily check of HA/CI function</b> — spans speech frequency range', GOLD)] +

[SP(4)] +

[make_table(

['Sound', 'Frequency Region'],

[['m', 'Low (250–500 Hz)'],

['ah', 'Low-mid (750–1000 Hz)'],

['oo', 'Low-mid'],

['ee', 'Mid (2000 Hz)'],

['sh', 'High (2500–3500 Hz)'],

['s', 'Very high (4000+ Hz)']],

col_widths=[60, 130],

accent=GOLD

)]

ansd_ref = (

[card_title('ANSD — Must Know', ROSE)] +

[hl_box('<b>Pattern: Normal OAE + Abnormal ABR = ANSD</b>', ROSE)] +

[SP(4)] +

bullets(['OHC intact → OAE present (initially)',

'Neural dyssynchrony → abnormal ABR',

'Audiogram: variable, can be normal',

'Speech understanding: disproportionately poor',

'FM systems reduce effect of noise',

'CI outcomes: generally very good'], ROSE) +

[P('ANSD Risk Factors', 'sub_head')] +

bullets(['Hyperbilirubinemia', 'Prematurity', 'Hypoxia/birth asphyxia'], ROSE)

[Link](two_col(ling, ansd_ref))

[Link](SP(6))
# Key abbreviations

[Link](card_title('Critical Abbreviations', ACCENT))

abbr_data = [

['OAE', 'Otoacoustic Emission', 'ABR', 'Auditory Brainstem Response'],

['TEOAE', 'Transient Evoked OAE', 'ASSR', 'Auditory Steady State Response'],

['DPOAE', 'Distortion Product OAE', 'AMLR', 'Auditory Middle Latency Response'],

['BOA', 'Behavioural Observation Audiometry', 'ALLR', 'Auditory Long Latency Response'],

['VRA', 'Visual Reinforcement Audiometry', 'CAPD', 'Central Auditory Processing Disorder'],

['CPA', 'Conditioned Play Audiometry', 'ANSD', 'Auditory Neuropathy Spectrum Disorder'],

['COR', 'Conditioned Orientation Reflex', 'JCIH', 'Joint Committee on Infant Hearing'],

['TROCA', 'Tangible Reinforcement OC Audiometry', 'EHDI', 'Early Hearing Detection &


Intervention'],

['MAIS', 'Meaningful Auditory Integration Scale', 'HRR', 'High Risk Register'],

['PEACH', "Parents' Eval. of Aural/Oral Performance", 'ISL', 'Indian Sign Language'],

['AYJNIHH', 'Ali Yavar Jung National Institute HH', 'ISLRTC', 'ISL Research & Training Centre'],

abbr_rows = []

for row in abbr_data:

abbr_rows.append([

Paragraph(f'<b>{row[0]}</b>', STYLES['td_bold']),

Paragraph(row[1], STYLES['td']),

Paragraph(f'<b>{row[2]}</b>', STYLES['td_bold']),

Paragraph(row[3], STYLES['td']),

])

abbr_t = Table(abbr_rows, colWidths=[55, 165, 75, 125])

abbr_t.setStyle(TableStyle([

('ROWBACKGROUNDS', (0,0), (-1,-1), [CARD_BG, CARD_BG2]),

('LINEBELOW', (0,0), (-1,-1), 0.3, BORDER),

('LEFTPADDING', (0,0), (-1,-1), 7),

('RIGHTPADDING', (0,0), (-1,-1), 7),


('TOPPADDING', (0,0), (-1,-1), 5),

('BOTTOMPADDING', (0,0), (-1,-1), 5),

('GRID', (0,0), (-1,-1), 0.2, BORDER),

]))

[Link](abbr_t)

[Link](SP(8))

[Link](HR(GOLD))

#
═════════════════════════════════════════════════════════
══════════════

# VIVA Q&A

#
═════════════════════════════════════════════════════════
══════════════

story += [section_header('VIVA TIPS — Commonly Asked Questions', 'Prepare these answers cold!',
'💡', GOLD), SP(4)]

viva_pairs = [

('Why is 1000 Hz probe tone used for infants?',

'High-frequency probe gives reliable tympanogram in infants because their compliant ear canals
cause 226 Hz to produce false/flat peaks. Infant canal compliance is dominated by mass, not
stiffness.'),

('Why is AABR preferred over OAE alone in NICU?',

'OAE tests only outer hair cell function and MISSES ANSD (which has normal OAE but abnormal
neural response). AABR screens the entire auditory neural pathway and detects ANSD.'),

('Difference between TEOAE and DPOAE?',

'TEOAE uses a click stimulus, tests all OHCs across ~1–4 kHz, and is primary for newborn
screening. DPOAE uses two pure tones (f1, f2; ratio 1.22), is frequency-specific, better for monitoring
ototoxicity.'),

('What does ABR Wave V represent? Why is it important?',

'Wave V is generated at the junction of lateral lemniscus and inferior colliculus. It is the most
robust wave, present even at threshold levels, and is used for threshold estimation in infants.'),

('What is neuroplasticity and why does it matter in early hearing loss?',


'Neuroplasticity is the brain\'s ability to reorganise based on sensory input. The critical sensitive
period is 0–3.5 years. Intervention before this window maximises spoken language outcomes as
auditory cortex is still forming its connections.'),

('Difference between BOA and VRA?',

'BOA is unconditioned, reflexive, unreliable, habituates quickly — used 0–6 months. VRA is a
conditioned operant response (head-turn for visual reward), more accurate, age 6 months+, and can
obtain near-adult thresholds.'),

('What is the ANSD key feature?',

'Normal or present OAE (outer hair cells intact) + Absent or severely abnormal ABR (neural
dyssynchrony). The pure tone audiogram is variable. Speech understanding is disproportionately
poor compared to audiogram.'),

('Why is CAPD diagnosed only after age 7?',

'The central auditory system is not fully myelinated before age 7. Diagnostic tests would be
unreliable and results cannot be distinguished from normal developmental immaturity.'),

('What is the Ling 6-Sound Test and why is it used?',

'A daily functional check of HA/CI function using 6 sounds (m, ah, oo, ee, sh, s) that span the
speech frequency range from ~250–4000 Hz. Used to verify device is working before each therapy
session.'),

('Key addition in JCIH 2013?',

'Extended screening to <35 weeks gestation, included mild and unilateral HL for surveillance,
established EHDI infrastructure benchmarks, and improved loss-to-follow-up tracking.'),

('What is DSL v5 and why is it used for children?',

'Desired Sensation Level is a paediatric hearing aid fitting method that calculates target gains
based on audiogram + RECD, ensuring adequate audibility of speech across all frequencies for a
growing ear canal.'),

('Explain the 1-3-6 principle.',

'Screen by 1 month of age. Confirm diagnosis by 3 months. Begin early intervention (hearing aids
+ therapy) by 6 months. Evidence shows outcomes are dramatically better when intervention begins
before 6 months.'),

for q, a in viva_pairs:

[Link](P(f'Q: {q}', 'viva_q'))

[Link](P(a, 'viva_a'))

[Link](SP(8))
[Link](HR(TEAL))

[Link](SP(4))

[Link](P('<b>Good luck, Harini!</b> You\'ve got this. 💙', 'hero_sub'))

# ─────────────────────────────────────────────────────────────────────────────

# BUILD PDF

# ─────────────────────────────────────────────────────────────────────────────

out = '/mnt/user-data/outputs/Audiology_Viva_CheatSheet.pdf'

doc = SimpleDocTemplate(

out, pagesize=A4,

leftMargin=MARGIN, rightMargin=MARGIN,

topMargin=14*mm, bottomMargin=18*mm,

title='Audiology Viva Cheat Sheet — Sem 5',

author='Claude'

[Link](story, onFirstPage=on_page, onLaterPages=on_page)

print('Done:', out)

Das könnte Ihnen auch gefallen