From version v7.0, customs forms can be hidden/shown on the basis of rules defined in the JSON. This is useful to display specific forms for specific use cases.
Configure this section outside the dictionary section.
For example:
Display “Tissue Review Event” only for tissue specimens
Display “Breast Pathology Annotation form” only if the anatomic site is “Breast”
Display “Screening form” only for “Screening” visit
Display “Consent forms” only for the “Consent Collector” role
Below is the JSON code template:
[ /* 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 */ ]
Rule Configuration
Suppose the case is 'Pregnancy tests form not applicable to male participants'. The rule for this case is:
[ { "name": "formDataEntryRules", "data": { "participant" : [ { "when" : "cpr.participant.gender != 'Male'", "forms" : [ "pregnancyTestForm" ] } ] } } ]
Here,
"When": Conditions
"forms": List of forms going to be displayed.
Below is a list of different rules that can be used to hide/show forms at a different level:
Level | Case and Description | Example JSON |
---|---|---|
Participant | Shows forms on the basis of CP’s field at the participant level. In JSON Code, "XYZ Form" is a form name. | "participant" : [ { "when" : "cp.shortTitle == 'Testing rule CP'", "forms" : ["XYZForm"] } ] |
Participant | Shows forms on the basis of 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" ] } ] |
Participant | Shows forms on the basis of 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" ] } ] |
Participant | Shows forms on the basis of user role at the participant level. | "participant" : [ { "when": "user.hasRole('Coordinator')", "forms": ["participantRuleForm"] } ] |
| Show forms on the basis of value exist or not in another field. | "participant" : [ { "when": "cpr.participant.gender != null", "forms": ["XYZForm"] }, { "when": "cpr.participant.gender == null", "forms": ["ABCForm"] } ] |
Visit | Shows forms on the basis of CP’s field at the visit level. | "visit" : [ { "when" : "cp.shortTitle == 'Testing rule CP'", "forms" : ["XYZForm"] } ] |
Visit | Shows forms on the basis of 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"] } ] |
Visit | Shows forms on the basis of the visit's custom fields at the visit level. | "visit" : [ { "when": "visit.extensionDetail.attrsMap.CB8 == 'Yes'", "forms": ["visitInfoCollectedByCoordinator"] } ] |
Visit | Shows forms on the basis of user role at the visit level. | "visit" : [ { "when" : "user.hasRole('Coordinator'), "forms" : [ "visitInfoCollectedByCoordinator" ] } ] |
Specimen | Shows forms on the basis of 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"] } ] |
Specimen | Shows forms on the basis of the specimen's custom fields at the specimen level. | "specimen" : [ { "when": ""specimen.extensionDetail.attrsMap.DD4 == 'A' ", "forms": ["fluidInfoForm"] } ] |
Specimen | Shows forms on the basis of user role at the specimen level. | "specimen" : [ { "when": "user.hasRole('Technician') && specimen.lineage == 'New'", "forms": ["techSpecimenForm"] } ] |
Specimen | Shows forms on the basis of a range of availability field. | "specimen" : [ { "when": "specimen.availableQty > 5", "forms": ["specimenAdditionalRule"] } ] |
Specimen Event | Case: | "specimenEvent": [ { "when": "specimen.specimenClass == 'Tissue'", "forms": ["SpecimenTissueReviewEvent"] } ] |
Specimen Event | Shows forms on the basis of 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"] } ] |
No Forms | Does not show any forms at derivative level | "specimen" : [ { "when" : "specimen.lineage == 'Derived'", "forms" : [ "" ] } ] |
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": [""] } ] } }, |
Consent | Case: | "participant" : [ { "when": "user.hasRole('Consent Collector')", "forms": ["consentForm"] } ] |