CHA2DS2-VASc

Clinical risk of stroke and thromboembolism in patients with atrial fibrillation

Description
Originally published in 2009, used to stratify clinical risk for stroke and thromboembolism in patients with atrial fibrillation based on a risk factor approach
Academic References
Lip GY, Nieuwlaat R, Pisters R, Lane DA, Crijns HJ. Refining clinical risk stratification for predicting stroke and thromboembolism in atrial fibrillation using a novel risk factor-based approach: the euro heart survey on atrial fibrillation. Chest. 2010;137(2):263-272. doi:10.1378/chest.09-1584
See: https://www.ncbi.nlm.nih.gov/pubmed/19762550
Friberg L, Rosenqvist M, Lip GY. Evaluation of risk stratification schemes for ischaemic stroke and bleeding in 182 678 patients with atrial fibrillation: the Swedish Atrial Fibrillation cohort study. Eur Heart J. 2012;33(12):1500-1510. doi:10.1093/eurheartj/ehr488
See: https://www.ncbi.nlm.nih.gov/pubmed/22246443
Camm AJ, Lip GY, De Caterina R, et al. 2012 focused update of the ESC Guidelines for the management of atrial fibrillation: an update of the 2010 ESC Guidelines for the management of atrial fibrillation. Developed with the special contribution of the European Heart Rhythm Association [published correction appears in Eur Heart J. 2013 Mar;34(10):790] [published correction appears in Eur Heart J. 2013 Sep;34(36):2850-1]. Eur Heart J. 2012;33(21):2719-2747. doi:10.1093/eurheartj/ehs253
See: https://www.ncbi.nlm.nih.gov/pubmed/22922413
Ntaios G, Lip GY, Makaritsis K, et al. CHADS₂, CHA₂S₂DS₂-VASc, and long-term stroke outcome in patients without atrial fibrillation. Neurology. 2013;80(11):1009-1017. doi:10.1212/WNL.0b013e318287281b
See: https://www.ncbi.nlm.nih.gov/pubmed/23408865
Okumura K, Inoue H, Atarashi H, et al. Validation of CHA₂DS₂-VASc and HAS-BLED scores in Japanese patients with nonvalvular atrial fibrillation: an analysis of the J-RHYTHM Registry. Circ J. 2014;78(7):1593-1599. doi:10.1253/circj.cj-14-0144
See: https://www.ncbi.nlm.nih.gov/pubmed/24759791
Code Version Id
2bed391f-3359-468e-b7da-db4be7bc7de7
// Copyright (C) 2023 Calcarta
module Calcarta.Calculation.``Cha2ds2-vasc``.Code
open Calcarta.CodeResource.Standard

type Age =
    | [<Name("<65")>] LessThan65 = 0
    | [<Name("65-74")>] Between65and74 = 1
    | [<Name(">=75")>] GreaterThanEqual75 = 2

type Patient ={
    Age : Age

    [<Name("Is female")>]
    IsFemale : bool

    [<Name("Congestive Heart Failure (CHF) history")>]
    ChfHistory : bool

    [<Name("Hypertension history")>]
    HypertensionHistory : bool

    [<Name("Stroke / TIA / thromboembolism history")>]
    StrokeHistory : bool
    
    [<Name("Vascular disease history")>]
    [<Description("Prior MI, peripheral artery disease, or aortic plaques")>]
    VascularDiseaseHistory : bool

    [<Name("Diabetes history")>]
    DiabetesHistory : bool
}

type Output = {
    [<Name("CHA2DS2-VASc score")>]
    Score : decimal

    [<Name("Risk of ischaemic stroke")>]
    IschaemicStrokeRisk : string

    [<Name("Risk of stroke / TIA / systemic embolism")>]
    StrokeRisk : string
}

[<Name("Stroke risk", AppliesTo = Argument.Output)>]
[<Description("", AppliesTo = Argument.Output)>]
[<Unit("Points", AppliesTo = Argument.Output)>]
let ``cha2ds2-vasc`` (patient : Patient) = 
    let score value point = if value then point else 0m
    let agePoints = 
        match patient.Age with
        | Age.LessThan65 -> 0m
        | Age.Between65and74 -> 1m
        | Age.GreaterThanEqual75 -> 2m
        | _ -> 0m
    let cha2ds2vasc = 
        agePoints +
        score patient.IsFemale 1m +
        score patient.ChfHistory 1m +
        score patient.HypertensionHistory 1m +
        score patient.StrokeHistory 2m +
        score patient.VascularDiseaseHistory 1m +
        score patient.DiabetesHistory 1m
    let ischaemicStrokeRisk = 
        match cha2ds2vasc with
        | 0m -> "0.2%"
        | 1m -> "0.6%"
        | 2m -> "2.2%"
        | 3m -> "3.2%"
        | 4m -> "4.8%"
        | 5m -> "7.2%"
        | 6m -> "9.7%"
        | 7m -> "11.2%"
        | 8m -> "10.8%"
        | 9m -> "12.2%"
        | _ -> "Undefined"
    let strokeTiaEmbolismRisk =
        match cha2ds2vasc with
        | 0m -> "0.3%"
        | 1m -> "0.9%"
        | 2m -> "2.9%"
        | 3m -> "4.6%"
        | 4m -> "6.7%"
        | 5m -> "10.0%"
        | 6m -> "13.6%"
        | 7m -> "15.7%"
        | 8m -> "15.2%"
        | 9m -> "17.4%"
        | _ -> "Undefined"
    {
        Score = cha2ds2vasc
        IschaemicStrokeRisk = ischaemicStrokeRisk
        StrokeRisk = strokeTiaEmbolismRisk
    }