make a powerpoint presentation on this article for journal club as a first year surgical resident, include the statistics in pie chart or bar graph as indicated, make it interactive. and make the first slide with the heading of the article and include dr Sejal goyal as presenter and dr prof n.k. singh as moderator. make it short and precise, include photographs as required. make it black and white
cd /tmp/workspace && ls -la; python -c " import pdfplumber p=pdfplumber.open('/tmp/workspace/attachments/4c6f3e6c-1021-4320-981c-8c2627b832d4/liao-et-al-2026-early-repair-of-common-bile-duct-injuries-achieves-superior-outcomes-and-may-reduce-malpractice.pdf') print(len(p.pages)) t='' for i,pg in enumerate(p.pages): t+=f'\n=====PAGE {i+1}\n'+(pg.extract_text() or '') open('/tmp/workspace/article.txt','w').write(t) print(len(t)) "
sed -n 33,400p /tmp/workspace/article.txt | cut -c1-400 | head -c 24000
laparoscopic cholecystectomy critical view of safety

Laparoscopic clinical photographs demonstrating a subtotal cholecystectomy procedure focusing on the closure of the gallbladder remnant. Image (a) shows an intraoperative surgical field with a view of the liver bed (reddish-brown tissue) and the inflamed remnant of the gallbladder wall (yellowish-green tissue). A laparoscopic needle holder is seen placing a continuous suture using a blue monofilament thread to approximate the tissue. Image (b) provides a high-magnification view of a LapraTy® absorbable suture clip being applied to secure the suture line. A metallic clip applier is positioned over the blue suture, compressing the clip onto the fragile tissue. The surgical field exhibits signs of chronic inflammation and discoloration, typical of difficult laparoscopic cholecystectomy cases where severe adhesions or inflammation preclude achieving the Critical View of Safety (CVS). These images illustrate an alternative reconstructive technique using suture clips to ensure secure closure of the cystic duct or gallbladder remnant when standard stapling is unfeasible.

Laparoscopic intraoperative photograph showing the dissection of the Triangle of Safety during a cholecystectomy. The image displays the inferior surface of the liver (reddish-brown parenchyma) and the retracted gallbladder. A laparoscopic dissecting instrument is actively manipulating and dividing connective tissues within the triangle, which is bordered by the cystic duct, the cystic artery/gallbladder wall, and the liver bed. Visible features include glistening peritoneal surfaces, yellow fatty tissue along the gallbladder wall, and the initial exposure of the cystic duct-infundibular junction. This clinical visual demonstrates the 'top-down' or fundus-first dissection technique where the surgeon clears tissues close to the gallbladder wall to achieve the critical view of safety, thereby avoiding injury to the common bile duct and other vital structures in Calot's triangle.

This clinical photograph displays an intraoperative laparoscopic view of the hepatobiliary region during a surgical procedure, utilizing Indocyanine Green Near-Infrared Fluorescence (ICG-NIRF) in overlay mode. The image demonstrates the 'critical view of safety' dissection. A key anatomical variation is highlighted by a black arrow: a supravescicular bile duct (an accessory bile duct), which exhibits bright green fluorescence. This fluorescent signal allows for the real-time differentiation of biliary structures from surrounding connective tissue, adipose tissue, and the gallbladder wall, which appear in natural shades of pale yellow, pink, and red under standard white light. Surgical instruments, including a laparoscopic grasper and a suction/dissection probe, are visible manipulating the tissues. The use of ICG fluorescence cholangiography (ICG-FC) here serves to enhance patient safety by identifying aberrant biliary anatomy that might otherwise be at risk of inadvertent injury during cholecystectomy.

This intraoperative laparoscopic photograph captures a clinical view of the hepatobiliary region during a completion cholecystectomy. The image demonstrates the anterograde dissection of a gallbladder remnant to achieve the 'Critical View of Safety' within Calot's triangle. A laparoscopic grasper is seen retracting the fundus or body of the gallbladder remnant superiorly and laterally, while a second instrument, a laparoscopic hook or Maryland dissector, is positioned to clear the cystic plate and identify the cystic duct and cystic artery. The surgical field displays the inferior surface of the liver, adjacent omental adipose tissue, and the infundibulum of the gallbladder. The tissues appear congested and represent a secondary surgical environment with post-inflammatory changes. This visual is intended for educational use in general surgery, specifically demonstrating safe laparoscopic dissection techniques and the identification of anatomical landmarks to prevent bile duct injuries.

This composite clinical image demonstrates intraoperative indocyanine green (ICG) fluorescence angiography during a laparoscopic cholecystectomy. The main surgical field illustrates Calot's triangle dissection using a PINPOINT endoscopic fluorescence imaging system. A series of yellow arrows highlights the cystic artery, which appears as a distinct, bright green fluorescent tubular structure against the surrounding anatomical tissues. The technique provides real-time vascular visualization, allowing for a clear differentiation between the cystic artery and the cystic duct. The sidebar contains three smaller frames showing the same operative field in different modalities: a standard white-light view (top), a monochromatic fluorescence view (middle), and a combined color-fluorescence overlay (bottom). This pedagogical material is used to teach safe laparoscopic techniques, emphasizing the identification of critical biliary and vascular structures to prevent bile duct injuries and ensure a 'critical view of safety' during gallbladder removal.

This composite of three endoscopic still images (A-C) illustrates key steps in a laparoscopic cholecystectomy, focusing on the identification of safe anatomical landmarks and the 'Critical View of Safety' (CVS). Panel A demonstrates the initial dissection within Calot's triangle, where a white surgical gauze is placed behind the cystic structures to enhance contrast and safety during the isolation of the cystic duct. Panel B shows the field after the gauze is removed, with orange arrows clearly identifying the skeletonized cystic duct and cystic artery, confirming the achievement of the Critical View of Safety. Panel C utilizes a yellow arrow and a transparent overlay to mark the 'D-line' (Deziel's line) on the surface of liver segment IV. This landmark serves as a reference plane for safe dissection, indicating a surgical boundary that is distant from major vasculo-biliary structures. The series is designed for surgical education to teach safe dissection techniques and landmark recognition to prevent bile duct injuries.
cholangiogram bile duct injury stricture

This diagnostic image is a percutaneous transhepatic cholangiogram (PTC) showing the biliary tree of a human patient. The radiograph demonstrates significant dilation of the intrahepatic biliary ducts (IHBDs) bilaterally, appearing as enlarged, contrast-filled branching structures within the liver parenchyma. The common hepatic duct (CHD) is also dilated and terminates abruptly in a complete cutoff approximately 1.4 cm below the hilar confluence. No contrast material is seen passing into the common bile duct or duodenum, confirming a high-grade biliary obstruction or stricture. A drainage catheter is visible entering the right side of the biliary system. This clinical presentation is consistent with a Bismuth type II biliary stricture (Strasberg E2 injury). The image is used for preoperative planning of bilioenteric anastomosis, such as a Roux-en-Y hepaticojejunostomy, and is categorized under gastrointestinal radiology and hepatobiliary surgery educational materials.

This composite of diagnostic fluoroscopic images illustrates the management of a bile duct injury (BDI) using percutaneous techniques. Image (a) is a percutaneous transhepatic cholangiogram (PTC) showing a Chiba needle used for contrast injection. It demonstrates a stricture in the common hepatic duct (CHD) and a lateral extravasation (leak) of contrast medium. Image (b) shows the subsequent placement of a percutaneous transhepatic drain (PTD) extending from the biliary tree into the duodenum, confirming patency and the absence of further dye extravasation. Image (c) is a follow-up PTC performed 10 days post-PTD insertion, showing stable placement and no evidence of leakage. A pigtail catheter is visible across all three images, positioned to drain a localized subhepatic collection. The series demonstrates the transition from diagnostic identification of a biliary leak and stricture to therapeutic biliary stenting and drainage in a hepatobiliary clinical context.

This composite educational graphic illustrates the management and follow-up of a complex (Strasberg-Bismuth Type E2/D) bile duct injury (BDI) using fish-mouth shaping (FMS) biliary reconstruction.

A multi-panel series of fluoroscopic and endoscopic images illustrating endobiliary radiofrequency ablation (RFA). (A) Baseline fluoroscopic cholangiogram shows a normal, non-dilated common bile duct (CBD) filled with contrast. (B) Endoscopic view of a biliary sphincterotomy being performed at the papilla. (C) Fluoroscopic image displaying an RFA catheter positioned within the distal CBD. (D, E) Sequential fluoroscopic images demonstrating the 'suction technique' or vacuum evacuation. In these views, the CBD lumen appears collapsed around the RFA catheter, ensuring maximal circumferential contact between the catheter's electrode and the CBD mucosa to optimize energy delivery. This technique is used to create consistent thermal injury even in cases of ductal dilation. The images represent procedural steps in an animal model study (porcine) aimed at investigating benign biliary stricture formation following thermal ablation, which is relevant for clinical interventional gastroenterology and endoscopic retrograde cholangiopancreatography (ERCP) education.

