Latest guidelines for treatment of ACS, NSTEMI, STEMI
acute coronary syndrome AND treatment
2025 ACC AHA acute coronary syndromes guideline STEMI NSTEMI recommendations
2023 ESC Guidelines acute coronary syndromes antithrombotic recommendations STEMI NSTEMI
https://www.acc.org/Latest-in-Cardiology/Journal-Scans/2025/…
acute coronary syndrome
| Issue | STEMI | NSTEMI / unstable angina |
|---|---|---|
| Main goal | Immediate reperfusion | Risk-based invasive strategy |
| Cath timing | Immediate primary PCI | Immediate only if very-high-risk; early within 24 h if high-risk |
| Fibrinolysis | Consider if timely PCI unavailable and eligible | Not indicated |
| Antithrombotics | DAPT + procedural anticoagulation | DAPT + anticoagulation, avoid routine preloading if early angiography planned |
| Revascularization | Primary PCI, then consider complete revascularization | Angiography and revascularization based on risk/anatomy |
In detail with dosing
acute coronary syndromes guideline
2025 ACC AHA acute coronary syndrome guideline dosing aspirin ticagrelor prasugrel heparin tenecteplase PDF
2023 ESC acute coronary syndrome guideline drug doses table aspirin ticagrelor prasugrel unfractionated heparin enoxaparin tenecteplase
| Drug | Dose | Key cautions |
|---|---|---|
| Aspirin | 162-325 mg PO, chewed, immediately, then 81 mg PO daily | Avoid only with true hypersensitivity or active major bleeding. |
| Oxygen | Give only if SpO₂ <90%, respiratory distress, or other hypoxemia | Routine oxygen in normoxemia is not recommended. |
| Nitroglycerin SL | 0.4 mg SL every 5 min, maximum 3 doses | Avoid in hypotension, suspected RV infarction, severe aortic stenosis, or phosphodiesterase-5 inhibitor use: sildenafil/vardenafil within 24 h, tadalafil within 48 h. |
| Nitroglycerin IV | Start 5-10 micrograms/min, titrate every 3-5 min to pain/BP response | Stop or reduce if hypotension, headache, or reflex tachycardia. |
| Morphine IV | 2-4 mg IV, may repeat in small increments for severe pain unrelieved by nitrates | Use sparingly. Can cause hypotension, respiratory depression, and may delay oral P2Y12 absorption. |
| Metoprolol tartrate IV | Selected stable patients: 5 mg IV every 5 min for 3 doses | Avoid with acute HF, shock/low-output state, bradycardia, AV block, severe asthma/bronchospasm. Oral beta-blocker is often safer initially. |
| Weight | Tenecteplase dose |
|---|---|
| <60 kg | 30 mg |
| 60-69 kg | 35 mg |
| 70-79 kg | 40 mg |
| 80-89 kg | 45 mg |
| ≥90 kg | 50 mg |
| Therapy | Typical dose |
|---|---|
| Aspirin | 81 mg PO daily indefinitely, unless contraindicated |
| Ticagrelor | 90 mg PO twice daily, generally 12 months after ACS |
| Prasugrel | 10 mg PO daily or 5 mg daily if <60 kg, generally 12 months if appropriate |
| Clopidogrel | 75 mg PO daily, generally 12 months after ACS |
| Atorvastatin | 40-80 mg PO daily, commonly 80 mg |
| Rosuvastatin | 20-40 mg PO daily |
| Metoprolol succinate | Often begin 12.5-25 mg PO daily, titrate if LVEF reduction/HF/arrhythmia/hypertension and stable |
| Lisinopril | Often 2.5-5 mg PO daily, titrate based on BP, creatinine, and potassium |
| Losartan | Often 25-50 mg PO daily if ACE inhibitor is not tolerated |
| Eplerenone | 25 mg PO daily, increase to 50 mg daily if LVEF ≤40% plus HF or diabetes and potassium/renal function permit |
| Pantoprazole | 40 mg PO daily if GI-bleeding risk while on DAPT |
Create a one-page ACS dosing quick-reference PDF
~/
acute coronary syndrome
2025 ACC AHA ACS guideline top things to know DAPT statin PCI
mkdir -p "/tmp/workspace/acs-dosing-quick-reference/src" "/tmp/workspace/acs-dosing-quick-reference/output" && python - <<'PY' from reportlab.lib.pagesizes import letter from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.enums import TA_LEFT, TA_CENTER from reportlab.lib.units import inch from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, KeepTogether from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.lib.colors import HexColor from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics from reportlab.lib.pagesizes import landscape out='/tmp/workspace/acs-dosing-quick-reference/output/ACS_Adult_Dosing_Quick_Reference.pdf' PAGE_W, PAGE_H = landscape(letter) margin=0.32*inch def P(text, style): return Paragraph(text, style) navy=HexColor('#103B5C'); blue=HexColor('#196B99'); teal=HexColor('#087E8B'); lightblue=HexColor('#EAF4F8'); pale=HexColor('#F5F8FA'); red=HexColor('#A32020'); amber=HexColor('#FFF3D6'); gray=HexColor('#45515A') styles=getSampleStyleSheet() base=ParagraphStyle('base', parent=styles['Normal'], fontName='Helvetica', fontSize=6.35, leading=7.45, textColor=HexColor('#17232B'), spaceAfter=0) small=ParagraphStyle('small', parent=base, fontSize=5.75, leading=6.65) tiny=ParagraphStyle('tiny', parent=base, fontSize=5.05, leading=5.85) head=ParagraphStyle('head', parent=styles['Heading1'], fontName='Helvetica-Bold', fontSize=16.5, leading=17, textColor=colors.white, spaceAfter=0) subhead=ParagraphStyle('subhead', parent=base, fontSize=6.7, leading=7.7, textColor=colors.white) section=ParagraphStyle('section', parent=base, fontName='Helvetica-Bold', fontSize=8.2, leading=9, textColor=colors.white, alignment=TA_LEFT) colhead=ParagraphStyle('colhead', parent=base, fontName='Helvetica-Bold', fontSize=6.1, leading=6.8, textColor=navy) warn=ParagraphStyle('warn', parent=base, fontName='Helvetica-Bold', fontSize=5.8, leading=6.7, textColor=red) foot=ParagraphStyle('foot', parent=base, fontSize=4.8, leading=5.6, textColor=gray) class HeaderFooterDoc(SimpleDocTemplate): pass def section_bar(title, color=navy): t=Table([[P(title,section)]], colWidths=[10.36*inch], rowHeights=[0.20*inch]) t.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),color),('LEFTPADDING',(0,0),(-1,-1),6),('RIGHTPADDING',(0,0),(-1,-1),4),('TOPPADDING',(0,0),(-1,-1),2),('BOTTOMPADDING',(0,0),(-1,-1),1)])) return t def table(rows, widths, header=True, font=base): data=[] for r,row in enumerate(rows): data.append([P(x, colhead if (r==0 and header) else font) for x in row]) t=Table(data, colWidths=widths, repeatRows=1 if header else 0, hAlign='LEFT') ts=[('VALIGN',(0,0),(-1,-1),'TOP'),('GRID',(0,0),(-1,-1),0.22,HexColor('#C5D5DF')),('LEFTPADDING',(0,0),(-1,-1),3.3),('RIGHTPADDING',(0,0),(-1,-1),3.3),('TOPPADDING',(0,0),(-1,-1),2.1),('BOTTOMPADDING',(0,0),(-1,-1),2.1)] if header: ts += [('BACKGROUND',(0,0),(-1,0),lightblue),('LINEBELOW',(0,0),(-1,0),0.6,blue)] for r in range(1 if header else 0,len(rows)): if r%2==0: ts.append(('BACKGROUND',(0,r),(-1,r),pale)) t.setStyle(TableStyle(ts)); return t doc=SimpleDocTemplate(out,pagesize=landscape(letter),rightMargin=margin,leftMargin=margin,topMargin=margin,bottomMargin=0.27*inch) story=[] # Header header_tbl=Table([[P('ACS ADULT DOSING QUICK REFERENCE',head), P('<b>STEMI • NSTEMI • Unstable Angina</b><br/>2025 ACC/AHA aligned | Adult hospital use',subhead)]], colWidths=[6.5*inch,3.86*inch], rowHeights=[0.49*inch]) header_tbl.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),navy),('VALIGN',(0,0),(-1,-1),'MIDDLE'),('LEFTPADDING',(0,0),(0,0),10),('RIGHTPADDING',(0,0),(0,0),5),('LEFTPADDING',(1,0),(1,0),5),('RIGHTPADDING',(1,0),(1,0),8),('ALIGN',(1,0),(1,0),'RIGHT')])) story += [header_tbl, Spacer(1,4)] # urgent safety banner alert=Table([[P('<b>Use local ACS protocol and cardiology/cath-lab direction.</b> Verify diagnosis, weight, creatinine clearance, platelets, active bleeding, prior anticoagulant exposure, and contraindications before dosing. <b>Never fibrinolyse NSTEMI/unstable angina.</b>',warn)]],colWidths=[10.36*inch]) alert.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),amber),('BOX',(0,0),(-1,-1),0.45,HexColor('#D2A13A')),('LEFTPADDING',(0,0),(-1,-1),6),('RIGHTPADDING',(0,0),(-1,-1),6),('TOPPADDING',(0,0),(-1,-1),3),('BOTTOMPADDING',(0,0),(-1,-1),3)])) story += [alert,Spacer(1,4)] # Top two cols left_w=5.1*inch; right_w=5.1*inch initial=table([ ['Drug','Adult dose','Key safety points'], ['Aspirin','162-325 mg <b>chewed PO once</b>, then 81 mg PO daily','Avoid only for true allergy or active major bleeding.'], ['Oxygen','Only if SpO₂ <90%, respiratory distress, or hypoxemia','Do not give routinely if normoxemic.'], ['Nitroglycerin','0.4 mg SL q5 min, max 3 doses. IV: 5-10 micrograms/min, titrate','Avoid hypotension, RV infarct, severe AS, sildenafil/vardenafil <24 h, tadalafil <48 h.'], ['Morphine','2-4 mg IV, small repeat increments if severe refractory pain','Use sparingly: hypotension, respiratory depression, delayed P2Y12 absorption.'], ['Atorvastatin / rosuvastatin','Atorvastatin 40-80 mg PO daily <b>or</b> rosuvastatin 20-40 mg PO daily','Start high-intensity statin during admission.'] ],[0.92*inch,1.67*inch,2.51*inch],font=small) p2y=table([ ['P2Y12 inhibitor','Load','Maintenance / avoid'], ['Ticagrelor','180 mg PO once','90 mg PO BID. Avoid prior ICH, active bleed, severe hepatic impairment.'], ['Prasugrel','60 mg PO once','10 mg daily. 5 mg daily if <60 kg. <b>Do not use</b> prior stroke/TIA; generally avoid age ≥75 y. PCI use.'], ['Clopidogrel','PCI: 600 mg PO once. Fibrinolysis: <75 y: 300 mg once; ≥75 y: no load.','75 mg PO daily. Preferred with fibrinolysis or if long-term OAC is required.'], ['DAPT duration','Aspirin + oral P2Y12','Default 12 months if not high bleeding risk. In high bleeding risk, use a tailored, shorter strategy.'] ],[1.25*inch,1.4*inch,2.45*inch],font=small) left=KeepTogether([section_bar('1. IMMEDIATE SUPPORTIVE THERAPY'),initial]) right=KeepTogether([section_bar('2. ANTIPLATELET THERAPY'),p2y]) top=Table([[left,right]],colWidths=[5.1*inch,5.1*inch],hAlign='LEFT') top.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'TOP'),('LEFTPADDING',(0,0),(-1,-1),0),('RIGHTPADDING',(0,0),(-1,-1),0),('TOPPADDING',(0,0),(-1,-1),0),('BOTTOMPADDING',(0,0),(-1,-1),0)])) story += [top,Spacer(1,4)] # antithrombotic story += [section_bar('3. ANTICOAGULATION'),table([ ['Agent / situation','Dose','Renal / procedural notes'], ['UFH: NSTEMI/UA or STEMI fibrinolysis','60 units/kg IV bolus, max 4,000 units; then 12 units/kg/h IV, max initial 1,000 units/h','Titrate aPTT or anti-Xa. Usually continue 48 h or until revascularization for fibrinolysis. Monitor platelets/HIT.'], ['UFH: primary PCI','70-100 units/kg IV bolus if no GP IIb/IIIa; 50-70 units/kg if GP IIb/IIIa used','Cath lab adjusts to ACT.'], ['Enoxaparin: NSTEMI/UA','1 mg/kg SC q12h','CrCl <30 mL/min: 1 mg/kg SC q24h.'], ['Enoxaparin: STEMI + fibrinolysis','<75 y: 30 mg IV bolus then 1 mg/kg SC q12h (max 100 mg first 2 doses). ≥75 y: no IV bolus, 0.75 mg/kg SC q12h (max 75 mg first 2).','CrCl <30: 1 mg/kg SC q24h. PCI: if last SC dose 8-12 h ago, 0.3 mg/kg IV.'], ['Fondaparinux: NSTEMI/UA','2.5 mg SC daily','Avoid if CrCl <30. <b>Never use alone during PCI</b>: add procedural UFH or bivalirudin.'], ['Bivalirudin: PCI','0.75 mg/kg IV bolus, then 1.75 mg/kg/h infusion during PCI','Adjust infusion in severe renal impairment per local protocol.'] ],[1.58*inch,4.1*inch,4.68*inch],font=small),Spacer(1,4)] # Lower two cols stemi=table([ ['STEMI route','Action / dose'], ['Primary PCI','Preferred. Aspirin + P2Y12 load + procedural anticoagulant. Aim for prompt reperfusion.'], ['Fibrinolysis','Only if timely PCI unavailable, symptom onset generally ≤12 h, and no contraindication. Transfer immediately to PCI center.'], ['Tenecteplase IV bolus once','<60 kg 30 mg | 60-69 kg 35 mg | 70-79 kg 40 mg | 80-89 kg 45 mg | ≥90 kg 50 mg. For age ≥75 y, many pharmaco-invasive protocols use half dose.'], ['Alteplase accelerated','15 mg IV bolus; then 0.75 mg/kg over 30 min (max 50 mg); then 0.5 mg/kg over 60 min (max 35 mg). Total 100 mg.'], ['Reteplase','10 units IV over 2 min, then 10 units IV over 2 min after 30 min.'], ['Rescue PCI','Persistent pain/ST elevation, shock, HF, malignant arrhythmia, or failed reperfusion.'] ],[1.28*inch,3.82*inch],font=small) nste=table([ ['NSTEMI/UA risk','Plan'], ['Very high risk','Immediate invasive strategy: shock/instability, refractory pain, life-threatening arrhythmia/cardiac arrest, acute HF, mechanical complication, or recurrent dynamic ST changes.'], ['High risk','Early angiography, usually within 24 h: confirmed NSTEMI, dynamic ST/T changes, high GRACE risk, or recurrent symptoms.'], ['P2Y12 timing','Do <b>not</b> routinely pre-load when early angiography is planned. If angiography is delayed >24 h, upstream ticagrelor or clopidogrel may be considered.'], ['No fibrinolysis','Fibrinolytic therapy is contraindicated in NSTEMI/unstable angina.'] ],[1.28*inch,3.82*inch],font=small) low=Table([[KeepTogether([section_bar('4. STEMI REPERFUSION',teal),stemi]),KeepTogether([section_bar('5. NSTEMI / UA INVASIVE TIMING',blue),nste])]],colWidths=[5.1*inch,5.1*inch]) low.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'TOP'),('LEFTPADDING',(0,0),(-1,-1),0),('RIGHTPADDING',(0,0),(-1,-1),0),('TOPPADDING',(0,0),(-1,-1),0),('BOTTOMPADDING',(0,0),(-1,-1),0)])) story += [low,Spacer(1,3)] footer_text='<b>Core cautions:</b> No prasugrel with prior stroke/TIA. Avoid nitrates with hypotension/RV infarct/recent PDE-5 inhibitor. Use GP IIb/IIIa inhibitors mainly for cath-lab bailout. Check Hb, platelets, renal function and bleeding continuously. <b>Sources:</b> 2025 ACC/AHA/ACEP/NAEMSP/SCAI ACS Guideline; 2023 ESC ACS Guideline. Prepared 28 Sep 2026. Educational quick reference only.' footer=Table([[P(footer_text,foot)]],colWidths=[10.36*inch]) footer.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),HexColor('#EEF2F4')),('LINEABOVE',(0,0),(-1,0),0.4,HexColor('#B9C5CA')),('LEFTPADDING',(0,0),(-1,-1),5),('RIGHTPADDING',(0,0),(-1,-1),5),('TOPPADDING',(0,0),(-1,-1),2),('BOTTOMPADDING',(0,0),(-1,-1),2)])) story.append(footer) doc.build(story) print(out) PY python - <<'PY' from pypdf import PdfReader p='/tmp/workspace/acs-dosing-quick-reference/output/ACS_Adult_Dosing_Quick_Reference.pdf' r=PdfReader(p) print('pages',len(r.pages)) print('bytes',__import__('os').path.getsize(p)) print('chars',len(r.pages[0].extract_text())) print(r.pages[0].extract_text()[:500]) PY
~/acs-dosing-quick-reference/
python - <<'PY' from reportlab.lib.pagesizes import landscape, letter from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle from reportlab.lib.units import inch from reportlab.lib.colors import HexColor import os out='/tmp/workspace/acs-dosing-quick-reference/output/ACS_Adult_Dosing_Quick_Reference.pdf' navy=HexColor('#103B5C'); blue=HexColor('#196B99'); teal=HexColor('#087E8B'); lightblue=HexColor('#EAF4F8'); pale=HexColor('#F5F8FA'); red=HexColor('#A32020'); amber=HexColor('#FFF3D6'); gray=HexColor('#45515A') styles=getSampleStyleSheet() base=ParagraphStyle('base',parent=styles['Normal'],fontName='Helvetica',fontSize=5.8,leading=6.55,textColor=HexColor('#17232B')) small=ParagraphStyle('small',parent=base,fontSize=5.5,leading=6.2) tiny=ParagraphStyle('tiny',parent=base,fontSize=4.8,leading=5.45) head=ParagraphStyle('head',parent=base,fontName='Helvetica-Bold',fontSize=16,leading=16.5,textColor=colors.white) subhead=ParagraphStyle('subhead',parent=base,fontSize=6.4,leading=7.2,textColor=colors.white) section=ParagraphStyle('section',parent=base,fontName='Helvetica-Bold',fontSize=7.6,leading=8.2,textColor=colors.white) colhead=ParagraphStyle('colhead',parent=base,fontName='Helvetica-Bold',fontSize=5.7,leading=6.2,textColor=navy) warn=ParagraphStyle('warn',parent=base,fontName='Helvetica-Bold',fontSize=5.35,leading=6.0,textColor=red) foot=ParagraphStyle('foot',parent=base,fontSize=4.5,leading=5.05,textColor=gray) def P(x,s=base): return Paragraph(x,s) def bar(title,c=navy,w=10.36): t=Table([[P(title,section)]],colWidths=[w],rowHeights=[.18*inch]);t.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),c),('LEFTPADDING',(0,0),(-1,-1),5),('TOPPADDING',(0,0),(-1,-1),1),('BOTTOMPADDING',(0,0),(-1,-1),1)]));return t def grid(rows,widths,font=small): data=[[P(x,colhead if r==0 else font) for x in row] for r,row in enumerate(rows)] t=Table(data,colWidths=widths,hAlign='LEFT',repeatRows=1) ts=[('VALIGN',(0,0),(-1,-1),'TOP'),('GRID',(0,0),(-1,-1),.18,HexColor('#C5D5DF')),('LEFTPADDING',(0,0),(-1,-1),2.7),('RIGHTPADDING',(0,0),(-1,-1),2.7),('TOPPADDING',(0,0),(-1,-1),1.6),('BOTTOMPADDING',(0,0),(-1,-1),1.6),('BACKGROUND',(0,0),(-1,0),lightblue),('LINEBELOW',(0,0),(-1,0),.5,blue)] for r in range(1,len(rows)): if r%2==0:ts.append(('BACKGROUND',(0,r),(-1,r),pale)) t.setStyle(TableStyle(ts));return t doc=SimpleDocTemplate(out,pagesize=landscape(letter),rightMargin=.32*inch,leftMargin=.32*inch,topMargin=.30*inch,bottomMargin=.24*inch) story=[] h=Table([[P('ACS ADULT DOSING QUICK REFERENCE',head),P('<b>STEMI • NSTEMI • Unstable Angina</b><br/>2025 ACC/AHA aligned | Adult hospital use',subhead)]],colWidths=[6.5*inch,3.86*inch],rowHeights=[.46*inch]);h.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),navy),('VALIGN',(0,0),(-1,-1),'MIDDLE'),('LEFTPADDING',(0,0),(0,0),9),('LEFTPADDING',(1,0),(1,0),5),('RIGHTPADDING',(1,0),(1,0),8),('ALIGN',(1,0),(1,0),'RIGHT')]));story+=[h,Spacer(1,3)] a=Table([[P('<b>Use local ACS protocol and cath-lab direction.</b> Verify diagnosis, weight, creatinine clearance, platelets, active bleeding, prior anticoagulant exposure, and contraindications before dosing. <b>Never fibrinolyse NSTEMI/unstable angina.</b>',warn)]],colWidths=[10.36*inch]);a.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),amber),('BOX',(0,0),(-1,-1),.4,HexColor('#D2A13A')),('LEFTPADDING',(0,0),(-1,-1),5),('RIGHTPADDING',(0,0),(-1,-1),5),('TOPPADDING',(0,0),(-1,-1),2),('BOTTOMPADDING',(0,0),(-1,-1),2)]));story += [a,Spacer(1,3)] initial=grid([['Drug','Adult dose','Key safety points'],['Aspirin','162-325 mg <b>chewed PO once</b>, then 81 mg PO daily','Avoid only true allergy or active major bleeding.'],['Oxygen','Only if SpO₂ <90%, respiratory distress, or hypoxemia','Do not give routinely if normoxemic.'],['Nitroglycerin','0.4 mg SL q5 min, max 3. IV 5-10 micrograms/min, titrate','Avoid hypotension, RV infarct, severe AS, sildenafil/vardenafil <24 h or tadalafil <48 h.'],['Morphine','2-4 mg IV; small repeats for refractory severe pain','Use sparingly: hypotension, respiratory depression, delayed P2Y12 absorption.'],['High-intensity statin','Atorvastatin 40-80 mg daily <b>or</b> rosuvastatin 20-40 mg daily','Initiate during admission.']],[.92*inch,1.67*inch,2.51*inch]) p2y=grid([['P2Y12 inhibitor','Load','Maintenance / avoid'],['Ticagrelor','180 mg PO once','90 mg PO BID. Avoid prior ICH, active bleeding, severe hepatic impairment.'],['Prasugrel','60 mg PO once','10 mg daily, 5 mg if <60 kg. <b>Do not use</b> prior stroke/TIA; generally avoid age ≥75 y. PCI use.'],['Clopidogrel','PCI: 600 mg PO. Fibrinolysis: <75 y 300 mg; ≥75 y no load.','75 mg PO daily. Use with fibrinolysis or if long-term OAC required.'],['DAPT duration','Aspirin + P2Y12','Default 12 months if not high bleeding risk. Tailor/shorten when bleeding risk high.']],[1.25*inch,1.4*inch,2.45*inch]) # each cell contains a list, permits table layout T=Table([[[bar('1. IMMEDIATE SUPPORTIVE THERAPY',navy,5.1),initial],[bar('2. ANTIPLATELET THERAPY',navy,5.1),p2y]]],colWidths=[5.1*inch,5.1*inch]);T.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'TOP'),('LEFTPADDING',(0,0),(-1,-1),0),('RIGHTPADDING',(0,0),(-1,-1),0),('TOPPADDING',(0,0),(-1,-1),0),('BOTTOMPADDING',(0,0),(-1,-1),0)]));story += [T,Spacer(1,3)] anticoag=grid([['Agent / situation','Dose','Renal / procedural notes'],['UFH: NSTEMI/UA or STEMI fibrinolysis','60 units/kg IV bolus, max 4,000 units; then 12 units/kg/h, max initial 1,000 units/h','Titrate aPTT or anti-Xa. Usually 48 h or until revascularization after lysis. Monitor platelets/HIT.'],['UFH: primary PCI','70-100 units/kg IV bolus, or 50-70 units/kg if GP IIb/IIIa used','Cath lab adjusts to ACT.'],['Enoxaparin: NSTEMI/UA','1 mg/kg SC q12h','CrCl <30 mL/min: 1 mg/kg SC q24h.'],['Enoxaparin: STEMI + fibrinolysis','<75 y: 30 mg IV then 1 mg/kg SC q12h (max 100 mg first 2). ≥75 y: no IV bolus, 0.75 mg/kg q12h (max 75 mg first 2).','CrCl <30: 1 mg/kg q24h. PCI: if last SC dose 8-12 h ago, 0.3 mg/kg IV.'],['Fondaparinux: NSTEMI/UA','2.5 mg SC daily','Avoid CrCl <30. <b>Never alone during PCI</b>: add UFH or bivalirudin.'],['Bivalirudin: PCI','0.75 mg/kg IV bolus, then 1.75 mg/kg/h during PCI','Adjust in severe renal impairment per local protocol.']],[1.58*inch,4.1*inch,4.68*inch]);story += [bar('3. ANTICOAGULATION'),anticoag,Spacer(1,3)] stemi=grid([['STEMI route','Action / dose'],['Primary PCI','Preferred. Aspirin + P2Y12 load + procedural anticoagulant. Rapid reperfusion.'],['Fibrinolysis','Only if timely PCI unavailable, symptoms generally ≤12 h, and no contraindication. Transfer immediately to PCI center.'],['Tenecteplase IV bolus','<60 kg 30 mg | 60-69 kg 35 mg | 70-79 kg 40 mg | 80-89 kg 45 mg | ≥90 kg 50 mg. Age ≥75 y: many pharmaco-invasive protocols use half dose.'],['Alteplase accelerated','15 mg IV bolus; 0.75 mg/kg over 30 min (max 50 mg); then 0.5 mg/kg over 60 min (max 35 mg). Total 100 mg.'],['Reteplase','10 units IV over 2 min, then 10 units IV over 2 min after 30 min.'],['Rescue PCI','Persistent pain/ST elevation, shock, HF, malignant arrhythmia, or failed reperfusion.']],[1.28*inch,3.82*inch]) nste=grid([['NSTEMI/UA risk','Plan'],['Very high risk','Immediate invasive strategy: shock/instability, refractory pain, life-threatening arrhythmia/cardiac arrest, acute HF, mechanical complication, recurrent dynamic ST changes.'],['High risk','Early angiography, usually within 24 h: confirmed NSTEMI, dynamic ST/T changes, high GRACE risk, or recurrent symptoms.'],['P2Y12 timing','Do <b>not</b> routinely pre-load when early angiography planned. If >24 h delay, upstream ticagrelor or clopidogrel may be considered.'],['No fibrinolysis','Contraindicated in NSTEMI/unstable angina.']],[1.28*inch,3.82*inch]) L=Table([[[bar('4. STEMI REPERFUSION',teal,5.1),stemi],[bar('5. NSTEMI / UA INVASIVE TIMING',blue,5.1),nste]]],colWidths=[5.1*inch,5.1*inch]);L.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'TOP'),('LEFTPADDING',(0,0),(-1,-1),0),('RIGHTPADDING',(0,0),(-1,-1),0),('TOPPADDING',(0,0),(-1,-1),0),('BOTTOMPADDING',(0,0),(-1,-1),0)]));story += [L,Spacer(1,2)] f=Table([[P('<b>Core cautions:</b> No prasugrel with prior stroke/TIA. Avoid nitrates with hypotension/RV infarct/recent PDE-5 inhibitor. GP IIb/IIIa inhibitors mainly cath-lab bailout. Check Hb, platelets, renal function and bleeding continuously. <b>Sources:</b> 2025 ACC/AHA/ACEP/NAEMSP/SCAI ACS Guideline; 2023 ESC ACS Guideline. Prepared 28 Sep 2026. Educational quick reference only.',foot)]],colWidths=[10.36*inch]);f.setStyle(TableStyle([('BACKGROUND',(0,0),(-1,-1),HexColor('#EEF2F4')),('LINEABOVE',(0,0),(-1,0),.4,HexColor('#B9C5CA')),('LEFTPADDING',(0,0),(-1,-1),5),('RIGHTPADDING',(0,0),(-1,-1),5),('TOPPADDING',(0,0),(-1,-1),2),('BOTTOMPADDING',(0,0),(-1,-1),2)]));story.append(f) doc.build(story) print(out) PY python - <<'PY' from pypdf import PdfReader import os p='/tmp/workspace/acs-dosing-quick-reference/output/ACS_Adult_Dosing_Quick_Reference.pdf' r=PdfReader(p) print('pages',len(r.pages),'bytes',os.path.getsize(p),'text_chars',len(r.pages[0].extract_text())) PY
python - <<'PY' from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import landscape, letter from reportlab.lib.colors import HexColor, white, black from reportlab.lib.styles import ParagraphStyle from reportlab.platypus import Paragraph from reportlab.lib.enums import TA_LEFT from reportlab.pdfbase.pdfmetrics import stringWidth from reportlab.lib.units import inch import os out='/tmp/workspace/acs-dosing-quick-reference/output/ACS_Adult_Dosing_Quick_Reference.pdf' W,H=landscape(letter); M=22 navy=HexColor('#103B5C'); blue=HexColor('#196B99'); teal=HexColor('#087E8B'); pale=HexColor('#F5F8FA'); light=HexColor('#EAF4F8'); amber=HexColor('#FFF3D6'); red=HexColor('#9A2020'); grid=HexColor('#C5D5DF'); gray=HexColor('#45515A') base=ParagraphStyle('base',fontName='Helvetica',fontSize=5.35,leading=6.05,textColor=HexColor('#17232B'),spaceAfter=0) head=ParagraphStyle('head',fontName='Helvetica-Bold',fontSize=16,leading=16.4,textColor=white) sub=ParagraphStyle('sub',fontName='Helvetica',fontSize=6.3,leading=7.1,textColor=white,alignment=2) sec=ParagraphStyle('sec',fontName='Helvetica-Bold',fontSize=7.3,leading=8,textColor=white) ch=ParagraphStyle('ch',fontName='Helvetica-Bold',fontSize=5.35,leading=5.9,textColor=navy) wrn=ParagraphStyle('wrn',fontName='Helvetica-Bold',fontSize=5.25,leading=5.9,textColor=red) foot=ParagraphStyle('foot',fontName='Helvetica',fontSize=4.35,leading=4.95,textColor=gray) def para(c,text,x,y,w,style, valign='top'): p=Paragraph(text,style); aw,ah=p.wrap(w,1000); p.drawOn(c,x,y-ah); return ah def pheight(text,w,style): p=Paragraph(text,style); return p.wrap(w,1000)[1] def section(c,title,x,y,w,color=navy): c.setFillColor(color);c.rect(x,y-13,w,13,fill=1,stroke=0);para(c,title,x+5,y-2,w-10,sec);return y-13 def draw_table(c,rows,widths,x,y,styles=None): # y starts top; calculate fixed column positions xpos=[x] for q in widths: xpos.append(xpos[-1]+q) heights=[] for ri,row in enumerate(rows): st=ch if ri==0 else base hs=[pheight(cell,widths[i]-5,st) for i,cell in enumerate(row)] heights.append(max(hs)+3.4) for ri,row in enumerate(rows): h=heights[ri]; y2=y-h c.setFillColor(light if ri==0 else (pale if ri%2==0 else white));c.rect(x,y2,sum(widths),h,fill=1,stroke=0) c.setStrokeColor(grid);c.setLineWidth(.25);c.rect(x,y2,sum(widths),h,fill=0,stroke=1) for xx in xpos[1:-1]:c.line(xx,y2,xx,y) if ri==0: c.setStrokeColor(blue);c.setLineWidth(.55);c.line(x,y2,x+sum(widths),y2) st=ch if ri==0 else base for ci,cell in enumerate(row): para(c,cell,xpos[ci]+2.5,y-1.8,widths[ci]-5,st) y=y2 return y c=canvas.Canvas(out,pagesize=landscape(letter)); c.setTitle('ACS Adult Dosing Quick Reference') # header c.setFillColor(navy);c.rect(M,H-M-33,W-2*M,33,fill=1,stroke=0) para(c,'ACS ADULT DOSING QUICK REFERENCE',M+9,H-M-6,468,head) para(c,'<b>STEMI • NSTEMI • Unstable Angina</b><br/>2025 ACC/AHA aligned | Adult hospital use',W-M-280,H-M-6,270,sub) y=H-M-37 c.setFillColor(amber);c.rect(M,y-19,W-2*M,19,fill=1,stroke=0);c.setStrokeColor(HexColor('#D2A13A'));c.rect(M,y-19,W-2*M,19,fill=0,stroke=1) para(c,'<b>Use local ACS protocol and cath-lab direction.</b> Verify diagnosis, weight, creatinine clearance, platelets, active bleeding, prior anticoagulant exposure, and contraindications before dosing. <b>Never fibrinolyse NSTEMI/unstable angina.</b>',M+5,y-2,W-2*M-10,wrn) y-=23 # Top columns x1=M;x2=M+367;cw=360 ly=section(c,'1. IMMEDIATE SUPPORTIVE THERAPY',x1,y,cw) ry=section(c,'2. ANTIPLATELET THERAPY',x2,y,cw) rows1=[['Drug','Adult dose','Key safety points'],['Aspirin','162-325 mg <b>chewed PO once</b>, then 81 mg PO daily','Avoid only true allergy or active major bleeding.'],['Oxygen','Only if SpO₂ <90%, respiratory distress, or hypoxemia','Do not give routinely if normoxemic.'],['Nitroglycerin','0.4 mg SL q5 min, max 3. IV 5-10 micrograms/min, titrate','Avoid hypotension, RV infarct, severe AS, sildenafil/vardenafil <24 h or tadalafil <48 h.'],['Morphine','2-4 mg IV; small repeats for refractory severe pain','Use sparingly: hypotension, respiratory depression, delayed P2Y12 absorption.'],['High-intensity statin','Atorvastatin 40-80 mg daily <b>or</b> rosuvastatin 20-40 mg daily','Initiate during admission.']] rows2=[['P2Y12 inhibitor','Load','Maintenance / avoid'],['Ticagrelor','180 mg PO once','90 mg PO BID. Avoid prior ICH, active bleed, severe hepatic impairment.'],['Prasugrel','60 mg PO once','10 mg daily, 5 mg if <60 kg. <b>Do not use</b> prior stroke/TIA; generally avoid age ≥75 y. PCI use.'],['Clopidogrel','PCI: 600 mg PO. Fibrinolysis: <75 y 300 mg; ≥75 y no load.','75 mg PO daily. Use with fibrinolysis or if long-term OAC required.'],['DAPT duration','Aspirin + P2Y12','Default 12 months if not high bleeding risk. Tailor/shorten when bleeding risk high.']] end1=draw_table(c,rows1,[65,120,175],x1,ly);end2=draw_table(c,rows2,[88,100,172],x2,ry);y=min(end1,end2)-4 # anticoag z=section(c,'3. ANTICOAGULATION',M,y,W-2*M) rows3=[['Agent / situation','Dose','Renal / procedural notes'],['UFH: NSTEMI/UA or STEMI fibrinolysis','60 units/kg IV bolus, max 4,000 units; then 12 units/kg/h, max initial 1,000 units/h','Titrate aPTT or anti-Xa. Usually 48 h or until revascularization after lysis. Monitor platelets/HIT.'],['UFH: primary PCI','70-100 units/kg IV bolus, or 50-70 units/kg if GP IIb/IIIa used','Cath lab adjusts to ACT.'],['Enoxaparin: NSTEMI/UA','1 mg/kg SC q12h','CrCl <30 mL/min: 1 mg/kg SC q24h.'],['Enoxaparin: STEMI + fibrinolysis','<75 y: 30 mg IV then 1 mg/kg SC q12h (max 100 mg first 2). ≥75 y: no IV bolus, 0.75 mg/kg q12h (max 75 mg first 2).','CrCl <30: 1 mg/kg q24h. PCI: if last SC dose 8-12 h ago, 0.3 mg/kg IV.'],['Fondaparinux: NSTEMI/UA','2.5 mg SC daily','Avoid CrCl <30. <b>Never alone during PCI</b>: add UFH or bivalirudin.'],['Bivalirudin: PCI','0.75 mg/kg IV bolus, then 1.75 mg/kg/h during PCI','Adjust in severe renal impairment per local protocol.']] y=draw_table(c,rows3,[112,292,342],M,z)-4 # final two columns ly=section(c,'4. STEMI REPERFUSION',x1,y,cw,teal);ry=section(c,'5. NSTEMI / UA INVASIVE TIMING',x2,y,cw,blue) rows4=[['STEMI route','Action / dose'],['Primary PCI','Preferred. Aspirin + P2Y12 load + procedural anticoagulant. Rapid reperfusion.'],['Fibrinolysis','Only if timely PCI unavailable, symptoms generally ≤12 h, and no contraindication. Transfer immediately to PCI center.'],['Tenecteplase IV bolus','<60 kg 30 mg | 60-69 kg 35 mg | 70-79 kg 40 mg | 80-89 kg 45 mg | ≥90 kg 50 mg. Age ≥75 y: many pharmaco-invasive protocols use half dose.'],['Alteplase accelerated','15 mg IV bolus; 0.75 mg/kg over 30 min (max 50 mg); then 0.5 mg/kg over 60 min (max 35 mg). Total 100 mg.'],['Reteplase','10 units IV over 2 min, then 10 units IV over 2 min after 30 min.'],['Rescue PCI','Persistent pain/ST elevation, shock, HF, malignant arrhythmia, or failed reperfusion.']] rows5=[['NSTEMI/UA risk','Plan'],['Very high risk','Immediate invasive strategy: shock/instability, refractory pain, life-threatening arrhythmia/cardiac arrest, acute HF, mechanical complication, recurrent dynamic ST changes.'],['High risk','Early angiography, usually within 24 h: confirmed NSTEMI, dynamic ST/T changes, high GRACE risk, or recurrent symptoms.'],['P2Y12 timing','Do <b>not</b> routinely pre-load when early angiography planned. If >24 h delay, upstream ticagrelor or clopidogrel may be considered.'],['No fibrinolysis','Contraindicated in NSTEMI/unstable angina.']] end1=draw_table(c,rows4,[90,270],x1,ly);end2=draw_table(c,rows5,[90,270],x2,ry);y=min(end1,end2)-3 # Footer placed under whichever has more vertical room but fixed c.setFillColor(HexColor('#EEF2F4'));c.rect(M,12,W-2*M,18,fill=1,stroke=0);c.setStrokeColor(HexColor('#B9C5CA'));c.line(M,30,W-M,30) para(c,'<b>Core cautions:</b> No prasugrel with prior stroke/TIA. Avoid nitrates with hypotension/RV infarct/recent PDE-5 inhibitor. GP IIb/IIIa inhibitors mainly cath-lab bailout. Check Hb, platelets, renal function and bleeding continuously. <b>Sources:</b> 2025 ACC/AHA/ACEP/NAEMSP/SCAI ACS Guideline; 2023 ESC ACS Guideline. Prepared 28 Sep 2026. Educational quick reference only.',M+5,28,W-2*M-10,foot) c.save();print(out,os.path.getsize(out)) PY python - <<'PY' from pypdf import PdfReader p='/tmp/workspace/acs-dosing-quick-reference/output/ACS_Adult_Dosing_Quick_Reference.pdf';r=PdfReader(p) print('pages=',len(r.pages),'size=',__import__('os').path.getsize(p),'chars=',len(r.pages[0].extract_text())) PY
ACS Adult Dosing Quick Reference
PDF Document · PDF