QRISK3: Difference between revisions

From Endeavour Knowledge Base
 
(74 intermediate revisions by the same user not shown)
Line 1: Line 1:
'''''Please note that at this current time, these services are not available for use in a live environment and must not be used. The following information is made available in advance of go-live'''''
Endeavour Predict is a manufacturer of EP QRISK3 Engine which is the implementation of QRISK3 by Endeavour Predict.
 
The EP QRISK3 Engine, with both a Web API and local run time components are now registered as a class 1 device with the MHRA and available for use.


== Background ==
== Background ==
Information about the research and algorithms that resulted in QRISK3, as well as  the free to use Web site can be viewed https://qrisk.org
Information about the research and algorithms that resulted in QRISK3, as well as  the free to use Web site can be viewed at https://qrisk.org and a related presentation, a CVD lifetime risk at https://qrisk.org/lifetime/index.php


== Predict Services ==
== Predict Services ==
QRISK3 risk score can be calculated using  Endeavour Predict services, which consist of:
QRISK3 risk score can be calculated using  Endeavour Predict services, which consist of:


# A set of Web based APIs for submitting requests for a prediction and receiving a response, the response including a risk score, and other score specific information for example in QRISK3, a heart age , and information relating to the calculation of the scores.
# A set of Web based APIs for submitting requests for a prediction and receiving a response, the response including a risk score, and other score specific information for example in QRISK3, a heart age , as well as information relating to the calculation of the scores.
# A set of FHIR APIS to enable system suppliers to know which Snomed-CT concepts should be used when deriving information from records. These are part of the Endeavour information model services
# A local run time C# or Java jar version for integration into local systems that prefer not to use a web UI.
# A set of FHIR APIS to enable system suppliers to know which Snomed-CT concepts should be used when deriving information from records. These are part of the Endeavour information model services.
# A REST API for deriving a Townsend deprivation score from a post code, the Townsend score being then submitted as part of the QRISK request payload.  
# A REST API for deriving a Townsend deprivation score from a post code, the Townsend score being then submitted as part of the QRISK request payload.  
# Source code repositories of open source code used by 1) and 2) and 3)


== APIs ==
== Concept (Value) sets and FHIR API ==
A swagger endpoint for API definition (developer mode) can be seen at
Draft versions of value sets are available via the Endeavour API dev portal at https://dev.endeavourpredict.org/apis, which is a self sign up process, enabling access to a number of the public APIs. The concept sets are available as FHIR value sets at the self sign up developer portal
 
In line with FHIR an semantic web standards, each set is given a unique IRI and it is the IRI that is used as identifiers in the API call.
 
the QRISK3 superset iri is http://apiqcodes.org/qcodes#QPredict_331  which includes the subsets. The score level concepts sets contain subsets so that recursive calls can be made to obtain each set.  Alternatively, using the $expand operation, the entire subset can be obtained as one.
 
The sets can also be independently examined or obtained via the information manager, selecting the hierarchy option to view the subsets.https://im.endeavourhealth.net/#/directory/folder/http:%2F%2Fapiqcodes.org%2Fqcodes%23QPredict_331 . The concept sets can be downloaded from the IM application in excel CSV , or TSV
 
Within Endeavour each concept is given a unique identifier or IRI in line with semantic Web. Users will be more familiar with the use of the concept's code and this is provided as well as maps to alternative code schemes.
== APIs (Web and local) ==
A developer portal for qrisk3 is available at [https://dev.endeavourpredict.org/ https://dev.endeavourpredict.org/apis]
 
The algorithms are available over the internet via REST API calls or a locally deployed .NET assembly, or a locally deployed Java jar. In all 3 variations the input format (JSON) and parameters are the same and the result format (JSON) is the same. Consequently suppliers using local versions may use the developer portal to test input and output formats.
 
When using a locally deployed implementation, a test pack SDK is provided to enable unit and integration testing by end suppliers.
 
== Intended use ==
EP - QRISK3 Engine is a clinical decision support tool intended to facilitate individualised discussions between medically trained professionals and patients about their individual risk of heart attacks or stroke taking account of their demographic and medical profile.
 
This will enable shared decision making, allowing patients to understand their risk and discuss actions that could be taken in the context of other important factors to reduce their risk.
 
EP - QRISK3 Engine has been developed for both public health purposes as well as individual therapeutic or health care decisions.
 
EP - QRISK3 Engine has been developed so that it can either run as a standalone process, with data being submitted and results returned in batch file format, or it can be integrated as a component or module to an interactive web-based tool, to allow data to be inputted and processed on a single individual at a time.
 
It is therefore also intended that EP - QRISK3 Engine will be licensed to other medical device manufacturers, so they can produce their own websites/front ends including QRISK3 Engine as a component.
 
== Safety information and cautions ==
EP- QRISK3 Engine cannot take the place of clinical assessment. No medical decision should be based solely on results provided by the risk calculator. This is a labelled misuse of the QRISK3 Engine.
 
When developing implementations of EP- QRISK3 Engine, licensees should review relevant research paper to ensure that implementations and any system generated recommendations to clinicians/users based on the output is in line with the original intended use. Licensees may be required to CA or CE mark individual implementations as medical devices depending on the output/decision provided by the software based on a particular risk score. This may require additional clinical investigations and may result in being a higher class of device than EP-QRISK3 Engine.
 
Clinicians are expected to apply their own clinical judgement to further risk stratify patients and are not expected to rely solely on the output from QRISK3® (via licensed implementations) in order to appropriately manage and advise their patients regarding their risk.
 
== Instructions for use ==
The REST API instructions are available at a Swagger at [https://dev.endeavourpredict.org/ https://dev.endeavourpredict.org/apis]


https://woygwkz5k2q3p63dm5i7d77d2m0idknz.lambda-url.eu-west-2.on.aws/index.html
To the local batch processor the instructions for Windows are:


== Source code ==
# Unzip the published pack to any folder
The source code for the APIs can be viewed on github at
# Unzip the test data to another folder


https://github.com/endeavour-predict/qrisk3-dotnet
To test


Note that the source code is made available under the GNU public license. 
# Take a copy of the test data and place in another folder
# using the windows command line execute the EP_QRisk3.Batch.exe with a parameter pointing to the test folder
# Note that the output is regenerated as output files. The can, if wished be compared against the original provided result files as they should be identical


However, the use of QRISK3 as a registered trademark is not an open license and terms and conditions apply to its use.
To run


== Use of health data for generating the independent variable values ==
# Generate source data as JSON files in the format as provided (which is the same as the API format)
# Using the command console, execute the EP_QRisk3.Batch.exe with a parameter pointing to the source folder.
 
== Query Rules  for health records ==
Systems may have access to longitudinal health records, in particular those held in General Practice. In that case those systems may elect to query the health record data  in a way that provides likely values for the variables, passed to the function as parameters to the QRISK function.
Systems may have access to longitudinal health records, in particular those held in General Practice. In that case those systems may elect to query the health record data  in a way that provides likely values for the variables, passed to the function as parameters to the QRISK function.


Line 34: Line 76:


=== Reference date ===
=== Reference date ===
Scores may be calculated in real time or retrospectively. The reference date (current date or past date) is used for all time dependent values,  which means  values as they would have been on the reference date. For example when looking for dates within 6 months this means 6 months prior to, or at the time of, the reference date.
Scores may be calculated in real time or retrospectively. The reference date (current date or past date) is used for all time dependent values,  which means  values as they would have been on the reference date. For example when looking for dates within 6 months this means 6 months prior to, or at the time of, the reference date and all entries subsequent are ignored.


=== Patient inclusion criteria ===
=== Patient inclusion criteria ===
Line 52: Line 94:
b) By a query of a health record.
b) By a query of a health record.