This multi-modal image series demonstrates the evolution and management of a post-ERCP subphrenic abscess. Panels A and B (axial and coronal contrast-enhanced CT) reveal a massive, fluid-attenuating (15 HU) subphrenic collection (*) consistent with an abscess. It causes significant compression and inflammatory enhancement of the adjacent liver parenchyma (+). Associated features include right-sided pleural effusion and basal lung atelectasis. A metallic common bile duct (CBD) stent is visible (arrowheads). Panel C shows post-drainage resolution on CT. Panels D and E are fluoroscopic images during endoscopic retrograde cholangiopancreatography (ERCP); Panel D shows the absent stent due to distal migration, while Panel E (endoscopic cholangiogram) identifies a persistent iatrogenic biliary stricture (arrow). Panel F (T2-weighted MRI) confirms abscess resolution, showing low signal intensity in the subphrenic space consistent with residual fibrosis (*). The series highlights clinical complications of biliary intervention, specifically abscess formation following iatrogenic injury and stent migration.
"bile ducts"[MeSH Terms] AND "timing of repair"
PMID: 41266841
cd /tmp/workspace && mkdir -p cbdi-journal-club/assets cbdi-journal-club/output && python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_418f726eb5b40ce1fcaa43fcd2ef24e194f439cb60633bf5519684d463848160.jpg" "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_57b3aff2722c95809ac59b46add9363dab5c395cd2df23b51592534e96be1d02.jpg" "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_4a0221857c023aa1827fcb674d5cce4cf916d03222cfe14aa833279c0d838fc9.jpg" "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_66b1fa68021a517749ccaca6e66b54f497e5f4faa06c4bb980b6425d8c95e7dd.jpg" "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_6c65343c9f9ab948d2884698b0112eb2b140a23637bd2caa3ce95b16f3c12a5a.jpg" > imgs.json; python - <<'E' import json,base64 from PIL import Image from io import BytesIO d=json.load(open('/tmp/workspace/imgs.json')) names=['mrcp_e2','ptc_e2','cvs_composite','ptc_leak','calot_dissect'] for n,i in zip(names,d): print(n,i['error']) if i['base64']: raw=base64.b64decode(i['base64'].split('base64,')[1]) im=Image.open(BytesIO(raw)).convert('L') print(im.size) im.save(f'/tmp/workspace/cbdi-journal-club/assets/{n}.png') E
mkdir -p /tmp/workspace/cbdi-journal-club/src && cat > /tmp/workspace/cbdi-journal-club/src/build.py <<'EOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.enum.shapes import MSO_SHAPE from pptx.chart.data import CategoryChartData from pptx.enum.chart import XL_CHART_TYPE, XL_LEGEND_POSITION, XL_LABEL_POSITION from pptx.oxml.ns import qn from lxml import etree from PIL import Image import copy A='/tmp/workspace/cbdi-journal-club/assets/' # image prep im=Image.open(A+'ptc_e2.png'); w,h=im.size; im.crop((0,90,w,h)).save(A+'ptc_e2_c.png') im=Image.open(A+'ptc_leak.png'); im.thumbnail((900,900)); im.save(A+'ptc_leak_s.png') BLK=RGBColor(0,0,0); WHT=RGBColor(255,255,255) G1=RGBColor(0x59,0x59,0x59); G2=RGBColor(0x8C,0x8C,0x8C); G3=RGBColor(0xBF,0xBF,0xBF); G4=RGBColor(0xEE,0xEE,0xEE) HF='Georgia'; BF='Arial' prs=Presentation(); prs.slide_width=Inches(13.333); prs.slide_height=Inches(7.5) blank=prs.slide_layouts[6] links=[] # (shape, target_slide_index) slides=[] def new(bg=WHT): s=prs.slides.add_slide(blank) s.background.fill.solid(); s.background.fill.fore_color.rgb=bg slides.append(s); return s def text(s,x,y,w,h,txt,size=16,bold=False,color=BLK,font=BF,align=PP_ALIGN.LEFT,anchor=MSO_ANCHOR.TOP,italic=False): tb=s.shapes.add_textbox(Inches(x),Inches(y),Inches(w),Inches(h)); tf=tb.text_frame; tf.word_wrap=True tf.vertical_anchor=anchor lines=txt if isinstance(txt,list) else [txt] for i,l in enumerate(lines): p=tf.paragraphs[0] if i==0 else tf.add_paragraph() p.alignment=align r=p.add_run(); r.text=l; f=r.font; f.size=Pt(size); f.bold=bold; f.italic=italic; f.color.rgb=color; f.name=font return tb def bullets(s,x,y,w,h,items,size=16,color=BLK,gap=8): tb=s.shapes.add_textbox(Inches(x),Inches(y),Inches(w),Inches(h)); tf=tb.text_frame; tf.word_wrap=True for i,it in enumerate(items): p=tf.paragraphs[0] if i==0 else tf.add_paragraph() p.space_after=Pt(gap) head,body=(it if isinstance(it,tuple) else (None,it)) r0=p.add_run(); r0.text='\u25A0 '; r0.font.size=Pt(size-6); r0.font.color.rgb=color; r0.font.name=BF if head: r=p.add_run(); r.text=head+' '; r.font.bold=True; r.font.size=Pt(size); r.font.color.rgb=color; r.font.name=BF r=p.add_run(); r.text=body; r.font.size=Pt(size); r.font.color.rgb=color; r.font.name=BF return tb def box(s,x,y,w,h,fill=BLK,line=BLK,txt=None,size=14,color=WHT,bold=True,shape=MSO_SHAPE.RECTANGLE,align=PP_ALIGN.CENTER,lw=1.5): b=s.shapes.add_shape(shape,Inches(x),Inches(y),Inches(w),Inches(h)) if fill is None: b.fill.background() else: b.fill.solid(); b.fill.fore_color.rgb=fill b.line.color.rgb=line; b.line.width=Pt(lw); b.shadow.inherit=False tf=b.text_frame; tf.word_wrap=True; tf.vertical_anchor=MSO_ANCHOR.MIDDLE tf.margin_left=tf.margin_right=Inches(0.1) if txt is not None: lines=txt if isinstance(txt,list) else [txt] for i,l in enumerate(lines): p=tf.paragraphs[0] if i==0 else tf.add_paragraph(); p.alignment=align r=p.add_run(); r.text=l; r.font.size=Pt(size); r.font.bold=bold if i==0 else False; r.font.color.rgb=color; r.font.name=BF return b def content(title,num,notes=None): s=new() text(s,0.6,0.35,12.1,0.9,title,30,True,BLK,HF,anchor=MSO_ANCHOR.MIDDLE) ln=s.shapes.add_shape(MSO_SHAPE.RECTANGLE,Inches(0.6),Inches(1.25),Inches(12.13),Inches(0.06)); ln.fill.solid(); ln.fill.fore_color.rgb=BLK; ln.line.fill.background() text(s,0.6,7.0,9,0.3,'Liao P, et al. Am Surg 2026;92(9):2408-2412 | Journal Club',10,False,G1) hb=box(s,11.55,6.95,1.18,0.38,WHT,BLK,'\u25C4 AGENDA',10,BLK,True) links.append((hb,1)) text(s,10.9,7.0,0.6,0.3,str(num),10,True,BLK,align=PP_ALIGN.RIGHT) if notes: s.notes_slide.notes_text_frame.text=notes return s def style_chart(ch,legend=True,size=12): ch.font.size=Pt(size); ch.font.name=BF; ch.font.color.rgb=BLK ch.has_legend=legend if legend: ch.legend.position=XL_LEGEND_POSITION.BOTTOM; ch.legend.include_in_layout=False; ch.legend.font.size=Pt(size) def pie(s,x,y,w,h,cats,vals,title,fills=(BLK,G2,G3)): cd=CategoryChartData(); cd.categories=cats; cd.add_series('n',vals) gf=s.shapes.add_chart(XL_CHART_TYPE.PIE,Inches(x),Inches(y),Inches(w),Inches(h),cd); ch=gf.chart style_chart(ch,True,12) ch.has_title=True; ch.chart_title.text_frame.text=title r=ch.chart_title.text_frame.paragraphs[0].runs[0]; r.font.size=Pt(15); r.font.bold=True; r.font.name=BF; r.font.color.rgb=BLK pl=ch.plots[0]; pl.has_data_labels=True; dl=pl.data_labels dl.show_value=True; dl.show_percentage=False; dl.show_category_name=False dl.number_format='0'; dl.number_format_is_linked=False dl.position=XL_LABEL_POSITION.OUTSIDE_END; dl.font.size=Pt(16); dl.font.bold=True; dl.font.color.rgb=BLK ser=pl.series[0] for i in range(len(vals)): pt=ser.points[i]; pt.format.fill.solid(); pt.format.fill.fore_color.rgb=fills[i] pt.format.line.color.rgb=BLK; pt.format.line.width=Pt(1.5) return ch def bar(s,x,y,w,h,cats,series,title,fmt='0.0',maxv=None,size=12): cd=CategoryChartData(); cd.categories=cats for n,v in series: cd.add_series(n,v) gf=s.shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED,Inches(x),Inches(y),Inches(w),Inches(h),cd); ch=gf.chart style_chart(ch,len(series)>1,size) ch.has_title=True; ch.chart_title.text_frame.text=title r=ch.chart_title.text_frame.paragraphs[0].runs[0]; r.font.size=Pt(15); r.font.bold=True; r.font.name=BF; r.font.color.rgb=BLK pl=ch.plots[0]; pl.gap_width=60; pl.overlap=-5 pl.has_data_labels=True; dl=pl.data_labels; dl.number_format=fmt; dl.number_format_is_linked=False dl.position=XL_LABEL_POSITION.OUTSIDE_END; dl.font.size=Pt(14); dl.font.bold=True; dl.font.color.rgb=BLK cols=[BLK,G3,G2] for i,se in enumerate(pl.series): se.format.fill.solid(); se.format.fill.fore_color.rgb=cols[i]; se.format.line.color.rgb=BLK; se.format.line.width=Pt(1.25) va=ch.value_axis; va.has_major_gridlines=False; va.visible=False va.minimum_scale=0 if maxv: va.maximum_scale=maxv ca=ch.category_axis; ca.format.line.color.rgb=BLK; ca.tick_labels.font.size=Pt(size+1); ca.tick_labels.font.bold=True return ch def pic(s,path,x,y,w=None,h=None,caption=None,cy=None): kw={} if w: kw['width']=Inches(w) if h: kw['height']=Inches(h) p=s.shapes.add_picture(path,Inches(x),Inches(y),**kw) p.line.color.rgb=BLK; p.line.width=Pt(2) if caption: text(s,x,y+Emu(p.height).inches+0.05,Emu(p.width).inches,0.5,caption,10.5,False,G1,italic=True) return p # ---------- 1 TITLE ---------- s=new(BLK) text(s,0.7,0.5,8,0.4,'JOURNAL CLUB | DEPARTMENT OF SURGERY',13,True,G3) bar_=s.shapes.add_shape(MSO_SHAPE.RECTANGLE,Inches(0.7),Inches(0.95),Inches(1.2),Inches(0.07)); bar_.fill.solid(); bar_.fill.fore_color.rgb=WHT; bar_.line.fill.background() text(s,0.7,1.25,7.6,3.1,'Early Repair of Common Bile Duct Injuries Achieves Superior Outcomes and May Reduce Malpractice Litigation',32,True,WHT,HF) text(s,0.7,4.35,7.6,0.9,['Liao P, Bolton N, Brown R, Bolton J, Guillory C, Coogan C, Fuhrman G.','The American Surgeon\u2122 2026;92(9):2408-2412 | DOI 10.1177/00031348261433650'],12,False,G3) box(s,0.7,5.5,3.7,1.15,BLK,WHT,['PRESENTER','Dr. Sejal Goyal','First Year Surgical Resident'],14,WHT,True,align=PP_ALIGN.LEFT) box(s,4.6,5.5,3.7,1.15,BLK,WHT,['MODERATOR','Prof. (Dr.) N. K. Singh'],14,WHT,True,align=PP_ALIGN.LEFT) p=s.shapes.add_picture(A+'calot_dissect.png',Inches(8.9),Inches(1.3),width=Inches(3.9)); p.line.color.rgb=WHT; p.line.width=Pt(2.5) text(s,8.9,1.3+Emu(p.height).inches+0.05,3.9,0.6,'Laparoscopic dissection of Calot\'s triangle (illustrative)',10,False,G3,italic=True) btn=box(s,8.9,5.5,3.9,1.15,WHT,WHT,'START \u25BA View agenda',16,BLK,True,shape=MSO_SHAPE.RECTANGLE) links.append((btn,1)) s.notes_slide.notes_text_frame.text='Introduce article, authors (Ochsner Health System, New Orleans), journal. Click START to open the interactive agenda.' # ---------- 2 AGENDA ---------- s=new() text(s,0.6,0.35,12.1,0.9,'Agenda (click any item to jump)',30,True,BLK,HF,anchor=MSO_ANCHOR.MIDDLE) ln=s.shapes.add_shape(MSO_SHAPE.RECTANGLE,Inches(0.6),Inches(1.25),Inches(12.13),Inches(0.06)); ln.fill.solid(); ln.fill.fore_color.rgb=BLK; ln.line.fill.background() items=[('01','Background & Rationale',2),('02','Methods',3),('03','Study Population',4),('04','Baseline & Injury Features',5), ('05','Clinical Outcomes',6),('06','Medico-legal Outcomes',7),('07','Imaging Correlates',8),('08','Critical Appraisal',9), ('09','Guideline Context',10),('10','Take-Home Messages',11),('11','Quiz: Click to Reveal',12)] for i,(n,t,tgt) in enumerate(items): col=i//6; row=i%6 x=0.6+col*6.15; y=1.65+row*0.9 b1=box(s,x,y,0.8,0.72,BLK,BLK,n,18,WHT,True) b2=box(s,x+0.8,y,5.1,0.72,WHT,BLK,t,17,BLK,True,align=PP_ALIGN.LEFT) links.append((b1,tgt)); links.append((b2,tgt)) text(s,6.75,6.15,5.9,0.8,'Presenter: Dr. Sejal Goyal | Moderator: Prof. (Dr.) N. K. Singh',12,False,G1,italic=True) s.notes_slide.notes_text_frame.text='Every slide has an AGENDA button (bottom right) to return here.' # ---------- 3 BACKGROUND ---------- s=content('Background & Rationale',3,'CBDI remains one of the most feared complications. Timing of repair is debated because "early/intermediate/late" are defined variably. Intermediate period (3 days-6 weeks) has had higher complication rates in several series. Authors hypothesise early definitive repair by experienced HPB surgeons gives good outcomes and may reduce litigation.') bullets(s,0.6,1.6,7.2,5.2,[ ('Problem:','CBDI at cholecystectomy is among the most dreaded complications in general surgery.'), ('Controversy:','Immediate/early repair vs delayed repair (after inflammation settles, tension-free anastomosis).'), ('Prior data:','Repairs in the intermediate window (3 days-6 weeks) linked to more complications; definitions of "early" vary.'), ('Medico-legal:','CBDI is a frequent cause of litigation; prior studies used large databases and did not capture claim-filing frequency.'), ('Hypothesis:','Early definitive repair by experienced HPB surgeons gives favourable outcomes and may reduce litigation.')],16) pic(s,A+'cvs_composite.png',8.2,1.7,w=4.5,caption='Critical view of safety: skeletonised cystic duct and artery, D-line (illustrative image, not from the study)') # ---------- 4 METHODS ---------- s=content('Methods',4,'Retrospective single health-system review, Ochsner South Shore hospitals, Jan 2012-Dec 2023. Excluded injuries from non-cholecystectomy operations, managed non-operatively (endoscopic/IR), cystic duct stump leaks, subtotal cholecystectomy leaks. Litigation search: Westlaw plus institutional release-of-information requests.') bullets(s,0.6,1.55,6.3,5.3,[ ('Design:','Retrospective cohort, single health system (Ochsner, New Orleans), Jan 2012 to Dec 2023.'), ('Included:','Operative repair of CBDI after cholecystectomy.'), ('Excluded:','Non-cholecystectomy injuries, non-operative management, cystic duct stump leaks, post-subtotal cholecystectomy leaks.'), ('Early repair:','Intraoperative or \u2264 3 days. Late: > 3 days.'), ('Repair types:','Primary repair, single or multiple hepaticojejunostomy.'), ('Litigation:','Westlaw search + release-of-information requests.'), ('Stats:','t-test / Mann-Whitney U, chi-square / Fisher; P < 0.05.')],15,gap=6) # flow box(s,7.5,1.7,5.2,0.9,BLK,BLK,['Operative CBDI repair 2012-2023','n = 54'],15,WHT,True) a=s.shapes.add_shape(MSO_SHAPE.DOWN_ARROW,Inches(9.8),Inches(2.65),Inches(0.6),Inches(0.5)); a.fill.solid(); a.fill.fore_color.rgb=BLK; a.line.fill.background() box(s,7.5,3.25,2.5,1.5,WHT,BLK,['GROUP 1: EARLY','\u2264 3 days','n = 23'],15,BLK,True,lw=3) box(s,10.2,3.25,2.5,1.5,G3,BLK,['GROUP 2: LATE','> 3 days','n = 31'],15,BLK,True,lw=3) box(s,7.5,5.0,5.2,1.5,WHT,BLK,['Outcomes compared','Stricture \u2022 Bile leak \u2022 Reoperation \u2022 Death \u2022 Length of stay \u2022 Lawsuits'],14,BLK,True,lw=1.5) # ---------- 5 POPULATION ---------- s=content('Study Population (n = 54)',5,'54 patients: 23 early, 31 late. 12 primary repairs, 37 single anastomoses, 5 multiple anastomoses. 37 were transferred from outlying hospitals; 17 repaired where injured (9 main teaching, 8 community). 16 injuries recognised intra-op but repaired >3 days later were mostly transfers.') pie(s,0.5,1.5,6.0,4.3,['Early repair (\u2264 3 d)','Late repair (> 3 d)'],[23,31],'Timing of repair',(BLK,G3)) pie(s,6.8,1.5,6.0,4.3,['Primary repair','Single anastomosis','Multiple anastomoses'],[12,37,5],'Type of repair',(BLK,G2,G3)) box(s,0.6,5.95,12.13,0.85,G4,BLK,'37 of 54 injuries were transferred from outlying hospitals; only 17 were repaired where the injury occurred. Delay in the late group was largely transfer and scheduling logistics.',14,BLK,False) # ---------- 6 BASELINE ---------- s=content('Baseline & Injury Features',6,'Groups were comparable for age, BMI, ASA, bilirubin, ALP, operative time. Differences: early group had more open/converted operations and 100% recognised at index operation vs 51.6% in late group, so early repair group is selected for intra-operative recognition (selection bias). Percentages as in Table 1 of the paper.') rows=[('Parameter','Early (n=23)','Late (n=31)','P'), ('Age, years','60.4 \u00B1 17.7','59.3 \u00B1 19.6','0.818'), ('BMI','28.96 \u00B1 6.95','28.11 \u00B1 8.71','0.692'), ('ASA','2.61 \u00B1 0.72','2.71 \u00B1 0.59','0.586'), ('Pre-op bilirubin, mg/dL','1.83 \u00B1 1.78','2.05 \u00B1 2.03','0.663'), ('Duration of surgery, min','229 \u00B1 92','207 \u00B1 91','0.383')] tbl=s.shapes.add_table(len(rows),4,Inches(0.6),Inches(1.6),Inches(5.9),Inches(3.0)).table for c,wd in enumerate([2.4,1.4,1.4,0.7]): tbl.columns[c].width=Inches(wd) for r,row in enumerate(rows): for c,v in enumerate(row): cell=tbl.cell(r,c); cell.text=v; cell.fill.solid(); cell.fill.fore_color.rgb=BLK if r==0 else (WHT if r%2 else G4) para=cell.text_frame.paragraphs[0]; para.alignment=PP_ALIGN.LEFT if c==0 else PP_ALIGN.CENTER f=para.runs[0].font; f.size=Pt(13); f.name=BF; f.bold=(r==0); f.color.rgb=WHT if r==0 else BLK cell.vertical_anchor=MSO_ANCHOR.MIDDLE box(s,0.6,4.9,5.9,1.8,G4,BLK,['Groups comparable at baseline','No significant difference in age, BMI, ASA, bilirubin, ALP or operative time. Differences lie in how and when the injury was found (right).'],13,BLK,False,align=PP_ALIGN.LEFT) bar(s,6.8,1.5,6.0,5.3,['Laparoscopic\nchole','Converted\nto open','Injury seen at\nindex operation'],[('Early (n=23)',[43.5,60.9,100.0]),('Late (n=31)',[77.4,22.6,51.6])],'Operative features (% of group)','0.0"%"',125) text(s,6.8,6.55,6.0,0.35,'P = 0.005 | P = 0.013 | P < 0.001',11,True,BLK,align=PP_ALIGN.CENTER) # ---------- 7 OUTCOMES ---------- s=content('Clinical Outcomes: Early vs Late Repair',7,'Primary finding: strictures 0/23 vs 5/31 (16.1%), P=0.023 (Fisher). One stricture needed partial hepatectomy, rest dilation. Bile leak 1 (4.3%) vs 4 (12.9%), P=0.26, mostly percutaneous drainage. LOS 9.35 vs 12.03 days, P=0.149, not significant. One death in the late group. Median diagnosis-to-repair 0 vs 10 days.') bar(s,0.5,1.5,6.3,4.1,['Anastomotic stricture','Bile leak'],[('Early (n=23)',[0.0,4.3]),('Late (n=31)',[16.1,12.9])],'Complications (% of group)','0.0"%"',22) text(s,0.5,5.6,6.3,0.4,'Stricture P = 0.023 (significant) | Bile leak P = 0.26 (NS)',12,True,BLK,align=PP_ALIGN.CENTER) bar(s,7.0,1.5,5.8,4.1,['Mean length of stay'],[('Early',[9.35]),('Late',[12.03])],'Hospital stay (days)','0.00',15,12) text(s,7.0,5.6,5.8,0.4,'P = 0.149 (NS)',12,True,BLK,align=PP_ALIGN.CENTER) box(s,0.6,6.05,12.13,0.8,BLK,BLK,'Median diagnosis-to-repair 0 vs 10 days (P < 0.001) \u2022 1 stricture needed partial hepatectomy, rest dilation \u2022 1 death (late group)',13,WHT,True) # ---------- 8 MEDICOLEGAL ---------- s=content('Medico-legal Outcomes',8,'3 of 54 (5.6%) filed suits: 2 early (8.7%), 1 late (3.2%), P=0.428; one plaintiff verdict. Important for discussion: litigation was numerically higher in the early group, so the title\'s claim of reduced litigation is not supported by a within-study comparison. The authors compare to rates in other multi-institutional series.') pie(s,0.5,1.5,5.8,4.4,['Lawsuit filed','No lawsuit'],[3,51],'Malpractice suits, all patients (n = 54)',(BLK,G3)) bar(s,6.6,1.5,6.2,4.4,['Early repair','Late repair'],[('Lawsuit rate (%)',[8.7,3.2])],'Lawsuit rate by timing (% of group)','0.0"%"',13) box(s,0.6,6.05,12.13,0.8,G4,BLK,'Overall 5.6% (3/54), one plaintiff verdict. Early 2/23 vs late 1/31, P = 0.428 (NS). Lower than rates in some multi-institutional series, but no causal inference possible.',13,BLK,False) # ---------- 9 IMAGING ---------- s=content('Imaging Correlates (illustrative, not from the study)',9,'Illustrative cholangiographic images of Strasberg E2 type injury from the image library, to show what the surgeon is repairing and what stricture and leak look like. MRCP shows complete disruption with a gap between proximal ductal system and distal CBD. PTC shows dilated intrahepatic ducts with cut-off below the hilar confluence, used for planning bilio-enteric anastomosis.') pic(s,A+'mrcp_e2.png',0.6,1.65,h=3.3,caption='MRCP: complete disruption at the common hepatic duct (Strasberg E2-type injury)') pic(s,A+'ptc_e2_c.png',4.9,1.65,h=3.3,caption='PTC: dilated intrahepatic ducts with abrupt cut-off below the confluence; planning image for hepaticojejunostomy') pic(s,A+'ptc_leak_s.png',9.0,1.65,h=3.3,caption='PTC: CHD stricture with contrast leak; percutaneous drainage for bile leak') box(s,0.6,5.75,12.13,1.0,BLK,BLK,'Hepaticojejunostomy precludes later endoscopic access: strictures usually need percutaneous transhepatic management, then surgical revision, resection or (rarely) transplant.',13,WHT,True) # ---------- 10 APPRAISAL ---------- s=content('Critical Appraisal',10,'Strengths: clear outcome definitions, 12 years, excluded minor biliary leaks, novel litigation capture. Weaknesses: retrospective, n=54, only 5 strictures, early group selected by intra-op recognition, referral/transfer confounding, no injury classification (Strasberg/Bismuth), no follow-up duration, no multivariable analysis. Table 1 inconsistencies noted.') text(s,0.6,1.5,5.9,0.45,'STRENGTHS',16,True,WHT).fill.solid() box(s,0.6,1.5,5.9,0.5,BLK,BLK,'STRENGTHS',16,WHT,True) bullets(s,0.6,2.15,5.9,4.7,[ 'Clear timing definition; 12-year consecutive series', 'True CBDI only; stump leaks and endoscopic cases excluded', 'Objective outcomes: stricture, leak, death', 'Litigation captured via Westlaw + records requests (novel)', 'Honest limitations section; claims litigation link only needs further study'],14,gap=7) box(s,6.85,1.5,5.9,0.5,WHT,BLK,'LIMITATIONS',16,BLK,True,lw=3) bullets(s,6.85,2.15,5.9,4.7,[ 'Retrospective, single centre, n = 54; only 5 stricture events', 'Selection bias: all early repairs were recognised intra-op; late group includes transfers and missed injuries', 'No Strasberg/Bismuth grade, no multivariable adjustment, follow-up length not stated', 'Title overreaches: lawsuits were numerically higher with early repair (8.7% vs 3.2%)', 'Table 1 oddities: diagnosis-to-repair mean 0.48 vs 53.71 d (P = 0.046) vs median 0 vs 10; ALP SD 2206.6 likely typo'],14,gap=7) # ---------- 11 GUIDELINE ---------- s=content('Where Does This Fit? Guideline Context',11,'SAGES-AHPBA 2025 guideline (Surg Endosc 2026, PMID 41266841): conditional recommendation, low certainty, favouring delayed (>6 weeks) over early (<6 weeks) definitive repair. The paper\'s "early" is <=3 days, not the guideline\'s <6 weeks, so the two are not directly contradictory. Note that 3 of the 5 strictures in this paper were repaired at 1-5 weeks.') box(s,0.6,1.6,5.9,0.55,BLK,BLK,'THIS STUDY (Liao 2026)',15,WHT,True) bullets(s,0.6,2.3,5.9,3.2,[ 'Early = intra-op or \u2264 3 days, by experienced HPB surgeons', '0 strictures vs 16.1% with late repair', '3 of 5 strictures: repaired at 1-5 weeks; 2 after 6 weeks'],15) box(s,6.85,1.6,5.9,0.55,WHT,BLK,'SAGES-AHPBA 2025 GUIDELINE',15,BLK,True,lw=3) bullets(s,6.85,2.3,5.9,3.2,[ 'Conditional recommendation, low certainty of evidence', 'Favours delayed (> 6 weeks) over early (< 6 weeks) definitive repair', 'Panel highlights evidence gaps; stronger data needed'],15) box(s,0.6,5.35,12.13,1.35,G4,BLK,['Reconciling the two','Different definitions of "early". Immediate repair of an intra-op recognised injury by an HPB surgeon is accepted practice; the weak window is the intermediate period. Transfer to an HPB centre remains the key step when expertise is unavailable.'],14,BLK,False,align=PP_ALIGN.LEFT) # ---------- 12 TAKE HOME ---------- s=content('Take-Home Messages',12,'Four points. Emphasise: recognise intra-op, drain and refer early if no HPB expertise, early repair by HPB surgeons is reasonable, litigation conclusion is hypothesis-generating only.') msgs=[('1','Early repair (intra-op or \u2264 3 days) had no strictures vs 16.1% (5/31) with late repair, P = 0.023.'), ('2','Bile leak and hospital stay trended better with early repair but were not significant.'), ('3','Litigation was uncommon (5.6%). It was not lower in the early group (8.7% vs 3.2%, P = 0.428).'), ('4','Evidence is low-certainty (retrospective, n = 54). Early repair by an experienced HPB surgeon is reasonable; otherwise drain and transfer promptly.')] for i,(n,t) in enumerate(msgs): y=1.6+i*1.28 box(s,0.6,y,0.9,1.1,BLK,BLK,n,28,WHT,True) box(s,1.5,y,11.23,1.1,WHT if i%2==0 else G4,BLK,t,16,BLK,False,align=PP_ALIGN.LEFT) # ---------- 13 QUIZ ---------- s=content('Quiz: Click to Reveal Each Answer',13,'Click once per answer to reveal. Q1 definition of early. Q2 stricture is the only significant outcome. Q3 litigation claim not supported.') qs=[('Q1. How did the authors define early repair?','Intra-operative or \u2264 3 days after injury (late = > 3 days).'), ('Q2. Which clinical outcome differed significantly between groups?','Anastomotic stricture: 0/23 vs 5/31 (16.1%), P = 0.023. Leak and stay were NS.'), ('Q3. Does the data show early repair reduces malpractice suits?','No. 8.7% (early) vs 3.2% (late), P = 0.428. Hypothesis-generating only.')] ans=[] for i,(q,a) in enumerate(qs): y=1.6+i*1.75 box(s,0.6,y,12.13,0.65,BLK,BLK,q,17,WHT,True,align=PP_ALIGN.LEFT) ab=box(s,0.6,y+0.7,12.13,0.8,G4,BLK,'ANSWER: '+a,15,BLK,True,align=PP_ALIGN.LEFT) ans.append(ab) # animation: click to appear P='http://schemas.openxmlformats.org/presentationml/2006/main' pars=''; cid=3 for ab in ans: sid=ab.shape_id pars+=f'''<p:par><p:cTn id="{cid}" fill="hold"><p:stCondLst><p:cond delay="indefinite"/></p:stCondLst><p:childTnLst><p:par><p:cTn id="{cid+1}" fill="hold"><p:stCondLst><p:cond delay="0"/></p:stCondLst><p:childTnLst><p:par><p:cTn id="{cid+2}" presetID="10" presetClass="entr" presetSubtype="0" fill="hold" grpId="0" nodeType="clickEffect"><p:stCondLst><p:cond delay="0"/></p:stCondLst><p:childTnLst><p:set><p:cBhvr><p:cTn id="{cid+3}" dur="1" fill="hold"><p:stCondLst><p:cond delay="0"/></p:stCondLst></p:cTn><p:tgtEl><p:spTgt spid="{sid}"/></p:tgtEl><p:attrNameLst><p:attrName>style.visibility</p:attrName></p:attrNameLst></p:cBhvr><p:to><p:strVal val="visible"/></p:to></p:set><p:animEffect transition="in" filter="fade"><p:cBhvr><p:cTn id="{cid+4}" dur="500"/><p:tgtEl><p:spTgt spid="{sid}"/></p:tgtEl></p:cBhvr></p:animEffect></p:childTnLst></p:cTn></p:par></p:childTnLst></p:cTn></p:par></p:childTnLst></p:cTn></p:par>''' cid+=5 bld=''.join(f'<p:bldP spid="{ab.shape_id}" grpId="0" animBg="1"/>' for ab in ans) xml=f'''<p:timing xmlns:p="{P}"><p:tnLst><p:par><p:cTn id="1" dur="indefinite" restart="never" nodeType="tmRoot"><p:childTnLst><p:seq concurrent="1" nextAc="seek"><p:cTn id="2" dur="indefinite" nodeType="mainSeq"><p:childTnLst>{pars}</p:childTnLst></p:cTn><p:prevCondLst><p:cond evt="onPrev" delay="0"><p:tgtEl><p:sldTgt/></p:tgtEl></p:cond></p:prevCondLst><p:nextCondLst><p:cond evt="onNext" delay="0"><p:tgtEl><p:sldTgt/></p:tgtEl></p:cond></p:nextCondLst></p:seq></p:childTnLst></p:cTn></p:par></p:tnLst><p:bldLst>{bld}</p:bldLst></p:timing>''' s._element.append(etree.fromstring(xml)) text(s,0.6,6.55,9,0.35,'Thank you | Discussion',14,True,BLK,HF) # apply links for shp,idx in links: shp.click_action.target_slide=slides[idx] out='/tmp/workspace/cbdi-journal-club/output/CBDI_Early_Repair_Journal_Club.pptx' prs.save(out); print('saved',len(slides)) EOF cd /tmp/workspace/cbdi-journal-club && python src/build.py
cd /tmp/workspace/cbdi-journal-club && python - <<'E' import re p='src/build.py'; t=open(p).read() t=t.replace("text(s,0.6,1.5,5.9,0.45,'STRENGTHS',16,True,WHT).fill.solid()\n","") open(p,'w').write(t) E python src/build.py && python - <<'E' from pptx import Presentation from pptx.util import Emu p=Presentation('/tmp/workspace/cbdi-journal-club/output/CBDI_Early_Repair_Journal_Club.pptx') W,H=p.slide_width,p.slide_height for i,s in enumerate(p.slides,1): n=0 for sh in s.shapes: if sh.left+sh.width>W+10 or sh.top+sh.height>H+10: print('OOB',i,sh.name) if sh.click_action.target_slide is not None: n+=1 print(i,len(s.shapes),'links',n, [sh.chart.chart_type for sh in s.shapes if sh.has_chart]) E ls -la output
CBDI Early Repair Journal Club
Presentation · PPTX
make it into keynote
.key file. Keynote's format is proprietary and I have no Keynote in the sandbox. Keynote opens PowerPoint files directly, though, so you can convert the deck in a minute.CBDI Early Repair Journal Club
Presentation · PPTX
.key file.Make a quick reference sheet on Strasberg classification and management
Strasberg classification diagram types A B C D E bile duct injuries
Strasberg classification bile duct injury types A-E management Bismuth Amsterdam
bile duct injury classification Strasberg type E1 E2 E3 E4 E5 schematic
mkdir -p /tmp/workspace/strasberg-sheet && cd /tmp/workspace/strasberg-sheet && python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/cdss_images/03bf417319fcd7615ecc2e50fc17fca8410c7432180cd80e3c027def2f1bfcb7.png" > img.json && python - <<'E' import json,base64 from PIL import Image from io import BytesIO d=json.load(open('img.json'))[0]; print(d['error']) im=Image.open(BytesIO(base64.b64decode(d['base64'].split('base64,')[1]))).convert('L') im.thumbnail((1800,1800)); print(im.size) # boost contrast so pale greens print well from PIL import ImageOps im=ImageOps.autocontrast(im,cutoff=1); im.save('strasberg_bw.png') E
cd /tmp/workspace/strasberg-sheet && cat > build.py <<'EOF' from reportlab.lib.pagesizes import A4 from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, Image, PageBreak, KeepTogether from reportlab.lib.styles import ParagraphStyle from reportlab.lib import colors from reportlab.lib.units import mm from reportlab.lib.enums import TA_CENTER K=colors.black; G=colors.HexColor('#EEEEEE'); G2=colors.HexColor('#BFBFBF') H=ParagraphStyle('H',fontName='Helvetica-Bold',fontSize=17,leading=20,textColor=K) Sub=ParagraphStyle('Sub',fontName='Helvetica',fontSize=8.5,leading=11,textColor=colors.HexColor('#444444')) H2=ParagraphStyle('H2',fontName='Helvetica-Bold',fontSize=11,leading=13,textColor=colors.white,backColor=K,borderPadding=(3,4,3,4),spaceBefore=8,spaceAfter=6) B=ParagraphStyle('B',fontName='Helvetica',fontSize=8.6,leading=10.8) BB=ParagraphStyle('BB',parent=B,fontName='Helvetica-Bold') TH=ParagraphStyle('TH',parent=B,fontName='Helvetica-Bold',textColor=colors.white) Bul=ParagraphStyle('Bul',parent=B,leftIndent=9,bulletIndent=0,spaceAfter=2) Cap=ParagraphStyle('Cap',fontName='Helvetica-Oblique',fontSize=7.5,leading=9,alignment=TA_CENTER,textColor=colors.HexColor('#444444')) Foot=ParagraphStyle('Foot',fontName='Helvetica',fontSize=7,leading=8.5,textColor=colors.HexColor('#444444')) def P(t,s=B): return Paragraph(t,s) def bl(items): return [Paragraph(i,Bul,bulletText='\u25A0') for i in items] def footer(c,d): c.saveState(); c.setFont('Helvetica',7); c.setFillColor(colors.HexColor('#444444')) c.drawString(15*mm,8*mm,'Quick reference for teaching. Verify against current guidelines and local protocols before clinical use.') c.drawRightString(195*mm,8*mm,'Page %d'%d.page); c.restoreState() doc=SimpleDocTemplate('/tmp/workspace/strasberg-sheet/Strasberg_Classification_Quick_Reference.pdf',pagesize=A4,leftMargin=15*mm,rightMargin=15*mm,topMargin=12*mm,bottomMargin=14*mm) S=[] S+= [P('Bile Duct Injury: Strasberg Classification & Management',H), P('Quick reference for surgical residents | Sources: Bailey & Love 28e, Sabiston, Fischer\'s Mastery of Surgery 8e, Liao et al. Am Surg 2026, SAGES-AHPBA 2025',Sub),Spacer(1,4)] S.append(P('1. CLASSIFICATION AT A GLANCE',H2)) im=Image('strasberg_bw.png',width=170*mm,height=170*mm*690/1800) S+= [im,P('Strasberg types A-D (top row, a-d) and E1-E6 (bottom row). E6 (complete excision of extrahepatic ducts) is not part of Strasberg\'s original system. Figure: Bailey & Love 28e, Fig 71.33 (after Connor and Garden, Br J Surg 2006).',Cap),Spacer(1,5)] rows=[[P('Type',TH),P('Injury',TH),P('Typical presentation',TH),P('First-line management',TH)], [P('A',BB),P('Leak from cystic duct stump or small ducts in liver bed (ducts of Luschka). Main duct in continuity.'),P('Bile in drain, bile collection; most common leak'),P('Monitor drain output (may close). ERCP + sphincterotomy / stent across cystic duct origin. Washout if peritonitis.')], [P('B',BB),P('Occlusion of an aberrant right (sectoral) hepatic duct'),P('Often silent or mild pain, mild LFT rise; cholangitis or atrophy later'),P('Conservative with monitoring. PTC drainage or hepaticojejunostomy if cholangitis; segmental resection if atrophic segment.')], [P('C',BB),P('Transection (no ligation) of aberrant right duct, with leak'),P('Bile leak, collection, peritonitis risk'),P('Percutaneous drainage to allow closure and prevent biliary peritonitis. Rarely hepaticojejunostomy or hepatectomy.')], [P('D',BB),P('Lateral injury to main duct (<50% circumference), continuity preserved'),P('Bile leak from main duct'),P('Small, not devascularised: repair/closure over drain \u00B1 T-tube, or ERCP sphincterotomy + stent. Devascularised: repair with drain, anticipate leak.')], [P('E1',BB),P('Transection / stricture, CHD stump <b>>2 cm</b> from confluence (Bismuth I)'),P('Jaundice, cholangitis, or leak if transected; usually delayed'),P('Roux-en-Y hepaticojejunostomy (HJ) by experienced HPB surgeon.')], [P('E2',BB),P('Stump <b><2 cm</b> from confluence (Bismuth II)'),P('As above'),P('Roux-en-Y HJ; high anastomosis, more difficult.')], [P('E3',BB),P('At the confluence; right and left ducts still communicate (Bismuth III)'),P('As above'),P('Roux-en-Y HJ to the hilar plate / confluence.')], [P('E4',BB),P('Confluence destroyed; right and left ducts separated (Bismuth IV)'),P('As above'),P('Roux-en-Y HJ, often multiple anastomoses (as in 5 patients in Liao 2026).')], [P('E5',BB),P('Aberrant right duct injured plus CHD stricture (Bismuth V)'),P('As above'),P('Roux-en-Y HJ, may need more than one anastomosis.')]] t=Table(rows,colWidths=[11*mm,53*mm,45*mm,71*mm],repeatRows=1) st=[('BACKGROUND',(0,0),(-1,0),K),('GRID',(0,0),(-1,-1),0.6,K),('VALIGN',(0,0),(-1,-1),'TOP'), ('TOPPADDING',(0,0),(-1,-1),2.5),('BOTTOMPADDING',(0,0),(-1,-1),2.5),('BACKGROUND',(0,1),(0,-1),G2)] for r in range(2,len(rows),2): st.append(('BACKGROUND',(1,r),(-1,r),G)) st.append(('LINEABOVE',(0,5),(-1,5),2,K)) t.setStyle(TableStyle(st)); S.append(t) S+=[Spacer(1,3),P('<b>Memory aid:</b> A = cystic stump leak, B = blocked aberrant duct, C = cut aberrant duct, D = defect in side wall, E = end of main duct (stricture or transection). E1-E4 map to Bismuth I-IV, E5 to Bismuth V.',B)] S.append(PageBreak()) S.append(P('2. APPROACH TO MANAGEMENT',H2)) steps=[['1','RECOGNISE','Only a minority are seen at surgery (about 15% per Bailey & Love; under one-third per Sabiston). Suspect if persistent bile in drain, bile peritonitis, rising bilirubin, jaundice, cholangitis, or fever after cholecystectomy.'], ['2','RESUSCITATE','Sepsis control: fluids, broad-spectrum antibiotics. Drain collections (percutaneous or operative). Temporary external biliary drainage (PTC) if unstable.'], ['3','DEFINE ANATOMY','USG / CT: collections, dilatation, vascular injury (right hepatic artery). <b>MRCP (\u00B1 MRA) = most complete map</b>. HIDA confirms leak. ERCP: shows continuity and site, and is therapeutic for leaks. PTC if proximal duct is isolated.'], ['4','CLASSIFY','Strasberg type plus level (Bismuth), vascular injury, sepsis. Record whether injury was seen intra-operatively.'], ['5','TREAT','Minor leaks (A, small D, C): drain \u00B1 ERCP stent. Transection or stricture (E): Roux-en-Y hepaticojejunostomy by an HPB surgeon, tension-free, mucosa-to-mucosa.'], ['6','REFER','Refer all complex injuries to a specialist centre, whatever the timing (Sabiston).']] rt=[[P(a,BB),P(b,BB),P(c)] for a,b,c in steps] t2=Table(rt,colWidths=[8*mm,28*mm,144*mm]) t2.setStyle(TableStyle([('GRID',(0,0),(-1,-1),0.6,K),('BACKGROUND',(0,0),(0,-1),K),('TEXTCOLOR',(0,0),(0,-1),colors.white),('BACKGROUND',(1,0),(1,-1),G),('VALIGN',(0,0),(-1,-1),'MIDDLE'),('TOPPADDING',(0,0),(-1,-1),3),('BOTTOMPADDING',(0,0),(-1,-1),3)])) # white text in first col for i,(a,b,c) in enumerate(steps): rt[i][0]=Paragraph(a,ParagraphStyle('n',parent=BB,textColor=colors.white,alignment=TA_CENTER,fontSize=11)) t2=Table(rt,colWidths=[8*mm,28*mm,144*mm]); t2.setStyle(TableStyle([('GRID',(0,0),(-1,-1),0.6,K),('BACKGROUND',(0,0),(0,-1),K),('BACKGROUND',(1,0),(1,-1),G),('VALIGN',(0,0),(-1,-1),'MIDDLE'),('TOPPADDING',(0,0),(-1,-1),3),('BOTTOMPADDING',(0,0),(-1,-1),3)])) S.append(t2) S.append(P('3. INJURY RECOGNISED DURING THE OPERATION',H2)) S+=bl(['Stop and assess. Do cholangiography to define the injury (Sabiston).', '<b>If you cannot repair it safely:</b> no further dissection, place drains (and a cholangiogram catheter in the injury if easy), and transfer to an HPB centre.', 'Small lateral injury (type D, <50%): primary suture repair \u00B1 T-tube, with drain.', 'Complete transection (E): end-to-end repair over T-tube or Y-tube only if tension-free; otherwise Roux-en-Y HJ. Friable tissue or dense adhesions: temporary pedicled omental patch, then definitive reconstruction later.']) S.append(P('4. TIMING OF DEFINITIVE REPAIR (EVIDENCE IS WEAK)',H2)) tm=[[P('Source',TH),P('Position',TH)], [P('Liao et al. Am Surg 2026 (n = 54, retrospective)'),P('Early (intra-op or \u2264 3 days): 0/23 strictures vs 5/31 (16.1%) after late repair, P = 0.023. Leak and stay not significant. Selection bias: all early cases were recognised at surgery.')], [P('SAGES-AHPBA 2025 guideline'),P('Conditional recommendation, <b>low certainty</b>, favouring delayed (>6 weeks) over early (<6 weeks) definitive repair. "Early" here means under 6 weeks, a different definition from Liao.')], [P('Prior series (cited by Liao)'),P('Intermediate window (about 3 days to 6 weeks) tends to have the most complications.')]] t3=Table(tm,colWidths=[55*mm,125*mm],repeatRows=1) t3.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,0),K),('GRID',(0,0),(-1,-1),0.6,K),('VALIGN',(0,0),(-1,-1),'TOP'),('BACKGROUND',(0,1),(0,-1),G),('TOPPADDING',(0,0),(-1,-1),3),('BOTTOMPADDING',(0,0),(-1,-1),3)])) S.append(t3) S.append(P('5. PEARLS & PITFALLS',H2)) S+=bl(['<b>Commonest mechanism:</b> CBD mistaken for cystic duct and divided (Stewart-Way class III, about 60% of injuries; Fischer).', '<b>Prevention:</b> critical view of safety, cholangiography or ICG fluorescence when anatomy is unclear, or bail out (subtotal cholecystectomy).', '<b>Poor prognostic factors after repair:</b> peritonitis, combined vascular and bile duct injury, injury at or above the bifurcation (Bailey & Love).', '<b>HJ precludes endoscopic access:</b> later strictures need percutaneous transhepatic management, then surgical revision, resection, or rarely transplant (Liao).', '<b>Recent short stricture, guidewire passes:</b> balloon dilatation plus stent is acceptable if an experienced endoscopist is available (Bailey & Love).', '<b>Limit of Strasberg:</b> it does not describe vascular injury; newer systems (for example Hannover, ATOM) try to address this.']) S.append(Spacer(1,6)) S.append(P('References: Bailey & Love\'s Short Practice of Surgery 28e (Bile duct injuries, Fig 71.33); Sabiston Textbook of Surgery (Table 26.8); Fischer\'s Mastery of Surgery 8e (Classification of BDI); Liao P et al. Am Surg 2026;92(9):2408-12; Calabrese EC et al. SAGES-AHPBA 2025 guideline, Surg Endosc 2026 (PMID 41266841).',Foot)) doc.build(S,onFirstPage=footer,onLaterPages=footer) EOF python build.py && python - <<'E' from pypdf import PdfReader r=PdfReader('/tmp/workspace/strasberg-sheet/Strasberg_Classification_Quick_Reference.pdf'); print(len(r.pages)) for p in r.pages: print(len(p.extract_text())) E
ls -la /tmp/workspace/ /tmp/workspace/strasberg-sheet 2>&1 | head -20
mkdir -p /tmp/workspace/strasberg-sheet && cd /tmp/workspace/strasberg-sheet && python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/cdss_images/03bf417319fcd7615ecc2e50fc17fca8410c7432180cd80e3c027def2f1bfcb7.png" > img.json && python - <<'E' import json,base64 from PIL import Image, ImageOps from io import BytesIO d=json.load(open('img.json'))[0]; print(d['error']) im=Image.open(BytesIO(base64.b64decode(d['base64'].split('base64,')[1]))).convert('L') im.thumbnail((1800,1800)); print(im.size) im=ImageOps.autocontrast(im,cutoff=1); im.save('strasberg_bw.png') E cat > build.py <<'EOF' from reportlab.lib.pagesizes import A4 from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, Image, PageBreak from reportlab.lib.styles import ParagraphStyle from reportlab.lib import colors from reportlab.lib.units import mm from reportlab.lib.enums import TA_CENTER K=colors.black; G=colors.HexColor('#EEEEEE'); G2=colors.HexColor('#BFBFBF') H=ParagraphStyle('H',fontName='Helvetica-Bold',fontSize=17,leading=20,textColor=K) Sub=ParagraphStyle('Sub',fontName='Helvetica',fontSize=8.5,leading=11,textColor=colors.HexColor('#444444')) H2=ParagraphStyle('H2',fontName='Helvetica-Bold',fontSize=11,leading=13,textColor=colors.white,backColor=K,borderPadding=(3,4,3,4),spaceBefore=10,spaceAfter=7) B=ParagraphStyle('B',fontName='Helvetica',fontSize=8.6,leading=10.8) BB=ParagraphStyle('BB',parent=B,fontName='Helvetica-Bold') TH=ParagraphStyle('TH',parent=B,fontName='Helvetica-Bold',textColor=colors.white) NUM=ParagraphStyle('NUM',parent=BB,textColor=colors.white,alignment=TA_CENTER,fontSize=11) Bul=ParagraphStyle('Bul',parent=B,leftIndent=10,bulletIndent=0,spaceAfter=2.5) Cap=ParagraphStyle('Cap',fontName='Helvetica-Oblique',fontSize=7.5,leading=9,alignment=TA_CENTER,textColor=colors.HexColor('#444444')) Foot=ParagraphStyle('Foot',fontName='Helvetica',fontSize=7,leading=8.5,textColor=colors.HexColor('#444444')) def P(t,s=B): return Paragraph(t,s) def bl(items): return [Paragraph(i,Bul,bulletText='\u25A0') for i in items] def footer(c,d): c.saveState(); c.setFont('Helvetica',7); c.setFillColor(colors.HexColor('#444444')) c.drawString(15*mm,8*mm,'Quick reference for teaching. Verify against current guidelines and local protocols before clinical use.') c.drawRightString(195*mm,8*mm,'Page %d'%d.page); c.restoreState() OUT='/tmp/workspace/strasberg-sheet/Strasberg_Classification_Quick_Reference.pdf' doc=SimpleDocTemplate(OUT,pagesize=A4,leftMargin=15*mm,rightMargin=15*mm,topMargin=12*mm,bottomMargin=14*mm) S=[P('Bile Duct Injury: Strasberg Classification & Management',H), P("Quick reference for surgical residents | Sources: Bailey & Love 28e, Sabiston, Fischer's Mastery of Surgery 8e, Liao et al. Am Surg 2026, SAGES-AHPBA 2025",Sub),Spacer(1,4)] S.append(P('1. CLASSIFICATION AT A GLANCE',H2)) S.append(Image('strasberg_bw.png',width=170*mm,height=170*mm*690/1800)) S+=[P("Strasberg types A-D (top row, a-d) and E1-E6 (bottom row). E6 (complete excision of extrahepatic ducts) is not part of Strasberg's original system. Figure: Bailey & Love 28e, Fig 71.33 (after Connor and Garden, Br J Surg 2006).",Cap),Spacer(1,5)] rows=[[P('Type',TH),P('Injury',TH),P('Typical presentation',TH),P('First-line management',TH)], [P('A',BB),P('Leak from cystic duct stump or small ducts in liver bed. Main duct in continuity.'),P('Bile in drain or collection; the commonest leak'),P('Monitor drain output (may close). ERCP + sphincterotomy / stent across cystic duct origin. Washout if peritonitis.')], [P('B',BB),P('Occlusion of an aberrant right (sectoral) hepatic duct'),P('Often silent or mild pain, mild LFT rise; cholangitis or atrophy later'),P('Conservative with monitoring. PTC drainage or hepaticojejunostomy if cholangitis; segmental resection if atrophic segment.')], [P('C',BB),P('Transection (no ligation) of aberrant right duct, with leak'),P('Bile leak, collection, risk of biliary peritonitis'),P('Percutaneous drainage to allow closure and prevent peritonitis. Rarely hepaticojejunostomy or hepatectomy.')], [P('D',BB),P('Lateral injury to main duct (<50% circumference), continuity preserved'),P('Bile leak from main duct'),P('Small, not devascularised: closure over drain, or ERCP sphincterotomy + stent. Devascularised: repair with drain, anticipate leak.')], [P('E1',BB),P('Transection / stricture, CHD stump <b>>2 cm</b> from confluence (Bismuth I)'),P('Jaundice, cholangitis, or leak if transected; often delayed'),P('Roux-en-Y hepaticojejunostomy (HJ) by experienced HPB surgeon.')], [P('E2',BB),P('Stump <b><2 cm</b> from confluence (Bismuth II)'),P('As E1'),P('Roux-en-Y HJ; higher anastomosis, more demanding.')], [P('E3',BB),P('At the confluence; right and left ducts still communicate (Bismuth III)'),P('As E1'),P('Roux-en-Y HJ at the hilum.')], [P('E4',BB),P('Confluence destroyed; right and left ducts separated (Bismuth IV)'),P('As E1'),P('Roux-en-Y HJ, often multiple anastomoses.')], [P('E5',BB),P('Aberrant right duct injured plus CHD stricture (Bismuth V)'),P('As E1'),P('Roux-en-Y HJ; may need more than one anastomosis.')]] t=Table(rows,colWidths=[11*mm,53*mm,45*mm,71*mm],repeatRows=1) st=[('BACKGROUND',(0,0),(-1,0),K),('GRID',(0,0),(-1,-1),0.6,K),('VALIGN',(0,0),(-1,-1),'TOP'), ('TOPPADDING',(0,0),(-1,-1),2.5),('BOTTOMPADDING',(0,0),(-1,-1),2.5),('BACKGROUND',(0,1),(0,-1),G2),('LINEABOVE',(0,5),(-1,5),2,K)] for r in range(2,len(rows),2): st.append(('BACKGROUND',(1,r),(-1,r),G)) t.setStyle(TableStyle(st)); S.append(t) S+=[Spacer(1,4),P('<b>Memory aid:</b> A = cystic stump leak, B = blocked aberrant duct, C = cut aberrant duct, D = defect in side wall, E = end of main duct (stricture or transection). E1-E4 map to Bismuth I-IV, E5 to Bismuth V.')] S.append(PageBreak()) S.append(P('2. APPROACH TO MANAGEMENT',H2)) steps=[('1','RECOGNISE','Only a minority are seen at surgery (about 15% per Bailey & Love; under one-third per Sabiston). Suspect if persistent bile in drain, bile peritonitis, rising bilirubin, jaundice, cholangitis or fever after cholecystectomy.'), ('2','RESUSCITATE','Sepsis control: fluids, antibiotics. Drain collections (percutaneous or operative). Temporary external biliary drainage (PTC) if unstable.'), ('3','DEFINE ANATOMY','USG / CT: collections, dilatation, vascular injury (right hepatic artery). <b>MRCP (\u00B1 MRA) is the most complete map</b>. HIDA confirms a leak. ERCP shows continuity and site, and is therapeutic for leaks.'), ('4','CLASSIFY','Strasberg type plus level (Bismuth), vascular injury, sepsis. Note whether the injury was seen intra-operatively.'), ('5','TREAT','Minor leaks (A, small D, C): drain \u00B1 ERCP stent. Transection or stricture (E): Roux-en-Y hepaticojejunostomy by an HPB surgeon.'), ('6','REFER','Refer complex injuries to a specialist centre whatever the timing (Sabiston).')] rt=[[Paragraph(a,NUM),P(b,BB),P(c)] for a,b,c in steps] t2=Table(rt,colWidths=[8*mm,30*mm,142*mm]) t2.setStyle(TableStyle([('GRID',(0,0),(-1,-1),0.6,K),('BACKGROUND',(0,0),(0,-1),K),('BACKGROUND',(1,0),(1,-1),G),('VALIGN',(0,0),(-1,-1),'MIDDLE'),('TOPPADDING',(0,0),(-1,-1),4),('BOTTOMPADDING',(0,0),(-1,-1),4)])) S.append(t2) S.append(P('3. INJURY RECOGNISED DURING THE OPERATION',H2)) S+=bl(['Stop and assess. Do cholangiography to define the injury (Sabiston).', '<b>If you cannot repair it safely:</b> no further dissection, drain, place a cholangiogram catheter in the injury if easy, and transfer to an HPB centre.', 'Small lateral injury (type D, <50%): primary suture repair, with drain \u00B1 T-tube.', 'Transection (E): end-to-end repair over a T-tube or Y-tube only if tension-free; otherwise Roux-en-Y HJ. Friable tissue or dense adhesions: temporary pedicled omental patch, then definitive reconstruction later.']) S.append(P('4. TIMING OF DEFINITIVE REPAIR (EVIDENCE IS WEAK)',H2)) tm=[[P('Source',TH),P('Position',TH)], [P('Liao et al. Am Surg 2026 (n = 54, retrospective)'),P('Early (intra-op or \u2264 3 days): 0/23 strictures vs 5/31 (16.1%) after late repair, P = 0.023. Leak and stay not significant. Selection bias: all early cases were recognised at surgery.')], [P('SAGES-AHPBA 2025 guideline'),P('Conditional recommendation, <b>low certainty</b>, favouring delayed (>6 weeks) over early (<6 weeks) definitive repair. "Early" here means under 6 weeks, a different definition from Liao.')], [P('Prior series (cited by Liao)'),P('The intermediate window (about 3 days to 6 weeks) tends to carry the most complications.')]] t3=Table(tm,colWidths=[55*mm,125*mm],repeatRows=1) t3.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,0),K),('GRID',(0,0),(-1,-1),0.6,K),('VALIGN',(0,0),(-1,-1),'TOP'),('BACKGROUND',(0,1),(0,-1),G),('TOPPADDING',(0,0),(-1,-1),3),('BOTTOMPADDING',(0,0),(-1,-1),3)])) S.append(t3) S.append(P('5. PEARLS & PITFALLS',H2)) S+=bl(['<b>Commonest mechanism:</b> CBD mistaken for cystic duct and divided (Stewart-Way class III, about 60% of injuries; Fischer).', '<b>Prevention:</b> critical view of safety; cholangiography or ICG fluorescence when anatomy is unclear; bail out if it cannot be achieved.', '<b>Poor prognostic factors:</b> peritonitis, combined vascular and bile duct injury, injury at or above the bifurcation (Bailey & Love).', '<b>HJ precludes endoscopic access:</b> later strictures need percutaneous transhepatic management, then surgical revision, resection, or rarely transplant (Liao).', '<b>Recent stricture with guidewire passing:</b> balloon dilatation plus stent is acceptable if an experienced endoscopist is available (Bailey & Love).', '<b>Limit of Strasberg:</b> it does not describe vascular injury; newer systems (for example Hannover, ATOM) try to address this.']) S.append(Spacer(1,8)) S.append(P("References: Bailey & Love's Short Practice of Surgery 28e (Bile duct injuries, Fig 71.33); Sabiston Textbook of Surgery (Table 26.8); Fischer's Mastery of Surgery 8e (Classification of BDI); Liao P et al. Am Surg 2026;92(9):2408-12; Calabrese EC et al. SAGES-AHPBA 2025 guideline, Surg Endosc 2026 (PMID 41266841).",Foot)) doc.build(S,onFirstPage=footer,onLaterPages=footer) print('ok') EOF python build.py && python -c " from pypdf import PdfReader r=PdfReader('/tmp/workspace/strasberg-sheet/Strasberg_Classification_Quick_Reference.pdf'); print(len(r.pages)); [print(len(p.extract_text())) for p in r.pages]"
Strasberg Classification Quick Reference
PDF Document · PDF
Create a viva question bank on bile duct injury
cd /tmp/workspace/strasberg-sheet && sed -i "s/\\\\u2264 3 days/3 days or less/g; s/\\\\u25A0/\\\\u2022/g" build.py && grep -c "u2264\|u25A0" build.py; python build.py mkdir -p /tmp/workspace/viva-bank && cd /tmp/workspace/viva-bank && cat > build.py <<'EOF' from reportlab.lib.pagesizes import A4 from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, KeepTogether, PageBreak from reportlab.lib.styles import ParagraphStyle from reportlab.lib import colors from reportlab.lib.units import mm K=colors.black; G=colors.HexColor('#EEEEEE'); D=colors.HexColor('#444444') T=ParagraphStyle('T',fontName='Helvetica-Bold',fontSize=20,leading=24) Sub=ParagraphStyle('Sub',fontName='Helvetica',fontSize=9,leading=12,textColor=D) H2=ParagraphStyle('H2',fontName='Helvetica-Bold',fontSize=11.5,leading=14,textColor=colors.white,backColor=K,borderPadding=(3,4,3,4),spaceBefore=12,spaceAfter=8) QS=ParagraphStyle('QS',fontName='Helvetica-Bold',fontSize=10,leading=12.5) B=ParagraphStyle('B',fontName='Helvetica',fontSize=9,leading=11.4) Bul=ParagraphStyle('Bul',parent=B,leftIndent=11,bulletIndent=2,spaceAfter=1.5) FU=ParagraphStyle('FU',parent=B,fontName='Helvetica-Oblique',textColor=D,spaceBefore=2) TH=ParagraphStyle('TH',parent=B,fontName='Helvetica-Bold',textColor=colors.white) BB=ParagraphStyle('BB',parent=B,fontName='Helvetica-Bold') n=[0] def Q(q,ans,fu=None): n[0]+=1 head=Table([[Paragraph('Q%d'%n[0],ParagraphStyle('qn',parent=QS,textColor=colors.white)),Paragraph(q,QS)]],colWidths=[11*mm,169*mm]) head.setStyle(TableStyle([('BACKGROUND',(0,0),(0,0),K),('BACKGROUND',(1,0),(1,0),G),('VALIGN',(0,0),(-1,-1),'MIDDLE'),('BOX',(0,0),(-1,-1),0.8,K),('TOPPADDING',(0,0),(-1,-1),3),('BOTTOMPADDING',(0,0),(-1,-1),3)])) body=[Paragraph(a,Bul,bulletText='\u2022') for a in ans] if fu: body.append(Paragraph('<b>Examiner follow-up:</b> '+fu,FU)) return KeepTogether([head,Spacer(1,3)]+body+[Spacer(1,7)]) def Sx(t): return Paragraph(t,H2) def footer(c,d): c.saveState(); c.setFont('Helvetica',7); c.setFillColor(D) c.drawString(15*mm,8*mm,'Bile duct injury viva bank. Teaching material; check current guidelines and local protocols before clinical use.') c.drawRightString(195*mm,8*mm,'Page %d'%d.page); c.restoreState() S=[Paragraph('Bile Duct Injury: Viva Question Bank',T), Paragraph('For surgical residents | Model answers drawn from Bailey and Love 28e, Sabiston, Mulholland and Greenfield 7e, Maingot, Fischer, Current Surgical Therapy 14e, Liao et al. Am Surg 2026, SAGES-AHPBA 2025 guideline. Items marked (common teaching) are standard practice not quoted from the sources above.',Sub),Spacer(1,6)] S.append(Sx('A. ETIOLOGY, ANATOMY AND PREVENTION')) S.append(Q('What is the incidence of bile duct injury (BDI) and when is it usually recognised?',[ 'More than 80% of BDI occur during cholecystectomy (Sabiston). Laparoscopic 0.2 to 0.8%, open below 0.2% (Sabiston); up to 0.6% and 0.1% respectively in Mulholland and Greenfield.', 'Only a minority are recognised at surgery: about 15% (Bailey and Love) or under one-third (Sabiston). Most present later with a leak or jaundice.', 'BDI also occurs in other right upper quadrant operations (gastric, duodenal, liver resection).'], 'Why are so many missed intra-operatively? Answer: misperception and confirmation bias; the surgeon discounts cues that contradict what he or she believes they see (Sabiston).')) S.append(Q('Describe the "classic" mechanism of laparoscopic BDI.',[ 'The common bile duct (CBD) or common hepatic duct is mistaken for the cystic duct, then clipped and divided.', 'Triggers: excessive cephalad traction on the fundus so the cystic duct lines up with the CHD, cystic duct running parallel or adherent to the CHD, and starting dissection in the wrong plane medial to the CHD (Mulholland).', 'A variable length of extrahepatic duct may be resected with the gallbladder, and the right hepatic artery is often injured as well (Current Surgical Therapy).', 'Stewart-Way class III (CBD mistaken for cystic duct and divided) is the commonest class, about 60% of injuries (Fischer).']) S.append(Q('List the risk factors for BDI.',[ '<b>Patient:</b> obesity, acute inflammation, prior hepatobiliary surgery, underlying liver disease.', '<b>Local:</b> aberrant or distorted anatomy, short wide cystic duct, cystic duct parallel to CHD, dense porta inflammation.', '<b>Technique and operator:</b> poor exposure, excessive cautery, tenting of the CBD by lateral traction on the infundibulum, learning curve.', 'Low cystic duct insertion or parallel course occurs in up to 25%; right posterior sectoral duct draining into the CBD in up to 6% (Mulholland).']) ) S.append(Q('What is the critical view of safety (CVS)? Why is it important?',[ 'Described by Strasberg and Soper. Fundus is retracted up and infundibulum laterally; Calot\'s triangle is cleared so that <b>only two structures, the cystic duct and cystic artery, enter the gallbladder</b>.', 'Three elements (common teaching): triangle cleared of fat and fibrous tissue; lower third of gallbladder detached from the liver bed (cystic plate visible); two structures only.', 'Start dissection on the infundibulum, not in the triangle itself, to avoid beginning medial to the common duct (Mulholland).', 'It is the single most effective means of preventing BDI (Current Surgical Therapy).'], 'What if you cannot achieve CVS? Answer: see next question.')) S.append(Q('You cannot achieve the CVS in an inflamed gallbladder. What are your options?',[ 'Call for senior help; use cholangiography or ICG fluorescence to define anatomy.', '<b>Bailout:</b> subtotal (partial) cholecystectomy, or cholecystostomy tube with drain.', 'Conversion to open is reasonable but not automatically safer if the surgeon is not accustomed to open gallbladder surgery (Mulholland; Current Surgical Therapy).', 'Never clip or divide a structure that has not been positively identified.']) ) S.append(Q('Role of intra-operative cholangiography (IOC) and ICG fluorescence?',[ 'Routine IOC is used by a minority; population data suggest it may not change BDI rate, but it helps identify an injury at the index operation, which speeds management and may reduce morbidity (Mulholland).', 'Sabiston: cholangiography does not avoid BDI completely but may reduce incidence and extent and allow immediate recognition.', 'ICG near-infrared fluorescence cholangiography shows biliary structures in real time and can reveal aberrant ducts.']) ) S.append(Sx('B. CLASSIFICATION')) S.append(Q('Describe the Strasberg classification.',[ '<b>A:</b> leak from cystic duct stump or small ducts in the liver bed (main duct in continuity).', '<b>B:</b> occlusion of an aberrant right (sectoral) hepatic duct. <b>C:</b> transection without ligation of an aberrant right duct, with leak.', '<b>D:</b> lateral injury to the main duct (under 50% of circumference).', '<b>E1:</b> stump over 2 cm from confluence. <b>E2:</b> under 2 cm. <b>E3:</b> at the confluence, left and right ducts communicating. <b>E4:</b> confluence destroyed, ducts separated. <b>E5:</b> aberrant right duct plus CHD stricture.', 'E6 (excision of extrahepatic ducts) is not in the original Strasberg system (Bailey and Love).'], 'Draw it. Which types need a hepaticojejunostomy? Answer: E3 to E5, and often E1/E2 if not suitable for ERCP and stent (Fischer).')) S.append(Q('How does Strasberg relate to the Bismuth classification? What are the limits of each?',[ 'Strasberg extends Bismuth: E1 to E4 equal Bismuth I to IV, E5 equals Bismuth V. Strasberg types A to D add the injuries that Bismuth cannot describe (cystic duct leaks, isolated sectoral duct and lateral injuries) (Maingot).', 'Both classify by <b>location</b>, not extent of tissue loss, and neither captures <b>vascular injury</b> (Mulholland; web sources mention Hannover and ATOM as attempts to add this).', 'Classification matters because definitive management depends on the pattern of injury (Mulholland).']) ) S.append(Sx('C. PRESENTATION AND INVESTIGATION')) S.append(Q('How does a BDI present after surgery?',[ '<b>Leak:</b> persistent bile in drain, increasing pain, fever, bile peritonitis, jaundice, bile from the wound. Leak tends to present earlier than stricture.', '<b>Stricture or ligation:</b> obstructive jaundice, cholangitis; with incomplete obstruction jaundice is delayed until fibrosis narrows the lumen.', 'Under 10% of strictures are found in the first week; over 70% are diagnosed within 6 months (Sabiston).', 'Late: recurrent cholangitis, secondary biliary cirrhosis, hepatic atrophy.']) ) S.append(Q('Outline your investigation of a suspected BDI.',[ 'Bloods: bilirubin, ALP, GGT, white count, CRP, culture if septic.', '<b>USG:</b> collections, duct dilatation. <b>CT:</b> collections, ascites, atrophy, and vascular injury (right hepatic artery).', '<b>MRCP</b> (with MR angiography if possible) gives the most complete map of level and degree of injury (Bailey and Love). Cholangiography remains the reference test for defining the injury (Sabiston).', '<b>HIDA:</b> confirms leak or obstruction. <b>ERCP:</b> diagnoses leak, shows ductal continuity, finds retained stones, and treats leaks with a stent.', '<b>PTC:</b> defines the proximal system when the ducts are disconnected, and allows drainage.'], 'Why look at the vessels? Answer: next section (vasculobiliary injury).')) S.append(Sx('D. MANAGEMENT')) S.append(Q('You recognise a BDI during the operation. What do you do?',[ 'Stop, take stock, and assess your own expertise and resources.', 'Perform cholangiography to define the anatomy and level.', 'If you can repair it safely: partial lateral injury, primary repair over a drain (T-tube optional); complete transection, tension-free end-to-end repair over a T-tube or Y-tube, or Roux-en-Y hepaticojejunostomy if not tension-free (Sabiston).', 'Friable tissue or dense adhesions: temporary pedicled omental patch pending definitive reconstruction (Sabiston).', '<b>If you cannot repair it safely:</b> no further dissection or conversion for its own sake; place drains (leave a cholangiogram catheter in the injury if easily done) and transfer to an HPB centre (Sabiston).'], 'Who should do the repair? Answer: an experienced HPB surgeon (Liao 2026; Bailey and Love).')) S.append(Q('A patient is day 2 after laparoscopic cholecystectomy with 500 mL/day of bile in the drain and fever. Plan?',[ 'Resuscitate, antibiotics, check for peritonitis and sepsis.', 'Imaging: USG/CT for collections (drain them), HIDA or MRCP to localise leak; ERCP is both diagnostic and therapeutic.', 'Most common leak is the cystic duct stump: ERCP with a stent across the origin of the cystic duct (Bailey and Love). Small leaks usually settle if there is no distal obstruction.', 'If the CBD itself is damaged (cut-off, no continuity on imaging), refer to an HPB expert for reconstruction.'], 'What if ERCP shows complete cut-off of the CBD? Answer: Strasberg E injury; drain sepsis, consider PTC drainage, plan HJ.')) S.append(Q('What are the principles and goals of biliary reconstruction?',[ 'Re-establish biliary-enteric continuity with a <b>tension-free, mucosa-to-mucosa anastomosis</b> to healthy, well-vascularised duct using a <b>Roux-en-Y hepaticojejunostomy</b>; long-term transanastomotic stents if the injury is at or above the bifurcation (Sabiston Box 88.1).', 'Dissect and resect the injured or strictured segment completely, and use fine absorbable sutures (Sleisenger).', 'Maintain duct length and restore drainage (Bailey and Love).', 'Repair in the setting of peritonitis, combined vascular injury, or at or above the bifurcation predicts a poorer outcome (Bailey and Love).']) ) S.append(Q('Briefly describe how you perform a Roux-en-Y hepaticojejunostomy.',[ 'Control sepsis first; mobilise the hepatic duct to healthy mucosa; oversew the distal duct stump.', 'Divide jejunum about 20 to 30 cm from the DJ flexure; Roux limb (commonly 50 to 70 cm, common teaching) brought up retrocolic or antecolic without tension; jejuno-jejunostomy below.', 'Small enterotomy matched to the duct; interrupted fine absorbable (4-0 or 5-0) sutures, mucosa to mucosa, posterior row first; transanastomotic stent for high or small ducts.', 'Drain the area. Document anastomosis level and any additional ductal openings.'], 'Single or multiple anastomoses? Answer: multiple if the injury is proximal to the bifurcation (E4) (Liao 2026).')) S.append(Q('Outline the management by Strasberg type.',[ '<b>A:</b> monitor drain; ERCP stent \u00B1 sphincterotomy; washout if peritonitis (Sabiston).', '<b>B:</b> conservative if asymptomatic; PTC drainage or HJ if cholangitis; segmental resection if atrophic.', '<b>C:</b> percutaneous drainage; rarely HJ or hepatectomy.', '<b>D:</b> small non-devascularised injuries: closure over drain, or ERCP stent; devascularised: repair with drain.', '<b>E:</b> Roux-en-Y HJ (E3 to E5 always; E1/E2 if not suitable for endoscopic therapy) by an HPB surgeon.']) ) S.append(Q('When should definitive repair of a transected duct be done? What is the evidence?',[ 'Debated; definitions vary (early, intermediate, late). Delay allows inflammation to settle and gives a more elective, tension-free reconstruction.', '<b>Liao 2026</b> (n = 54, retrospective): early repair (intra-op or 3 days or less) had 0/23 strictures vs 5/31 (16.1%) after late repair, P = 0.023; selection bias because all early cases were recognised at surgery.', '<b>SAGES-AHPBA 2025:</b> conditional recommendation, low certainty, favouring delayed (over 6 weeks) over early (under 6 weeks) definitive repair.', 'Several series show the intermediate window (about 3 days to 6 weeks) has more complications.', 'Practical rule: immediate repair if recognised at surgery by an HPB surgeon; otherwise control sepsis and sepsis source, drain, then reconstruct electively.'], 'Why do Liao and SAGES-AHPBA seem to disagree? Answer: they define "early" differently.')) S.append(Q('What is a vasculobiliary injury? How does it change management?',[ 'Combined bile duct and hepatic arterial (or portal) injury. The right hepatic artery is injured more than 90% of the time (Maingot); incidence 12 to 61% of major BDI (Fischer).', 'Ischaemia extends the duct injury higher and raises the stricture risk after repair (Mulholland). Patchy infarction of the right hemiliver can follow.', 'Early anastomosis risks joining to an ischaemic duct; delay lets the duct "die back" to a vascularised level (Maingot). Resect duct back to healthy, viable tissue (Fischer).', 'Look at vessels with CT angiography or MRA in major injuries. Extreme VBI (portal vein plus hepatic artery) causes rapid liver infarction.']) ) S.append(Q('How is an anastomotic stricture after hepaticojejunostomy treated?',[ 'Hepaticojejunostomy precludes standard endoscopic access, so strictures usually need <b>percutaneous transhepatic</b> dilatation and stenting (Liao).', 'If that fails: operative revision, then hepatic resection for atrophic segments, and in severe cases liver transplantation.', 'For a recent stricture where a guidewire passes: balloon dilatation plus stent is acceptable with an experienced endoscopist (Bailey and Love).']) ) S.append(Sx('E. OUTCOMES AND COMPLICATIONS')) S.append(Q('What are the complications and long-term consequences of BDI repair?',[ 'Anastomotic stricture (the commonest late problem), cholangitis, bile leak, intra-abdominal collection, wound problems, biliary cirrhosis, hepatic atrophy, portal hypertension.', 'Reduced quality of life and work limitation long term (Bailey and Love); depressive symptoms reported before successful repair (cited by Liao).', 'Mortality is higher with sepsis and vascular injury.']) ) S.append(Q('List poor prognostic factors for outcome after repair.',[ 'Biliary peritonitis or sepsis at repair, combined vascular and bile duct injury, injury at or above the bifurcation (Bailey and Love).', 'Repair by a non-specialist and late referral are also associated with worse results (cited by Liao).']) ) S.append(Sx('F. EVIDENCE AND MEDICO-LEGAL')) S.append(Q('Summarise Liao et al. (Am Surg 2026) in one minute.',[ 'Retrospective review, Ochsner Health, 2012 to 2023, 54 operative CBDI repairs; 23 early (intra-op or 3 days or less), 31 late.', 'Types: 12 primary repairs, 37 single and 5 multiple anastomoses. Groups similar in age, BMI, ASA and bilirubin.', 'Strictures 0 vs 5 (16.1%), P = 0.023; bile leak 4.3% vs 12.9% (P = 0.26); stay 9.35 vs 12.03 days (P = 0.149); one death in late group.', 'Lawsuits 3/54 (5.6%): 2 early (8.7%), 1 late (3.2%), P = 0.428; one plaintiff verdict.'], 'Does the title follow from the data? Answer: no; lawsuits were numerically higher with early repair.')) S.append(Q('Critically appraise this study.',[ '<b>Strengths:</b> clear timing definition, 12 years, true CBDI only, objective outcomes, novel litigation capture (Westlaw plus records requests).', '<b>Weaknesses:</b> retrospective single centre, small n and only 5 strictures, early group selected by intra-op recognition, referral and transfer confounding, no Strasberg grade, no multivariable analysis, no follow-up duration.', 'Table inconsistencies: mean diagnosis-to-repair 0.48 vs 53.71 days (P = 0.046) against median 0 vs 10 (P < 0.001); ALP SD 2206.6 looks like a typo.', 'Litigation conclusions rest on 3 events and cannot support causality.']) ) S.append(Q('What are the medico-legal lessons of BDI?',[ 'CBDI is a frequent cause of litigation after cholecystectomy; delayed referral to a tertiary centre has been associated with malpractice claims (cited by Liao).', 'Record the operative findings and the CVS, recognise and disclose the injury promptly, obtain cholangiography, and refer early to an HPB unit.', 'Document consent discussion including risk of BDI, and keep communication with the patient and family open.']) ) S.append(Sx('G. CASE-BASED VIVAS')) S.append(Q('Case 1: 52-year-old woman, 6 months after laparoscopic cholecystectomy, with jaundice and rigors. MRCP shows hilar stricture with intact confluence communication.',[ 'Diagnosis: post-cholecystectomy stricture, Strasberg E3 (Bismuth III), cholangitis.', 'Treat cholangitis first: antibiotics, resuscitation, PTC drainage (or ERCP if feasible).', 'Assess liver (atrophy, cirrhosis) and vessels (CT angiography or MRA).', 'Definitive: Roux-en-Y hepaticojejunostomy at the hilum by an HPB surgeon after sepsis has resolved; transanastomotic stents.'], 'Alternatives if she is unfit? Answer: long-term percutaneous or endoscopic stenting with periodic exchange.')) S.append(Q('Case 2: On the table you clipped and divided a tubular structure that turns out to be the CBD. You are a junior with no HPB support.',[ 'Tell the consultant and anaesthetist; do not hide it.', 'Stop dissecting. Cholangiography (through the divided ends if possible) to define the injury.', 'Drain the area; consider leaving a catheter in the proximal duct; no attempt at heroic repair without expertise.', 'Transfer to an HPB centre; document the operative note honestly; disclose to the patient and family.']) ) S.append(Q('Case 3: Postoperative day 3, bile peritonitis, febrile, drains not working.',[ 'Resuscitate, antibiotics, urgent CT; percutaneous drainage of collections; lavage laparotomy only if source control fails.', 'Define anatomy once stable (MRCP or PTC); biliary drainage (PTC/ERCP).', 'Avoid hurried reconstruction in an inflamed, septic field; plan definitive HJ electively at an HPB centre.']) ) S.append(Sx('H. QUICK-FIRE (ANSWER IN ONE LINE)')) qf=[('Commonest class of laparoscopic BDI?','Stewart-Way class III (CBD mistaken for cystic duct), about 60%.'), ('Most commonly injured artery?','Right hepatic artery (over 90% of arterial injuries).'), ('Strasberg type for a cystic stump leak?','A.'), ('E2 means?','Stump under 2 cm from the confluence.'), ('E4 means?','Confluence destroyed, right and left ducts separated.'), ('Gold-standard imaging for the full biliary map?','MRCP (with MRA for vessels).'), ('Treatment of a type A leak?','ERCP sphincterotomy/stent across the cystic duct origin.'), ('Preferred reconstruction for transection?','Roux-en-Y hepaticojejunostomy.'), ('Key anastomotic principles?','Tension-free, mucosa-to-mucosa, healthy vascularised duct.'), ('Who should repair?','An experienced HPB surgeon.'), ('If you cannot repair intra-op?','Drain and transfer; no further dissection.'), ('Why does HJ complicate stricture care?','No standard endoscopic access; needs percutaneous route.'), ('SAGES-AHPBA 2025 timing recommendation?','Conditional, low certainty, favours delayed (over 6 weeks).'), ('Liao 2026 stricture rate early vs late?','0/23 vs 5/31 (16.1%), P = 0.023.'), ('Strasberg classification limitation?','Does not describe vascular injury.')] rows=[[Paragraph('Question',TH),Paragraph('Answer',TH)]]+[[Paragraph(a,BB),Paragraph(b,B)] for a,b in qf] t=Table(rows,colWidths=[80*mm,100*mm],repeatRows=1) st=[('BACKGROUND',(0,0),(-1,0),K),('GRID',(0,0),(-1,-1),0.6,K),('VALIGN',(0,0),(-1,-1),'MIDDLE'),('TOPPADDING',(0,0),(-1,-1),3),('BOTTOMPADDING',(0,0),(-1,-1),3)] for r in range(2,len(rows),2): st.append(('BACKGROUND',(0,r),(-1,r),G)) t.setStyle(TableStyle(st)); S.append(t) S.append(Spacer(1,8)) S.append(Paragraph("Sources: Bailey and Love's Short Practice of Surgery 28e; Sabiston Textbook of Surgery (Bile duct injury, Box 88.1, Table 26.8); Mulholland and Greenfield's Surgery 7e (Bile duct injury); Maingot's Abdominal Operations (Vasculobiliary injuries); Fischer's Mastery of Surgery 8e; Sleisenger and Fordtran; Current Surgical Therapy 14e; Liao P et al. Am Surg 2026;92(9):2408-12; Calabrese EC et al. SAGES-AHPBA 2025, Surg Endosc 2026 (PMID 41266841).",ParagraphStyle('f',parent=B,fontSize=7.5,leading=9.5,textColor=D))) doc=SimpleDocTemplate('/tmp/workspace/viva-bank/BDI_Viva_Question_Bank.pdf',pagesize=A4,leftMargin=15*mm,rightMargin=15*mm,topMargin=13*mm,bottomMargin=14*mm) doc.build(S,onFirstPage=footer,onLaterPages=footer) print('ok',n[0]) EOF python build.py && python -c " from pypdf import PdfReader for f in ['/tmp/workspace/viva-bank/BDI_Viva_Question_Bank.pdf','/tmp/workspace/strasberg-sheet/Strasberg_Classification_Quick_Reference.pdf']: print(f,len(PdfReader(f).pages))"
cd /tmp/workspace/viva-bank && python - <<'E' L=open('build.py').read().split('\n') for i,l in enumerate(L): if l.rstrip().endswith("'])") and not L[i+1].strip().startswith(')'): L[i]=l.rstrip()+')' open('build.py','w').write('\n'.join(L)) E python build.py && python -c " from pypdf import PdfReader for f in ['/tmp/workspace/viva-bank/BDI_Viva_Question_Bank.pdf','/tmp/workspace/strasberg-sheet/Strasberg_Classification_Quick_Reference.pdf']: print(f,len(PdfReader(f).pages))"
cd /tmp/workspace/viva-bank && sed -i "s/control sepsis and sepsis source, drain/control sepsis and the bile leak, drain/" build.py && python build.py && ls -la BDI_Viva_Question_Bank.pdf
BDI Viva Question Bank
PDF Document · PDF