Hide/Show Custom Forms based on Rules (v7.0)
Got feedback or spotted a mistake?

Leave a comment at the end of this page or email contact@krishagni.com

Hide/Show Custom Forms based on Rules (v7.0)

Introduction

Customs forms can be hidden/shown based on rules defined in the JSON. This is useful to display various forms for specific use cases.

Configure this section outside the dictionary section.

Example use cases:

  1. Display “Tissue Review Event” only for tissue specimens.

  2. Display “Breast Pathology Annotation form” only if the anatomic site is “Breast”.

  3. Display “Screening form” only for “Screening” visits.

  4. Display “Consent forms” only for the “Consent Collector” role.

Template of Code

[ /* Other workflows */ { "name": "formDataEntryRules", "data": { "participant": [ /* Rules for participant form data entry */ /* Records available for use in rule conditions are user, cpr, and cp */ ], "visit": [ /* Rules for visits form data entry */ /* Records available for use in rule conditions are user, cp, cpr, and visit */ ], "specimen": [ /* Rules for specimens form data entry */ /* Records available for use in rule conditions are user, cp, cpr, visit, and specimen */ ], "specimenEvent": [ /* Rules for specimens form data entry */ /* Records available for use in rule conditions are user, cp, cpr, visit, and specimen */ ] } }, /* Other workflows */ ]

Attributes

Attributes

Description

Attributes

Description

when

Add conditions as to when the form should be displayed.

forms

Name of form that needs to be displayed.

Example: ‘Pregnancy tests form’ does not apply to male participants