When passed into the algorithms as arguments to the function, the values are presented either as a double, an integer, a boolean 1 or 0,  or a character. The client must convert to these formats before submitting in the payload using the maps as documented below.
When passed into the algorithms as arguments to the function, the values are presented either enumerators (e.g. heavy Smoker) as a double (e.g. BMI), an integer (e.g. Systolic BP) or , a boolean true or false. The enumerator text values are documented in the API swagger and are the same for the local run time


If variables are unknown (missing) or their values are out of range, the algorithm may either reject the request, provide a default value for the parameter, or adjust an  out of range value to an outer limit. The way the algorithm handles these parameters are documented below in the relevant parameter.  
If variables are unknown (missing) or their values are out of range, the algorithm may either reject the request, provide a default value for the parameter, or adjust an  out of range value to an outer limit. The way the algorithm handles these parameters are documented below in the relevant parameter.  


Health records contain entries that have a property of a main concept (e.g. a systolic blood pressure), an effective date (the date of relevance to the observation or action), and a numeric value.  For the purpses of these rules, concepts are grouped into named sets  
Health records contain entries that have a property of a main concept (e.g. a systolic blood pressure), an effective date (the date of relevance to the observation or action), and a numeric value.  For the purposes of these rules, concepts are grouped into named sets.


Each concept set is universally identified with an  IRI (which is in the format of a URL) and the base iri namespace for Q concept sets is [http://apiqcodes.org/qcodes#QCodeGroup_16779 http://apiqcodes.org/qcodes#]. When used in the below tables, for clarity, the iri prefix "qr:" is used.
'''It should be noted that Drug sets are not supported currently. ('''Suppliers implement drug knowledge bases that are proprietary and may have different sets for different conceptual definitions such as antihypertensive drugs)'''.'''


Input parameters needed to calculate a QRISK3® score and their handling are as follows:
clinical sets can be examined at https://im.endeavourhealth.net/#/directory/folder/http:%2F%2Fapiqcodes.org%2Fqcodes%23QPredict_331


==== Row ID ====
Each concept set is universally identified with an  RDF IRI  (which is in the format of a URL) and the base iri namespace for Q concept sets is
Optional Integer.


Used by the client as a reference when a batch API is used. i.e. returned by the result. It has no scope beyond the API request/response
"<nowiki>http://apiqcodes.org/qcodes#QCodeGroup_</nowiki>" thus in the below table the numbers following this base IRI are used for brevity


==== Age ====
When querying records it is assumed that a '''reference date''' is used and that entry dates are relative to the ''reference date'' and that any entry after the reference date is ignored.
Mandatory Integer. Age of the person in years at the reference date


==== Gender ====
Input parameters needed to calculate a QRISK3® score and their handling are as follows:
Mandatory Character 'M' or 'F'. 
 
Male or female.
 
Binary values only accepted. QRISK does not have information on transgender or indeterminate gender risks at this stage. It is the responsibility of the requester as to whether to apply the higher risk M gender e.g. For Trans Women and to explain the rationale.
 
==== Cardiovascular disease ====
Optional Boolean 1 or 0 
 
Cardiovascular disease prior to the reference date
 
This is an inclusion criteria and should therefore be 0. The request will be rejected if this is set to 1
 
Default handling of unknown is 0
 
==== Atrial fibrillation ====
Optional Boolean 1 or 0.


Atrial fibrillation at any time prior to reference date.
QRisk does not differentiate a single one off AF event from chronic or intermittent AF. Clinical interpretation may be required for those with a single event many years ago.
Default handling of unknown is 0
Rule
<pre>
Observation
    concept qr:24
    effective date < reference date
