Analyse and give answer's pdf
mkdir -p /home/daytona/workspace/case3-itp && python3 - << 'EOF' from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm from reportlab.lib import colors from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY doc = SimpleDocTemplate( "/home/daytona/workspace/case3-itp/Case3_ITP_Answers.pdf", pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm ) styles = getSampleStyleSheet() # Custom styles title_style = ParagraphStyle( 'CustomTitle', parent=styles['Title'], fontSize=18, textColor=colors.HexColor('#1a3a5c'), spaceAfter=6, alignment=TA_CENTER ) subtitle_style = ParagraphStyle( 'Subtitle', parent=styles['Normal'], fontSize=11, textColor=colors.HexColor('#555555'), spaceAfter=12, alignment=TA_CENTER ) case_style = ParagraphStyle( 'Case', parent=styles['Normal'], fontSize=10.5, textColor=colors.HexColor('#333333'), backColor=colors.HexColor('#f0f4fa'), borderPad=8, spaceAfter=6, leading=16, alignment=TA_JUSTIFY ) q_style = ParagraphStyle( 'Question', parent=styles['Normal'], fontSize=12, textColor=colors.HexColor('#1a3a5c'), fontName='Helvetica-Bold', spaceBefore=14, spaceAfter=6, leading=16 ) heading_style = ParagraphStyle( 'Heading', parent=styles['Normal'], fontSize=11, textColor=colors.HexColor('#c0392b'), fontName='Helvetica-Bold', spaceBefore=8, spaceAfter=4, leading=16 ) body_style = ParagraphStyle( 'Body', parent=styles['Normal'], fontSize=10.5, textColor=colors.HexColor('#222222'), spaceAfter=5, leading=15, alignment=TA_JUSTIFY ) bullet_style = ParagraphStyle( 'Bullet', parent=styles['Normal'], fontSize=10.5, textColor=colors.HexColor('#222222'), leftIndent=16, spaceAfter=3, leading=15, bulletFontName='Helvetica', bulletIndent=4 ) ref_style = ParagraphStyle( 'Ref', parent=styles['Normal'], fontSize=9, textColor=colors.HexColor('#888888'), spaceAfter=2, leading=13, leftIndent=10 ) story = [] # Title story.append(Paragraph("Clinical Case Analysis", title_style)) story.append(Paragraph("Case 3 - Pediatric Hematology", subtitle_style)) story.append(HRFlowable(width="100%", thickness=2, color=colors.HexColor('#1a3a5c'))) story.append(Spacer(1, 10)) # Case Vignette Box story.append(Paragraph("Case Vignette", heading_style)) case_data = [ [Paragraph("<b>Case 3:</b> A 9 year boy with h/o recurrent epistaxis since 2 days brought to hospital by his parents. There was no other significant history found.<br/><br/>" "On examination, multiple petechiae present over arms and lower limbs. Coagulation profile was normal.<br/><br/>" "<b>CBC shows:</b> Hb: 10.2 gm/dl | WBC: 5000 | Platelet: 2 Lakh (2,00,000/µL)", case_style)] ] case_table = Table(case_data, colWidths=[17*cm]) case_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#f0f4fa')), ('BOX', (0,0), (-1,-1), 1, colors.HexColor('#1a3a5c')), ('LEFTPADDING', (0,0), (-1,-1), 12), ('RIGHTPADDING', (0,0), (-1,-1), 12), ('TOPPADDING', (0,0), (-1,-1), 10), ('BOTTOMPADDING', (0,0), (-1,-1), 10), ])) story.append(case_table) story.append(Spacer(1, 10)) # ---- Q1 ---- story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#cccccc'))) story.append(Paragraph("Q.1: What is your probable diagnosis?", q_style)) story.append(Paragraph("<b>Probable Diagnosis: Immune Thrombocytopenic Purpura (ITP)</b>", heading_style)) story.append(Paragraph("ITP (also called Idiopathic Thrombocytopenic Purpura) is an autoimmune disorder characterized by a low platelet count and mucocutaneous/petechial bleeding. It is the <b>most common cause of thrombocytopenia in children</b> and is a diagnosis of exclusion.", body_style)) story.append(Paragraph("Reasoning from the clinical features:", body_style)) bullets_q1 = [ "<b>Petechiae over arms and lower limbs</b> - classic mucocutaneous bleeding in thrombocytopenia", "<b>Recurrent epistaxis</b> - mucosal bleeding characteristic of platelet-type bleeding", "<b>Normal coagulation profile (PT, aPTT)</b> - rules out coagulation factor deficiencies (hemophilia, DIC, VWD)", "<b>Normal WBC (5000/µL)</b> - no evidence of leukemia or bone marrow failure", "<b>Mild anemia (Hb 10.2 gm/dl)</b> - likely due to blood loss from epistaxis", "<b>Platelet 2 lakh (200,000/µL)</b> - mild thrombocytopenia (note: normal is 1.5-4 lakh); in acute ITP platelet counts can be <50,000/µL but mild cases also occur", "<b>Age 9 years (peak age ~5 years)</b> - childhood ITP peaks in young children after infections", "<b>No hepatosplenomegaly mentioned</b> - splenomegaly is uncommon in ITP", ] for b in bullets_q1: story.append(Paragraph(f"• {b}", bullet_style)) story.append(Spacer(1, 6)) story.append(Paragraph("Pathophysiology: Antiplatelet IgG autoantibodies (produced in spleen) opsonize platelets, which are then cleared by tissue macrophages via Fc receptor interaction - predominantly in the spleen and liver.", body_style)) # ---- Q2 ---- story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#cccccc'))) story.append(Paragraph("Q.2: Which other investigations are done in this patient for final diagnosis?", q_style)) story.append(Paragraph("<b>ITP is a diagnosis of exclusion.</b> The following investigations are required:", body_style)) inv_data = [ [Paragraph("<b>Investigation</b>", body_style), Paragraph("<b>Purpose / Expected Finding in ITP</b>", body_style)], [Paragraph("Peripheral Blood Smear (PBS)", body_style), Paragraph("Large, immature platelets (megathrombocytes/megakaryocyte fragments). Confirms true thrombocytopenia (rules out pseudothrombocytopenia from platelet clumping). Absence of schistocytes (rules out TTP/HUS), blasts (rules out leukemia).", body_style)], [Paragraph("Bone Marrow Biopsy / Aspiration", body_style), Paragraph("Increased megakaryocytes (compensatory). Rules out leukemia, aplastic anemia, myelodysplasia. Usually done only if atypical features or before splenectomy.", body_style)], [Paragraph("Antiplatelet Antibody Test (IgG)", body_style), Paragraph("Detects anti-platelet IgG. Supportive but not specific - not required for diagnosis.", body_style)], [Paragraph("ANA / Anti-dsDNA", body_style), Paragraph("To rule out Secondary ITP from Systemic Lupus Erythematosus (SLE)", body_style)], [Paragraph("HIV & Hepatitis C serology", body_style), Paragraph("Viral-induced thrombocytopenia must be excluded", body_style)], [Paragraph("Thyroid function tests (T3, T4, TSH)", body_style), Paragraph("Thyroid disorders can cause thrombocytopenia", body_style)], [Paragraph("PT / aPTT / Bleeding Time (already done)", body_style), Paragraph("Normal in ITP - confirms isolated platelet problem", body_style)], [Paragraph("Drug history review", body_style), Paragraph("Certain antibiotics, antihypertensives, anti-inflammatories, antidepressants can cause drug-induced thrombocytopenia", body_style)], [Paragraph("Renal function tests / Urinalysis", body_style), Paragraph("To rule out HUS (haemolytic uraemic syndrome)", body_style)], [Paragraph("Response to steroids (therapeutic trial)", body_style), Paragraph("Rapid response to steroids is consistent with ITP. Poor response but good response to transfused platelets suggests inherited syndrome.", body_style)], ] inv_table = Table(inv_data, colWidths=[5.5*cm, 11.5*cm]) inv_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3a5c')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#f9f9f9'), colors.HexColor('#eef2f7')]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#cccccc')), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ])) story.append(inv_table) # ---- Q3 ---- story.append(Spacer(1, 8)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#cccccc'))) story.append(Paragraph("Q.3: What is the prognosis of this patient?", q_style)) story.append(Paragraph("<b>Prognosis of Childhood ITP is generally EXCELLENT:</b>", heading_style)) prog_bullets = [ "<b>Spontaneous remission in ~80-90% of children</b> within 6-12 months without treatment.", "<b>Acute ITP</b> (most common in children): Self-limiting, typically resolves in weeks to months. Often follows a viral illness (post-infectious immune response).", "<b>Chronic ITP</b> (platelet count <150,000 for >12 months): Occurs in ~10-20% of children. More common if onset is insidious, older age, or in adolescent girls.", "<b>Platelet count of 2 lakh (200,000)</b> in this case is actually near-normal. Severe bleeding risk arises when platelets fall below 10,000/µL.", "<b>Intracranial hemorrhage</b> (most feared complication) occurs in ~1% and is usually early in the disease.", "<b>No increased mortality</b> in uncomplicated childhood ITP.", ] for b in prog_bullets: story.append(Paragraph(f"• {b}", bullet_style)) story.append(Spacer(1, 8)) story.append(Paragraph("Management & Prognosis by Treatment Response:", body_style)) prog_data = [ [Paragraph("<b>Clinical Scenario</b>", body_style), Paragraph("<b>Prognosis</b>", body_style)], [Paragraph("Acute ITP, platelet >30,000, no major bleeding", body_style), Paragraph("Watch and wait. Excellent - spontaneous resolution in >80%", body_style)], [Paragraph("Requires oral prednisone (1-1.5 mg/kg/day)", body_style), Paragraph("Good - response in 50-75%; relapses common", body_style)], [Paragraph("IV Immunoglobulin (for severe cases)", body_style), Paragraph("Immediate boost but sustained remission not guaranteed", body_style)], [Paragraph("Rituximab (anti-CD20)", body_style), Paragraph("Initial response 63%; 31% response at 2 years", body_style)], [Paragraph("Splenectomy (refractory cases)", body_style), Paragraph("Permanent remission in 75-85%; delayed until age >4 years", body_style)], ] prog_table = Table(prog_data, colWidths=[8*cm, 9*cm]) prog_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3a5c')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#f9f9f9'), colors.HexColor('#eef2f7')]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#cccccc')), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ])) story.append(prog_table) # Summary Box story.append(Spacer(1, 12)) story.append(HRFlowable(width="100%", thickness=2, color=colors.HexColor('#1a3a5c'))) story.append(Spacer(1, 6)) summary_data = [[ Paragraph( "<b>Summary:</b> This 9-year-old boy most likely has <b>Acute ITP</b> - an autoimmune thrombocytopenic disorder. " "Key differentiating features: isolated thrombocytopenia + normal coagulation profile + normal WBC + petechiae + epistaxis. " "Final diagnosis requires peripheral smear and exclusion of secondary causes. " "<b>Prognosis is excellent - >80% of children achieve spontaneous remission within 6-12 months.</b>", body_style ) ]] sum_table = Table(summary_data, colWidths=[17*cm]) sum_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#fff8e1')), ('BOX', (0,0), (-1,-1), 1.5, colors.HexColor('#f39c12')), ('LEFTPADDING', (0,0), (-1,-1), 12), ('RIGHTPADDING', (0,0), (-1,-1), 12), ('TOPPADDING', (0,0), (-1,-1), 10), ('BOTTOMPADDING', (0,0), (-1,-1), 10), ])) story.append(sum_table) # References story.append(Spacer(1, 10)) story.append(Paragraph("References:", ParagraphStyle('RefHead', parent=styles['Normal'], fontSize=9, textColor=colors.HexColor('#555'), fontName='Helvetica-Bold'))) story.append(Paragraph("• Schwartz's Principles of Surgery, 11th Edition - Chapter 34: Platelet Disorders", ref_style)) story.append(Paragraph("• Quick Compendium of Clinical Pathology, 5th Edition - Thrombocytopenia in Children", ref_style)) doc.build(story) print("PDF created successfully!") EOF
How can it be ITP with normal platelet count ? Is it Glanzman thromboasthenia?
| Finding | ITP | This Patient |
|---|---|---|
| Platelet count | Low (<1 lakh) | 2 lakh = NORMAL |
| Coagulation profile | Normal | Normal |
| Feature | Finding | Interpretation |
|---|---|---|
| Epistaxis + Petechiae | Present | Mucocutaneous bleeding = platelet-type bleeding |
| Platelet count | 2 Lakh (NORMAL) | Platelet number is adequate |
| Coagulation profile | Normal (PT, aPTT) | Coagulation factors intact |
| WBC | 5000 (Normal) | No leukemia/infection |
| Hb | 10.2 (mild anemia) | Due to blood loss |
| Investigation | Expected Finding in GT |
|---|---|
| Peripheral Blood Smear | Normal platelet count, normal platelet morphology and size |
| Bleeding Time (Ivy/Duke) | Prolonged - classic finding in all platelet function disorders |
| Platelet Aggregation Studies (LTA) | Absent/markedly reduced aggregation with ALL agonists (ADP, collagen, epinephrine, arachidonic acid, thrombin) - the diagnostic hallmark |
| Ristocetin-induced aggregation | Normal - GPIb/IX/V is intact, so vWF-mediated agglutination is preserved |
| Clot Retraction Test | Abnormal/absent - GPIIb/IIIa interacts with platelet cytoskeleton; impaired in GT |
| Flow Cytometry | Absent or markedly reduced GPIIb/IIIa (CD41/CD61) on platelet surface - confirmatory |
| Genetic Testing (ITGA2B/ITGB3) | Identifies specific mutations; confirms diagnosis |
| PIA1 antigen | Decreased/absent - PIA1 is associated with GPIIb/IIIa |
| PT, aPTT | Normal (rules out coagulation factor disorders) |
| vWF antigen + activity | Normal (rules out von Willebrand Disease) |
| Feature | Glanzmann Thrombasthenia | Bernard-Soulier Syndrome | vWD | ITP |
|---|---|---|---|---|
| Platelet count | Normal | Low (macro-thrombocytopenia) | Normal | Low |
| Platelet size | Normal | Large | Normal | Large |
| Aggregation with ADP | Absent | Normal | Normal | Normal |
| Aggregation with Ristocetin | Normal | Absent | Reduced | Normal |
| Coagulation | Normal | Normal | Normal/↑aPTT | Normal |
| Inheritance | AR | AR | AD/AR | Acquired |
Is it so ? Isn't it look like von wilebrand disease type 1 ?
"In type 1 vWD: FVIII is decreased or normal, but most importantly aPTT is typically prolonged or borderline because vWF carries Factor VIII."
- Goldman-Cecil Medicine, Table 59-1
| Lab | vWD Type 1 | This Patient |
|---|---|---|
| Platelet count | Normal | Normal ✓ |
| PT | Normal | Normal ✓ |
| aPTT | Prolonged or borderline (due to low Factor VIII) | Normal ✗ |
| Bleeding time | Prolonged | Not mentioned |
"In type 1 vWD, FVIII may be decreased or NORMAL - aPTT might be only borderline elevated or even normal in very mild cases."
| Feature | vWD Type 1 | Glanzmann Thrombasthenia | This Patient |
|---|---|---|---|
| Platelet count | Normal | Normal | Normal ✓ |
| PT | Normal | Normal | Normal ✓ |
| aPTT | Prolonged/borderline | Normal | Normal (stated) |
| Petechiae | Unusual - more bruising/ecchymosis | Classic | Petechiae ✓ |
| Bleeding time | Prolonged | Prolonged | Not done |
| Platelet aggregation | Reduced ristocetin response | Absent all agonists except ristocetin | Not done |
| Inheritance | Autosomal dominant | Autosomal recessive | Not stated |
| Diagnosis | Fits? | Key Conflict |
|---|---|---|
| Glanzmann Thrombasthenia | Best fit | Normal coag, normal platelets, petechiae, epistaxis from childhood, severe mucocutaneous bleeding |
| vWD Type 1 | Partial fit | aPTT should be prolonged; petechiae are unusual; this is typically mild disease, rarely presents with petechiae |
| ITP | Does not fit | Platelet count is normal |
"Bleeding tends to be severe since childhood... patients exhibit normal platelet counts and normal platelet structure... responses to ADP, collagen, epinephrine, and arachidonic acid are very depressed or absent." - Goldman-Cecil Medicine
Update the PDF with corrected analysis (Glanzmann vs vWD)
python3 - << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm from reportlab.lib import colors from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, KeepTogether) from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY doc = SimpleDocTemplate( "/home/daytona/workspace/case3-itp/Case3_Corrected_Analysis.pdf", pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm ) styles = getSampleStyleSheet() # ── Styles ────────────────────────────────────────────── title_s = ParagraphStyle('T', parent=styles['Title'], fontSize=18, textColor=colors.HexColor('#1a3a5c'), spaceAfter=4, alignment=TA_CENTER) subtitle_s = ParagraphStyle('ST', parent=styles['Normal'], fontSize=11, textColor=colors.HexColor('#555'), spaceAfter=10, alignment=TA_CENTER) section_s = ParagraphStyle('SEC', parent=styles['Normal'], fontSize=13, textColor=colors.white, fontName='Helvetica-Bold', spaceBefore=10, spaceAfter=4, alignment=TA_LEFT) q_s = ParagraphStyle('Q', parent=styles['Normal'], fontSize=12, textColor=colors.HexColor('#1a3a5c'), fontName='Helvetica-Bold', spaceBefore=12, spaceAfter=5) red_s = ParagraphStyle('RED', parent=styles['Normal'], fontSize=11, textColor=colors.HexColor('#c0392b'), fontName='Helvetica-Bold', spaceBefore=6, spaceAfter=4) green_s = ParagraphStyle('GRN', parent=styles['Normal'], fontSize=11, textColor=colors.HexColor('#1a7a3c'), fontName='Helvetica-Bold', spaceBefore=6, spaceAfter=4) body_s = ParagraphStyle('B', parent=styles['Normal'], fontSize=10.5, textColor=colors.HexColor('#222'), spaceAfter=5, leading=15, alignment=TA_JUSTIFY) bullet_s = ParagraphStyle('BUL', parent=styles['Normal'], fontSize=10.5, textColor=colors.HexColor('#222'), leftIndent=14, spaceAfter=3, leading=15) small_s = ParagraphStyle('SM', parent=styles['Normal'], fontSize=9, textColor=colors.HexColor('#666'), spaceAfter=2, leading=12, leftIndent=8) def section_banner(text, color='#1a3a5c'): data = [[Paragraph(text, section_s)]] t = Table(data, colWidths=[17*cm]) t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), colors.HexColor(color)), ('LEFTPADDING', (0,0), (-1,-1), 10), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ])) return t def info_box(text, bg='#f0f4fa', border='#1a3a5c'): data = [[Paragraph(text, body_s)]] t = Table(data, colWidths=[17*cm]) t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), colors.HexColor(bg)), ('BOX', (0,0), (-1,-1), 1.2, colors.HexColor(border)), ('LEFTPADDING', (0,0), (-1,-1), 12), ('RIGHTPADDING', (0,0), (-1,-1), 12), ('TOPPADDING', (0,0), (-1,-1), 8), ('BOTTOMPADDING', (0,0), (-1,-1), 8), ])) return t story = [] # ── TITLE ──────────────────────────────────────────────── story.append(Paragraph("Clinical Case Analysis — Case 3", title_s)) story.append(Paragraph("Corrected & Updated Analysis | Pediatric Bleeding Disorder", subtitle_s)) story.append(HRFlowable(width="100%", thickness=2.5, color=colors.HexColor('#1a3a5c'))) story.append(Spacer(1, 8)) # ── CASE VIGNETTE ──────────────────────────────────────── story.append(section_banner("Case Vignette")) story.append(Spacer(1, 4)) story.append(info_box( "<b>Case 3:</b> A 9-year-old boy with h/o <b>recurrent epistaxis since 2 days</b>, " "brought to hospital by parents. No other significant history.<br/><br/>" "<b>Examination:</b> Multiple <b>petechiae over arms and lower limbs.</b> " "Coagulation profile was <b>normal.</b><br/><br/>" "<b>CBC:</b> Hb: 10.2 gm/dl | WBC: 5000/µL (Normal) " " | Platelet: <b>2 Lakh = 2,00,000/µL (NORMAL)</b>" )) story.append(Spacer(1, 8)) # ── CORRECTION NOTE ───────────────────────────────────── story.append(section_banner("⚠ Initial Diagnosis (ITP) — Why It Was WRONG", '#c0392b')) story.append(Spacer(1, 4)) story.append(info_box( "<b>ITP (Immune Thrombocytopenic Purpura) does NOT fit this case.</b><br/><br/>" "ITP requires a <b>LOW platelet count (<1 lakh)</b> as its cardinal feature — caused by " "antiplatelet IgG antibodies clearing platelets in the spleen.<br/><br/>" "This patient has <b>Platelet = 2 Lakh (200,000/µL) — which is NORMAL.</b> " "ITP cannot explain bleeding with a normal platelet count. " "The correct approach is to evaluate for a <b>platelet FUNCTION disorder.</b>", bg='#fff0f0', border='#c0392b' )) story.append(Spacer(1, 8)) # ── CLINICAL REASONING ─────────────────────────────────── story.append(section_banner("Clinical Reasoning: Platelet Function Disorder Pattern")) story.append(Spacer(1, 4)) reasoning_data = [ [Paragraph("<b>Finding</b>", body_s), Paragraph("<b>Value</b>", body_s), Paragraph("<b>Interpretation</b>", body_s)], [Paragraph("Petechiae + Epistaxis", body_s), Paragraph("Present", body_s), Paragraph("Mucocutaneous bleeding = platelet-type pattern", body_s)], [Paragraph("Platelet Count", body_s), Paragraph("<b>2 Lakh — NORMAL</b>", body_s), Paragraph("Adequate number → function must be defective", body_s)], [Paragraph("PT / aPTT (Coag profile)", body_s), Paragraph("<b>Normal</b>", body_s), Paragraph("Coagulation factors intact → rules out hemophilia, DIC", body_s)], [Paragraph("WBC", body_s), Paragraph("5000 (Normal)", body_s), Paragraph("No leukemia / bone marrow failure", body_s)], [Paragraph("Hb", body_s), Paragraph("10.2 gm/dl (mild ↓)", body_s), Paragraph("Likely secondary to blood loss (epistaxis)", body_s)], ] rt = Table(reasoning_data, colWidths=[4.5*cm, 3.5*cm, 9*cm]) rt.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3a5c')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#f9f9f9'), colors.HexColor('#eef2f7')]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#cccccc')), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ])) story.append(rt) story.append(Spacer(1, 4)) story.append(info_box( "<b>Pattern = Mucocutaneous bleeding + Normal platelet COUNT + Normal coagulation " "→ Platelet FUNCTION disorder</b>", bg='#fffde7', border='#f39c12' )) story.append(Spacer(1, 8)) # ── Q1 ─────────────────────────────────────────────────── story.append(section_banner("Q.1: Probable Diagnosis")) story.append(Spacer(1, 4)) story.append(Paragraph("<b>Primary Diagnosis: Glanzmann Thrombasthenia (GT)</b>", green_s)) story.append(body_s and Paragraph( "Glanzmann Thrombasthenia is a rare <b>autosomal recessive</b> disorder caused by " "mutations in <b>ITGA2B / ITGB3 genes</b> (chromosome 17), encoding the " "<b>GPIIb/IIIa (fibrinogen receptor)</b> complex on the platelet surface.", body_s)) story.append(Spacer(1,4)) story.append(Paragraph("Pathophysiology:", red_s)) for b in [ "GPIIb/IIIa binds fibrinogen to cross-link adjacent platelets during aggregation", "In GT: GPIIb/IIIa is absent or severely deficient → platelets can adhere (GPIb intact) but <b>CANNOT aggregate</b>", "Result: severe mucocutaneous bleeding with <b>completely normal platelet count and normal platelet morphology</b>", "Normal coagulation profile — GT does not affect the coagulation cascade", ]: story.append(Paragraph(f"• {b}", bullet_s)) story.append(Spacer(1, 6)) story.append(Paragraph("Why GT fits this child:", red_s)) for b in [ "<b>Recurrent epistaxis since childhood</b> — GT classically presents with severe mucosal bleeding from childhood", "<b>Petechiae on arms and lower limbs</b> — hallmark of platelet aggregation failure; each tiny vessel leak is unplugged", "<b>Normal platelet count (2 lakh)</b> — GT hallmark: platelets are normal in number and structure but non-functional", "<b>Normal coagulation (PT/aPTT normal)</b> — coagulation factors are completely unaffected in GT", "<b>More common in consanguineous populations</b> — autosomal recessive; higher prevalence where consanguinity is common", ]: story.append(Paragraph(f"• {b}", bullet_s)) story.append(Spacer(1, 8)) # ── GLANZMANN vs vWD COMPARISON ────────────────────────── story.append(section_banner("Why NOT von Willebrand Disease Type 1?", '#7d3c98')) story.append(Spacer(1, 4)) story.append(body_s and Paragraph( "vWD Type 1 is the <b>most common inherited bleeding disorder</b> (~1% prevalence) " "and was raised as an alternative diagnosis. Here is a systematic comparison:", body_s)) story.append(Spacer(1, 5)) comp_data = [ [Paragraph("<b>Feature</b>", body_s), Paragraph("<b>vWD Type 1</b>", body_s), Paragraph("<b>Glanzmann Thrombasthenia</b>", body_s), Paragraph("<b>This Patient</b>", body_s)], [Paragraph("Platelet count", body_s), Paragraph("Normal", body_s), Paragraph("Normal", body_s), Paragraph("Normal ✓", body_s)], [Paragraph("PT", body_s), Paragraph("Normal", body_s), Paragraph("Normal", body_s), Paragraph("Normal ✓", body_s)], [Paragraph("aPTT", body_s), Paragraph("<b>Prolonged / borderline</b>\n(vWF carries FVIII)", body_s), Paragraph("Normal", body_s), Paragraph("<b>Normal ✗ for vWD</b>", body_s)], [Paragraph("Petechiae", body_s), Paragraph("Uncommon\n(bruising/ecchymosis more typical)", body_s), Paragraph("<b>Classic feature</b>", body_s), Paragraph("<b>Petechiae present ✓ GT</b>", body_s)], [Paragraph("Bleeding time", body_s), Paragraph("Prolonged", body_s), Paragraph("Prolonged", body_s), Paragraph("Not done", body_s)], [Paragraph("Platelet aggregation\n(ADP, collagen)", body_s), Paragraph("Normal or mildly ↓\n(ristocetin ↓)", body_s), Paragraph("<b>Absent — all agonists\nexcept ristocetin</b>", body_s), Paragraph("Not done", body_s)], [Paragraph("Ristocetin\naggregation", body_s), Paragraph("Reduced", body_s), Paragraph("Normal (GPIb intact)", body_s), Paragraph("Not done", body_s)], [Paragraph("Clot retraction", body_s), Paragraph("Normal", body_s), Paragraph("<b>Absent/abnormal</b>", body_s), Paragraph("Not done", body_s)], [Paragraph("Inheritance", body_s), Paragraph("Autosomal Dominant", body_s), Paragraph("Autosomal Recessive", body_s), Paragraph("Not stated", body_s)], [Paragraph("Severity in childhood", body_s), Paragraph("Usually mild", body_s), Paragraph("<b>Severe from childhood</b>", body_s), Paragraph("Significant bleeding ✓ GT", body_s)], ] ct = Table(comp_data, colWidths=[3.5*cm, 4*cm, 5*cm, 4.5*cm]) ct.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#7d3c98')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('BACKGROUND', (3,1), (3,-1), colors.HexColor('#eafaf1')), ('ROWBACKGROUNDS', (0,1), (2,-1), [colors.HexColor('#f9f9f9'), colors.HexColor('#f3edf7')]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#cccccc')), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('LEFTPADDING', (0,0), (-1,-1), 7), ('RIGHTPADDING', (0,0), (-1,-1), 7), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('FONTSIZE', (0,0), (-1,-1), 9.5), ])) story.append(ct) story.append(Spacer(1, 5)) story.append(info_box( "<b>Key discriminator:</b> The case states the <b>coagulation profile is NORMAL</b>. " "In vWD Type 1, vWF carries Factor VIII — reduced vWF → reduced FVIII → " "<b>prolonged or borderline aPTT.</b> A completely normal aPTT argues against vWD.<br/><br/>" "Additionally, <b>petechiae are unusual in vWD</b> (which typically causes bruising, " "ecchymoses, menorrhagia) but are <b>classic in Glanzmann Thrombasthenia</b> where " "individual platelet plugs completely fail to form.", bg='#f3edf7', border='#7d3c98' )) story.append(Spacer(1, 8)) # ── Q2 ─────────────────────────────────────────────────── story.append(section_banner("Q.2: Investigations for Final Diagnosis")) story.append(Spacer(1, 4)) story.append(Paragraph( "Investigations are in two tiers — <b>Screening tests</b> (confirm platelet function " "disorder) and <b>Confirmatory tests</b> (diagnose GT specifically):", body_s)) story.append(Spacer(1,4)) inv_data = [ [Paragraph("<b>Investigation</b>", body_s), Paragraph("<b>Expected in GT</b>", body_s), Paragraph("<b>Purpose</b>", body_s)], # Tier 1 [Paragraph("SCREENING TIER", ParagraphStyle('BT', parent=styles['Normal'], fontSize=9, fontName='Helvetica-Bold', textColor=colors.white)), Paragraph("", body_s), Paragraph("", body_s)], [Paragraph("Peripheral Blood Smear", body_s), Paragraph("Normal platelet count, normal morphology; no schistocytes, no blasts", body_s), Paragraph("Confirms isolated platelet dysfunction; rules out TTP, leukemia", body_s)], [Paragraph("Bleeding Time (Ivy / PFA-100)", body_s), Paragraph("<b>Prolonged</b>", body_s), Paragraph("Sensitive screen for platelet function disorders", body_s)], [Paragraph("PT, aPTT, TT", body_s), Paragraph("All <b>Normal</b>", body_s), Paragraph("Rules out coagulation factor defects, hemophilia, vWD Type 2N", body_s)], # Tier 2 [Paragraph("CONFIRMATORY TIER", ParagraphStyle('BT2', parent=styles['Normal'], fontSize=9, fontName='Helvetica-Bold', textColor=colors.white)), Paragraph("", body_s), Paragraph("", body_s)], [Paragraph("Platelet Aggregation Studies (LTA)", body_s), Paragraph("<b>Absent aggregation</b> with ADP, collagen, epinephrine, arachidonic acid.\nNormal with ristocetin.", body_s), Paragraph("<b>Diagnostic hallmark of GT</b> — distinguishes from all other disorders", body_s)], [Paragraph("Clot Retraction Test", body_s), Paragraph("<b>Absent / severely abnormal</b>", body_s), Paragraph("GPIIb/IIIa mediates clot retraction via cytoskeletal interaction", body_s)], [Paragraph("Flow Cytometry (CD41/CD61)", body_s), Paragraph("<b>Absent or markedly ↓ GPIIb/IIIa</b> on platelet surface", body_s), Paragraph("Confirmatory; classifies as Type 1 (<5%), Type 2 (10-20%), Type 3 (variant)", body_s)], [Paragraph("Genetic Testing (ITGA2B / ITGB3)", body_s), Paragraph("Identifies specific mutation", body_s), Paragraph("Definitive confirmation; useful for family screening", body_s)], # To exclude vWD [Paragraph("TO EXCLUDE vWD", ParagraphStyle('BT3', parent=styles['Normal'], fontSize=9, fontName='Helvetica-Bold', textColor=colors.white)), Paragraph("", body_s), Paragraph("", body_s)], [Paragraph("vWF Antigen level", body_s), Paragraph("Normal in GT", body_s), Paragraph("Low in vWD Type 1 (< 30%); excludes vWD", body_s)], [Paragraph("vWF Ristocetin Cofactor Activity", body_s), Paragraph("Normal in GT", body_s), Paragraph("Reduced in vWD; helps classify type", body_s)], [Paragraph("Factor VIII activity", body_s), Paragraph("Normal in GT", body_s), Paragraph("Reduced in vWD (vWF is FVIII carrier); explains any aPTT prolongation", body_s)], ] it = Table(inv_data, colWidths=[4.2*cm, 5.8*cm, 7*cm]) tier_rows = [1, 5, 10] it.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3a5c')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('BACKGROUND', (0,1), (-1,1), colors.HexColor('#2980b9')), ('BACKGROUND', (0,5), (-1,5), colors.HexColor('#2980b9')), ('BACKGROUND', (0,10), (-1,10), colors.HexColor('#7d3c98')), ('TEXTCOLOR', (0,1), (-1,1), colors.white), ('TEXTCOLOR', (0,5), (-1,5), colors.white), ('TEXTCOLOR', (0,10), (-1,10), colors.white), ('ROWBACKGROUNDS', (0,2), (-1,4), [colors.HexColor('#f9f9f9'), colors.HexColor('#eef2f7')]), ('ROWBACKGROUNDS', (0,6), (-1,9), [colors.HexColor('#f9f9f9'), colors.HexColor('#eef2f7')]), ('ROWBACKGROUNDS', (0,11), (-1,13), [colors.HexColor('#f8f0ff'), colors.HexColor('#f3e5ff')]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#cccccc')), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('LEFTPADDING', (0,0), (-1,-1), 7), ('RIGHTPADDING', (0,0), (-1,-1), 7), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('FONTSIZE', (0,0), (-1,-1), 9.5), ('SPAN', (0,1), (-1,1)), ('SPAN', (0,5), (-1,5)), ('SPAN', (0,10), (-1,10)), ])) story.append(it) story.append(Spacer(1, 8)) # ── Q3 ─────────────────────────────────────────────────── story.append(section_banner("Q.3: Prognosis of Glanzmann Thrombasthenia")) story.append(Spacer(1, 4)) story.append(info_box( "<b>Unlike ITP (which can resolve spontaneously), Glanzmann Thrombasthenia is a " "LIFELONG genetic disorder. No spontaneous remission occurs.</b>", bg='#fff0f0', border='#c0392b' )) story.append(Spacer(1, 5)) story.append(Paragraph("Prognosis Summary:", red_s)) for b in [ "<b>Variable severity</b> — even within the same genotype; ranges from mild to severe recurrent bleeds", "<b>Epistaxis and gingival bleeding</b> are the most frequent lifelong problems", "<b>Spontaneous intracranial hemorrhage</b> — rare (~1%) but the most feared complication", "<b>Normal platelet count throughout life</b> — but platelets remain non-functional", "<b>Normal life expectancy</b> possible with careful management, avoidance of NSAIDs/aspirin and trauma", "<b>Females</b> face added risk of severe menorrhagia at menarche — hormonal management needed", "<b>Alloimmunization risk</b> with repeated platelet transfusions — patient may develop anti-GPIIb/IIIa antibodies, making future transfusions ineffective", ]: story.append(Paragraph(f"• {b}", bullet_s)) story.append(Spacer(1, 6)) prog_data = [ [Paragraph("<b>Clinical Situation</b>", body_s), Paragraph("<b>Management & Prognosis</b>", body_s)], [Paragraph("Minor mucosal bleeding (epistaxis, gum bleed)", body_s), Paragraph("Local measures + antifibrinolytics (tranexamic acid). Good control.", body_s)], [Paragraph("Moderate bleeding episode", body_s), Paragraph("Platelet transfusion — effective while patient has no alloantibodies", body_s)], [Paragraph("Alloimmunized patient refractory to platelets", body_s), Paragraph("<b>Recombinant Factor VIIa (rFVIIa)</b> — bypasses need for GPIIb/IIIa", body_s)], [Paragraph("Severe / refractory GT", body_s), Paragraph("<b>Hematopoietic Stem Cell Transplantation (HSCT)</b> — the ONLY cure", body_s)], [Paragraph("DDAVP (Desmopressin)", body_s), Paragraph("Useful in vWD — <b>NOT effective in GT</b> (vWF levels are normal)", body_s)], ] pt = Table(prog_data, colWidths=[6*cm, 11*cm]) pt.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a3a5c')), ('TEXTCOLOR', (0,0), (-1,0), colors.white), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#f9f9f9'), colors.HexColor('#eef2f7')]), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor('#cccccc')), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('FONTSIZE', (0,0), (-1,-1), 10), ])) story.append(pt) story.append(Spacer(1, 10)) # ── FINAL SUMMARY BOX ──────────────────────────────────── story.append(HRFlowable(width="100%", thickness=2, color=colors.HexColor('#1a3a5c'))) story.append(Spacer(1, 6)) sum_data = [[Paragraph( "<b>FINAL SUMMARY</b><br/><br/>" "This 9-year-old boy has <b>Glanzmann Thrombasthenia</b> — an autosomal recessive " "platelet function disorder (GPIIb/IIIa deficiency).<br/><br/>" "• <b>NOT ITP</b> — platelet count is normal (2 lakh); ITP requires low platelets<br/>" "• <b>NOT vWD Type 1</b> — aPTT is normal; vWD Type 1 typically shows prolonged/borderline " "aPTT due to reduced FVIII; also petechiae are unusual in vWD<br/>" "• <b>GT</b> — normal platelet count + normal coag + petechiae + epistaxis from childhood " "= platelet aggregation defect<br/><br/>" "<b>Confirm with:</b> Platelet aggregation studies (absent with all agonists except ristocetin) " "+ Flow cytometry (absent GPIIb/IIIa) + Genetic testing (ITGA2B/ITGB3)<br/>" "<b>Prognosis:</b> Lifelong disorder; normal life expectancy with proper care; " "HSCT is the only cure.", body_s )]] st = Table(sum_data, colWidths=[17*cm]) st.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#fffde7')), ('BOX', (0,0), (-1,-1), 2, colors.HexColor('#f39c12')), ('LEFTPADDING', (0,0), (-1,-1), 14), ('RIGHTPADDING', (0,0), (-1,-1), 14), ('TOPPADDING', (0,0), (-1,-1), 12), ('BOTTOMPADDING', (0,0), (-1,-1), 12), ])) story.append(st) story.append(Spacer(1, 10)) # ── REFERENCES ─────────────────────────────────────────── story.append(Paragraph("References:", ParagraphStyle('RH', parent=styles['Normal'], fontSize=9, fontName='Helvetica-Bold', textColor=colors.HexColor('#555')))) for r in [ "• Goldman-Cecil Medicine International Edition, 2-Volume Set — Chapter 159: Von Willebrand Disease; Glanzmann Thrombasthenia", "• Henry's Clinical Diagnosis and Management by Laboratory Methods — Platelet Aggregation and Secretion Studies", "• Quick Compendium of Clinical Pathology, 5th Edition — Glanzmann Thrombasthenia; Thrombocytopenia", "• Rosen's Emergency Medicine — von Willebrand Disease", ]: story.append(Paragraph(r, small_s)) doc.build(story) print("PDF created successfully!") PYEOF
Case3 Corrected Analysis
PDF Document · PDF