what is Sialendoscopy , its indications , contraindications , complications , treatment options and techniques . Associated
sialendoscopy
sialendoscopy indications contraindications complications technique review
https://pmc.ncbi.nlm.nih.gov/articles/PMC3938711
PMID: 37486613
sialendoscopy salivary duct endoscopic basket stone removal diagram
| Problem | Endoscopic treatment |
|---|---|
| Small mobile stone | Retrieval with wire basket or grasping forceps |
| Moderate duct stenosis | Hydrodilatation with saline, bougie/probe dilatation, balloon dilatation |
| Mucus plug, debris, inflammatory material | Irrigation/lavage and extraction |
| Larger stone | Intracorporeal laser or pneumatic lithotripsy, then basket removal |
| Large, impacted, proximal stone | Endoscopic-assisted intraoral or external combined approach |
| Recurrent inflammatory disease/JRP/Sjögren-related obstruction | Lavage, duct dilatation, removal of plugs; selected use of intraductal corticosteroid irrigation |
| Severe persistent disease not salvageable | Gland excision is a last-line option |
Create a quick-reference PDF on sialendoscopy
~/
mkdir -p "/tmp/workspace/sialendoscopy-quick-reference/src" "/tmp/workspace/sialendoscopy-quick-reference/output" && python - <<'PY' from reportlab.lib import colors from reportlab.lib.enums import TA_CENTER from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import mm from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, KeepTogether, PageBreak from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics from reportlab.lib.colors import HexColor from reportlab.pdfbase.pdfmetrics import registerFontFamily from reportlab.lib import utils from reportlab.pdfgen.canvas import Canvas from reportlab.platypus import Flowable from reportlab.pdfbase.pdfmetrics import getAscentDescent out='/tmp/workspace/sialendoscopy-quick-reference/output/Sialendoscopy_Quick_Reference.pdf' NAVY=HexColor('#12324A'); TEAL=HexColor('#007C83'); PALE=HexColor('#EAF5F5'); LIGHT=HexColor('#F4F7F8'); RED=HexColor('#A83C3C'); AMBER=HexColor('#FFF2D8'); DARK=HexColor('#1F2933'); GREY=HexColor('#5B6770'); BORDER=HexColor('#C7D4D9') styles=getSampleStyleSheet() styles.add(ParagraphStyle(name='TitleQR', parent=styles['Title'], fontName='Helvetica-Bold', fontSize=22, leading=26, textColor=NAVY, spaceAfter=4)) styles.add(ParagraphStyle(name='SubQR', parent=styles['Normal'], fontName='Helvetica', fontSize=9.5, leading=13, textColor=GREY, spaceAfter=10)) styles.add(ParagraphStyle(name='H1QR', parent=styles['Heading1'], fontName='Helvetica-Bold', fontSize=13, leading=16, textColor=NAVY, spaceBefore=8, spaceAfter=5)) styles.add(ParagraphStyle(name='H2QR', parent=styles['Heading2'], fontName='Helvetica-Bold', fontSize=10.2, leading=13, textColor=TEAL, spaceBefore=4, spaceAfter=3)) styles.add(ParagraphStyle(name='BodyQR', parent=styles['BodyText'], fontName='Helvetica', fontSize=8.6, leading=11.5, textColor=DARK, spaceAfter=3)) styles.add(ParagraphStyle(name='SmallQR', parent=styles['BodyText'], fontName='Helvetica', fontSize=7.5, leading=9.5, textColor=DARK, spaceAfter=2)) styles.add(ParagraphStyle(name='TinyQR', parent=styles['BodyText'], fontName='Helvetica', fontSize=6.8, leading=8.4, textColor=GREY)) styles.add(ParagraphStyle(name='BoxHead', parent=styles['BodyText'], fontName='Helvetica-Bold', fontSize=9, leading=11, textColor=NAVY, spaceAfter=2)) styles.add(ParagraphStyle(name='BoxText', parent=styles['BodyText'], fontName='Helvetica', fontSize=8.1, leading=10.4, textColor=DARK)) class Rule(Flowable): def __init__(self, width, color=TEAL, height=3): Flowable.__init__(self); self.width=width; self.height=height; self.color=color def draw(self): self.canv.setFillColor(self.color); self.canv.rect(0,0,self.width,self.height,stroke=0,fill=1) def P(text, style='BodyQR'): return Paragraph(text, styles[style]) def bullet(items, style='BodyQR'): return [P('• '+x, style) for x in items] def box(title, text, bgcolor=PALE, textstyle='BoxText'): t=Table([[P(title,'BoxHead')],[P(text,textstyle)]], colWidths=[172*mm]) t.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),bgcolor),('BOX',(0,0),(-1,-1),0.5,BORDER),('LEFTPADDING',(0,0),(-1,-1),5),('RIGHTPADDING',(0,0),(-1,-1),5),('TOPPADDING',(0,0),(-1,-1),4),('BOTTOMPADDING',(0,0),(-1,-1),4)])) return t def footer(canvas, doc): canvas.saveState() canvas.setStrokeColor(BORDER); canvas.setLineWidth(.4); canvas.line(18*mm, 12*mm, 192*mm, 12*mm) canvas.setFont('Helvetica',7); canvas.setFillColor(GREY) canvas.drawString(18*mm,7.8*mm,'Sialendoscopy Quick Reference | Educational use only') canvas.drawRightString(192*mm,7.8*mm,f'Page {doc.page}') canvas.restoreState() doc=SimpleDocTemplate(out,pagesize=A4,rightMargin=18*mm,leftMargin=18*mm,topMargin=14*mm,bottomMargin=17*mm) story=[] story += [P('Sialendoscopy','TitleQR'), P('Quick-reference guide for diagnosis and gland-preserving treatment of obstructive major salivary-gland disease','SubQR'), Rule(174*mm), Spacer(1,5)] story += [box('AT A GLANCE','A minimally invasive endoscopic procedure that enters <b>Stensen duct</b> (parotid) or <b>Wharton duct</b> (submandibular) through the natural papilla. It provides direct duct visualization and can diagnose and treat stones, mucus plugs, inflammation, and stenosis while preserving the gland.'), Spacer(1,6)] story += [P('Indications','H1QR')] left=[P('<b>Obstructive disease</b>','H2QR')]+bullet(['Sialolithiasis, especially small or mobile ductal stones','Ductal stenosis/stricture, kinking, webs, or scarring','Mucus plugs, debris, or recurrent obstructive swelling','Unexplained recurrent swelling when imaging is non-diagnostic']) right=[P('<b>Inflammatory/recurrent disease</b>','H2QR')]+bullet(['Chronic obstructive sialadenitis or recurrent parotitis','Juvenile recurrent parotitis','Selected Sjögren-related recurrent obstructive sialadenitis','Selected radioiodine-induced sialadenitis']) t=Table([[left,right]],colWidths=[86*mm,86*mm]); t.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'TOP'),('BOX',(0,0),(-1,-1),.4,BORDER),('INNERGRID',(0,0),(-1,-1),.4,BORDER),('BACKGROUND',(0,0),(-1,-1),LIGHT),('LEFTPADDING',(0,0),(-1,-1),5),('RIGHTPADDING',(0,0),(-1,-1),5),('TOPPADDING',(0,0),(-1,-1),3),('BOTTOMPADDING',(0,0),(-1,-1),3)])); story += [t] story += [P('Contraindications and cautions','H1QR')] story += [box('DEFER IN ACTIVE INFECTION','<b>Acute bacterial or suppurative sialadenitis</b> is the key temporary contraindication. Treat the infection first. Pus, bleeding, edema, and friable duct walls reduce visibility and raise the risk of false passage, perforation, or duct rupture.', AMBER)] story += [Spacer(1,4)] story += bullet(['<b>Relative limitations:</b> non-cannulable papilla, complete distal duct obliteration, very large/impacted intraglandular stones, suspected neoplasm, or inability to tolerate anesthesia.','Large stones are not necessarily excluded: fragmentation or a combined endoscopic-assisted approach may allow gland preservation.']) story += [P('Procedure: core sequence','H1QR')] sequence=[['1. Plan','History, exam, duct massage, and imaging. Ultrasound is common first-line; CT defines stone site/size; MR sialography helps assess non-calcified duct disease.'],['2. Access','Local anesthesia with/without sedation for selected adults; general anesthesia for children, complex work, or long procedures. Identify papilla and serially dilate it.'],['3. Inspect','Introduce a diagnostic or operative endoscope with continuous saline irrigation. Examine main duct and accessible branches.'],['4. Treat','Retrieve stones or debris, dilate strictures, fragment larger stones, and consider lavage with selected intraductal medication based on pathology.'],['5. Reassess','Confirm duct patency and clearance. Follow symptoms, recurrent swelling, infection, and residual stones.']] t=Table([[P('<b>'+a+'</b>','SmallQR'),P(b,'SmallQR')] for a,b in sequence],colWidths=[28*mm,144*mm]); t.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'TOP'),('GRID',(0,0),(-1,-1),.35,BORDER),('BACKGROUND',(0,0),(0,-1),PALE),('LEFTPADDING',(0,0),(-1,-1),5),('RIGHTPADDING',(0,0),(-1,-1),5),('TOPPADDING',(0,0),(-1,-1),4),('BOTTOMPADDING',(0,0),(-1,-1),4)]));story += [t] story += [PageBreak(),P('Treatment options and techniques','TitleQR'),P('Select the least invasive gland-preserving option that matches stone size, mobility, location, duct anatomy, and local expertise.','SubQR'),Rule(174*mm),Spacer(1,5)] rows=[[P('<b>Finding</b>','SmallQR'),P('<b>Preferred endoscopic option</b>','SmallQR'),P('<b>Escalation / alternative</b>','SmallQR')], [P('Small mobile stone','SmallQR'),P('Wire-basket or forceps retrieval','SmallQR'),P('Transoral removal for accessible anterior submandibular stones','SmallQR')], [P('Large or impacted stone','SmallQR'),P('Laser or pneumatic intracorporeal lithotripsy, then fragment retrieval','SmallQR'),P('Endoscopic-assisted transoral or small external combined approach','SmallQR')], [P('Duct stenosis / stricture','SmallQR'),P('Saline hydrodilatation, serial dilation, balloon dilation','SmallQR'),P('Selected stent placement, combined surgery, or bypass in refractory disease','SmallQR')], [P('Mucus plugs / debris','SmallQR'),P('Irrigation/lavage and removal of intraductal material','SmallQR'),P('Address underlying inflammatory/autoimmune or radioiodine-related disease','SmallQR')], [P('JRP / Sjögren-related obstruction','SmallQR'),P('Diagnostic inspection, lavage, dilation; selected steroid irrigation','SmallQR'),P('Multidisciplinary management; repeat procedures only when clinically justified','SmallQR')], [P('Failure of gland preservation','SmallQR'),P('Reassess imaging and diagnosis','SmallQR'),P('Open stone surgery or sialadenectomy only in selected refractory cases','SmallQR')]] t=Table(rows,colWidths=[36*mm,76*mm,60*mm],repeatRows=1);t.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,0),NAVY),('TEXTCOLOR',(0,0),(-1,0),colors.white),('GRID',(0,0),(-1,-1),.4,BORDER),('VALIGN',(0,0),(-1,-1),'TOP'),('ROWBACKGROUNDS',(0,1),(-1,-1),[colors.white,LIGHT]),('LEFTPADDING',(0,0),(-1,-1),4),('RIGHTPADDING',(0,0),(-1,-1),4),('TOPPADDING',(0,0),(-1,-1),4),('BOTTOMPADDING',(0,0),(-1,-1),4)]));story += [t] story += [P('Key instruments','H1QR')] story += bullet(['<b>Diagnostic scope:</b> optic/light source, often with irrigation only.','<b>Therapeutic scope:</b> working channel for wire basket, grasping forceps, microdrill, laser fiber, or balloon dilator.','<b>Irrigation:</b> continuous saline improves distension and visibility, and helps clear inflammatory debris.']) story += [P('Complications','H1QR')] comp_left=[P('<b>Usually mild/transient</b>','H2QR')]+bullet(['Gland/floor-of-mouth swelling and pain','Minor ductal bleeding or edema','Post-procedure sialadenitis','Incomplete stone clearance or recurrence'],'SmallQR') comp_right=[P('<b>Important complications</b>','H2QR')]+bullet(['Duct perforation or false passage','Papillary/ductal scarring or stenosis','Irrigation extravasation; rarely severe tongue/floor-of-mouth edema','Lingual nerve paresthesia, especially with submandibular combined surgery','Rare need for unplanned open surgery or gland excision'],'SmallQR') t=Table([[comp_left,comp_right]],colWidths=[86*mm,86*mm]);t.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'TOP'),('BOX',(0,0),(-1,-1),.4,BORDER),('INNERGRID',(0,0),(-1,-1),.4,BORDER),('LEFTPADDING',(0,0),(-1,-1),5),('RIGHTPADDING',(0,0),(-1,-1),5),('TOPPADDING',(0,0),(-1,-1),3),('BOTTOMPADDING',(0,0),(-1,-1),3)]));story += [t,Spacer(1,5)] story += [box('EVIDENCE SNAPSHOT','A 2024 systematic review and meta-analysis of 91 studies (8,218 patients; 9,043 procedures) reported pooled success of <b>80.9%</b>. Stone disease had higher pooled success (<b>89.6%</b>) than stenosis (<b>56.3%</b>). The review reported no major complications in its analyzed studies, although study bias was often medium or high.', PALE)] story += [Spacer(1,6),P('Safety and referral reminders','H1QR')] story += bullet(['Do not use routine sialendoscopy as the main diagnostic pathway for a suspected salivary-gland tumor. Prioritize appropriate imaging and tissue diagnosis.','Acute infection, high fever, rapidly progressive swelling, trismus, dysphagia, dyspnea, or floor-of-mouth/tongue swelling requires urgent clinical assessment.','Technique selection should be made by a trained ENT or oral and maxillofacial surgeon with appropriate equipment.']) story += [Spacer(1,5),P('<b>References</b>','H2QR'),P('Cummings Otolaryngology Head and Neck Surgery, Sialendoscopy section, pp. 3871 and 3878. Beumer LJ et al. Success rate of sialendoscopy: a systematic review and meta-analysis. <i>Oral Diseases</i>. 2024;30:1603-1618. PMID: 37486613. Singh PP, Gupta V. Sialendoscopy: Introduction, Indications and Technique. <i>Indian J Otolaryngol Head Neck Surg</i>. 2014;66(Suppl 1):74-78.','TinyQR')] doc.build(story,onFirstPage=footer,onLaterPages=footer) print(out) PY python - <<'PY' from pypdf import PdfReader p='/tmp/workspace/sialendoscopy-quick-reference/output/Sialendoscopy_Quick_Reference.pdf' r=PdfReader(p) print('pages=',len(r.pages),'bytes=',__import__('os').path.getsize(p)) for i,page in enumerate(r.pages,1): print(i, (page.extract_text() or '')[:100].replace('\n',' | ')) PY
Sialendoscopy Quick Reference
PDF Document · PDF