</pre>
{| class="wikitable"
{| class="wikitable"
|+
|+
!Code group
!Parameter
!Maps to
!Type
!Values
!Description and query definition
|-
|Row id
|integer
|
|Used by the client as a reference when a batch API is used. i.e. returned by the result.
It has no scope beyond the API request/response
|-
|-
|qr:24
|Age
|1
|integer
|}
|
|Age of the person in years at the reference date
|-
|Gender
|Character
|Male - M
Female - F
|The Gender of the patient. Note that the risk following gender
transition is unknown, and thus a clinical judgement as to whether


==== Atypical anti psychotics ====
to use the category of male or category of female.
Optional Boolean 1 or 0.  
|-
|Cardiovascular disease
|boolean
|true
false
|Cardiovascular disease prior to the reference date
This is an inclusion criteria and should therefore be false. A valid RISK score
requires absence of cardiovascular disease. Query defined as


Second generation ‘atypical’ antipsychotic - prescribed two or more issues in the previous 6 months (includes amisulpride, aripiprazole, clozapine, lurasidone, olanzapine, paliperidone, quetiapine, risperidone, sertindole, or zotepine)
<b>Condition with concept of code group 411
|-
|Atrial fibrillation
|boolean
|true
false
|Atrial fibrillation at any time prior to reference date.
QRisk does not differentiate a single one off AF event from chronic or intermittent AF. Clinical interpretation may be required for those with a single event many years ago. Query defined as


Default handling of unknown is 0
<b>Observation with concept of code group 24
|-
|Erectile impotence
|boolean
|true
false
|A diagnosis of Erectile dysfunction or at least 2 prescriptions for drugs for dysfunction, one of which is within 28 days
Note that this factor is associated with a diagnosis as recorded in GP health records, and may or may not be valid as a response to a question. Query defined as
<b> Condition with code group 59


Rule
or (
<pre>
Drugs such as Alprostadil, Tadalafil, Sildenafil, Vardenafil, Avanafil, Yohimbine, Aviptadil


Medication request
the latest of which is within the last 28 days
        medication in qr:1169
        effective date range -6  to 0 months relative to reference date
Count(entries)>=2
</pre>


{| class="wikitable"
)
|+
|-
!Code Group
|Atypical anti psychotics
!Map
|boolean
|true or false
|Second generation ‘atypical’ antipsychotic - prescribed two or more issues in the previous 6 months (includes amisulpride, aripiprazole, clozapine, lurasidone, olanzapine, paliperidone, quetiapine, risperidone, sertindole, or zotepine). Query defined as
<b> 2 or more Prescriptions for code group 1169 within the last 6 months
 
|-
|-
|qr:1169
|Systemic corticosteriods
!1
|boolean
|}
|true or false
|Patient taking systemic corticosteroids. Query definition


==== Systemic corticosteriods ====
<b> 2 or more prescriptions for oral corticosteroids such as Hydrocortisone, Betamethasone, Deflazacort, Dexamethasone, Methylprednisolone, Prednisolone
Optional  Boolean 0 or 1
|-
|Migraine
|boolean
|true or false
|Diagnosis of migraine i.e. a diagnosis of migraine recorded in health records. Self reported migraines not resulting in a health record entered diagnosis is not evaluated. Query definition


Systemic corticosteroids –prescribed two or more issues in the previous 6 months
<b> Condition with concept group 39
|-
|Rheumatoid arthritis
|boolean
|true or false
|Diagnosis of Rheumatoid arthritis. Query definition is


Default handling unknown is 0
<b> Condition with concept group 58
|-
|Chronic renal disease
|boolean
|true or false
|Diagnosis of chronic renal disease. Query definition is:


Rule
<b> Condition with concept group of 322
<pre>
|-
Medication requests
|Severe mental Illness
      medication in qr: 1194
|boolean
      effective date range -6  to 0 months relative to reference date
|true or false
Count(entries) >=2
|Diagnosis of severe mental illness (psychosis, severe depression, manic depression, schizophrenia). Query definition is
</pre>


{| class="wikitable"
<b> Condition with concept group 3187
|+
!Code Group
!Map
|-
|-
|qr:1194
|Systemic lupus erythematosus
!1
|boolean
|}
|true or false
 
==== Migraine ====
Optional boolean 0 or 1
 
Diagnosis of migraine prior to the reference date.


Default handling of unknown is 0
|Diagnosis of Systemic Lupus erythematosus. Query definition is :


Rule
<b> Condition with code group 70
<pre>
Observation
      concept in qr:39
      effective date <= reference date
</pre>
{| class="wikitable"
|+
!Code Group
!Map
|-
|-
|qr:39
|Treated hypertension
!1
|boolean
|}
|true or false
|Diagnosis of hypertension at any time in the patient’s records AND On antihypertensive treatment if 1 or more prescriptions within the last 6 months. Query definition as follows


==== Rheumatoid arthritis ====
<b> Condition with concept group 21
Optional boolean 1 or 0


Diagnosis of Rheumatoid arthritis prior to the reference date
and


Default handling of unknown is 0
1 or more Prescriptions for anti hypertensive drugs


Rule
within the last 6 months
<pre>
Observation
      concept in qr:58
      effective date <=reference date
</pre>
{| class="wikitable"
|+
!Code Group
!Map
|-
|-
|qr:58
|Body mass index
!1
|double
|}
|
|The most recently recorded body mass index within the last 5 years. Query definition is


<b> Latest Observation with code group 200 within the last 5 years


==== Chronic renal disease ====
Out of range values handled by the engine are
Optional  boolean 1 or 0


Chronic renal disease at any time prior to the reference date
<18 is set to 18, >47 is set to 47
 
Default handling of unknown is 0
 
Rule
<pre>
Observation
    concept in qr:322
    effective date <= reference date
</pre>
{| class="wikitable"
|+
!Code Group
!Map
|-
|-
|qr:322
|Diabetes Category
!1
|Enumerated
|}
|None, type1, type2
|Diagnosis of diabetes mapped to a category. Note that resolved diabetes or well controlled diabetes) is not accounted for in the algorithm. Judgement should be used as to how the risk is applied. Query definition as follows


