Protocol & Schedule
Example
Docson Documentation for aRMT Protocols https://radar-base.github.io/RADAR-aRMT-protocols/
Note: calculated times are based on local time, 00:00 is midnight on the phone.
protocol.json File Documentation
The protocol schedule is used to control the delivery of 1) the schedule of questionnaires or aRMT components and 2) the notifications schedule. There is also interactive schema documentation.
element | purpose |
---|---|
version | increment this if either the version of the protocol changes or if the questionnaires change |
schemaVersion | the version of the AVRO schema being used to post to the backend and Kafka |
healthIssues | the class of health area the protocol applies to |
"repository": "https://raw.githubusercontent.com/RADAR-base/RADAR-REDCap-aRMT-Definitions/master/questionnaires/" | the github repository holding the versions of the questionnaires |
"startText": | language variants for the start text |
estimatedCompletionTime | suggested completion time shown for the aRMT |
"protocol": { "repeatProtocol": { "unit": "day", "amount": 14 }, "repeatQuestionnaire": { "unit": "min", "unitsFromZero": [ 540 ] }, "reminders": { "unit": "day", "amount": 4, "repeat": 1 } } } | The protocol block is the most important part of the configuration, it controls the regimen. The block consists of 3 main components the "repeatProtcol", "repeatQuestionnaire", "reminders"; and an optional clinicalProtocols component in this block. |
e.g. repeat the repeatQuestionnaire regimen every 1 day "repeatProtocol": { "unit": "day", "amount": 1 } e.g. repeat the repeatQuestionnaire regimen every 14 days "repeatProtocol": { "unit": "day", "amount": 14 } | The frequency at which to repeat the "repeatQuestionnaire" regimen is provided by repeatProtocol: unit: unit of time e.g. day amount: how often to repeat the whole repeatQuestionnaire block |
e.g. schedule the questionnaire after 480 mins from midnight "repeatQuestionnaire": { "unit": "min", "unitsFromZero": [ 480 ] } e.g. set of offsets at these minutes past midnight of the set day: "repeatQuestionnaire": { "unit": "min", "unitsFromZero": [ 480, 540, 600, 660, 720, 780, 840, 900, 960, 1020, 1080, 1140, 1200 ] }, | This is important as it controls the schedule of the particular questionnaire and subsequent push notifications i) schedule the questionnaire on the app and ii) schedule the notifications offsets are in the given units and start from midnight of the protocol repeating i.e. repeatProtocol e.g. above would be every 14 days, and 480th minute from the start of that 14 day period. Arrays of offsets can provided for a repeating regimen for example with ESM is delivered at several time points withing the repeatProtocol period. 480, It is set from the Enrolment Date on the Management Portal, the given units are configurable. repeatQuestionnaire: unit: the unit of time e.g. minuite unitsFromZero: set of offsets to repeat the questionnaire |
"reminders": { "unit": "day", "amount": 4, "repeat": 1 } | The numbers of reminder notifications to issue for that questionnaire unit: of time the amount is measured in e.g day amount: the number of unit time over which "repeat" number of reminders are delivered repeat: the number of times to repeat the reminder |
"clinicalProtocol": { "requiresInClinicCompletion": true, "repeatAfterClinicVisit": { "unit": "min", "unitsFromZero": [ 10080 ] } } | This is a special case implemented for the Multiple Sclerosis walking and balance tests which require to be repeated 1 week after the initial test in the clinic. in clinic test is selected by clicking on the icon in the app requiresInClinicCompletion: flag set by the clinician in the app repeatAfterClinicVisit: unit: e.g. min unitsFromZero: the offset time after the in-clinic test |
completionWindow "completionWindow": { "unit": "min", "amount": 5 } | The amount of time the questionnaire is available for completion after it's scheduled time. If this block is not specified in the protocol, then the default completion window in the app is 15 mins for ESM and 1 Day for all other tasks. It is recommended to specify this block in the protocol. unit: unit of time e.g. day amount: The time for which the questionnaire is available for completion. |
Example protocol.json File
{ "version": "0.2.0", "schemaVersion": "0.0.2", "name": "RADAR MDD KCL s1", "healthIssues": [ "depression" ], "protocols": [ { "name": "THINC-IT", "showIntroduction": "false", "questionnaire": { "repository": "https://raw.githubusercontent.com/RADAR-base/RADAR-REDCap-aRMT-Definitions/master/questionnaires/", "name": "thinc_it", "avsc": "notification" }, "startText": { "en": "", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "endText": { "en": "", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "warn": { "en": "Requires a quiet space.", "it": "Richiede uno spazio tranquillo.", "nl": "Vereist een rustige ruimte.", "da": "Kræver et stille rum.", "de": "Benötigt einen ruhigen Platz.", "es": "Requiere un espacio tranquilo." }, "estimatedCompletionTime": 1, "protocol": { "repeatProtocol": { "unit": "day", "amount": 42 }, "repeatQuestionnaire": { "unit": "min", "unitsFromZero": [ 600 ] }, "reminders": { "unit": "day", "amount": 0, "repeat": 0 } } }, { "name": "PHQ8", "showIntroduction": "false", "questionnaire": { "repository": "https://raw.githubusercontent.com/RADAR-CNS/RADAR-REDCap-aRMT-Definitions/master/questionnaires/", "name": "phq8", "avsc": "questionnaire" }, "startText": { "en": "This questionnaire is known as the PHQ8. Clinicians use it to assess current depression in patients. Please note that none of your answers will be collected today. Thank you for taking part in this focus group.", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "endText": { "en": "Thank you for taking the time today.", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "warn": { "en": "", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "estimatedCompletionTime": 3, "protocol": { "repeatProtocol": { "unit": "day", "amount": 14 }, "repeatQuestionnaire": { "unit": "min", "unitsFromZero": [ 510 ] }, "reminders": { "unit": "day", "amount": 4, "repeat": 1 }, "completionWindow": { "unit": "day", "amount": 3 } } }, { "name": "RSES", "showIntroduction": "false", "questionnaire": { "repository": "https://raw.githubusercontent.com/RADAR-CNS/RADAR-REDCap-aRMT-Definitions/master/questionnaires/", "name": "rses", "avsc": "questionnaire" }, "startText": { "en": "", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "endText": { "en": "", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "warn": { "en": "", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "estimatedCompletionTime": 3, "protocol": { "repeatProtocol": { "unit": "day", "amount": 14 }, "repeatQuestionnaire": { "unit": "min", "unitsFromZero": [ 540 ] }, "reminders": { "unit": "day", "amount": 4, "repeat": 1 } } }, { "name": "ESM", "showIntroduction": "false", "questionnaire": { "repository": "https://raw.githubusercontent.com/RADAR-CNS/RADAR-REDCap-aRMT-Definitions/master/questionnaires/", "name": "esm", "avsc": "questionnaire" }, "startText": { "en": "", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "endText": { "en": "", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "warn": { "en": "", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "estimatedCompletionTime": 3, "protocol": { "repeatProtocol": { "unit": "day", "amount": 42 }, "repeatQuestionnaire": { "unit": "min", "unitsFromZero": [ 1890, 1985, 2073, 2160, 2253, 2385, 2440, 2543, 2612, 3337, 3456, 3560, 3602, 3695, 3780, 3870, 3968, 4075, 4784, 4863, 4950, 5040, 5130, 5220, 5310, 5400, 5490, 6210, 6300, 6390, 6480, 6570, 6660, 6750, 6840, 6930, 7650, 7745, 7862, 7923, 8055, 8113, 8199, 8287, 8376, 9143, 9183, 9297, 9374, 9450, 9544, 9646, 9732, 9823 ] }, "reminders": { "unit": "day", "amount": 0, "repeat": 0 } } }, { "name": "DEMO", "showIntroduction": "true", "questionnaire": { "repository": "https://raw.githubusercontent.com/RADAR-CNS/RADAR-REDCap-aRMT-Definitions/master/questionnaires/", "name": "esm-demo", "avsc": "questionnaire" }, "startText": { "en": "", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "endText": { "en": "", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "warn": { "en": "", "it": "", "nl": "", "da": "", "de": "", "es": "" }, "estimatedCompletionTime": 3, "protocol": { "repeatProtocol": { "unit": "day", "amount": 42 }, "repeatQuestionnaire": { "unit": "min", "unitsFromZero": [ 480 ] }, "reminders": { "unit": "day", "amount": 0, "repeat": 0 } } } ] }
Questionnaire Display Prioritisation
This depends on the order
property in the protocol.
Nonclinical Tasks / Regular Questionnaires
This is mainly applicable for cases when the user has multiple pending tasks to complete at the time of opening the app. On clicking on a aRMT notification, the ordering of the questions presented upon opening the app (and pressing the Start button) depends on two properties: task time
and order
, with order
taking higher precedence. For example, if a user has a questionnaire at 9AM and a questionnaire at 10AM, then he opens the app at 10AM, he now has 2 questionnaires pending. The first questionnaire presented upon pressing the Start button would depend on which questionnaire has a the lower order number (higher priority). If the two questionnaires have the same order, the task times will then be compared.
Clinical Tasks
For clinical tasks, the order in which the tasks are displayed on the list (in the clinical tasks page) depends on the order
property (lower order means higher position in the list).
*Regular tasks or nonclinical tasks are the tasks that have a specific start time and expiry, that can be filled out by tapping 'Start' on the home page or by tapping the task on the task calendar. Clinical tasks are tasks that can be filled out on demand by tapping the stethoscope icon on the home page.