Can you make presentation about 10 page for my seminar including pictures and main points about takotsubo cardiomyopathy and drug induced hepatitis as rare complications of systemic lupus erythematosus .
takotsubo cardiomyopathy apical ballooning echocardiogram

Two diagnostic images consisting of an apical four-chamber (A4C) view echocardiogram demonstrating the classic visual features of Takotsubo Cardiomyopathy (TTCM), also known as Stress-Induced Cardiomyopathy. The primary finding is apical ballooning of the left ventricle (LV), characterized by a distinctive rounded, bulbous appearance of the apex compared to the narrower basal segments. Blue arrows in both the standard and magnified views point to the apical region, highlighting apical hypokinesia and akinesia, where the myocardial wall exhibits reduced or absent inward movement during systole. The contrast between the hyperdynamic basal contraction and the akinetic, 'ballooned' apex is a hallmark of this condition. The image on the left includes a volumetric trace of the left atrium, while the image on the right provides a detailed, expanded view of the LV apical pathology. This echocardiographic finding is essential for differentiating stress-induced cardiomyopathy from obstructive coronary artery disease in clinical practice.

This diagnostic image is a transthoracic echocardiogram in an apical four-chamber view, demonstrating the hallmark signs of Takotsubo cardiomyopathy (stress-induced cardiomyopathy). The visualization shows significant left ventricular apical ballooning, where the distal portion of the left ventricle appears dilated and rounded compared to the hypercontractile basal segments. The myocardium exhibits varying echogenicity, with relatively hypoechoic blood-filled chambers and more echogenic myocardial walls. The apical region demonstrates dyskinesia or akinesia, characterized by a lack of systolic wall thickening and outward expansion during the cardiac cycle. This morphological pattern creates a shape resembling a Japanese octopus trap (takotsubo), which is a key educational feature for identifying this syndrome. Clinical significance includes severe systolic dysfunction, often associated with ST-elevation on ECG despite clear coronary arteries. The image serves as a classic educational example of regional wall motion abnormalities that do not follow a single coronary artery distribution.

A diagnostic 2D echocardiogram image in an apical view, showing a sepia-toned cross-section of the human heart. The primary finding is characteristic of Takotsubo Cardiomyopathy (TCM), specifically demonstrating apical ballooning of the left ventricle (LV). The image displays a distinct morphological abnormality where the apical and mid-ventricular regions are dilated and rounded, creating a shape reminiscent of a Japanese octopus trap ('tako-tsubo'). In contrast, the basal segments of the left ventricle appear relatively preserved in their diameter. This visual pattern represents regional wall motion abnormalities, typically associated with apical akinesis or dyskinesis despite the absence of obstructive coronary artery disease. This diagnostic image is essential for educating medical professionals on the pathognomonic visual signs of 'Broken Heart Syndrome,' emphasizing the disparity between hypercontractile basal segments and the ballooned, non-contractile apex.
systemic lupus erythematosus SLE clinical manifestations

Two-panel clinical photograph illustrating dermatological manifestations of systemic lupus erythematosus (SLE) in a 20-year-old female. Image A presents a frontal view of the patient's face showing a classic malar or 'butterfly' rash. This is characterized by symmetric, erythematous, non-blanching patches across the malar eminences (cheeks) and bridge of the nose. Notably, there is distinct nasolabial sparing, a hallmark feature that differentiates this from other facial dermatoses like seborrheic dermatitis. Image B displays the patient's posterior trunk (back), exhibiting multiple discrete, erythematous, circular to oval maculopapular lesions. These lesions are scattered across the upper back and flank areas, appearing as distinct spots against otherwise clear skin, in contrast to the diffuse confluent redness on the face. These clinical findings are visually representative of acute cutaneous lupus erythematosus flares. The presentation is contextually associated with multisystem involvement, including pericarditis and hematologic abnormalities.

Two-panel clinical photograph (1A and 1B) illustrating cutaneous manifestations of Systemic Lupus Erythematosus (SLE). Image 1A shows a frontal view of a patient's face with a prominent erythematous malar rash extending across the bridge of the nose and cheeks. The rash demonstrates noticeable surface scaling and a characteristic sparing of the nasolabial folds, which is a classic diagnostic feature of the 'butterfly rash' in SLE. Image 1B displays the patient's posterior trunk (back), showing multiple scattered discoid-shaped lesions. These cutaneous lesions are erythematous with varying degrees of heaped-up, adherent scales on their surfaces, consistent with discoid lupus erythematosus (DLE) features. The visual presentation highlights key dermatologic findings used in the diagnosis and classification of autoimmune connective tissue diseases, focusing on morphology, scaling, and anatomical distribution.

This composite of clinical photographs illustrates multisystemic manifestations of Systemic Lupus Erythematosus (SLE) in a single patient. Panel A displays the head and neck, showing erythematous maculopapular eruptions distributed across the forehead and concentrated densely on the anterior neck and submental region. Panel B focuses on the bilateral lower extremities, revealing scattered, non-blanching purpuric lesions of varying diameters on the ankles and distal shins, characteristic of vasculitic involvement. Panel C provides an intraoral view showing significant mucosal involvement, including a large, deep ulceration on the hard palate and visible hemorrhage from the oral mucosa and tongue surface. Collectively, these images demonstrate the mucocutaneous and vascular signs (purpura, oral ulcers, and malar-like eruptions) that serve as diagnostic criteria for high-activity systemic autoimmune disease, particularly class IV/V lupus nephritis as described in the accompanying clinical context.
drug induced liver injury hepatitis histology

This composite medical image presents a comparative study of liver pathology across four experimental groups (1: Control, 2: Drug, 3: Con A, 4: Con A + Drug), utilizing both macroscopic photographs and microscopic histology. The left panel shows clinical photographs of harvested livers. Groups 1, 2, and 4 exhibit normal morphology with smooth, glistening surfaces and uniform reddish-brown coloration. In contrast, group 3 (Con A-induced injury) displays gross pathological changes, including a congested deep red color, uneven texture, and surface nodules. The right panel displays light microscopy images of liver sections stained with Hematoxylin and Eosin (H&E) at 200x magnification. Histological analysis of group 3 reveals significant hepatotoxicity characterized by massive cell death (indicated by an arrow), reduced cellular density, and inflammatory cellular infiltration. Sections from groups 1, 2, and 4 show preserved hepatic architecture, normal hepatocyte density, and minimal inflammation. This visual comparison illustrates the protective effect of a pharmacological agent against Con A-induced hepatitis and acute liver injury by demonstrating the preservation of both gross organ morphology and microscopic cellular structure.

Light microscopic liver histology from a biopsy in acute hepatitis B shows portal areas (portal triads) with dense mononuclear inflammatory infiltrates, predominantly T lymphocytes, often with plasma cells. Inflammation extends from the portal tract into adjacent parenchyma, producing interface activity and mild lobular disarray. Hepatocytes exhibit cytoplasmic ballooning degeneration and scattered apoptotic bodies (Councilman bodies) in degenerating hepatocytes. Focal hepatocellular necrosis may be present, with preserved overall lobular architecture in early disease. Bile ducts within portal tracts are typically preserved; there is no marked cholestasis or fibrotic scarring at this stage. The pattern is compatible with acute viral hepatitis, most commonly hepatitis B, though similar features can appear in other viral or drug-induced liver injuries. Correlation with serology (HBsAg positivity, anti-HBc IgM, HBV DNA) supports the diagnosis. Clinically, the histology explains transaminase elevation and jaundice associated with acute hepatic injury. Diagnostic significance lies in recognizing portal-centric inflammation, interface hepatitis, and hepatocellular injury as a viral hepatitis pattern; differential diagnoses include acute hepatitis A and C, HDV co-infection, drug-induced liver injury, or autoimmune hepatitis. This image is valuable for medical education, pathology teaching, and radiology–pathology correlation discussions. These features emphasize portal inflammation and hepatocyte injury as diagnostic hallmarks for education purposes.
lupus butterfly malar rash face

A clinical photograph of a patient's face demonstrating dermatological and mucosal manifestations of Systemic Lupus Erythematosus (SLE). A classic malar rash (butterfly rash) is present, characterized by symmetric, erythematous-to-violaceous patchy lesions over the malar eminences and the bridge of the nose, notably sparing the nasolabial folds. Additionally, the perioral region exhibits significant erythema and mucosal involvement. The lips show evidence of hemorrhagic lesions, with visible blood crusting and a small fissure on the lower lip, suggestive of vasculitis or active systemic inflammation. These visual findings are key diagnostic indicators for SLE, particularly when associated with hematological abnormalities such as thrombocytopenia. The photograph provides a clear example of cutaneous lupus manifestations for clinical diagnosis and medical education.

This clinical photograph displays a classic malar rash, also known as a butterfly rash, on a patient's face. The rash is characterized by fixed, erythematous (reddened) macules and plaques distributed symmetrically across the nasal bridge and the malar eminences (cheeks). A key diagnostic feature visible in this image is the sparing of the nasolabial folds, which helps distinguish this clinical sign from other facial eruptions such as seborrheic dermatitis. The texture of the rash appears slightly elevated in some areas, suggesting a papular component alongside the macular erythema. This visual finding is a primary American College of Rheumatology (ACR) criterion for the diagnosis of systemic lupus erythematosus (SLE). The clinical photograph is set against a dark background with the patient's eyes obscured for privacy, focusing clinical attention on the mid-facial cutaneous manifestations of autoimmune connective tissue disease.
takotsubo stress cardiomyopathy ECG ST elevation

A multi-panel clinical figure documenting a case of Takotsubo Cardiomyopathy (Stress-Induced Cardiomyopathy). Panel (a) shows a 12-lead electrocardiogram (ECG) with prominent ST-segment elevation in the anterior precordial leads (V1–V6), mimicking an acute myocardial infarction. Panels (b) and (c) are coronary angiograms showing patent, normal right and left coronary arteries, respectively, without significant obstructive atherosclerosis or stenosis. Panels (d) and (e) present contrast left ventriculography in the right anterior oblique (RAO) projection. Panel (d) represents end-diastole with a relatively normal ventricular volume. Panel (e) represents end-systole, demonstrating the hallmark 'apical ballooning' pattern characterized by apical akinesia and compensatory hyperkinesis of the basal segments. The combined findings—ischemic ECG changes, absence of obstructive coronary artery disease, and characteristic regional wall motion abnormalities—are classic for Takotsubo syndrome, illustrating a clinical scenario often presenting as an acute coronary syndrome mimic.

This diagnostic image is a 12-lead electrocardiogram (ECG) demonstrating findings characteristic of Takotsubo syndrome (stress-induced cardiomyopathy). The rhythm shows sinus tachycardia. Key pathological features include significant ST-segment elevation (STE) in the inferior leads (II, III, and aVF) and the anterolateral precordial leads (V4, V5, and V6). Prominent T waves are visible in these same distributions. Reciprocal ST-segment depression is observed in leads aVR and V1. While these visual markers mimic an acute myocardial infarction (STEMI), in the clinical context of Takotsubo syndrome, they represent diffuse ventricular dysfunction rather than acute coronary artery occlusion. The widespread distribution of ST changes—spanning both inferior and anterior territories—is a hallmark used to differentiate this condition from localized ischemia involving a single coronary artery branch. This ECG serves as an important educational example of non-ischemic ST-segment elevation (NISTE).
lupus nephritis renal biopsy pathology