<b> From latest diagnosis of code groups 1913,2411


==== Severe mental Illness ====
Map code group 1913  Type1
Optional boolean 1 or 0


Diagnosis of severe mental illness (psychosis, severe depression, manic depression, schizophrenia) at any time prior to the reference date
Map code group 2411 Type2
 
|-
Default handling of unknown is 0
|Ethnicity
|Enumerated
|NotRecorded, British,  


Rule
Irish, OtherWhiteBackground,
<pre>
Observation
    concept in qr:3187
    effective date <=reference date
</pre>
 
{| class="wikitable"
|+
!Code Group
!Map
|-
|qr:3187
!1
|}


WhiteAndBlackCaribbeanMixed,


==== Systemic lupus erythematosis ====
WhiteAndBlackAfricanMixed,
Optional boolean 0 or 1


Diagnosis of systemic lupus erythematosis at any time prior to the reference date
WhiteAndAsianMixed, OtherMixed,


Default handling of  unknown is 0
Indian, Pakistani,


Rule
Bangladeshi, OtherAsian,
<pre>
Observation
    concept in qr:70
    effective date <= reference date
</pre>


{| class="wikitable"
Caribbean, BlackAfrican,
|+
!Code Group
!Map
|-
|qr:3187
!1
|}


OtherBlack, Chinese,


==== Treated hypertension ====
OtherEthnicGroup, NotStated
Optoinal boolean 1 or 0
|Most recent ethnicity. Query definition is


Diagnosis of hypertension at any time in the patient’s records AND On antihypertensive treatment if 1 or more medication requests within 6 months prior to the reference date.
<b> latest entry for code groups 17071, 17072, 17073, 17074, 17075,17076,


Default handling of unknown is 0
&nbsp;&nbsp;&nbsp;17077, 17089, 17079, 17080, 17081, 17090, 17985,17086, 17087)


Rule
Maps
<pre>
Observation
      concept in qr:21
      effective date <= reference date)


AND
17071 White british


Medication request
17072 White Irish
      medication in (medication qr:740 qr:751 qr:759 qr:760 qr:765 to be revised)
      effective date range -6 to 0  months relative to reference date
</pre>


{| class="wikitable"
17073 Other White Background
|+
!Code Group
!Name
!Map
|-
|qr:21
|Hypertension
|1
|-
|qr:740
|Thaizides
|1
|-
|qr:751
|Beta blockers
|1
|-
|qr:759
|ACE inhibitors
|1
|-
|qr: 760
|Angiotensin ii receptor agonists
|1
|-
|qr:765
|Calcium channel blockers
|1
|}


==== Body mass index ====
17074 White & Black Caribbean
Optional double


The most recently recorded body mass index for the patient recorded prior to the reference date recorded in the last 5 years.
17075 White & Black African


Default handling of unknown is estimate.
17076 White & Asian


Rule
17077 other mixed
<pre>


Observation
17089 Indian
        concept in, qr:200
        effective date range -5years  to 0 time relative to reference date.
Most recent entry
</pre>


Handling of out of range values by the calculator
17079 Pakistani


<18 is set to 18, >47 is set to 47
17080 Bangladeshi


{| class="wikitable"
17081 Other Asian
|+
!Code Group
!Name
!Map
|-
|qr:200
|Body mass index
|1
|}


17090 Caribbean


==== Diabetes Category ====
17083 Black African


Optional integer 0 or 1 or 2
17091 Other Black


Categorical variable to denote no diabetes, type 1 diabetes or type 2 diabetes diagnosed at any time prior to the reference date
17985 Chinese


Default handling of unknown is 0
17086 Other ethnic group


Rule
qr:17087 Not stated and not classified
<pre>
Observation
    concept in qr:1913,qr:2411
    effective date <=reference date
Most recent entry
</pre>
{| class="wikitable"
|+
!Code Group
!Name
!Map
|-
|-
|qr:1913
|Family history of Coronary heart disease
|Type 1 diabetes
|boolean
|1
|true or false
|-
|Family history of coronary heart disease in a first degree relative under the age of 60 years. Query definition is
|qr:2411
|Type II diabetes
|2
|}
 
==== Ethnicity ====
Optional integer between 0 and 17
 
Ethnic category


Default handling of unknown is 0
<b> Entry for concept group 404
 
Rule
<pre>
Patient
    Ethnicity in (qr:17071, qr:17072, qr:17073, qr:17074, qr:17075, qr:17076, qr:17077, qr:17089, qr:17079, qr:17080, qr:17081, qr:17090, qr:17985, qr:17086, qr: 17087)
</pre>
 
{| class="wikitable"
|+
!Code Group
!Name
!Map
|-
|-
|null
|Total cholesterol HDL ratio
|double
|
|
|0
|The latest ratio of total serum cholesterol/HDL recorded in the last 5 years. The ratio is either directly directly recorded can be calculated using total cholesterol  divided by hdl. Query definition is:
|-
|qr:17071
|White british
|1
|-
|qr:17072
|White Irish
|2
|-
|qr:17073
|Other White Background
|3
|-
|qr:17074
|White & Black Caribbean
|4
|-
|qr:17075
|White & Black African
|5
|-
|qr:17076
|White & Asian
|6
|-
|qr:17077
|other mixed
|7
|-
|wr:17089
|Indian
|8
|-
|qr:17079
|Pakistani
|9
|-
|qr:17080
|Bangladeshi
|10
|-
|qr:17081
|Other Asian
|11
|-
|qr:17090
|Caribbean
|12
|-
|qr: 17083
|Black African
|13
|-
|qr:17091
|Other Black
|14
|-
|qr:17985
|Chinese
|15
|-
|qr:17086
|Other ethnic group
|16
|-
|qr:17087
|Not stated and not classified
|17
|}


