Hipec ms sugery notes for 10 marks
"Hyperthermic Intraperitoneal Chemotherapy"[MeSH Terms]
HIPEC surgery patient information hyperthermic intraperitoneal chemotherapy NCI
PMID: 38658171
Make a one-page HIPEC quick-reference PDF
"Hyperthermic Intraperitoneal Chemotherapy"[MeSH Terms]
HIPEC hyperthermic intraperitoneal chemotherapy safety specialist centers patient information
~/
mkdir -p "/tmp/workspace/hipec-quick-reference/src" "/tmp/workspace/hipec-quick-reference/output" && python - <<'PY' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.enums import TA_LEFT, TA_CENTER from reportlab.lib.units import mm from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, KeepTogether from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.pdfbase import pdfmetrics from reportlab.lib.colors import HexColor from reportlab.pdfbase.ttfonts import TTFont import os out='/tmp/workspace/hipec-quick-reference/output/HIPEC_Quick_Reference.pdf' PAGE_W, PAGE_H=A4 M=12*mm # Colors NAVY=HexColor('#123047'); TEAL=HexColor('#007C83'); PALE=HexColor('#EAF4F4'); GOLD=HexColor('#D99A2B'); RED=HexColor('#A73232'); INK=HexColor('#18242D'); GREY=HexColor('#56636D'); LIGHT=HexColor('#F4F7F8'); LINE=HexColor('#C9D6DB') styles=getSampleStyleSheet() styles.add(ParagraphStyle(name='TitleX', parent=styles['Title'], fontName='Helvetica-Bold', fontSize=22, leading=24, textColor=colors.white, alignment=TA_LEFT, spaceAfter=1)) styles.add(ParagraphStyle(name='SubX', parent=styles['Normal'], fontName='Helvetica', fontSize=8.2, leading=10, textColor=HexColor('#DCECF0'))) styles.add(ParagraphStyle(name='Section', parent=styles['Heading2'], fontName='Helvetica-Bold', fontSize=9.2, leading=11, textColor=NAVY, spaceBefore=1, spaceAfter=3)) styles.add(ParagraphStyle(name='BodyX', parent=styles['BodyText'], fontName='Helvetica', fontSize=7.35, leading=9.0, textColor=INK, spaceAfter=1.5)) styles.add(ParagraphStyle(name='Small', parent=styles['BodyText'], fontName='Helvetica', fontSize=6.55, leading=7.9, textColor=INK, spaceAfter=1)) styles.add(ParagraphStyle(name='Tiny', parent=styles['BodyText'], fontName='Helvetica', fontSize=5.8, leading=6.9, textColor=GREY, spaceAfter=0)) styles.add(ParagraphStyle(name='Callout', parent=styles['BodyText'], fontName='Helvetica-Bold', fontSize=7.4, leading=9.1, textColor=NAVY, spaceAfter=0)) bullet='• ' def P(txt, style='BodyX'): return Paragraph(txt, styles[style]) def box(title, items, color=TEAL, small=False): sty='Small' if small else 'BodyX' content=[P(title, 'Section')] for x in items: content.append(P(bullet+x, sty)) t=Table([[content]], colWidths=[86*mm]) t.setStyle(TableStyle([ ('BACKGROUND',(0,0),(-1,-1),colors.white),('BOX',(0,0),(-1,-1),0.55,LINE), ('LINEBEFORE',(0,0),(0,-1),3,color),('LEFTPADDING',(0,0),(-1,-1),5.5),('RIGHTPADDING',(0,0),(-1,-1),5), ('TOPPADDING',(0,0),(-1,-1),4),('BOTTOMPADDING',(0,0),(-1,-1),3.5), ])) return t def flow_row(steps): cells=[] for i,(n,txt) in enumerate(steps): cells.append([P(f'<font color="#007C83"><b>{n}</b></font> {txt}', 'Small')]) t=Table(cells, colWidths=[34.4*mm]*5) t.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),PALE),('BOX',(0,0),(-1,-1),0.4,LINE),('INNERGRID',(0,0),(-1,-1),0.35,LINE),('VALIGN',(0,0),(-1,-1),'MIDDLE'),('LEFTPADDING',(0,0),(-1,-1),4),('RIGHTPADDING',(0,0),(-1,-1),3),('TOPPADDING',(0,0),(-1,-1),4),('BOTTOMPADDING',(0,0),(-1,-1),4)])) return t def header(canvas, doc): canvas.saveState() canvas.setFillColor(NAVY); canvas.rect(0,PAGE_H-39*mm,PAGE_W,39*mm,fill=1,stroke=0) canvas.setFillColor(TEAL); canvas.rect(0,PAGE_H-39*mm,PAGE_W,2.4*mm,fill=1,stroke=0) canvas.restoreState() def footer(canvas,doc): canvas.saveState(); canvas.setStrokeColor(LINE); canvas.setLineWidth(.35); canvas.line(M,12*mm,PAGE_W-M,12*mm) canvas.setFont('Helvetica',5.8); canvas.setFillColor(GREY) canvas.drawString(M,7.7*mm,'Educational quick reference. Protocols, drugs, doses, temperatures and duration vary by tumour type and institutional policy.') canvas.drawRightString(PAGE_W-M,7.7*mm,'HIPEC quick reference | 16 Sep 2026') canvas.restoreState() doc=SimpleDocTemplate(out,pagesize=A4,rightMargin=M,leftMargin=M,topMargin=42*mm,bottomMargin=16*mm) story=[] story += [Spacer(1,1.5*mm), P('HIPEC | QUICK REFERENCE','TitleX'), P('Hyperthermic intraperitoneal chemotherapy with cytoreductive surgery (CRS)','SubX'), Spacer(1,5*mm)] # Definition callout call=Table([[P('<b>What it is:</b> After maximal CRS, heated chemotherapy is circulated in the peritoneal cavity to treat microscopic residual disease. It is a specialist-centre procedure, not a substitute for complete macroscopic cytoreduction.', 'Callout')]], colWidths=[172*mm]) call.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),HexColor('#FFF7E8')),('BOX',(0,0),(-1,-1),0.6,GOLD),('LEFTPADDING',(0,0),(-1,-1),6),('RIGHTPADDING',(0,0),(-1,-1),6),('TOPPADDING',(0,0),(-1,-1),5),('BOTTOMPADDING',(0,0),(-1,-1),5)])) story += [call, Spacer(1,3.2*mm)] left=[ box('1. SELECTED INDICATIONS', ['Pseudomyxoma peritonei / appendiceal peritoneal disease','Diffuse malignant peritoneal mesothelioma','Selected ovarian, colorectal and gastric peritoneal metastases','Decision requires multidisciplinary assessment and tumour-specific evidence'], TEAL), Spacer(1,2.5*mm), box('2. PREOPERATIVE CHECKLIST', ['Cross-sectional staging ± diagnostic laparoscopy','Assess <b>PCI</b> (Peritoneal Cancer Index) and resectability','Fitness: performance status, nutrition, cardiopulmonary and renal function','Consent for major resection, stoma, ICU/HDU care, chemotherapy toxicities'], TEAL), Spacer(1,2.5*mm), box('3. KEY EXCLUSIONS / CAUTION', ['Inability to achieve meaningful complete CRS','Unresectable extra-peritoneal disease or extensive small-bowel/mesenteric involvement','Severe renal disease, poor physiological reserve or severe malnutrition','High PCI beyond tumour-specific thresholds; progressive disease despite systemic therapy'], RED, small=True) ] right=[ box('4. INTRAOPERATIVE SEQUENCE', ['Laparotomy, mapping and PCI documentation','CRS: remove all visible disease where feasible; record CC score','Place inflow/outflow cannulae and temperature probes','Perfuse heated chemotherapy, then drain, re-explore, secure haemostasis and close'], TEAL), Spacer(1,2.5*mm), box('5. PERFUSION ESSENTIALS', ['Open or closed technique; closed technique is common','Circuit commonly primed with crystalloid; inflow/outflow temperatures continuously monitored','Typical target: inflow about <b>42°C</b>, aiming for outflow about <b>40°C</b>','Agent and duration are protocol- and tumour-specific: mitomycin C, oxaliplatin or cisplatin are examples'], GOLD), Spacer(1,2.5*mm), box('6. POSTOPERATIVE PRIORITIES', ['Monitor hemodynamics, temperature, urine output, renal function, electrolytes and blood counts','Analgesia, VTE prophylaxis, respiratory care, early mobilisation and nutritional support','Watch for sepsis, bleeding, ileus, leak/fistula, renal injury and chemotherapy-related myelosuppression'], TEAL, small=True) ] cols=Table([[left,right]], colWidths=[86*mm,86*mm], hAlign='LEFT') cols.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'TOP'),('LEFTPADDING',(0,0),(-1,-1),0),('RIGHTPADDING',(0,0),(-1,-1),0),('TOPPADDING',(0,0),(-1,-1),0),('BOTTOMPADDING',(0,0),(-1,-1),0)])) story += [cols, Spacer(1,3*mm)] story += [P('AT-A-GLANCE OPERATIVE FLOW','Section'), flow_row([('01','Assess PCI'),('02','Cytoreduction'),('03','Cannulate & close'),('04','Heat + perfuse'),('05','Drain & finish')]), Spacer(1,2.7*mm)] # bottom two columns warning=Table([[P('<b>Exam pearl:</b> The most important predictor of outcome is appropriate selection and completeness of cytoreduction. HIPEC benefit is not uniform across all primary cancers; apply current tumour-specific evidence and local protocols.', 'Small')]],colWidths=[112*mm]) warning.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),HexColor('#FCEEEE')),('BOX',(0,0),(-1,-1),0.5,HexColor('#E4B4B4')),('LEFTPADDING',(0,0),(-1,-1),5),('RIGHTPADDING',(0,0),(-1,-1),5),('TOPPADDING',(0,0),(-1,-1),4),('BOTTOMPADDING',(0,0),(-1,-1),4)])) source=Table([[P('<b>Sources</b><br/>Fischer’s Mastery of Surgery, 8th ed., pp. 4150-52.<br/>Yamada’s Textbook of Gastroenterology, 7th ed., p. 2220.<br/>Gurusamy et al. <i>World J Surg</i>. 2024; PMID 38658171.', 'Tiny')]],colWidths=[57*mm]) source.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),LIGHT),('BOX',(0,0),(-1,-1),0.45,LINE),('LEFTPADDING',(0,0),(-1,-1),4),('RIGHTPADDING',(0,0),(-1,-1),4),('TOPPADDING',(0,0),(-1,-1),4),('BOTTOMPADDING',(0,0),(-1,-1),4)])) bottom=Table([[warning,source]],colWidths=[112*mm,60*mm]) bottom.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'TOP'),('LEFTPADDING',(0,0),(-1,-1),0),('RIGHTPADDING',(0,0),(-1,-1),0),('TOPPADDING',(0,0),(-1,-1),0),('BOTTOMPADDING',(0,0),(-1,-1),0)])) story += [bottom] def decorate(canvas, doc): header(canvas,doc); footer(canvas,doc) doc.build(story,onFirstPage=decorate) print(out) PY python - <<'PY' from pypdf import PdfReader p='/tmp/workspace/hipec-quick-reference/output/HIPEC_Quick_Reference.pdf' r=PdfReader(p) print('pages=',len(r.pages),'bytes=',__import__('os').path.getsize(p)) print(r.pages[0].extract_text()[:800]) PY
HIPEC Quick Reference
PDF Document · PDF