Give me everything about gastric outlet obstruction from surgery
"gastric outlet obstruction" management
| Cause | Notes |
|---|---|
| Peptic ulcer disease (PUD) | Now accounts for only ~5% of GOO in high-HDI countries (was ~90% historically); still the most common cause for surgical intervention in low/medium-HDI countries (50–60% of cases) |
| Malignancy | Now the dominant etiology (~50–80%): gastric cancer, pancreatic cancer, duodenal cancer, periampullary tumors |
| Pyloric channel ulcers / DU | More frequent with Zollinger-Ellison syndrome (~10%), long-standing or NSAID-associated ulcers |
| Crohn disease | Granulomatous narrowing of pylorus/duodenum |
| Pancreatic pseudocyst / pancreatitis | Extrinsic compression |
| Duodenal webs / strictures | Congenital or post-inflammatory |
| Tuberculosis | Especially in endemic regions; may require full-thickness biopsy |
| Bezoars | Functional obstruction |
| Gastric volvulus / hernias | Paraesophageal or post-traumatic diaphragmatic hernia; may cause relapsing obstruction |
| Caustic ingestion | Fibrotic stricture |
Hypokalemic hypochloremic metabolic alkalosis — from loss of H⁺ and Cl⁻, with compensatory renal HCO₃⁻ retention and K⁺ loss
Gold standard = V/A; V/GJ is a good alternative with lower mortality and laparoscopic feasibility. — Current Surgical Therapy 14e
| Scenario | Preferred Approach |
|---|---|
| Operable tumor, neoadjuvant therapy planned | Laparoscopic/robotic GJ |
| Advanced disease, limited survival | Duodenal SEMS (outpatient, minimally invasive) |
| Combined duodenal + distal bile duct obstruction, operable disease | PTC for bile + laparoscopic GJ (avoid duodenal stent pre-operatively) |
| Combined obstruction, advanced disease | Duodenal SEMS ± venting gastrostomy |
| Found unresectable at laparotomy (open abdomen) | Proceed with open biliary bypass ± GJ prophylactically |
A prophylactic GJ at the time of open biliary bypass (for found-unresectable disease) is generally advisable even in asymptomatic patients, given the high probability of future duodenal obstruction from tumor progression. — Current Surgical Therapy 14e
| Complication | Comment |
|---|---|
| Duodenal stump leak | Devastating; risk increased with difficult stump; manage with drainage, duodenal decompression, reoperation if necessary |
| Retained antrum syndrome | Hypergastrinemia + marginal ulceration after B-II if antrum not completely resected — ensure distal staple line is past pylorus |
| Marginal ulcer | More common after V/GJ than V/A |
| Delayed gastric emptying | Especially with Roux-en-Y reconstruction + large gastric remnant |
| Dumping syndrome | Early (osmotic) and late (hypoglycemic) forms after vagotomy + drainage procedures |
| Afferent loop syndrome | After B-II reconstruction |
⚠️ These recent meta-analyses suggest EUS-GE is gaining ground as an alternative to both open/laparoscopic surgery and luminal stenting in carefully selected patients — a shift from what older textbook editions describe.
Give me pdf of this all information
ls -la /home/daytona/workspace/ 2>/dev/null || mkdir -p /home/daytona/workspace
mkdir -p /home/daytona/workspace/goo-pdf && ls /home/daytona/workspace/goo-pdf
~/goo-pdf/generate_goo_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
OUTPUT = "/home/daytona/workspace/goo-pdf/Gastric_Outlet_Obstruction.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=2*cm, leftMargin=2*cm,
topMargin=2.5*cm, bottomMargin=2.5*cm,
title="Gastric Outlet Obstruction – Surgical Overview",
author="Orris Medical"
)
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle(
'CustomTitle',
parent=styles['Title'],
fontSize=22,
textColor=colors.HexColor('#1a3a5c'),
spaceAfter=6,
fontName='Helvetica-Bold',
alignment=TA_CENTER
)
subtitle_style = ParagraphStyle(
'Subtitle',
parent=styles['Normal'],
fontSize=11,
textColor=colors.HexColor('#4a6fa5'),
spaceAfter=14,
alignment=TA_CENTER,
fontName='Helvetica'
)
h1_style = ParagraphStyle(
'H1',
parent=styles['Heading1'],
fontSize=14,
textColor=colors.white,
backColor=colors.HexColor('#1a3a5c'),
spaceBefore=14,
spaceAfter=6,
fontName='Helvetica-Bold',
leftIndent=-0.5*cm,
rightIndent=-0.5*cm,
borderPad=5
)
h2_style = ParagraphStyle(
'H2',
parent=styles['Heading2'],
fontSize=12,
textColor=colors.HexColor('#1a3a5c'),
spaceBefore=10,
spaceAfter=4,
fontName='Helvetica-Bold',
borderPad=2
)
h3_style = ParagraphStyle(
'H3',
parent=styles['Heading3'],
fontSize=11,
textColor=colors.HexColor('#2e6da4'),
spaceBefore=8,
spaceAfter=3,
fontName='Helvetica-BoldOblique'
)
body_style = ParagraphStyle(
'Body',
parent=styles['Normal'],
fontSize=10,
leading=15,
spaceAfter=6,
alignment=TA_JUSTIFY,
fontName='Helvetica'
)
bullet_style = ParagraphStyle(
'Bullet',
parent=body_style,
leftIndent=18,
bulletIndent=6,
spaceAfter=3
)
callout_style = ParagraphStyle(
'Callout',
parent=body_style,
backColor=colors.HexColor('#eaf3fb'),
borderColor=colors.HexColor('#2e6da4'),
borderWidth=1,
borderPad=6,
leftIndent=10,
rightIndent=10,
spaceAfter=8
)
warning_style = ParagraphStyle(
'Warning',
parent=body_style,
backColor=colors.HexColor('#fff8e1'),
borderColor=colors.HexColor('#f5a623'),
borderWidth=1,
borderPad=6,
leftIndent=10,
rightIndent=10,
spaceAfter=8
)
source_style = ParagraphStyle(
'Source',
parent=styles['Normal'],
fontSize=8,
textColor=colors.HexColor('#888888'),
spaceAfter=4,
fontName='Helvetica-Oblique'
)
def h1(text):
return Paragraph(f" {text}", h1_style)
def h2(text):
return Paragraph(text, h2_style)
def h3(text):
return Paragraph(text, h3_style)
def p(text):
return Paragraph(text, body_style)
def bp(text):
return Paragraph(f"• {text}", bullet_style)
def callout(text):
return Paragraph(text, callout_style)
def warn(text):
return Paragraph(f"⚠ {text}", warning_style)
def src(text):
return Paragraph(f"<i>Source: {text}</i>", source_style)
def hr():
return HRFlowable(width="100%", thickness=1, color=colors.HexColor('#cccccc'), spaceAfter=4, spaceBefore=4)
# Table helper
def make_table(data, col_widths=None, header_color='#1a3a5c'):
t = Table(data, colWidths=col_widths, repeatRows=1)
style = TableStyle([
('BACKGROUND', (0,0), (-1,0), colors.HexColor(header_color)),
('TEXTCOLOR', (0,0), (-1,0), colors.white),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,0), 9),
('FONTNAME', (0,1), (-1,-1), 'Helvetica'),
('FONTSIZE', (0,1), (-1,-1), 9),
('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, colors.HexColor('#f0f4fa')]),
('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#aaaaaa')),
('VALIGN', (0,0), (-1,-1), 'TOP'),
('LEFTPADDING', (0,0), (-1,-1), 6),
('RIGHTPADDING', (0,0), (-1,-1), 6),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('WORDWRAP', (0,0), (-1,-1), True),
])
t.setStyle(style)
return t
# ── Content ──────────────────────────────────────────────────────────────────
story = []
# Title block
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Gastric Outlet Obstruction", title_style))
story.append(Paragraph("A Comprehensive Surgical Reference", subtitle_style))
story.append(hr())
story.append(p("<i>Compiled from: Current Surgical Therapy 14e · Yamada's Textbook of Gastroenterology 7e · "
"Sleisenger & Fordtran's GI and Liver Disease · Harrison's Principles 22e · "
"Clinical GI Endoscopy 3e</i>"))
story.append(Spacer(1, 0.4*cm))
# ── 1. Definition ─────────────────────────────────────────────────────────────
story.append(h1("1. Definition & Overview"))
story.append(p(
"Gastric outlet obstruction (GOO) is a clinical syndrome resulting from any mechanical impediment to "
"gastric emptying at the level of the pylorus, antrum, or proximal duodenum. It is not a diagnosis "
"in itself but a manifestation of an underlying disease process."
))
# ── 2. Etiology ───────────────────────────────────────────────────────────────
story.append(h1("2. Etiology & Differential Diagnosis"))
story.append(p(
"Historically, peptic ulcer disease (PUD) accounted for approximately 90% of GOO cases. Today, PUD "
"accounts for only ~5% in high-income countries, while malignancy now constitutes 50–80% of cases. "
"In low- and medium-income countries, PUD-related GOO remains the dominant indication for surgical "
"intervention (50–60% of complicated ulcer surgery)."
))
etiology_data = [
["Cause", "Relative Frequency / Notes"],
["Peptic ulcer disease (DU / pyloric channel ulcers)", "~5% in high-HDI; still dominant in low-HDI countries"],
["Malignancy (gastric, pancreatic, duodenal, periampullary)", "50–80%; most common cause in Western practice"],
["Zollinger-Ellison syndrome", "GOO in ~10% of ZES patients"],
["Crohn disease", "Granulomatous narrowing of pylorus/duodenum"],
["Pancreatic pseudocyst / pancreatitis", "Extrinsic compression"],
["Tuberculosis", "Especially in endemic regions; may need full-thickness biopsy"],
["Caustic ingestion", "Fibrotic pyloric/duodenal stricture"],
["Duodenal webs / congenital strictures", "Congenital or post-inflammatory"],
["Bezoars", "Functional obstruction"],
["Gastric volvulus / paraesophageal hernia", "Relapsing obstruction; intermittent and spontaneously resolving"],
]
story.append(make_table(etiology_data, col_widths=[9*cm, 8*cm]))
story.append(Spacer(1, 0.3*cm))
# ── 3. Pathophysiology ────────────────────────────────────────────────────────
story.append(h1("3. Pathophysiology"))
story.append(h2("In PUD-related GOO:"))
story.append(bp("<b>Acute / reversible component:</b> Edema and pyloric spasm around an active pyloric channel or duodenal ulcer"))
story.append(bp("<b>Chronic / irreversible component:</b> Fibrosis, scarring, and gastric atony from repeated cycles of ulceration and healing"))
story.append(h2("Metabolic Consequence of High-Grade Obstruction"))
story.append(callout(
"<b>Hypokalemic Hypochloremic Metabolic Alkalosis</b><br/>"
"Mechanism: Repeated vomiting of gastric acid → loss of H⁺ and Cl⁻ → compensatory renal HCO₃⁻ "
"retention and K⁺ wasting. Obstruction is proximal to the ampulla of Vater, so vomitus is "
"<b>nonbilious</b>. This metabolic derangement MUST be corrected before any surgical intervention."
))
# ── 4. Clinical Features ──────────────────────────────────────────────────────
story.append(h1("4. Clinical Features"))
features = [
"Nausea and <b>nonbilious vomiting</b> — often of undigested food from hours or days prior",
"Epigastric distension and fullness",
"Early satiety",
"Weight loss and malnutrition",
"<b>Succussion splash</b> on abdominal auscultation (retained gastric contents)",
"Dehydration in high-grade or prolonged obstruction",
"Clinical features of the underlying etiology (e.g., jaundice with pancreatic cancer)",
]
for f in features:
story.append(bp(f))
# ── 5. Investigations ─────────────────────────────────────────────────────────
story.append(h1("5. Investigations"))
story.append(callout(
"<b>Initial Stabilization First:</b> Decompress stomach with large-bore NGT (reduces aspiration risk), "
"correct fluid and electrolyte imbalances (particularly hypokalemic hypochloremic alkalosis), "
"initiate IV PPIs. These steps are usually necessary <i>before</i> endoscopy or contrast studies."
))
story.append(h2("Investigations"))
invest_data = [
["Investigation", "Role & Notes"],
["EGD with biopsy", "Mandatory. Identifies intrinsic lesion, excludes malignancy, allows therapeutic intervention. Decompress/fast stomach first. Endoscopic biopsies ± EUS for deep/suspicious lesions."],
["CT abdomen (with contrast)", "Usually first imaging step. Identifies extrinsic compression, dilated stomach, nature of obstruction, metastatic disease."],
["Upper GI fluoroscopy (barium)", "Characterizes stricture geometry and length; complements endoscopy."],
["Endoscopic ultrasound (EUS)", "If malignancy suspected or EUS-guided therapy planned; superior for local staging."],
["Saline load test", "Historical: 750 mL saline via NGT; aspiration >400 mL at 30 min = mechanical obstruction. Residual <200 mL = resolution. Less used now."],
["Labs", "Electrolytes, CBC, LFTs, amylase. Serum gastrin if ZES suspected. ABG if alkalosis suspected."],
]
story.append(make_table(invest_data, col_widths=[5*cm, 12*cm]))
story.append(Spacer(1, 0.3*cm))
# ── 6. Management Overview ────────────────────────────────────────────────────
story.append(h1("6. General Management Principles"))
gm = [
"Decompress stomach (large-bore NGT)",
"Correct electrolyte and fluid abnormalities — particularly hypokalemic hypochloremic alkalosis",
"Nutritional support — IV nutrition if necessary; nasojejunal feeds once feasible",
"IV proton pump inhibitors — reduce gastric secretions",
"Identify the underlying etiology — guides definitive management",
"Multidisciplinary team involvement (surgery, gastroenterology, oncology if malignant)",
]
for g in gm:
story.append(bp(g))
# ── 7. Benign GOO (PUD) ───────────────────────────────────────────────────────
story.append(h1("7. Benign GOO — PUD-Related Management"))
story.append(h2("Non-operative / Endoscopic"))
story.append(bp("<b>H. pylori eradication</b> + NSAID cessation → most patients respond to acid suppression initially"))
story.append(bp("Full-dose oral PPIs long-term after obstruction resolves; may discontinue if H. pylori eradicated and antral deformity resolves"))
story.append(bp("<b>Endoscopic balloon dilation</b> may delay surgery for 1–2 years in ~50% of patients; most requiring hospitalization or repeated dilation will ultimately need surgery"))
story.append(Spacer(1, 0.2*cm))
story.append(h2("Surgical Options"))
story.append(h3("Option 1: Vagotomy + Antrectomy (V/A) — Gold Standard"))
story.append(p(
"V/A is the gold standard surgical procedure for obstructing duodenal ulcer. It provides the lowest "
"ulcer recurrence rate and confirms the benign diagnosis by resecting the obstruction."
))
va_data = [
["Aspect", "Details"],
["Advantages", "Lowest recurrence rate; confirms benign diagnosis by resecting obstruction; removes risk of missed cancer"],
["Disadvantages", "Operative mortality ~2%; higher technical complexity; difficult duodenal stump if ulcer penetrates posteriorly"],
["Reconstruction", "Antecolic isoperistaltic Billroth II gastrojejunostomy (afferent loop on greater curvature, efferent on lesser). Avoid Roux-en-Y with large gastric remnant → risk of marginal ulcer and delayed gastric emptying"],
["Key steps", "Truncal vagotomy first → antrectomy → B-II reconstruction"],
["Staple technique", "Chronically obstructed stomach is unusually thick-walled — use appropriately large staple cartridges to prevent dehiscence"],
["Obstruction", "Must be resected and included in specimen"],
["Prepyloric lesion", "Ensure distal staple line is truly distal to the pylorus — prevents retained antrum syndrome"],
["Difficult duodenum", "If obstruction is in the 2nd part of duodenum, consider HPB consultation; cancer must be excluded if obstruction site is left in situ"],
]
story.append(make_table(va_data, col_widths=[5*cm, 12*cm]))
story.append(Spacer(1, 0.3*cm))
story.append(h3("Option 2: Vagotomy + Gastrojejunostomy (V/GJ) — Good Alternative"))
story.append(p(
"V/GJ is a good alternative, particularly where laparoscopic surgery is planned or where the operative "
"risk of V/A is judged to be too high."
))
vgj_data = [
["Aspect", "Details"],
["Advantages", "Lower operative mortality; readily performed laparoscopically; reversible if dumping becomes intolerable"],
["Disadvantages", "Obstructing cancer may be missed (no resection of obstructing lesion); risk of marginal ulcer"],
["Technique", "Bilateral truncal or posterior truncal + anterior HSV vagotomy; loop gastrojejunostomy to dependent greater curvature (antecolic, isoperistaltic); 6–8 cm cleared of gastroepipolic branches for anastomosis site"],
["Follow-up", "Close clinical follow-up for 2 years mandatory; if not doing well clinically, re-explore and convert to distal gastrectomy including obstruction site"],
]
story.append(make_table(vgj_data, col_widths=[5*cm, 12*cm]))
story.append(Spacer(1, 0.3*cm))
story.append(h2("Comparison: V/A vs. V/GJ"))
comp_data = [
["", "Vagotomy + Antrectomy (V/A)", "Vagotomy + Gastrojejunostomy (V/GJ)"],
["Recurrence rate", "Lower", "Higher (marginal ulcer risk)"],
["Operative mortality", "~2%", "Lower"],
["Confirms benign diagnosis", "Yes (specimen sent)", "No (obstruction not resected)"],
["Laparoscopic", "Possible but complex", "Readily performed"],
["Reversible", "No", "Yes"],
["Cancer missed risk", "No", "Yes"],
["Standard", "Gold standard", "Acceptable alternative"],
]
story.append(make_table(comp_data, col_widths=[5.5*cm, 6*cm, 6*cm]))
story.append(Spacer(1, 0.3*cm))
# ── 8. Difficult Duodenal Stump ───────────────────────────────────────────────
story.append(h1("8. Management of the Difficult Duodenal Stump"))
story.append(p(
"If the ulcer has destroyed the posterior duodenal wall, standard stapled closure may not be possible. "
"This is one of the most feared complications in ulcer surgery — duodenal stump leak carries very high "
"operative mortality."
))
stump = [
"Sew anterior edge of the open duodenum to the proximal/distal 'lip' of the ulcer on the pancreas with interrupted sutures; ensure complete hemostasis in the ulcer bed",
"Test closure by placing NG tip at the ligament of Treitz (through GJ) and distending duodenum with air; add sutures as needed until air-tight",
"Cover closure with well-vascularized omentum held with 2–3 strategic sutures",
"Place multiple closed-suction drains in the right upper quadrant",
"<b>Duodenal decompression options:</b> (1) Retrograde tube via proximal jejunum [preferred]; (2) Lateral duodenostomy; (3) NG tube threaded through GJ into afferent limb and secured to nose",
"<b>Avoid:</b> Placing a large tube directly into the end of the duodenal stump — invariably leaks around it and should only be used if no other option exists",
"If secure closure seems impossible, avoid distal gastrectomy altogether and perform V/GJ instead",
]
for s in stump:
story.append(bp(s))
# ── 9. Malignant GOO ─────────────────────────────────────────────────────────
story.append(h1("9. Malignant GOO — Management"))
story.append(p(
"Malignant GOO is caused by pancreatic, periampullary, gastric, or duodenal cancer. Most patients "
"have advanced, unresectable disease at presentation. Management is palliative and should be "
"individualized based on expected survival, resectability, and performance status."
))
story.append(h2("A. Endoscopic SEMS (Self-Expandable Metal Stent)"))
sems = [
"~90% of patients can tolerate a soft or regular diet after successful SEMS placement",
"Uncovered SEMS preferred for tumor in-growth control; occlusion from in-growth can be managed with placement of a covered SEMS within the existing stent",
"<b>Critical:</b> Biliary stenting must be performed <i>before</i> duodenal stenting — biliary access is technically very difficult after a duodenal SEMS is in place",
"Outpatient or brief admission procedure; appropriate for patients with limited prognosis",
"Re-intervention for stent malfunction is feasible in most cases",
]
for s in sems:
story.append(bp(s))
story.append(Spacer(1, 0.2*cm))
story.append(h2("B. Surgical Gastrojejunostomy (GJ)"))
sgj = [
"Retrocolic or antecolic loop/Roux-en-Y gastrojejunostomy",
"Open or laparoscopic; laparoscopic approach allows more rapid initiation of systemic anticancer therapy",
"<b>Important:</b> Presence of a duodenal stent makes subsequent pancreaticoduodenectomy (Whipple procedure) technically significantly more difficult — avoid duodenal stenting in potentially resectable patients",
"More durable than SEMS for patients with longer expected survival",
"Prophylactic GJ at the time of open biliary bypass (for found-unresectable disease at laparotomy) is advisable even in asymptomatic patients",
]
for s in sgj:
story.append(bp(s))
story.append(Spacer(1, 0.2*cm))
story.append(h2("C. EUS-Guided Gastroenterostomy (EUS-GE)"))
story.append(p(
"An emerging technique where EUS guides creation of a gastroenteric anastomosis using a lumen-apposing "
"metal stent (LAMS). Highly effective for both benign and malignant GOO. Recent meta-analyses (2024–2026) "
"show comparable or superior outcomes to SEMS with lower reintervention rates, and comparable outcomes "
"to surgical GJ with potentially less morbidity. Further standardization is still required."
))
story.append(Spacer(1, 0.2*cm))
story.append(h2("Decision Framework for Malignant GOO (Pancreatic / Periampullary Cancer)"))
dec_data = [
["Clinical Scenario", "Preferred Approach"],
["Operable tumor, neoadjuvant therapy planned", "Laparoscopic/robotic gastrojejunostomy"],
["Advanced disease, limited expected survival", "Duodenal SEMS (outpatient, minimally invasive)"],
["Combined duodenal + distal bile duct obstruction, operable disease", "PTC for biliary decompression + laparoscopic GJ (avoid duodenal stent pre-operatively)"],
["Combined obstruction, advanced/palliative disease", "Duodenal SEMS ± biliary SEMS ± venting gastrostomy"],
["Found unresectable at laparotomy (open abdomen)", "Proceed with open biliary bypass ± prophylactic GJ"],
["Repeated SEMS occlusion, reasonable performance status", "Operative biliary/gastric bypass if technically feasible; PTC if best supportive care planned"],
]
story.append(make_table(dec_data, col_widths=[8*cm, 9*cm]))
story.append(Spacer(1, 0.3*cm))
story.append(warn(
"It is usually a mistake to persist with repeated endoscopic attempts at clearing a SEMS once "
"repetitive occlusions have begun to occur — consider operative bypass at that point."
))
# ── 10. Postoperative Management ─────────────────────────────────────────────
story.append(h1("10. Postoperative Management"))
post = [
"High-dose IV PPIs in the early postoperative period — may decrease rebleeding risk",
"Long-term PPI therapy if: chronic aspirin/NSAIDs required, anticoagulation needed, or H. pylori not eradicated",
"<b>Smoking cessation</b> — imperative; ulcer recurrence is almost inevitable after definitive surgery if patient continues to smoke",
"If NSAIDs are medically necessary post-op: consider selective COX-2 inhibitor + long-term PPI",
"Monitor for early rebleeding: upper endoscopy + CT angiography / standard arteriography",
"Patients treated with V/GJ for obstructing DU: mandatory close 2-year clinical follow-up to ensure no missed cancer",
"No evidence that transfusion triggers need to be increased after ulcer surgery",
]
for po in post:
story.append(bp(po))
# ── 11. Complications ─────────────────────────────────────────────────────────
story.append(h1("11. Complications"))
comp2_data = [
["Complication", "Comment & Management"],
["Duodenal stump leak", "Most feared; risk increased with difficult stump. Manage with drainage, duodenal decompression, IV nutrition, reoperation if generalized peritonitis develops."],
["Retained antrum syndrome", "Hypergastrinemia + marginal ulceration after B-II if antrum not completely resected. Ensure distal staple line is past pylorus."],
["Marginal ulcer", "More common after V/GJ than V/A. Treat with PPIs; may require reoperation."],
["Delayed gastric emptying", "Especially with Roux-en-Y reconstruction + large gastric remnant; prokinetics, NGT decompression."],
["Dumping syndrome", "Early (osmotic, 15–30 min post-meal) and late (reactive hypoglycemia, 2–3 hrs post-meal) forms after vagotomy + drainage procedures. Dietary modification first-line."],
["Afferent loop syndrome", "After Billroth II reconstruction — bilious vomiting, pain; may need surgical revision."],
["Alkaline reflux gastritis", "After B-II; bile reflux into gastric remnant; may require conversion to Roux-en-Y."],
["Anastomotic leak", "General surgical complication; managed with drainage and reoperation if necessary."],
]
story.append(make_table(comp2_data, col_widths=[5.5*cm, 11.5*cm]))
story.append(Spacer(1, 0.3*cm))
# ── 12. Recent Evidence ───────────────────────────────────────────────────────
story.append(h1("12. Recent Evidence (2024–2026)"))
story.append(p("Three high-quality systematic reviews/meta-analyses have recently updated the evidence base for GOO management:"))
ev_data = [
["PMID", "Authors / Journal", "Findings"],
["39465748", "Jain et al., Medicine, Oct 2024", "EUS-GE vs. duodenal stenting for malignant GOO: EUS-GE shows comparable or superior outcomes with lower reintervention rates than SEMS placement."],
["39761155", "Canakis et al., J Clin Gastroenterol, Feb 2026", "EUS-GE for benign GOO: Meta-analysis confirms efficacy; further standardization needed before routine adoption."],
["41558906", "Maida et al., Dig Liver Dis, Mar 2026", "EUS-GJ vs. surgical GJ for malignant GOO: EUS-GE is a competitive alternative to surgical gastrojejunostomy with comparable efficacy and potentially less morbidity."],
]
story.append(make_table(ev_data, col_widths=[2.5*cm, 5.5*cm, 9*cm]))
story.append(Spacer(1, 0.2*cm))
story.append(warn(
"These recent meta-analyses suggest EUS-GE is gaining ground as an alternative to both open/laparoscopic "
"surgery and luminal stenting in carefully selected patients — a shift from what older textbook editions "
"describe. Surgical trainees should be aware of this rapidly evolving landscape."
))
# ── 13. Key Surgical Takeaways ────────────────────────────────────────────────
story.append(h1("13. Key Surgical Takeaways"))
takeaways = [
"<b>V/A = gold standard</b> for benign obstructing duodenal ulcer; V/GJ is a good laparoscopic alternative with slightly higher recurrence risk",
"<b>Always biopsy and exclude malignancy</b> before committing to a benign ulcer repair — the differential must include pancreatic, duodenal, and pyloric channel cancer",
"<b>Duodenal stump management</b> is a critical technical challenge in Billroth II — have a bailout plan before starting the case",
"<b>Malignant GOO management</b> hinges on expected survival and resectability: short survival → SEMS; longer survival/operable → laparoscopic GJ",
"<b>Biliary obstruction must be addressed first</b> (PTC or biliary stent) before duodenal stenting in combined obstruction",
"<b>Electrolyte correction</b> (hypokalemic hypochloremic alkalosis) before any operative intervention is mandatory",
"<b>EUS-GE is emerging</b> as a third option alongside SEMS and surgery — know when to involve advanced endoscopists",
"Patients with <b>ZES</b> require dedicated work-up (fasting serum gastrin, secretin stimulation test, localization imaging) — GOO occurs in ~10%",
"In low/middle-income countries, <b>PUD remains the dominant cause</b> of GOO; H. pylori eradication and acid suppression are foundations of long-term management",
]
for t in takeaways:
story.append(bp(t))
# Footer note
story.append(Spacer(1, 0.5*cm))
story.append(hr())
story.append(src(
"Current Surgical Therapy 14e (Cameron & Cameron) · "
"Yamada's Textbook of Gastroenterology 7e · "
"Sleisenger & Fordtran's GI and Liver Disease · "
"Harrison's Principles of Internal Medicine 22e · "
"Clinical GI Endoscopy 3e"
))
story.append(p("<font size='8' color='#aaaaaa'>Generated by Orris Medical Assistant | May 2026 | For educational purposes only.</font>"))
# Build
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/goo-pdf && python generate_goo_pdf.py
Gastric Outlet Obstruction
PDF Document · PDF