<b>latest Observation with concept group 16 (TC)
   
Latest concept group 367 (HDL)
         


Latest concept group 405 (TCHDL)
     


==== Family history of Coronary heart disease ====
If TCHDL effective date > TC effective date  OR TCHDL effective date >HDL effective date
Optional boolean 0 or 1 default 0
     
&nbsp;&nbsp;&nbsp;then value= TCHDL numeric value


Family history of coronary heart disease in a first degree relative under the age of 60 years recorded before the reference date
else if TC effective date > TCHDL AND HDL effective date >TCHDL effective date
 
Default handling of unknown is 0
 
Rule
<pre>
Observation
    concept in qr:404
    effective date <= reference date
</pre>
{| class="wikitable"
|+
!Code Group
!Name
!Map
|-
|qr:404
|Family history of coronary heart disease
|1
|}


==== Total cholesterol HDL ratio ====
Optional double


The most recent ratio of total serum cholesterol/HDL recorded in the last 5 years. The ratio is either directly directly recorded (eg using group 405) or can be calculated using total cholesterol  divided by hdl.
&nbsp;&nbsp;&nbsp;then value = TC / HDL


Note that the person must either have a ratio or both a total and hdl value.
else


Default handling of unknown is estimate
&nbsp;&nbsp;&nbsp;value = null


Rule
<pre>
Observation
          concept in qr:16 (total cholesterol TC)
          effective date <=reference date - MOST recent as TC
Observation
          concept in qr:367 (HDL)
          effective date <=reference date - MOST recent as HDL
Observation
          concept in qr:405 (CHDL ratio)
          effective date <=reference date MOST recent as TCHDL
If TCHDL effective date > TC effective date  OR TCHDL effective date >HDL effective date
      then value= TCHDL numeric value
else if TC effective date  > TCHDL AND HDL effective date >TCHDL effective date
      then value = TC / HDL
else
      value = null
</pre>


Handling of out of range values by calculator
Handling of out of range values by calculator
<1 is set to 1, >12 is set to 12
<1 is set to 1, >12 is set to 12
|-
|Smoking category
|Enumerated
| NonSmoker, ExSmoker,


==== Smoking category ====
LightSmoker, ModerateSmoker,  
Optional integer 0, 1 ,2 ,3 or 4  default 0


Category variable The most recently recorded smoking status with 5 levels
HeavySmoker, NotKnown
| The most recently recorded smoking status with 5 levels


This categorisation has one group for ex-smokers rather than trying to distinguish between ex light, ex moderate and ex heavy smokers.
This categorisation has one group for ex-smokers rather than trying to distinguish between ex light, ex moderate and ex heavy smokers.
Line 554: Line 377:
The logic on non smoker is that from the entry of the most recent if it has a numeric value or if there other codes on the same day with numerics take the numeric value on the same day as the most recent, unless the most recent is non smoker  
The logic on non smoker is that from the entry of the most recent if it has a numeric value or if there other codes on the same day with numerics take the numeric value on the same day as the most recent, unless the most recent is non smoker  


Default handling of unknown is 0
Query definition is


Rule
<b>
Observation with concept group,2239 -(NONE), 2238 (EX)