A multi-panel figure containing light microscopy of renal tissue and clinical photographs of dermatological lesions. Panels A and B display renal biopsy specimens at 200x magnification. Image A (Hematoxylin and Eosin stain) shows a glomerulus with mild-to-moderate hypercellularity and mesangial matrix expansion, consistent with lupus nephritis. Image B (Periodic Acid-Schiff stain) highlights the basement membranes and mesangium, demonstrating immune complex deposits in the subendothelial and mesangial regions. Surrounding renal tubules show varying degrees of epithelial changes. Panels C and D are clinical photographs of a patient with systemic lupus erythematosus showing a severe, clustered vesicular rash on the left hypochondrium (C) and left back (D). The lesions exhibit significant confluence, dark necrotic or hemorrhagic centers, and evidence of ruptured vesicles. The affected areas are demarcated by black ink for clinical monitoring, suggesting a dermatomal distribution characteristic of herpes zoster (shingles) occurring in an immunocompromised state. These images collectively illustrate the renal manifestations of SLE and a subsequent secondary viral opportunistic infection.

This is a histopathologic renal biopsy section demonstrating a glomerulus with marked tuft hypercellularity and eosinophilic, amorphous intraluminal material within capillary loops, compatible with fibrinoid necrosis or immune complex deposition. The surrounding cortex shows scattered inflammatory cells and mesangial proliferation. Hematoxylin and eosin staining highlights blue-nuclei inflammatory cells against pink extracellular matrix and pink eosinophilic material in the capillary walls, indicating endothelial injury and glomerular inflammation. The image captures features consistent with immune-mediated glomerulonephritis, with potential progression toward crescent formation in advanced disease. Diagnostic features include capillary wall damage, mesangial expansion, and periglomerular inflammatory infiltrates. Clinically, this pattern warrants differentiation among rapidly progressive GN, post-infectious immune complex GN, ANCA-associated vasculitis, anti-GBM disease, and lupus nephritis. Relevance to nephrology includes prognosis assessment, therapeutic decisions, and correlation with serology (complements, ANCA, anti-GBM, ANA). This image is valuable for education on glomerular pathology, differential diagnosis, and histologic correlates of renal inflammation. Correlative features may include basement membrane irregularity, endocapillary proliferation, and tubulointerstitial changes that influence prognosis and treatment planning. In teaching sets, this image demonstrates how immune injury manifests as capillary wall thickening, fibrin deposition, and cellular infiltrates within Bowman’s space, guiding students toward systematic differential reasoning and pattern recognition in nephopathology education.
mkdir -p /tmp/workspace/sle-presentation && ls /tmp/workspace/sle-presentation/
~/sle-presentation/build_pptx.py
import json, subprocess, base64, sys
from io import BytesIO
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.oxml.ns import qn
from lxml import etree
# ── Colour palette ──────────────────────────────────────────────────────────
NAVY = RGBColor(0x0D, 0x2B, 0x55) # dark navy for header bg
CRIMSON = RGBColor(0x8B, 0x00, 0x00) # accent (section titles)
GOLD = RGBColor(0xD4, 0xAF, 0x37) # accent line / bullets
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
LIGHTBG = RGBColor(0xF2, 0xF5, 0xFA) # slide background
DARKTEXT = RGBColor(0x1A, 0x1A, 0x2E)
MIDGRAY = RGBColor(0x55, 0x60, 0x6E)
W = Inches(13.333)
H = Inches(7.5)
# ── Image URLs ───────────────────────────────────────────────────────────────
IMG_URLS = {
"sle_face": "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_0b4e1b51b007615806cc3a1d6dcf8520d34e446c5f6904a8048b957ad3e3a70a.jpg",
"sle_multi": "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_e782056bb4615432c007d560cd2326038aa3e28a02388508e84953189b6d5ac3.jpg",
"tako_echo": "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_c6021993840345b8856726d8526734bbd273e014a562a1a7c11bf144d093da75.jpg",
"tako_ecg": "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_0215bbe75200a3e20ef87ffd2dffddbb64ce66a582611f4f1ceced32c73129d4.jpg",
"liver_histo": "https://cdn.orris.care/cdss_images/Pathology_1760053632503_4062ab08-f73f-4e90-9fa7-537d181d72e6.jpg",
"lupus_nephritis":"https://cdn.orris.care/cdss_images/pmc_clinical_VQA_293e2ec74f178f4572ee75008652e5274d8755267785968004b05a2cbcbc2928.jpg",
"tako_echo2": "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_3686bf213aa597be273ba99a1a7b35807e10ae26d07fa6eb851daceeda686850.jpg",
}
print("Downloading images …")
result = json.loads(subprocess.check_output(
["python", "/tmp/skills/shared/scripts/fetch_images.py"] + list(IMG_URLS.values()),
timeout=60
))
images = {}
for key, item in zip(IMG_URLS.keys(), result):
if item.get("base64"):
raw = base64.b64decode(item["base64"].split(",", 1)[-1])
images[key] = BytesIO(raw)
print(f" OK {key}")
else:
images[key] = None
print(f" FAIL {key}")
# ── Helpers ───────────────────────────────────────────────────────────────────
prs = Presentation()
prs.slide_width = W
prs.slide_height = H
blank = prs.slide_layouts[6]
def add_slide():
return prs.slides.add_slide(blank)
def bg(slide, color):
"""Fill slide background with a solid colour."""
background = slide.background
fill = background.fill
fill.solid()
fill.fore_color.rgb = color
def rect(slide, left, top, width, height, fill_color=None, line_color=None, line_width=Pt(0)):
shape = slide.shapes.add_shape(1, left, top, width, height) # MSO_SHAPE_TYPE.RECTANGLE = 1
if fill_color:
shape.fill.solid()
shape.fill.fore_color.rgb = fill_color
else:
shape.fill.background()
if line_color:
shape.line.color.rgb = line_color
shape.line.width = line_width
else:
shape.line.fill.background()
return shape
def txbox(slide, text, left, top, width, height,
font_name="Calibri", size=18, bold=False, italic=False,
color=DARKTEXT, align=PP_ALIGN.LEFT, wrap=True,
v_anchor=MSO_ANCHOR.TOP):
tb = slide.shapes.add_textbox(left, top, width, height)
tf = tb.text_frame
tf.word_wrap = wrap
tf.vertical_anchor = v_anchor
tf.margin_left = 0; tf.margin_right = 0
tf.margin_top = Pt(2); tf.margin_bottom = 0
p = tf.paragraphs[0]
p.alignment = align
r = p.add_run()
r.text = text
r.font.name = font_name
r.font.size = Pt(size)
r.font.bold = bold
r.font.italic = italic
r.font.color.rgb = color
return tb
def bullets(slide, items, left, top, width, height,
font_name="Calibri", size=16, color=DARKTEXT,
bullet_color=GOLD, spacing_after=Pt(6)):
tb = slide.shapes.add_textbox(left, top, width, height)
tf = tb.text_frame
tf.word_wrap = True
tf.margin_left = Pt(4); tf.margin_right = 0
tf.margin_top = Pt(2); tf.margin_bottom = 0
first = True
for item in items:
if first:
p = tf.paragraphs[0]; first = False
else:
p = tf.add_paragraph()
p.space_after = spacing_after
r = p.add_run()
r.text = f"\u2022 {item}"
r.font.name = font_name
r.font.size = Pt(size)
r.font.color.rgb = color
return tb
def add_image(slide, img_bytes, left, top, width, height=None):
if img_bytes is None:
return
img_bytes.seek(0)
try:
if height:
slide.shapes.add_picture(img_bytes, left, top, width, height)
else:
slide.shapes.add_picture(img_bytes, left, top, width)
except Exception as e:
print(f" Image error: {e}")
def header_bar(slide, title, subtitle=None):
"""Dark navy header bar at top."""
rect(slide, 0, 0, W, Inches(1.3), fill_color=NAVY)
# gold accent line
rect(slide, 0, Inches(1.3), W, Pt(4), fill_color=GOLD)
txbox(slide, title,
Inches(0.35), Inches(0.08), Inches(12.5), Inches(0.75),
font_name="Calibri", size=30, bold=True, color=WHITE)
if subtitle:
txbox(slide, subtitle,
Inches(0.35), Inches(0.82), Inches(12.5), Inches(0.45),
font_name="Calibri", size=16, italic=True, color=RGBColor(0xB0, 0xC4, 0xDE))
def footer(slide, text="Rare Complications of SLE | Seminar Presentation 2026"):
rect(slide, 0, H - Inches(0.35), W, Inches(0.35), fill_color=NAVY)
txbox(slide, text,
Inches(0.3), H - Inches(0.33), Inches(12.5), Inches(0.32),
size=10, color=RGBColor(0xB0, 0xC4, 0xDE), align=PP_ALIGN.CENTER)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 1 – Title slide
# ════════════════════════════════════════════════════════════════════════════
s = add_slide()
bg(s, LIGHTBG)
# Full-width navy top band
rect(s, 0, 0, W, Inches(2.0), fill_color=NAVY)
rect(s, 0, Inches(2.0), W, Pt(6), fill_color=GOLD)
txbox(s, "Rare Complications of\nSystemic Lupus Erythematosus",
Inches(0.5), Inches(0.15), Inches(8.5), Inches(1.6),
size=34, bold=True, color=WHITE, align=PP_ALIGN.LEFT)
# Subtitle box
rect(s, Inches(0.5), Inches(2.3), Inches(8.5), Inches(1.6), fill_color=NAVY)
txbox(s, "Takotsubo Cardiomyopathy | Drug-Induced Hepatitis",
Inches(0.6), Inches(2.35), Inches(8.3), Inches(0.65),
size=20, bold=True, color=GOLD, align=PP_ALIGN.LEFT)
txbox(s, "A Seminar Presentation on Two Underrecognized Manifestations\nof a Systemic Autoimmune Disease",
Inches(0.6), Inches(2.95), Inches(8.3), Inches(0.85),
size=15, italic=True, color=WHITE, align=PP_ALIGN.LEFT)
# Gold decorative lines
for y_off in [Inches(4.2), Inches(4.3)]:
rect(s, Inches(0.5), y_off, Inches(3.0), Pt(2), fill_color=GOLD)
txbox(s, "Prepared for Seminar | 2026",
Inches(0.5), Inches(4.5), Inches(5.0), Inches(0.4),
size=13, color=MIDGRAY)
# SLE face image on right
if images["sle_face"]:
add_image(s, images["sle_face"], Inches(9.5), Inches(0.5), Inches(3.5), Inches(5.5))
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 2 – SLE Overview
# ════════════════════════════════════════════════════════════════════════════
s = add_slide()
bg(s, LIGHTBG)
header_bar(s, "Systemic Lupus Erythematosus (SLE)", "Overview & Epidemiology")
# Left column
bullets(s, [
"Chronic, multisystem autoimmune disease driven by loss of immune tolerance to self-antigens",
"Prevalence: 20–150/100,000; Female:Male ratio ~9:1",
"Peak onset: 15–45 years (reproductive age)",
"Pathogenesis: immune complex deposition, complement activation, end-organ inflammation",
"Hallmark: positive ANA (>95% of patients)",
"SLICC 2012 / EULAR-ACR 2019 classification criteria used for diagnosis",
], Inches(0.4), Inches(1.5), Inches(6.5), Inches(5.2), size=15)
# Right: multi-manifestation image
if images["sle_multi"]:
add_image(s, images["sle_multi"], Inches(7.2), Inches(1.5), Inches(5.6), Inches(4.2))
txbox(s, "Multisystem manifestations of SLE: malar rash,\noral ulcers, vasculitic purpura",
Inches(7.2), Inches(5.7), Inches(5.6), Inches(0.5),
size=10, italic=True, color=MIDGRAY, align=PP_ALIGN.CENTER)
# Key organs box
rect(s, Inches(0.4), Inches(6.45), Inches(6.5), Inches(0.7), fill_color=NAVY)
txbox(s, "Organs commonly affected: Skin • Kidneys • Joints • CNS • Heart • Lungs • Liver",
Inches(0.5), Inches(6.5), Inches(6.3), Inches(0.55),
size=13, bold=True, color=WHITE)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 3 – Cardiac Manifestations of SLE (context slide)
# ════════════════════════════════════════════════════════════════════════════
s = add_slide()
bg(s, LIGHTBG)
header_bar(s, "Cardiac Manifestations of SLE", "Setting the Stage for Takotsubo")
# Two-column layout
bullets(s, [
"Pericarditis (most common cardiac manifestation, ~25%)",
"Myocarditis (5–10%): inflammatory cardiomyopathy",
"Libman-Sacks endocarditis: sterile verrucous vegetations on mitral valve",
"Coronary artery disease: accelerated atherosclerosis",
"Pulmonary hypertension (5–14%)",
"Conduction abnormalities & arrhythmias",
"Cardiomyopathy — including Takotsubo (stress-induced)",
], Inches(0.4), Inches(1.5), Inches(6.8), Inches(5.2), size=15)
rect(s, Inches(7.3), Inches(1.5), Inches(5.6), Inches(4.0), fill_color=RGBColor(0xE8, 0xEF, 0xF8))
txbox(s, "Why Does the SLE Heart Suffer?",
Inches(7.4), Inches(1.55), Inches(5.4), Inches(0.5),
size=14, bold=True, color=NAVY)
bullets(s, [
"Immune complex deposition",
"Complement-mediated inflammation",
"Antiphospholipid antibodies (APS)",
"Cytokine storm: IL-1, IL-6, TNF-\u03b1",
"Corticosteroid & NSAID toxicity",
"Autonomic nervous system dysregulation",
], Inches(7.4), Inches(2.1), Inches(5.3), Inches(3.2), size=13, color=DARKTEXT)
if images["lupus_nephritis"]:
add_image(s, images["lupus_nephritis"], Inches(7.3), Inches(5.55), Inches(5.6), Inches(1.6))
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 4 – Takotsubo: Introduction & Pathogenesis
# ════════════════════════════════════════════════════════════════════════════
s = add_slide()
bg(s, LIGHTBG)
header_bar(s, "Takotsubo Cardiomyopathy", "Stress-Induced / Broken Heart Syndrome")
bullets(s, [
"Aka stress-induced cardiomyopathy or 'broken heart syndrome'",
"Transient left ventricular dysfunction with apical ballooning",
"~90% occur in post-menopausal women",
"Triggered by: intense emotional or physical stressors",
"In SLE: disease flares, cytokine surges & autonomic dysfunction act as triggers",
], Inches(0.4), Inches(1.5), Inches(6.3), Inches(3.0), size=15)
# Pathogenesis box
rect(s, Inches(0.4), Inches(4.55), Inches(6.3), Inches(2.5), fill_color=RGBColor(0xE8, 0xEF, 0xF8))
txbox(s, "Pathogenesis",
Inches(0.5), Inches(4.6), Inches(6.0), Inches(0.45),
size=15, bold=True, color=NAVY)
bullets(s, [
"Acute surge of catecholamines (adrenaline/noradrenaline)",
"Heterogeneous autonomic innervation: apex > base \u2192 differential stunning",
"Diffuse microvascular spasm & direct catecholamine cardiotoxicity",
"Result: apical akinesia + basal hyperkinesis (octopus-trap shape)",
], Inches(0.5), Inches(5.1), Inches(6.1), Inches(1.9), size=13, color=DARKTEXT)
# Echo image
if images["tako_echo"]:
add_image(s, images["tako_echo"], Inches(7.0), Inches(1.4), Inches(6.0), Inches(4.5))
txbox(s, "Echocardiogram: classic apical ballooning (A4C view)",
Inches(7.0), Inches(5.9), Inches(6.0), Inches(0.45),
size=10, italic=True, color=MIDGRAY, align=PP_ALIGN.CENTER)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 5 – Takotsubo: Clinical Features, Diagnosis & Management
# ════════════════════════════════════════════════════════════════════════════
s = add_slide()
bg(s, LIGHTBG)
header_bar(s, "Takotsubo Cardiomyopathy", "Clinical Features, Diagnosis & Management")
# Clinical features
txbox(s, "Clinical Presentation",
Inches(0.4), Inches(1.45), Inches(6.0), Inches(0.4),
size=15, bold=True, color=CRIMSON)
bullets(s, [
"Acute chest pain, dyspnoea, pulmonary oedema",
"ECG: ST-elevation mimicking STEMI (esp. V1-V6)",
"Troponin mildly elevated (lower than STEMI)",
"Coronary angiography: NO obstructive CAD",
"LV dysfunction extends beyond single coronary territory",
], Inches(0.4), Inches(1.85), Inches(6.0), Inches(2.2), size=14)
# Diagnosis criteria
txbox(s, "InterTAK Diagnostic Criteria (key points)",
Inches(0.4), Inches(4.1), Inches(6.0), Inches(0.4),
size=14, bold=True, color=CRIMSON)
bullets(s, [
"Transient LV wall motion abnormality (apical / mid-ventricular)",
"Absence of obstructive CAD or plaque rupture on angiography",
"New ECG changes (ST elevation, T-wave inversion, QTc prolongation)",
"Recovery within days to 3 months",
], Inches(0.4), Inches(4.5), Inches(6.0), Inches(2.6), size=13)
# Management box
rect(s, Inches(6.7), Inches(1.45), Inches(6.2), Inches(2.8), fill_color=NAVY)
txbox(s, "Management",
Inches(6.8), Inches(1.5), Inches(5.9), Inches(0.4),
size=15, bold=True, color=GOLD)
bullets(s, [
"Supportive: IV fluids, diuretics for pulmonary oedema",
"Nitrates (cautious — avoid if LVOTO present)",
"Combined \u03b1+\u03b2 blockers preferred over selective \u03b2-blockade",
"Anticoagulation if LV thrombus or low EF",
"IABP for cardiogenic shock (if no LVOTO)",
"Prognosis: generally good; LV recovery in days–weeks",
"Recurrence: ~10% (rate ~2%/year)",
], Inches(6.8), Inches(1.95), Inches(5.9), Inches(2.2), size=12, color=WHITE)
# ECG image
if images["tako_ecg"]:
add_image(s, images["tako_ecg"], Inches(6.7), Inches(4.35), Inches(6.2), Inches(2.7))
txbox(s, "ECG & angiography in Takotsubo: ST elevation + normal coronaries",
Inches(6.7), Inches(7.05), Inches(6.2), Inches(0.3),
size=9, italic=True, color=MIDGRAY, align=PP_ALIGN.CENTER)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 6 – Takotsubo in SLE: The Connection
# ════════════════════════════════════════════════════════════════════════════
s = add_slide()
bg(s, LIGHTBG)
header_bar(s, "Takotsubo Cardiomyopathy in SLE", "Why Lupus Patients are Predisposed")
# Left
bullets(s, [
"SLE disease flares trigger catecholamine surges via neuro-immune axis",
"Autonomic neuropathy in SLE alters sympathetic cardiac innervation",
"Antiphospholipid antibodies (APS): microvascular spasm and thrombosis",
"High-dose corticosteroid therapy \u2192 cardiovascular stress response",
"Case series: Takotsubo reported during lupus flares & intensive immunosuppression",
"Glucocorticoid-induced neuropsychiatric SLE may potentiate emotional triggers",
], Inches(0.4), Inches(1.5), Inches(6.3), Inches(4.0), size=15)
rect(s, Inches(0.4), Inches(5.6), Inches(6.3), Inches(1.5), fill_color=RGBColor(0xFF, 0xF5, 0xCC))
txbox(s, "Key Diagnostic Challenge",
Inches(0.5), Inches(5.65), Inches(6.0), Inches(0.4),
size=13, bold=True, color=CRIMSON)
txbox(s, "In SLE patients with chest pain and ST changes, ALWAYS consider Takotsubo alongside STEMI, myocarditis, and Libman-Sacks endocarditis. Urgent echocardiography and coronary angiography are essential.",
Inches(0.5), Inches(6.05), Inches(6.1), Inches(0.95),
size=12, italic=True, color=DARKTEXT, wrap=True)
# Echo2
if images["tako_echo2"]:
add_image(s, images["tako_echo2"], Inches(7.0), Inches(1.45), Inches(5.9), Inches(5.3))
txbox(s, "Echocardiographic apical ballooning pattern in Takotsubo",
Inches(7.0), Inches(6.75), Inches(5.9), Inches(0.45),
size=10, italic=True, color=MIDGRAY, align=PP_ALIGN.CENTER)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 7 – Liver in SLE: Overview
# ════════════════════════════════════════════════════════════════════════════
s = add_slide()
bg(s, LIGHTBG)
header_bar(s, "Hepatic Involvement in SLE", "How Common and What Causes It?")
bullets(s, [
"Liver enzyme abnormalities occur in up to 60% of SLE patients at some point",
"Clinically significant liver disease is RARELY a direct SLE manifestation",
"Must always exclude: medications, infections (HBV/HCV/CMV/EBV), fatty liver",
"Main drug culprits in SLE: NSAIDs, methotrexate, azathioprine, hydroxychloroquine",
"Corticosteroid use \u2192 hepatic steatosis (obesity, diabetes as co-factors)",
],
Inches(0.4), Inches(1.5), Inches(12.5), Inches(2.8), size=15)
# Two info boxes side by side
rect(s, Inches(0.4), Inches(4.3), Inches(6.0), Inches(2.7), fill_color=RGBColor(0xE8, 0xEF, 0xF8))
txbox(s, "Lupus Hepatitis (Direct SLE Hepatitis)",
Inches(0.5), Inches(4.35), Inches(5.8), Inches(0.45),
size=13, bold=True, color=NAVY)
bullets(s, [
"Lobular inflammation with paucity of lymphoid infiltrates",
"ANA positive; anti-smooth muscle Ab less common",
"Distinct from autoimmune hepatitis (AIH)",
"AIH: periportal (interface) inflammation, dense lymphoid infiltrates",
"Rarely progresses to cirrhosis",
], Inches(0.5), Inches(4.85), Inches(5.8), Inches(2.1), size=12, color=DARKTEXT)
rect(s, Inches(6.8), Inches(4.3), Inches(6.1), Inches(2.7), fill_color=RGBColor(0xFF, 0xF5, 0xCC))
txbox(s, "Other Hepatic Complications of SLE",
Inches(6.9), Inches(4.35), Inches(5.9), Inches(0.45),
size=13, bold=True, color=CRIMSON)
bullets(s, [
"Budd-Chiari syndrome (hepatic vein thrombosis) \u2014 APS related",
"Nodular regenerative hyperplasia \u2192 portal hypertension",
"Hepatic veno-occlusive disease",
"Hepatic infarction (rare)",
], Inches(6.9), Inches(4.85), Inches(5.9), Inches(2.1), size=12, color=DARKTEXT)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 8 – Drug-Induced Hepatitis in SLE
# ════════════════════════════════════════════════════════════════════════════
s = add_slide()
bg(s, LIGHTBG)
header_bar(s, "Drug-Induced Hepatitis in SLE", "A Rare but Important Complication")
# Left column
txbox(s, "Common Offending Drugs",
Inches(0.4), Inches(1.45), Inches(5.8), Inches(0.4),
size=15, bold=True, color=CRIMSON)
bullets(s, [
"NSAIDs (ibuprofen, diclofenac) \u2192 dose-dependent hepatocellular injury",
"Methotrexate \u2192 hepatic fibrosis with chronic use",
"Azathioprine \u2192 cholestatic hepatitis, sinusoidal obstruction",
"Hydroxychloroquine \u2192 very rare; generally hepatoprotective",
"Mycophenolate mofetil \u2192 mild transaminase elevation",
"Cyclophosphamide \u2192 hepatotoxicity at high doses",
"Minocycline (used for skin SLE) \u2192 drug-induced lupus + autoimmune hepatitis",
], Inches(0.4), Inches(1.9), Inches(5.8), Inches(3.2), size=13)
txbox(s, "Mechanism of Injury",
Inches(0.4), Inches(5.2), Inches(5.8), Inches(0.4),
size=14, bold=True, color=CRIMSON)
bullets(s, [
"Direct hepatotoxicity (intrinsic): dose-dependent (e.g. acetaminophen)",
"Idiosyncratic (type B): immune-mediated, unpredictable",
"Cholestatic pattern: drug-canalicular transport disruption",
"Mixed hepatocellular-cholestatic: most common in SLE drug-DILI",
], Inches(0.4), Inches(5.65), Inches(5.8), Inches(1.7), size=13)
# Right: image + box
if images["liver_histo"]:
add_image(s, images["liver_histo"], Inches(6.6), Inches(1.45), Inches(6.3), Inches(3.8))
txbox(s, "Liver histology: portal inflammation, hepatocyte ballooning degeneration\nin acute hepatitis pattern (H&E stain)",
Inches(6.6), Inches(5.25), Inches(6.3), Inches(0.6),
size=10, italic=True, color=MIDGRAY, align=PP_ALIGN.CENTER)
rect(s, Inches(6.6), Inches(5.9), Inches(6.3), Inches(1.2), fill_color=NAVY)
txbox(s, "DILI in SLE mimics lupus hepatitis — diagnosis is by exclusion. Rechallenge is contraindicated.",
Inches(6.7), Inches(5.95), Inches(6.1), Inches(1.1),
size=13, bold=False, color=WHITE, wrap=True)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 9 – Diagnosis & Management of Drug-Induced Hepatitis in SLE
# ════════════════════════════════════════════════════════════════════════════
s = add_slide()
bg(s, LIGHTBG)
header_bar(s, "Drug-Induced Hepatitis in SLE", "Diagnosis, Investigation & Management")
# Two columns
txbox(s, "Diagnostic Approach",
Inches(0.4), Inches(1.45), Inches(6.2), Inches(0.4),
size=15, bold=True, color=CRIMSON)
bullets(s, [
"LFTs: ALT/AST elevation (hepatocellular) or ALP/GGT (cholestatic)",
"Rule out viral hepatitis: HBsAg, anti-HCV, HBV-DNA, HCV-RNA",
"Rule out CMV, EBV serology",
"Abdominal ultrasound: exclude biliary obstruction, fatty liver",
"Liver biopsy if diagnosis uncertain or persistent elevation >3 months",
"RUCAM (Roussel Uclaf Causality Assessment Method) score",
"Pattern recognition: \u2022 R \u2265 5 = hepatocellular \u2022 R \u2264 2 = cholestatic",
], Inches(0.4), Inches(1.9), Inches(6.2), Inches(3.5), size=13)
txbox(s, "Management",
Inches(6.8), Inches(1.45), Inches(6.1), Inches(0.4),
size=15, bold=True, color=CRIMSON)
bullets(s, [
"STOP the offending drug IMMEDIATELY (most important step)",
"Corticosteroids: if immune-mediated / severe reaction",
"N-acetylcysteine: adjunct in hepatocellular DILI with high INR",
"Monitor LFTs every 2 weeks until resolution",
"For SLE management, switch to safer alternative: hydroxychloroquine \u2192 belimumab",
"Rechallenge: CONTRAINDICATED if severe reaction",
"Liver transplant: last resort in acute liver failure",
], Inches(6.8), Inches(1.9), Inches(6.1), Inches(3.5), size=13)
# Bottom highlight bar
rect(s, Inches(0.4), Inches(5.6), Inches(12.5), Inches(1.5), fill_color=RGBColor(0xE8, 0xEF, 0xF8))
txbox(s, "Drug-Induced Lupus (DIL) — Special Consideration",
Inches(0.5), Inches(5.65), Inches(12.0), Inches(0.4),
size=13, bold=True, color=NAVY)
txbox(s, "Drugs like procainamide, hydralazine, isoniazid, minocycline, and TNF-inhibitors can trigger drug-induced lupus (DIL). DIL resolves on stopping the drug but may be accompanied by hepatitis, serositis, and cytopenias. ANA and anti-histone Ab are typically positive.",
Inches(0.5), Inches(6.05), Inches(12.0), Inches(0.95),
size=12, italic=False, color=DARKTEXT, wrap=True)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 10 – Summary & Take-Home Messages
# ════════════════════════════════════════════════════════════════════════════
s = add_slide()
bg(s, NAVY)
rect(s, 0, 0, W, Inches(1.3), fill_color=RGBColor(0x06, 0x1A, 0x40))
rect(s, 0, Inches(1.3), W, Pt(5), fill_color=GOLD)
txbox(s, "Summary & Take-Home Messages",
Inches(0.4), Inches(0.12), Inches(12.0), Inches(1.1),
size=30, bold=True, color=WHITE)
# Two side-by-side summary boxes
rect(s, Inches(0.4), Inches(1.5), Inches(6.0), Inches(5.4), fill_color=RGBColor(0x14, 0x3A, 0x6B))
txbox(s, "Takotsubo Cardiomyopathy",
Inches(0.5), Inches(1.55), Inches(5.8), Inches(0.5),
size=16, bold=True, color=GOLD)
bullets(s, [
"Stress-induced transient LV dysfunction with apical ballooning",
"Mimics STEMI but coronaries are normal on angiography",
"SLE predisposes via catecholamine surges, autonomic dysfunction & APS",
"Diagnosis: echo + coronary angiography (rule out ACS)",
"Treatment: supportive; generally good recovery",
"Recurrence rate: ~2%/year; avoid selective \u03b2-blockers",
], Inches(0.5), Inches(2.1), Inches(5.8), Inches(4.6), size=13, color=WHITE)
rect(s, Inches(7.0), Inches(1.5), Inches(6.0), Inches(5.4), fill_color=RGBColor(0x14, 0x3A, 0x6B))
txbox(s, "Drug-Induced Hepatitis",
Inches(7.1), Inches(1.55), Inches(5.8), Inches(0.5),
size=16, bold=True, color=GOLD)
bullets(s, [
"Liver enzyme abnormalities in up to 60% of SLE patients",
"Drugs: NSAIDs, methotrexate, azathioprine most common culprits",
"Must exclude: viral hepatitis, autoimmune hepatitis, steatosis",
"Lupus hepatitis \u2260 autoimmune hepatitis (different histology)",
"Management: stop offending drug; steroids if immune-mediated",
"RUCAM score helps assess causality",
], Inches(7.1), Inches(2.1), Inches(5.8), Inches(4.6), size=13, color=WHITE)
rect(s, 0, H - Inches(0.35), W, Inches(0.35), fill_color=RGBColor(0x06, 0x1A, 0x40))
txbox(s, "Rare Complications of SLE | Seminar Presentation 2026",
Inches(0.3), H - Inches(0.33), Inches(12.5), Inches(0.32),
size=10, color=RGBColor(0xB0, 0xC4, 0xDE), align=PP_ALIGN.CENTER)
# ── Save ──────────────────────────────────────────────────────────────────────
out = "/tmp/workspace/sle-presentation/SLE_Rare_Complications_Seminar.pptx"
prs.save(out)
print(f"\nSaved: {out}")
cd /tmp/workspace/sle-presentation && python build_pptx.py 2>&1
find /tmp/skills -name "fetch_images.py" 2>/dev/null; ls /tmp/skills/ 2>/dev/null; ls /skills/ 2>/dev/null
ls /tmp/skills/ && ls /tmp/skills/pptx/ && ls /tmp/skills/shared/ 2>/dev/null || echo "no shared dir"
ls /tmp/skills/shared/scripts/
~/sle-presentation/build_pptx.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sle-presentation/build_pptx.py'
~/sle-presentation/build_pptx.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sle-presentation/build_pptx.py'
cd /tmp/workspace/sle-presentation && python build_pptx.py 2>&1
python3 -c " from PIL import Image from io import BytesIO import urllib.request, ssl ctx = ssl._create_unverified_context() url = 'https://cdn.orris.care/cdss_images/Pathology_1760053632503_4062ab08-f73f-4e90-9fa7-537d181d72e6.jpg' req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'}) with urllib.request.urlopen(req, context=ctx, timeout=20) as r: data = r.read() img = Image.open(BytesIO(data)) print(img.format, img.size) out = BytesIO() img.convert('RGB').save(out, format='JPEG') with open('/tmp/workspace/sle-presentation/liver_histo.jpg','wb') as f: f.write(out.getvalue()) print('saved') "
~/sle-presentation/build_pptx.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sle-presentation/build_pptx.py'
cd /tmp/workspace/sle-presentation && python build_pptx.py 2>&1
SLE Rare Complications Seminar
Presentation · PPTX
| # | Slide Title | Key Content |
|---|---|---|
| 1 | Title Slide | "Rare Complications of SLE" with SLE malar rash photo |
| 2 | SLE Overview | Epidemiology, pathogenesis, ANA, SLICC criteria, multi-system photo |
| 3 | Cardiac Manifestations of SLE | Pericarditis, myocarditis, Libman-Sacks, mechanisms of cardiac injury |
| 4 | Takotsubo: Introduction & Pathogenesis | Broken heart syndrome, catecholamine mechanism, apical ballooning echo image |
| 5 | Takotsubo: Clinical Features & Management | ECG mimic, InterTAK criteria, management ladder, ECG + angiography image |
| 6 | Takotsubo in SLE: The Connection | SLE-specific predisposing factors, diagnostic challenge box, echo image |
| 7 | Hepatic Involvement in SLE | 60% LFT abnormalities, lupus hepatitis vs AIH, Budd-Chiari, NRH |
| 8 | Drug-Induced Hepatitis in SLE | NSAIDs/MTX/AZA/minocycline mechanisms, liver histology image |
| 9 | Diagnosis & Management of DILI in SLE | RUCAM score, R-ratio, step-by-step management, Drug-Induced Lupus |
| 10 | Summary & Take-Home Messages | Side-by-side comparison boxes for both complications |
Make it into 10 page pdf form
ls /tmp/workspace/sle-presentation/
~/sle-presentation/build_pdf.py
"""
Build a 10-page A4 PDF seminar document on:
Rare Complications of SLE – Takotsubo Cardiomyopathy & Drug-Induced Hepatitis
"""
import urllib.request, ssl, io, textwrap
from PIL import Image as PILImage
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm, mm
from reportlab.lib.colors import HexColor, white, black
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether, Image as RLImage
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
from reportlab.platypus.flowables import Flowable
# ── Colours ──────────────────────────────────────────────────────────────────
NAVY = HexColor("#0D2B55")
CRIMSON = HexColor("#8B0000")
GOLD = HexColor("#D4AF37")
LIGHTBG = HexColor("#F2F5FA")
MIDGRAY = HexColor("#55606E")
SLATE = HexColor("#1A1A2E")
STEEL = HexColor("#B0C4DE")
LIGHTBLUE = HexColor("#E8EFF8")
LIGHTYELLOW = HexColor("#FFF5CC")
DARKNAVY = HexColor("#061A40")
MEDNAVY = HexColor("#143A6B")
W, H = A4 # 595 x 842 pts
# ── Image downloading ─────────────────────────────────────────────────────────
ctx = ssl._create_unverified_context()
IMG_URLS = {
"sle_face": "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_0b4e1b51b007615806cc3a1d6dcf8520d34e446c5f6904a8048b957ad3e3a70a.jpg",
"sle_multi": "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_e782056bb4615432c007d560cd2326038aa3e28a02388508e84953189b6d5ac3.jpg",
"tako_echo": "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_c6021993840345b8856726d8526734bbd273e014a562a1a7c11bf144d093da75.jpg",
"tako_ecg": "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_0215bbe75200a3e20ef87ffd2dffddbb64ce66a582611f4f1ceced32c73129d4.jpg",
"liver_histo": "https://cdn.orris.care/cdss_images/Pathology_1760053632503_4062ab08-f73f-4e90-9fa7-537d181d72e6.jpg",
"lupus_nephritis": "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_293e2ec74f178f4572ee75008652e5274d8755267785968004b05a2cbcbc2928.jpg",
"tako_echo2": "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_3686bf213aa597be273ba99a1a7b35807e10ae26d07fa6eb851daceeda686850.jpg",
}
def fetch_img(url, max_w_px=600):
try:
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
with urllib.request.urlopen(req, context=ctx, timeout=25) as r:
raw = io.BytesIO(r.read())
img = PILImage.open(raw).convert("RGB")
# Downsample for PDF efficiency
if img.width > max_w_px:
ratio = max_w_px / img.width
img = img.resize((max_w_px, int(img.height * ratio)), PILImage.LANCZOS)
out = io.BytesIO()
img.save(out, format="JPEG", quality=85)
out.seek(0)
return out
except Exception as e:
print(f" FAIL {url}: {e}")
return None
print("Downloading images…")
imgs = {}
for k, u in IMG_URLS.items():
imgs[k] = fetch_img(u)
print(f" {'OK' if imgs[k] else 'FAIL'} {k}")
def rl_img(key, width_cm):
if imgs[key] is None:
return Spacer(1, 0.5*cm)
imgs[key].seek(0)
pil = PILImage.open(imgs[key])
w_pt = width_cm * cm
h_pt = w_pt * pil.height / pil.width
imgs[key].seek(0)
return RLImage(imgs[key], width=w_pt, height=h_pt)
# ── Styles ────────────────────────────────────────────────────────────────────
BASE = getSampleStyleSheet()
def style(name, **kw):
s = ParagraphStyle(name, **kw)
return s
S_TITLE = style("S_TITLE", fontName="Helvetica-Bold", fontSize=22, textColor=white, leading=28, alignment=TA_CENTER)
S_STITLE = style("S_STITLE", fontName="Helvetica-Oblique",fontSize=13, textColor=STEEL, leading=17, alignment=TA_CENTER)
S_H1 = style("S_H1", fontName="Helvetica-Bold", fontSize=16, textColor=NAVY, leading=20, spaceAfter=4)
S_H2 = style("S_H2", fontName="Helvetica-Bold", fontSize=13, textColor=CRIMSON, leading=17, spaceAfter=3)
S_BODY = style("S_BODY", fontName="Helvetica", fontSize=10, textColor=SLATE, leading=15, spaceAfter=3, alignment=TA_JUSTIFY)
S_BULLET = style("S_BULLET", fontName="Helvetica", fontSize=10, textColor=SLATE, leading=14, leftIndent=12, spaceAfter=2)
S_CAPTION = style("S_CAPTION", fontName="Helvetica-Oblique", fontSize=8, textColor=MIDGRAY, leading=11, alignment=TA_CENTER)
S_BOX = style("S_BOX", fontName="Helvetica", fontSize=10, textColor=SLATE, leading=14)
S_BOX_WH = style("S_BOX_WH", fontName="Helvetica", fontSize=10, textColor=white, leading=14)
S_BOXB = style("S_BOXB", fontName="Helvetica-Bold", fontSize=11, textColor=NAVY, leading=15, spaceAfter=3)
S_BOXBWH = style("S_BOXBWH", fontName="Helvetica-Bold", fontSize=11, textColor=GOLD, leading=15, spaceAfter=3)
S_FOOTER = style("S_FOOTER", fontName="Helvetica-Oblique", fontSize=8, textColor=STEEL, alignment=TA_CENTER)
S_PAGE_H = style("S_PAGE_H", fontName="Helvetica-Bold", fontSize=18, textColor=white, leading=24)
S_PAGE_SH = style("S_PAGE_SH", fontName="Helvetica-Oblique",fontSize=11, textColor=STEEL, leading=15)
def bullet(text, color=SLATE):
return Paragraph(f"\u2022\u00a0\u00a0{text}", S_BULLET)
def colored_box(paras, bg_color, padding=8):
data = [[p] for p in paras]
t = Table(data, colWidths=[W - 4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), bg_color),
("TOPPADDING", (0,0),(-1,-1), padding),
("BOTTOMPADDING", (0,0),(-1,-1), padding),
("LEFTPADDING", (0,0),(-1,-1), padding+4),
("RIGHTPADDING", (0,0),(-1,-1), padding),
("ROWBACKGROUNDS",(0,0),(-1,-1),[bg_color]),
]))
return t
def two_col_table(left_items, right_items, left_bg=LIGHTBLUE, right_bg=LIGHTYELLOW,
left_head=None, right_head=None, col_w=None):
if col_w is None:
col_w = [(W-4*cm)/2 - 3, (W-4*cm)/2 - 3]
L, R = [], []
if left_head:
L.append(Paragraph(left_head, S_H2))
for item in left_items:
L.append(bullet(item))
if right_head:
R.append(Paragraph(right_head, S_H2))
for item in right_items:
R.append(bullet(item))
data = [[L, R]]
t = Table(data, colWidths=col_w)
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,-1), left_bg),
("BACKGROUND", (1,0),(1,-1), right_bg),
("VALIGN", (0,0),(-1,-1), "TOP"),
("TOPPADDING", (0,0),(-1,-1), 8),
("BOTTOMPADDING", (0,0),(-1,-1), 8),
("LEFTPADDING", (0,0),(-1,-1), 8),
("RIGHTPADDING", (0,0),(-1,-1), 8),
("LINEAFTER", (0,0),(0,-1), 2, NAVY),
]))
return t
# ── Page header band ──────────────────────────────────────────────────────────
def page_header_table(title, subtitle=None):
title_p = Paragraph(title, S_PAGE_H)
subtitle_p = Paragraph(subtitle if subtitle else "", S_PAGE_SH)
data = [[title_p], [subtitle_p]] if subtitle else [[title_p]]
t = Table(data, colWidths=[W - 4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), NAVY),
("TOPPADDING", (0,0),(-1,-1), 10),
("BOTTOMPADDING", (0,0),(-1,-1), 10),
("LEFTPADDING", (0,0),(-1,-1), 14),
("RIGHTPADDING", (0,0),(-1,-1), 14),
]))
return t
def gold_rule():
return HRFlowable(width="100%", thickness=3, color=GOLD, spaceAfter=8, spaceBefore=0)
def navy_rule():
return HRFlowable(width="100%", thickness=1, color=NAVY, spaceAfter=6, spaceBefore=4)
def sp(h=0.3):
return Spacer(1, h*cm)
# ── Document setup ────────────────────────────────────────────────────────────
out_path = "/tmp/workspace/sle-presentation/SLE_Rare_Complications_Seminar.pdf"
doc = SimpleDocTemplate(
out_path,
pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=1.5*cm, bottomMargin=1.8*cm,
title="Rare Complications of SLE",
author="Seminar Presentation 2026",
)
story = []
# ════════════════════════════════════════════════════════════════════════════
# PAGE 1 – TITLE PAGE
# ════════════════════════════════════════════════════════════════════════════
# Big title band
title_data = [
[Paragraph("Rare Complications of", S_TITLE)],
[Paragraph("Systemic Lupus Erythematosus", S_TITLE)],
[Spacer(1, 0.3*cm)],
[Paragraph("Takotsubo Cardiomyopathy | Drug-Induced Hepatitis", S_STITLE)],
]
title_t = Table(title_data, colWidths=[W - 4*cm])
title_t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), NAVY),
("TOPPADDING", (0,0),(-1,-1), 18),
("BOTTOMPADDING", (0,0),(-1,-1), 18),
("LEFTPADDING", (0,0),(-1,-1), 20),
("RIGHTPADDING", (0,0),(-1,-1), 20),
]))
story.append(title_t)
story.append(gold_rule())
story.append(sp(0.5))
# Two-column: description left, image right
desc_items = [
Paragraph("A Seminar Presentation on Two Underrecognized Manifestations of a Systemic Autoimmune Disease", S_H1),
sp(0.3),
Paragraph("Systemic lupus erythematosus (SLE) is a chronic, multisystem autoimmune disease with diverse organ involvement. While renal, musculoskeletal, and cutaneous manifestations are well-known, rare complications such as <b>Takotsubo cardiomyopathy</b> and <b>drug-induced hepatitis</b> are increasingly recognized as serious, potentially life-threatening events.", S_BODY),
sp(0.3),
Paragraph("This presentation reviews their pathogenesis, clinical features, diagnosis, and management within the context of SLE.", S_BODY),
sp(0.5),
Paragraph("Seminar Presentation | 2026", style("inf", fontName="Helvetica-Oblique", fontSize=10, textColor=MIDGRAY)),
]
sle_face_img = rl_img("sle_face", 6.5)
title_body = Table(
[[desc_items, sle_face_img]],
colWidths=[(W-4*cm)*0.55, (W-4*cm)*0.43],
)
title_body.setStyle(TableStyle([
("VALIGN", (0,0),(-1,-1), "TOP"),
("TOPPADDING", (0,0),(-1,-1), 0),
("BOTTOMPADDING", (0,0),(-1,-1), 0),
("LEFTPADDING", (0,0),(0,-1), 0),
("LEFTPADDING", (1,0),(1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 0),
]))
story.append(title_body)
story.append(sp(0.4))
story.append(Paragraph("Malar (butterfly) rash — classic cutaneous sign of SLE", S_CAPTION))
story.append(sp(0.3))
story.append(HRFlowable(width="100%", thickness=1.5, color=NAVY))
# ════════════════════════════════════════════════════════════════════════════
# PAGE 2 – SLE OVERVIEW
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("", style("pb", fontName="Helvetica", fontSize=1, pageBreakBefore=True)))
story.append(page_header_table("Systemic Lupus Erythematosus", "Overview & Epidemiology"))
story.append(gold_rule())
epi_bullets = [
"Chronic, multisystem autoimmune disease driven by loss of immune tolerance to self-antigens",
"Prevalence: 20–150 per 100,000 population; Female:Male ratio ~9:1",
"Peak onset: 15–45 years (reproductive age group)",
"Pathogenesis: immune complex deposition, complement activation, end-organ inflammation",
"Hallmark: positive antinuclear antibody (ANA) in >95% of patients",
"Classification: SLICC 2012 criteria / EULAR-ACR 2019 criteria",
"Key antibodies: anti-dsDNA, anti-Sm (disease-specific); anti-Ro/La, antiphospholipid (aPL)",
]
story.append(sp(0.2))
for b in epi_bullets:
story.append(bullet(b))
story.append(sp(0.3))
story.append(navy_rule())
organs_left = ["Skin: malar rash, discoid lesions, photosensitivity",
"Kidneys: lupus nephritis (50–60% of patients)",
"Joints: non-erosive arthritis/arthralgia (>90%)"]
organs_right = ["CNS: neuropsychiatric SLE (seizures, psychosis)",
"Heart: pericarditis, myocarditis, Libman-Sacks",
"Lungs: pleuritis, ILD, pulmonary hypertension"]
story.append(two_col_table(organs_left, organs_right,
left_head="Commonly Affected Organs (Left)",
right_head="Commonly Affected Organs (Right)"))
story.append(sp(0.4))
sle_multi = rl_img("sle_multi", 12)
story.append(sle_multi)
story.append(Paragraph("SLE multisystem manifestations: malar eruptions, vasculitic purpura on lower limbs, and oral mucosal ulceration", S_CAPTION))
# ════════════════════════════════════════════════════════════════════════════
# PAGE 3 – CARDIAC MANIFESTATIONS OF SLE
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("", style("pb2", fontName="Helvetica", fontSize=1, pageBreakBefore=True)))
story.append(page_header_table("Cardiac Manifestations of SLE", "Setting the Stage for Takotsubo"))
story.append(gold_rule())
story.append(Paragraph("Spectrum of Cardiac Involvement", S_H2))
cardiac_items = [
"<b>Pericarditis</b> — most common cardiac manifestation (~25%); presents with pleuritic chest pain",
"<b>Myocarditis</b> — 5–10%; inflammatory cardiomyopathy with reduced EF",
"<b>Libman-Sacks endocarditis</b> — sterile verrucous mitral valve vegetations; embolic risk",
"<b>Coronary artery disease</b> — accelerated atherosclerosis (×5–10 increased risk vs. general population)",
"<b>Pulmonary hypertension</b> — 5–14%; associated with anti-U1-RNP antibodies",
"<b>Conduction abnormalities</b> — AV block, bundle branch blocks (neonatal lupus: anti-Ro/SSA)",
"<b>Cardiomyopathy</b> — including Takotsubo (stress-induced) and dilated forms",
]
for b in cardiac_items:
story.append(Paragraph(f"\u2022\u00a0\u00a0{b}", S_BULLET))
story.append(sp(0.3))
story.append(navy_rule())
mech_left = [
"Immune complex deposition in myocardium & pericardium",
"Complement-mediated inflammation (C3, C4 consumption)",
"Antiphospholipid antibodies → microvascular thrombosis",
]
mech_right = [
"Proinflammatory cytokines: IL-1, IL-6, TNF-α, IFN-γ",
"Corticosteroid & NSAID cardiovascular toxicity",
"Autonomic nervous system dysregulation",
]
story.append(two_col_table(mech_left, mech_right,
left_head="Mechanisms of Cardiac Injury",
right_head="Contributing Factors",
left_bg=LIGHTBLUE, right_bg=LIGHTYELLOW))
story.append(sp(0.3))
nephritis = rl_img("lupus_nephritis", 12)
story.append(nephritis)
story.append(Paragraph("Lupus nephritis histology (PAS stain): mesangial hypercellularity and immune complex deposits — illustrating the systemic immune injury that extends to the heart", S_CAPTION))
# ════════════════════════════════════════════════════════════════════════════
# PAGE 4 – TAKOTSUBO: INTRODUCTION & PATHOGENESIS
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("", style("pb3", fontName="Helvetica", fontSize=1, pageBreakBefore=True)))
story.append(page_header_table("Takotsubo Cardiomyopathy", "Stress-Induced / Broken Heart Syndrome"))
story.append(gold_rule())
story.append(Paragraph("Introduction", S_H2))
intro_items = [
"Also known as stress-induced cardiomyopathy or <b>\"broken heart syndrome\"</b>",
"Transient left ventricular (LV) dysfunction with characteristic <b>apical ballooning</b>",
"~90% of cases occur in <b>post-menopausal women</b>",
"Represents ~2% of all acute coronary syndrome presentations",
"Triggered by intense emotional (grief, fear) or physical (surgery, sepsis) stressors",
"In SLE: disease flares, cytokine surges, and autonomic dysfunction act as triggers",
"Named after the Japanese octopus-trapping pot (<i>takotsubo</i>) — narrow neck, wide base",
]
for b in intro_items:
story.append(Paragraph(f"\u2022\u00a0\u00a0{b}", S_BULLET))
story.append(sp(0.3))
story.append(navy_rule())
story.append(Paragraph("Pathogenesis", S_H2))
patho_items = [
"Acute catecholamine surge (adrenaline/noradrenaline) at times of extreme stress",
"Heterogeneous autonomic innervation: apex has higher β-adrenoreceptor density than base",
"Differential myocardial response: apex stunned (akinesia) → basal segments remain hyperkinetic",
"Diffuse epicardial and microvascular coronary spasm contributes to wall motion abnormalities",
"Direct catecholamine cardiotoxicity: oxidative stress, calcium overload, mitochondrial dysfunction",
"Cardiac MRI: diffuse myocardial edema WITHOUT necrosis (distinguishes from MI)",
"LV shape mirrors the octopus trap: narrow base contracts, wide akinetic apex balloons out",
]
for b in patho_items:
story.append(Paragraph(f"\u2022\u00a0\u00a0{b}", S_BULLET))
story.append(sp(0.3))
tako_echo = rl_img("tako_echo", 13)
story.append(tako_echo)
story.append(Paragraph("Echocardiogram (apical 4-chamber view): classic LV apical ballooning with preserved basal contraction — pathognomonic of Takotsubo cardiomyopathy", S_CAPTION))
# ════════════════════════════════════════════════════════════════════════════
# PAGE 5 – TAKOTSUBO: CLINICAL FEATURES, ECG & DIAGNOSIS
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("", style("pb4", fontName="Helvetica", fontSize=1, pageBreakBefore=True)))
story.append(page_header_table("Takotsubo Cardiomyopathy", "Clinical Features & Diagnosis"))
story.append(gold_rule())
clin_left = [
"Acute chest pain and/or dyspnoea (STEMI-like presentation)",
"ECG: ST-elevation in anterior leads (V1–V6), T-wave inversions",
"QTc prolongation on serial ECGs",
"Troponin: mildly elevated (lower than expected for STEMI territory)",
"Pulmonary oedema in severe cases; cardiogenic shock (5–10%)",
"BNP/NT-proBNP significantly elevated",
]
clin_right = [
"Coronary angiography: <b>NO obstructive CAD</b> or plaque rupture",
"Echocardiography: apical akinesia, basal hyperkinesis, EF 30–50%",
"LV wall motion abnormality extends beyond any single coronary territory",
"Cardiac MRI: diffuse myocardial oedema, no late gadolinium enhancement",
"Resolution of wall motion abnormality within days to 3 months",
]
story.append(two_col_table(clin_left, clin_right,
left_head="Clinical Presentation",
right_head="Investigations",
left_bg=LIGHTBLUE, right_bg=LIGHTYELLOW))
story.append(sp(0.3))
story.append(Paragraph("InterTAK Diagnostic Criteria (Key Points)", S_H2))
dx_items = [
"Transient LV wall motion abnormality (apical, mid-ventricular, basal, or focal)",
"Absence of obstructive coronary artery disease or evidence of plaque rupture",
"New ECG abnormalities (ST elevation/depression, T-wave inversion, QTc prolongation)",
"Significant emotional, physical, or neurological trigger (not mandatory)",
"Recovery of ventricular dysfunction within 3–6 months",
"Exclude: pheochromocytoma, myocarditis, intracranial haemorrhage",
]
for b in dx_items:
story.append(bullet(b))
story.append(sp(0.3))
ecg_img = rl_img("tako_ecg", 13)
story.append(ecg_img)
story.append(Paragraph("Multi-panel Takotsubo case: (a) 12-lead ECG with anterior ST-elevation; (b–c) normal coronary angiography; (d–e) left ventriculography showing apical ballooning at end-systole", S_CAPTION))
# ════════════════════════════════════════════════════════════════════════════
# PAGE 6 – TAKOTSUBO: MANAGEMENT & SLE CONNECTION
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("", style("pb5", fontName="Helvetica", fontSize=1, pageBreakBefore=True)))
story.append(page_header_table("Takotsubo Cardiomyopathy", "Management & Link to SLE"))
story.append(gold_rule())
mgmt_items = [
"<b>Supportive care</b>: IV fluids, oxygen, haemodynamic monitoring",
"<b>Pulmonary oedema</b>: IV diuretics (furosemide), nitrates (avoid if LVOTO present)",
"<b>Beta-blockers</b>: combined α+β blockade preferred (carvedilol) over selective β-blockade",
"<b>Anticoagulation</b>: if LV thrombus identified or severe LV dysfunction (EF <30%)",
"<b>Cardiogenic shock</b>: IABP (intra-aortic balloon pump) if no LVOTO",
"<b>LVOTO with shock</b>: IV phenylephrine; avoid inotropes (worsen obstruction)",
"<b>Arrhythmias</b>: IV magnesium for QTc prolongation; correct electrolytes",
"<b>Prognosis</b>: generally good; LV recovery in days to weeks; in-hospital mortality ~3–4%",
"<b>Recurrence</b>: ~10% lifetime risk; estimated 2% per year",
]
story.append(Paragraph("Management", S_H2))
for b in mgmt_items:
story.append(Paragraph(f"\u2022\u00a0\u00a0{b}", S_BULLET))
story.append(sp(0.3))
story.append(navy_rule())
story.append(Paragraph("Why SLE Patients Are Specifically Predisposed", S_H2))
sle_link = [
"Disease flares trigger catecholamine surges via the hypothalamic-pituitary-adrenal (HPA) axis",
"SLE-associated autonomic neuropathy alters sympathetic cardiac innervation heterogeneity",
"Antiphospholipid antibodies (APS) cause microvascular spasm and thrombosis",
"High-dose corticosteroid therapy amplifies the cardiovascular stress response",
"Neuropsychiatric SLE (psychosis, depression) provides intense emotional triggers",
"Case series consistently report Takotsubo during active lupus flares",
]
story.append(colored_box(
[Paragraph("Key Diagnostic Alert in SLE", S_BOXB)] +
[Paragraph("In any SLE patient presenting with acute chest pain and ST changes, the differential must include: Takotsubo syndrome, STEMI (accelerated atherosclerosis), myocarditis, pericarditis, and Libman-Sacks endocarditis. Urgent echocardiography + coronary angiography are essential to distinguish these.", S_BOX)],
LIGHTYELLOW
))
story.append(sp(0.2))
for b in sle_link:
story.append(bullet(b))
story.append(sp(0.3))
tako2 = rl_img("tako_echo2", 10)
story.append(tako2)
story.append(Paragraph("Echocardiographic apical ballooning — the classic octopus-trap shape of Takotsubo syndrome", S_CAPTION))
# ════════════════════════════════════════════════════════════════════════════
# PAGE 7 – HEPATIC INVOLVEMENT IN SLE
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("", style("pb6", fontName="Helvetica", fontSize=1, pageBreakBefore=True)))
story.append(page_header_table("Hepatic Involvement in SLE", "Prevalence, Mechanisms & Spectrum"))
story.append(gold_rule())
story.append(Paragraph("Overview", S_H2))
story.append(Paragraph("Liver enzyme abnormalities are detected in <b>up to 60%</b> of SLE patients at some point during the disease course. However, <b>clinically significant liver disease is rarely a direct manifestation</b> of SLE itself. The finding of abnormal LFTs should always prompt a systematic search for secondary causes.", S_BODY))
story.append(sp(0.2))
causes_left = [
"NSAIDs, methotrexate, azathioprine (most common)",
"Viral hepatitis (HBV, HCV, CMV, EBV) reactivation",
"Hepatic steatosis (corticosteroid use, obesity, DM)",
"Autoimmune hepatitis (may coexist with SLE)",
]
causes_right = [
"Lupus hepatitis (direct SLE manifestation — rare)",
"Antiphospholipid syndrome: Budd-Chiari, hepatic thrombosis",
"Nodular regenerative hyperplasia → portal hypertension",
"Hepatic veno-occlusive disease, hepatic infarction",
]
story.append(two_col_table(causes_left, causes_right,
left_head="Secondary / Drug Causes",
right_head="Primary SLE Hepatic Manifestations",
left_bg=LIGHTYELLOW, right_bg=LIGHTBLUE))
story.append(sp(0.3))
story.append(Paragraph("Lupus Hepatitis vs. Autoimmune Hepatitis", S_H2))
diff_data = [
[Paragraph("<b>Feature</b>", S_BOX), Paragraph("<b>Lupus Hepatitis</b>", S_BOX), Paragraph("<b>Autoimmune Hepatitis (AIH)</b>", S_BOX)],
[Paragraph("Inflammation Pattern", S_BOX), Paragraph("Lobular, paucity of lymphoid infiltrates", S_BOX), Paragraph("Periportal (interface), dense lymphoid infiltrates", S_BOX)],
[Paragraph("ANA", S_BOX), Paragraph("Positive (frequent)", S_BOX), Paragraph("Positive (frequent)", S_BOX)],
[Paragraph("Anti-smooth muscle Ab", S_BOX), Paragraph("Less common", S_BOX), Paragraph("More common (type 1 AIH)", S_BOX)],
[Paragraph("Anti-LKM Ab", S_BOX), Paragraph("Rare", S_BOX), Paragraph("Present (type 2 AIH)", S_BOX)],
[Paragraph("Progression to cirrhosis", S_BOX), Paragraph("Rare", S_BOX), Paragraph("More common if untreated", S_BOX)],
]
col_w = [(W-4*cm)*0.22, (W-4*cm)*0.39, (W-4*cm)*0.39]
diff_t = Table(diff_data, colWidths=col_w)
diff_t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), NAVY),
("TEXTCOLOR", (0,0),(-1,0), white),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1), 9),
("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHTBG, white]),
("GRID", (0,0),(-1,-1), 0.5, MIDGRAY),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING", (0,0),(-1,-1), 5),
("LEFTPADDING", (0,0),(-1,-1), 6),
("RIGHTPADDING", (0,0),(-1,-1), 6),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
story.append(diff_t)
# ════════════════════════════════════════════════════════════════════════════
# PAGE 8 – DRUG-INDUCED HEPATITIS IN SLE
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("", style("pb7", fontName="Helvetica", fontSize=1, pageBreakBefore=True)))
story.append(page_header_table("Drug-Induced Hepatitis in SLE", "Causative Drugs & Mechanisms"))
story.append(gold_rule())
drug_data = [
[Paragraph("<b>Drug</b>", S_BOX), Paragraph("<b>Pattern of Injury</b>", S_BOX), Paragraph("<b>Notes</b>", S_BOX)],
[Paragraph("NSAIDs (ibuprofen, diclofenac)", S_BOX), Paragraph("Hepatocellular", S_BOX), Paragraph("Dose-related; diclofenac > ibuprofen", S_BOX)],
[Paragraph("Methotrexate", S_BOX), Paragraph("Fibrosis/cirrhosis (chronic)", S_BOX), Paragraph("Cumulative dose >1.5g; baseline biopsy needed", S_BOX)],
[Paragraph("Azathioprine", S_BOX), Paragraph("Cholestatic/sinusoidal obstruction", S_BOX), Paragraph("Rare; idiosyncratic; NRH possible", S_BOX)],
[Paragraph("Minocycline", S_BOX), Paragraph("Autoimmune hepatitis pattern", S_BOX), Paragraph("Also causes drug-induced lupus; anti-histone Ab", S_BOX)],
[Paragraph("Cyclophosphamide", S_BOX), Paragraph("Hepatocellular (high-dose)", S_BOX), Paragraph("Rare at standard SLE doses", S_BOX)],
[Paragraph("Mycophenolate", S_BOX), Paragraph("Mild transaminase elevation", S_BOX), Paragraph("Usually self-limiting", S_BOX)],
[Paragraph("Hydroxychloroquine", S_BOX), Paragraph("Very rare; generally hepatoprotective", S_BOX), Paragraph("Reduces SLE-related LFT flares", S_BOX)],
]
cw_drug = [(W-4*cm)*0.32, (W-4*cm)*0.30, (W-4*cm)*0.38]
drug_t = Table(drug_data, colWidths=cw_drug)
drug_t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), NAVY),
("TEXTCOLOR", (0,0),(-1,0), white),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1), 9),
("ROWBACKGROUNDS",(0,1),(-1,-1),[LIGHTBG, white]),
("GRID", (0,0),(-1,-1), 0.5, MIDGRAY),
("TOPPADDING", (0,0),(-1,-1), 5),
("BOTTOMPADDING", (0,0),(-1,-1), 5),
("LEFTPADDING", (0,0),(-1,-1), 6),
("RIGHTPADDING", (0,0),(-1,-1), 6),
("VALIGN", (0,0),(-1,-1), "MIDDLE"),
]))
story.append(drug_t)
story.append(sp(0.3))
story.append(Paragraph("Mechanisms of Drug-Induced Liver Injury (DILI)", S_H2))
mech_items = [
"<b>Direct hepatotoxicity (intrinsic/predictable)</b>: dose-dependent, reproducible — e.g. acetaminophen overdose",
"<b>Idiosyncratic (type B)</b>: unpredictable, immune-mediated or metabolic — most SLE drug DILI",
"<b>Cholestatic pattern</b>: disruption of canalicular bile transport (BSEP inhibition)",
"<b>Mixed hepatocellular-cholestatic</b>: most common overall pattern in DILI; R ratio 2–5",
"<b>Immune-mediated</b>: minocycline, nitrofurantoin → autoimmune hepatitis-like syndrome",
]
for b in mech_items:
story.append(Paragraph(f"\u2022\u00a0\u00a0{b}", S_BULLET))
story.append(sp(0.3))
liver_h = rl_img("liver_histo", 10)
story.append(liver_h)
story.append(Paragraph("Liver histology (H&E): portal mononuclear infiltrates, hepatocyte ballooning degeneration and apoptotic bodies — pattern seen in acute hepatocellular injury (hepatitis B / DILI overlap)", S_CAPTION))
# ════════════════════════════════════════════════════════════════════════════
# PAGE 9 – DIAGNOSIS & MANAGEMENT OF DILI IN SLE
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("", style("pb8", fontName="Helvetica", fontSize=1, pageBreakBefore=True)))
story.append(page_header_table("Drug-Induced Hepatitis in SLE", "Diagnosis, Investigation & Management"))
story.append(gold_rule())
dx_left = [
"LFTs: ALT/AST elevation (hepatocellular) or ALP/GGT (cholestatic)",
"R Ratio = (ALT/ULN) ÷ (ALP/ULN) → R ≥5: hepatocellular; R ≤2: cholestatic",
"Viral screen: HBsAg, HBeAg, anti-HCV, HBV-DNA, CMV IgM, EBV IgM",
"Autoimmune panel: ANA, anti-smooth muscle Ab, anti-LKM, IgG levels",
"Abdominal ultrasound ± Doppler (exclude obstruction, Budd-Chiari, fatty liver)",
"Liver biopsy: if diagnosis uncertain, or persistent elevation >3 months",
]
dx_right = [
"RUCAM (Roussel Uclaf Causality Assessment Method) score",
"RUCAM ≥9: highly probable; 6–8: probable; 3–5: possible",
"Timeline: onset 5–90 days after starting drug (most cases)",
"Look for eosinophilia (immune-mediated DILI marker)",
"Exclude: alcoholic hepatitis, NAFLD, sepsis-related LFT changes",
]
story.append(two_col_table(dx_left, dx_right,
left_head="Diagnostic Investigations",
right_head="Causality Assessment",
left_bg=LIGHTBLUE, right_bg=LIGHTYELLOW))
story.append(sp(0.3))
story.append(Paragraph("Management Algorithm", S_H2))
mgmt2_items = [
"<b>Step 1 — STOP the offending drug immediately</b> (most critical intervention; 80–90% resolve spontaneously)",
"<b>Step 2</b> — Monitor LFTs every 1–2 weeks until normalisation (8–12 weeks typical)",
"<b>Step 3</b> — Corticosteroids if immune-mediated / severe reaction (ALT >10× ULN, coagulopathy)",
"<b>Step 4</b> — N-acetylcysteine (NAC): adjunct in severe hepatocellular DILI with elevated INR",
"<b>Step 5</b> — Switch SLE therapy to a hepatically safer alternative (e.g. belimumab, voclosporin)",
"<b>Rechallenge</b>: <b>CONTRAINDICATED</b> if severe reaction occurred",
"<b>Acute liver failure</b>: transfer to hepatology unit; transplant evaluation if no recovery",
]
for b in mgmt2_items:
story.append(Paragraph(f"\u2022\u00a0\u00a0{b}", S_BULLET))
story.append(sp(0.3))
story.append(colored_box(
[
Paragraph("Drug-Induced Lupus (DIL) — Special Note", S_BOXB),
Paragraph("Drugs including procainamide, hydralazine, isoniazid, minocycline, and TNF-α inhibitors can trigger Drug-Induced Lupus (DIL). DIL resolves on drug withdrawal but can be accompanied by hepatitis, serositis, and cytopenias. ANA and anti-histone antibodies are typically positive.", S_BOX),
Paragraph("Distinction from idiopathic SLE: anti-dsDNA and anti-Sm usually negative in DIL; renal/CNS involvement rare.", S_BOX),
],
LIGHTYELLOW
))
# ════════════════════════════════════════════════════════════════════════════
# PAGE 10 – SUMMARY & TAKE-HOME MESSAGES
# ════════════════════════════════════════════════════════════════════════════
story.append(Paragraph("", style("pb9", fontName="Helvetica", fontSize=1, pageBreakBefore=True)))
# Full navy title banner
sum_title = Table(
[[Paragraph("Summary & Take-Home Messages", style("sth", fontName="Helvetica-Bold", fontSize=20, textColor=white, alignment=TA_CENTER))]],
colWidths=[W - 4*cm]
)
sum_title.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), DARKNAVY),
("TOPPADDING", (0,0),(-1,-1), 14),
("BOTTOMPADDING", (0,0),(-1,-1), 14),
]))
story.append(sum_title)
story.append(gold_rule())
tako_sum = [
Paragraph("Takotsubo Cardiomyopathy", style("tsh", fontName="Helvetica-Bold", fontSize=13, textColor=GOLD, spaceAfter=6)),
bullet("Transient LV apical ballooning triggered by catecholamine surge"),
bullet("Mimics STEMI — coronary angiography reveals NORMAL vessels"),
bullet("SLE predisposes via: autonomic dysfunction, catecholamine surges, APS, corticosteroids"),
bullet("Diagnosis: echocardiography + coronary angiography (InterTAK criteria)"),
bullet("Treatment: supportive; α+β blockade; IABP for shock"),
bullet("Prognosis generally good; recurrence 2%/year"),
bullet("Always consider in SLE + acute chest pain presentations"),
]
dili_sum = [
Paragraph("Drug-Induced Hepatitis", style("dsh", fontName="Helvetica-Bold", fontSize=13, textColor=GOLD, spaceAfter=6)),
bullet("LFT abnormalities in up to 60% of SLE patients at some point"),
bullet("Drugs: NSAIDs, methotrexate, azathioprine are most common culprits"),
bullet("ALWAYS exclude: viral hepatitis, autoimmune hepatitis, fatty liver first"),
bullet("Lupus hepatitis ≠ autoimmune hepatitis (distinct histological patterns)"),
bullet("RUCAM score guides causality assessment"),
bullet("Management: STOP drug; steroids if immune-mediated; NAC for acute liver failure"),
bullet("Drug-Induced Lupus (DIL): anti-histone Ab positive; resolves on withdrawal"),
]
sum_t = Table([[tako_sum, dili_sum]], colWidths=[(W-4*cm)/2 - 3, (W-4*cm)/2 - 3])
sum_t.setStyle(TableStyle([
("BACKGROUND", (0,0),(0,-1), MEDNAVY),
("BACKGROUND", (1,0),(1,-1), MEDNAVY),
("VALIGN", (0,0),(-1,-1), "TOP"),
("TOPPADDING", (0,0),(-1,-1), 10),
("BOTTOMPADDING", (0,0),(-1,-1), 10),
("LEFTPADDING", (0,0),(-1,-1), 10),
("RIGHTPADDING", (0,0),(-1,-1), 10),
("LINEAFTER", (0,0),(0,-1), 2, GOLD),
]))
story.append(sum_t)
story.append(sp(0.4))
# References box
story.append(colored_box(
[
Paragraph("Key References", style("ref_h", fontName="Helvetica-Bold", fontSize=10, textColor=NAVY)),
Paragraph("• Harrison's Principles of Internal Medicine, 22nd Edition (2025, McGraw Hill) — Takotsubo Syndrome, p.2063", style("ref", fontName="Helvetica", fontSize=8, textColor=SLATE, leading=12)),
Paragraph("• Firestein & Kelley's Textbook of Rheumatology (2022, Elsevier) — Gastrointestinal Involvement in SLE; Cardiac Manifestations", style("ref", fontName="Helvetica", fontSize=8, textColor=SLATE, leading=12)),
Paragraph("• Fuster and Hurst's The Heart, 15th Edition — MI and Non-Obstructive CAD; Takotsubo Cardiomyopathy", style("ref", fontName="Helvetica", fontSize=8, textColor=SLATE, leading=12)),
Paragraph("• Robbins & Kumar Pathologic Basis of Disease — Cardiomyopathy Pathogenesis", style("ref", fontName="Helvetica", fontSize=8, textColor=SLATE, leading=12)),
Paragraph("• Katzung's Basic and Clinical Pharmacology, 16th Ed. — Autoimmune Drug Reactions", style("ref", fontName="Helvetica", fontSize=8, textColor=SLATE, leading=12)),
],
LIGHTBG, padding=6
))
story.append(sp(0.3))
story.append(HRFlowable(width="100%", thickness=2, color=NAVY))
story.append(sp(0.15))
story.append(Paragraph("Rare Complications of Systemic Lupus Erythematosus | Seminar Presentation 2026 | Prepared by Orris", S_FOOTER))
# ── Build PDF ─────────────────────────────────────────────────────────────────
def on_page(canvas, doc):
canvas.saveState()
canvas.setFont("Helvetica", 8)
canvas.setFillColor(MIDGRAY)
canvas.drawRightString(W - 2*cm, 1.1*cm, f"Page {doc.page} of 10")
canvas.restoreState()
doc.build(story, onFirstPage=on_page, onLaterPages=on_page)
print(f"\nSaved: {out_path}")
cd /tmp/workspace/sle-presentation && python build_pdf.py 2>&1
python3 -c " from pypdf import PdfReader r = PdfReader('/tmp/workspace/sle-presentation/SLE_Rare_Complications_Seminar.pdf') print(f'Pages: {len(r.pages)}') import os print(f'Size: {os.path.getsize(\"/tmp/workspace/sle-presentation/SLE_Rare_Complications_Seminar.pdf\")/1024:.1f} KB') "
python3 -c " from pypdf import PdfReader r = PdfReader('/tmp/workspace/sle-presentation/SLE_Rare_Complications_Seminar.pdf') for i, page in enumerate(r.pages, 1): text = page.extract_text() first_line = text.strip().split('\n')[0][:80] if text else '(empty)' print(f'Page {i}: {first_line}') "
~/sle-presentation/build_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sle-presentation/build_pdf.py'
~/sle-presentation/build_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sle-presentation/build_pdf.py'
~/sle-presentation/build_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sle-presentation/build_pdf.py'
~/sle-presentation/build_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sle-presentation/build_pdf.py'
~/sle-presentation/build_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sle-presentation/build_pdf.py'
cd /tmp/workspace/sle-presentation && python build_pdf.py 2>&1 && python3 -c " from pypdf import PdfReader; import os r = PdfReader('/tmp/workspace/sle-presentation/SLE_Rare_Complications_Seminar.pdf') print(f'Pages: {len(r.pages)}') print(f'Size: {os.path.getsize(\"/tmp/workspace/sle-presentation/SLE_Rare_Complications_Seminar.pdf\")/1024:.1f} KB') "
python3 -c " from pypdf import PdfReader r = PdfReader('/tmp/workspace/sle-presentation/SLE_Rare_Complications_Seminar.pdf') for i in [9,10]: print(f'=== Page {i+1} ===') print(r.pages[i].extract_text()[:500]) print() "
~/sle-presentation/build_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sle-presentation/build_pdf.py'
~/sle-presentation/build_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sle-presentation/build_pdf.py'
cd /tmp/workspace/sle-presentation && python build_pdf.py 2>&1 && python3 -c " from pypdf import PdfReader; import os r = PdfReader('/tmp/workspace/sle-presentation/SLE_Rare_Complications_Seminar.pdf') print(f'Pages: {len(r.pages)}') print(f'Size: {os.path.getsize(\"/tmp/workspace/sle-presentation/SLE_Rare_Complications_Seminar.pdf\")/1024:.1f} KB') "
~/sle-presentation/build_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/sle-presentation/build_pdf.py'
cd /tmp/workspace/sle-presentation && python build_pdf.py 2>&1 && python3 -c " from pypdf import PdfReader; import os r = PdfReader('/tmp/workspace/sle-presentation/SLE_Rare_Complications_Seminar.pdf') print(f'Pages: {len(r.pages)}') print(f'Size: {os.path.getsize(\"/tmp/workspace/sle-presentation/SLE_Rare_Complications_Seminar.pdf\")/1024:.1f} KB') for i, page in enumerate(r.pages, 1): t = page.extract_text().strip().split('\n')[0][:60] print(f' p{i}: {t}') "
SLE Rare Complications Seminar
PDF Document · PDF
| Section | Content |
|---|---|
| Page 1 | Title page with SLE malar rash photo |
| Page 2 | SLE Overview — epidemiology, pathogenesis, multi-manifestation photo |
| Page 3 | Cardiac Manifestations of SLE — full spectrum + lupus nephritis biopsy |
| Page 4 | Takotsubo: Introduction & Pathogenesis — catecholamine mechanism, echo image |
| Page 5 | Takotsubo: Clinical Features & Diagnosis — InterTAK criteria, ECG/angiography panel |
| Page 6 | Takotsubo Management & SLE Connection — treatment algorithm, second echo image |
| Page 7 | Hepatic Involvement in SLE — comparison table (lupus hepatitis vs AIH) |
| Page 8 | Drug-Induced Hepatitis — full drug table (8 drugs), mechanisms, liver histology |
| Page 9 | Diagnosis & Management of DILI — RUCAM, R-ratio, management steps, DIL note |
| Page 10 | Summary & Take-Home Messages — side-by-side comparison + key references |
Can you find short to medium exam oriented answers for both section and male it into pdf file ques and answers
python3 -c " import pdfplumber with pdfplumber.open('/tmp/workspace/attachments/9cda7825-f40f-4472-b163-a8287e1aa182/вопросы_для_иностран_студентов_1_1_2.pdf') as pdf: print(f'Pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages): print(f'=== PAGE {i+1} ===') print(page.extract_text()) print() "
?
1.