[ { "name": "formDataEntryRules", "data": { "participant" : [ { "when" : "cpr.participant.gender == 'Female'", "forms" : [ "pregnancyTestForm" ] } { "when" : "cpr.participant.gender != 'Female'", "forms" : [ "generalInformation" ] // If you have multiple forms, please add the condition to show those } ] } } ]

User needs to provide the False condtion when they want to show the different forms if first condtion is not satisfied.(See below example)

{ "name" : "formDataEntryRules", "view" : null, "ctrl" : null, "data" : { "participant" : [ { "when" : "cpr.ppid == '1'", "forms" : [ "cbrc_fields" ] }, { "when" : "cpr.ppid != '1'", "forms" : [ "consent_withdrawal","trackingForm" ] } ] } },

Examples

Level

Case and Description

Example JSON

Level

Case and Description

Example JSON

1. Participant

Shows forms based on CP’s field at the participant level.

"participant" : [ { "when" : "cp.shortTitle == 'Testing rule CP'", "forms" : ["XYZForm"] } ]

2. Participant

Shows forms based on the participant's core fields at the participant level.

"participant" : [ { "when" : "cpr.participant.gender == 'Male'", "forms" : [ "smokingHistoryForm" ] }, { "when" : "cpr.participant.gender == 'Female'", "forms" : [ "pregnancyTestForm" ] }, { "when" : "cpr.participant.vitalStatus == 'Alive'", "forms" : [ "participantFamilyHistory" ] } ]

3. Participant

Shows forms based on the participant's custom fields at the participant level.

Add multiple conditions with the help of 'AND(&&)' and 'OR (||)' operators.



"participant" : [ { "when" : "cpr.participant.extensionDetail.attrsMap.DD2 == 'Married'", "forms" : [ "partnerSDetails" ] }, { "when" : "cpr.participant.extensionDetail.attrsMap.DD2 == 'Married' && cpr.participant.gender == 'Female'", "forms" : [ "partnerSDetails" ] } ]

4. Participant

Shows forms based on user role at the participant level.

For v10.3:

"participant" : [ { "when": "user.hasRole('Coordinator')", "forms": ["participantRuleForm"] } ]

For v12:

"participant" : [ { "when": "userRole == 'Coordinator'", "forms": ["participantRuleForm"] } ]

5. Participant

Show forms based on value exist or not in another field.

"participant" : [ { "when": "cpr.participant.gender != null", "forms": ["XYZForm"] }, { "when": "cpr.participant.gender == null", "forms": ["ABCForm"] } ]

6. Visit

Shows forms based on CP’s field at the visit level.

"visit" : [ { "when" : "cp.shortTitle == 'Testing rule CP'", "forms" : ["XYZForm"] } ]

7. Visit

Shows forms based on participant's and visit's core fields at the visit level.

"visit" : [ { "when": "visit.status == 'Complete'", "forms": ["visitFormRule"] }, { "when": "cpr.participant.gender == 'Male'", "forms": ["visitInfoCollectedByCoordinator"] } ]

8. Visit

Shows forms based on the visit's custom fields at the visit level.

"visit" : [ { "when": "visit.extensionDetail.attrsMap.CB8 == 'Yes'", "forms": ["visitInfoCollectedByCoordinator"] } ]

9. Visit

Shows forms based on user role at the visit level.

For v10.3:

"visit" : [ { "when" : "user.hasRole('Coordinator'), "forms" : [ "visitInfoCollectedByCoordinator" ] } ]

For v12:

"visit" : [ { "when" : "userRole == 'Coordinator'", "forms" : [ "visitInfoCollectedByCoordinator" ] } ]

10. Specimen

Shows forms based on participant’s, visit's, and specimen's core fields at the specimen level.

Add multiple conditions with the help of 'AND(&&)' and 'OR (||)' operators



"specimen" : [ { "when": "specimen.type == 'Whole Blood'", "forms": ["fluidInfoForm"] }, { "when": "specimen.type == 'DNA' || specimen.type == 'RNA'", "forms": ["support_6200", "cPOneSpecimenForm"] }, { "when": "cpr.participant.gender == 'Female'", "forms": ["specimenAdditionalRule"] }, { "when": "visit.clinicalStatus == 'Follow-up'", "forms": ["fluidInfoForm"] }, { "when": "specimen.lineage == 'New'", "forms": ["techSpecimenForm"] }, { "when": "cpr.participant.gender == 'Female' && visit.clinicalStatus == 'Follow-up' && specimen.lineage == 'New'", "forms": ["specimenAdditionalRule","fluidInfoForm","techSpecimenForm"] } ]

11. Specimen

Shows forms based on the specimen's custom fields at the specimen level.

"specimen" : [ { "when": "specimen.extensionDetail.attrsMap.DD4 == 'A'", "forms": ["fluidInfoForm"] } ]

12. Specimen

Shows forms based on user role at the specimen level.

For v10.3:

"specimen" : [ { "when": "user.hasRole('Technician') && specimen.lineage == 'New'", "forms": ["techSpecimenForm"] } ]

For v12:

"specimen" : [ { "when": "userRole == 'Technician' && specimen.lineage == 'New'", "forms": ["techSpecimenForm"] } ]

13. Specimen

Shows forms based on a range of availability field.

"specimen" : [ { "when": "specimen.availableQty > 5", "forms": ["specimenAdditionalRule"] } ]

14. Specimen Event

If CP collects the tissue samples from the participants, then that CP has the 'Tissue Review Event' form under the specimen.

"specimenEvent": [ { "when": "specimen.specimenClass == 'Tissue'", "forms": ["SpecimenTissueReviewEvent"] } ]

15. Specimen Event

Shows forms based on participant's, visit's, and specimen's core fields at the specimen event level.

Add multiple conditions with the help of 'AND(&&)' and 'OR (||)' operators

"specimenEvent": [ { "when": "cpr.participant.gender == 'Female' && visit.clinicalStatus == 'Follow-up' && specimen.specimenClass == 'Tissue'", "forms": ["SpecimenTissueReviewEvent"] } ]

16. No Forms

It does not show any forms at the derivative level

"specimen" : [ { "when" : "specimen.lineage == 'Derived'", "forms" : [ "" ] } ]

17. Visit

Show form based on event label

 

{ "name": "formDataEntryRules", "data": { "visit": [ { "when": "visit.status == 'Complete' && visit.eventLabel == 'BASELINE'", "forms": ["rde_visit_testing"] }, { "when": "visit.status == 'Complete'", "forms": [""] } ] } }

18. Consent

 

Consent forms should be displayed to those who have access to the consent form. For example, ‘Consent Collector’.

For v10.3:

"participant" : [ { "when": "user.hasRole('Consent Collector')", "forms": ["consentForm"] } ]

For v12:

"participant" : [ { "when": "userRole == 'Consent Collector'", "forms": ["consentForm"] } ]
  1. Specimens

Shows form based on CP title

"specimen" : [ { "when": "['101_Translational', '51Legacy', 'More CP names separated by comma'].indexOf(cp.shortTitle) >= 0" "forms": ["consentForm"] } ]

 

 

How to Escape single quote in code?

You need to use the double slash \\ before the chararcher as below

"specimen" : [ { "when": "['101_Translational\\'s', '51Legacy', 'More CP names separated by comma'].indexOf(cp.shortTitle) >= 0" "forms": ["consentForm"] } ]

 

Example JSON

 

Got feedback or spotted a mistake?

Leave a comment at the end of this page or email contact@krishagni.com