<pre>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2244 (LIGHT), 2242 (MODERATE),2243 (HEAVY) as ENTRIES
Observation
      concept in (qr:2239 -(NONE), qr:2238 (EX) , qr:2244 (LIGHT), qr:2242 (MODERATE), qr:2243 (HEAVY)
      effective date <=reference date
      numeric value is NULL
    as NOVALUE


Observation
GET latest from ENTRIES with Numeric Value >0 (LATESTWITHVALUE)
      concept in (qr:2239 -(NONE), qr:2238 (EX) , qr:2244 (LIGHT), qr:2242 (MODERATE), qr:2243 (HEAVY)
        effective date <=reference date
        numeric value not null
    as HASVALUE


Sort by effective date time descending.
GET latest from ENTRIES (LATESTSMOKING)


If most recent is NOVALUE (as MOSTRECENT)
IF Date of LATESTWITHVALUE == Date of LATESTSMOKING
  if most recent HAS VALUE effective date= MOSTRECENT effective date    // non value and value on same date!
        then value is numeric map of HASVALUE numeric value
  else
    value is concept map of NOVALUE concept
else if most recent is HAS VALUE
    value is numeric map of MOSTRECENT numeric value


else
&nbsp;&nbsp;&nbsp;use SmokingValueMap
  no record value is null
 
ELSE
 
nbsp;&nbsp;&nbsp;use Smoking concept group Map


</pre>
Concept set Map
{| class="wikitable"
|+
!Code Group
!Name
!Map
|-
|qr:2239
|None smoker
|0
|-
|qr:2238
|Ex Smoker
|1
|-
|qr:2244
|light smoker
|2
|-
|qr:2242
|Moderate smoker
|3
|-
|qr:2243
|Heavy smoker
|4
|}


Numeric map
Smoking concept Map


{| class="wikitable"
2239 None smoker
|+
!Range from to
!Map
|-
|0 -9
|2
|-
|10- 19
|3
|-
|>= 20
|4
|}


==== Systolic blood pressure ====
2238 Ex Smoker
Optional integer


The most recent systolic blood pressure within 5 years prior to the reference date
2244 light smoker


Default handling of unknown is estimate
2242 Moderate smoker


Rule
2243 Heavy smoker
<pre>
Observation
    concept in qr:198 Systolic blood pressure
    effective date >- -5 years to 0 time relative to reference date
Most recent entry
</pre>


Handling of values out of range
Numeric value map
<70 is set to 70, >210 is set to 210
0-9 Light Smoker


10-19 Moderate smoker


>=20  Heavy smoker


Standard deviation of systolic blood pressures


Optional double
|-
|Systolic blood pressure
|integer
|
| The most recent systolic blood pressure within 5 years. Query definition is


The SAMPLE style Standard deviation of all of the available systolic blood pressures prior to the reference date  recorded in the last 5 years


Rule
<b> Numeric value of Most recent Observation with concept group 198 within the last 5 years and numeric value not null
<pre>
      
Observation
</b>
    concept in qr:198 Systolic blood pressure
     effective date >- -5 years to 0 time relative to reference date


Standard deviation (sample)
Handling of values out of range
</pre>


<70 is set to 70, >210 is set to 210
|-
| Standard deviation of systolic blood pressures
|double
|
| The SAMPLE style Standard deviation of all of the available systolic blood pressures prior to the reference date  recorded in the last 5 years. Note that EP QRISK3 will calculate the spb 5 from a list of values. Query definition is


==== Townsend score ====
<b>  Observation with concept group 198 and numerivc value not null
Optional double
 


The Townsend score associated with the output area of a patient’s postcode based on the 2001 census data.
Return  Standard deviation (sample) (Systolics) or list of values
|-
|Townsend score
|double
|
|The Townsend score associated with the output area of a patient’s postcode based on the 2001 census data.


Available via API
Available via API


Default handling of unknown is 0  (the mean of the national scores)
Default handling of unknown is 0  (the mean of the national scores)
|-
|}

Latest revision as of 08:49, 6 April 2024

Endeavour Predict is a manufacturer of EP QRISK3 Engine which is the implementation of QRISK3 by Endeavour Predict.

The EP QRISK3 Engine, with both a Web API and local run time components are now registered as a class 1 device with the MHRA and available for use.

Background

Information about the research and algorithms that resulted in QRISK3, as well as the free to use Web site can be viewed at https://qrisk.org and a related presentation, a CVD lifetime risk at https://qrisk.org/lifetime/index.php

Predict Services

QRISK3 risk score can be calculated using Endeavour Predict services, which consist of:

  1. A set of Web based APIs for submitting requests for a prediction and receiving a response, the response including a risk score, and other score specific information for example in QRISK3, a heart age , as well as information relating to the calculation of the scores.
  2. A local run time C# or Java jar version for integration into local systems that prefer not to use a web UI.
  3. A set of FHIR APIS to enable system suppliers to know which Snomed-CT concepts should be used when deriving information from records. These are part of the Endeavour information model services.
  4. A REST API for deriving a Townsend deprivation score from a post code, the Townsend score being then submitted as part of the QRISK request payload.

Concept (Value) sets and FHIR API

Draft versions of value sets are available via the Endeavour API dev portal at https://dev.endeavourpredict.org/apis, which is a self sign up process, enabling access to a number of the public APIs. The concept sets are available as FHIR value sets at the self sign up developer portal

In line with FHIR an semantic web standards, each set is given a unique IRI and it is the IRI that is used as identifiers in the API call.

the QRISK3 superset iri is http://apiqcodes.org/qcodes#QPredict_331 which includes the subsets. The score level concepts sets contain subsets so that recursive calls can be made to obtain each set. Alternatively, using the $expand operation, the entire subset can be obtained as one.

The sets can also be independently examined or obtained via the information manager, selecting the hierarchy option to view the subsets.https://im.endeavourhealth.net/#/directory/folder/http:%2F%2Fapiqcodes.org%2Fqcodes%23QPredict_331 . The concept sets can be downloaded from the IM application in excel CSV , or TSV

Within Endeavour each concept is given a unique identifier or IRI in line with semantic Web. Users will be more familiar with the use of the concept's code and this is provided as well as maps to alternative code schemes.

APIs (Web and local)

A developer portal for qrisk3 is available at https://dev.endeavourpredict.org/apis

The algorithms are available over the internet via REST API calls or a locally deployed .NET assembly, or a locally deployed Java jar. In all 3 variations the input format (JSON) and parameters are the same and the result format (JSON) is the same. Consequently suppliers using local versions may use the developer portal to test input and output formats.

When using a locally deployed implementation, a test pack SDK is provided to enable unit and integration testing by end suppliers.

Intended use

EP - QRISK3 Engine is a clinical decision support tool intended to facilitate individualised discussions between medically trained professionals and patients about their individual risk of heart attacks or stroke taking account of their demographic and medical profile.

This will enable shared decision making, allowing patients to understand their risk and discuss actions that could be taken in the context of other important factors to reduce their risk.

EP - QRISK3 Engine has been developed for both public health purposes as well as individual therapeutic or health care decisions.

EP - QRISK3 Engine has been developed so that it can either run as a standalone process, with data being submitted and results returned in batch file format, or it can be integrated as a component or module to an interactive web-based tool, to allow data to be inputted and processed on a single individual at a time.

It is therefore also intended that EP - QRISK3 Engine will be licensed to other medical device manufacturers, so they can produce their own websites/front ends including QRISK3 Engine as a component.

Safety information and cautions

EP- QRISK3 Engine cannot take the place of clinical assessment. No medical decision should be based solely on results provided by the risk calculator. This is a labelled misuse of the QRISK3 Engine.

When developing implementations of EP- QRISK3 Engine, licensees should review relevant research paper to ensure that implementations and any system generated recommendations to clinicians/users based on the output is in line with the original intended use. Licensees may be required to CA or CE mark individual implementations as medical devices depending on the output/decision provided by the software based on a particular risk score. This may require additional clinical investigations and may result in being a higher class of device than EP-QRISK3 Engine.

Clinicians are expected to apply their own clinical judgement to further risk stratify patients and are not expected to rely solely on the output from QRISK3® (via licensed implementations) in order to appropriately manage and advise their patients regarding their risk.

Instructions for use

The REST API instructions are available at a Swagger at https://dev.endeavourpredict.org/apis

To the local batch processor the instructions for Windows are:

  1. Unzip the published pack to any folder
  2. Unzip the test data to another folder

To test

  1. Take a copy of the test data and place in another folder
  2. using the windows command line execute the EP_QRisk3.Batch.exe with a parameter pointing to the test folder
  3. Note that the output is regenerated as output files. The can, if wished be compared against the original provided result files as they should be identical

To run

  1. Generate source data as JSON files in the format as provided (which is the same as the API format)
  2. Using the command console, execute the EP_QRisk3.Batch.exe with a parameter pointing to the source folder.

Query Rules for health records

Systems may have access to longitudinal health records, in particular those held in General Practice. In that case those systems may elect to query the health record data in a way that provides likely values for the variables, passed to the function as parameters to the QRISK function.

In this case, a set of query criteria and rules are applied to the record entries and the values of the variables derived from those entries. These are then presented to a user for confirmation or amendment before being submitted via the API.

It is strongly recommended that for any individual decision, or when an entry of a risk score is into a record is being considered, that each set of assumptions are confirmed by the user. However, purely automated calculations may be used for population based risk stratification.

Reference date

Scores may be calculated in real time or retrospectively. The reference date (current date or past date) is used for all time dependent values, which means values as they would have been on the reference date. For example when looking for dates within 6 months this means 6 months prior to, or at the time of, the reference date and all entries subsequent are ignored.

Patient inclusion criteria

This section documents the criteria for a person suitable for the application of QRISK3

  • Aged between 25 and 84 inclusive at the reference date

• Free from a diagnosis of cardiovascular disease (qr: group 411 see below) on or before the reference date

Independent variables as function parameters

QRISK® operates as a function whose parameters represent independent variables. The API accepts these arguments as JSON key value pairs (or lists) in the payload of the request.

The values of those variables, when used in the algorithm are derived in one of two ways

a) By direct entry by a user

