Summary
This article describes best practices to follow when configuring each section of the DataArchitect file.
Table of Contents
- General
- Trial Manager – When Compiling
- Application Setup
- App Properties
- Form Types Definition and Template
- Display
- Question Types – Definition
- Dependencies – Definition
- Standard Dependencies
- Role defaults
- Scripts
- Form Flow
- Exports
- Medical Coding configuration
- Randomization
- Unit Testing
- Study Amendments
- Design Services Peer Review Process
The tables below describes best practices to follow when configuring each section of the DataArchitect file. Keep in mind each study is unique and may require a deviation from these practices.
General
- Auto Filter is not set for any column in the DataArchitect file
- No misspellings throughout the DataArchitect file
- Use of correct grammar and consistent punctuation
- Consistency should be used in the naming of questions. e.g. all camelCase, all lowercase or _ used throughout.
- Eliminate excessive dependencies, forms, questions etc.
Trial Manager – When Compiling
Practice | Explanation |
---|---|
No errors or warnings show when you compile. | Warnings are less strict than errors. Errors will prevent a successful compile while warnings will not. |
Application Setup
Practice | Explanation |
---|---|
enterKeyAction | none |
initialFormToDisplay | the enrollment/registration form |
App Properties
Practice | Explanation |
---|---|
Enable recordLocator1 and recordLocator2 properties. | RecordLocator1 and recordLocator2 are important because they uniquely identify the subject or patient within the database. This is especially important when you are making mid-study changes or running an import. |
Default the following properties mostOftenAlertedCount mostOftenQueriedCount queriesOlderThanDays1 queriesOlderThanDays2 autoCorrectDateFormat confirmEnrollment noRfcOnInitialBlankEntry | Value 10 10 7 14 true true yes |
studyAuditDateFormat | the date portion should match that being used in the study (defined on the Naming conventions tab) |
In line queries | should be a default (apply to all roles) |
Form Types Definition and Template
Practice | Explanation | Example (Sample Images Below) |
---|---|---|
Form Rename added for dynamics must contain at least one hard-coded component. | A hard-coded component is needed or else the form rename can potentially be left blank. | Image Below |
Form Rename needs a leading space or double single quotes. | Excel will remove beginning single quotes. | Image Below |
Form Type Name needs to be spell checked. | Misspellings are an easy mistake but also an easy fix. | Image Below |
formTypeIds should not be the same as Microsoft reserved names. | formTypeIds cannot be the same as the following: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9 Note: formTypeIds can contain these words (i.e. conmed). | More information around Microsoft reserved names can be found here. |
FormIds and dynamic forms should not end in digits. | FormIds of dynamic forms cannot end in digits because the number will cause problems when the form is incremented. If a formId ends in a digit, subject status can also be affected. Subject status requires record status dependencies to be programmed if dynamic casebook scripts are being used to dynamically generate the visit schedule. Record status dependencies when retrieved from the system will have a path with a [n] if a formId ends with a digit. Having a path with [n] will prevent subject status from functioning properly in this case. | A dynamic form is named ‘ae3′. When that dynamic form is created for the first time it is then referenced as ‘ae3′. When that form is created the second time, it is referenced as ‘ae32′. When it is created the third time, it will cause an error because the system thinks ‘ae3′ already exists. It will not create a form referenced as ‘ae33′. |
Questions should be ordered in the Question Types – Definition worksheet by form. | This keeps questions organized. |
Display
Practice | Explanation | Example (Sample Images Below) |
---|---|---|
For every form a header must be present. It should define the form name and any descriptions per the CRF. | Headers provide clarity and consistency. | Image (1) Below |
Have consistency between Dividers and Grouping. | For grey divider lines between questions or group of questions on a form, use either the divider lines within a grouping or give each question a different group number. Both present the same result but the application grouping should be consistent. | Image (2) Below |
Clean Grouping. | Group numbering to be consistent for all forms. Blank groups with headers should only occur at the end of a form. If headers are needed within the form they should be assigned as the header of the next to a group with questions. | Image (3) Below |
Question Types – Definition
Practice | Explanation | Example (Sample Images Below) |
---|---|---|
Do not put words such as AND, OR, NOT, CONTAINS, EQUALS_RX and HAS_RX in capital letters in questionTypeIDs or Answer Options. | AND, OR, NOT, CONTAINS, EQUALS_RX and HAS_RX are commands and when they are capitalized the system will try to execute that command. This rule applies to all command words. | Check out Dependencies |
Every question should have question text. | When a question does not have question text and that question is exported it will not be clear as to what the question was. This also adds clarity to the site user. | Image (1) Below |
Every answer option should have answer option text. | When an answer option does not have answer option text and that answer is exported it will not be clear as to what the answer was. This also adds clarity to the site user. | Image (2) Below |
logChange is set to yesRequired (except for assigned Plaintext). | Recording reasons for why data is changing on a form is helpful for site users especially monitors. Since plaintext questions cannot be changed by a user, it is not needed to have a reason for change. | Image (3) Below |
logAlert is set to yesOptional. | This gives the site a chance to record why the alert fired. If this was set to ‘no’ and the alert incorrectly fired, the site user could not document that the alert fired in error. | Image (4) Below |
logskip is set to No. | If set to ‘no’ will allow the user to skip a question without an interruption. If set to ‘yesRequired’ the user would be prompted to provide a reason why the data value was skipped, and the user would not be able to save the data until the reason is provided. If set to ‘yesOptional’ the user would be prompted to provide a reason why the data value was skipped, but would be able to save the data without providing a reason for skipping the data field. | ——————– |
Units should be displayed for all measurements. | Specifying units adds clarity to the form. | Image (5) Below |
Date format should always have 4 digits to represent the year. | Two digit year format such as dd/MMM/yy can be ambiguous. Use the format of dd/MMM/yyyy. | Image (6) Below |
All date and time questions should display the format of date/time in the question text. | This provides end user’s clarity. | Image (7) Below |
Standard visibility expressions are added. | Some standard visibility rules include child questions only become visible when the parent question is marked ‘Yes’ or ‘No’ (depending on the logic). When ‘Other’ is marked the Specify other question shows. | Image (8) and (9) Below |
Format alerts are consistent for dates, integers and floats. | Keep alert text consistent so the user expects the same format throughout the casebook. | Image (10) Below |
Multicheck answer option values need to be unique for a CONTAINS operator. | 1, 10, 12 all contain 1. So instead of 1, something like 01 needs to be used. Then you can pinpoint which answer option your logic is based off of by using CONTAINS ’01′. | Image (11) Below |
No spaces within stored answer option values. | Leading or trailing unneeded spaces can cause errors in your visibility or alert logic. | Image (12) Below |
Do not use special characters in the answer option text. | See here for more details. | ——————– |
Dependencies – Definition
Practice | Explanation | Example (Sample Images Below) |
---|---|---|
Correct spacing in logic expressions. | For example, (this != ”) would be correct where (this!=”) would not be correct. | Image (1) Below |
Alerts of the same expression logic should be identical. | Keeping consistent logic makes it easier to troubleshoot bugs, copy and paste logic, and overall keep logic expressions neat. | Image (2) Below |
Date Invalid Format Alert and date format alert text should match. | Date invalid format alert text on the Questions Types – Definition tab should match any date format alert on the Dependencies – Definition tab. | Image (3) and (4) Below |
Use alias when appropriate. | When you have multiple occurrences of the same questionTypeID and need to enforce different expressions for that question based on the location (formID)/occurrence (questionID) of the questionTypeID in the casebook use the ‘alias’ keyword. It will return the formID or questionID. | Image (5) Below |
Use type when appropriate. | Type is useful only in situations where alias will not work. The “type” keyword is used to return the formTypeID or quesitonTypeID. This is most often in situations with dynamic forms or multiple visits. | Image (6) Below |
No excessive use of NOT or “!”. | Dependencies should be written in their most reduced form. In eClinical, dependencies are much easier to read, debug, maintain and test when they are in their most simplified form. NOTs can be distributed through a logical statement through DeMorgan’s law, if you find it easier to write them in reverse logic. | Image (7) Below |
Dependencies should be written in such a way that all dependent questions should already be answered or addressed (they may be filled out blank). | Forward looking dependencies occur when dependent questions exist on a form that has not yet been filled out by the user. If a dependent question has not been addressed by the user, it will cause the alert to misfire, and the alert will not be reevaluated properly. | Image (8) Below |
Definition, the dependencyId should always be a numeric id that is sequential for each questionTypeID. | This keeps IDs consistent and clean. NOTE: After the project is deployed to production, dependency IDs should not be reassigned to new checks, unique numbers should be used even if the sequential numbering is disturbed. | Image (9) Below |
All dependencies for questions should be ordered the same as the Question Types – Definition worksheet. | Else you will get compiling warnings. | Image (10) Below |
Anything that can be reasonably accomplished in a standard expression should not use a custom dependency. | Testing a custom dependency takes an average of one hour of total man-time, while testing a regular dependency takes an average of 40 seconds. It is in the best interest of the company to reduce the overall number of custom dependencies. | Common Examples of Custom Dependencies: i. Looping among dynamic forms ii. Duplicate ID checks |
Standard Dependencies
- Check for duplicate subject numbers or IDs. Each subject should be unique either by site or by trial. Duplicate subject numbers cause errors when making running reconcile, running imports, mid study changes etc.
- Check for correct format of subject’s number or ID
- Check for correct format for subject’s initials
- Check for correct date format
- Check for correct time format
- Check for dates occurring in the future
- Check if a question is blank
- Check if Visit Date is on or after Consent date
- Check if Consent date is on or after study start date
Role defaults
- Created Query Status = new
- Query View History = X
- Generate PDF of eCRF = X
- Multiple Query PDF = X
- Tool Level = *
- Object Level = *
Scripts
- Description of the script should contain the script name
- Each script name and description is unique
- For all assignment scripts, there must be an ELSE clause. Example: IF set, assign a value, else assign a blank value.
- Scripts that increment local properties should be set shouldReconcile=’false’
- ID checks should be used to restrict when a script should fire. Best practice is to use this in trials that utilize the same questionType or formType as a target. For further explanation and an example please refer to the ‘:id’ section of the Attributes: For Path Fountayn Knowledge Base page.
- Dynamic casebook scripts should not create a parent and child in the same script. In some cases, the child will generate before the parent causing the script to fail.
Form Flow
- FTYN TD role should be granted view role to all forms; FTYN Debug role should have write access to all forms.
- Restricting view access to a parent form will also hide the children forms; however, metadata (alerts, queries) will appear in the (alert, queries) managers. Therefore, if the intent is to trully hide everything, then form flow should be configured on all forms (the parent and the children).
- If MSC: form flow Status Id should never be changed, ‘activation’ atribute must be present, role must have the activateFormFlow permission.
Exports
- Alike forms are combined
- PDF Archival standard export configured
- Set export Depth to 3
- Set for the std SAS export: zipDir = &Libpath libName = &libname libPath = &Libpath
- Excel exports should have the formatter parameter ‘exportAudits’ set to ‘false’ unless otherwise specified by the client. If enabled, the row limit in excel could be reached based on the number of subjects and datapoints that exist in the study.
Medical Coding configuration
- Make Preferred Term and Ingredients standard. DD or MP + (PREFERRED_NAME|INGREDIENTS),ATC1…. (make sure std Txt export delimiter is not ‘,’ only as ingredients are separated by comma)
- Levels to export should be set std.
Randomization
- If dealing with a blinded study, the blinded drug name should not hint to the unblinded name of the medication/treatment
- Difference between threshold and stock level should always be greater than 1
- Initial Activation ID should be either non-numeric (Ex: R001) or should be set to a value not less than the maximum number of expected randomizations (Ex if 100 subjects expected start at 100)
Unit Testing
- Every form should be opened and eyed for accuracy. Should ensure all forms are included in tree structure and layout is acceptable for client.
- All occurrences of study specific dependencies should be tested.
- All custom and application specific code should be tested and verified that all specifications are developed accurately.
- Imports (ECG and Lab) – Verify the file provided imports when the proper parameters are met. When these parameters are not met ensure the file does not import and the system provides details on why the file could not import.
- Randomization – Verify a patient can be randomized according to the specifications. Any project specific features for the randomization should be tested.
- Inventory – Verify the settings for the inventory are working properly. Randomize a patient to make sure the inventory decrements and the re-order process works per study specifications.
- Export – Verify all exports run properly and all tables are configured as specified.
- Reports – Verify that all reports run correctly and display the accurate data.
- Bugs found during any phase of a study should be tested upon completion of the fix to ensure the error reported no longer occurs in the application.
Study Amendments
- Changes made to an application after the initial deployment requires review of all changes made.
- If any update utilities are required on production to update existing patients, the updates should be tested on Design to ensure proper care is taken to update the existing application.
- All form, question and dependency changes should be tested.
- All custom code should be reviewed and/or retested to ensure the change made to the application does not affect the existing code.
- Question(s) removed from the display of a form should be added an “Annotated CRF Note” on the Question Layout – Template tab.
- Question(s) removed from the display: dependencies must be turned off to not fire on the location from where the question is removed from as the update question display will also reconcile/close those.
Design Services Peer Review Process
Format Convention
- Practice -Validated forms are identified in the specifications
- Explanation –Validated forms are marked on Schedule of Events, in the form ID column with an asterisk, as well as on the form tab in the upper right hand corner.
- Practice– Punctuation convention is used on all questions on non-validated forms
- Explanation – Whatever convention is specified on the Format Convention tab of the specifications should be followed on all questions on non-validated forms.
- Practice– Correct case is used for all question text on non-validated forms
- Explanation – Whatever convention is specified on the Format Convention tab of the specifications should be followed on all questions on non-validated forms.
- Practice– CDISC standard data type of string has been correctly used on all applicable questions
- Explanation– If CDISC standard data type of string is specified on the Format Convention tab of the specifications, check questions to confirm that in all instances where the data type of string is applicable that string is used.
- Example – For example if the question answer option is part of a calculation and the variable will be used in an equation, the data type of string will not be applicable.
- Explanation– If CDISC standard data type of string is specified on the Format Convention tab of the specifications, check questions to confirm that in all instances where the data type of string is applicable that string is used.
- Practice– Check for self-evident spelling and punctuation errors on all forms, if applicable
- Explanation – Run spell check in Excel and correct any errors that are spelling or punctuation if specified on the Format Convention tab of the specifications. Note this best practice does NOT apply to medical and industry terminology. All issues found on validated forms will be verified against the source documents and only updated if there was an error of transferring the information from the source docs to the specs.
QuestionType and FormType Fields
- Practice– The FormTypeID field is filled out for all questions and is identical in all occurrences in the specifications
- Explanation – The FormTypeID must be present for all questions on all form tabs and is the same on the form tab and Schedule of Events tab for each respective form
- Practice– The QuestionTypeID ID field is filled out for each question
- Explanation – The QuestionTypeID must be filled out for each question present on each form tab in the specifications
- Practice– The Question text field is filled out for each question
- Explanation – The Question text must be filled out for each question present on each form tab in the specifications
- Practice– The code list field is filled out for each question that requires answer options
- Explanation– The code list must be filled out for each question on each form tab in the specifications when preconfigured answer options will be selectable. Additionally the answer option variables must be logically consistent with the data type.
- Example – For example an integer field must have answer options with variables that are integers.
- Explanation– The code list must be filled out for each question on each form tab in the specifications when preconfigured answer options will be selectable. Additionally the answer option variables must be logically consistent with the data type.
- Practice– The data type field is present for each question and the data type and answer option variables are logically consistent with associated variables.
- Explanation– The data type field must be filled out for each question present on each form tab in the specifications. Additionally the answer option and question answer option variables must be consistent with the data type.
- Example – For example an integer field must have answer options with variables that are integers. Also a question asking for the date of a procedure needs a data type of Date/partial date
- Explanation– The data type field must be filled out for each question present on each form tab in the specifications. Additionally the answer option and question answer option variables must be consistent with the data type.
- Practice– The date/time format field is present for each question that has a data type of date/partial date.
- Explanation – must be specified or question will not function correctly.
- Practice– The date/time format field must be present in question text if question has a data type of date
- Explanation – This provides end user’s clarity.
- Practice– All helper text is on its own row in question text.
- Explanation – This adds to readability and clarity for end users
- Practice – Auto populated fields are specified.
- Explanation – This provides end user’s clarity and increases usability.
- Practice– If “Other” is in a question’s code list a question with text of “Other, specify” question will be immediately after
- Explanation – If an answer option of “Other” is listed for a question there will most likely be follow up and clarification of that the “Other” specifies.
- Practice– Main form header text is the same as schedule of events form name
- Explanation – This references the same form and should be consistent throughout
Need more help?
Please visit the Fountayn Contact Information page.