JR1 JC presentation powerpoint

Reading File
Reading File
Browsing Directory

~/

Reading File
Reading File
Running Command

python -c "from pypdf import PdfReader; p='/tmp/workspace/attachments/a135cee2-4f36-46db-8177-792869376e80/fb692e1c6e4f50e73137989811351222e227.pdf'; r=PdfReader(p); print('PAGES',len(r.pages)); print('META',r.metadata); [print('\\n--- PAGE',i+1,'---\\n', (pg.extract_text() or '')[:5000]) for i,pg in enumerate(r.pages)]"

Searching PubMed

pilonidal sinus AND endoscopic

Finding Sources
Searching the Web

10.4103/jmas.jmas_260_25 endoscopic pilonidal sinus treatment long term outcomes

Browsing Directory

~/

Running Command

mkdir -p "/tmp/workspace/jr1_epsit_presentation/src" "/tmp/workspace/jr1_epsit_presentation/output" && python - <<'PY' from pathlib import Path p=Path('/tmp/workspace/jr1_epsit_presentation/src/create_jr1_epsit.py') p.write_text(r'''from pptx import Presentation from pptx.util import Inches, Pt from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.enum.shapes import MSO_SHAPE, MSO_CONNECTOR from pptx.dml.color import RGBColor from pptx.enum.dml import MSO_THEME_COLOR from pptx.enum.text import MSO_AUTO_SIZE from pptx.chart.data import CategoryChartData from pptx.enum.chart import XL_CHART_TYPE, XL_LEGEND_POSITION OUT = "/tmp/workspace/jr1_epsit_presentation/output/JR1_Journal_Club_EPSIT.pptx" prs=Presentation(); prs.slide_width=Inches(13.333); prs.slide_height=Inches(7.5) blank=prs.slide_layouts[6] # Palette NAVY=RGBColor(13,34,57); TEAL=RGBColor(0,133,137); MINT=RGBColor(224,244,240); ORANGE=RGBColor(238,128,55); RED=RGBColor(192,65,61); INK=RGBColor(30,43,53); MID=RGBColor(88,105,116); PALE=RGBColor(245,248,250); WHITE=RGBColor(255,255,255); LINE=RGBColor(211,220,225) def rect(sl,x,y,w,h,fill, radius=False, line=None): sh=sl.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE if radius else MSO_SHAPE.RECTANGLE, Inches(x), Inches(y), Inches(w), Inches(h)) sh.fill.solid(); sh.fill.fore_color.rgb=fill sh.line.color.rgb = line if line else fill if radius: sh.adjustments[0]=0.08 return sh def text(sl,x,y,w,h,s,size=18,color=INK,bold=False,align=PP_ALIGN.LEFT, font='Aptos', valign=MSO_ANCHOR.TOP, margin=0.03): tb=sl.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)); tf=tb.text_frame tf.clear(); tf.word_wrap=True; tf.margin_left=tf.margin_right=Inches(margin); tf.margin_top=tf.margin_bottom=Inches(margin); tf.vertical_anchor=valign for i,line in enumerate(s.split('\n')): p=tf.paragraphs[0] if i==0 else tf.add_paragraph(); p.text=line; p.alignment=align; p.space_after=Pt(0) for r in p.runs: r.font.name=font; r.font.size=Pt(size); r.font.bold=bold; r.font.color.rgb=color return tb def rich(sl,x,y,w,h,paras): tb=sl.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)); tf=tb.text_frame; tf.clear(); tf.word_wrap=True tf.margin_left=tf.margin_right=Inches(.04); tf.margin_top=tf.margin_bottom=Inches(.02) for i,(s,sz,col,bold,level) in enumerate(paras): p=tf.paragraphs[0] if i==0 else tf.add_paragraph(); p.text=s; p.level=level; p.space_after=Pt(7 if level==0 else 3) for r in p.runs: r.font.name='Aptos'; r.font.size=Pt(sz); r.font.bold=bold; r.font.color.rgb=col return tb def base(title, kicker, num): sl=prs.slides.add_slide(blank); rect(sl,0,0,13.333,7.5,WHITE); rect(sl,0,0,13.333,.14,TEAL) text(sl,.58,.34,8.9,.3,kicker.upper(),10,TEAL,True) text(sl,.58,.68,12.0,.55,title,26,NAVY,True) rect(sl,.58,7.06,12.15,.015,LINE) text(sl,.58,7.16,9.5,.18,'JR1 Journal Club | Endoscopic pilonidal sinus treatment',8,MID) text(sl,12.2,7.12,.45,.22,f'{num:02d}',10,TEAL,True,PP_ALIGN.RIGHT) return sl def pill(sl,x,y,w,label,fill=TEAL): rect(sl,x,y,w,.34,fill,True); text(sl,x,y+.04,w,.18,label,9,WHITE,True,PP_ALIGN.CENTER) def card(sl,x,y,w,h,heading,body,accent=TEAL): rect(sl,x,y,w,h,PALE,True,LINE); rect(sl,x,y,.08,h,accent); text(sl,x+.22,y+.18,w-.38,.25,heading,13,NAVY,True) rich(sl,x+.22,y+.55,w-.42,h-.65,[(t,13,INK,False,0) for t in body.split('\n')]) def bullet(sl,x,y,w,items,size=15): paras=[] for s in items: paras.append((s,size,INK,False,1)) return rich(sl,x,y,w,5.8,paras) # 1 sl=prs.slides.add_slide(blank); rect(sl,0,0,13.333,7.5,NAVY); rect(sl,0,0,13.333,.16,TEAL) text(sl,.8,.85,3.3,.34,'JR1 JOURNAL CLUB',13,RGBColor(125,222,216),True) text(sl,.8,1.45,8.1,1.55,'Long-term outcomes of\nendoscopic pilonidal sinus treatment',31,WHITE,True) text(sl,.82,3.22,7.7,.45,'A single tertiary centre experience',18,RGBColor(215,230,234)) rect(sl,.82,4.0,7.1,.02,TEAL) text(sl,.82,4.25,7.6,.72,'Singla L, Kalaiselvan R, Samad A, Chadwick M, Rajasundram R.\nJournal of Minimal Access Surgery. 2026;22:187-193.',13,RGBColor(215,230,234)) pill(sl,.82,5.28,1.85,'RETROSPECTIVE') pill(sl,2.83,5.28,1.9,'SINGLE CENTRE',ORANGE) pill(sl,4.9,5.28,1.35,'N = 87',TEAL) # graphical sinus/endoscope motif rect(sl,9.45,1.25,2.8,4.75,RGBColor(19,53,77),True) for yy,ww in [(1.85,1.95),(2.55,1.35),(3.25,2.1),(3.95,1.55)]: rect(sl,9.85,yy,ww,.14,RGBColor(70,168,166),True) for x,y in [(10.05,4.78),(11.22,4.5),(10.65,5.15)]: sh=sl.shapes.add_shape(MSO_SHAPE.OVAL, Inches(x), Inches(y), Inches(.28), Inches(.28)); sh.fill.solid();sh.fill.fore_color.rgb=ORANGE;sh.line.color.rgb=ORANGE text(sl,.82,6.76,4.0,.22,'Presenter: ____________________',10,RGBColor(215,230,234)) #2 sl=base('Why does this question matter?','Clinical context',2) text(sl,.62,1.47,4.2,.75,'Pilonidal disease affects young adults and often disrupts work, education and quality of life.',20,NAVY,True) card(sl,.65,2.48,3.75,2.7,'The problem',['Chronic discharge, pain and infection','Recurrence and prolonged healing after excision','Need to balance cure with recovery burden'][0]+'\n'+['Chronic discharge, pain and infection','Recurrence and prolonged healing after excision','Need to balance cure with recovery burden'][1]+'\n'+['Chronic discharge, pain and infection','Recurrence and prolonged healing after excision','Need to balance cure with recovery burden'][2],TEAL) card(sl,4.75,2.48,3.75,2.7,'Established alternatives','Open excision or closure\nOff-midline flap reconstruction\nPit picking, phenol, laser',ORANGE) card(sl,8.85,2.48,3.75,2.7,'EPSIT proposition','Direct endoscopic tract assessment\nHair/debris removal + curettage\nThermal ablation with small access',TEAL) text(sl,.66,5.72,11.5,.35,'Clinical question: Can EPSIT provide durable healing in real-world, selected patients without the morbidity of more extensive surgery?',17,NAVY,True) text(sl,.66,6.28,11.5,.35,'Source: Singla et al., pp. 187-188. Background claims should be interpreted in the context of this non-comparative cohort.',10,MID) #3 sl=base('Study question and design','Methods',3) card(sl,.65,1.45,3.65,4.9,'Objective','Assess long-term outcomes after EPSIT, focusing on healing, recurrence and later intervention.\n\nSetting\nSingle UK district general hospital; one experienced colorectal surgeon.\n\nDesign\nRetrospective observational cohort.',TEAL) card(sl,4.82,1.45,3.65,4.9,'Participants','All consecutive adults treated January 2015 to May 2022.\n\nIncluded\nPrimary or recurrent PSD.\n\nExcluded\nAcute abscess, prior extensive excision, major tissue loss/scarring.',ORANGE) card(sl,8.99,1.45,3.65,4.9,'Follow-up & endpoints','Visits at 6 weeks, 6 months and annually, supplemented by structured telephone review.\n\nPrimary outcomes\nShort- and long-term healing, recurrence, further surgery.\n\nData cutoff: 30 March 2024.',TEAL) text(sl,.66,6.58,11.5,.24,'Healing = absence of discharge and pain, confirmed clinically or by patient report. Recurrence = return of symptoms after initial healing.',10,MID) #4 sl=base('What exactly was done?','Intervention',4) text(sl,.66,1.42,5.7,.32,'EPSIT procedural workflow',20,NAVY,True) steps=[('1','Explore','Fistuloscope introduced with continuous irrigation'),('2','Map','Define primary and secondary tracts'),('3','Clear','Remove hair and debris with graspers'),('4','Curette','Endobrush debridement of cavity'),('5','Ablate','Thermal ablation and haemostasis')] for i,(n,h,b) in enumerate(steps): x=.72+i*2.43 sh=sl.shapes.add_shape(MSO_SHAPE.OVAL,Inches(x),Inches(2.15),Inches(.55),Inches(.55));sh.fill.solid();sh.fill.fore_color.rgb=TEAL;sh.line.color.rgb=TEAL text(sl,x,2.27,.55,.17,n,12,WHITE,True,PP_ALIGN.CENTER) if i<4: rect(sl,x+.58,2.39,1.72,.035,LINE) text(sl,x,2.93,1.95,.25,h,14,NAVY,True) text(sl,x,3.3,1.95,.58,b,11,INK) card(sl,.72,4.62,5.5,1.48,'Anaesthesia and setting','Local anaesthesia for simple disease or preference; general anaesthesia for complex disease or preference. All cases were day cases. No packing required.',ORANGE) card(sl,6.65,4.62,5.95,1.48,'Adjuncts and aftercare','Standard analgesia and advice on hygiene/activity. Laser depilation offered selectively according to natal cleft hair density.',TEAL) text(sl,.72,6.45,11.7,.2,'Technique source: Singla et al., pp. 188-189. Local infiltration: 20 mL 0.5% levobupivacaine after the procedure.',9,MID) #5 sl=base('Who were the patients?','Cohort',5) # stats stats=[('87','patients'),('31','median age*'),('62:25','male:female'),('34 min','mean procedure'),('21','local anaesthetic')] for i,(a,b) in enumerate(stats): x=.68+i*2.45; rect(sl,x,1.55,2.12,1.25,PALE,True,LINE); text(sl,x,1.77,2.12,.38,a,23,TEAL,True,PP_ALIGN.CENTER); text(sl,x,2.28,2.12,.2,b,10,MID,False,PP_ALIGN.CENTER) card(sl,.7,3.35,3.65,2.65,'Risk profile','12 smokers\n1 patient with type 2 diabetes\nASA I: 59 | ASA II: 25 | ASA III: 3',TEAL) card(sl,4.83,3.35,3.65,2.65,'Case mix','Primary and recurrent disease included.\n\nTertiary referral of recurrent / previously treated cases may lower apparent effectiveness compared with selected primary cohorts.',ORANGE) card(sl,8.96,3.35,3.65,2.65,'Important reporting issue','Text reports median age 31 years (range 19-60), whereas Table 1 reports mean ± SD 31 ± 8.\n\nClarify the summary measure in future reporting.',RED) text(sl,.7,6.35,11.5,.25,'*Article abstract reports median age. Source: Singla et al., pp. 187, 189-190.',9,MID) #6 flow sl=base('Participant flow exposes the key limitation','Results: retention',6) # flow boxes flow=[(0.8,1.55,2.2,1.02,'87','EPSIT procedures'),(3.55,1.55,2.2,1.02,'70 (84%)','short-term healing'),(6.3,1.55,2.2,1.02,'52','complete long-term follow-up'),(9.05,1.55,2.55,1.02,'41','durable healing after one EPSIT')] for x,y,w,h,a,b in flow: rect(sl,x,y,w,h,PALE,True,LINE);text(sl,x,y+.17,w,.34,a,22,TEAL,True,PP_ALIGN.CENTER);text(sl,x,y+.63,w,.19,b,10,MID,False,PP_ALIGN.CENTER) for x in [3.08,5.83,8.58]: rect(sl,x,2.02,.34,.04,TEAL) # dropout alert rect(sl,.85,3.2,11.5,1.15,RGBColor(255,243,239),True,RGBColor(242,202,188)); text(sl,1.15,3.45,1.25,.35,'29%',25,RED,True);text(sl,2.42,3.48,9.15,.35,'25 of 87 patients were lost to long-term follow-up.',19,NAVY,True) card(sl,.86,4.88,5.35,1.37,'Why it matters','Long-term success is highly sensitive to assumptions about missing outcomes. Attrition risks bias if patients with ongoing symptoms are less likely to respond.',RED) card(sl,6.7,4.88,5.35,1.37,'Authors’ sensitivity analysis','EPSIT-only long-term healing: 76% best case if all missing patients healed; 47% worst case if none healed.',TEAL) text(sl,.86,6.52,11.3,.22,'Note: 41/52 = 79% among those with complete long-term follow-up, but 41/87 = 47% for the entire cohort.',10,MID) #7 outcomes chart sl=base('Headline outcomes: denominator determines the message','Results: efficacy',7) text(sl,.68,1.37,11.5,.32,'Avoid calling the 79% figure the overall long-term success rate.',18,NAVY,True) chart_data=CategoryChartData();chart_data.categories=['Short-term\nhealed','Durable: 1 EPSIT\n(all 87)','Durable: 1 EPSIT\n(52 followed)','Healed incl.\nadjuncts (all 87)'];chart_data.add_series('Percentage',[84,47,79,60]) chart=sl.shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, Inches(.75), Inches(2.0), Inches(7.2), Inches(3.85), chart_data).chart chart.has_legend=False; chart.value_axis.maximum_scale=100; chart.value_axis.minimum_scale=0; chart.value_axis.major_unit=20;chart.value_axis.has_major_gridlines=True; chart.value_axis.tick_labels.font.size=Pt(10);chart.category_axis.tick_labels.font.size=Pt(9); chart.plots[0].series[0].format.fill.solid();chart.plots[0].series[0].format.fill.fore_color.rgb=TEAL chart.has_title=False card(sl,8.5,1.95,3.8,1.12,'Short term','70/87 achieved initial healing at median 6 months.',TEAL) card(sl,8.5,3.3,3.8,1.12,'Long term','41/52 had durable healing after one EPSIT. This is 47% when the full cohort is retained as denominator.',ORANGE) card(sl,8.5,4.65,3.8,1.12,'Recurrence','6/87 (7%) reported recurrence after initial healing; conservatively managed at reporting.',RED) text(sl,.75,6.35,11.55,.22,'Data from Table 2 and Results, Singla et al., pp. 189-190. “Adjuncts” includes repeat EPSIT or flap surgery.',9,MID) #8 compare sl=base('How do these findings fit the evidence?','Interpretation',8) card(sl,.7,1.45,3.7,4.75,'This cohort','EPSIT only\n• 84% short-term healing\n• 47% long-term healing by all-patient denominator\n• 79% among 52 assessed long term\n\nContext\nRecurrent/previously treated referrals and 29% attrition limit direct comparison.',TEAL) card(sl,4.82,1.45,3.7,4.75,'Published literature','The article cites endoscopic series / reviews with healing roughly 85%-90% and recurrence 8%-15%.\n\nComparisons are vulnerable to heterogeneous disease severity, follow-up, outcome definitions and denominators.',ORANGE) card(sl,8.94,1.45,3.7,4.75,'Recent external check','A 2025 systematic review compared EPSIT with excision plus wound closure. Its existence reinforces the need to interpret this single-arm cohort alongside comparative evidence.\n\nNo causal conclusion versus flap or excision can be made here.',RED) text(sl,.7,6.42,11.55,.38,'Recent evidence alert: Agnesi et al., systematic review (2025), PMID 40178497. This presentation does not reproduce its quantitative findings because the full paper was not appraised here.',10,MID) #9 appraisal sl=base('Critical appraisal','Validity',9) card(sl,.68,1.45,3.75,4.88,'Strengths','• Consecutive adult cohort\n• Long observed time window: median 62 months among those followed\n• Clinically relevant endpoints\n• Sensitivity analysis explicitly acknowledges missingness\n• Practical day-case experience from a UK service',TEAL) card(sl,4.8,1.45,3.75,4.88,'Limitations','• Retrospective, single centre\n• One surgeon: expertise effect, limited generalisability\n• No comparator or adjusted analysis\n• Recurrence/healing partly patient-reported\n• No standard pain, cosmesis, return-to-work or QoL outcomes',ORANGE) card(sl,8.92,1.45,3.75,4.88,'Potential bias','• Selection via shared decision-making\n• Excluded acute abscess and extensive scarring\n• Tertiary referral case mix unclear\n• 29% long-term loss to follow-up\n• Inconsistent denominators across text/table can confuse interpretation',RED) text(sl,.68,6.55,11.7,.22,'Bottom line on internal validity: reasonable service outcome description, but limited evidence of comparative effectiveness.',10,NAVY,True) #10 clinical sl=base('What should change in practice?','Applicability',10) text(sl,.7,1.4,11,.35,'EPSIT is an option, not a universal substitute for flap-based or excisional surgery.',20,NAVY,True) card(sl,.72,2.05,3.62,3.7,'May fit','Selected primary or recurrent PSD\nLimited tissue loss/scarring\nPatient values rapid recovery and small wounds\nExperienced EPSIT operator and equipment available\nCommitment to hygiene / hair management / review',TEAL) card(sl,4.86,2.05,3.62,3.7,'May not fit','Acute abscess needing drainage\nExtensive scarring or tissue loss\nComplex disease where definitive off-midline reconstruction is preferred\nNo access to trained endoscopic service',ORANGE) card(sl,9.0,2.05,3.62,3.7,'Counsel honestly','Possible repeat EPSIT or later flap\nLong-term certainty is limited\nDiscuss healing definition, recurrence risk, time off work, pain/cosmesis and local expertise\nPlan reliable follow-up',RED) text(sl,.72,6.2,11.55,.28,'Clinical implication: shared decision-making should include the possibility that minimally invasive treatment trades lower immediate morbidity for repeat intervention or incomplete durability in some patients.',13,MID) #11 takeaway sl=base('Take-home message','Conclusion',11) rect(sl,.8,1.4,11.75,2.05,MINT,True,RGBColor(181,225,217)); text(sl,1.15,1.78,11.0,1.1,'EPSIT achieved 84% initial healing, but its long-term estimate is uncertain because 29% of patients lacked long-term outcome data.',25,NAVY,True,PP_ALIGN.CENTER, valign=MSO_ANCHOR.MIDDLE) for i,(h,b,c) in enumerate([('Evidence statement','Useful real-world single-surgeon cohort with extended observation.',TEAL),('Interpretation','79% applies only to those followed; 47% is the all-cohort EPSIT-only rate.',ORANGE),('Action','Offer selectively, counsel about repeat procedures, and strengthen prospective follow-up.',RED)]): x=.83+i*4.05; rect(sl,x,4.15,3.66,1.5,PALE,True,LINE); text(sl,x+.18,4.38,3.28,.25,h,14,c,True);text(sl,x+.18,4.77,3.28,.48,b,11,INK) text(sl,.84,6.3,11.45,.28,'One question for discussion: What outcome and denominator would you use to counsel a patient considering EPSIT?',16,NAVY,True) #12 refs sl=base('References and discussion prompts','Closing',12) text(sl,.68,1.38,5.8,.28,'Primary paper',16,NAVY,True) rich(sl,.7,1.78,5.9,1.18,[('Singla L, Kalaiselvan R, Samad A, Chadwick M, Rajasundram R. Long-term outcomes of endoscopic pilonidal sinus treatment: A single tertiary centre experience. J Minimal Access Surg. 2026;22:187-193. doi:10.4103/jmas.jmas_260_25.',12,INK,False,0)]) text(sl,.68,3.22,5.8,.28,'Additional context',16,NAVY,True) rich(sl,.7,3.62,5.9,2.3,[('Agnesi S, et al. Endoscopic pilonidal sinus treatment versus excision with wound closure: a systematic review of the literature. Minerva Surg. 2025. PMID: 40178497.',11,INK,False,0),('Brown SR, et al. Real-world practice and outcomes in pilonidal surgery: PITSTOP cohort. Br J Surg. 2024;111:znae009.',11,INK,False,0),('Emile SH, et al. Endoscopic pilonidal sinus treatment: systematic review and meta-analysis. Surg Endosc. 2018;32:3754-62.',11,INK,False,0)]) rect(sl,7.1,1.38,5.2,4.9,PALE,True,LINE); text(sl,7.42,1.72,4.5,.3,'Discuss',18,TEAL,True) rich(sl,7.42,2.22,4.5,3.55,[('1. Is 29% loss to follow-up acceptable for claiming long-term success?',14,NAVY,True,0),('2. Which patients should go directly to an off-midline flap rather than EPSIT?',14,NAVY,True,0),('3. What patient-reported outcomes should a prospective EPSIT registry collect?',14,NAVY,True,0)]) text(sl,.7,6.55,11.5,.22,'Prepared from the user-supplied paper. Figures and charts in this deck are original visual summaries of reported data.',9,MID) prs.save(OUT) print(OUT) ''') PY python "/tmp/workspace/jr1_epsit_presentation/src/create_jr1_epsit.py" python - <<'PY' from pptx import Presentation p='/tmp/workspace/jr1_epsit_presentation/output/JR1_Journal_Club_EPSIT.pptx' prs=Presentation(p) print('slides',len(prs.slides),'size',prs.slide_width,prs.slide_height) for i,s in enumerate(prs.slides,1): t=' | '.join(sh.text.replace('\n',' / ')[:120] for sh in s.shapes if getattr(sh,'has_text_frame',False) and sh.text.strip()) print(i, t[:220]) PY

Running Command

python - <<'PY' from pathlib import Path from pptx import Presentation p=Path('/tmp/workspace/jr1_epsit_presentation/output/JR1_Journal_Club_EPSIT.pptx') assert p.exists() and p.stat().st_size > 10000 prs=Presentation(str(p)) assert len(prs.slides)==12 # Basic validation: slides have text, and content fits normal slide bounds for n,slide in enumerate(prs.slides,1): texts=[s.text.strip() for s in slide.shapes if getattr(s,'has_text_frame',False) and s.text.strip()] assert texts, f'slide {n} has no text' for s in slide.shapes: assert s.left >= 0 and s.top >= 0 and s.left+s.width <= prs.slide_width+1 and s.top+s.height <= prs.slide_height+1, f'out-of-bounds shape slide {n}' print(f'validated {len(prs.slides)} slides, {p.stat().st_size:,} bytes') PY

Created a 12-slide JR1 journal-club presentation based on the supplied article, including study design, EPSIT technique, cohort, outcome visualizations, critical appraisal, applicability, discussion prompts, and references.

JR1 Journal Club EPSIT

Presentation · PPTX

This is a shared conversation. Sign in to Orris to start your own chat.