b) By a query of a health record.

When passed into the algorithms as arguments to the function, the values are presented either enumerators (e.g. heavy Smoker) as a double (e.g. BMI), an integer (e.g. Systolic BP) or , a boolean true or false. The enumerator text values are documented in the API swagger and are the same for the local run time

If variables are unknown (missing) or their values are out of range, the algorithm may either reject the request, provide a default value for the parameter, or adjust an out of range value to an outer limit. The way the algorithm handles these parameters are documented below in the relevant parameter.

Health records contain entries that have a property of a main concept (e.g. a systolic blood pressure), an effective date (the date of relevance to the observation or action), and a numeric value. For the purposes of these rules, concepts are grouped into named sets.

It should be noted that Drug sets are not supported currently. (Suppliers implement drug knowledge bases that are proprietary and may have different sets for different conceptual definitions such as antihypertensive drugs).

clinical sets can be examined at https://im.endeavourhealth.net/#/directory/folder/http:%2F%2Fapiqcodes.org%2Fqcodes%23QPredict_331

Each concept set is universally identified with an RDF IRI (which is in the format of a URL) and the base iri namespace for Q concept sets is

"http://apiqcodes.org/qcodes#QCodeGroup_" thus in the below table the numbers following this base IRI are used for brevity

When querying records it is assumed that a reference date is used and that entry dates are relative to the reference date and that any entry after the reference date is ignored.

Input parameters needed to calculate a QRISK3® score and their handling are as follows:

Parameter Type Values Description and query definition
Row id integer Used by the client as a reference when a batch API is used. i.e. returned by the result.

It has no scope beyond the API request/response

Age integer Age of the person in years at the reference date
Gender Character Male - M

Female - F

The Gender of the patient. Note that the risk following gender

transition is unknown, and thus a clinical judgement as to whether

to use the category of male or category of female.

Cardiovascular disease boolean true

false

Cardiovascular disease prior to the reference date

This is an inclusion criteria and should therefore be false. A valid RISK score requires absence of cardiovascular disease. Query defined as

Condition with concept of code group 411

Atrial fibrillation boolean true

false

Atrial fibrillation at any time prior to reference date.

QRisk does not differentiate a single one off AF event from chronic or intermittent AF. Clinical interpretation may be required for those with a single event many years ago. Query defined as

Observation with concept of code group 24

Erectile impotence boolean true

false

A diagnosis of Erectile dysfunction or at least 2 prescriptions for drugs for dysfunction, one of which is within 28 days

Note that this factor is associated with a diagnosis as recorded in GP health records, and may or may not be valid as a response to a question. Query defined as

Condition with code group 59

or ( Drugs such as Alprostadil, Tadalafil, Sildenafil, Vardenafil, Avanafil, Yohimbine, Aviptadil

the latest of which is within the last 28 days

)

Atypical anti psychotics boolean true or false Second generation ‘atypical’ antipsychotic - prescribed two or more issues in the previous 6 months (includes amisulpride, aripiprazole, clozapine, lurasidone, olanzapine, paliperidone, quetiapine, risperidone, sertindole, or zotepine). Query defined as

2 or more Prescriptions for code group 1169 within the last 6 months

Systemic corticosteriods boolean true or false Patient taking systemic corticosteroids. Query definition

