ehler danlos syndromee
"Ehlers-Danlos syndrome"[MeSH Terms]
| Mechanism | Subtype | Gene | Inheritance |
|---|---|---|---|
| Deficient type V collagen | Classical EDS | COL5A1, COL5A2 | Autosomal dominant (AD) |
| Deficient type III collagen | Vascular EDS | COL3A1 | AD |
| Deficient lysyl hydroxylase (impaired collagen crosslinks) | Kyphoscoliotic EDS | PLOD1 | Autosomal recessive (AR) |
| Type I collagen defect | Arthrochalasia EDS | COL1A1, COL1A2 | AD |
| Tenascin-X deficiency | Classical-like EDS | TNXB | AR |


| Area | Approach |
|---|---|
| Joint protection | Physical therapy, low-impact exercise, bracing; avoid high-impact/contact sports |
| Wound care | Careful surgical technique, deep sutures, prolonged closure; warn surgeons before any procedure |
| Vascular EDS | Regular imaging (CT/MRI) of aorta and major vessels; avoid invasive procedures where possible; beta-blockers (celiprolol has RCT evidence for vascular EDS specifically) |
| Pain | Multidisciplinary pain management |
| Cardiac | Echocardiography for valve and aortic root assessment |
| Pregnancy | High-risk obstetric care; vascular EDS carries significant maternal mortality risk |
| Genetics referral | Cascade testing of first-degree relatives |
| Feature | EDS | Marfan Syndrome | Cutis Laxa |
|---|---|---|---|
| Skin recoil after stretching | Yes (snaps back) | Yes | No (hangs loosely) |
| Gene | COL5A1 / COL3A1 etc. | FBN1 (fibrillin-1) | ELN, FBLN5 etc. |
| Tall stature/arachnodactyly | No | Yes | No |
| Coagulation tests | Normal | Normal | Normal |
| Ocular lens dislocation | Occasional | Yes (upward) | No |
give me one liner for derma exam of thus topic mcq point of view
Create a quick-reference MCQ flashcard PDF for EDS subtypes
ls -la /home/daytona/workspace/
mkdir -p /home/daytona/workspace/eds-flashcards
~/eds-flashcards/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import PageBreak
OUTPUT = "/home/daytona/workspace/eds-flashcards/EDS_MCQ_Flashcards.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
NAVY = colors.HexColor("#1A2B5F")
TEAL = colors.HexColor("#0E7B74")
AMBER = colors.HexColor("#E8A317")
CREAM = colors.HexColor("#FDF8EF")
RED = colors.HexColor("#C0392B")
LTGRAY = colors.HexColor("#F4F4F4")
MIDGRAY = colors.HexColor("#D5D5D5")
WHITE = colors.white
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=1.5*cm, rightMargin=1.5*cm,
topMargin=1.8*cm, bottomMargin=1.8*cm,
)
styles = getSampleStyleSheet()
# Custom paragraph styles
def S(name, parent="Normal", **kw):
s = ParagraphStyle(name, parent=styles[parent], **kw)
return s
title_style = S("Title2", fontSize=22, textColor=WHITE, alignment=TA_CENTER, fontName="Helvetica-Bold", spaceAfter=4)
sub_style = S("Sub", fontSize=11, textColor=CREAM, alignment=TA_CENTER, fontName="Helvetica", spaceAfter=2)
section_style = S("SecHead", fontSize=13, textColor=WHITE, alignment=TA_LEFT, fontName="Helvetica-Bold", spaceAfter=2, spaceBefore=2)
q_style = S("Q", fontSize=10, textColor=NAVY, fontName="Helvetica-Bold", spaceAfter=3, leftIndent=4)
ans_style = S("Ans", fontSize=10, textColor=TEAL, fontName="Helvetica-Bold", spaceAfter=2, leftIndent=4)
detail_style = S("Detail", fontSize=9, textColor=colors.HexColor("#333333"), fontName="Helvetica", spaceAfter=1, leftIndent=12)
warn_style = S("Warn", fontSize=9, textColor=RED, fontName="Helvetica-Bold", spaceAfter=1, leftIndent=12)
note_style = S("Note", fontSize=8, textColor=colors.HexColor("#555555"), fontName="Helvetica-Oblique", spaceAfter=1, leftIndent=12)
footer_style = S("Footer", fontSize=7, textColor=colors.HexColor("#888888"), alignment=TA_CENTER)
def section_banner(text, color=NAVY):
"""Coloured banner row acting as section header."""
t = Table([[Paragraph(text, section_style)]], colWidths=[17.5*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("ROUNDEDCORNERS", [4]),
]))
return t
def flashcard(q_num, question, answer, details=None, warning=None, note=None, bg=LTGRAY):
"""Single flashcard block."""
rows = [
[Paragraph(f"Q{q_num}. {question}", q_style)],
[Paragraph(f"✔ {answer}", ans_style)],
]
if details:
for d in details:
rows.append([Paragraph(f"• {d}", detail_style)])
if warning:
rows.append([Paragraph(f"⚠ {warning}", warn_style)])
if note:
rows.append([Paragraph(f"★ {note}", note_style)])
t = Table(rows, colWidths=[17.5*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("LINEBELOW", (0,-1), (-1,-1), 0.5, MIDGRAY),
("ROWBACKGROUNDS",(0,0), (-1,-1), [bg]),
]))
return KeepTogether([t, Spacer(1, 4)])
def subtype_table(data, headers):
"""Coloured reference table."""
col_w = [17.5/len(headers)*cm] * len(headers)
table_data = [headers] + data
t = Table(table_data, colWidths=col_w, repeatRows=1)
style = 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), 8),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LTGRAY]),
("GRID", (0,0), (-1,-1), 0.4, MIDGRAY),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("WORDWRAP", (0,0), (-1,-1), True),
])
t.setStyle(style)
return t
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story = []
# ── Cover banner ─────────────────────────────────────────────────────────────
cover = Table(
[[Paragraph("EHLERS-DANLOS SYNDROMES", title_style)],
[Paragraph("Quick-Reference MCQ Flashcards | Dermatology Board Exam", sub_style)],
[Paragraph("2017 International Classification • High-Yield Points", sub_style)]],
colWidths=[17.5*cm]
)
cover.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 14),
("BOTTOMPADDING", (0,0), (-1,-1), 14),
("LEFTPADDING", (0,0), (-1,-1), 12),
("ROUNDEDCORNERS",[6]),
]))
story.append(cover)
story.append(Spacer(1, 0.4*cm))
# ── SECTION 1: Classification & Genetics ─────────────────────────────────────
story.append(section_banner("SECTION 1 — Classification & Genetics"))
story.append(Spacer(1, 0.2*cm))
cards_s1 = [
(1, "How many subtypes does EDS have (2017 classification)?",
"13 subtypes",
["Previous classification had 6 types (Roman numerals I-VI)",
"2017 reclassification by Malfait et al. is the current standard"],
None,
"Combined incidence ~1 in 5,000 births"),
(2, "Which collagen is defective in Classical EDS?",
"Type V collagen — COL5A1 / COL5A2 genes",
["Inheritance: Autosomal Dominant",
"Most common identifiable gene defect in EDS"],
None,
"Type V collagen regulates fibril diameter"),
(3, "Which collagen is defective in Vascular EDS?",
"Type III collagen — COL3A1 gene",
["Inheritance: Autosomal Dominant",
"COL3A1 = homotrimer; one mutant chain disrupts most fibrils",
">320 different mutations described (missense / exon-skipping)"],
"Most LETHAL subtype — risk of spontaneous arterial/organ rupture",
"Incidence: 1 in 50,000–200,000"),
(4, "Which enzyme is deficient in Kyphoscoliotic EDS?",
"Lysyl hydroxylase (PLOD1 gene)",
["Reduced hydroxylation of lysyl residues in types I & III collagen",
"Interferes with collagen crosslink formation",
"Inheritance: Autosomal Recessive"],
None,
"Only common EDS subtype that is AR due to enzyme deficiency"),
(5, "Which EDS subtype is caused by ADAMTS2 mutation?",
"Dermatosparaxis EDS",
["ADAMTS2 = procollagen N-peptidase",
"Leads to extreme skin fragility and sagging/redundant skin",
"Inheritance: Autosomal Recessive"],
None,
"Dermatosparaxis = 'tearing of skin' in Greek"),
(6, "Which EDS subtype has an UNKNOWN causative gene?",
"Hypermobile EDS (hEDS)",
["Most common EDS subtype overall",
"Diagnosis is purely clinical — no genetic test available",
"~5% show TNXB heterozygous mutations (intermediate phenotype)"],
None,
"Hypermobility + musculoskeletal pain + autonomic features"),
(7, "Classical-like EDS is caused by deficiency of which protein?",
"Tenascin-X (TNXB gene)",
["Inheritance: Autosomal Recessive",
"Phenotype similar to classical EDS but WITHOUT atrophic scars",
"TNXB is located near CYP21A2 (congenital adrenal hyperplasia gene)"],
None,
"Micro-deletions affecting both TNXB + CYP21A2 reported"),
(8, "Which EDS subtype is associated with severe mitral AND aortic valve disease?",
"Cardiac-Valvular EDS",
["Gene: COL1A2 (type I collagen)",
"Inheritance: Autosomal Recessive",
"Progressive valvular insufficiency is the hallmark"],
None,
None),
]
for c in cards_s1:
story.append(flashcard(*c))
story.append(Spacer(1, 0.3*cm))
# ── Subtype quick-reference table ────────────────────────────────────────────
story.append(section_banner("QUICK-REFERENCE TABLE — EDS Subtypes (Key MCQ Points)", color=TEAL))
story.append(Spacer(1, 0.2*cm))
headers = [
Paragraph("<b>Subtype</b>", ParagraphStyle("th", fontSize=8, textColor=WHITE, fontName="Helvetica-Bold")),
Paragraph("<b>Gene / Protein</b>", ParagraphStyle("th", fontSize=8, textColor=WHITE, fontName="Helvetica-Bold")),
Paragraph("<b>Inheritance</b>", ParagraphStyle("th", fontSize=8, textColor=WHITE, fontName="Helvetica-Bold")),
Paragraph("<b>Key Feature / MCQ Hook</b>", ParagraphStyle("th", fontSize=8, textColor=WHITE, fontName="Helvetica-Bold")),
]
cell = lambda txt, bold=False: Paragraph(txt, ParagraphStyle("cell", fontSize=8,
fontName="Helvetica-Bold" if bold else "Helvetica", leading=10))
table_data = [
[cell("Classical",True), cell("COL5A1/COL5A2\n(Type V collagen)"), cell("AD"), cell("Skin hyperextensibility + atrophic 'cigarette paper' scars")],
[cell("Classical-like",True), cell("TNXB\n(Tenascin-X)"), cell("AR"), cell("Like classical but NO atrophic scars")],
[cell("Cardiac-Valvular",True), cell("COL1A2\n(Type I collagen)"), cell("AR"), cell("Severe mitral + aortic valve disease")],
[cell("Vascular",True), cell("COL3A1\n(Type III collagen)"), cell("AD"), cell("Arterial / colon / uterine rupture — MOST LETHAL")],
[cell("Hypermobile",True), cell("Unknown"), cell("AD"), cell("Most COMMON; joint hypermobility dominant; no gene test")],
[cell("Arthrochalasia",True), cell("COL1A1/COL1A2\n(Type I collagen)"), cell("AD"), cell("Congenital bilateral hip dislocation at birth")],
[cell("Dermatosparaxis",True), cell("ADAMTS2\n(procollagen N-peptidase)"),cell("AR"), cell("Extreme skin fragility; sagging redundant skin")],
[cell("Kyphoscoliotic",True), cell("PLOD1\n(Lysyl hydroxylase)"), cell("AR"), cell("Congenital scoliosis + ocular fragility (corneal rupture)")],
[cell("Brittle Cornea",True), cell("ZNF469 / PRDM5"), cell("AR"), cell("Corneal rupture; keratoconus")],
[cell("Spondylodysplastic",True), cell("B4GALT7 / B3GALT6"), cell("AR"), cell("Short stature + skeletal dysplasia")],
[cell("Musculocontractural",True),cell("CHST14 / DSE"), cell("AR"), cell("Multiple congenital contractures + characteristic facies")],
[cell("Myopathic",True), cell("COL12A1\n(Type XII collagen)"), cell("AD/AR"), cell("Congenital hypotonia + muscle atrophy")],
[cell("Periodontal",True), cell("C1R / C1S\n(Complement proteins)"), cell("AD"), cell("Severe early-onset periodontitis + pretibial plaques")],
]
story.append(subtype_table(table_data, headers))
story.append(Spacer(1, 0.4*cm))
story.append(PageBreak())
# ── SECTION 2: Skin Signs ─────────────────────────────────────────────────────
story.append(section_banner("SECTION 2 — Skin Signs & Examination"))
story.append(Spacer(1, 0.2*cm))
cards_s2 = [
(9, "What is the cutoff for positive skin hyperextensibility on volar forearm?",
">1.5 cm on distal forearm / dorsal hands",
[">3 cm at neck, elbow, or knees is also positive",
"Assessed using Remvig et al. criteria",
"Pull skin at non-scarred, non-force-bearing site until resistance"],
None,
"Skin recoils to normal after release — differentiates from cutis laxa"),
(10, "What type of scar is pathognomonic for Classical EDS?",
"Thin, atrophic, 'cigarette paper' / 'papyraceous' scars",
["Wounds gape easily, heal poorly",
"Minor injuries cause disproportionately large gaping defects",
"Surgical repair is extremely difficult due to poor tensile strength"],
None,
None),
(11, "What are molluscoid pseudotumors in EDS?",
"Soft, fibrous subcutaneous nodules over pressure points (e.g., elbows, knees)",
["Consist of fibrous tissue + fat",
"Can calcify over time",
"Seen in Classical EDS"],
None,
"Also called 'spheroids' when calcified"),
(12, "What does routine skin biopsy show in EDS?",
"NORMAL histopathology on light microscopy",
["Electron microscopy (EM) is needed to demonstrate abnormal collagen fibrils",
"EM shows irregular fibril size, 'cauliflower' fibrils in some subtypes"],
None,
"Classic MCQ trap: normal biopsy does NOT rule out EDS"),
(13, "What skin texture is classically described in Classical EDS?",
"Soft, velvety, doughy skin",
["Skin is hyperextensible but NOT lax at rest",
"Contrast with cutis laxa: skin hangs loosely even at rest"],
None,
None),
(14, "What skin finding is characteristic of Vascular EDS?",
"Thin, translucent skin with visible subcutaneous veins",
["Acrogeria: premature aged appearance of hands/feet",
"Characteristic facial features: thin nose, small ears, sunken cheeks",
"Minimal joint hypermobility (unlike other subtypes)"],
"Skin fragility WITHOUT the hyperextensibility typical of other subtypes",
None),
]
for c in cards_s2:
story.append(flashcard(*c))
story.append(Spacer(1, 0.3*cm))
# ── SECTION 3: Labs & Diagnosis ──────────────────────────────────────────────
story.append(section_banner("SECTION 3 — Labs, Diagnosis & Investigations"))
story.append(Spacer(1, 0.2*cm))
cards_s3 = [
(15, "What do platelet function and coagulation tests show in EDS?",
"NORMAL — PT, aPTT, platelets are all normal",
["Bruising results from structural weakness of vessel walls",
"NOT a coagulopathy"],
"High-yield MCQ trap: easy bruising + normal coagulation = EDS",
None),
(16, "What scoring system is used to assess joint hypermobility in EDS?",
"Beighton Score (maximum 9 points)",
["5 maneuvers: little finger extension, thumb to forearm,",
"elbow hyperextension, knee hyperextension, palms flat on floor",
"Score ≥5/9 in adults = generalised joint hypermobility"],
None,
"Beighton score alone is NOT diagnostic — must combine with clinical criteria"),
(17, "What is the preferred genetic investigation for EDS workup?",
"Next-generation sequencing (NGS) panel of known EDS genes",
["Tests multiple EDS-causing genes simultaneously",
"If negative: copy number variant (CNV) analysis or whole-exome sequencing",
"Genetic diagnosis not possible for hEDS (no gene identified)"],
None,
None),
(18, "How is Vascular EDS confirmed biochemically?",
"Type III procollagen analysis from cultured fibroblasts + COL3A1 mutation testing",
["Cultured fibroblasts show reduced type III collagen production",
"Direct COL3A1 sequencing detects >95% of mutations",
"Exon-skipping and missense mutations most common"],
None,
None),
(19, "Which EDS subtype can be diagnosed by measuring urinary hydroxylysine?",
"Kyphoscoliotic EDS — reduced urinary hydroxylysine:lysine ratio",
["Due to deficient lysyl hydroxylase (PLOD1)",
"This biochemical test can screen before genetic confirmation"],
None,
"Neonatal hypotonia + scoliosis + ocular fragility → check urine"),
]
for c in cards_s3:
story.append(flashcard(*c))
story.append(Spacer(1, 0.3*cm))
# ── SECTION 4: Complications ──────────────────────────────────────────────────
story.append(section_banner("SECTION 4 — Complications by Subtype"))
story.append(Spacer(1, 0.2*cm))
cards_s4 = [
(20, "Which EDS subtype causes arterial rupture, colon perforation, uterine rupture?",
"Vascular EDS (COL3A1 mutation)",
["Spontaneous rupture without preceding trauma",
"Medium and large vessels most affected",
"Median survival historically ~50 years"],
"Most common cause of death in EDS overall",
"Avoid invasive procedures; imaging surveillance of aorta essential"),
(21, "Which EDS subtype causes corneal rupture and retinal detachment?",
"Kyphoscoliotic EDS (lysyl hydroxylase deficiency)",
["Ocular fragility is a hallmark feature",
"Also: congenital scoliosis, muscle hypotonia",
"Inheritance: AR"],
None,
None),
(22, "Which EDS subtype presents with congenital bilateral hip dislocation?",
"Arthrochalasia EDS (COL1A1 or COL1A2 mutation)",
["Congenital hip dislocation is the hallmark",
"Severe generalized joint hypermobility",
"Inheritance: AD"],
None,
None),
(23, "Which EDS subtype causes severe periodontitis and pretibial plaques?",
"Periodontal EDS (C1R / C1S mutations)",
["Complement pathway proteins C1r and C1s affected",
"Early-onset severe gingival/periodontal destruction",
"Pretibial hemosiderin plaques are characteristic",
"Inheritance: AD"],
None,
None),
(24, "Diaphragmatic hernia is a known complication of which EDS subtype?",
"Classical EDS",
["Type V collagen defect weakens connective tissue of diaphragm",
"May present in neonates as respiratory distress"],
None,
None),
]
for c in cards_s4:
story.append(flashcard(*c))
story.append(Spacer(1, 0.3*cm))
story.append(PageBreak())
# ── SECTION 5: Differentials & Traps ─────────────────────────────────────────
story.append(section_banner("SECTION 5 — Key Differentials & MCQ Traps"))
story.append(Spacer(1, 0.2*cm))
cards_s5 = [
(25, "How does EDS skin differ from cutis laxa on examination?",
"EDS: skin snaps back after stretching. Cutis laxa: skin hangs loosely.",
["Cutis laxa = elastin defect (ELN, FBLN5 genes)",
"Cutis laxa: skin sags at rest, aged appearance",
"EDS: skin elastic, recoils normally at rest"],
None,
"Mnemonic: EDS = Elastic snap. Cutis Laxa = Loose/Lax and hangs"),
(26, "How do you differentiate EDS from Marfan syndrome?",
"Marfan: FBN1 (fibrillin-1), tall stature, UPWARD lens dislocation, no skin hyperextensibility",
["EDS: collagen gene, normal height, normal lens",
"Marfan: arachnodactyly, dolichocephaly, high-arched palate",
"Both can have aortic root dilation and joint laxity"],
None,
"Ectopia lentis in Marfan = upward; in homocystinuria = downward"),
(27, "A patient has easy bruising but normal PT, aPTT, and platelet count. Diagnosis?",
"Ehlers-Danlos Syndrome (structural vessel wall weakness)",
["Rule out: von Willebrand disease (platelet function analyzer may be abnormal)",
"Rule out: Scurvy (perifollicular hemorrhage, corkscrew hairs)",
"Senile purpura: elderly, dorsal forearms"],
None,
"EDS bruising = structural, not hemostatic"),
(28, "Which EDS subtype has the UNKNOWN gene but is the MOST COMMON?",
"Hypermobile EDS (hEDS)",
["No confirmed causative gene",
"Diagnosis by clinical criteria only (2017 nosology)",
"Associated with dysautonomia, chronic pain, POTS"],
None,
"hEDS ≠ Joint Hypermobility Syndrome (JHS) — they overlap but differ"),
(29, "Celiprolol (beta-blocker) has RCT evidence in which EDS subtype?",
"Vascular EDS — reduces rate of arterial complications",
["Celiprolol is a selective beta-1 blocker with beta-2 agonist properties",
"Reduces shear stress on vessel walls",
"One RCT (Ong et al.) showed 36% vs 50% event rate"],
None,
"Celiprolol specific to vascular EDS; not indicated for other subtypes"),
(30, "Most contortionists are said to have which condition?",
"A mild form of EDS (joint hypermobility)",
["Hypermobile joints allow extreme ranges of motion",
"Joint dislocation is the 'price paid' for virtuosity (Robbins)",
"Beighton score would be very high in these individuals"],
None,
"Classic Robbins exam statement"),
]
for c in cards_s5:
story.append(flashcard(*c))
story.append(Spacer(1, 0.3*cm))
# ── SECTION 6: Management One-Liners ─────────────────────────────────────────
story.append(section_banner("SECTION 6 — Management High-Yield Points"))
story.append(Spacer(1, 0.2*cm))
mgmt_data = [
["Vascular EDS surveillance", "Regular CT/MRI of aorta and major vessels annually"],
["Drug therapy — Vascular EDS", "Celiprolol (RCT evidence); avoid invasive procedures"],
["Wound management", "Deep sutures + prolonged wound closure; warn all surgeons"],
["Joint protection", "Physiotherapy, low-impact exercise, bracing; avoid contact sports"],
["Cardiac workup", "Echocardiography for aortic root dilation + valve assessment"],
["Pregnancy in vascular EDS", "High-risk OB; significant maternal mortality risk"],
["Genetics", "Cascade testing of first-degree relatives after diagnosis"],
["Kyphoscoliotic EDS — Vitamin C", "High-dose Vitamin C may partially support hydroxylation"],
["No curative treatment", "All EDS management is SYMPTOMATIC and PREVENTIVE"],
]
mgmt_headers = [
Paragraph("<b>Area</b>", ParagraphStyle("th2", fontSize=8, textColor=WHITE, fontName="Helvetica-Bold")),
Paragraph("<b>Key Point</b>", ParagraphStyle("th2", fontSize=8, textColor=WHITE, fontName="Helvetica-Bold")),
]
mgmt_cells = [[cell(r[0], bold=True), cell(r[1])] for r in mgmt_data]
t = Table([mgmt_headers] + mgmt_cells, colWidths=[5*cm, 12.5*cm], repeatRows=1)
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTSIZE", (0,0), (-1,-1), 8),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LTGRAY]),
("GRID", (0,0), (-1,-1), 0.4, MIDGRAY),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(t)
story.append(Spacer(1, 0.5*cm))
# ── Footer strip ──────────────────────────────────────────────────────────────
footer_banner = Table(
[[Paragraph("Sources: Robbins & Kumar Basic Pathology • Andrews' Diseases of the Skin • Fitzpatrick's Dermatology • Goldman-Cecil Medicine | Classification: Malfait et al. 2017", footer_style)]],
colWidths=[17.5*cm]
)
footer_banner.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#EBEBEB")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
]))
story.append(footer_banner)
# ── Build ──────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/eds-flashcards && python generate_pdf.py
ls -lh /home/daytona/workspace/eds-flashcards/EDS_MCQ_Flashcards.pdf
EDS MCQ Flashcards
PDF Document · PDF
| Section | Content |
|---|---|
| Section 1 | Classification & Genetics (Q1-8) — all 13 subtypes, genes, inheritance |
| Quick-Reference Table | Full 13-subtype colour-coded table with gene, inheritance, and MCQ hook per row |
| Section 2 | Skin Signs & Examination (Q9-14) — hyperextensibility criteria, scars, biopsy findings |
| Section 3 | Labs, Diagnosis & Investigations (Q15-19) — Beighton score, NGS, biochemical tests |
| Section 4 | Complications by Subtype (Q20-24) — arterial rupture, corneal rupture, hip dislocation |
| Section 5 | Key Differentials & MCQ Traps (Q25-30) — EDS vs cutis laxa, Marfan, bruising traps |
| Section 6 | Management High-Yield Points — celiprolol, surveillance, wound care |