2 or more prescriptions for oral corticosteroids such as Hydrocortisone, Betamethasone, Deflazacort, Dexamethasone, Methylprednisolone, Prednisolone

Migraine boolean true or false Diagnosis of migraine i.e. a diagnosis of migraine recorded in health records. Self reported migraines not resulting in a health record entered diagnosis is not evaluated. Query definition

Condition with concept group 39

Rheumatoid arthritis boolean true or false Diagnosis of Rheumatoid arthritis. Query definition is

Condition with concept group 58

Chronic renal disease boolean true or false Diagnosis of chronic renal disease. Query definition is:

Condition with concept group of 322

Severe mental Illness boolean true or false Diagnosis of severe mental illness (psychosis, severe depression, manic depression, schizophrenia). Query definition is

Condition with concept group 3187

Systemic lupus erythematosus boolean true or false Diagnosis of Systemic Lupus erythematosus. Query definition is :

Condition with code group 70

Treated hypertension boolean true or false Diagnosis of hypertension at any time in the patient’s records AND On antihypertensive treatment if 1 or more prescriptions within the last 6 months. Query definition as follows

Condition with concept group 21

and

1 or more Prescriptions for anti hypertensive drugs

within the last 6 months

Body mass index double The most recently recorded body mass index within the last 5 years. Query definition is

Latest Observation with code group 200 within the last 5 years

Out of range values handled by the engine are

<18 is set to 18, >47 is set to 47

Diabetes Category Enumerated None, type1, type2 Diagnosis of diabetes mapped to a category. Note that resolved diabetes or well controlled diabetes) is not accounted for in the algorithm. Judgement should be used as to how the risk is applied. Query definition as follows

From latest diagnosis of code groups 1913,2411

Map code group 1913 Type1

Map code group 2411 Type2

Ethnicity Enumerated NotRecorded, British,

Irish, OtherWhiteBackground,

WhiteAndBlackCaribbeanMixed,

WhiteAndBlackAfricanMixed,

WhiteAndAsianMixed, OtherMixed,

Indian, Pakistani,

Bangladeshi, OtherAsian,

Caribbean, BlackAfrican,

OtherBlack, Chinese,

OtherEthnicGroup, NotStated

Most recent ethnicity. Query definition is

latest entry for code groups 17071, 17072, 17073, 17074, 17075,17076,

   17077, 17089, 17079, 17080, 17081, 17090, 17985,17086, 17087)

Maps

17071 White british

17072 White Irish

17073 Other White Background

17074 White & Black Caribbean

17075 White & Black African

17076 White & Asian

17077 other mixed

17089 Indian

17079 Pakistani

17080 Bangladeshi

17081 Other Asian

17090 Caribbean

17083 Black African

17091 Other Black

17985 Chinese

17086 Other ethnic group

qr:17087 Not stated and not classified

Family history of Coronary heart disease boolean true or false Family history of coronary heart disease in a first degree relative under the age of 60 years. Query definition is

Entry for concept group 404

Total cholesterol HDL ratio double The latest ratio of total serum cholesterol/HDL recorded in the last 5 years. The ratio is either directly directly recorded can be calculated using total cholesterol divided by hdl. Query definition is:

latest Observation with concept group 16 (TC)

Latest concept group 367 (HDL)


Latest concept group 405 (TCHDL)


If TCHDL effective date > TC effective date OR TCHDL effective date >HDL effective date

   then value= TCHDL numeric value

else if TC effective date > TCHDL AND HDL effective date >TCHDL effective date


   then value = TC / HDL

else

   value = null


Handling of out of range values by calculator <1 is set to 1, >12 is set to 12

Smoking category Enumerated NonSmoker, ExSmoker,

LightSmoker, ModerateSmoker,

HeavySmoker, NotKnown

The most recently recorded smoking status with 5 levels

This categorisation has one group for ex-smokers rather than trying to distinguish between ex light, ex moderate and ex heavy smokers.

This categorisation does not distinguish between cigarette/cigar and pipe smokers

Special consideration should be given to records that contain both numeric values for the number of cigarettes smoked, and concepts that categorise into light moderate or heavy.

The logic on non smoker is that from the entry of the most recent if it has a numeric value or if there other codes on the same day with numerics take the numeric value on the same day as the most recent, unless the most recent is non smoker

Query definition is

Observation with concept group,2239 -(NONE), 2238 (EX)

      2244 (LIGHT), 2242 (MODERATE),2243 (HEAVY) as ENTRIES

GET latest from ENTRIES with Numeric Value >0 (LATESTWITHVALUE)

GET latest from ENTRIES (LATESTSMOKING)

IF Date of LATESTWITHVALUE == Date of LATESTSMOKING

   use SmokingValueMap

ELSE

nbsp;  use Smoking concept group Map


Smoking concept Map

2239 None smoker

2238 Ex Smoker

2244 light smoker

2242 Moderate smoker

2243 Heavy smoker

Numeric value map 0-9 Light Smoker

10-19 Moderate smoker

>=20 Heavy smoker


Systolic blood pressure integer The most recent systolic blood pressure within 5 years. Query definition is


Numeric value of Most recent Observation with concept group 198 within the last 5 years and numeric value not null

Handling of values out of range

<70 is set to 70, >210 is set to 210

Standard deviation of systolic blood pressures double The SAMPLE style Standard deviation of all of the available systolic blood pressures prior to the reference date recorded in the last 5 years. Note that EP QRISK3 will calculate the spb 5 from a list of values. Query definition is

Observation with concept group 198 and numerivc value not null


Return Standard deviation (sample) (Systolics) or list of values

Townsend score double The Townsend score associated with the output area of a patient’s postcode based on the 2001 census data.
Available via API

Default handling of unknown is 0 (the mean of the national scores)