From e0af782b7c1f91507c20d483849d7c2537add437 Mon Sep 17 00:00:00 2001 From: Lee Render Date: Mon, 20 Mar 2023 13:05:57 +0800 Subject: [PATCH] rdrf #2429 Added bc32.yaml file from staging for tests --- rdrf/rdrf/fixtures/bc31.yaml | 13978 ++++++++++++++++++++++++++++++ rdrf/rdrf/testing/unit/tests.py | 2713 +++--- 2 files changed, 15619 insertions(+), 1072 deletions(-) create mode 100644 rdrf/rdrf/fixtures/bc31.yaml diff --git a/rdrf/rdrf/fixtures/bc31.yaml b/rdrf/rdrf/fixtures/bc31.yaml new file mode 100644 index 000000000..b786df0e0 --- /dev/null +++ b/rdrf/rdrf/fixtures/bc31.yaml @@ -0,0 +1,13978 @@ +EXPORT_TIME: '2023-03-20 11:34:45.802420' +EXPORT_TYPE: REGISTRY_PLUS_CDES +RDRF_VERSION: 6.6.43 +REGISTRY_VERSION: '31' +cde_policies: [] +cdes: +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: Address + datatype: string + desc: Address + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Address + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: Textarea +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: AddressType + datatype: range + desc: home or postal + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Address type + pattern: '' + pv_group: AddressType + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: //dummy + code: BCCANCERSTAGE + datatype: calculated + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Overall pathological TNM stage + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BCCLINICALCANCERSTAGE + datatype: calculated + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Overall clinical TNM stage + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQBCTP_Q01 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How you look in the mirror CLOTHED + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQBCTP_Q02 + datatype: range + desc: '2: The shape of your lumpectomy breast when you are wearing a bra?' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: The shape of your lumpectomy breast when you are wearing a bra + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQBCTP_Q03 + datatype: range + desc: '3: How normal you feel in your clothes?' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How normal you feel in your clothes + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQBCTP_Q04 + datatype: range + desc: '4: Being able to wear clothing which is more fitted?' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Being able to wear clothing which is more fitted + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQBCTP_Q05 + datatype: range + desc: '5: How your lumpectomy breast sits/hangs?' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How your lumpectomy breast sits/hangs + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQBCTP_Q06 + datatype: range + desc: '6: How smoothly shaped your lumpectomy breast looks?' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How smoothly shaped your lumpectomy breast looks + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQBCTP_Q07 + datatype: range + desc: '7: The contour (shape) of your lumpectomy breast?' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: The contour (shape) of your lumpectomy breast + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQBCTP_Q08 + datatype: range + desc: '8: How equal in size your breasts are to each other?' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How equal in size your breasts are to each other + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQBCTP_Q09 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How normal your lumpectomy breast looks + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQBCTP_Q10 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How much your breasts look the same + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQBCTP_Q11 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How you look in the mirror UNCLOTHED + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQMASTP_Q01 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How you look in the mirror CLOTHED + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQMASTP_Q02 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How comfortable your bras fit + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQMASTP_Q03 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Being able to wear clothing that is more fitted + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQMASTP_Q04 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How you look in the mirror UNCLOTHED + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQMCRB_Q01 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How you look in the mirror CLOTHED + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQMCRB_Q02 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How comfortable your bras fit + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQMCRB_Q03 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Being able to wear clothing that is more fitted + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQMCRB_Q04 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How you look in the mirror UNCLOTHED + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q01 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How you look in the mirror CLOTHED + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q02 + datatype: range + desc: '2: The shape of your reconstructed breast(s) when you are wearing a bra?' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: The shape of your reconstructed breast(s) when you are wearing a bra + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q03 + datatype: range + desc: '3: How normal you feel in your clothes?' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How normal you feel in your clothes + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["1","2"] + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q04 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: The size of your reconstructed breast(s) + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q05 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Being able to wear clothing that is more fitted + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q06 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How your breasts are lined up in relation to each other + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q07 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How comfortable your bras fit + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q08 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: The softness of your reconstructed breast(s) + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q09 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How equal in size your breasts are to each other + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q10 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How natural your reconstructed breast(s) looks + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q11 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How naturally your reconstructed breast(s) sits/hangs + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q12 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How your reconstructed breast(s) feel to touch + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q13 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How much your reconstructed breast(s) feels like a natural part of your body + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q14 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How closely matched your breasts are to each other + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q15 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How your reconstructed breast(s) look now compared to before you had any breast + surgery + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQRECP_Q16 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: How you look in the mirror UNCLOTHED + pattern: '' + pv_group: BREASTQ + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: BREASTQ_SURG + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: What was the most extensive surgery you have had for breast cancer + pattern: '' + pv_group: BREASTQ_SURG + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientCentre + datatype: string + desc: '' + important: false + instructions: '' + is_required: true + max_length: null + max_value: null + min_value: null + name: Centre + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DataSourceSelect:PatientCentres +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientDateOfBirth + datatype: date + desc: '' + important: false + instructions: '' + is_required: true + max_length: null + max_value: null + min_value: null + name: Date of Birth + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientEmail + datatype: email + desc: '' + important: false + instructions: '' + is_required: true + max_length: null + max_value: null + min_value: null + name: Email + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientFamilyName + datatype: string + desc: '' + important: false + instructions: '' + is_required: true + max_length: null + max_value: null + min_value: null + name: Family Name + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientGivenNames + datatype: string + desc: '' + important: false + instructions: '' + is_required: true + max_length: null + max_value: null + min_value: null + name: Given Names + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientHomePhone + datatype: string + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Home Phone + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientMobilePhone + datatype: string + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Mobile Phone + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientNOKRelationship + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Parent/Guardian Relationship + pattern: '' + pv_group: NextOfKinRelationship + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientNextOfKinAddress + datatype: string + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Parent/Guardian Address + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: TextArea +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientNextOfKinEmail + datatype: email + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Parent/Guardian Email + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientNextOfKinFamilyName + datatype: string + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Parent/Guardian Family Name + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientNextOfKinGivenNames + datatype: string + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Parent/Guardian Given Names + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientNextOfKinState + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Parent/Guardian State + pattern: '' + pv_group: State + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientNextOfKinSuburb + datatype: string + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Parent/Guardian Suburb + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CDEPatientSex + datatype: range + desc: sex + important: false + instructions: '' + is_required: true + max_length: null + max_value: null + min_value: null + name: Sex + pattern: '' + pv_group: MeteorSexes + questionnaire_text: What is your sex? + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: CHEMOTX + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate whether the patient received chemotherapy neoadjuvant or adjuvant:' + pattern: '' + pv_group: CHEMOTX + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CHEMOTXSTARTDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Please provide the start date of chemotherapy:' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: CHEMOTXSTOPDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Please provide the stop date of chemotherapy, if applicable:' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: null + allow_multiple: true + calculation: '' + code: CHEMOTXTYPE + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Indicate what type of chemotherapy (select all that apply) + pattern: '' + pv_group: CHEMOTXTYPE + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: COLLECTIONDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Collection Date + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: null + allow_multiple: true + calculation: '' + code: COMORB + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you been told by a doctor that you have any of the following? (select + all that apply) + pattern: '' + pv_group: COMORB + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: true + calculation: '' + code: COMPL + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Complications (select all that apply):' + pattern: '' + pv_group: COMPLPVG + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: true + calculation: '' + code: COMPLIMPACT + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate whether the patient experienced a complication while on treatment + or within 90 days following treatment (select all that apply):' + pattern: '' + pv_group: COMPLIMPACT + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: COMPLTX + datatype: range + desc: |- + Inclusion Criteria: If answered "yes" on experience of complication [COMPLIMPACT] + Timing: Updated at least 6 months after treatment completion, except for patients with hormonal therapy which will be updated at least 6 months and 1 year after treatment initiation + Reporting Source: Clinical + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate whether the complication is attributable to breast cancer treatment:' + pattern: '' + pv_group: ICHOMnyuknown + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: Country + datatype: range + desc: Country + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Country + pattern: '' + pv_group: Country + questionnaire_text: '' + widget_config: '' + widget_name: CountryWidget +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: DEATH + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Has the patient died + pattern: '' + pv_group: DEATH + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: DEATHBC + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Was death attributable to breast cancer + pattern: '' + pv_group: DEATHBC + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: DEATHBCCOMPL + datatype: date + desc: |- + Inclusion Criteria: If answered "Complication leading to death" on experience of complication [COMPLIMPACT] + Timing: Updated at least 6 months after treatment completion, except for patients with hormonal therapy which will be updated at least 6 months and 1 year after treatment initiation + Reporting Source: Clinical + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Please provide the date of death - if selected "Complication leading to death" + above:' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: DEATHDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Date of death (if applicable) + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: DIAGDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Initial date of histological diagnosis + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: EDUCATION + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: What was the highest level of schooling you completed + pattern: '' + pv_group: EDUCATION + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q31 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did you have a dry mouth + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q32 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did food and drink taste different than usual + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q33 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Were your eyes painful, irritated or watery + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q34 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you lost any hair + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q35 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Were you upset by the loss of your hair + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q36 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did you feel ill or unwell + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q37 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did you have hot flushes + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q38 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did you have headaches + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q39 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you felt physically less attractive as a result of your disease or treatment + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q40 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you been feeling less feminine as a result of your disease or treatment + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q41 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did you find it difficult to look at yourself naked + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q42 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you been dissatisfied with your body + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q43 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Were you worried about your health in the future + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q44 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: To what extent were you interested in sex + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q45 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: To what extent were you sexually active (with or without intercourse) + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q46 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: To what extent was sex enjoyable for you + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q47 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did you have any pain in your arm or shoulder + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q48 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did you have a swollen arm or hand + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q49 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Was it difficult to raise your arm or to move it sideways + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q50 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you had any pain in the area of your affected breast + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q51 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Was the area of your affected breast swollen + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q52 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Was the area of your affected breast oversensitive + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQBR23_Q53 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you had skin problems on or in the area of your affected breast (eg itchy, + dry, flaky) + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q01 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Do you have any trouble doing strenuous activities, like carrying a heavy + shopping bag or a suitcase? + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q02 + datatype: range + desc: |- + Inclusion Criteria: All patients + Timing: Baseline, 6 months, 1 year post treatment, tracked annually up to 10 years + Reporting Source: Patient-­reported + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Do you have any trouble taking a long walk + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q03 + datatype: range + desc: |- + Inclusion Criteria: All patients + Timing: Baseline, 6 months, 1 year post treatment, tracked annually up to 10 years + Reporting Source: Patient-‐reported + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Do you have any trouble taking a short walk outside of the house + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q04 + datatype: range + desc: |- + Inclusion Criteria: All patients + Timing: Baseline, 6 months, 1 year post treatment, tracked annually up to 10 years + Reporting Source: Patient-­reported + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Do you need to stay in bed or a chair during the day + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q05 + datatype: range + desc: |- + Inclusion Criteria: All patients + Timing: Baseline, 6 months, 1 year post treatment, tracked annually up to 10 years + Reporting Source: Patient-­reported + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Do you need help with eating, dressing, washing yourself or using the toilet + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q06 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Were you limited in doing either your work or other daily activities + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q07 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Were you limited in pursuing your hobbies or other leisure time activities + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q08 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Were you short of breath + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q09 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you had pain + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q10 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did you need to rest + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q11 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you had trouble sleeping + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q12 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you felt weak + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q13 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you lacked appetite + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q14 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you felt nauseated + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q15 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you vomited + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q16 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you been constipated + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q17 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you had diarrhoea + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q18 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Were you tired + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q19 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did pain interfere with your daily activities + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q20 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you had difficulty in concentrating on things, like reading a newspaper + or watching television + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q21 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did you feel tense + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q22 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did you worry + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q23 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did you feel irritable + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q24 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Did you feel depressed + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q25 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you had difficulty remembering things + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q26 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Has your physical condition or medical treatment interfered with your family + life + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q27 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Has your physical condition or medical treatment interfered with your social + activities + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q28 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Has your physical condition or medical treatment caused you financial difficulties + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q29 + datatype: range + desc: '' + important: false + instructions: 1 = Very poor and 7 = Excellent + is_required: false + max_length: null + max_value: '7.00' + min_value: '1.00' + name: How would you rate your overall health during the past week + pattern: '' + pv_group: SevenScale + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: EORTCQLQC30_Q30 + datatype: range + desc: '' + important: false + instructions: 1 = Very poor and 7 = Excellent + is_required: false + max_length: null + max_value: '7.00' + min_value: '1.00' + name: How would you rate your overall quality of life during the past week + pattern: '' + pv_group: SevenScale + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: EORTC_QLQ_LMC21 + datatype: range + desc: Please indicate the extent to which you have experienced the following symptom + during the past week. During the past week have you had tingling hands or feet? + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Tingling hands or feet + pattern: '' + pv_group: EORTCQLQC30 + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: EQ_Anxiety_Depress + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: ANXIETY/DEPRESSION + pattern: '' + pv_group: EQ_Anxiety_Depress + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: EQ_Health_Rate + datatype: integer + desc: YOUR HEALTH TODAY (We would like to know how good or bad your health is TODAY. + This scale is numbered from 0 to 100. 100 means the best health you can imagine + 0 means the worst health you can imagine Please tap on the scale to indicate how + your health is TODAY) + important: false + instructions: We would like to know how good or bad your health is TODAY. This scale + is numbered from 0 to 100. 100 means the best health you can imagine. 0 means + the worst health you can imagine. Please tap on the scale to indicate how your + health is TODAY. + is_required: false + max_length: null + max_value: '100.00' + min_value: '0.00' + name: YOUR HEALTH TODAY + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: EQ_Mobility + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: MOBILITY + pattern: '' + pv_group: EQ_Mobility + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: EQ_Pain_Discomfort + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: PAIN/DISCOMFORT + pattern: '' + pv_group: EQ_Pain_Discomfort + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: EQ_Selfcare + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: PERSONAL CARE + pattern: '' + pv_group: EQ_Selfcare + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: EQ_UsualActivities + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: USUAL ACTIVITIES (eg work, study, housework, family or leisure activities) + pattern: '' + pv_group: EQ_UsualActivities + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: ERSTATUS + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate if the estrogen receptor status is positive:' + pattern: '' + pv_group: STATUS + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: ETNIC + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Do you recognise yourself as an Aboriginal or Torres Strait Islander? + pattern: '' + pv_group: EthnicOriginBC + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: FACTES_Q01 + datatype: range + desc: |- + Please indicate your response as it applies to the past 7 days: + I have pain in my joints + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: I have pain in my joints + pattern: '' + pv_group: FACTES + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: FACTES_Q02 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: I have vaginal discharge + pattern: '' + pv_group: FACTES + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: FACTES_Q03 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: I have vaginal itching/irritation + pattern: '' + pv_group: FACTES + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: FACTES_Q04 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: I have vaginal bleeding or spotting + pattern: '' + pv_group: FACTES + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: FACTES_Q05 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: I have vaginal dryness + pattern: '' + pv_group: FACTES + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: x in ["3","4"] + allow_multiple: false + calculation: '' + code: FACTES_Q06 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: I have pain or discomfort with intercourse + pattern: '' + pv_group: FACTES + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: FIRSTBC + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Indicate if this is first breast cancer or new cancer on contralateral or + ipsilateral breast + pattern: '' + pv_group: FIRSTBC + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: GRADEDCIS + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Indicate tumour grade of DCIS component of tumour + pattern: '' + pv_group: GRADEDCIS + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: GRADEINV + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Indicate grade of invasive component of tumour + pattern: '' + pv_group: GRADEINV + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: HEIGHTCLIN + datatype: integer + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: '1000.00' + min_value: '0.00' + name: Indicate your height in centimetres + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: HER2STATUS + datatype: range + desc: '' + important: false + instructions: By immunohistochemistry or ISH, whichever was considered most definitive + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate if the HER2 receptor status is positive:' + pattern: '' + pv_group: HER2STATUS + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: true + calculation: '' + code: HISTOTYPE + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Indicate histological type of the tumour (select all that apply) + pattern: '' + pv_group: HISTOTYPE + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: HORMONTX + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate whether the patient received hormonal therapy neoadjuvant or adjuvant:' + pattern: '' + pv_group: CHEMOTX + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: HORMONTXSTARTDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Start of hormonal therapy + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: HORMONTXSTOPDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Stop of hormonal therapy + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: '' + allow_multiple: true + calculation: '' + code: HORMONTXTYPE + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Indicate what type of hormonal therapy (select all that apply) + pattern: '' + pv_group: HormoneRxType + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: LATERAL + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Indicate the laterality of breast cancer + pattern: '' + pv_group: LATERAL + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: LYMPHINV + datatype: integer + desc: '' + important: false + instructions: Please enter "999" if number of involved lymph nodes is unknown. Number + of lymph nodes involved according to the TNM stage AJCC 8th Ed. + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Number of lymph nodes involved:' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: LYMPHNR + datatype: integer + desc: '' + important: false + instructions: Please enter "999" if number of resected lymph nodes is unknown. + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Number of lymph nodes resected:' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: MARITAL + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: What is your relationship status? + pattern: '' + pv_group: MARITAL + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: MENOPAUSE + datatype: range + desc: Post-­menopausal (natural/surgical) -­if you have not had your period >12 + months, caused by natural decline of hormones or due to surgery (e.g. menopause + that develops after the ovaries are surgically removed) + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: What is your current menopausal status? + pattern: '' + pv_group: MENOPAUSE + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: MUTBC + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Indicate if the patient carries a genetic mutation predisposing breast cancer + pattern: '' + pv_group: MUTBC + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: Medicare + datatype: string + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Medicare Number + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: PMI + datatype: string + desc: '' + important: false + instructions: characters Medical record number for public hospitals + is_required: false + max_length: null + max_value: null + min_value: null + name: Patient Medical Index + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: PROMSConsent + datatype: range + desc: '' + important: false + instructions: Thank you for completing this survey. We realise that the information + you have provided is personal and sensitive and so your confidentiality will be + protected at all times. Only your doctor will have access to your individual information. + Any use of your information for research purposes will only be in a non- identifiable, + combined format. + is_required: false + max_length: null + max_value: null + min_value: null + name: Consent + pattern: '' + pv_group: fh_yes_no + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: PRSTATUS + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate if the progesterone receptor status is positive:' + pattern: '' + pv_group: STATUS + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: PrivHosp + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Private hospital + pattern: '' + pv_group: PrivHosp + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: PrivHospMedRecNo + datatype: string + desc: '' + important: false + instructions: Medical record number for the private hospital specified + is_required: false + max_length: null + max_value: null + min_value: null + name: Private hospital medical record number + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: Ptaddress1 + datatype: string + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Address + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: Ptaddress2 + datatype: string + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Suburb + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: Ptaddress3 + datatype: string + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Postcode + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: RADIOTX + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate whether the patient received radiotherapy during the last year:' + pattern: '' + pv_group: RADIOTX + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: RADIOTXSTARTDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Please provide the start date of radiotherapy:' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: RADIOTXSTOPDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Please provide the stop date of radiotherapy:' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: '' + allow_multiple: true + calculation: '' + code: RADIOTXTYPE + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate location/type of radiotherapy:' + pattern: '' + pv_group: RADIOTXTYPE + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: RECONSTRUCT + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate whether the patient received a delayed reconstruction during the + last year:' + pattern: '' + pv_group: RECONSTRUCT + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: RECONSTRUCTDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Please provide the date of delayed reconstruction + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: RECUR + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Is there evidence of local, regional or distant recurrence + pattern: '' + pv_group: recurrenceBC + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: RECURDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Recurrence date + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: RECURMETH + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Recurrence method + pattern: '' + pv_group: RECURMETHOD + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: REOP + datatype: range + desc: |- + Inclusion Criteria: Only if the patient received surgery/radiotherapy. + Timing: Update at least 6 months after treatment + Reporting Source: Clinical + Type: Single answer + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate if the patient has undergone a reoperation due to involved margins + after primary surgery:' + pattern: '' + pv_group: REOP + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: REOPDATE + datatype: date + desc: |- + Inclusion Criteria: If answered "yes" on reoperation [REOP] + Timing: Update at least 6 months after treatment + Reporting Source: Clinicald + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Please provide the date of the reoperation due to positive margins:' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: REOP_RECONSTRUCTION + datatype: range + desc: '' + important: false + instructions: If answered "Mastectomy with immediate reconstruction" to reoperation. + is_required: false + max_length: null + max_value: null + min_value: null + name: What type of reconstruction did the patient receive during reoperation? + pattern: '' + pv_group: REOP_RECONSTRUCTION_VALUES + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: SIZEINV + datatype: float + desc: '' + important: false + instructions: (mm). Please enter "999" if size of invasive component is unknown. + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate size of invasive component of tumour (in mm):' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: SURGERY + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate whether the patient received surgery during the last year:' + pattern: '' + pv_group: SURGERY + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: SURGERYAX + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate whether the patient received surgery to the axilla during the last + year:' + pattern: '' + pv_group: SURGERYAX + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: SURGERYAX2 + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate whether the patient received axillary clearance due to lymph node + involvement after sentinel lymph node biopsy during the last year:' + pattern: '' + pv_group: ICHOMnyuknown + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: SURGERYAX2DATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Please provide the date of axillary clearance:' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: SURGERYAXDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Please provide the date of surgery to the axilla:' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: SURGERYDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Provide the date of surgery:' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: SURGERYDATEPATIENT + datatype: date + desc: |- + Inclusion Criteria: All patients + Timing: 6 months, 1 year post treatment, tracked annually up to 10 years + Reporting Source: Patient-‐reported + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: When did you have your re-operation? + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: '' + allow_multiple: true + calculation: '' + code: SURGERYPATIENT + datatype: range + desc: |- + Inclusion Criteria: All patients + Timing: 6 months, 1 year post treatment, tracked annually up to 10 years + Reporting Source: Patient-­reported + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Have you had one of the following re-operations since your surgery for breast + cancer? (select all that apply) + pattern: '' + pv_group: SURGERYPATIENT + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: SYSTDATEPATIENT + datatype: date + desc: |- + Inclusion Criteria: All patients + Timing: 6 months, 1 year post treatment, tracked annually up to 10 years + Reporting Source: Patient-­reported + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: If the systemic treatment has stopped, when did you stop your treatment? + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: '' + allow_multiple: true + calculation: '' + code: SYSTPATIENT + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: In the past year have you received systemic (ie drug) treatment for breast + cancer? (select all that apply) + pattern: '' + pv_group: SystemicPatient + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: State + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: State + pattern: '' + pv_group: State + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: SuburbTown + datatype: string + desc: '' + important: false + instructions: '' + is_required: true + max_length: null + max_value: null + min_value: null + name: Suburb/Town + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: TARGETTX + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate what type of targeted therapy:' + pattern: '' + pv_group: TARGETTX + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: TARGETTXSTARTDATE + datatype: date + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Please provide the start date of targeted therapy:' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: TARGETTXSTOPDATE + datatype: date + desc: |- + Inclusion Criteria: If answered "targeted therapy" on treatment [TREATMENT] + Timing: Update at least annually + Reporting Source: Clinical + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Please provide the stop date of targeted therapy, if applicable:' + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: DateWidget +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: TNMCM + datatype: range + desc: '' + important: false + instructions: Clinical distant metastasis (per AJCC 8th Ed.) Use M0 where metastatic + staging is not undertaken and use unknown if no documentation of tests for metastatic + disease. Use of unknown will result in Overall clinical TNM stage field being + calculated as unknown. + is_required: false + max_length: null + max_value: null + min_value: null + name: Clinical distant metastasis + pattern: '' + pv_group: ClinicalDistantMetastasisValues + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: TNMCN + datatype: range + desc: '' + important: false + instructions: Clinical nodal stage (per AJCC 8th Ed.) + is_required: false + max_length: null + max_value: null + min_value: null + name: Clinical nodal stage + pattern: '' + pv_group: TNMCN + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: TNMCT + datatype: range + desc: '' + important: false + instructions: Clinical tumour stage (per AJCC 8th Ed.) + is_required: false + max_length: null + max_value: null + min_value: null + name: Clinical tumour stage + pattern: '' + pv_group: TNMCT + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: TNMPM + datatype: range + desc: '' + important: false + instructions: Pathological distant metastasis (per AJCC 8th Ed.) Use M0 where metastatic + staging is not undertaken and use unknown if no documentation of tests for metastatic + disease. Use of unknown will result in Overall pathological TNM stage field being + calculated as unknown. + is_required: false + max_length: null + max_value: null + min_value: null + name: Pathological distant metastasis + pattern: '' + pv_group: TNMPM + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: TNMPN + datatype: range + desc: '' + important: false + instructions: Pathological nodal stage (per AJCC 8th Ed.) + is_required: false + max_length: null + max_value: null + min_value: null + name: Pathological nodal stage + pattern: '' + pv_group: TNMPN + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: TNMPT + datatype: range + desc: '' + important: false + instructions: Pathological tumour stage (per AJCC 8th Ed.) + is_required: false + max_length: null + max_value: null + min_value: null + name: Pathological tumour stage + pattern: '' + pv_group: TNMPT + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +- abnormality_condition: null + allow_multiple: true + calculation: '' + code: TREATMENT + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: 'Indicate whether the patient received one of the following treatments during + the last year: (select all that apply)' + pattern: '' + pv_group: TREATMENT + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: Treating_clinician + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Treating clinician + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '{"tag":"clinicians"}' + widget_name: DataSourceSelect +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: Treatment_speciality + datatype: range + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Which clinical speciality + pattern: '' + pv_group: Treatment_speciality + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: WEIGHTCLIN + datatype: float + desc: '' + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Indicate your weight in kilograms + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: null + allow_multiple: false + calculation: '' + code: postcode + datatype: string + desc: Postcode + important: false + instructions: '' + is_required: true + max_length: null + max_value: null + min_value: null + name: Postcode + pattern: '' + pv_group: null + questionnaire_text: '' + widget_config: '' + widget_name: '' +- abnormality_condition: '' + allow_multiple: false + calculation: '' + code: public_private + datatype: range + desc: Was the patient treated as a public or private patient? + important: false + instructions: '' + is_required: false + max_length: null + max_value: null + min_value: null + name: Was the patient treated as a public or private patient? + pattern: '' + pv_group: public_private + questionnaire_text: '' + widget_config: '' + widget_name: RadioSelect +code: ICHOMBC +complete_fields: [] +consent_rules: [] +consent_sections: +- applicability_condition: '' + code: promsconsentsection + information_link: null + information_text: Thank you for completing this survey. We realise that the information + you have provided is personal and sensitive and so your confidentiality will be + protected at all times. Only your doctor will have access to your individual information. + Any use of your information for research purposes will only be in a non- identifiable, + combined format. + questions: + - code: promsconsent + instructions: '' + position: 1 + question_label: I consent to ongoing involvement in the CIC Cancer project and + receiving a reminder for the next survey. + questionnaire_label: '' + section_label: Proms Consent + validation_rule: '' +context_form_groups: +- context_type: M + forms: + - FUpPROMS3_10Years + is_default: false + name: Follow up 3-10 + naming_cde_to_use: null + naming_scheme: D + ordering: C +- context_type: F + forms: + - Patientinformation + - BaselinePromsBC + - BaselineClinical + - Pathology + - Treatment + - Survival + - FollowUpPROMS6months + - FUpPROMSYr1 + - FUpPROMSYr2 + is_default: true + name: Main + naming_cde_to_use: null + naming_scheme: D + ordering: C +custom_actions: +- action_type: RD + code: rd + data: |- + {"fields":["EORTCQLQC30*","EORTCQLQBR23*", "EORTCQLQLMC21*","BREASTQ*","FACTE*","MARITAL","MENOPAUSE","COMORB","HEIGHTCLIN","WEIGHTCLIN", + "LATERAL","FIRSTBC","TNMCT","TNMCN","TNMCM","DIAGDATE","EDUCATION","HISTOTYPE","MUTBC","GRADEINV","GRADEDCIS","SIZEINV","LYMPHNR","LYMPHINV","ERSTATUS","PRSTATUS","HER2STATUS","TNMPT","TNMPN","TNMPM","TREATMENT","SURGERY","SURGERYDATE","SURGERYAX","SURGERYAXDATE","SURGERYAX2","SURGERYAX2DATE","REOP","REOPDATE","REOP_RECONSTRUCTION","RECONSTRUCT","RECONSTRUCTDATE","RADIOTX","RADIOTXTYPE","RADIOTXSTARTDATE","RADIOTXSTOPDATE","CHEMOTX","CHEMOTXTYPE","CHEMOTXSTARTDATE","CHEMOTXSTOPDATE","HORMONTX","HORMONTXTYPE","HORMONTXSTARTDATE","HORMONTXSTOPDATE","TARGETTX","TARGETTXSTARTDATE","TARGETTXSTOPDATE","COMPLIMPACT","DEATHBCCOMPL","COMPLTX","COMPL","ETNIC","RECUR","RECURMETH","RECURDATE","DEATH","DEATHDATE","DEATHBC","public_private","Treating_clinician","Treatment_speciality","EQ_Health_Rate","PrivHosp","COLLECTIONDATE","EORTC_QLQ_LMC21","EQ_UsualActivities","EQ_Pain_Discomfort","EQ_Mobility","EQ_Anxiety_Depress", "EQ_Selfcare","BCCANCERSTAGE","BCCLINICALCANCERSTAGE","PATIENTREPORTRX/SURGERYPATIENT","PATIENTREPORTRX/SURGERYDATEPATIENT","PATIENTREPORTRX/SYSTPATIENT","PATIENTREPORTRX/SYSTDATEPATIENT" + ], + "config": { "delimiter": "|"} + } + groups_allowed: + - Clinical Staff + include_all: false + name: Research Download + runtime_spec: '{"async": true}' + scope: U +- action_type: SR + code: completion + data: |- + {"columns": [ + + {"type": "demographics", + "label": "Patient ID", + "name": "id"}, + + {"type": "demographics", + "label": "Sex", + "name": "sex"}, + + {"type": "demographics", + "label": "Given Names", + "name": "given_names"}, + + {"type": "demographics", + "label": "Family Name", + "name": "family_name"}, + {"type": "cde", + "label": "Hospital Record Number", + "name": "Patientinformation/PtIdentifiers1/PMI"}, + {"type": "cde", + "label": "Private Hospital Number", + "name": "Patientinformation/PrivHospCodes/PrivHospMedRecNo"}, + {"type": "cde", + "label": "Private Hospital", + "name": "Patientinformation/PrivHospCodes/PrivHosp"}, + {"type": "demographics", + "label": "DOB", + "name": "date_of_birth"}, + {"type": "consent", + "label": "Consent", + "name": "promsconsentsection/promsconsent" + }, + {"type": "consent_date", + "label": "Consent Date", + "name": "promsconsentsection/promsconsent" + }, + {"type": "cde", + "label": "Diagnosis Date", + "name": "DIAGDATE"}, + {"type": "cde", + "label":"Treating Clinician", + "name": "Patientinformation/Consultants/Treating_clinician"}, + {"name": "Patientinformation/Consultants/Treatment_speciality", + "label": "Treatment Speciality", + "type": "cde"}, + {"type": "%", + "name": "BaselinePromsBC", + "label": "Baseline PROMS"}, + {"type": "%", + "name": "BaselineClinical", + "label": "BaselineClinical"}, + + {"type": "%", + "name": "Survival", + "label": "Survival"}, + + {"type": "%", + "name": "Treatment", + "label": "Treatment"}, + + {"type": "%", + "name": "Pathology", + "label": "Pathology"} + + ], + "context_form_group": "Main" + } + groups_allowed: + - Clinical Staff + include_all: false + name: Completion Report + runtime_spec: '{"async": true}' + scope: U +- action_type: SR + code: identified + data: |- + { + "columns": [ + { + "type": "demographics", + "label": "Given Names", + "name": "given_names" + }, + { + "type": "demographics", + "label": "Family Name", + "name": "family_name" + }, + { + "type": "demographics", + "label": "Patient ID", + "name": "id"}, + { + "type": "demographics", + "label": "Sex", + "name": "sex" + }, + { + "type": "demographics", + "label": "DOB", + "name": "date_of_birth" + }, + { + "label": "Indicate the laterality of breast cancer", + "name": "BaselineClinical/BASELINECLINICAL/LATERAL", + "type": "cde" + }, + { + "label": "Indicate if this is first breast cancer or new cancer on contralateral or ipsilateral breast", + "name": "BaselineClinical/BASELINECLINICAL/FIRSTBC", + "type": "cde" + }, + { + "label": "Clinical tumor stage", + "name": "BaselineClinical/CLINDISEASESTAGE/TNMCT", + "type": "cde" + }, + { + "label": "Clinical nodal stage", + "name": "BaselineClinical/CLINDISEASESTAGE/TNMCN", + "type": "cde" + }, + { + "label": "Clinical distant metastasis", + "name": "BaselineClinical/CLINDISEASESTAGE/TNMCM", + "type": "cde" + }, + { + "label": "Overall clinical stage", + "name": "BaselineClinical/CLINDISEASESTAGE/BCCLINICALCANCERSTAGE", + "type": "cde" + }, + { + "label": "Collection Date - Baseline", + "name": "BaselinePromsBC/SurveyInformation/COLLECTIONDATE", + "type": "cde" + }, + { + "label": "Do you recognise yourself as an Aboriginal or Torres Strait Islander?", + "name": "BaselinePromsBC/DEMOGRAPHICS/ETNIC", + "type": "cde" + }, + { + "label": "Are you a publicly funded patient or do you have private health insurance for this admission", + "name": "BaselinePromsBC/DEMOGRAPHICS/public_private", + "type": "cde" + }, + { + "label": "What was the highest level of schooling you completed", + "name": "BaselinePromsBC/DEMOGRAPHICS/EDUCATION", + "type": "cde" + }, + { + "label": "What is your relationship status?", + "name": "BaselinePromsBC/DEMOGRAPHICS/MARITAL", + "type": "cde" + }, + { + "label": "What is your current menopausal status?", + "name": "BaselinePromsBC/DEMOGRAPHICS/MENOPAUSE", + "type": "cde" + }, + { + "label": "Have you been told by a doctor that you have any of the following? (select all that apply)", + "name": "BaselinePromsBC/DEMOGRAPHICS/COMORB", + "type": "cde" + }, + { + "label": "Indicate height in centimetres", + "name": "BaselinePromsBC/DEMOGRAPHICS/HEIGHTCLIN", + "type": "cde" + }, + { + "label": "Indicate weight in kilograms", + "name": "BaselinePromsBC/DEMOGRAPHICS/WEIGHTCLIN", + "type": "cde" + }, + { + "label": "Do you have any trouble doing strenuous activities, like carrying a heavy shopping bag or a suitcase?", + "name": "BaselinePromsBC/ADLS/EORTCQLQC30_Q01", + "type": "cde" + }, + { + "label": "Do you have any trouble taking a long walk", + "name": "BaselinePromsBC/ADLS/EORTCQLQC30_Q02", + "type": "cde" + }, + { + "label": "Do you have any trouble taking a short walk outside of the house", + "name": "BaselinePromsBC/ADLS/EORTCQLQC30_Q03", + "type": "cde" + }, + { + "label": "Do you need to stay in bed or a chair during the day", + "name": "BaselinePromsBC/ADLS/EORTCQLQC30_Q04", + "type": "cde" + }, + { + "label": "Do you need help with eating, dressing, washing yourself or using the toilet", + "name": "BaselinePromsBC/ADLS/EORTCQLQC30_Q05", + "type": "cde" + }, + { + "label": "How would you rate your overall health during the past week", + "name": "BaselinePromsBC/OverallHealth/EORTCQLQC30_Q29", + "type": "cde" + }, + { + "label": "Were you limited in doing either your work or other daily activities", + "name": "BaselinePromsBC/OverallHealth/EORTCQLQC30_Q06", + "type": "cde" + }, + { + "label": "Were you limited in pursuing your hobbies or other leisure time activities", + "name": "BaselinePromsBC/OverallHealth/EORTCQLQC30_Q07", + "type": "cde" + }, + { + "label": "Have you had pain", + "name": "BaselinePromsBC/Pain/EORTCQLQC30_Q09", + "type": "cde" + }, + { + "label": "I have pain in my joints", + "name": "BaselinePromsBC/Pain/FACTES_Q01", + "type": "cde" + }, + { + "label": "Did pain interfere with your daily activities", + "name": "BaselinePromsBC/Pain/EORTCQLQC30_Q19", + "type": "cde" + }, + { + "label": "Were you short of breath", + "name": "BaselinePromsBC/Symptoms/EORTCQLQC30_Q08", + "type": "cde" + }, + { + "label": "Did you need to rest", + "name": "BaselinePromsBC/Symptoms/EORTCQLQC30_Q10", + "type": "cde" + }, + { + "label": "Have you had trouble sleeping", + "name": "BaselinePromsBC/Symptoms/EORTCQLQC30_Q11", + "type": "cde" + }, + { + "label": "Have you felt weak", + "name": "BaselinePromsBC/Symptoms/EORTCQLQC30_Q12", + "type": "cde" + }, + { + "label": "Have you lacked appetite", + "name": "BaselinePromsBC/Symptoms/EORTCQLQC30_Q13", + "type": "cde" + }, + { + "label": "Have you felt nauseated", + "name": "BaselinePromsBC/Symptoms/EORTCQLQC30_Q14", + "type": "cde" + }, + { + "label": "Have you vomited", + "name": "BaselinePromsBC/Symptoms/EORTCQLQC30_Q15", + "type": "cde" + }, + { + "label": "Have you been constipated", + "name": "BaselinePromsBC/Symptoms/EORTCQLQC30_Q16", + "type": "cde" + }, + { + "label": "Have you had diarrhoea", + "name": "BaselinePromsBC/Symptoms/EORTCQLQC30_Q17", + "type": "cde" + }, + { + "label": "Were you tired", + "name": "BaselinePromsBC/Symptoms/EORTCQLQC30_Q18", + "type": "cde" + }, + { + "label": "Has your physical condition or medical treatment interfered with your family life", + "name": "BaselinePromsBC/PhysicalCondition/EORTCQLQC30_Q26", + "type": "cde" + }, + { + "label": "Has your physical condition or medical treatment interfered with your social activities", + "name": "BaselinePromsBC/PhysicalCondition/EORTCQLQC30_Q27", + "type": "cde" + }, + { + "label": "Has your physical condition or medical treatment caused you financial difficulties", + "name": "BaselinePromsBC/PhysicalCondition/EORTCQLQC30_Q28", + "type": "cde" + }, + { + "label": "How would you rate your overall quality of life during the past week", + "name": "BaselinePromsBC/QoL/EORTCQLQC30_Q30", + "type": "cde" + }, + { + "label": "Have you had difficulty in concentrating on things, like reading a newspaper or watching television", + "name": "BaselinePromsBC/MentalHealth/EORTCQLQC30_Q20", + "type": "cde" + }, + { + "label": "Did you feel tense", + "name": "BaselinePromsBC/MentalHealth/EORTCQLQC30_Q21", + "type": "cde" + }, + { + "label": "Did you worry", + "name": "BaselinePromsBC/MentalHealth/EORTCQLQC30_Q22", + "type": "cde" + }, + { + "label": "Did you feel irritable", + "name": "BaselinePromsBC/MentalHealth/EORTCQLQC30_Q23", + "type": "cde" + }, + { + "label": "Did you feel depressed", + "name": "BaselinePromsBC/MentalHealth/EORTCQLQC30_Q24", + "type": "cde" + }, + { + "label": "Have you had difficulty remembering things", + "name": "BaselinePromsBC/MentalHealth/EORTCQLQC30_Q25", + "type": "cde" + }, + { + "label": "Were you worried about your health in the future", + "name": "BaselinePromsBC/MentalHealth/EORTCQLQBR23_Q43", + "type": "cde" + }, + { + "label": "Have you felt physically less attractive as a result of your disease or treatment", + "name": "BaselinePromsBC/BodyImage1Pre/EORTCQLQBR23_Q39", + "type": "cde" + }, + { + "label": "Have you been feeling less feminine as a result of your disease or treatment", + "name": "BaselinePromsBC/BodyImage1Pre/EORTCQLQBR23_Q40", + "type": "cde" + }, + { + "label": "Did you find it difficult to look at yourself naked", + "name": "BaselinePromsBC/BodyImage1Pre/EORTCQLQBR23_Q41", + "type": "cde" + }, + { + "label": "Have you been dissatisfied with your body", + "name": "BaselinePromsBC/BodyImage1Pre/EORTCQLQBR23_Q42", + "type": "cde" + }, + { + "label": "How you look in the mirror CLOTHED", + "name": "BaselinePromsBC/BodyImage2Pre/BREASTQMCRB_Q01", + "type": "cde" + }, + { + "label": "How comfortable your bras fit", + "name": "BaselinePromsBC/BodyImage2Pre/BREASTQMCRB_Q02", + "type": "cde" + }, + { + "label": "Being able to wear clothing that is more fitted", + "name": "BaselinePromsBC/BodyImage2Pre/BREASTQMCRB_Q03", + "type": "cde" + }, + { + "label": "How you look in the mirror UNCLOTHED", + "name": "BaselinePromsBC/BodyImage2Pre/BREASTQMCRB_Q04", + "type": "cde" + }, + { + "label": "Did you have any pain in your arm or shoulder", + "name": "BaselinePromsBC/SideEffectsSurg/EORTCQLQBR23_Q47", + "type": "cde" + }, + { + "label": "Did you have a swollen arm or hand", + "name": "BaselinePromsBC/SideEffectsSurg/EORTCQLQBR23_Q48", + "type": "cde" + }, + { + "label": "Was it difficult to raise your arm or to move it sideways", + "name": "BaselinePromsBC/SideEffectsSurg/EORTCQLQBR23_Q49", + "type": "cde" + }, + { + "label": "Have you had any pain in the area of your affected breast", + "name": "BaselinePromsBC/SideEffectsSurg/EORTCQLQBR23_Q50", + "type": "cde" + }, + { + "label": "Was the area of your affected breast swollen", + "name": "BaselinePromsBC/SideEffectsSurg/EORTCQLQBR23_Q51", + "type": "cde" + }, + { + "label": "Was the area of your affected breast oversensitive", + "name": "BaselinePromsBC/SideEffectsSurg/EORTCQLQBR23_Q52", + "type": "cde" + }, + { + "label": "Have you had skin problems on or in the area of your affected breast (eg itchy, dry, flaky)", + "name": "BaselinePromsBC/SideEffectsSurg/EORTCQLQBR23_Q53", + "type": "cde" + }, + { + "label": "Did you have a dry mouth", + "name": "BaselinePromsBC/SideEffectsAdjuvant/EORTCQLQBR23_Q31", + "type": "cde" + }, + { + "label": "Did food and drink taste different than usual", + "name": "BaselinePromsBC/SideEffectsAdjuvant/EORTCQLQBR23_Q32", + "type": "cde" + }, + { + "label": "Were your eyes painful, irritated or watery", + "name": "BaselinePromsBC/SideEffectsAdjuvant/EORTCQLQBR23_Q33", + "type": "cde" + }, + { + "label": "Have you lost any hair", + "name": "BaselinePromsBC/SideEffectsAdjuvant/EORTCQLQBR23_Q34", + "type": "cde" + }, + { + "label": "Were you upset by the loss of your hair", + "name": "BaselinePromsBC/SideEffectsAdjuvant/EORTCQLQBR23_Q35", + "type": "cde" + }, + { + "label": "Did you feel ill or unwell", + "name": "BaselinePromsBC/SideEffectsAdjuvant/EORTCQLQBR23_Q36", + "type": "cde" + }, + { + "label": "Did you have hot flushes", + "name": "BaselinePromsBC/SideEffectsAdjuvant/EORTCQLQBR23_Q37", + "type": "cde" + }, + { + "label": "Did you have headaches", + "name": "BaselinePromsBC/SideEffectsAdjuvant/EORTCQLQBR23_Q38", + "type": "cde" + }, + { + "label": "Tingling hands or feet", + "name": "BaselinePromsBC/SideEffectsAdjuvant/EORTC_QLQ_LMC21", + "type": "cde" + }, + { + "label": "I have vaginal discharge", + "name": "BaselinePromsBC/SideEffectsGynae/FACTES_Q02", + "type": "cde" + }, + { + "label": "I have vaginal itching/irritation", + "name": "BaselinePromsBC/SideEffectsGynae/FACTES_Q03", + "type": "cde" + }, + { + "label": "I have vaginal bleeding or spotting", + "name": "BaselinePromsBC/SideEffectsGynae/FACTES_Q04", + "type": "cde" + }, + { + "label": "I have vaginal dryness", + "name": "BaselinePromsBC/SideEffectsGynae/FACTES_Q05", + "type": "cde" + }, + { + "label": "I have pain or discomfort with intercourse", + "name": "BaselinePromsBC/SideEffectsGynae/FACTES_Q06", + "type": "cde" + }, + { + "label": "To what extent were you interested in sex", + "name": "BaselinePromsBC/SexualActivity/EORTCQLQBR23_Q44", + "type": "cde" + }, + { + "label": "To what extent were you sexually active (with or without intercourse)", + "name": "BaselinePromsBC/SexualActivity/EORTCQLQBR23_Q45", + "type": "cde" + }, + { + "label": "To what extent was sex enjoyable for you", + "name": "BaselinePromsBC/SexualActivity/EORTCQLQBR23_Q46", + "type": "cde" + }, + { + "label": "MOBILITY", + "name": "BaselinePromsBC/EQ_5D/EQ_Mobility", + "type": "cde" + }, + { + "label": "PERSONAL CARE", + "name": "BaselinePromsBC/EQ_5D/EQ_Selfcare", + "type": "cde" + }, + { + "label": "USUAL ACTIVITIES (eg work, study, housework, family or leisure activities)", + "name": "BaselinePromsBC/EQ_5D/EQ_UsualActivities", + "type": "cde" + }, + { + "label": "PAIN/DISCOMFORT", + "name": "BaselinePromsBC/EQ_5D/EQ_Pain_Discomfort", + "type": "cde" + }, + { + "label": "ANXIETY/DEPRESSION", + "name": "BaselinePromsBC/EQ_5D/EQ_Anxiety_Depress", + "type": "cde" + }, + { + "label": "YOUR HEALTH TODAY", + "name": "BaselinePromsBC/EQ_5D/EQ_Health_Rate", + "type": "cde" + }, + { + "label": "Collection Date - 6 Months", + "name": "FollowUpPROMS6months/SurveyInformation/COLLECTIONDATE", + "type": "cde" + }, + { + "label": "What was the most extensive surgery you have had for breast cancer", + "name": "FollowUpPROMS6months/PATIENTREPORTRX/BREASTQ_SURG", + "type": "cde" + }, + { + "label": "Do you have any trouble doing strenuous activities, like carrying a heavy shopping bag or a suitcase?", + "name": "FollowUpPROMS6months/ADLS/EORTCQLQC30_Q01", + "type": "cde" + }, + { + "label": "Do you have any trouble taking a long walk", + "name": "FollowUpPROMS6months/ADLS/EORTCQLQC30_Q02", + "type": "cde" + }, + { + "label": "Do you have any trouble taking a short walk outside of the house", + "name": "FollowUpPROMS6months/ADLS/EORTCQLQC30_Q03", + "type": "cde" + }, + { + "label": "Do you need to stay in bed or a chair during the day", + "name": "FollowUpPROMS6months/ADLS/EORTCQLQC30_Q04", + "type": "cde" + }, + { + "label": "Do you need help with eating, dressing, washing yourself or using the toilet", + "name": "FollowUpPROMS6months/ADLS/EORTCQLQC30_Q05", + "type": "cde" + }, + { + "label": "How would you rate your overall health during the past week", + "name": "FollowUpPROMS6months/OverallHealth/EORTCQLQC30_Q29", + "type": "cde" + }, + { + "label": "Were you limited in doing either your work or other daily activities", + "name": "FollowUpPROMS6months/OverallHealth/EORTCQLQC30_Q06", + "type": "cde" + }, + { + "label": "Were you limited in pursuing your hobbies or other leisure time activities", + "name": "FollowUpPROMS6months/OverallHealth/EORTCQLQC30_Q07", + "type": "cde" + }, + { + "label": "Have you had pain", + "name": "FollowUpPROMS6months/Pain/EORTCQLQC30_Q09", + "type": "cde" + }, + { + "label": "I have pain in my joints", + "name": "FollowUpPROMS6months/Pain/FACTES_Q01", + "type": "cde" + }, + { + "label": "Did pain interfere with your daily activities", + "name": "FollowUpPROMS6months/Pain/EORTCQLQC30_Q19", + "type": "cde" + }, + { + "label": "Were you short of breath", + "name": "FollowUpPROMS6months/Symptoms/EORTCQLQC30_Q08", + "type": "cde" + }, + { + "label": "Did you need to rest", + "name": "FollowUpPROMS6months/Symptoms/EORTCQLQC30_Q10", + "type": "cde" + }, + { + "label": "Have you had trouble sleeping", + "name": "FollowUpPROMS6months/Symptoms/EORTCQLQC30_Q11", + "type": "cde" + }, + { + "label": "Have you felt weak", + "name": "FollowUpPROMS6months/Symptoms/EORTCQLQC30_Q12", + "type": "cde" + }, + { + "label": "Have you lacked appetite", + "name": "FollowUpPROMS6months/Symptoms/EORTCQLQC30_Q13", + "type": "cde" + }, + { + "label": "Have you felt nauseated", + "name": "FollowUpPROMS6months/Symptoms/EORTCQLQC30_Q14", + "type": "cde" + }, + { + "label": "Have you vomited", + "name": "FollowUpPROMS6months/Symptoms/EORTCQLQC30_Q15", + "type": "cde" + }, + { + "label": "Have you been constipated", + "name": "FollowUpPROMS6months/Symptoms/EORTCQLQC30_Q16", + "type": "cde" + }, + { + "label": "Have you had diarrhoea", + "name": "FollowUpPROMS6months/Symptoms/EORTCQLQC30_Q17", + "type": "cde" + }, + { + "label": "Were you tired", + "name": "FollowUpPROMS6months/Symptoms/EORTCQLQC30_Q18", + "type": "cde" + }, + { + "label": "Has your physical condition or medical treatment interfered with your family life", + "name": "FollowUpPROMS6months/PhysicalCondition/EORTCQLQC30_Q26", + "type": "cde" + }, + { + "label": "Has your physical condition or medical treatment interfered with your social activities", + "name": "FollowUpPROMS6months/PhysicalCondition/EORTCQLQC30_Q27", + "type": "cde" + }, + { + "label": "Has your physical condition or medical treatment caused you financial difficulties", + "name": "FollowUpPROMS6months/PhysicalCondition/EORTCQLQC30_Q28", + "type": "cde" + }, + { + "label": "How would you rate your overall quality of life during the past week", + "name": "FollowUpPROMS6months/QoL/EORTCQLQC30_Q30", + "type": "cde" + }, + { + "label": "Have you had difficulty in concentrating on things, like reading a newspaper or watching television", + "name": "FollowUpPROMS6months/MentalHealth/EORTCQLQC30_Q20", + "type": "cde" + }, + { + "label": "Did you feel tense", + "name": "FollowUpPROMS6months/MentalHealth/EORTCQLQC30_Q21", + "type": "cde" + }, + { + "label": "Did you worry", + "name": "FollowUpPROMS6months/MentalHealth/EORTCQLQC30_Q22", + "type": "cde" + }, + { + "label": "Did you feel irritable", + "name": "FollowUpPROMS6months/MentalHealth/EORTCQLQC30_Q23", + "type": "cde" + }, + { + "label": "Did you feel depressed", + "name": "FollowUpPROMS6months/MentalHealth/EORTCQLQC30_Q24", + "type": "cde" + }, + { + "label": "Have you had difficulty remembering things", + "name": "FollowUpPROMS6months/MentalHealth/EORTCQLQC30_Q25", + "type": "cde" + }, + { + "label": "Were you worried about your health in the future", + "name": "FollowUpPROMS6months/MentalHealth/EORTCQLQBR23_Q43", + "type": "cde" + }, + { + "label": "Have you felt physically less attractive as a result of your disease or treatment", + "name": "FollowUpPROMS6months/BodyImage1Pre/EORTCQLQBR23_Q39", + "type": "cde" + }, + { + "label": "Have you been feeling less feminine as a result of your disease or treatment", + "name": "FollowUpPROMS6months/BodyImage1Pre/EORTCQLQBR23_Q40", + "type": "cde" + }, + { + "label": "Did you find it difficult to look at yourself naked", + "name": "FollowUpPROMS6months/BodyImage1Pre/EORTCQLQBR23_Q41", + "type": "cde" + }, + { + "label": "Have you been dissatisfied with your body", + "name": "FollowUpPROMS6months/BodyImage1Pre/EORTCQLQBR23_Q42", + "type": "cde" + }, + { + "label": "Did you have any pain in your arm or shoulder", + "name": "FollowUpPROMS6months/SideEffectsSurg/EORTCQLQBR23_Q47", + "type": "cde" + }, + { + "label": "Did you have a swollen arm or hand", + "name": "FollowUpPROMS6months/SideEffectsSurg/EORTCQLQBR23_Q48", + "type": "cde" + }, + { + "label": "Was it difficult to raise your arm or to move it sideways", + "name": "FollowUpPROMS6months/SideEffectsSurg/EORTCQLQBR23_Q49", + "type": "cde" + }, + { + "label": "Have you had any pain in the area of your affected breast", + "name": "FollowUpPROMS6months/SideEffectsSurg/EORTCQLQBR23_Q50", + "type": "cde" + }, + { + "label": "Was the area of your affected breast swollen", + "name": "FollowUpPROMS6months/SideEffectsSurg/EORTCQLQBR23_Q51", + "type": "cde" + }, + { + "label": "Was the area of your affected breast oversensitive", + "name": "FollowUpPROMS6months/SideEffectsSurg/EORTCQLQBR23_Q52", + "type": "cde" + }, + { + "label": "Have you had skin problems on or in the area of your affected breast (eg itchy, dry, flaky)", + "name": "FollowUpPROMS6months/SideEffectsSurg/EORTCQLQBR23_Q53", + "type": "cde" + }, + { + "label": "Did you have a dry mouth", + "name": "FollowUpPROMS6months/SideEffectsAdjuvant/EORTCQLQBR23_Q31", + "type": "cde" + }, + { + "label": "Did food and drink taste different than usual", + "name": "FollowUpPROMS6months/SideEffectsAdjuvant/EORTCQLQBR23_Q32", + "type": "cde" + }, + { + "label": "Were your eyes painful, irritated or watery", + "name": "FollowUpPROMS6months/SideEffectsAdjuvant/EORTCQLQBR23_Q33", + "type": "cde" + }, + { + "label": "Have you lost any hair", + "name": "FollowUpPROMS6months/SideEffectsAdjuvant/EORTCQLQBR23_Q34", + "type": "cde" + }, + { + "label": "Were you upset by the loss of your hair", + "name": "FollowUpPROMS6months/SideEffectsAdjuvant/EORTCQLQBR23_Q35", + "type": "cde" + }, + { + "label": "Did you feel ill or unwell", + "name": "FollowUpPROMS6months/SideEffectsAdjuvant/EORTCQLQBR23_Q36", + "type": "cde" + }, + { + "label": "Did you have hot flushes", + "name": "FollowUpPROMS6months/SideEffectsAdjuvant/EORTCQLQBR23_Q37", + "type": "cde" + }, + { + "label": "Did you have headaches", + "name": "FollowUpPROMS6months/SideEffectsAdjuvant/EORTCQLQBR23_Q38", + "type": "cde" + }, + { + "label": "Tingling hands or feet", + "name": "FollowUpPROMS6months/SideEffectsAdjuvant/EORTC_QLQ_LMC21", + "type": "cde" + }, + { + "label": "I have vaginal discharge", + "name": "FollowUpPROMS6months/SideEffectsGynae/FACTES_Q02", + "type": "cde" + }, + { + "label": "I have vaginal itching/irritation", + "name": "FollowUpPROMS6months/SideEffectsGynae/FACTES_Q03", + "type": "cde" + }, + { + "label": "I have vaginal bleeding or spotting", + "name": "FollowUpPROMS6months/SideEffectsGynae/FACTES_Q04", + "type": "cde" + }, + { + "label": "I have vaginal dryness", + "name": "FollowUpPROMS6months/SideEffectsGynae/FACTES_Q05", + "type": "cde" + }, + { + "label": "I have pain or discomfort with intercourse", + "name": "FollowUpPROMS6months/SideEffectsGynae/FACTES_Q06", + "type": "cde" + }, + { + "label": "To what extent were you interested in sex", + "name": "FollowUpPROMS6months/SexualActivity/EORTCQLQBR23_Q44", + "type": "cde" + }, + { + "label": "To what extent were you sexually active (with or without intercourse)", + "name": "FollowUpPROMS6months/SexualActivity/EORTCQLQBR23_Q45", + "type": "cde" + }, + { + "label": "To what extent was sex enjoyable for you", + "name": "FollowUpPROMS6months/SexualActivity/EORTCQLQBR23_Q46", + "type": "cde" + }, + { + "label": "MOBILITY", + "name": "FollowUpPROMS6months/EQ_5D/EQ_Mobility", + "type": "cde" + }, + { + "label": "PERSONAL CARE", + "name": "FollowUpPROMS6months/EQ_5D/EQ_Selfcare", + "type": "cde" + }, + { + "label": "USUAL ACTIVITIES (eg work, study, housework, family or leisure activities)", + "name": "FollowUpPROMS6months/EQ_5D/EQ_UsualActivities", + "type": "cde" + }, + { + "label": "PAIN/DISCOMFORT", + "name": "FollowUpPROMS6months/EQ_5D/EQ_Pain_Discomfort", + "type": "cde" + }, + { + "label": "ANXIETY/DEPRESSION", + "name": "FollowUpPROMS6months/EQ_5D/EQ_Anxiety_Depress", + "type": "cde" + }, + { + "label": "YOUR HEALTH TODAY", + "name": "FollowUpPROMS6months/EQ_5D/EQ_Health_Rate", + "type": "cde" + }, + { + "label": "Collection Date - Year 1", + "name": "FUpPROMSYr1/SurveyInformation/COLLECTIONDATE", + "type": "cde" + }, + { + "label": "What was the most extensive surgery you have had for breast cancer", + "name": "FUpPROMSYr1/PATIENTREPORTRX/BREASTQ_SURG", + "type": "cde" + }, + { + "label": "Do you have any trouble doing strenuous activities, like carrying a heavy shopping bag or a suitcase?", + "name": "FUpPROMSYr1/ADLS/EORTCQLQC30_Q01", + "type": "cde" + }, + { + "label": "Do you have any trouble taking a long walk", + "name": "FUpPROMSYr1/ADLS/EORTCQLQC30_Q02", + "type": "cde" + }, + { + "label": "Do you have any trouble taking a short walk outside of the house", + "name": "FUpPROMSYr1/ADLS/EORTCQLQC30_Q03", + "type": "cde" + }, + { + "label": "Do you need to stay in bed or a chair during the day", + "name": "FUpPROMSYr1/ADLS/EORTCQLQC30_Q04", + "type": "cde" + }, + { + "label": "Do you need help with eating, dressing, washing yourself or using the toilet", + "name": "FUpPROMSYr1/ADLS/EORTCQLQC30_Q05", + "type": "cde" + }, + { + "label": "How would you rate your overall health during the past week", + "name": "FUpPROMSYr1/OverallHealth/EORTCQLQC30_Q29", + "type": "cde" + }, + { + "label": "Were you limited in doing either your work or other daily activities", + "name": "FUpPROMSYr1/OverallHealth/EORTCQLQC30_Q06", + "type": "cde" + }, + { + "label": "Were you limited in pursuing your hobbies or other leisure time activities", + "name": "FUpPROMSYr1/OverallHealth/EORTCQLQC30_Q07", + "type": "cde" + }, + { + "label": "Have you had pain", + "name": "FUpPROMSYr1/Pain/EORTCQLQC30_Q09", + "type": "cde" + }, + { + "label": "I have pain in my joints", + "name": "FUpPROMSYr1/Pain/FACTES_Q01", + "type": "cde" + }, + { + "label": "Did pain interfere with your daily activities", + "name": "FUpPROMSYr1/Pain/EORTCQLQC30_Q19", + "type": "cde" + }, + { + "label": "Were you short of breath", + "name": "FUpPROMSYr1/Symptoms/EORTCQLQC30_Q08", + "type": "cde" + }, + { + "label": "Did you need to rest", + "name": "FUpPROMSYr1/Symptoms/EORTCQLQC30_Q10", + "type": "cde" + }, + { + "label": "Have you had trouble sleeping", + "name": "FUpPROMSYr1/Symptoms/EORTCQLQC30_Q11", + "type": "cde" + }, + { + "label": "Have you felt weak", + "name": "FUpPROMSYr1/Symptoms/EORTCQLQC30_Q12", + "type": "cde" + }, + { + "label": "Have you lacked appetite", + "name": "FUpPROMSYr1/Symptoms/EORTCQLQC30_Q13", + "type": "cde" + }, + { + "label": "Have you felt nauseated", + "name": "FUpPROMSYr1/Symptoms/EORTCQLQC30_Q14", + "type": "cde" + }, + { + "label": "Have you vomited", + "name": "FUpPROMSYr1/Symptoms/EORTCQLQC30_Q15", + "type": "cde" + }, + { + "label": "Have you been constipated", + "name": "FUpPROMSYr1/Symptoms/EORTCQLQC30_Q16", + "type": "cde" + }, + { + "label": "Have you had diarrhoea", + "name": "FUpPROMSYr1/Symptoms/EORTCQLQC30_Q17", + "type": "cde" + }, + { + "label": "Were you tired", + "name": "FUpPROMSYr1/Symptoms/EORTCQLQC30_Q18", + "type": "cde" + }, + { + "label": "Has your physical condition or medical treatment interfered with your family life", + "name": "FUpPROMSYr1/PhysicalCondition/EORTCQLQC30_Q26", + "type": "cde" + }, + { + "label": "Has your physical condition or medical treatment interfered with your social activities", + "name": "FUpPROMSYr1/PhysicalCondition/EORTCQLQC30_Q27", + "type": "cde" + }, + { + "label": "Has your physical condition or medical treatment caused you financial difficulties", + "name": "FUpPROMSYr1/PhysicalCondition/EORTCQLQC30_Q28", + "type": "cde" + }, + { + "label": "How would you rate your overall quality of life during the past week", + "name": "FUpPROMSYr1/QoL/EORTCQLQC30_Q30", + "type": "cde" + }, + { + "label": "Have you had difficulty in concentrating on things, like reading a newspaper or watching television", + "name": "FUpPROMSYr1/MentalHealth/EORTCQLQC30_Q20", + "type": "cde" + }, + { + "label": "Did you feel tense", + "name": "FUpPROMSYr1/MentalHealth/EORTCQLQC30_Q21", + "type": "cde" + }, + { + "label": "Did you worry", + "name": "FUpPROMSYr1/MentalHealth/EORTCQLQC30_Q22", + "type": "cde" + }, + { + "label": "Did you feel irritable", + "name": "FUpPROMSYr1/MentalHealth/EORTCQLQC30_Q23", + "type": "cde" + }, + { + "label": "Did you feel depressed", + "name": "FUpPROMSYr1/MentalHealth/EORTCQLQC30_Q24", + "type": "cde" + }, + { + "label": "Have you had difficulty remembering things", + "name": "FUpPROMSYr1/MentalHealth/EORTCQLQC30_Q25", + "type": "cde" + }, + { + "label": "Were you worried about your health in the future", + "name": "FUpPROMSYr1/MentalHealth/EORTCQLQBR23_Q43", + "type": "cde" + }, + { + "label": "Have you felt physically less attractive as a result of your disease or treatment", + "name": "FUpPROMSYr1/BodyImage1Pre/EORTCQLQBR23_Q39", + "type": "cde" + }, + { + "label": "Have you been feeling less feminine as a result of your disease or treatment", + "name": "FUpPROMSYr1/BodyImage1Pre/EORTCQLQBR23_Q40", + "type": "cde" + }, + { + "label": "Did you find it difficult to look at yourself naked", + "name": "FUpPROMSYr1/BodyImage1Pre/EORTCQLQBR23_Q41", + "type": "cde" + }, + { + "label": "Have you been dissatisfied with your body", + "name": "FUpPROMSYr1/BodyImage1Pre/EORTCQLQBR23_Q42", + "type": "cde" + }, + { + "label": "Did you have any pain in your arm or shoulder", + "name": "FUpPROMSYr1/SideEffectsSurg/EORTCQLQBR23_Q47", + "type": "cde" + }, + { + "label": "Did you have a swollen arm or hand", + "name": "FUpPROMSYr1/SideEffectsSurg/EORTCQLQBR23_Q48", + "type": "cde" + }, + { + "label": "Was it difficult to raise your arm or to move it sideways", + "name": "FUpPROMSYr1/SideEffectsSurg/EORTCQLQBR23_Q49", + "type": "cde" + }, + { + "label": "Have you had any pain in the area of your affected breast", + "name": "FUpPROMSYr1/SideEffectsSurg/EORTCQLQBR23_Q50", + "type": "cde" + }, + { + "label": "Was the area of your affected breast swollen", + "name": "FUpPROMSYr1/SideEffectsSurg/EORTCQLQBR23_Q51", + "type": "cde" + }, + { + "label": "Was the area of your affected breast oversensitive", + "name": "FUpPROMSYr1/SideEffectsSurg/EORTCQLQBR23_Q52", + "type": "cde" + }, + { + "label": "Have you had skin problems on or in the area of your affected breast (eg itchy, dry, flaky)", + "name": "FUpPROMSYr1/SideEffectsSurg/EORTCQLQBR23_Q53", + "type": "cde" + }, + { + "label": "Did you have a dry mouth", + "name": "FUpPROMSYr1/SideEffectsAdjuvant/EORTCQLQBR23_Q31", + "type": "cde" + }, + { + "label": "Did food and drink taste different than usual", + "name": "FUpPROMSYr1/SideEffectsAdjuvant/EORTCQLQBR23_Q32", + "type": "cde" + }, + { + "label": "Were your eyes painful, irritated or watery", + "name": "FUpPROMSYr1/SideEffectsAdjuvant/EORTCQLQBR23_Q33", + "type": "cde" + }, + { + "label": "Have you lost any hair", + "name": "FUpPROMSYr1/SideEffectsAdjuvant/EORTCQLQBR23_Q34", + "type": "cde" + }, + { + "label": "Were you upset by the loss of your hair", + "name": "FUpPROMSYr1/SideEffectsAdjuvant/EORTCQLQBR23_Q35", + "type": "cde" + }, + { + "label": "Did you feel ill or unwell", + "name": "FUpPROMSYr1/SideEffectsAdjuvant/EORTCQLQBR23_Q36", + "type": "cde" + }, + { + "label": "Did you have hot flushes", + "name": "FUpPROMSYr1/SideEffectsAdjuvant/EORTCQLQBR23_Q37", + "type": "cde" + }, + { + "label": "Did you have headaches", + "name": "FUpPROMSYr1/SideEffectsAdjuvant/EORTCQLQBR23_Q38", + "type": "cde" + }, + { + "label": "Tingling hands or feet", + "name": "FUpPROMSYr1/SideEffectsAdjuvant/EORTC_QLQ_LMC21", + "type": "cde" + }, + { + "label": "I have vaginal discharge", + "name": "FUpPROMSYr1/SideEffectsGynae/FACTES_Q02", + "type": "cde" + }, + { + "label": "I have vaginal itching/irritation", + "name": "FUpPROMSYr1/SideEffectsGynae/FACTES_Q03", + "type": "cde" + }, + { + "label": "I have vaginal bleeding or spotting", + "name": "FUpPROMSYr1/SideEffectsGynae/FACTES_Q04", + "type": "cde" + }, + { + "label": "I have vaginal dryness", + "name": "FUpPROMSYr1/SideEffectsGynae/FACTES_Q05", + "type": "cde" + }, + { + "label": "I have pain or discomfort with intercourse", + "name": "FUpPROMSYr1/SideEffectsGynae/FACTES_Q06", + "type": "cde" + }, + { + "label": "To what extent were you interested in sex", + "name": "FUpPROMSYr1/SexualActivity/EORTCQLQBR23_Q44", + "type": "cde" + }, + { + "label": "To what extent were you sexually active (with or without intercourse)", + "name": "FUpPROMSYr1/SexualActivity/EORTCQLQBR23_Q45", + "type": "cde" + }, + { + "label": "To what extent was sex enjoyable for you", + "name": "FUpPROMSYr1/SexualActivity/EORTCQLQBR23_Q46", + "type": "cde" + }, + { + "label": "MOBILITY", + "name": "FUpPROMSYr1/EQ_5D/EQ_Mobility", + "type": "cde" + }, + { + "label": "PERSONAL CARE", + "name": "FUpPROMSYr1/EQ_5D/EQ_Selfcare", + "type": "cde" + }, + { + "label": "USUAL ACTIVITIES (eg work, study, housework, family or leisure activities)", + "name": "FUpPROMSYr1/EQ_5D/EQ_UsualActivities", + "type": "cde" + }, + { + "label": "PAIN/DISCOMFORT", + "name": "FUpPROMSYr1/EQ_5D/EQ_Pain_Discomfort", + "type": "cde" + }, + { + "label": "ANXIETY/DEPRESSION", + "name": "FUpPROMSYr1/EQ_5D/EQ_Anxiety_Depress", + "type": "cde" + }, + { + "label": "YOUR HEALTH TODAY", + "name": "FUpPROMSYr1/EQ_5D/EQ_Health_Rate", + "type": "cde" + }, + { + "label": "How you look in the mirror CLOTHED", + "name": "FUpPROMSYr1/BREASTQBCTP/BREASTQBCTP_Q01", + "type": "cde" + }, + { + "label": "The shape of your lumpectomy breast when you are wearing a bra", + "name": "FUpPROMSYr1/BREASTQBCTP/BREASTQBCTP_Q02", + "type": "cde" + }, + { + "label": "How normal you feel in your clothes", + "name": "FUpPROMSYr1/BREASTQBCTP/BREASTQBCTP_Q03", + "type": "cde" + }, + { + "label": "Being able to wear clothing which is more fitted", + "name": "FUpPROMSYr1/BREASTQBCTP/BREASTQBCTP_Q04", + "type": "cde" + }, + { + "label": "How your lumpectomy breast sits/hangs", + "name": "FUpPROMSYr1/BREASTQBCTP/BREASTQBCTP_Q05", + "type": "cde" + }, + { + "label": "How smoothly shaped your lumpectomy breast looks", + "name": "FUpPROMSYr1/BREASTQBCTP/BREASTQBCTP_Q06", + "type": "cde" + }, + { + "label": "The contour (shape) of your lumpectomy breast", + "name": "FUpPROMSYr1/BREASTQBCTP/BREASTQBCTP_Q07", + "type": "cde" + }, + { + "label": "How equal in size your breasts are to each other", + "name": "FUpPROMSYr1/BREASTQBCTP/BREASTQBCTP_Q08", + "type": "cde" + }, + { + "label": "How normal your lumpectomy breast looks", + "name": "FUpPROMSYr1/BREASTQBCTP/BREASTQBCTP_Q09", + "type": "cde" + }, + { + "label": "How much your breasts look the same", + "name": "FUpPROMSYr1/BREASTQBCTP/BREASTQBCTP_Q10", + "type": "cde" + }, + { + "label": "How you look in the mirror UNCLOTHED", + "name": "FUpPROMSYr1/BREASTQBCTP/BREASTQBCTP_Q11", + "type": "cde" + }, + { + "label": "How you look in the mirror CLOTHED", + "name": "FUpPROMSYr1/BREASTQMASTP/BREASTQMASTP_Q01", + "type": "cde" + }, + { + "label": "How comfortable your bras fit", + "name": "FUpPROMSYr1/BREASTQMASTP/BREASTQMASTP_Q02", + "type": "cde" + }, + { + "label": "Being able to wear clothing that is more fitted", + "name": "FUpPROMSYr1/BREASTQMASTP/BREASTQMASTP_Q03", + "type": "cde" + }, + { + "label": "How you look in the mirror UNCLOTHED", + "name": "FUpPROMSYr1/BREASTQMASTP/BREASTQMASTP_Q04", + "type": "cde" + }, + { + "label": "How you look in the mirror CLOTHED", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q01", + "type": "cde" + }, + { + "label": "The shape of your reconstructed breast(s) when you are wearing a bra", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q02", + "type": "cde" + }, + { + "label": "How normal you feel in your clothes", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q03", + "type": "cde" + }, + { + "label": "The size of your reconstructed breast(s)", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q04", + "type": "cde" + }, + { + "label": "Being able to wear clothing that is more fitted", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q05", + "type": "cde" + }, + { + "label": "How your breasts are lined up in relation to each other", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q06", + "type": "cde" + }, + { + "label": "How comfortable your bras fit", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q07", + "type": "cde" + }, + { + "label": "The softness of your reconstructed breast(s)", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q08", + "type": "cde" + }, + { + "label": "How equal in size your breasts are to each other", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q09", + "type": "cde" + }, + { + "label": "How natural your reconstructed breast(s) looks", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q10", + "type": "cde" + }, + { + "label": "How naturally your reconstructed breast(s) sits/hangs", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q11", + "type": "cde" + }, + { + "label": "How your reconstructed breast(s) feel to touch", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q12", + "type": "cde" + }, + { + "label": "How much your reconstructed breast(s) feels like a natural part of your body", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q13", + "type": "cde" + }, + { + "label": "How closely matched your breasts are to each other", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q14", + "type": "cde" + }, + { + "label": "How your reconstructed breast(s) look now compared to before you had any breast surgery", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q15", + "type": "cde" + }, + { + "label": "How you look in the mirror UNCLOTHED", + "name": "FUpPROMSYr1/BREASTQRECP/BREASTQRECP_Q16", + "type": "cde" + }, + { + "label": "Collection Date - Year 2", + "name": "FUpPROMSYr2/SurveyInformation/COLLECTIONDATE", + "type": "cde" + }, + { + "label": "What was the most extensive surgery you have had for breast cancer", + "name": "FUpPROMSYr2/PATIENTREPORTRX/BREASTQ_SURG", + "type": "cde" + }, + { + "label": "Do you have any trouble doing strenuous activities, like carrying a heavy shopping bag or a suitcase?", + "name": "FUpPROMSYr2/ADLS/EORTCQLQC30_Q01", + "type": "cde" + }, + { + "label": "Do you have any trouble taking a long walk", + "name": "FUpPROMSYr2/ADLS/EORTCQLQC30_Q02", + "type": "cde" + }, + { + "label": "Do you have any trouble taking a short walk outside of the house", + "name": "FUpPROMSYr2/ADLS/EORTCQLQC30_Q03", + "type": "cde" + }, + { + "label": "Do you need to stay in bed or a chair during the day", + "name": "FUpPROMSYr2/ADLS/EORTCQLQC30_Q04", + "type": "cde" + }, + { + "label": "Do you need help with eating, dressing, washing yourself or using the toilet", + "name": "FUpPROMSYr2/ADLS/EORTCQLQC30_Q05", + "type": "cde" + }, + { + "label": "How would you rate your overall health during the past week", + "name": "FUpPROMSYr2/OverallHealth/EORTCQLQC30_Q29", + "type": "cde" + }, + { + "label": "Were you limited in doing either your work or other daily activities", + "name": "FUpPROMSYr2/OverallHealth/EORTCQLQC30_Q06", + "type": "cde" + }, + { + "label": "Were you limited in pursuing your hobbies or other leisure time activities", + "name": "FUpPROMSYr2/OverallHealth/EORTCQLQC30_Q07", + "type": "cde" + }, + { + "label": "Have you had pain", + "name": "FUpPROMSYr2/Pain/EORTCQLQC30_Q09", + "type": "cde" + }, + { + "label": "I have pain in my joints", + "name": "FUpPROMSYr2/Pain/FACTES_Q01", + "type": "cde" + }, + { + "label": "Did pain interfere with your daily activities", + "name": "FUpPROMSYr2/Pain/EORTCQLQC30_Q19", + "type": "cde" + }, + { + "label": "Were you short of breath", + "name": "FUpPROMSYr2/Symptoms/EORTCQLQC30_Q08", + "type": "cde" + }, + { + "label": "Did you need to rest", + "name": "FUpPROMSYr2/Symptoms/EORTCQLQC30_Q10", + "type": "cde" + }, + { + "label": "Have you had trouble sleeping", + "name": "FUpPROMSYr2/Symptoms/EORTCQLQC30_Q11", + "type": "cde" + }, + { + "label": "Have you felt weak", + "name": "FUpPROMSYr2/Symptoms/EORTCQLQC30_Q12", + "type": "cde" + }, + { + "label": "Have you lacked appetite", + "name": "FUpPROMSYr2/Symptoms/EORTCQLQC30_Q13", + "type": "cde" + }, + { + "label": "Have you felt nauseated", + "name": "FUpPROMSYr2/Symptoms/EORTCQLQC30_Q14", + "type": "cde" + }, + { + "label": "Have you vomited", + "name": "FUpPROMSYr2/Symptoms/EORTCQLQC30_Q15", + "type": "cde" + }, + { + "label": "Have you been constipated", + "name": "FUpPROMSYr2/Symptoms/EORTCQLQC30_Q16", + "type": "cde" + }, + { + "label": "Have you had diarrhoea", + "name": "FUpPROMSYr2/Symptoms/EORTCQLQC30_Q17", + "type": "cde" + }, + { + "label": "Were you tired", + "name": "FUpPROMSYr2/Symptoms/EORTCQLQC30_Q18", + "type": "cde" + }, + { + "label": "Has your physical condition or medical treatment interfered with your family life", + "name": "FUpPROMSYr2/PhysicalCondition/EORTCQLQC30_Q26", + "type": "cde" + }, + { + "label": "Has your physical condition or medical treatment interfered with your social activities", + "name": "FUpPROMSYr2/PhysicalCondition/EORTCQLQC30_Q27", + "type": "cde" + }, + { + "label": "Has your physical condition or medical treatment caused you financial difficulties", + "name": "FUpPROMSYr2/PhysicalCondition/EORTCQLQC30_Q28", + "type": "cde" + }, + { + "label": "How would you rate your overall quality of life during the past week", + "name": "FUpPROMSYr2/QoL/EORTCQLQC30_Q30", + "type": "cde" + }, + { + "label": "Have you had difficulty in concentrating on things, like reading a newspaper or watching television", + "name": "FUpPROMSYr2/MentalHealth/EORTCQLQC30_Q20", + "type": "cde" + }, + { + "label": "Did you feel tense", + "name": "FUpPROMSYr2/MentalHealth/EORTCQLQC30_Q21", + "type": "cde" + }, + { + "label": "Did you worry", + "name": "FUpPROMSYr2/MentalHealth/EORTCQLQC30_Q22", + "type": "cde" + }, + { + "label": "Did you feel irritable", + "name": "FUpPROMSYr2/MentalHealth/EORTCQLQC30_Q23", + "type": "cde" + }, + { + "label": "Did you feel depressed", + "name": "FUpPROMSYr2/MentalHealth/EORTCQLQC30_Q24", + "type": "cde" + }, + { + "label": "Have you had difficulty remembering things", + "name": "FUpPROMSYr2/MentalHealth/EORTCQLQC30_Q25", + "type": "cde" + }, + { + "label": "Were you worried about your health in the future", + "name": "FUpPROMSYr2/MentalHealth/EORTCQLQBR23_Q43", + "type": "cde" + }, + { + "label": "Have you felt physically less attractive as a result of your disease or treatment", + "name": "FUpPROMSYr2/BodyImage1Pre/EORTCQLQBR23_Q39", + "type": "cde" + }, + { + "label": "Have you been feeling less feminine as a result of your disease or treatment", + "name": "FUpPROMSYr2/BodyImage1Pre/EORTCQLQBR23_Q40", + "type": "cde" + }, + { + "label": "Did you find it difficult to look at yourself naked", + "name": "FUpPROMSYr2/BodyImage1Pre/EORTCQLQBR23_Q41", + "type": "cde" + }, + { + "label": "Have you been dissatisfied with your body", + "name": "FUpPROMSYr2/BodyImage1Pre/EORTCQLQBR23_Q42", + "type": "cde" + }, + { + "label": "Did you have any pain in your arm or shoulder", + "name": "FUpPROMSYr2/SideEffectsSurg/EORTCQLQBR23_Q47", + "type": "cde" + }, + { + "label": "Did you have a swollen arm or hand", + "name": "FUpPROMSYr2/SideEffectsSurg/EORTCQLQBR23_Q48", + "type": "cde" + }, + { + "label": "Was it difficult to raise your arm or to move it sideways", + "name": "FUpPROMSYr2/SideEffectsSurg/EORTCQLQBR23_Q49", + "type": "cde" + }, + { + "label": "Have you had any pain in the area of your affected breast", + "name": "FUpPROMSYr2/SideEffectsSurg/EORTCQLQBR23_Q50", + "type": "cde" + }, + { + "label": "Was the area of your affected breast swollen", + "name": "FUpPROMSYr2/SideEffectsSurg/EORTCQLQBR23_Q51", + "type": "cde" + }, + { + "label": "Was the area of your affected breast oversensitive", + "name": "FUpPROMSYr2/SideEffectsSurg/EORTCQLQBR23_Q52", + "type": "cde" + }, + { + "label": "Have you had skin problems on or in the area of your affected breast (eg itchy, dry, flaky)", + "name": "FUpPROMSYr2/SideEffectsSurg/EORTCQLQBR23_Q53", + "type": "cde" + }, + { + "label": "Did you have a dry mouth", + "name": "FUpPROMSYr2/SideEffectsAdjuvant/EORTCQLQBR23_Q31", + "type": "cde" + }, + { + "label": "Did food and drink taste different than usual", + "name": "FUpPROMSYr2/SideEffectsAdjuvant/EORTCQLQBR23_Q32", + "type": "cde" + }, + { + "label": "Were your eyes painful, irritated or watery", + "name": "FUpPROMSYr2/SideEffectsAdjuvant/EORTCQLQBR23_Q33", + "type": "cde" + }, + { + "label": "Have you lost any hair", + "name": "FUpPROMSYr2/SideEffectsAdjuvant/EORTCQLQBR23_Q34", + "type": "cde" + }, + { + "label": "Were you upset by the loss of your hair", + "name": "FUpPROMSYr2/SideEffectsAdjuvant/EORTCQLQBR23_Q35", + "type": "cde" + }, + { + "label": "Did you feel ill or unwell", + "name": "FUpPROMSYr2/SideEffectsAdjuvant/EORTCQLQBR23_Q36", + "type": "cde" + }, + { + "label": "Did you have hot flushes", + "name": "FUpPROMSYr2/SideEffectsAdjuvant/EORTCQLQBR23_Q37", + "type": "cde" + }, + { + "label": "Did you have headaches", + "name": "FUpPROMSYr2/SideEffectsAdjuvant/EORTCQLQBR23_Q38", + "type": "cde" + }, + { + "label": "Tingling hands or feet", + "name": "FUpPROMSYr2/SideEffectsAdjuvant/EORTC_QLQ_LMC21", + "type": "cde" + }, + { + "label": "I have vaginal discharge", + "name": "FUpPROMSYr2/SideEffectsGynae/FACTES_Q02", + "type": "cde" + }, + { + "label": "I have vaginal itching/irritation", + "name": "FUpPROMSYr2/SideEffectsGynae/FACTES_Q03", + "type": "cde" + }, + { + "label": "I have vaginal bleeding or spotting", + "name": "FUpPROMSYr2/SideEffectsGynae/FACTES_Q04", + "type": "cde" + }, + { + "label": "I have vaginal dryness", + "name": "FUpPROMSYr2/SideEffectsGynae/FACTES_Q05", + "type": "cde" + }, + { + "label": "I have pain or discomfort with intercourse", + "name": "FUpPROMSYr2/SideEffectsGynae/FACTES_Q06", + "type": "cde" + }, + { + "label": "To what extent were you interested in sex", + "name": "FUpPROMSYr2/SexualActivity/EORTCQLQBR23_Q44", + "type": "cde" + }, + { + "label": "To what extent were you sexually active (with or without intercourse)", + "name": "FUpPROMSYr2/SexualActivity/EORTCQLQBR23_Q45", + "type": "cde" + }, + { + "label": "To what extent was sex enjoyable for you", + "name": "FUpPROMSYr2/SexualActivity/EORTCQLQBR23_Q46", + "type": "cde" + }, + { + "label": "MOBILITY", + "name": "FUpPROMSYr2/EQ_5D/EQ_Mobility", + "type": "cde" + }, + { + "label": "PERSONAL CARE", + "name": "FUpPROMSYr2/EQ_5D/EQ_Selfcare", + "type": "cde" + }, + { + "label": "USUAL ACTIVITIES (eg work, study, housework, family or leisure activities)", + "name": "FUpPROMSYr2/EQ_5D/EQ_UsualActivities", + "type": "cde" + }, + { + "label": "PAIN/DISCOMFORT", + "name": "FUpPROMSYr2/EQ_5D/EQ_Pain_Discomfort", + "type": "cde" + }, + { + "label": "ANXIETY/DEPRESSION", + "name": "FUpPROMSYr2/EQ_5D/EQ_Anxiety_Depress", + "type": "cde" + }, + { + "label": "YOUR HEALTH TODAY", + "name": "FUpPROMSYr2/EQ_5D/EQ_Health_Rate", + "type": "cde" + }, + { + "label": "How you look in the mirror CLOTHED", + "name": "FUpPROMSYr2/BREASTQBCTP/BREASTQBCTP_Q01", + "type": "cde" + }, + { + "label": "The shape of your lumpectomy breast when you are wearing a bra", + "name": "FUpPROMSYr2/BREASTQBCTP/BREASTQBCTP_Q02", + "type": "cde" + }, + { + "label": "How normal you feel in your clothes", + "name": "FUpPROMSYr2/BREASTQBCTP/BREASTQBCTP_Q03", + "type": "cde" + }, + { + "label": "Being able to wear clothing which is more fitted", + "name": "FUpPROMSYr2/BREASTQBCTP/BREASTQBCTP_Q04", + "type": "cde" + }, + { + "label": "How your lumpectomy breast sits/hangs", + "name": "FUpPROMSYr2/BREASTQBCTP/BREASTQBCTP_Q05", + "type": "cde" + }, + { + "label": "How smoothly shaped your lumpectomy breast looks", + "name": "FUpPROMSYr2/BREASTQBCTP/BREASTQBCTP_Q06", + "type": "cde" + }, + { + "label": "The contour (shape) of your lumpectomy breast", + "name": "FUpPROMSYr2/BREASTQBCTP/BREASTQBCTP_Q07", + "type": "cde" + }, + { + "label": "How equal in size your breasts are to each other", + "name": "FUpPROMSYr2/BREASTQBCTP/BREASTQBCTP_Q08", + "type": "cde" + }, + { + "label": "How normal your lumpectomy breast looks", + "name": "FUpPROMSYr2/BREASTQBCTP/BREASTQBCTP_Q09", + "type": "cde" + }, + { + "label": "How much your breasts look the same", + "name": "FUpPROMSYr2/BREASTQBCTP/BREASTQBCTP_Q10", + "type": "cde" + }, + { + "label": "How you look in the mirror UNCLOTHED", + "name": "FUpPROMSYr2/BREASTQBCTP/BREASTQBCTP_Q11", + "type": "cde" + }, + { + "label": "How you look in the mirror CLOTHED", + "name": "FUpPROMSYr2/BREASTQMASTP/BREASTQMASTP_Q01", + "type": "cde" + }, + { + "label": "How comfortable your bras fit", + "name": "FUpPROMSYr2/BREASTQMASTP/BREASTQMASTP_Q02", + "type": "cde" + }, + { + "label": "Being able to wear clothing that is more fitted", + "name": "FUpPROMSYr2/BREASTQMASTP/BREASTQMASTP_Q03", + "type": "cde" + }, + { + "label": "How you look in the mirror UNCLOTHED", + "name": "FUpPROMSYr2/BREASTQMASTP/BREASTQMASTP_Q04", + "type": "cde" + }, + { + "label": "How you look in the mirror CLOTHED", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q01", + "type": "cde" + }, + { + "label": "The shape of your reconstructed breast(s) when you are wearing a bra", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q02", + "type": "cde" + }, + { + "label": "How normal you feel in your clothes", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q03", + "type": "cde" + }, + { + "label": "The size of your reconstructed breast(s)", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q04", + "type": "cde" + }, + { + "label": "Being able to wear clothing that is more fitted", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q05", + "type": "cde" + }, + { + "label": "How your breasts are lined up in relation to each other", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q06", + "type": "cde" + }, + { + "label": "How comfortable your bras fit", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q07", + "type": "cde" + }, + { + "label": "The softness of your reconstructed breast(s)", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q08", + "type": "cde" + }, + { + "label": "How equal in size your breasts are to each other", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q09", + "type": "cde" + }, + { + "label": "How natural your reconstructed breast(s) looks", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q10", + "type": "cde" + }, + { + "label": "How naturally your reconstructed breast(s) sits/hangs", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q11", + "type": "cde" + }, + { + "label": "How your reconstructed breast(s) feel to touch", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q12", + "type": "cde" + }, + { + "label": "How much your reconstructed breast(s) feels like a natural part of your body", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q13", + "type": "cde" + }, + { + "label": "How closely matched your breasts are to each other", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q14", + "type": "cde" + }, + { + "label": "How your reconstructed breast(s) look now compared to before you had any breast surgery", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q15", + "type": "cde" + }, + { + "label": "How you look in the mirror UNCLOTHED", + "name": "FUpPROMSYr2/BREASTQRECP/BREASTQRECP_Q16", + "type": "cde" + }, + { + "label": "Initial date of histological diagnosis", + "name": "Pathology/BASELINETUMOUR/DIAGDATE", + "type": "cde" + }, + { + "label": "Indicate histological type of the tumour (select all that apply)", + "name": "Pathology/BASELINETUMOUR/HISTOTYPE", + "type": "cde" + }, + { + "label": "Indicate if the patient carries a genetic mutation predisposing breast cancer", + "name": "Pathology/BASELINETUMOUR/MUTBC", + "type": "cde" + }, + { + "label": "Indicate grade of invasive component of tumour", + "name": "Pathology/BASELINETUMOUR/GRADEINV", + "type": "cde" + }, + { + "label": "Indicate tumour grade of DCIS component of tumour", + "name": "Pathology/BASELINETUMOUR/GRADEDCIS", + "type": "cde" + }, + { + "label": "Indicate size of invasive component of tumour (in mm):", + "name": "Pathology/BASELINETUMOUR/SIZEINV", + "type": "cde" + }, + { + "label": "Number of lymph nodes resected:", + "name": "Pathology/BASELINETUMOUR/LYMPHNR", + "type": "cde" + }, + { + "label": "Number of lymph nodes involved:", + "name": "Pathology/BASELINETUMOUR/LYMPHINV", + "type": "cde" + }, + { + "label": "Indicate if the estrogen receptor status is positive:", + "name": "Pathology/BASELINETUMOUR/ERSTATUS", + "type": "cde" + }, + { + "label": "Indicate if the progesterone receptor status is positive:", + "name": "Pathology/BASELINETUMOUR/PRSTATUS", + "type": "cde" + }, + { + "label": "Indicate if the HER2 receptor status is positive:", + "name": "Pathology/BASELINETUMOUR/HER2STATUS", + "type": "cde" + }, + { + "label": "Pathological tumor stage", + "name": "Pathology/PathStage/TNMPT", + "type": "cde" + }, + { + "label": "Pathological nodal stage", + "name": "Pathology/PathStage/TNMPN", + "type": "cde" + }, + { + "label": "Pathological distant metastasis", + "name": "Pathology/PathStage/TNMPM", + "type": "cde" + }, + { + "label": "Overall pathological stage", + "name": "Pathology/PathStage/BCCANCERSTAGE", + "type": "cde" + }, + + + { + "label": "Is there evidence of local, regional or distant recurrence", + "name": "Survival/Recurrence/RECUR", + "type": "cde" + }, + { + "label": "Recurrence method", + "name": "Survival/Recurrence/RECURMETH", + "type": "cde" + }, + { + "label": "Recurrence date", + "name": "Survival/Recurrence/RECURDATE", + "type": "cde" + }, + { + "label": "Has the patient died", + "name": "Survival/DEATH/DEATH", + "type": "cde" + }, + { + "label": "Date of death (if applicable)", + "name": "Survival/DEATH/DEATHDATE", + "type": "cde" + }, + { + "label": "Was death attributable to breast cancer", + "name": "Survival/DEATH/DEATHBC", + "type": "cde" + }, + { + "label": "Indicate whether the patient received one of the following treatments during the last year: (select all that apply)", + "name": "Treatment/TreatmentAll/TREATMENT", + "type": "cde" + }, + { + "label": "Indicate whether the patient received surgery during the last year:", + "name": "Treatment/TreatmentSurgery/SURGERY", + "type": "cde" + }, + { + "label": "Provide the date of surgery:", + "name": "Treatment/TreatmentSurgery/SURGERYDATE", + "type": "cde" + }, + { + "label": "Indicate whether the patient received surgery to the axilla during the last year:", + "name": "Treatment/TreatmentSurgery/SURGERYAX", + "type": "cde" + }, + { + "label": "Please provide the date of surgery to the axilla:", + "name": "Treatment/TreatmentSurgery/SURGERYAXDATE", + "type": "cde" + }, + { + "label": "Indicate whether the patient received axillary clearance due to lymph node involvement after sentinel lymph node biopsy during the last year:", + "name": "Treatment/TreatmentSurgery/SURGERYAX2", + "type": "cde" + }, + { + "label": "Please provide the date of axillary clearance:", + "name": "Treatment/TreatmentSurgery/SURGERYAX2DATE", + "type": "cde" + }, + { + "label": "Indicate if the patient has undergone a reoperation due to involved margins after primary surgery:", + "name": "Treatment/TreatmentSurgery/REOP", + "type": "cde" + }, + { + "label": "Please provide the date of the reoperation due to positive margins:", + "name": "Treatment/TreatmentSurgery/REOPDATE", + "type": "cde" + }, + { + "label": "Indicate whether the patient received a delayed reconstruction during the last year:", + "name": "Treatment/TreatmentSurgery/RECONSTRUCT", + "type": "cde" + }, + { + "label": "Please provide the date of delayed reconstruction", + "name": "Treatment/TreatmentSurgery/RECONSTRUCTDATE", + "type": "cde" + }, + { + "label": "Indicate whether the patient received radiotherapy during the last year:", + "name": "Treatment/TreatmentRadio/RADIOTX", + "type": "cde" + }, + { + "label": "Indicate location/type of radiotherapy:", + "name": "Treatment/TreatmentRadio/RADIOTXTYPE", + "type": "cde" + }, + { + "label": "Please provide the start date of radiotherapy:", + "name": "Treatment/TreatmentRadio/RADIOTXSTARTDATE", + "type": "cde" + }, + { + "label": "Please provide the stop date of radiotherapy:", + "name": "Treatment/TreatmentRadio/RADIOTXSTOPDATE", + "type": "cde" + }, + { + "label": "Indicate whether the patient received chemotherapy neoadjuvant or adjuvant:", + "name": "Treatment/TreatmentChemo/CHEMOTX", + "type": "cde" + }, + { + "label": "Indicate what type of chemotherapy (select all that apply)", + "name": "Treatment/TreatmentChemo/CHEMOTXTYPE", + "type": "cde" + }, + { + "label": "Please provide the start date of chemotherapy:", + "name": "Treatment/TreatmentChemo/CHEMOTXSTARTDATE", + "type": "cde" + }, + { + "label": "Please provide the stop date of chemotherapy, if applicable:", + "name": "Treatment/TreatmentChemo/CHEMOTXSTOPDATE", + "type": "cde" + }, + { + "label": "Indicate whether the patient received hormonal therapy neoadjuvant or adjuvant:", + "name": "Treatment/TreatmentHorm/HORMONTX", + "type": "cde" + }, + { + "label": "Indicate what type of hormonal therapy (select all that apply)", + "name": "Treatment/TreatmentHorm/HORMONTXTYPE", + "type": "cde" + }, + { + "label": "Start of hormonal therapy", + "name": "Treatment/TreatmentHorm/HORMONTXSTARTDATE", + "type": "cde" + }, + { + "label": "Stop of hormonal therapy", + "name": "Treatment/TreatmentHorm/HORMONTXSTOPDATE", + "type": "cde" + }, + { + "label": "Indicate what type of targeted therapy:", + "name": "Treatment/TreatmentTarg/TARGETTX", + "type": "cde" + }, + { + "label": "Please provide the start date of targeted therapy:", + "name": "Treatment/TreatmentTarg/TARGETTXSTARTDATE", + "type": "cde" + }, + { + "label": "Please provide the stop date of targeted therapy, if applicable:", + "name": "Treatment/TreatmentTarg/TARGETTXSTOPDATE", + "type": "cde" + }, + { + "label": "Indicate whether the patient experienced a complication while on treatment or within 90 days following treatment (select all that apply):", + "name": "Treatment/DISUTILITY/COMPLIMPACT", + "type": "cde" + }, + { + "label": "Please provide the date of death - if selected \"Complication leading to death\" above:", + "name": "Treatment/DISUTILITY/DEATHBCCOMPL", + "type": "cde" + }, + { + "label": "Indicate whether the complication is attributable to breast cancer treatment:", + "name": "Treatment/DISUTILITY/COMPLTX", + "type": "cde" + } + ], + "context_form_group": "Main" + } + groups_allowed: + - Clinical Staff + include_all: false + name: Identified data – clinical/PROMs baseline to Year 2 + runtime_spec: '{"async": true}' + scope: U +demographic_fields: +- field: next_of_kin_family_name + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: next_of_kin_country + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: next_of_kin_given_names + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: next_of_kin_relationship + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: next_of_kin_address + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: next_of_kin_suburb + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: next_of_kin_state + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: next_of_kin_postcode + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: next_of_kin_home_phone + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: next_of_kin_mobile_phone + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: next_of_kin_work_phone + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: next_of_kin_email + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: next_of_kin_parent_place_of_birth + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: place_of_birth + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: maiden_name + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: date_of_migration + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: ethnic_origin + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: umrn + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: date_of_death + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +- field: country_of_birth + group: Clinical Staff + hidden: true + readonly: null + registry: ICHOMBC +desc: ICHOM Breast +dropdown_lookups: +- label: test + tag: clinicians + value: '002' +email_notifications: +- description: survey-request + disabled: false + email_from: no-reply@mg.ccgapps.com.au + email_templates: + - body: |- + Dear {{display_name}}
+
+ You are receiving this email because you agreed to take part in the Continuous Improvement in Care (CIC) – Cancer Project.
+
+ We would appreciate if you could complete the following survey prior to your next appointment with the doctor.
+
+ Your answers may help your doctor to identify any areas where you are having problems, so that these can be addressed.
+
+ Google Chrome or Firefox (recent versions) web browsers need to be used, as other web browsers are not supported. +
+ Please click on the following link to begin the survey:
+
+ {{email_link}} + description: CIC survey request + language: en + subject: Breast Cancer {{survey_name}} Survey + group_recipient: null + recipient: '{{patient_email}}' +forms: +- applicability_condition: '' + display_name: Clinical + header: '' + is_questionnaire: false + name: BaselineClinical + position: 3 + questionnaire_display_name: '' + questionnaire_questions: '' + sections: + - allow_multiple: false + code: BASELINECLINICAL + display_name: Baseline Clinical Factors + elements: + - LATERAL + - FIRSTBC + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: CLINDISEASESTAGE + display_name: Clinical Disease Stage + elements: + - TNMCT + - TNMCN + - TNMCM + - BCCLINICALCANCERSTAGE + extra: null + questionnaire_display_name: '' + questionnaire_help: '' +- applicability_condition: '' + display_name: Baseline PROMS + header: |- + We are interested in some things about you and your health. Please answer all of + the questions yourself by selecting the answer that best applies to you. There are + no "right" or "wrong" answers. The information that you provide will remain strictly + confidential. + is_questionnaire: false + name: BaselinePromsBC + position: 2 + questionnaire_display_name: '' + questionnaire_questions: '' + sections: + - allow_multiple: false + code: SurveyInformation + display_name: Survey Information + elements: + - COLLECTIONDATE + extra: null + questionnaire_display_name: Survey Information + questionnaire_help: '' + - allow_multiple: false + code: DEMOGRAPHICS + display_name: Demographic Factors + elements: + - ETNIC + - public_private + - EDUCATION + - MARITAL + - MENOPAUSE + - COMORB + - HEIGHTCLIN + - WEIGHTCLIN + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: ADLS + display_name: Activities of daily living + elements: + - EORTCQLQC30_Q01 + - EORTCQLQC30_Q02 + - EORTCQLQC30_Q03 + - EORTCQLQC30_Q04 + - EORTCQLQC30_Q05 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: OverallHealth + display_name: Overall health (during the past week) + elements: + - EORTCQLQC30_Q29 + - EORTCQLQC30_Q06 + - EORTCQLQC30_Q07 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: Pain + display_name: Pain (during the last week) + elements: + - EORTCQLQC30_Q09 + - FACTES_Q01 + - EORTCQLQC30_Q19 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: Symptoms + display_name: Symptoms (during the past week) + elements: + - EORTCQLQC30_Q08 + - EORTCQLQC30_Q10 + - EORTCQLQC30_Q11 + - EORTCQLQC30_Q12 + - EORTCQLQC30_Q13 + - EORTCQLQC30_Q14 + - EORTCQLQC30_Q15 + - EORTCQLQC30_Q16 + - EORTCQLQC30_Q17 + - EORTCQLQC30_Q18 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: PhysicalCondition + display_name: Physical Condition (during the past week) + elements: + - EORTCQLQC30_Q26 + - EORTCQLQC30_Q27 + - EORTCQLQC30_Q28 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: QoL + display_name: Quality of life (during the past week) + elements: + - EORTCQLQC30_Q30 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: MentalHealth + display_name: Mental health (during the past week) + elements: + - EORTCQLQC30_Q20 + - EORTCQLQC30_Q21 + - EORTCQLQC30_Q22 + - EORTCQLQC30_Q23 + - EORTCQLQC30_Q24 + - EORTCQLQC30_Q25 + - EORTCQLQBR23_Q43 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: BodyImage1Pre + display_name: Body Image (during the past week) + elements: + - EORTCQLQBR23_Q39 + - EORTCQLQBR23_Q40 + - EORTCQLQBR23_Q41 + - EORTCQLQBR23_Q42 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: BodyImage2Pre + display_name: 'Body Image 2 (during the past week) - How satisfied or dissatisfied + have you been with:' + elements: + - BREASTQMCRB_Q01 + - BREASTQMCRB_Q02 + - BREASTQMCRB_Q03 + - BREASTQMCRB_Q04 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsSurg + display_name: Side effects - Surgical (during the past week) + elements: + - EORTCQLQBR23_Q47 + - EORTCQLQBR23_Q48 + - EORTCQLQBR23_Q49 + - EORTCQLQBR23_Q50 + - EORTCQLQBR23_Q51 + - EORTCQLQBR23_Q52 + - EORTCQLQBR23_Q53 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsAdjuvant + display_name: Side effects - Adjuvant treatment (during the past week) + elements: + - EORTCQLQBR23_Q31 + - EORTCQLQBR23_Q32 + - EORTCQLQBR23_Q33 + - EORTCQLQBR23_Q34 + - EORTCQLQBR23_Q35 + - EORTCQLQBR23_Q36 + - EORTCQLQBR23_Q37 + - EORTCQLQBR23_Q38 + - EORTC_QLQ_LMC21 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsGynae + display_name: Side effects - Gynaecological (during the past week) + elements: + - FACTES_Q02 + - FACTES_Q03 + - FACTES_Q04 + - FACTES_Q05 + - FACTES_Q06 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SexualActivity + display_name: Sexual activity (during the past four weeks) + elements: + - EORTCQLQBR23_Q44 + - EORTCQLQBR23_Q45 + - EORTCQLQBR23_Q46 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: EQ_5D + display_name: Under each heading, please tap the ONE box that best describes your + health TODAY + elements: + - EQ_Mobility + - EQ_Selfcare + - EQ_UsualActivities + - EQ_Pain_Discomfort + - EQ_Anxiety_Depress + - EQ_Health_Rate + extra: null + questionnaire_display_name: '' + questionnaire_help: '' +- applicability_condition: '' + display_name: Follow up PROMS - 6 months + header: '' + is_questionnaire: false + name: FollowUpPROMS6months + position: 7 + questionnaire_display_name: '' + questionnaire_questions: '' + sections: + - allow_multiple: false + code: SurveyInformation + display_name: Survey Information + elements: + - COLLECTIONDATE + extra: null + questionnaire_display_name: Survey Information + questionnaire_help: '' + - allow_multiple: false + code: PATIENTREPORTRX + display_name: Patient reported treatment + elements: + - BREASTQ_SURG + - SURGERYPATIENT + - SURGERYDATEPATIENT + - SYSTPATIENT + - SYSTDATEPATIENT + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: ADLS + display_name: Activities of daily living + elements: + - EORTCQLQC30_Q01 + - EORTCQLQC30_Q02 + - EORTCQLQC30_Q03 + - EORTCQLQC30_Q04 + - EORTCQLQC30_Q05 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: OverallHealth + display_name: Overall health (during the past week) + elements: + - EORTCQLQC30_Q29 + - EORTCQLQC30_Q06 + - EORTCQLQC30_Q07 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: Pain + display_name: Pain (during the last week) + elements: + - EORTCQLQC30_Q09 + - FACTES_Q01 + - EORTCQLQC30_Q19 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: Symptoms + display_name: Symptoms (during the past week) + elements: + - EORTCQLQC30_Q08 + - EORTCQLQC30_Q10 + - EORTCQLQC30_Q11 + - EORTCQLQC30_Q12 + - EORTCQLQC30_Q13 + - EORTCQLQC30_Q14 + - EORTCQLQC30_Q15 + - EORTCQLQC30_Q16 + - EORTCQLQC30_Q17 + - EORTCQLQC30_Q18 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: PhysicalCondition + display_name: Physical Condition (during the past week) + elements: + - EORTCQLQC30_Q26 + - EORTCQLQC30_Q27 + - EORTCQLQC30_Q28 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: QoL + display_name: Quality of life (during the past week) + elements: + - EORTCQLQC30_Q30 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: MentalHealth + display_name: Mental health (during the past week) + elements: + - EORTCQLQC30_Q20 + - EORTCQLQC30_Q21 + - EORTCQLQC30_Q22 + - EORTCQLQC30_Q23 + - EORTCQLQC30_Q24 + - EORTCQLQC30_Q25 + - EORTCQLQBR23_Q43 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: BodyImage1Pre + display_name: Body Image (during the past week) + elements: + - EORTCQLQBR23_Q39 + - EORTCQLQBR23_Q40 + - EORTCQLQBR23_Q41 + - EORTCQLQBR23_Q42 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsSurg + display_name: Side effects - Surgical (during the past week) + elements: + - EORTCQLQBR23_Q47 + - EORTCQLQBR23_Q48 + - EORTCQLQBR23_Q49 + - EORTCQLQBR23_Q50 + - EORTCQLQBR23_Q51 + - EORTCQLQBR23_Q52 + - EORTCQLQBR23_Q53 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsAdjuvant + display_name: Side effects - Adjuvant treatment (during the past week) + elements: + - EORTCQLQBR23_Q31 + - EORTCQLQBR23_Q32 + - EORTCQLQBR23_Q33 + - EORTCQLQBR23_Q34 + - EORTCQLQBR23_Q35 + - EORTCQLQBR23_Q36 + - EORTCQLQBR23_Q37 + - EORTCQLQBR23_Q38 + - EORTC_QLQ_LMC21 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsGynae + display_name: Side effects - Gynaecological (during the past week) + elements: + - FACTES_Q02 + - FACTES_Q03 + - FACTES_Q04 + - FACTES_Q05 + - FACTES_Q06 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SexualActivity + display_name: Sexual activity (during the past four weeks) + elements: + - EORTCQLQBR23_Q44 + - EORTCQLQBR23_Q45 + - EORTCQLQBR23_Q46 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: EQ_5D + display_name: Under each heading, please tap the ONE box that best describes your + health TODAY + elements: + - EQ_Mobility + - EQ_Selfcare + - EQ_UsualActivities + - EQ_Pain_Discomfort + - EQ_Anxiety_Depress + - EQ_Health_Rate + extra: null + questionnaire_display_name: '' + questionnaire_help: '' +- applicability_condition: '' + display_name: Follow up PROMS - Years 3 - 10 + header: '' + is_questionnaire: false + name: FUpPROMS3_10Years + position: 10 + questionnaire_display_name: '' + questionnaire_questions: '' + sections: + - allow_multiple: false + code: SurveyInformation + display_name: Survey Information + elements: + - COLLECTIONDATE + extra: null + questionnaire_display_name: Survey Information + questionnaire_help: '' + - allow_multiple: false + code: PATIENTREPORTRX + display_name: Patient reported treatment + elements: + - BREASTQ_SURG + - SURGERYPATIENT + - SURGERYDATEPATIENT + - SYSTPATIENT + - SYSTDATEPATIENT + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: ADLS + display_name: Activities of daily living + elements: + - EORTCQLQC30_Q01 + - EORTCQLQC30_Q02 + - EORTCQLQC30_Q03 + - EORTCQLQC30_Q04 + - EORTCQLQC30_Q05 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: OverallHealth + display_name: Overall health (during the past week) + elements: + - EORTCQLQC30_Q29 + - EORTCQLQC30_Q06 + - EORTCQLQC30_Q07 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: Pain + display_name: Pain (during the last week) + elements: + - EORTCQLQC30_Q09 + - FACTES_Q01 + - EORTCQLQC30_Q19 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: Symptoms + display_name: Symptoms (during the past week) + elements: + - EORTCQLQC30_Q08 + - EORTCQLQC30_Q10 + - EORTCQLQC30_Q11 + - EORTCQLQC30_Q12 + - EORTCQLQC30_Q13 + - EORTCQLQC30_Q14 + - EORTCQLQC30_Q15 + - EORTCQLQC30_Q16 + - EORTCQLQC30_Q17 + - EORTCQLQC30_Q18 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: PhysicalCondition + display_name: Physical Condition (during the past week) + elements: + - EORTCQLQC30_Q26 + - EORTCQLQC30_Q27 + - EORTCQLQC30_Q28 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: QoL + display_name: Quality of life (during the past week) + elements: + - EORTCQLQC30_Q30 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: MentalHealth + display_name: Mental health (during the past week) + elements: + - EORTCQLQC30_Q20 + - EORTCQLQC30_Q21 + - EORTCQLQC30_Q22 + - EORTCQLQC30_Q23 + - EORTCQLQC30_Q24 + - EORTCQLQC30_Q25 + - EORTCQLQBR23_Q43 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: BodyImage1Pre + display_name: Body Image (during the past week) + elements: + - EORTCQLQBR23_Q39 + - EORTCQLQBR23_Q40 + - EORTCQLQBR23_Q41 + - EORTCQLQBR23_Q42 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsSurg + display_name: Side effects - Surgical (during the past week) + elements: + - EORTCQLQBR23_Q47 + - EORTCQLQBR23_Q48 + - EORTCQLQBR23_Q49 + - EORTCQLQBR23_Q50 + - EORTCQLQBR23_Q51 + - EORTCQLQBR23_Q52 + - EORTCQLQBR23_Q53 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsAdjuvant + display_name: Side effects - Adjuvant treatment (during the past week) + elements: + - EORTCQLQBR23_Q31 + - EORTCQLQBR23_Q32 + - EORTCQLQBR23_Q33 + - EORTCQLQBR23_Q34 + - EORTCQLQBR23_Q35 + - EORTCQLQBR23_Q36 + - EORTCQLQBR23_Q37 + - EORTCQLQBR23_Q38 + - EORTC_QLQ_LMC21 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsGynae + display_name: Side effects - Gynaecological (during the past week) + elements: + - FACTES_Q02 + - FACTES_Q03 + - FACTES_Q04 + - FACTES_Q05 + - FACTES_Q06 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SexualActivity + display_name: Sexual activity (during the past four weeks) + elements: + - EORTCQLQBR23_Q44 + - EORTCQLQBR23_Q45 + - EORTCQLQBR23_Q46 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: EQ_5D + display_name: Under each heading, please tap the ONE box that best describes your + health TODAY + elements: + - EQ_Mobility + - EQ_Selfcare + - EQ_UsualActivities + - EQ_Pain_Discomfort + - EQ_Anxiety_Depress + - EQ_Health_Rate + extra: null + questionnaire_display_name: '' + questionnaire_help: '' +- applicability_condition: '' + display_name: Follow up PROMS - Year 1 + header: '' + is_questionnaire: false + name: FUpPROMSYr1 + position: 8 + questionnaire_display_name: '' + questionnaire_questions: '' + sections: + - allow_multiple: false + code: SurveyInformation + display_name: Survey Information + elements: + - COLLECTIONDATE + extra: null + questionnaire_display_name: Survey Information + questionnaire_help: '' + - allow_multiple: false + code: PATIENTREPORTRX + display_name: Patient reported treatment + elements: + - BREASTQ_SURG + - SURGERYPATIENT + - SURGERYDATEPATIENT + - SYSTPATIENT + - SYSTDATEPATIENT + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: ADLS + display_name: Activities of daily living + elements: + - EORTCQLQC30_Q01 + - EORTCQLQC30_Q02 + - EORTCQLQC30_Q03 + - EORTCQLQC30_Q04 + - EORTCQLQC30_Q05 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: OverallHealth + display_name: Overall health (during the past week) + elements: + - EORTCQLQC30_Q29 + - EORTCQLQC30_Q06 + - EORTCQLQC30_Q07 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: Pain + display_name: Pain (during the last week) + elements: + - EORTCQLQC30_Q09 + - FACTES_Q01 + - EORTCQLQC30_Q19 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: Symptoms + display_name: Symptoms (during the past week) + elements: + - EORTCQLQC30_Q08 + - EORTCQLQC30_Q10 + - EORTCQLQC30_Q11 + - EORTCQLQC30_Q12 + - EORTCQLQC30_Q13 + - EORTCQLQC30_Q14 + - EORTCQLQC30_Q15 + - EORTCQLQC30_Q16 + - EORTCQLQC30_Q17 + - EORTCQLQC30_Q18 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: PhysicalCondition + display_name: Physical Condition (during the past week) + elements: + - EORTCQLQC30_Q26 + - EORTCQLQC30_Q27 + - EORTCQLQC30_Q28 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: QoL + display_name: Quality of life (during the past week) + elements: + - EORTCQLQC30_Q30 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: MentalHealth + display_name: Mental health (during the past week) + elements: + - EORTCQLQC30_Q20 + - EORTCQLQC30_Q21 + - EORTCQLQC30_Q22 + - EORTCQLQC30_Q23 + - EORTCQLQC30_Q24 + - EORTCQLQC30_Q25 + - EORTCQLQBR23_Q43 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: BodyImage1Pre + display_name: Body Image (during the past week) + elements: + - EORTCQLQBR23_Q39 + - EORTCQLQBR23_Q40 + - EORTCQLQBR23_Q41 + - EORTCQLQBR23_Q42 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsSurg + display_name: Side effects - Surgical (during the past week) + elements: + - EORTCQLQBR23_Q47 + - EORTCQLQBR23_Q48 + - EORTCQLQBR23_Q49 + - EORTCQLQBR23_Q50 + - EORTCQLQBR23_Q51 + - EORTCQLQBR23_Q52 + - EORTCQLQBR23_Q53 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsAdjuvant + display_name: Side effects - Adjuvant treatment (during the past week) + elements: + - EORTCQLQBR23_Q31 + - EORTCQLQBR23_Q32 + - EORTCQLQBR23_Q33 + - EORTCQLQBR23_Q34 + - EORTCQLQBR23_Q35 + - EORTCQLQBR23_Q36 + - EORTCQLQBR23_Q37 + - EORTCQLQBR23_Q38 + - EORTC_QLQ_LMC21 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsGynae + display_name: Side effects - Gynaecological (during the past week) + elements: + - FACTES_Q02 + - FACTES_Q03 + - FACTES_Q04 + - FACTES_Q05 + - FACTES_Q06 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SexualActivity + display_name: Sexual activity (during the past four weeks) + elements: + - EORTCQLQBR23_Q44 + - EORTCQLQBR23_Q45 + - EORTCQLQBR23_Q46 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: EQ_5D + display_name: Under each heading, please tap the ONE box that best describes your + health TODAY + elements: + - EQ_Mobility + - EQ_Selfcare + - EQ_UsualActivities + - EQ_Pain_Discomfort + - EQ_Anxiety_Depress + - EQ_Health_Rate + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: BREASTQBCTP + display_name: 'BREAST CONSERVING SURGERY - With your breasts in mind, in the past + week, how SATISFIED OR DISSATISFIED have you been with:' + elements: + - BREASTQBCTP_Q01 + - BREASTQBCTP_Q02 + - BREASTQBCTP_Q03 + - BREASTQBCTP_Q04 + - BREASTQBCTP_Q05 + - BREASTQBCTP_Q06 + - BREASTQBCTP_Q07 + - BREASTQBCTP_Q08 + - BREASTQBCTP_Q09 + - BREASTQBCTP_Q10 + - BREASTQBCTP_Q11 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: BREASTQMASTP + display_name: 'MASTECTOMY - With your breast area in mind, in the past week, how + SATISFIED OR DISSATISFIED have you been with:' + elements: + - BREASTQMASTP_Q01 + - BREASTQMASTP_Q02 + - BREASTQMASTP_Q03 + - BREASTQMASTP_Q04 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: BREASTQRECP + display_name: 'RECONSTRUCTION - With your breasts in mind, in the past week, how + SATISFIED OR DISSATISFIED have you been with:' + elements: + - BREASTQRECP_Q01 + - BREASTQRECP_Q02 + - BREASTQRECP_Q03 + - BREASTQRECP_Q04 + - BREASTQRECP_Q05 + - BREASTQRECP_Q06 + - BREASTQRECP_Q07 + - BREASTQRECP_Q08 + - BREASTQRECP_Q09 + - BREASTQRECP_Q10 + - BREASTQRECP_Q11 + - BREASTQRECP_Q12 + - BREASTQRECP_Q13 + - BREASTQRECP_Q14 + - BREASTQRECP_Q15 + - BREASTQRECP_Q16 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' +- applicability_condition: '' + display_name: Follow up PROMS - Year 2 + header: '' + is_questionnaire: false + name: FUpPROMSYr2 + position: 9 + questionnaire_display_name: '' + questionnaire_questions: '' + sections: + - allow_multiple: false + code: SurveyInformation + display_name: Survey Information + elements: + - COLLECTIONDATE + extra: null + questionnaire_display_name: Survey Information + questionnaire_help: '' + - allow_multiple: false + code: PATIENTREPORTRX + display_name: Patient reported treatment + elements: + - BREASTQ_SURG + - SURGERYPATIENT + - SURGERYDATEPATIENT + - SYSTPATIENT + - SYSTDATEPATIENT + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: ADLS + display_name: Activities of daily living + elements: + - EORTCQLQC30_Q01 + - EORTCQLQC30_Q02 + - EORTCQLQC30_Q03 + - EORTCQLQC30_Q04 + - EORTCQLQC30_Q05 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: OverallHealth + display_name: Overall health (during the past week) + elements: + - EORTCQLQC30_Q29 + - EORTCQLQC30_Q06 + - EORTCQLQC30_Q07 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: Pain + display_name: Pain (during the last week) + elements: + - EORTCQLQC30_Q09 + - FACTES_Q01 + - EORTCQLQC30_Q19 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: Symptoms + display_name: Symptoms (during the past week) + elements: + - EORTCQLQC30_Q08 + - EORTCQLQC30_Q10 + - EORTCQLQC30_Q11 + - EORTCQLQC30_Q12 + - EORTCQLQC30_Q13 + - EORTCQLQC30_Q14 + - EORTCQLQC30_Q15 + - EORTCQLQC30_Q16 + - EORTCQLQC30_Q17 + - EORTCQLQC30_Q18 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: PhysicalCondition + display_name: Physical Condition (during the past week) + elements: + - EORTCQLQC30_Q26 + - EORTCQLQC30_Q27 + - EORTCQLQC30_Q28 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: QoL + display_name: Quality of life (during the past week) + elements: + - EORTCQLQC30_Q30 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: MentalHealth + display_name: Mental health (during the past week) + elements: + - EORTCQLQC30_Q20 + - EORTCQLQC30_Q21 + - EORTCQLQC30_Q22 + - EORTCQLQC30_Q23 + - EORTCQLQC30_Q24 + - EORTCQLQC30_Q25 + - EORTCQLQBR23_Q43 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: BodyImage1Pre + display_name: Body Image (during the past week) + elements: + - EORTCQLQBR23_Q39 + - EORTCQLQBR23_Q40 + - EORTCQLQBR23_Q41 + - EORTCQLQBR23_Q42 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsSurg + display_name: Side effects - Surgical (during the past week) + elements: + - EORTCQLQBR23_Q47 + - EORTCQLQBR23_Q48 + - EORTCQLQBR23_Q49 + - EORTCQLQBR23_Q50 + - EORTCQLQBR23_Q51 + - EORTCQLQBR23_Q52 + - EORTCQLQBR23_Q53 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsAdjuvant + display_name: Side effects - Adjuvant treatment (during the past week) + elements: + - EORTCQLQBR23_Q31 + - EORTCQLQBR23_Q32 + - EORTCQLQBR23_Q33 + - EORTCQLQBR23_Q34 + - EORTCQLQBR23_Q35 + - EORTCQLQBR23_Q36 + - EORTCQLQBR23_Q37 + - EORTCQLQBR23_Q38 + - EORTC_QLQ_LMC21 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SideEffectsGynae + display_name: Side effects - Gynaecological (during the past week) + elements: + - FACTES_Q02 + - FACTES_Q03 + - FACTES_Q04 + - FACTES_Q05 + - FACTES_Q06 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: SexualActivity + display_name: Sexual activity (during the past four weeks) + elements: + - EORTCQLQBR23_Q44 + - EORTCQLQBR23_Q45 + - EORTCQLQBR23_Q46 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: EQ_5D + display_name: Under each heading, please tap the ONE box that best describes your + health TODAY + elements: + - EQ_Mobility + - EQ_Selfcare + - EQ_UsualActivities + - EQ_Pain_Discomfort + - EQ_Anxiety_Depress + - EQ_Health_Rate + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: BREASTQBCTP + display_name: 'BREAST CONSERVING SURGERY - With your breasts in mind, in the past + week, how SATISFIED OR DISSATISFIED have you been with:' + elements: + - BREASTQBCTP_Q01 + - BREASTQBCTP_Q02 + - BREASTQBCTP_Q03 + - BREASTQBCTP_Q04 + - BREASTQBCTP_Q05 + - BREASTQBCTP_Q06 + - BREASTQBCTP_Q07 + - BREASTQBCTP_Q08 + - BREASTQBCTP_Q09 + - BREASTQBCTP_Q10 + - BREASTQBCTP_Q11 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: BREASTQMASTP + display_name: 'MASTECTOMY - With your breast area in mind, in the past week, how + SATISFIED OR DISSATISFIED have you been with:' + elements: + - BREASTQMASTP_Q01 + - BREASTQMASTP_Q02 + - BREASTQMASTP_Q03 + - BREASTQMASTP_Q04 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: BREASTQRECP + display_name: 'RECONSTRUCTION - With your breasts in mind, in the past week, how + SATISFIED OR DISSATISFIED have you been with:' + elements: + - BREASTQRECP_Q01 + - BREASTQRECP_Q02 + - BREASTQRECP_Q03 + - BREASTQRECP_Q04 + - BREASTQRECP_Q05 + - BREASTQRECP_Q06 + - BREASTQRECP_Q07 + - BREASTQRECP_Q08 + - BREASTQRECP_Q09 + - BREASTQRECP_Q10 + - BREASTQRECP_Q11 + - BREASTQRECP_Q12 + - BREASTQRECP_Q13 + - BREASTQRECP_Q14 + - BREASTQRECP_Q15 + - BREASTQRECP_Q16 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' +- applicability_condition: '' + display_name: Pathology + header: '' + is_questionnaire: false + name: Pathology + position: 4 + questionnaire_display_name: '' + questionnaire_questions: '' + sections: + - allow_multiple: false + code: BASELINETUMOUR + display_name: Tumour pathology + elements: + - DIAGDATE + - HISTOTYPE + - MUTBC + - GRADEINV + - GRADEDCIS + - SIZEINV + - LYMPHNR + - LYMPHINV + - ERSTATUS + - PRSTATUS + - HER2STATUS + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: PathStage + display_name: Pathological stage + elements: + - TNMPT + - TNMPN + - TNMPM + - BCCANCERSTAGE + extra: null + questionnaire_display_name: '' + questionnaire_help: '' +- applicability_condition: '' + display_name: Patient Information + header: '' + is_questionnaire: false + name: Patientinformation + position: 1 + questionnaire_display_name: '' + questionnaire_questions: '' + sections: + - allow_multiple: false + code: public_private + display_name: Public or private treatment + elements: + - public_private + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: PtIdentifiers1 + display_name: Public Hospital Medical Record Number + elements: + - PMI + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: true + code: PrivHospCodes + display_name: Private Hospital Record + elements: + - PrivHosp + - PrivHospMedRecNo + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: PtIdentifiers2 + display_name: Patient identifiers + elements: + - Medicare + - Ptaddress1 + - Ptaddress2 + - Ptaddress3 + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: true + code: Consultants + display_name: Treating consultants + elements: + - Treating_clinician + - Treatment_speciality + extra: null + questionnaire_display_name: '' + questionnaire_help: '' +- applicability_condition: '' + display_name: Survival + header: '' + is_questionnaire: false + name: Survival + position: 6 + questionnaire_display_name: '' + questionnaire_questions: '' + sections: + - allow_multiple: false + code: Recurrence + display_name: Recurrence + elements: + - RECUR + - RECURMETH + - RECURDATE + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: DEATH + display_name: Death + elements: + - DEATH + - DEATHDATE + - DEATHBC + extra: null + questionnaire_display_name: '' + questionnaire_help: '' +- applicability_condition: '' + display_name: Treatment + header: '' + is_questionnaire: false + name: Treatment + position: 5 + questionnaire_display_name: '' + questionnaire_questions: '' + sections: + - allow_multiple: false + code: TreatmentAll + display_name: Treatment - All patients + elements: + - TREATMENT + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: TreatmentSurgery + display_name: Treatment - Surgery + elements: + - SURGERY + - SURGERYDATE + - SURGERYAX + - SURGERYAXDATE + - SURGERYAX2 + - SURGERYAX2DATE + - REOP + - REOP_RECONSTRUCTION + - REOPDATE + - RECONSTRUCT + - RECONSTRUCTDATE + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: TreatmentRadio + display_name: Treatment - Radiotherapy + elements: + - RADIOTX + - RADIOTXTYPE + - RADIOTXSTARTDATE + - RADIOTXSTOPDATE + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: TreatmentChemo + display_name: Treatment - Chemotherapy + elements: + - CHEMOTX + - CHEMOTXTYPE + - CHEMOTXSTARTDATE + - CHEMOTXSTOPDATE + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: TreatmentHorm + display_name: Treatment - Hormone + elements: + - HORMONTX + - HORMONTXTYPE + - HORMONTXSTARTDATE + - HORMONTXSTOPDATE + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: TreatmentTarg + display_name: Treatment - Targeted + elements: + - TARGETTX + - TARGETTXSTARTDATE + - TARGETTXSTOPDATE + extra: null + questionnaire_display_name: '' + questionnaire_help: '' + - allow_multiple: false + code: DISUTILITY + display_name: Complications + elements: + - COMPLIMPACT + - DEATHBCCOMPL + - COMPLTX + - COMPL + extra: null + questionnaire_display_name: '' + questionnaire_help: '' +forms_allowed_groups: + BaselineClinical: [] + BaselinePromsBC: [] + FUpPROMS3_10Years: [] + FUpPROMSYr1: [] + FUpPROMSYr2: [] + FollowUpPROMS6months: [] + Pathology: [] + Patientinformation: [] + Survival: [] + Treatment: [] +generic_sections: +- allow_multiple: false + code: PatientData + display_name: Personal Information + elements: + - CDEPatientCentre + - CDEPatientFamilyName + - CDEPatientGivenNames + - CDEPatientDateOfBirth + - CDEPatientSex + - CDEPatientHomePhone + - CDEPatientMobilePhone + - CDEPatientEmail + - CDEPatientNextOfKinFamilyName + - CDEPatientNextOfKinGivenNames + - CDEPatientNOKRelationship + - CDEPatientNextOfKinEmail + - CDEPatientNextOfKinAddress + - CDEPatientNextOfKinSuburb + - CDEPatientNextOfKinState + extra: null + questionnaire_display_name: '' + questionnaire_help: '' +- allow_multiple: true + code: PatientDataAddressSection + display_name: Addresses + elements: + - AddressType + - Address + - Country + - State + - SuburbTown + - postcode + extra: null + questionnaire_display_name: '' + questionnaire_help: '' +hl7_mappings: +- event_code: ADR_A19 + event_map: |- + { + "Demographics/family_name": {"path": "PID.F5.R1.C1"}, + "Demographics/given_names": {"path": "PID.F5.R1.C2"}, + "Demographics/umrn": {"path": "PID.F3"}, + "Demographics/date_of_birth": {"path": "PID.F7" , "function": "date"}, + "Demographics/date_of_death": {"path": "PID.F29", "function": "date"}, + "Demographics/place_of_birth": {"path": "PID.F23"}, + "Demographics/country_of_birth": {"path": "PID.F11.R1.C6"}, + "Demographics/ethnic_origin": {"path": "PID.F22.R1.C2"}, + "Demographics/sex": {"path": "PID.F8", "tag": "mapping", "map": {"M": 1, "F": 2, "U": 3, "O": 3, "A": 3, "N": 3}}, + "Patientinformation/PtIdentifiers2/Ptaddress1": {"tag": "search", "path": "PID.F11", "num_components": 12, "select": "C1", "where": {"C7": "R" }}, + "Patientinformation/PtIdentifiers2/Ptaddress2": {"tag": "search", "path": "PID.F11", "num_components": 12, "select": "C3", "where": {"C7": "R" }}, + "Patientinformation/PtIdentifiers2/Ptaddress3": {"tag": "search", "path": "PID.F11", "num_components": 12, "select": "C5", "where": {"C7": "R" }}, + "Demographics/home_phone": { "tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "P", "C3":"T"}}, + "Demographics/mobile_phone": {"tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "P", "C3": "M" }}, + "Demographics/email": {"tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "P", "C3": "E" }}, + "Demographics/work_phone": {"tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "B", "C3": "P" }} + } +- event_code: fallback + event_map: |- + { + "Demographics/family_name": {"path": "PID.F5.R1.C1"}, + "Demographics/given_names": {"path": "PID.F5.R1.C2"}, + "Demographics/umrn": {"path": "PID.F3"}, + "Demographics/date_of_birth": {"path": "PID.F7" , "function": "date"}, + "Demographics/date_of_death": {"path": "PID.F29", "function": "date"}, + "Demographics/place_of_birth": {"path": "PID.F23"}, + "Demographics/country_of_birth": {"path": "PID.F11.R1.C6"}, + "Demographics/ethnic_origin": {"path": "PID.F22.R1.C2"}, + "Demographics/sex": {"path": "PID.F8", "tag": "mapping", "map": {"M": 1, "F": 2, "U": 3, "O": 3, "A": 3, "N": 3}}, + "Patientinformation/PtIdentifiers2/Ptaddress1": {"tag": "search", "path": "PID.F11", "num_components": 12, "select": "C1", "where": {"C7": "R" }}, + "Patientinformation/PtIdentifiers2/Ptaddress2": {"tag": "search", "path": "PID.F11", "num_components": 12, "select": "C3", "where": {"C7": "R" }}, + "Patientinformation/PtIdentifiers2/Ptaddress3": {"tag": "search", "path": "PID.F11", "num_components": 12, "select": "C5", "where": {"C7": "R" }}, + "Demographics/home_phone": { "tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "P", "C3":"T"}}, + "Demographics/mobile_phone": {"tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "P", "C3": "M" }}, + "Demographics/email": {"tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "P", "C3": "E" }}, + "Demographics/work_phone": {"tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "B", "C3": "P" }} + } +- event_code: ADT_A31 + event_map: |- + { + "Demographics/family_name": {"path": "PID.F5.R1.C1"}, + "Demographics/given_names": {"path": "PID.F5.R1.C2"}, + "Demographics/umrn": {"path": "PID.F3"}, + "Demographics/date_of_birth": {"path": "PID.F7" , "function": "date"}, + "Demographics/date_of_death": {"path": "PID.F29", "function": "date"}, + "Demographics/place_of_birth": {"path": "PID.F23"}, + "Demographics/country_of_birth": {"path": "PID.F11.R1.C6"}, + "Demographics/ethnic_origin": {"path": "PID.F22.R1.C2"}, + "Demographics/sex": {"path": "PID.F8", "tag": "mapping", "map": {"M": 1, "F": 2, "U": 3, "O": 3, "A": 3, "N": 3}}, + "Patientinformation/PtIdentifiers2/Ptaddress1": {"tag": "search", "path": "PID.F11", "num_components": 12, "select": "C1", "where": {"C7": "R" }}, + "Patientinformation/PtIdentifiers2/Ptaddress2": {"tag": "search", "path": "PID.F11", "num_components": 12, "select": "C3", "where": {"C7": "R" }}, + "Patientinformation/PtIdentifiers2/Ptaddress3": {"tag": "search", "path": "PID.F11", "num_components": 12, "select": "C5", "where": {"C7": "R" }}, + "Demographics/home_phone": { "tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "P", "C3":"T"}}, + "Demographics/mobile_phone": {"tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "P", "C3": "M" }}, + "Demographics/email": {"tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "P", "C3": "E" }}, + "Demographics/work_phone": {"tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "B", "C3": "P" }} + } +metadata_json: |- + {"menu" : {"Consents": "Consent PROMs"}, + "custom_text": {"consents_blurb":"Consent provided for ongoing receipt of PROMs requests"},"features": ["patient_dashboard","proms_clinical","contexts","proms_adding_disabled","use_new_style_calcs"], + "section_blacklist": ["Next of Kin", "Patient Doctor", "Patient Address"], + "surveys": [ + {"code": "BaselinePROMS", "description": "Baseline PROMS"}, + {"code": "FollowUpPROMSYear1", "description": "Follow up PROMS - Year 1"}, + {"code": "FollowUpPROMSYear2", "description": "Follow up PROMS - Year 2"}, + {"code": "FollowUpPROMSYears3-10", "description": "Follow up PROMS - Years 3 - 10"}, + {"code": "FollowUpPROMS6months", "description": "Follow up PROMS - 6 months"} + ], + "proms_system_url": "https://rdrf.ccgapps.com.au/cicbreastproms", + "preamble_text":"This survey helps us to understand how the care and treatment you are receiving impacts you, from your point of view. The information you provide will help your health team to provide care that better meets your individual needs. What you tell us will also help to improve care for people who undergo medical treatments in the future.","copyright_text":"© EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol Research Foundation | © QLQLMC21 Copyright 2002 EORTC Quality of Life Group. All rights reserved (phase III module) | © Copyright 1996 EORTC Study Group on Quality of Life. All Rights reserved. Version 1.0 | © David Cella, 1987, 1997. All rights reserved | © Copyright 1995 EORTC Quality of Life Group. All rights reserved. Version 3.0 | © QLQLMC21 Copyright 2002 EORTC Quality of Life Group. All rights reserved (phase III module). | © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The University of British Columbia. | © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The University of British Columbia. All rights reserved. | © QLQ-LMC21 Copyright 2002 EORTC Quality of life Group. All rights reserved","consents":{"PROMSConsent":"promsconsent"} + } +name: ICHOM Breast +patient_data_section: {} +pvgs: +- code: AddressType + values: + - code: AddressTypePostal + desc: Postal + position: 2 + questionnaire_value: Postal + value: Postal + - code: AddressTypeHome + desc: Home + position: 1 + questionnaire_value: Home + value: Home +- code: BREASTQ + values: + - code: '4' + desc: Very satisfied + position: 4 + questionnaire_value: null + value: Very satisfied + - code: '3' + desc: Somewhat satisfied + position: 3 + questionnaire_value: null + value: Somewhat satisfied + - code: '2' + desc: Somewhat dissatisified + position: 2 + questionnaire_value: null + value: Somewhat dissatisfied + - code: '1' + desc: Very dissatisified + position: 1 + questionnaire_value: null + value: Very dissatisfied +- code: BREASTQ_SURG + values: + - code: '3' + desc: Mastectomy and reconstruction + position: 3 + questionnaire_value: null + value: Mastectomy and reconstruction + - code: '2' + desc: Mastectomy + position: 2 + questionnaire_value: null + value: Mastectomy + - code: '1' + desc: Breast conserving surgery + position: 1 + questionnaire_value: null + value: Breast conserving surgery + - code: '0' + desc: No surgery + position: 0 + questionnaire_value: null + value: No surgery +- code: CHEMOTX + values: + - code: '0' + desc: Neoadjuvant + position: 1 + questionnaire_value: '' + value: Neoadjuvant + - code: '1' + desc: Adjuvant + position: 2 + questionnaire_value: '' + value: Adjuvant + - code: '999' + desc: Unknown + position: 3 + questionnaire_value: '' + value: Unknown +- code: CHEMOTXTYPE + values: + - code: '999' + desc: Unknown + position: 5 + questionnaire_value: '' + value: Unknown + - code: '3' + desc: Other + position: 4 + questionnaire_value: '' + value: Other + - code: '2' + desc: Platinum containing + position: 3 + questionnaire_value: '' + value: Platinum containing + - code: '1' + desc: Taxane containing + position: 2 + questionnaire_value: '' + value: Taxane containing + - code: '0' + desc: Anthracycline containing + position: 1 + questionnaire_value: '' + value: Anthracycline containing +- code: COMORB + values: + - code: '5' + desc: Diabetes + position: 6 + questionnaire_value: '' + value: Diabetes + - code: '0' + desc: I have no other diseases + position: 1 + questionnaire_value: '' + value: I have no other diseases + - code: '1' + desc: Heart disease (For example, angina, heart attack, or heart failure) + position: 2 + questionnaire_value: '' + value: Heart disease (For example, angina, heart attack, or heart failure) + - code: '2' + desc: High blood pressure + position: 3 + questionnaire_value: '' + value: High blood pressure + - code: '3' + desc: Leg pain when walking due to poor circulation + position: 4 + questionnaire_value: '' + value: Leg pain when walking due to poor circulation + - code: '4' + desc: Lung disease (For example, asthma, chronic bronchitis, or emphysema) + position: 5 + questionnaire_value: '' + value: Lung disease (For example, asthma, chronic bronchitis, or emphysema) + - code: '6' + desc: Kidney disease + position: 7 + questionnaire_value: '' + value: Kidney disease + - code: '7' + desc: Liver disease + position: 8 + questionnaire_value: '' + value: Liver disease + - code: '8' + desc: Problems caused by stroke + position: 9 + questionnaire_value: '' + value: Problems caused by stroke + - code: '9' + desc: Disease of the nervous system (For example, Parkinson's disease or multiple + sclerosis) + position: 10 + questionnaire_value: null + value: Disease of the nervous system (For example, Parkinson's disease or multiple + sclerosis) + - code: '10' + desc: Other cancer (within the last 5 years) + position: 11 + questionnaire_value: '' + value: Other cancer (within the last 5 years) + - code: '11' + desc: Depression + position: 12 + questionnaire_value: '' + value: Depression + - code: '12' + desc: Arthritis + position: 13 + questionnaire_value: '' + value: Arthritis +- code: COMPLIMPACT + values: + - code: '0' + desc: No complication + position: 1 + questionnaire_value: '' + value: No complication + - code: '1' + desc: Complication requiring intervention (surgical, radiological, endoscopic) + position: 2 + questionnaire_value: '' + value: Complication requiring intervention (surgical, radiological, endoscopic) + - code: '2' + desc: Complication leading to prolonged hospitalization ( >14days) + position: 3 + questionnaire_value: '' + value: Complication leading to prolonged hospitalization ( >14days) + - code: '3' + desc: Complication leading to unplanned readmission + position: 4 + questionnaire_value: '' + value: Complication leading to unplanned readmission + - code: '4' + desc: Complication leading to ICU admission + position: 5 + questionnaire_value: '' + value: Complication leading to ICU admission + - code: '5' + desc: Complication leading to discontinuing of treatment + position: 6 + questionnaire_value: '' + value: Complication leading to discontinuing of treatment + - code: '6' + desc: Complication leading to reduced dosing + position: 7 + questionnaire_value: '' + value: Complication leading to reduced dosing + - code: '7' + desc: Complication leading to death + position: 8 + questionnaire_value: '' + value: Complication leading to death + - code: '8' + desc: Complication, but did not result in any of the abovementioned + position: 9 + questionnaire_value: '' + value: Complication, but did not result in any of the abovementioned + - code: '999' + desc: Unknown + position: 10 + questionnaire_value: '' + value: Unknown +- code: COMPLPVG + values: + - code: '2' + desc: Haemorrhage + position: 3 + questionnaire_value: Haemorrhage + value: Haemorrhage + - code: '1' + desc: Seroma/haematoma + position: 2 + questionnaire_value: Seroma/haematoma + value: Seroma/haematoma + - code: '10' + desc: Skin toxicity + position: 11 + questionnaire_value: Skin toxicity + value: Skin toxicity + - code: '9' + desc: Delay wound healing/dehiscence + position: 10 + questionnaire_value: Delay wound healing/dehiscence + value: Delay wound healing/dehiscence + - code: '8' + desc: Nerve damage + position: 9 + questionnaire_value: Nerve damage + value: Nerve damage + - code: '7' + desc: Thromboembolic event + position: 8 + questionnaire_value: Thromboembolic event + value: Thromboembolic event + - code: '6' + desc: Loss of implant + position: 7 + questionnaire_value: Loss of implant + value: Loss of implant + - code: '5' + desc: Total autologous graft loss + position: 6 + questionnaire_value: Total autologous graft loss + value: Total autologous graft loss + - code: '4' + desc: Partial autologous graft loss + position: 5 + questionnaire_value: Partial autologous graft loss + value: Partial autologous graft loss + - code: '3' + desc: Mastectomy skin flap necrosis + position: 4 + questionnaire_value: Mastectomy skin flap necrosis + value: Mastectomy skin flap necrosis + - code: '999' + desc: Unknown + position: 14 + questionnaire_value: Unknown + value: Unknown + - code: '12' + desc: Neutropenic sepsis + position: 13 + questionnaire_value: Neutropenic sepsis + value: Neutropenic sepsis + - code: '11' + desc: Pneumonia + position: 12 + questionnaire_value: Pneumonia + value: Pneumonia + - code: '0' + desc: Wound infection + position: 1 + questionnaire_value: Wound infection + value: Wound infection +- code: ClinicalDistantMetastasisValues + values: + - code: '999' + desc: Unknown + position: 4 + questionnaire_value: null + value: Unknown + - code: '2' + desc: cM1 + position: 3 + questionnaire_value: null + value: cM1 + - code: '1' + desc: cM0 + position: 2 + questionnaire_value: null + value: cM0 + - code: '0' + desc: cMx + position: 1 + questionnaire_value: null + value: cMx +- code: Country + values: + - code: AU + desc: Australia + position: 1 + questionnaire_value: Australia + value: Australia + - code: NZ + desc: New Zealand + position: 2 + questionnaire_value: New Zealand + value: New Zealand +- code: DEATH + values: + - code: '999' + desc: Unknown + position: 999 + questionnaire_value: null + value: Unknown + - code: '1' + desc: 'Yes' + position: 2 + questionnaire_value: null + value: 'Yes' + - code: '0' + desc: 'No' + position: 0 + questionnaire_value: null + value: 'No' +- code: DEATHBC + values: + - code: '999' + desc: Unknown + position: 999 + questionnaire_value: null + value: Unknown + - code: '1' + desc: 'Yes' + position: 1 + questionnaire_value: null + value: 'Yes' + - code: '0' + desc: 'No' + position: 0 + questionnaire_value: null + value: 'No' +- code: EDUCATION + values: + - code: '0' + desc: None + position: 1 + questionnaire_value: '' + value: None + - code: '1' + desc: Primary + position: 2 + questionnaire_value: '' + value: Primary + - code: '2' + desc: Secondary + position: 3 + questionnaire_value: '' + value: Secondary + - code: '3' + desc: Tertiary + position: 4 + questionnaire_value: '' + value: Tertiary +- code: EORTCQLQC30 + values: + - code: '4' + desc: Very much + position: 4 + questionnaire_value: null + value: Very much + - code: '3' + desc: Quite a bit + position: 3 + questionnaire_value: null + value: Quite a bit + - code: '2' + desc: A little + position: 2 + questionnaire_value: null + value: A little + - code: '1' + desc: Not at all + position: 1 + questionnaire_value: null + value: Not at all +- code: EQ_Anxiety_Depress + values: + - code: '1' + desc: I am not anxious or depressed + position: 1 + questionnaire_value: null + value: I am not anxious or depressed + - code: '2' + desc: I am slightly anxious or depressed + position: 2 + questionnaire_value: null + value: I am slightly anxious or depressed + - code: '5' + desc: I am extremely anxious or depressed + position: 5 + questionnaire_value: null + value: I am extremely anxious or depressed + - code: '4' + desc: I am severely anxious or depressed + position: 4 + questionnaire_value: null + value: I am severely anxious or depressed + - code: '3' + desc: I am moderately anxious or depressed + position: 3 + questionnaire_value: null + value: I am moderately anxious or depressed +- code: EQ_Mobility + values: + - code: '1' + desc: I have no problems with walking around + position: 1 + questionnaire_value: null + value: I have no problems with walking around + - code: '2' + desc: I have slight problems with walking around + position: 2 + questionnaire_value: null + value: I have slight problems with walking around + - code: '3' + desc: I have moderate problems with walking around + position: 3 + questionnaire_value: null + value: I have moderate problems with walking around + - code: '4' + desc: I have severe problems with walking around + position: 4 + questionnaire_value: null + value: I have severe problems with walking around + - code: '5' + desc: I am unable to walk around + position: 5 + questionnaire_value: null + value: I am unable to walk around +- code: EQ_Pain_Discomfort + values: + - code: '1' + desc: I have no pain or discomfort + position: 1 + questionnaire_value: null + value: I have no pain or discomfort + - code: '2' + desc: I have slight pain or discomfort + position: 2 + questionnaire_value: null + value: I have slight pain or discomfort + - code: '3' + desc: I have moderate pain or discomfort + position: 3 + questionnaire_value: null + value: I have moderate pain or discomfort + - code: '4' + desc: I have severe pain or discomfort + position: 4 + questionnaire_value: null + value: I have severe pain or discomfort + - code: '5' + desc: I have extreme pain or discomfort + position: 5 + questionnaire_value: null + value: I have extreme pain or discomfort +- code: EQ_Selfcare + values: + - code: '1' + desc: I have no problems with washing or dressing myself + position: 1 + questionnaire_value: null + value: I have no problems with washing or dressing myself + - code: '2' + desc: I have slight problems with washing or dressing myself + position: 2 + questionnaire_value: null + value: I have slight problems with washing or dressing myself + - code: '3' + desc: I have moderate problems with washing or dressing myself + position: 3 + questionnaire_value: null + value: I have moderate problems with washing or dressing myself + - code: '4' + desc: I have severe problems with washing or dressing myself + position: 4 + questionnaire_value: null + value: I have severe problems with washing or dressing myself + - code: '5' + desc: I am unable to wash or dress myself + position: 5 + questionnaire_value: null + value: I am unable to wash or dress myself +- code: EQ_UsualActivities + values: + - code: '1' + desc: I have no problems doing my usual activities + position: 1 + questionnaire_value: null + value: I have no problems doing my usual activities + - code: '2' + desc: I have slight problems doing my usual activities + position: 2 + questionnaire_value: null + value: I have slight problems doing my usual activities + - code: '3' + desc: I have moderate problems doing my usual activities + position: 3 + questionnaire_value: null + value: I have moderate problems doing my usual activities + - code: '4' + desc: I have severe problems doing my usual activities + position: 4 + questionnaire_value: null + value: I have severe problems doing my usual activities + - code: '5' + desc: I am unable to do my usual activities + position: 5 + questionnaire_value: null + value: I am unable to do my usual activities +- code: EthnicOriginBC + values: + - code: '2' + desc: Prefer not to say + position: 3 + questionnaire_value: Prefer not to say + value: Prefer not to say + - code: '1' + desc: ATSI + position: 1 + questionnaire_value: null + value: 'Yes' + - code: '0' + desc: Not ATSI + position: 2 + questionnaire_value: null + value: 'No' +- code: FACTES + values: + - code: '0' + desc: Not at all + position: 1 + questionnaire_value: null + value: Not at all + - code: '1' + desc: A little bit + position: 2 + questionnaire_value: null + value: A little bit + - code: '2' + desc: Somewhat + position: 3 + questionnaire_value: null + value: Somewhat + - code: '3' + desc: Quite a bit + position: 4 + questionnaire_value: null + value: Quite a bit + - code: '4' + desc: Very much + position: 5 + questionnaire_value: null + value: Very much +- code: FIRSTBC + values: + - code: '0' + desc: Primary tumour + position: 1 + questionnaire_value: null + value: Primary tumour + - code: '1' + desc: New ipsilateral + position: 2 + questionnaire_value: '' + value: New ipsilateral + - code: '2' + desc: New contralateral + position: 3 + questionnaire_value: '' + value: New contralateral +- code: GRADEDCIS + values: + - code: '0' + desc: Low + position: 1 + questionnaire_value: '' + value: Low + - code: '1' + desc: Intermediate + position: 2 + questionnaire_value: '' + value: Intermediate + - code: '2' + desc: High + position: 3 + questionnaire_value: '' + value: High + - code: '3' + desc: Not reported + position: 4 + questionnaire_value: '' + value: Not reported +- code: GRADEINV + values: + - code: '0' + desc: Grade 1 + position: 1 + questionnaire_value: '' + value: Grade 1 + - code: '1' + desc: Grade 2 + position: 2 + questionnaire_value: '' + value: Grade 2 + - code: '2' + desc: Grade 3 + position: 3 + questionnaire_value: '' + value: Grade 3 + - code: '3' + desc: Not reported + position: 4 + questionnaire_value: '' + value: Not reported +- code: HER2STATUS + values: + - code: '0' + desc: Negative + position: 1 + questionnaire_value: '' + value: Negative + - code: '1' + desc: Positive + position: 2 + questionnaire_value: '' + value: Positive + - code: '2' + desc: Equivocal + position: 3 + questionnaire_value: '' + value: Equivocal + - code: '3' + desc: Not performed + position: 4 + questionnaire_value: '' + value: Not performed +- code: HISTOTYPE + values: + - code: '999' + desc: Unknown + position: 5 + questionnaire_value: '' + value: Unknown + - code: '3' + desc: Other + position: 4 + questionnaire_value: '' + value: Other + - code: '2' + desc: Invasive lobular carcinoma + position: 3 + questionnaire_value: '' + value: Invasive lobular carcinoma + - code: '1' + desc: Invasive ductal carcinoma + position: 2 + questionnaire_value: '' + value: Invasive ductal carcinoma + - code: '0' + desc: Ductal carcinoma in situ + position: 1 + questionnaire_value: '' + value: Ductal carcinoma in situ +- code: HormoneRxType + values: + - code: '0' + desc: Aromatase inhibitor + position: 1 + questionnaire_value: null + value: Aromatase inhibitor + - code: '1' + desc: Selective estrogen-receptor modulator (e.g. Tamoxifen) + position: 2 + questionnaire_value: null + value: Selective estrogen-receptor modulator (e.g. Tamoxifen) + - code: '2' + desc: Oophorectomy + position: 3 + questionnaire_value: null + value: Oophorectomy + - code: '3' + desc: LHRH agonist + position: 4 + questionnaire_value: null + value: LHRH agonist + - code: '4' + desc: Other + position: 5 + questionnaire_value: null + value: Other + - code: '999' + desc: Unknown + position: 999 + questionnaire_value: null + value: Unknown +- code: ICHOMnyuknown + values: + - code: '0' + desc: 'No' + position: 1 + questionnaire_value: '' + value: 'No' + - code: '1' + desc: 'yes' + position: 2 + questionnaire_value: '' + value: 'Yes' + - code: '999' + desc: Unknown + position: 3 + questionnaire_value: '' + value: Unknown +- code: LATERAL + values: + - code: '0' + desc: Left breast + position: 1 + questionnaire_value: '' + value: Left breast + - code: '1' + desc: Right breast + position: 2 + questionnaire_value: '' + value: Right breast + - code: '2' + desc: Both breasts + position: 3 + questionnaire_value: '' + value: Both breasts +- code: MARITAL + values: + - code: '0' + desc: Never married/partnered + position: 1 + questionnaire_value: '' + value: Never married/partnered + - code: '1' + desc: Married/partnered + position: 2 + questionnaire_value: '' + value: Married/partnered + - code: '2' + desc: Divorced/separated + position: 3 + questionnaire_value: '' + value: Divorced/separated + - code: '3' + desc: Widowed + position: 4 + questionnaire_value: '' + value: Widowed +- code: MENOPAUSE + values: + - code: '2' + desc: I don't know my current menopausal status + position: 3 + questionnaire_value: null + value: I don't know my current menopausal status + - code: '0' + desc: Pre-menopausal + position: 1 + questionnaire_value: null + value: Pre-menopausal + - code: '1' + desc: Post-­menopausal (natural/surgical) + position: 2 + questionnaire_value: null + value: Post-menopausal (haven't had a period in the past 12 months) +- code: MUTBC + values: + - code: '4' + desc: Not tested + position: 5 + questionnaire_value: '' + value: Not tested + - code: '3' + desc: Other mutation + position: 4 + questionnaire_value: '' + value: Other mutation + - code: '2' + desc: BRCA 2 + position: 3 + questionnaire_value: '' + value: BRCA 2 + - code: '1' + desc: BRCA 1 + position: 2 + questionnaire_value: '' + value: BRCA 1 + - code: '0' + desc: No mutation + position: 1 + questionnaire_value: '' + value: No mutation +- code: MeteorSexes + values: + - code: '3' + desc: Indeterminate + position: 3 + questionnaire_value: Indeterminate + value: Indeterminate + - code: '2' + desc: Female + position: 2 + questionnaire_value: Female + value: Female + - code: '1' + desc: Male + position: 1 + questionnaire_value: Male + value: Male +- code: NextOfKinRelationship + values: + - code: Other + desc: Other + position: 3 + questionnaire_value: Other + value: Other + - code: Mother + desc: Mother + position: 2 + questionnaire_value: Mother + value: Mother + - code: Father + desc: Father + position: 1 + questionnaire_value: Father + value: Father +- code: PrivHosp + values: + - code: '2' + desc: SJOG - Subiaco + position: 2 + questionnaire_value: null + value: SJOG - Subiaco + - code: '1' + desc: SJOG - Midland + position: 1 + questionnaire_value: null + value: SJOG - Midland +- code: RADIOTX + values: + - code: '0' + desc: Neoadjuvant + position: 1 + questionnaire_value: '' + value: Neoadjuvant + - code: '1' + desc: Adjuvant + position: 2 + questionnaire_value: '' + value: Adjuvant + - code: '999' + desc: Unknown + position: 3 + questionnaire_value: '' + value: Unknown +- code: RADIOTXTYPE + values: + - code: '10' + desc: Intra-operative radiotherapy (IORT) + position: 5 + questionnaire_value: null + value: Intra-operative radiotherapy (IORT) + - code: '999' + desc: Unknown + position: 12 + questionnaire_value: null + value: Unknown + - code: '9' + desc: Other + position: 11 + questionnaire_value: null + value: Other + - code: '8' + desc: Any metastatic site + position: 10 + questionnaire_value: null + value: Any metastatic site + - code: '7' + desc: Bone metastases + position: 9 + questionnaire_value: null + value: Bone metastases + - code: '6' + desc: Brain metastases + position: 8 + questionnaire_value: null + value: Brain metastases + - code: '5' + desc: Tumor bed boost + position: 7 + questionnaire_value: null + value: Tumour bed boost + - code: '4' + desc: Internal mammary node irradiation + position: 6 + questionnaire_value: null + value: Internal mammary node irradiation + - code: '0' + desc: Breast + position: 1 + questionnaire_value: '' + value: Breast + - code: '1' + desc: Chest wall + position: 2 + questionnaire_value: '' + value: Chest wall + - code: '2' + desc: Axillary nodal irradiation + position: 3 + questionnaire_value: '' + value: Axillary nodal irradiation + - code: '3' + desc: Supraclavicular irradiation + position: 4 + questionnaire_value: '' + value: Supraclavicular irradiation +- code: RECONSTRUCT + values: + - code: '0' + desc: Delayed reconstruction (direct/staged implant) + position: 1 + questionnaire_value: '' + value: Delayed reconstruction (direct/staged implant) + - code: '1' + desc: Delayed reconstruction (autologous) + position: 2 + questionnaire_value: '' + value: Delayed reconstruction (autologous) + - code: '2' + desc: Delayed reconstruction (implant/autologous)3 + position: 3 + questionnaire_value: '' + value: Delayed reconstruction (implant/autologous) + - code: '999' + desc: Unknown + position: 4 + questionnaire_value: '' + value: Unknown +- code: RECURMETHOD + values: + - code: '999' + desc: Unknown + position: 999 + questionnaire_value: null + value: Unknown + - code: '2' + desc: Radiological and histological diagnosis + position: 2 + questionnaire_value: null + value: Radiological and histological diagnosis + - code: '1' + desc: Histological diagnosis + position: 1 + questionnaire_value: null + value: Histological diagnosis + - code: '0' + desc: Radiological diagnosis + position: 0 + questionnaire_value: null + value: Radiological diagnosis +- code: REOP + values: + - code: '999' + desc: Unknown + position: 999 + questionnaire_value: null + value: Unknown + - code: '2' + desc: Yes, mastectomy + position: 5 + questionnaire_value: null + value: Yes, mastectomy + - code: '1' + desc: Yes, breast conserving surgery + position: 2 + questionnaire_value: null + value: Yes, breast conserving surgery + - code: '0' + desc: 'No' + position: 1 + questionnaire_value: '' + value: 'No' + - code: '3' + desc: Yes, breast conserving surgery with mammoplasty + position: 4 + questionnaire_value: null + value: Yes, breast conserving surgery with mammoplasty + - code: '4' + desc: Yes, mastectomy with immediate reconstruction + position: 6 + questionnaire_value: null + value: Yes, mastectomy with immediate reconstruction +- code: REOP_RECONSTRUCTION_VALUES + values: + - code: '999' + desc: Unknown + position: 999 + questionnaire_value: null + value: Unknown + - code: '3' + desc: Both + position: 3 + questionnaire_value: null + value: Both + - code: '2' + desc: Autologous + position: 2 + questionnaire_value: null + value: Autologous + - code: '1' + desc: Direct/staged implant + position: 1 + questionnaire_value: null + value: Direct/staged implant +- code: STATUS + values: + - code: '0' + desc: 'No' + position: 1 + questionnaire_value: '' + value: 'No' + - code: '1' + desc: 'Yes' + position: 2 + questionnaire_value: '' + value: 'Yes' + - code: '2' + desc: Not performed + position: 3 + questionnaire_value: '' + value: Not performed + - code: '999' + desc: Unknown + position: 4 + questionnaire_value: '' + value: Unknown +- code: SURGERY + values: + - code: '6' + desc: BCS with pedicle flap + position: 7 + questionnaire_value: null + value: BCS with pedicle flap + - code: '0' + desc: Breast conserving surgery (BCS) + position: 1 + questionnaire_value: '' + value: Breast conserving surgery (BCS) + - code: '1' + desc: BCS with mammoplasty + position: 2 + questionnaire_value: '' + value: BCS with mammoplasty + - code: '2' + desc: Mastectomy without immediate reconstruction + position: 3 + questionnaire_value: '' + value: Mastectomy without immediate reconstruction + - code: '3' + desc: Mastectomy with immediate reconstruction (direct/staged implant) + position: 4 + questionnaire_value: '' + value: Mastectomy with immediate reconstruction (direct/staged implant) + - code: '4' + desc: Mastectomy with immediate reconstruction (autologous) + position: 5 + questionnaire_value: '' + value: Mastectomy with immediate reconstruction (autologous) + - code: '5' + desc: Mastectomy with immediate reconstruction (direct/staged implant and autologous) + position: 6 + questionnaire_value: '' + value: Mastectomy with immediate reconstruction (direct/staged implant and autologous) + - code: '999' + desc: Unknown + position: 999 + questionnaire_value: null + value: Unknown +- code: SURGERYAX + values: + - code: '999' + desc: Unknown + position: 999 + questionnaire_value: null + value: Unknown + - code: '2' + desc: Axillary clearance + position: 3 + questionnaire_value: '' + value: Axillary clearance + - code: '1' + desc: Axillary sampling + position: 2 + questionnaire_value: '' + value: Axillary sampling + - code: '0' + desc: Sentinel lymph node biopsy + position: 1 + questionnaire_value: '' + value: Sentinel lymph node biopsy + - code: '3' + desc: Targeted axillary dissection (TAD) + position: 4 + questionnaire_value: null + value: Targeted axillary dissection (TAD) +- code: SURGERYPATIENT + values: + - code: '999' + desc: Unknown + position: 5 + questionnaire_value: '' + value: Unknown + - code: '3' + desc: Axillary dissection + position: 4 + questionnaire_value: '' + value: Axillary dissection + - code: '2' + desc: Mastectomy + position: 3 + questionnaire_value: '' + value: Mastectomy + - code: '1' + desc: Breast reconstruction surgery + position: 2 + questionnaire_value: null + value: Breast conserving surgery + - code: '0' + desc: 'No' + position: 1 + questionnaire_value: '' + value: 'No' +- code: SevenScale + values: + - code: '1' + desc: '1' + position: 1 + questionnaire_value: null + value: '1' + - code: '2' + desc: '2' + position: 2 + questionnaire_value: null + value: '2' + - code: '3' + desc: '3' + position: 3 + questionnaire_value: null + value: '3' + - code: '4' + desc: '4' + position: 4 + questionnaire_value: null + value: '4' + - code: '5' + desc: '5' + position: 5 + questionnaire_value: null + value: '5' + - code: '6' + desc: '6' + position: 6 + questionnaire_value: null + value: '6' + - code: '7' + desc: '7' + position: 7 + questionnaire_value: null + value: '7' +- code: State + values: + - code: VIC + desc: Victoria + position: null + questionnaire_value: null + value: Victoria + - code: NT + desc: Northern Territory + position: null + questionnaire_value: null + value: Northern Territory + - code: NSW + desc: New South Wales + position: null + questionnaire_value: null + value: New South Wales + - code: TAS + desc: Tasmania + position: null + questionnaire_value: null + value: Tasmania + - code: ACT + desc: Australian Capital Territory + position: null + questionnaire_value: null + value: Australian Capital Territory + - code: SA + desc: South Australia + position: null + questionnaire_value: null + value: South Australia + - code: WA + desc: Western Australia + position: null + questionnaire_value: null + value: Western Australia + - code: QLD + desc: Queensland + position: null + questionnaire_value: null + value: Queensland +- code: SystemicPatient + values: + - code: '0' + desc: No, never had systemic treatment + position: 0 + questionnaire_value: null + value: No, never had systemic treatment + - code: '1' + desc: Yes, but the treatment has stopped + position: 1 + questionnaire_value: null + value: Yes, but the treatment has stopped + - code: '2' + desc: Yes, on chemotherapy + position: 2 + questionnaire_value: null + value: Yes, on chemotherapy + - code: '3' + desc: Yes, on targeted therapy, eg. herceptin + position: 3 + questionnaire_value: null + value: Yes, on targeted therapy, eg. herceptin + - code: '4' + desc: Yes, on hormone therapy + position: 4 + questionnaire_value: null + value: Yes, on hormone therapy + - code: '999' + desc: Unknown + position: 999 + questionnaire_value: null + value: Unknown +- code: TARGETTX + values: + - code: '0' + desc: Her-2 targeting therapy + position: 1 + questionnaire_value: null + value: Her-2 targeting therapy + - code: '1' + desc: Other + position: 2 + questionnaire_value: '' + value: Other + - code: '999' + desc: Unknown + position: 3 + questionnaire_value: '' + value: Unknown +- code: TNMCN + values: + - code: '999' + desc: Unknown + position: null + questionnaire_value: '' + value: Unknown + - code: '4' + desc: cN3 + position: 5 + questionnaire_value: '' + value: cN3 + - code: '3' + desc: 'N2: there are tumor cells in 4 or more regional lymph nodes' + position: 4 + questionnaire_value: '' + value: cN2 + - code: '2' + desc: 'N1: there are tumor cells in up to 3 regional lymph nodes' + position: 3 + questionnaire_value: '' + value: cN1 + - code: '1' + desc: 'N0: no lymph nodes contain tumor cells' + position: 2 + questionnaire_value: '' + value: cN0 + - code: '0' + desc: 'NX: lymph nodes were not assessed' + position: 1 + questionnaire_value: '' + value: cNX +- code: TNMCT + values: + - code: '2' + desc: cTis + position: 3 + questionnaire_value: null + value: cTis + - code: '999' + desc: Unknown + position: 8 + questionnaire_value: '' + value: Unknown + - code: '6' + desc: 'T4: tumor has penetrated through the serosa and the peritoneal surface.' + position: 7 + questionnaire_value: '' + value: cT4 + - code: '5' + desc: 'T3: tumor has grown into (but not through) the serosa' + position: 6 + questionnaire_value: '' + value: cT3 + - code: '4' + desc: 'T2: tumor has grown into (but not through) the muscularis propria' + position: 5 + questionnaire_value: '' + value: cT2 + - code: '3' + desc: 'T1: tumor confined to the submucosa' + position: 4 + questionnaire_value: '' + value: cT1 + - code: '1' + desc: 'T0: no evidence of primary tumor' + position: 2 + questionnaire_value: '' + value: cT0 + - code: '0' + desc: 'TX: primary tumor cannot be assessed' + position: 1 + questionnaire_value: '' + value: cTX +- code: TNMPM + values: + - code: '0' + desc: 'Mx: presence of metastasis cannot be assessed' + position: 1 + questionnaire_value: null + value: pMx + - code: '1' + desc: 'M0: no metastasis to distant organs' + position: 2 + questionnaire_value: null + value: pM0 + - code: '2' + desc: 'M1: metastasis to distant organs' + position: 3 + questionnaire_value: null + value: pM1 + - code: '999' + desc: Unknown + position: 4 + questionnaire_value: '' + value: Unknown +- code: TNMPN + values: + - code: '999' + desc: Unknown + position: 6 + questionnaire_value: '' + value: Unknown + - code: '3' + desc: 'N2: there are tumor cells in 4 or more regional lymph nodes' + position: 4 + questionnaire_value: '' + value: pN2 + - code: '4' + desc: pN3 + position: 5 + questionnaire_value: '' + value: pN3 + - code: '2' + desc: 'N1: there are tumor cells in up to 3 regional lymph nodes' + position: 3 + questionnaire_value: '' + value: pN1 + - code: '1' + desc: 'N0: no lymph nodes contain tumor cells' + position: 2 + questionnaire_value: '' + value: pN0 + - code: '0' + desc: 'NX: lymph nodes were not assessed' + position: 1 + questionnaire_value: '' + value: pNX +- code: TNMPT + values: + - code: '9' + desc: 'pTis (Paget): Paget disease of the nipple NOT associated with invasive + carcinoma or DCIS' + position: 4 + questionnaire_value: pTis (Paget) + value: pTis (Paget) + - code: '6' + desc: 'T4: Tumour of any size with extension to chest wall' + position: 8 + questionnaire_value: T4 + value: T4 + - code: '0' + desc: 'TX: primary tumor cannot be assessed' + position: 1 + questionnaire_value: '' + value: pTX + - code: '1' + desc: 'T0: no evidence of primary tumor' + position: 2 + questionnaire_value: '' + value: pT0 + - code: '2' + desc: 'pTis (DCIS): Ductal carcinoma in situ' + position: 3 + questionnaire_value: pTis (DCIS) + value: pTis (DCIS) + - code: '3' + desc: 'T1: tumor confined to the submucosa' + position: 5 + questionnaire_value: null + value: pT1 + - code: '4' + desc: 'T2: tumor has grown into (but not through) the muscularis propria' + position: 6 + questionnaire_value: null + value: pT2 + - code: '5' + desc: 'T3: tumor has grown into (but not through) the serosa' + position: 7 + questionnaire_value: null + value: pT3 + - code: '999' + desc: Unknown + position: 999 + questionnaire_value: null + value: Unknown +- code: TREATMENT + values: + - code: '6' + desc: Hormonal Therapy + position: 7 + questionnaire_value: null + value: Hormonal Therapy + - code: '7' + desc: Targeted therapy + position: 8 + questionnaire_value: null + value: Targeted therapy + - code: '0' + desc: No treatment + position: 1 + questionnaire_value: '' + value: No treatment + - code: '1' + desc: Surgery + position: 2 + questionnaire_value: '' + value: Surgery + - code: '2' + desc: Surgery to axilla + position: 3 + questionnaire_value: '' + value: Surgery to axilla + - code: '3' + desc: Delayed reconstruction + position: 4 + questionnaire_value: '' + value: Delayed reconstruction + - code: '4' + desc: Radiotherapy + position: 5 + questionnaire_value: '' + value: Radiotherapy + - code: '5' + desc: Chemotherapy + position: 6 + questionnaire_value: '' + value: Chemotherapy + - code: '8' + desc: Best supportive care + position: 9 + questionnaire_value: '' + value: Best supportive care + - code: '999' + desc: Unknown + position: 999 + questionnaire_value: null + value: Unknown +- code: Treatment_speciality + values: + - code: '3' + desc: Radiation Oncology + position: 3 + questionnaire_value: null + value: Radiation Oncology + - code: '2' + desc: Medical Oncology + position: 2 + questionnaire_value: null + value: Medical Oncology + - code: '1' + desc: Surgery + position: 1 + questionnaire_value: null + value: Surgery +- code: fh_yes_no + values: + - code: NA + desc: NA + position: 4 + questionnaire_value: null + value: NA + - code: fh_yes_no_unknown + desc: Unknown + position: 3 + questionnaire_value: null + value: Unknown + - code: fh_yes_no_no + desc: 'No' + position: 2 + questionnaire_value: null + value: 'No' + - code: fh_yes_no_yes + desc: 'Yes' + position: 1 + questionnaire_value: null + value: 'Yes' +- code: public_private + values: + - code: '2' + desc: Private + position: 2 + questionnaire_value: null + value: Private + - code: '1' + desc: Public + position: 1 + questionnaire_value: null + value: Public + - code: '3' + desc: Both + position: 3 + questionnaire_value: null + value: Both + - code: '999' + desc: Unknown + position: 999 + questionnaire_value: null + value: Unknown +- code: recurrenceBC + values: + - code: '0' + desc: 'No' + position: 0 + questionnaire_value: null + value: 'No' + - code: '1' + desc: Yes, local recurrence + position: 1 + questionnaire_value: null + value: Yes, local recurrence + - code: '2' + desc: Yes, regional recurrence + position: 2 + questionnaire_value: null + value: Yes, regional recurrence + - code: '3' + desc: Yes, distant recurrence + position: 3 + questionnaire_value: null + value: Yes, distant recurrence + - code: '999' + desc: Unknown + position: 999 + questionnaire_value: null + value: Unknown +reports: [] +reviews: [] +splash_screen: |- +

ICHOM Breast Data Collection

+ +

This is a demo site, please do not enter any real data!

+surveys: +- context_form_group: Main + display_name: Follow up PROMS - 6 months + form: FollowUpPROMS6months + is_followup: false + name: FollowUpPROMS6months + questions: + - cde: COLLECTIONDATE + cde_path: FollowUpPROMS6months/SurveyInformation + copyright_text: '' + instruction: Please select the date of completing the survey + position: 71 + precondition: null + source: '' + title: Completion Date + widget_config: '' + - cde: PROMSConsent + cde_path: null + copyright_text: '' + instruction: '' + position: 72 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EQ_Health_Rate + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: '' + position: 40 + precondition: null + source: '' + title: null + widget_config: '{"widget_name": "slider", "max_label": "The best health you can + imagine", "min_label": "The worst health you can imagine", "box_label": "YOUR + HEALTH TODAY"}' + - cde: EQ_Anxiety_Depress + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 39 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Pain_Discomfort + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 38 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_UsualActivities + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 37 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q04 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 68 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q03 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 67 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q02 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 66 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q01 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 65 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q53 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 63 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q52 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 62 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q51 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 61 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q50 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 60 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q41 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 51 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q40 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 50 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q39 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 49 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q38 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 48 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q37 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 47 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q36 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 46 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q35 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 45 + precondition: + cde: EORTCQLQBR23_Q34 + value: 2,3,4 + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q34 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 44 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q33 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 43 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q32 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 42 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q31 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 41 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Selfcare + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 36 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Mobility + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 35 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q30 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 34 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EORTCQLQC30_Q29 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 33 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EORTCQLQC30_Q28 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 32 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q27 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 31 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q26 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 30 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q25 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 29 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q24 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 28 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q15 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 19 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTC_QLQ_LMC21 + cde_path: null + copyright_text: © QLQ-LMC21 Copyright 2002 EORTC Quality of life Group. All rights + reserved + instruction: 'Only answer this question IF YOU HAVE RECEIVED CHEMOTHERAPY AS PART + OF YOUR TREATMENT During the past week:' + position: 64 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q46 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 56 + precondition: + cde: EORTCQLQBR23_Q45 + value: 2,3,4 + source: '' + title: null + widget_config: null + - cde: FACTES_Q06 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 70 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q05 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 69 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q49 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 59 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q48 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 58 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q47 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 57 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q45 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 55 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q44 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 54 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q43 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 53 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q42 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 52 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q23 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 27 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q22 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 26 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q21 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 25 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q20 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 24 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q19 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 23 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q18 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 22 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q17 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 21 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q16 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 20 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q14 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 18 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q13 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 17 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q12 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 16 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q11 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 15 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q10 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 14 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q09 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 13 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q08 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 12 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q07 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 11 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q06 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 10 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q05 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 9 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q04 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 8 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q03 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 7 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q02 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 6 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q01 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 5 + precondition: null + source: '' + title: null + widget_config: null + - cde: SYSTDATEPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 4 + precondition: + cde: SYSTPATIENT + value: '1' + source: '' + title: null + widget_config: null + - cde: SYSTPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 3 + precondition: null + source: '' + title: null + widget_config: null + - cde: SURGERYDATEPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 2 + precondition: + cde: SURGERYPATIENT + value: 1,2,3 + source: '' + title: null + widget_config: null + - cde: SURGERYPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 1 + precondition: null + source: '' + title: null + widget_config: null +- context_form_group: Main + display_name: Follow up PROMS - Year 1 + form: FUpPROMSYr1 + is_followup: false + name: FollowUpPROMSYear1 + questions: + - cde: COLLECTIONDATE + cde_path: FUpPROMSYr1/SurveyInformation + copyright_text: '' + instruction: Please select the date of completing the survey + position: 103 + precondition: null + source: '' + title: Completion Date + widget_config: '' + - cde: EQ_Health_Rate + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: '' + position: 40 + precondition: null + source: '' + title: null + widget_config: '{"widget_name": "slider", "max_label": "The best health you can + imagine", "min_label": "The worst health you can imagine", "box_label": "YOUR + HEALTH TODAY"}' + - cde: EORTCQLQC30_Q30 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 34 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EORTCQLQC30_Q29 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 33 + precondition: null + source: '' + title: null + widget_config: '' + - cde: PROMSConsent + cde_path: null + copyright_text: '' + instruction: '' + position: 104 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EORTC_QLQ_LMC21 + cde_path: null + copyright_text: © QLQLMC21 Copyright 2002 EORTC Quality of Life Group. All rights + reserved (phase III module). + instruction: 'Only answer this question IF YOU HAVE RECEIVED CHEMOTHERAPY AS PART + OF YOUR TREATMENT During the past week:' + position: 64 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q46 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 56 + precondition: + cde: EORTCQLQBR23_Q45 + value: 2,3,4 + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q35 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 45 + precondition: + cde: EORTCQLQBR23_Q34 + value: 2,3,4 + source: '' + title: null + widget_config: null + - cde: EQ_Anxiety_Depress + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 39 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Pain_Discomfort + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 38 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_UsualActivities + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 37 + precondition: null + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q16 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 102 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q15 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 101 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q14 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 100 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q13 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 99 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q12 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 98 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q10 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 96 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q09 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 95 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q08 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 94 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q07 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 93 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q06 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 92 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q05 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 91 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q04 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 90 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q03 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 89 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q11 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 86 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q10 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 85 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q09 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 84 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q08 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 83 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q07 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 82 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q06 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 81 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q05 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 80 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q04 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 79 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q03 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 78 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q02 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 77 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q01 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 76 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQMASTP_Q04 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 75 + precondition: + cde: BREASTQ_SURG + value: '2' + source: '' + title: null + widget_config: null + - cde: BREASTQMASTP_Q03 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 74 + precondition: + cde: BREASTQ_SURG + value: '2' + source: '' + title: null + widget_config: null + - cde: BREASTQMASTP_Q02 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 73 + precondition: + cde: BREASTQ_SURG + value: '2' + source: '' + title: null + widget_config: null + - cde: BREASTQMASTP_Q01 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 72 + precondition: + cde: BREASTQ_SURG + value: '2' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q11 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 97 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q02 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 88 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q01 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: '' + position: 87 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: FACTES_Q06 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 70 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q05 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 69 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q01 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 65 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q04 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 68 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q03 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 67 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q02 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 66 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q53 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 63 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q52 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 62 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q51 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 61 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q50 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 60 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q49 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 59 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q48 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 58 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q47 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 57 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q45 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 55 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q44 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 54 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q43 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 53 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q42 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 52 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q41 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 51 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q40 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 50 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q39 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 49 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q38 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 48 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q37 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 47 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q36 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 46 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q34 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 44 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q33 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 43 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q32 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 42 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q31 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 41 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Selfcare + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 36 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Mobility + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 35 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q27 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 31 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q26 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 30 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q25 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 29 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q24 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 28 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q23 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 27 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q22 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 26 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q21 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 25 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q20 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 24 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q19 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 23 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q18 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 22 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q17 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 21 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q16 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 20 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q15 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 19 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q14 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 18 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q13 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 17 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q12 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 16 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q11 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 15 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q09 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 13 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q08 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 12 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q07 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 11 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q10 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 10 + precondition: null + source: '' + title: null + widget_config: null + - cde: BREASTQ_SURG + cde_path: null + copyright_text: '' + instruction: 'To help direct you to questions relevant to you:' + position: 71 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EORTCQLQC30_Q28 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 32 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q06 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 10 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q05 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 9 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q04 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 8 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q03 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 7 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q02 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 6 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q01 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 5 + precondition: null + source: '' + title: null + widget_config: null + - cde: SYSTDATEPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 4 + precondition: + cde: SYSTPATIENT + value: '1' + source: '' + title: null + widget_config: null + - cde: SYSTPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 3 + precondition: null + source: '' + title: null + widget_config: null + - cde: SURGERYDATEPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 2 + precondition: + cde: SURGERYPATIENT + value: 1,2,3 + source: '' + title: null + widget_config: null + - cde: SURGERYPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 1 + precondition: null + source: '' + title: null + widget_config: null +- context_form_group: Main + display_name: Follow up PROMS - Year 2 + form: FUpPROMSYr2 + is_followup: false + name: FollowUpPROMSYear2 + questions: + - cde: COLLECTIONDATE + cde_path: FUpPROMSYr2/SurveyInformation + copyright_text: '' + instruction: Please select the date of completing the survey + position: 103 + precondition: null + source: '' + title: Completion Date + widget_config: '' + - cde: PROMSConsent + cde_path: null + copyright_text: '' + instruction: '' + position: 104 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EQ_Anxiety_Depress + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 39 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Pain_Discomfort + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 38 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Selfcare + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 36 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Mobility + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 35 + precondition: null + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q10 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 96 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q16 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 102 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q15 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 101 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q14 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 100 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q13 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 99 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q12 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 98 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q11 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 97 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q09 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 95 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q08 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 94 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q07 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 93 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q06 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 92 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q05 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 91 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q04 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 90 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q03 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 89 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q02 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 88 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQRECP_Q01 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 87 + precondition: + cde: BREASTQ_SURG + value: '3' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q08 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 83 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q07 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 82 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q06 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 81 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q05 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 80 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q04 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 79 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q03 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 78 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q02 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 77 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q01 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 76 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQMASTP_Q03 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 74 + precondition: + cde: BREASTQ_SURG + value: '2' + source: '' + title: null + widget_config: null + - cde: BREASTQMASTP_Q02 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 73 + precondition: + cde: BREASTQ_SURG + value: '2' + source: '' + title: null + widget_config: null + - cde: BREASTQMASTP_Q01 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 72 + precondition: + cde: BREASTQ_SURG + value: '2' + source: '' + title: null + widget_config: null + - cde: BREASTQ_SURG + cde_path: null + copyright_text: '' + instruction: 'To help direct you to questions relevant to you:' + position: 71 + precondition: null + source: '' + title: null + widget_config: '' + - cde: BREASTQBCTP_Q11 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 86 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q10 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 85 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQBCTP_Q09 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breasts in mind, in the past week, how SATISFIED OR DISSATISFIED + have you been with:' + position: 84 + precondition: + cde: BREASTQ_SURG + value: '1' + source: '' + title: null + widget_config: null + - cde: BREASTQMASTP_Q04 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. + instruction: 'With your breast area in mind, in the past week, how SATISFIED OR + DISSATISFIED have you been with:' + position: 75 + precondition: + cde: BREASTQ_SURG + value: '2' + source: '' + title: null + widget_config: null + - cde: EORTC_QLQ_LMC21 + cde_path: null + copyright_text: © QLQLMC21 Copyright 2002 EORTC Quality of Life Group. All rights + reserved (phase III module). + instruction: 'Only answer this question IF YOU HAVE RECEIVED CHEMOTHERAPY AS PART + OF YOUR TREATMENT During the past week:' + position: 64 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q06 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 70 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q05 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 69 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q04 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 68 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q03 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 67 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q02 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 66 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q01 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 65 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q53 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 63 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q52 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 62 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q51 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 61 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q50 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 60 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q49 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 59 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q48 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 58 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q47 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 57 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q46 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 56 + precondition: + cde: EORTCQLQBR23_Q45 + value: 2,3,4 + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q45 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 55 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q44 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 54 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q43 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 53 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q41 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 51 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q40 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 50 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q39 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 49 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q38 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 48 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q37 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 47 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q36 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 46 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q35 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 45 + precondition: + cde: EORTCQLQBR23_Q34 + value: 2,3,4 + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q34 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 44 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q33 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 43 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q32 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 42 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q31 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 41 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q42 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 52 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_UsualActivities + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 37 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Health_Rate + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: '' + position: 40 + precondition: null + source: '' + title: null + widget_config: '{"widget_name": "slider", "max_label": "The best health you can + imagine", "min_label": "The worst health you can imagine", "box_label": "YOUR + HEALTH TODAY"}' + - cde: EORTCQLQC30_Q30 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 34 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EORTCQLQC30_Q28 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 32 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q27 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 31 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q11 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 15 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q10 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 14 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q15 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 19 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q14 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 18 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q13 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 17 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q12 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 16 + precondition: null + source: '' + title: null + widget_config: null + - cde: SYSTDATEPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 4 + precondition: + cde: SYSTPATIENT + value: '1' + source: '' + title: null + widget_config: null + - cde: SURGERYDATEPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 2 + precondition: + cde: SURGERYPATIENT + value: 1,2,3 + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q29 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 33 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EORTCQLQC30_Q26 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 30 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q25 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 29 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q24 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 28 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q23 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 27 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q22 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 26 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q21 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 25 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q20 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 24 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q19 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 23 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q18 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 22 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q17 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 21 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q16 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 20 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q09 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 13 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q08 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 12 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q07 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 11 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q06 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 10 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q05 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 9 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q04 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 8 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q03 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 7 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q02 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 6 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q01 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 5 + precondition: null + source: '' + title: null + widget_config: null + - cde: SYSTPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 3 + precondition: null + source: '' + title: null + widget_config: null + - cde: SURGERYPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 1 + precondition: null + source: '' + title: null + widget_config: null +- context_form_group: Follow up 3-10 + display_name: Follow up PROMS - Years 3 - 10 + form: FUpPROMS3_10Years + is_followup: true + name: FollowUpPROMSYears3-10 + questions: + - cde: COLLECTIONDATE + cde_path: FUpPROMS3_10Years/SurveyInformation + copyright_text: '' + instruction: Please select the date of completing the survey + position: 71 + precondition: null + source: '' + title: Completion Date + widget_config: '' + - cde: PROMSConsent + cde_path: null + copyright_text: '' + instruction: '' + position: 72 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EQ_Health_Rate + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: '' + position: 40 + precondition: null + source: '' + title: null + widget_config: '{"widget_name": "slider", "max_label": "The best health you can + imagine", "min_label": "The worst health you can imagine", "box_label": "YOUR + HEALTH TODAY"}' + - cde: EQ_Anxiety_Depress + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 39 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Pain_Discomfort + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 38 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_UsualActivities + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 37 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Selfcare + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 36 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Mobility + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 35 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q06 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 70 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q05 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 69 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q04 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 68 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q03 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 67 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q02 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 66 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q01 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 65 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTC_QLQ_LMC21 + cde_path: null + copyright_text: © QLQLMC21 Copyright 2002 EORTC Quality of Life Group. All rights + reserved (phase III module) + instruction: 'During the past week: Answer this question ONLY IF YOU HAVE RECEIVED + CHEMOTHERAPY AS PART OF YOUR TREATMENT' + position: 64 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q53 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 63 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q52 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 62 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q51 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 61 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q50 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 60 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q49 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 59 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q48 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 58 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q47 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 57 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q46 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 56 + precondition: + cde: EORTCQLQBR23_Q45 + value: 2,3,4 + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q45 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 55 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q44 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 54 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q43 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 53 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q42 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 52 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q41 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 51 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q40 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 50 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q39 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 49 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q35 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 45 + precondition: + cde: EORTCQLQBR23_Q34 + value: 2,3,4 + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q34 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 44 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q33 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 43 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q31 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 41 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q30 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 34 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EORTCQLQC30_Q29 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 33 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EORTCQLQC30_Q28 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 32 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q27 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 31 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q26 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 30 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q25 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 29 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q24 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 28 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q23 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 27 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q22 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 26 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q21 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 25 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q17 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 21 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q16 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 20 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q15 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 19 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q14 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 18 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q13 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 17 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q12 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 16 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q11 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 15 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q10 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 14 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q09 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 13 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q08 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 12 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q07 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 11 + precondition: null + source: '' + title: null + widget_config: null + - cde: SYSTDATEPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 4 + precondition: + cde: SYSTPATIENT + value: '1' + source: '' + title: null + widget_config: null + - cde: SYSTPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 3 + precondition: null + source: '' + title: null + widget_config: null + - cde: SURGERYDATEPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 2 + precondition: + cde: SURGERYPATIENT + value: 1,2,3 + source: '' + title: null + widget_config: null + - cde: SURGERYPATIENT + cde_path: null + copyright_text: '' + instruction: '' + position: 1 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q38 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 48 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q37 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 47 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q36 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 46 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q32 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 42 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q20 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 24 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q19 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 23 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q18 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 22 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q06 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 10 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q05 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 9 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q04 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 8 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q03 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 7 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q02 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 6 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q01 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 5 + precondition: null + source: '' + title: null + widget_config: null +- context_form_group: Main + display_name: Baseline PROMS + form: BaselinePromsBC + is_followup: false + name: BaselinePROMS + questions: + - cde: COLLECTIONDATE + cde_path: BaselinePromsBC/SurveyInformation + copyright_text: '' + instruction: Please select the date of completing the survey + position: 79 + precondition: null + source: '' + title: Completion Date + widget_config: '' + - cde: EORTCQLQC30_Q30 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 38 + precondition: null + source: '' + title: null + widget_config: '' + - cde: PROMSConsent + cde_path: null + copyright_text: '' + instruction: '' + position: 80 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EORTCQLQBR23_Q35 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 49 + precondition: + cde: EORTCQLQBR23_Q34 + value: 2,3,4 + source: '' + title: null + widget_config: null + - cde: FACTES_Q06 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 78 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q05 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 77 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q04 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 76 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q03 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 75 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q02 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 74 + precondition: null + source: '' + title: null + widget_config: null + - cde: FACTES_Q01 + cde_path: null + copyright_text: © David Cella, 1987, 1997. All rights reserved + instruction: 'During the past week:' + position: 73 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTC_QLQ_LMC21 + cde_path: null + copyright_text: © QLQLMC21 Copyright 2002 EORTC Quality of Life Group. All rights + reserved (phase III module). + instruction: 'Answer this question ONLY IF YOU HAVE RECEIVED CHEMOTHERAPY AS PART + OF YOUR TREATMENT During the past week:' + position: 72 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q53 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 67 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q52 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 66 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q51 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 65 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q50 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 64 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q49 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 63 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q48 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 62 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q47 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 61 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q46 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 60 + precondition: + cde: EORTCQLQBR23_Q45 + value: 2,3,4 + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q45 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 59 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q44 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past four weeks:' + position: 58 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q43 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 57 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q42 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 56 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q41 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 55 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q40 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 54 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q39 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 53 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q38 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 52 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q29 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 37 + precondition: null + source: '' + title: null + widget_config: '' + - cde: EORTCQLQC30_Q28 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 36 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q15 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 23 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q14 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 22 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q13 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 21 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q20 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 28 + precondition: null + source: '' + title: null + widget_config: null + - cde: BREASTQMCRB_Q04 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'In the past week, how satisfied or dissatisfied have you been with:' + position: 71 + precondition: null + source: '' + title: null + widget_config: null + - cde: BREASTQMCRB_Q03 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'In the past week, how satisfied or dissatisfied have you been with:' + position: 70 + precondition: null + source: '' + title: null + widget_config: null + - cde: BREASTQMCRB_Q02 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'In the past week, how satisfied or dissatisfied have you been with:' + position: 69 + precondition: null + source: '' + title: null + widget_config: null + - cde: BREASTQMCRB_Q01 + cde_path: null + copyright_text: © Copyright 2007 Memorial Sloan-Kettering Cancer Center and The + University of British Columbia. All rights reserved. + instruction: 'In the past week, how satisfied or dissatisfied have you been with:' + position: 68 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Health_Rate + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: '' + position: 44 + precondition: null + source: '' + title: null + widget_config: '{"widget_name": "slider", "max_label": "The best health you can + imagine", "min_label": "The worst health you can imagine", "box_label": "YOUR + HEALTH TODAY"}' + - cde: EQ_Anxiety_Depress + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 43 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Pain_Discomfort + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 42 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_UsualActivities + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 41 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Selfcare + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 40 + precondition: null + source: '' + title: null + widget_config: null + - cde: EQ_Mobility + cde_path: null + copyright_text: © EuroQol Research Foundation. EQ-5D™ is a trade mark of the EuroQol + Research Foundation + instruction: Please tap the ONE box that best describes your health TODAY. + position: 39 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q37 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 51 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q36 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 50 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q34 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 48 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q33 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 47 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q32 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 46 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQBR23_Q31 + cde_path: null + copyright_text: © Copyright 1996 EORTC Study Group on Quality of Life. All Rights + reserved. Version 1.0 + instruction: 'During the past week:' + position: 45 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q27 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 35 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q26 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 34 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q25 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 33 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q24 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 32 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q23 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 31 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q22 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 30 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q21 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 29 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q18 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 26 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q17 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 25 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q16 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 24 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q02 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 10 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q04 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 12 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q03 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 11 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q19 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 27 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q12 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 20 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q11 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 19 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q10 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 18 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q09 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 17 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q08 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 16 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q07 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 15 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q06 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: 'During the past week:' + position: 14 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q05 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 13 + precondition: null + source: '' + title: null + widget_config: null + - cde: EORTCQLQC30_Q01 + cde_path: null + copyright_text: © Copyright 1995 EORTC Quality of Life Group. All rights reserved. + Version 3.0 + instruction: '' + position: 9 + precondition: null + source: '' + title: null + widget_config: null + - cde: WEIGHTCLIN + cde_path: null + copyright_text: '' + instruction: '' + position: 8 + precondition: null + source: '' + title: null + widget_config: null + - cde: HEIGHTCLIN + cde_path: null + copyright_text: '' + instruction: '' + position: 7 + precondition: null + source: '' + title: null + widget_config: '' + - cde: COMORB + cde_path: null + copyright_text: '' + instruction: '' + position: 6 + precondition: null + source: '' + title: null + widget_config: null + - cde: MENOPAUSE + cde_path: null + copyright_text: '' + instruction: '' + position: 5 + precondition: null + source: '' + title: null + widget_config: null + - cde: MARITAL + cde_path: null + copyright_text: '' + instruction: '' + position: 4 + precondition: null + source: '' + title: null + widget_config: null + - cde: EDUCATION + cde_path: null + copyright_text: '' + instruction: '' + position: 3 + precondition: null + source: '' + title: null + widget_config: null + - cde: public_private + cde_path: null + copyright_text: '' + instruction: '' + position: 2 + precondition: null + source: '' + title: null + widget_config: null + - cde: ETNIC + cde_path: null + copyright_text: '' + instruction: '' + position: 1 + precondition: null + source: '' + title: null + widget_config: null +vis_base_data_configs: +- code: basecrc + config: + baseline_form: BaselinePromsBC + fields: + - COLLECTIONDATE + - EORTCQLQBR23_Q31 + - EORTCQLQBR23_Q32 + - EORTCQLQBR23_Q33 + - EORTCQLQBR23_Q34 + - EORTCQLQBR23_Q35 + - EORTCQLQBR23_Q36 + - EORTCQLQBR23_Q37 + - EORTCQLQBR23_Q38 + - EORTCQLQBR23_Q39 + - EORTCQLQBR23_Q40 + - EORTCQLQBR23_Q41 + - EORTCQLQBR23_Q42 + - EORTCQLQBR23_Q43 + - EORTCQLQBR23_Q44 + - EORTCQLQBR23_Q45 + - EORTCQLQBR23_Q46 + - EORTCQLQBR23_Q47 + - EORTCQLQBR23_Q48 + - EORTCQLQBR23_Q49 + - EORTCQLQBR23_Q50 + - EORTCQLQBR23_Q51 + - EORTCQLQBR23_Q52 + - EORTCQLQBR23_Q53 + - EORTCQLQC30_Q01 + - EORTCQLQC30_Q02 + - EORTCQLQC30_Q03 + - EORTCQLQC30_Q04 + - EORTCQLQC30_Q05 + - EORTCQLQC30_Q06 + - EORTCQLQC30_Q07 + - EORTCQLQC30_Q08 + - EORTCQLQC30_Q09 + - EORTCQLQC30_Q10 + - EORTCQLQC30_Q11 + - EORTCQLQC30_Q12 + - EORTCQLQC30_Q13 + - EORTCQLQC30_Q14 + - EORTCQLQC30_Q15 + - EORTCQLQC30_Q16 + - EORTCQLQC30_Q17 + - EORTCQLQC30_Q18 + - EORTCQLQC30_Q19 + - EORTCQLQC30_Q20 + - EORTCQLQC30_Q21 + - EORTCQLQC30_Q22 + - EORTCQLQC30_Q23 + - EORTCQLQC30_Q24 + - EORTCQLQC30_Q25 + - EORTCQLQC30_Q26 + - EORTCQLQC30_Q27 + - EORTCQLQC30_Q28 + - EORTCQLQC30_Q29 + - EORTCQLQC30_Q30 + - EORTC_QLQ_LMC21 + - EQ_Anxiety_Depress + - EQ_Health_Rate + - EQ_Mobility + - EQ_Pain_Discomfort + - EQ_Selfcare + - EQ_UsualActivities + - FACTES_Q01 + - FACTES_Q02 + - FACTES_Q03 + - FACTES_Q04 + - FACTES_Q05 + - FACTES_Q06 + followup_forms: + - name: FollowUpPROMS6months + seq: 1 + - name: FUpPROMSYr1 + seq: 2 + - name: FUpPROMSYr2 + seq: 3 + - name: FUpPROMS3_10Years + seq: + + data: {} + state: E +vis_configs: +- base_data: basecrc + code: tl + config: + fields: + - EORTCQLQBR23_Q31 + - EORTCQLQBR23_Q32 + - EORTCQLQBR23_Q33 + - EORTCQLQBR23_Q34 + - EORTCQLQBR23_Q35 + - EORTCQLQBR23_Q36 + - EORTCQLQBR23_Q37 + - EORTCQLQBR23_Q38 + - EORTCQLQBR23_Q39 + - EORTCQLQBR23_Q40 + - EORTCQLQBR23_Q41 + - EORTCQLQBR23_Q42 + - EORTCQLQBR23_Q43 + - EORTCQLQBR23_Q44 + - EORTCQLQBR23_Q45 + - EORTCQLQBR23_Q46 + - EORTCQLQBR23_Q47 + - EORTCQLQBR23_Q48 + - EORTCQLQBR23_Q49 + - EORTCQLQBR23_Q50 + - EORTCQLQBR23_Q51 + - EORTCQLQBR23_Q52 + - EORTCQLQBR23_Q53 + - EORTC_QLQ_LMC21 + dashboard: S + position: 3 + title: Traffic Lights – Tumour +- base_data: basecrc + code: sgc + config: + groups: + - compare_all: true + fields: + - EORTCQLQC30_Q28 + scale: symptom + title: Financial Difficulties + dashboard: S + position: 8 + title: Financial +- base_data: basecrc + code: sgc + config: + blurb: This tab is a display of EORTC QLQ C30 symptom scores other than pain. + Please scroll down. + groups: + - compare_all: true + fields: + - EORTCQLQC30_Q14 + - EORTCQLQC30_Q15 + scale: symptom + title: Nausea and Vomiting + - compare_all: true + fields: + - EORTCQLQC30_Q13 + scale: symptom + title: Appetite + - compare_all: true + fields: + - EORTCQLQC30_Q16 + scale: symptom + title: Constipation + - compare_all: true + fields: + - EORTCQLQC30_Q17 + scale: symptom + title: Diarrhoea + dashboard: S + position: 7 + title: Symptoms 2 +- base_data: basecrc + code: sgc + config: + blurb: This tab is a display of EORTC QLQ C30 sleep issues. Please scroll down. + groups: + - compare_all: true + fields: + - EORTCQLQC30_Q18 + scale: symptom + title: Fatigue + - compare_all: true + fields: + - EORTCQLQC30_Q08 + scale: symptom + title: Dyspnoea + - compare_all: true + fields: + - EORTCQLQC30_Q11 + scale: symptom + title: Insomnia + dashboard: S + position: 6 + title: Symptoms 1 +- base_data: basecrc + code: sgc + config: + groups: + - compare_all: true + fields: + - EORTCQLQC30_Q09 + - EORTCQLQC30_Q19 + scale: symptom + title: Pain + dashboard: S + position: 5 + title: Pain +- base_data: basecrc + code: sgc + config: + groups: + - compare_all: true + fields: + - EORTCQLQC30_Q01 + - EORTCQLQC30_Q02 + - EORTCQLQC30_Q03 + - EORTCQLQC30_Q04 + - EORTCQLQC30_Q05 + - EORTCQLQC30_Q06 + - EORTCQLQC30_Q07 + scale: functional + title: Physical and Role Functioning + - compare_all: true + fields: + - EORTCQLQC30_Q20 + - EORTCQLQC30_Q21 + - EORTCQLQC30_Q22 + - EORTCQLQC30_Q23 + - EORTCQLQC30_Q24 + - EORTCQLQC30_Q25 + - EORTCQLQC30_Q26 + - EORTCQLQC30_Q27 + scale: functional + title: Emotional, Cognitive and Social Functioning + dashboard: S + position: 4 + title: Functional +- base_data: basecrc + code: sgc + config: + groups: + - compare_all: true + fields: + - EORTCQLQC30_Q29 + - EORTCQLQC30_Q30 + scale: hs/qol + title: Global Health Status/QOL + dashboard: S + position: 2 + title: Global Health Status/QOL +- base_data: basecrc + code: tl + config: + fields: + - EORTCQLQC30_Q01 + - EORTCQLQC30_Q02 + - EORTCQLQC30_Q03 + - EORTCQLQC30_Q04 + - EORTCQLQC30_Q05 + - EORTCQLQC30_Q06 + - EORTCQLQC30_Q07 + - EORTCQLQC30_Q08 + - EORTCQLQC30_Q09 + - EORTCQLQC30_Q10 + - EORTCQLQC30_Q11 + - EORTCQLQC30_Q12 + - EORTCQLQC30_Q13 + - EORTCQLQC30_Q14 + - EORTCQLQC30_Q15 + - EORTCQLQC30_Q16 + - EORTCQLQC30_Q17 + - EORTCQLQC30_Q18 + - EORTCQLQC30_Q19 + - EORTCQLQC30_Q20 + - EORTCQLQC30_Q21 + - EORTCQLQC30_Q22 + - EORTCQLQC30_Q23 + - EORTCQLQC30_Q24 + - EORTCQLQC30_Q25 + - EORTCQLQC30_Q26 + - EORTCQLQC30_Q27 + - EORTCQLQC30_Q28 + dashboard: S + position: 1 + title: Traffic Lights – Generic +- base_data: basecrc + code: cpr + config: + fields: + - code: EORTCQLQC30_Q29 + colour_map: + ? '' + : lightgrey + '1': darkred + '2': orangered + '3': orange + '4': gold + '5': yellow + '6': greenyellow + '7': limegreen + Missing: lightgrey + label: Health Status + - code: EORTCQLQC30_Q30 + colour_map: + ? '' + : lightgrey + '1': darkred + '2': orangered + '3': orange + '4': gold + '5': yellow + '6': greenyellow + '7': limegreen + Missing: lightgrey + label: Quality of Life + dashboard: A + position: 3 + title: Quality of Life/Health Status +- base_data: basecrc + code: cpr + config: + fields: + - code: EORTCQLQC30_Q09 + label: Pain + - code: EORTCQLQC30_Q18 + label: Fatigue + - code: EORTCQLQC30_Q08 + label: Dyspnoea + - code: EORTCQLQC30_Q11 + label: Insomnia + - code: EORTCQLQC30_Q14 + label: Nausea + - code: EORTCQLQC30_Q15 + label: Vomiting + - code: EORTCQLQC30_Q13 + label: Appetite + - code: EORTCQLQC30_Q16 + label: Constipation + - code: EORTCQLQC30_Q17 + label: Diarrhoea + dashboard: A + position: 2 + title: Changes in Patient Responses +- base_data: basecrc + code: proms_stats + config: + baseline_form: BaselineProms + blurb: Information is available for the last seven days and other time frames. + Scroll down to see them all. + followup_form: FollowUpProms + time_periods: + - 7 + - 30 + - 365 + - all + dashboard: A + position: 1 + title: PROMS Statistics diff --git a/rdrf/rdrf/testing/unit/tests.py b/rdrf/rdrf/testing/unit/tests.py index 58b9e68e1..525deaabd 100644 --- a/rdrf/rdrf/testing/unit/tests.py +++ b/rdrf/rdrf/testing/unit/tests.py @@ -19,7 +19,11 @@ from rdrf.helpers.utils import de_camelcase, TimeStripper from rdrf.models.definition.models import CDEPermittedValueGroup, CDEPermittedValue from rdrf.models.definition.models import ClinicalData -from rdrf.models.definition.models import CommonDataElement, InvalidAbnormalityConditionError, ValidationError +from rdrf.models.definition.models import ( + CommonDataElement, + InvalidAbnormalityConditionError, + ValidationError, +) from rdrf.models.definition.models import EmailNotification from rdrf.models.definition.models import EmailNotificationHistory from rdrf.models.definition.models import EmailTemplate @@ -37,12 +41,15 @@ def load_yaml(yaml_path): from django.core.management import call_command + call_command("import_registry", "--file", yaml_path, "--format", "yaml") def get_yaml_path(yaml_filename): this_dir = os.path.dirname(__file__) - return os.path.abspath(os.path.join(this_dir, "..", "..", "fixtures", yaml_filename)) + return os.path.abspath( + os.path.join(this_dir, "..", "..", "fixtures", yaml_filename) + ) def use_yaml(yaml_filename): @@ -51,134 +58,246 @@ def wrapper(self): yaml_path = get_yaml_path(yaml_filename) load_yaml(yaml_path) return method() + return wrapper + return decorator class CalculatedFunctionsTestCase(TestCase): - def setUp(self): # Note that we convert the string date as a date django date - patient_date_of_birth = '2000-05-17' - self.patient_values = {'date_of_birth': datetime.strptime(patient_date_of_birth, '%Y-%m-%d'), - 'sex': 1} + patient_date_of_birth = "2000-05-17" + self.patient_values = { + "date_of_birth": datetime.strptime(patient_date_of_birth, "%Y-%m-%d"), + "sex": 1, + } def test_cdefhdutchlipidclinicnetwork_all_cap_reached(self): - self.form_values = {'CDE00001': 'y', - 'CDE00002': 'y', - 'CDE00003': 'fh2_y', - 'CDE00004': 'fh2_y', - 'CDE00011': 'fhpremcvd_yes_corheartdisease', - 'CDE00013': 10.0, - 'CDEIndexOrRelative': 'fh_is_index', - 'DateOfAssessment': '2019-05-10', - 'FHFamHistArcusCornealis': 'fh2_y', - 'FHFamHistTendonXanthoma': 'fh2_y', - 'FHFamilyHistoryChild': 'fh_n', - 'FHPersHistCerebralVD': 'fh2_y', - 'LDLCholesterolAdjTreatment': '21.74'} - self.assertEqual(calculated_functions.CDEfhDutchLipidClinicNetwork(self.patient_values, self.form_values), '18') + self.form_values = { + "CDE00001": "y", + "CDE00002": "y", + "CDE00003": "fh2_y", + "CDE00004": "fh2_y", + "CDE00011": "fhpremcvd_yes_corheartdisease", + "CDE00013": 10.0, + "CDEIndexOrRelative": "fh_is_index", + "DateOfAssessment": "2019-05-10", + "FHFamHistArcusCornealis": "fh2_y", + "FHFamHistTendonXanthoma": "fh2_y", + "FHFamilyHistoryChild": "fh_n", + "FHPersHistCerebralVD": "fh2_y", + "LDLCholesterolAdjTreatment": "21.74", + } + self.assertEqual( + calculated_functions.CDEfhDutchLipidClinicNetwork( + self.patient_values, self.form_values + ), + "18", + ) def test_cdefhdutchlipidclinicnetwork_2(self): - self.patient_values = {'date_of_birth': datetime.strptime('1990-01-01', '%Y-%m-%d'), - 'sex': 2} - self.form_values = {'CDE00001': 'y', - 'CDE00002': 'y', - 'CDE00003': 'fh2_n', - 'CDE00004': 'fh2_n', - 'CDE00011': 'fhpremcvd_yes_corheartdisease', - 'CDE00013': '', - 'CDEIndexOrRelative': 'fh_is_index', - 'DateOfAssessment': '2016-01-09', - 'FHFamHistArcusCornealis': 'fh2_n', - 'FHFamHistTendonXanthoma': 'fh2_n', - 'FHFamilyHistoryChild': 'fh_n', - 'FHPersHistCerebralVD': 'fh2_y', - 'LDLCholesterolAdjTreatment': '6'} - self.assertEqual(calculated_functions.CDEfhDutchLipidClinicNetwork(self.patient_values, self.form_values), '11') + self.patient_values = { + "date_of_birth": datetime.strptime("1990-01-01", "%Y-%m-%d"), + "sex": 2, + } + self.form_values = { + "CDE00001": "y", + "CDE00002": "y", + "CDE00003": "fh2_n", + "CDE00004": "fh2_n", + "CDE00011": "fhpremcvd_yes_corheartdisease", + "CDE00013": "", + "CDEIndexOrRelative": "fh_is_index", + "DateOfAssessment": "2016-01-09", + "FHFamHistArcusCornealis": "fh2_n", + "FHFamHistTendonXanthoma": "fh2_n", + "FHFamilyHistoryChild": "fh_n", + "FHPersHistCerebralVD": "fh2_y", + "LDLCholesterolAdjTreatment": "6", + } + self.assertEqual( + calculated_functions.CDEfhDutchLipidClinicNetwork( + self.patient_values, self.form_values + ), + "11", + ) def test_cdefhdutchlipidclinicnetwork_3(self): - self.patient_values = {'date_of_birth': datetime.strptime('2000-10-01', '%Y-%m-%d'), - 'sex': 1} - self.form_values = {'CDE00001': 'n', - 'CDE00002': 'n', - 'CDE00003': 'fh2_y', - 'CDE00004': 'fh2_y', - 'CDE00011': 'fhpremcvd_no', - 'CDE00013': 12.0, - 'CDEIndexOrRelative': 'fh_is_relative', - 'DateOfAssessment': '2016-10-01', - 'FHFamHistArcusCornealis': 'fh2_n', - 'FHFamHistTendonXanthoma': 'fh2_n', - 'FHFamilyHistoryChild': 'fh_y', - 'FHPersHistCerebralVD': 'fh2_y', - 'LDLCholesterolAdjTreatment': None} - self.assertEqual(calculated_functions.CDEfhDutchLipidClinicNetwork(self.patient_values, self.form_values), '') + self.patient_values = { + "date_of_birth": datetime.strptime("2000-10-01", "%Y-%m-%d"), + "sex": 1, + } + self.form_values = { + "CDE00001": "n", + "CDE00002": "n", + "CDE00003": "fh2_y", + "CDE00004": "fh2_y", + "CDE00011": "fhpremcvd_no", + "CDE00013": 12.0, + "CDEIndexOrRelative": "fh_is_relative", + "DateOfAssessment": "2016-10-01", + "FHFamHistArcusCornealis": "fh2_n", + "FHFamHistTendonXanthoma": "fh2_n", + "FHFamilyHistoryChild": "fh_y", + "FHPersHistCerebralVD": "fh2_y", + "LDLCholesterolAdjTreatment": None, + } + self.assertEqual( + calculated_functions.CDEfhDutchLipidClinicNetwork( + self.patient_values, self.form_values + ), + "", + ) def test_cde00024(self): - self.form_values = {'CDE00003': 'fh2_y', - 'CDE00004': 'fh2_y', - 'CDE00013': 10.0, - 'CDEfhDutchLipidClinicNetwork': '24', - 'CDEIndexOrRelative': 'fh_is_index', - 'DateOfAssessment': '2019-05-10', - 'FHFamHistArcusCornealis': 'fh2_y', - 'FHFamHistTendonXanthoma': 'fh2_y', - 'LDLCholesterolAdjTreatment': '21.74'} - self.assertEqual(calculated_functions.CDE00024(self.patient_values, self.form_values), 'Definite') + self.form_values = { + "CDE00003": "fh2_y", + "CDE00004": "fh2_y", + "CDE00013": 10.0, + "CDEfhDutchLipidClinicNetwork": "24", + "CDEIndexOrRelative": "fh_is_index", + "DateOfAssessment": "2019-05-10", + "FHFamHistArcusCornealis": "fh2_y", + "FHFamHistTendonXanthoma": "fh2_y", + "LDLCholesterolAdjTreatment": "21.74", + } + self.assertEqual( + calculated_functions.CDE00024(self.patient_values, self.form_values), + "Definite", + ) def test_ldlcholesteroladjtreatment(self): - self.form_values = {'CDE00019': 10.0, - 'PlasmaLipidTreatment': 'FAEzetimibe/atorvastatin20'} - self.assertEqual(calculated_functions.LDLCholesterolAdjTreatment( - self.patient_values, self.form_values), '21.74') + self.form_values = { + "CDE00019": 10.0, + "PlasmaLipidTreatment": "FAEzetimibe/atorvastatin20", + } + self.assertEqual( + calculated_functions.LDLCholesterolAdjTreatment( + self.patient_values, self.form_values + ), + "21.74", + ) def test_cdebmi(self): - self.form_values = {'CDEHeight': "", - 'CDEWeight': ""} - self.assertEqual(calculated_functions.CDEBMI(self.patient_values, self.form_values), 'NaN') - self.form_values = {'CDEHeight': 1.82, - 'CDEWeight': 86.0} - self.assertEqual(calculated_functions.CDEBMI(self.patient_values, self.form_values), '25.96') + self.form_values = {"CDEHeight": "", "CDEWeight": ""} + self.assertEqual( + calculated_functions.CDEBMI(self.patient_values, self.form_values), "NaN" + ) + self.form_values = {"CDEHeight": 1.82, "CDEWeight": 86.0} + self.assertEqual( + calculated_functions.CDEBMI(self.patient_values, self.form_values), "25.96" + ) def test_fhdeathage(self): - self.form_values = {'FHDeathDate': ""} - self.assertEqual(calculated_functions.FHDeathAge(self.patient_values, self.form_values), 'NaN') - self.form_values = {'FHDeathDate': '2019-05-11'} - self.assertEqual(calculated_functions.FHDeathAge(self.patient_values, self.form_values), '18') + self.form_values = {"FHDeathDate": ""} + self.assertEqual( + calculated_functions.FHDeathAge(self.patient_values, self.form_values), + "NaN", + ) + self.form_values = {"FHDeathDate": "2019-05-11"} + self.assertEqual( + calculated_functions.FHDeathAge(self.patient_values, self.form_values), "18" + ) def test_ddageatdiagnosis(self): - self.form_values = {'DateOfDiagnosis': ""} - self.assertEqual(calculated_functions.DDAgeAtDiagnosis(self.patient_values, self.form_values), 'NaN') - self.form_values = {'DateOfDiagnosis': '2019-05-01'} - self.assertEqual(calculated_functions.DDAgeAtDiagnosis(self.patient_values, self.form_values), '18') + self.form_values = {"DateOfDiagnosis": ""} + self.assertEqual( + calculated_functions.DDAgeAtDiagnosis( + self.patient_values, self.form_values + ), + "NaN", + ) + self.form_values = {"DateOfDiagnosis": "2019-05-01"} + self.assertEqual( + calculated_functions.DDAgeAtDiagnosis( + self.patient_values, self.form_values + ), + "18", + ) def test_poemscore(self): - self.form_values = {'poemQ1': "", 'poemQ2': "", 'poemQ3': "", 'poemQ4': "", 'poemQ5': "", 'poemQ6': "", - 'poemQ7': ""} - self.assertEqual(calculated_functions.poemScore(self.patient_values, self.form_values), 'UNSCORED') - self.form_values = {'poemQ1': "", 'poemQ2': "", 'poemQ3': "1to2Days", 'poemQ4': "1to2Days", - 'poemQ5': "1to2Days", 'poemQ6': "1to2Days", 'poemQ7': "1to2Days"} - self.assertEqual(calculated_functions.poemScore(self.patient_values, self.form_values), 'UNSCORED') - self.form_values = {'poemQ1': "", 'poemQ2': "NoDays", 'poemQ3': "NoDays", 'poemQ4': "NoDays", - 'poemQ5': "NoDays", 'poemQ6': "NoDays", 'poemQ7': "NoDays"} - self.assertEqual(calculated_functions.poemScore(self.patient_values, self.form_values), - '0 ( Clear or almost clear )') - self.form_values = {'poemQ1': "NoDays", 'poemQ2': "NoDays", 'poemQ3': "NoDays", 'poemQ4': "NoDays", - 'poemQ5': "NoDays", 'poemQ6': "NoDays", 'poemQ7': "NoDays"} - self.assertEqual(calculated_functions.poemScore(self.patient_values, self.form_values), - '0 ( Clear or almost clear )') - self.form_values = {'poemQ1': "NoDays", 'poemQ2': "1to2Days", 'poemQ3': "1to2Days", 'poemQ4': "1to2Days", - 'poemQ5': "1to2Days", 'poemQ6': "1to2Days", 'poemQ7': "1to2Days"} - self.assertEqual(calculated_functions.poemScore(self.patient_values, self.form_values), '6 ( Mild eczema )') - self.form_values = {'poemQ1': "EveryDay", 'poemQ2': "EveryDay", 'poemQ3': "EveryDay", 'poemQ4': "EveryDay", - 'poemQ5': "EveryDay", 'poemQ6': "EveryDay", 'poemQ7': "EveryDay"} - self.assertEqual(calculated_functions.poemScore( - self.patient_values, self.form_values), '28 ( Very severe eczema )') + self.form_values = { + "poemQ1": "", + "poemQ2": "", + "poemQ3": "", + "poemQ4": "", + "poemQ5": "", + "poemQ6": "", + "poemQ7": "", + } + self.assertEqual( + calculated_functions.poemScore(self.patient_values, self.form_values), + "UNSCORED", + ) + self.form_values = { + "poemQ1": "", + "poemQ2": "", + "poemQ3": "1to2Days", + "poemQ4": "1to2Days", + "poemQ5": "1to2Days", + "poemQ6": "1to2Days", + "poemQ7": "1to2Days", + } + self.assertEqual( + calculated_functions.poemScore(self.patient_values, self.form_values), + "UNSCORED", + ) + self.form_values = { + "poemQ1": "", + "poemQ2": "NoDays", + "poemQ3": "NoDays", + "poemQ4": "NoDays", + "poemQ5": "NoDays", + "poemQ6": "NoDays", + "poemQ7": "NoDays", + } + self.assertEqual( + calculated_functions.poemScore(self.patient_values, self.form_values), + "0 ( Clear or almost clear )", + ) + self.form_values = { + "poemQ1": "NoDays", + "poemQ2": "NoDays", + "poemQ3": "NoDays", + "poemQ4": "NoDays", + "poemQ5": "NoDays", + "poemQ6": "NoDays", + "poemQ7": "NoDays", + } + self.assertEqual( + calculated_functions.poemScore(self.patient_values, self.form_values), + "0 ( Clear or almost clear )", + ) + self.form_values = { + "poemQ1": "NoDays", + "poemQ2": "1to2Days", + "poemQ3": "1to2Days", + "poemQ4": "1to2Days", + "poemQ5": "1to2Days", + "poemQ6": "1to2Days", + "poemQ7": "1to2Days", + } + self.assertEqual( + calculated_functions.poemScore(self.patient_values, self.form_values), + "6 ( Mild eczema )", + ) + self.form_values = { + "poemQ1": "EveryDay", + "poemQ2": "EveryDay", + "poemQ3": "EveryDay", + "poemQ4": "EveryDay", + "poemQ5": "EveryDay", + "poemQ6": "EveryDay", + "poemQ7": "EveryDay", + } + self.assertEqual( + calculated_functions.poemScore(self.patient_values, self.form_values), + "28 ( Very severe eczema )", + ) class AbnormalityRulesTestCase(TestCase): - def setUp(self): self.cde = CommonDataElement() self.cde.datatype = "integer" @@ -209,20 +328,28 @@ def test_float(self): def test_assignment_rule(self): self.cde.abnormality_condition = "x = 10" - self.assertRaises(InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9) + self.assertRaises( + InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9 + ) def test_multiple_rules_same_line(self): self.cde.abnormality_condition = "x < 2 x > 100" - self.assertRaises(InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9) + self.assertRaises( + InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9 + ) def test_integer_range(self): self.cde.abnormality_condition = "2 < x < 10" - self.assertRaises(InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9) + self.assertRaises( + InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9 + ) def test_float_range(self): self.cde.datatype = "float" self.cde.abnormality_condition = "2.0 < x <= 10.0" - self.assertRaises(InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9) + self.assertRaises( + InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9 + ) def test_unsupported_datatype(self): self.cde.datatype = "boolean" @@ -255,21 +382,27 @@ def test_minus_float_equality(self): def test_bad_float(self): self.cde.datatype = "float" self.cde.abnormality_condition = "x == 10." - self.assertRaises(InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9) + self.assertRaises( + InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9 + ) def test_second_bad_float(self): self.cde.datatype = "float" self.cde.abnormality_condition = "x == 10.1." - self.assertRaises(InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9) + self.assertRaises( + InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9 + ) def test_third_bad_float(self): self.cde.datatype = "float" self.cde.abnormality_condition = "x == 10.1.2" - self.assertRaises(InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9) + self.assertRaises( + InvalidAbnormalityConditionError, self.cde.is_abnormal, value=9 + ) def test_string_equality(self): self.cde.datatype = "range" - self.cde.abnormality_condition = "x == \"10\"" + self.cde.abnormality_condition = 'x == "10"' self.assertFalse(self.cde.is_abnormal(10)) self.assertTrue(self.cde.is_abnormal("10")) self.assertFalse(self.cde.is_abnormal("11")) @@ -314,7 +447,7 @@ def test_in_float_list(self): def test_in_string_list(self): self.cde.datatype = "range" - self.cde.abnormality_condition = "x in [\"10\",\"20\",\"30\"]" + self.cde.abnormality_condition = 'x in ["10","20","30"]' self.assertFalse(self.cde.is_abnormal(10)) self.assertTrue(self.cde.is_abnormal("10")) self.assertTrue(self.cde.is_abnormal("20")) @@ -330,38 +463,217 @@ def test_multiple_rules(self): class MigrateCDESTestCase(TestCase): - def setUp(self): # source section with multi-value - self.input_data = {'forms': [{'name': 'ClinicalData', 'sections': [{'cdes': [{'code': 'CDEIndexOrRelative', 'value': 'fh_is_index'}, {'code': 'FHconsentDate', 'value': None}, {'code': 'DateOfAssessment', 'value': '2018-07-02'}, {'code': 'fhAgeAtConsent', 'value': 'NaN'}, {'code': 'fhAgeAtAssessment', 'value': '0'}], 'code': 'fhDateSection', 'allow_multiple': False}, {'cdes': [{'code': 'CDEfhDutchLipidClinicNetwork', 'value': ''}, {'code': 'CDE00024', 'value': ''}], 'code': 'SEC0007', 'allow_multiple': False}, {'cdes': [{'code': 'CDE00003', 'value': 'fh2_n'}, {'code': 'FHFamilyHistoryChild', 'value': 'fh_n'}, {'code': 'CDE00004', 'value': 'fh2_n'}, {'code': 'FHFamHistTendonXanthoma', 'value': 'fh2_n'}, {'code': 'FHFamHistArcusCornealis', 'value': 'fh2_n'}], 'code': 'SEC0002', 'allow_multiple': False}, {'cdes': [{'code': 'CDE00011', 'value': 'fhpremcvd_no'}, {'code': 'FHMyocardialInfarction', 'value': ''}, {'code': 'FHAgeAtMI', 'value': None}, {'code': 'FHCoronaryRevasc', 'value': ''}, {'code': 'FHAgeAtCV', 'value': None}, {'code': 'FHPersHistCerebralVD', 'value': 'fh2_n'}, {'code': 'FHAorticValveDisease', 'value': ''}, {'code': 'FHSupravalvularDisease', 'value': ''}, {'code': 'FHPremNonCoronary', 'value': ''}], 'code': 'SEC0004', 'allow_multiple': False}, {'cdes': [{'code': 'CDE00001', 'value': 'n_'}, {'code': 'CDE00002', 'value': 'n_'}, {'code': 'FHXanthelasma', 'value': ''}], 'code': 'SEC0001', 'allow_multiple': False}, {'cdes': [{'code': 'CDE00013', 'value': None}, {'code': 'CDE00019', 'value': None}, {'code': 'PlasmaLipidTreatment', 'value': ''}, {'code': 'LDLCholesterolAdjTreatment', 'value': 'NaN'}], 'code': 'FHLDLforFHScore', 'allow_multiple': False}, {'cdes': [[{'code': 'FHLipidProfileUntreatedDate', 'value': '2018-07-02'}, {'code': 'CDE00012', 'value': 2.0}, {'code': 'FHLLDLconc', 'value': 2.0}, {'code': 'CDE00014', 'value': 2.0}, {'code': 'CDE00015', 'value': 2.0}, {'code': 'FHApoB', 'value': 2.0}, {'code': 'CDE00016', 'value': 2.0}, {'code': 'FHAST', 'value': 2}, {'code': 'FHALT', 'value': 2}, {'code': 'FHCK', 'value': 2}, {'code': 'FHCreatinine', 'value': 2}, {'code': 'FHCRP', 'value': 2.0}, { - 'code': 'PlasmaLipidTreatmentNone', 'value': 'Fluvastatin40'}, {'code': 'CDEfhOtherIntolerantDrug', 'value': ''}, {'code': 'FHCompliance', 'value': ''}], [{'code': 'FHLipidProfileUntreatedDate', 'value': '2018-07-02'}, {'code': 'CDE00012', 'value': 2.5}, {'code': 'FHLLDLconc', 'value': 2.5}, {'code': 'CDE00014', 'value': 2.5}, {'code': 'CDE00015', 'value': 2.5}, {'code': 'FHApoB', 'value': 2.5}, {'code': 'CDE00016', 'value': 2.5}, {'code': 'FHAST', 'value': 2}, {'code': 'FHALT', 'value': 2}, {'code': 'FHCK', 'value': 2}, {'code': 'FHCreatinine', 'value': 2}, {'code': 'FHCRP', 'value': 2.0}, {'code': 'PlasmaLipidTreatmentNone', 'value': 'Fluvastatin/Ezetimibe20'}, {'code': 'CDEfhOtherIntolerantDrug', 'value': ''}, {'code': 'FHCompliance', 'value': ''}]], 'code': 'SEC0005', 'allow_multiple': True}, {'cdes': [{'code': 'CDE00005', 'value': ''}, {'code': 'FHPackYears', 'value': None}, {'code': 'FHAlcohol', 'value': ''}, {'code': 'FHHypertriglycerd', 'value': ''}, {'code': 'CDE00006', 'value': ''}, {'code': 'CDE00008', 'value': None}, {'code': 'CDE00009', 'value': None}, {'code': 'FHHeartRate', 'value': None}, {'code': 'CDE00007', 'value': ''}, {'code': 'CDE00010', 'value': None}, {'code': 'HbA1c', 'value': None}, {'code': 'ChronicKidneyDisease', 'value': ''}, {'code': 'FHeGFR', 'value': ''}, {'code': 'FHHypothyroidism', 'value': ''}, {'code': 'FHTSH', 'value': None}, {'code': 'FHHepaticSteatosis', 'value': ''}, {'code': 'FHObesity', 'value': ''}, {'code': 'CDEHeight', 'value': None}, {'code': 'CDEWeight', 'value': None}, {'code': 'CDEBMI', 'value': 'NaN'}, {'code': 'FHWaistCirc', 'value': None}, {'code': 'FHCVDOther', 'value': 'test2 ddddddddd'}], 'code': 'SEC0003', 'allow_multiple': False}, {'cdes': [[{'code': 'FHClinicalTrialName', 'value': ''}, {'code': 'FHTrialLength', 'value': None}, {'code': 'FHTrialSTartDate', 'value': None}, {'code': 'FHTrialStatus', 'value': ''}]], 'code': 'FHClinicalTrials', 'allow_multiple': True}]}], 'django_id': 3, 'timestamp': '2018-07-19T15:14:04.887064', 'context_id': 3, 'django_model': 'Patient', 'ClinicalData_timestamp': '2018-07-19T15:14:04.887064'} + self.input_data = { + "forms": [ + { + "name": "ClinicalData", + "sections": [ + { + "cdes": [ + {"code": "CDEIndexOrRelative", "value": "fh_is_index"}, + {"code": "FHconsentDate", "value": None}, + {"code": "DateOfAssessment", "value": "2018-07-02"}, + {"code": "fhAgeAtConsent", "value": "NaN"}, + {"code": "fhAgeAtAssessment", "value": "0"}, + ], + "code": "fhDateSection", + "allow_multiple": False, + }, + { + "cdes": [ + {"code": "CDEfhDutchLipidClinicNetwork", "value": ""}, + {"code": "CDE00024", "value": ""}, + ], + "code": "SEC0007", + "allow_multiple": False, + }, + { + "cdes": [ + {"code": "CDE00003", "value": "fh2_n"}, + {"code": "FHFamilyHistoryChild", "value": "fh_n"}, + {"code": "CDE00004", "value": "fh2_n"}, + {"code": "FHFamHistTendonXanthoma", "value": "fh2_n"}, + {"code": "FHFamHistArcusCornealis", "value": "fh2_n"}, + ], + "code": "SEC0002", + "allow_multiple": False, + }, + { + "cdes": [ + {"code": "CDE00011", "value": "fhpremcvd_no"}, + {"code": "FHMyocardialInfarction", "value": ""}, + {"code": "FHAgeAtMI", "value": None}, + {"code": "FHCoronaryRevasc", "value": ""}, + {"code": "FHAgeAtCV", "value": None}, + {"code": "FHPersHistCerebralVD", "value": "fh2_n"}, + {"code": "FHAorticValveDisease", "value": ""}, + {"code": "FHSupravalvularDisease", "value": ""}, + {"code": "FHPremNonCoronary", "value": ""}, + ], + "code": "SEC0004", + "allow_multiple": False, + }, + { + "cdes": [ + {"code": "CDE00001", "value": "n_"}, + {"code": "CDE00002", "value": "n_"}, + {"code": "FHXanthelasma", "value": ""}, + ], + "code": "SEC0001", + "allow_multiple": False, + }, + { + "cdes": [ + {"code": "CDE00013", "value": None}, + {"code": "CDE00019", "value": None}, + {"code": "PlasmaLipidTreatment", "value": ""}, + {"code": "LDLCholesterolAdjTreatment", "value": "NaN"}, + ], + "code": "FHLDLforFHScore", + "allow_multiple": False, + }, + { + "cdes": [ + [ + { + "code": "FHLipidProfileUntreatedDate", + "value": "2018-07-02", + }, + {"code": "CDE00012", "value": 2.0}, + {"code": "FHLLDLconc", "value": 2.0}, + {"code": "CDE00014", "value": 2.0}, + {"code": "CDE00015", "value": 2.0}, + {"code": "FHApoB", "value": 2.0}, + {"code": "CDE00016", "value": 2.0}, + {"code": "FHAST", "value": 2}, + {"code": "FHALT", "value": 2}, + {"code": "FHCK", "value": 2}, + {"code": "FHCreatinine", "value": 2}, + {"code": "FHCRP", "value": 2.0}, + { + "code": "PlasmaLipidTreatmentNone", + "value": "Fluvastatin40", + }, + {"code": "CDEfhOtherIntolerantDrug", "value": ""}, + {"code": "FHCompliance", "value": ""}, + ], + [ + { + "code": "FHLipidProfileUntreatedDate", + "value": "2018-07-02", + }, + {"code": "CDE00012", "value": 2.5}, + {"code": "FHLLDLconc", "value": 2.5}, + {"code": "CDE00014", "value": 2.5}, + {"code": "CDE00015", "value": 2.5}, + {"code": "FHApoB", "value": 2.5}, + {"code": "CDE00016", "value": 2.5}, + {"code": "FHAST", "value": 2}, + {"code": "FHALT", "value": 2}, + {"code": "FHCK", "value": 2}, + {"code": "FHCreatinine", "value": 2}, + {"code": "FHCRP", "value": 2.0}, + { + "code": "PlasmaLipidTreatmentNone", + "value": "Fluvastatin/Ezetimibe20", + }, + {"code": "CDEfhOtherIntolerantDrug", "value": ""}, + {"code": "FHCompliance", "value": ""}, + ], + ], + "code": "SEC0005", + "allow_multiple": True, + }, + { + "cdes": [ + {"code": "CDE00005", "value": ""}, + {"code": "FHPackYears", "value": None}, + {"code": "FHAlcohol", "value": ""}, + {"code": "FHHypertriglycerd", "value": ""}, + {"code": "CDE00006", "value": ""}, + {"code": "CDE00008", "value": None}, + {"code": "CDE00009", "value": None}, + {"code": "FHHeartRate", "value": None}, + {"code": "CDE00007", "value": ""}, + {"code": "CDE00010", "value": None}, + {"code": "HbA1c", "value": None}, + {"code": "ChronicKidneyDisease", "value": ""}, + {"code": "FHeGFR", "value": ""}, + {"code": "FHHypothyroidism", "value": ""}, + {"code": "FHTSH", "value": None}, + {"code": "FHHepaticSteatosis", "value": ""}, + {"code": "FHObesity", "value": ""}, + {"code": "CDEHeight", "value": None}, + {"code": "CDEWeight", "value": None}, + {"code": "CDEBMI", "value": "NaN"}, + {"code": "FHWaistCirc", "value": None}, + {"code": "FHCVDOther", "value": "test2 ddddddddd"}, + ], + "code": "SEC0003", + "allow_multiple": False, + }, + { + "cdes": [ + [ + {"code": "FHClinicalTrialName", "value": ""}, + {"code": "FHTrialLength", "value": None}, + {"code": "FHTrialSTartDate", "value": None}, + {"code": "FHTrialStatus", "value": ""}, + ] + ], + "code": "FHClinicalTrials", + "allow_multiple": True, + }, + ], + } + ], + "django_id": 3, + "timestamp": "2018-07-19T15:14:04.887064", + "context_id": 3, + "django_model": "Patient", + "ClinicalData_timestamp": "2018-07-19T15:14:04.887064", + } def test_migrate_cdes_clinicaldata(self): - out_data = transform_cd_dict(["CDE00016", "FHCRP"], "SEC0005", "SEC0003", self.input_data) + out_data = transform_cd_dict( + ["CDE00016", "FHCRP"], "SEC0005", "SEC0003", self.input_data + ) cd_form = get_cd_form(out_data) s_section = get_section("SEC0005", cd_form) t_section = get_section("SEC0003", cd_form) def check_cde_in_section(cde_code, section_dict): - for item in section_dict['cdes']: + for item in section_dict["cdes"]: # Check if section is multiple or not if isinstance(item, list): cdes_list = item for cde_dict_item in cdes_list: - if cde_dict_item['code'] == cde_code: + if cde_dict_item["code"] == cde_code: return True else: cde_dict_item = item - if cde_dict_item['code'] == cde_code: + if cde_dict_item["code"] == cde_code: return True - assert not check_cde_in_section("CDE00016", s_section), "CDE00016 is still in source section" - assert check_cde_in_section("CDE00016", t_section), "CDE00016 is not in target section found" + assert not check_cde_in_section( + "CDE00016", s_section + ), "CDE00016 is still in source section" + assert check_cde_in_section( + "CDE00016", t_section + ), "CDE00016 is not in target section found" - assert not check_cde_in_section("FHCRP", s_section), "FHCRP is still in source section" - assert check_cde_in_section("FHCRP", t_section), "FHCRP is not in target section found" + assert not check_cde_in_section( + "FHCRP", s_section + ), "FHCRP is still in source section" + assert check_cde_in_section( + "FHCRP", t_section + ), "FHCRP is not in target section found" - assert check_cde_in_section("FHCompliance", s_section), "FHCompliance has been moved." + assert check_cde_in_section( + "FHCompliance", s_section + ), "FHCompliance has been moved." def mock_messages(): @@ -369,11 +681,13 @@ def mock_messages(): This switches off messaging, which requires request middleware which doesn't exist in RequestFactory requests. """ + def mock_add_message(request, level, msg, *args, **kwargs): logger.info("Django %s Message: %s" % (level, msg)) def mock_error(request, msg, *args, **kwargs): logger.info("Django Error Message: %s" % msg) + messages.add_message = mock_add_message messages.error = mock_error @@ -382,7 +696,6 @@ def mock_error(request, msg, *args, **kwargs): class SectionFiller(object): - def __init__(self, form_filler, section): self.__dict__["form_filler"] = form_filler self.__dict__["section"] = section @@ -393,14 +706,15 @@ def __setattr__(self, key, value): class FormFiller(object): - def __init__(self, registry_form): self.form = registry_form self.section_codes = self.form.get_sections() self.data = {} def add_data(self, section, cde_code, value): - key = settings.FORM_SECTION_DELIMITER.join([self.form.name, section.code, cde_code]) + key = settings.FORM_SECTION_DELIMITER.join( + [self.form.name, section.code, cde_code] + ) self.data.update({key: value}) def __getattr__(self, item): @@ -411,18 +725,20 @@ def __getattr__(self, item): class RDRFTestCase(TestCase): - databases = {'default', 'clinical'} - fixtures = ['testing_auth', 'testing_users', 'testing_rdrf'] + databases = {"default", "clinical"} + fixtures = ["testing_auth", "testing_users", "testing_rdrf"] class TestFormPermissions(RDRFTestCase): - def test_form_without_groups_restriction_is_open(self): from registry.groups.models import CustomUser - fh = Registry.objects.get(code='fh') + + fh = Registry.objects.get(code="fh") for form in fh.forms: - assert form.open, "%s has no group restriction so should be open but is not" % form.name + assert form.open, ( + "%s has no group restriction so should be open but is not" % form.name + ) for user in CustomUser.objects.all(): user.registry.add(fh) user.save() @@ -431,8 +747,9 @@ def test_form_without_groups_restriction_is_open(self): def test_user_in_wrong_group_cant_view_form(self): from registry.groups.models import CustomUser from django.contrib.auth.models import Group - fh = Registry.objects.get(code='fh') - genetic_user = CustomUser.objects.get(username='genetic') + + fh = Registry.objects.get(code="fh") + genetic_user = CustomUser.objects.get(username="genetic") genetic_group, created = Group.objects.get_or_create(name="Genetic Staff") if created: genetic_group.save() @@ -447,7 +764,6 @@ def test_user_in_wrong_group_cant_view_form(self): class ExporterTestCase(RDRFTestCase): - def _get_cde_codes_from_registry_export_data(self, data): cde_codes = set([]) for form_map in data["forms"]: @@ -464,7 +780,6 @@ def _report_cde_diff(self, cde_set, cdeform_set): return "%s\n%s" % (a, b) def test_export_registry(self): - def test_key(key, data): assert key in data, "%s not in yaml export" % key @@ -472,50 +787,61 @@ def test_keys(keys, data): for key in keys: test_key(key, data) - self.registry = Registry.objects.get(code='fh') + self.registry = Registry.objects.get(code="fh") self.exporter = Exporter(self.registry) yaml_data, errors = self.exporter.export_yaml() assert isinstance(errors, list), "Expected errors list in exporter export_yaml" assert len(errors) == 0, "Expected zero errors instead got:%s" % errors - assert isinstance(yaml_data, str), "Expected yaml_data is string:%s" % type(yaml_data) + assert isinstance(yaml_data, str), "Expected yaml_data is string:%s" % type( + yaml_data + ) with open("/tmp/test.yaml", "w") as f: f.write(yaml_data) with open("/tmp/test.yaml") as f: data = yaml.load(f, Loader=yaml.FullLoader) - test_key('EXPORT_TYPE', data) - test_key('RDRF_VERSION', data) + test_key("EXPORT_TYPE", data) + test_key("RDRF_VERSION", data) assert data["EXPORT_TYPE"] == ExportType.REGISTRY_PLUS_CDES - assert 'cdes' in data, "Registry export should have cdes key" - assert 'pvgs' in data, "Registry export should have groups key" - assert data['code'] == 'fh', "Reg code fh not in export" - test_key('forms', data) - for form_map in data['forms']: - test_keys(['is_questionnaire', 'name', 'sections'], form_map) - for section_map in form_map['sections']: - test_keys(['code', - 'display_name', - 'elements', - 'allow_multiple', - 'extra'], - section_map) + assert "cdes" in data, "Registry export should have cdes key" + assert "pvgs" in data, "Registry export should have groups key" + assert data["code"] == "fh", "Reg code fh not in export" + test_key("forms", data) + for form_map in data["forms"]: + test_keys(["is_questionnaire", "name", "sections"], form_map) + for section_map in form_map["sections"]: + test_keys( + ["code", "display_name", "elements", "allow_multiple", "extra"], + section_map, + ) dummy_cde = CommonDataElement.objects.create() cde_fields = list(model_to_dict(dummy_cde).keys()) - for cde_map in data['cdes']: - assert isinstance( - cde_map, dict), "Expected cdes list should contain cde dictionaries: actual %s" % cde_map + for cde_map in data["cdes"]: + assert isinstance(cde_map, dict), ( + "Expected cdes list should contain cde dictionaries: actual %s" + % cde_map + ) for cde_field in cde_fields: - assert cde_field in cde_map, "Expected export of cde to contain field %s - it doesn't" % cde_field + assert cde_field in cde_map, ( + "Expected export of cde to contain field %s - it doesn't" + % cde_field + ) for pvg_map in data["pvgs"]: assert "code" in pvg_map, "Expected group has code key: %s" % pvg_map assert "values" in pvg_map, "Expected group has values key: %s" % pvg_map for value_map in pvg_map["values"]: - assert "code" in value_map, "Expected value map to have code key %s" % value_map - assert "value" in value_map, "Expected value map to have value key %s" % value_map - assert "desc" in value_map, "Expected value map to have desc key %s" % value_map + assert "code" in value_map, ( + "Expected value map to have code key %s" % value_map + ) + assert "value" in value_map, ( + "Expected value map to have value key %s" % value_map + ) + assert "desc" in value_map, ( + "Expected value map to have desc key %s" % value_map + ) # consistency check set_of_cde_codes_in_cdes = set([cde_map["code"] for cde_map in data["cdes"]]) @@ -523,7 +849,10 @@ def test_keys(keys, data): generic_cdes = set(self.registry.generic_cdes) assert set__of_cdes_in_forms == ( - set_of_cde_codes_in_cdes - generic_cdes), "Consistency check failed:\n%s" % self._report_cde_diff(set_of_cde_codes_in_cdes, set__of_cdes_in_forms) + set_of_cde_codes_in_cdes - generic_cdes + ), "Consistency check failed:\n%s" % self._report_cde_diff( + set_of_cde_codes_in_cdes, set__of_cdes_in_forms + ) # consistency of values in groups - whats exported is whats there @@ -533,8 +862,14 @@ def test_keys(keys, data): values_in_export.add(value_map["code"]) values_in_db = self._get_values_for_group(pvg_map["code"]) - msg = "%s:export %s\ndb: %s" % (pvg_map["code"], values_in_export, values_in_db) - assert values_in_export == values_in_db, "Values in export for group %s don't match what's in db: %s" % msg + msg = "%s:export %s\ndb: %s" % ( + pvg_map["code"], + values_in_export, + values_in_db, + ) + assert values_in_export == values_in_db, ( + "Values in export for group %s don't match what's in db: %s" % msg + ) def _get_values_for_group(self, group_code): values = set([]) @@ -545,11 +880,12 @@ def _get_values_for_group(self, group_code): class ImporterTestCase(TestCase): - def _get_yaml_file(self): this_dir = os.path.dirname(__file__) logger.info("tests.py dir = %s" % this_dir) - test_yaml = os.path.abspath(os.path.join(this_dir, "..", "..", "fixtures", "exported_fh_registry.yaml")) + test_yaml = os.path.abspath( + os.path.join(this_dir, "..", "..", "fixtures", "exported_fh_registry.yaml") + ) logger.info("full path to test yaml = %s" % test_yaml) return test_yaml @@ -564,12 +900,12 @@ def test_importer(self): class FormTestCase(RDRFTestCase): - def setUp(self): super(FormTestCase, self).setUp() - self.registry = Registry.objects.get(code='fh') - self.wg, created = WorkingGroup.objects.get_or_create(name="testgroup", - registry=self.registry) + self.registry = Registry.objects.get(code="fh") + self.wg, created = WorkingGroup.objects.get_or_create( + name="testgroup", registry=self.registry + ) if created: self.wg.save() @@ -581,7 +917,8 @@ def setUp(self): self.user.save() self.state, created = State.objects.get_or_create( - short_name="WA", name="Western Australia") + short_name="WA", name="Western Australia" + ) self.state.save() self.create_sections() @@ -596,7 +933,13 @@ def setUp(self): self.address_type, created = AddressType.objects.get_or_create(pk=1) self.patient_address, created = PatientAddress.objects.get_or_create( - address='1 Line St', address_type=self.address_type, suburb='Neverland', state=self.state.short_name, postcode='1111', patient=self.patient) + address="1 Line St", + address_type=self.address_type, + suburb="Neverland", + state=self.state.short_name, + postcode="1111", + patient=self.patient, + ) self.patient_address.save() self.request_factory = RequestFactory() @@ -614,11 +957,14 @@ def create_patient(self): context_manager = RDRFContextManager(self.registry) self.default_context = context_manager.get_or_create_default_context( - p, new_patient=True) + p, new_patient=True + ) return p - def create_section(self, code, display_name, elements, allow_multiple=False, extra=1): + def create_section( + self, code, display_name, elements, allow_multiple=False, extra=1 + ): section, created = Section.objects.get_or_create(code=code) section.display_name = display_name section.elements = ",".join(elements) @@ -629,8 +975,9 @@ def create_section(self, code, display_name, elements, allow_multiple=False, ext def create_form(self, name, sections, is_questionnnaire=False): sections = ",".join([section.code for section in sections]) - form, created = RegistryForm.objects.get_or_create(name=name, registry=self.registry, - defaults={'sections': sections}) + form, created = RegistryForm.objects.get_or_create( + name=name, registry=self.registry, defaults={"sections": sections} + ) if not created: form.sections = sections form.name = name @@ -659,12 +1006,15 @@ def _create_request(self, form_obj, form_data): def create_sections(self): # "simple" sections ( no files or multi-allowed sections self.sectionA = self.create_section( - "sectionA", "Simple Section A", ["CDEName", "CDEAge"]) + "sectionA", "Simple Section A", ["CDEName", "CDEAge"] + ) self.sectionB = self.create_section( - "sectionB", "Simple Section B", ["CDEHeight", "CDEWeight", "CDEBMI"]) + "sectionB", "Simple Section B", ["CDEHeight", "CDEWeight", "CDEBMI"] + ) # A multi allowed section with no file cdes self.sectionC = self.create_section( - "sectionC", "MultiSection No Files Section C", ["CDEName", "CDEAge"], True) + "sectionC", "MultiSection No Files Section C", ["CDEName", "CDEAge"], True + ) # A multi allowed section with a file CDE # self.sectionD = self.create_section("sectionD", "MultiSection With Files D", ["CDEName", ""]) @@ -702,19 +1052,18 @@ def test_patient_archiving(self): # test can archive prop on CustomUser # by default genetic user can't delete as they don't have patient delete permission - genetic_user = CustomUser.objects.get(username='genetic') + genetic_user = CustomUser.objects.get(username="genetic") self.assertFalse(genetic_user.can_archive) # admin can by default - admin_user = CustomUser.objects.get(username='admin') + admin_user = CustomUser.objects.get(username="admin") self.assertTrue(admin_user.can_archive) # clinical can't either - clinical_user = CustomUser.objects.get(username='clinical') + clinical_user = CustomUser.objects.get(username="clinical") self.assertFalse(clinical_user.can_archive) def test_simple_form(self): - def form_value(form_name, section_code, cde_code, mongo_record): for form in mongo_record["forms"]: if form["name"] == form_name: @@ -740,7 +1089,8 @@ def form_value(form_name, section_code, cde_code, mongo_record): self.registry.code, self.simple_form.pk, self.patient.pk, - self.default_context.pk) + self.default_context.pk, + ) collection = ClinicalData.objects.collection(self.registry.code, "cdes") context_id = self.patient.default_context(self.registry).id @@ -752,61 +1102,71 @@ def form_value(form_name, section_code, cde_code, mongo_record): assert isinstance(mongo_record["forms"], list) assert len(mongo_record["forms"]) == 1, "Expected one form" - the_form = mongo_record['forms'][0] + the_form = mongo_record["forms"][0] assert isinstance(the_form, dict), "form data should be a dictionary" assert "sections" in the_form, "A form should have a sections key" assert isinstance(the_form["sections"], list), "Sections should be in a list" # we've only written data for 2 sections assert len(the_form["sections"]) == 2, "expected 2 sections got %s" % len( - the_form["sections"]) + the_form["sections"] + ) for section_dict in the_form["sections"]: assert isinstance(section_dict, dict), "sections should be dictioanaries" assert "cdes" in section_dict, "sections should have a cdes key" - assert isinstance(section_dict["cdes"], list), "sections cdes key should be a list" + assert isinstance( + section_dict["cdes"], list + ), "sections cdes key should be a list" for cde in section_dict["cdes"]: assert isinstance(cde, dict), "cde should be a dict" assert "code" in cde, "cde dictionary should have a code key" assert "value" in cde, "cde dictionary should have a value key" - assert form_value( - self.simple_form.name, - self.sectionA.code, - "CDEName", - mongo_record) == "Fred" - assert form_value( - self.simple_form.name, - self.sectionA.code, - "CDEAge", - mongo_record) == 20 - assert form_value( - self.simple_form.name, - self.sectionB.code, - "CDEHeight", - mongo_record) == 1.73 - assert form_value( - self.simple_form.name, - self.sectionB.code, - "CDEWeight", - mongo_record) == 88.23 + assert ( + form_value( + self.simple_form.name, self.sectionA.code, "CDEName", mongo_record + ) + == "Fred" + ) + assert ( + form_value( + self.simple_form.name, self.sectionA.code, "CDEAge", mongo_record + ) + == 20 + ) + assert ( + form_value( + self.simple_form.name, self.sectionB.code, "CDEHeight", mongo_record + ) + == 1.73 + ) + assert ( + form_value( + self.simple_form.name, self.sectionB.code, "CDEWeight", mongo_record + ) + == 88.23 + ) class LongitudinalTestCase(FormTestCase): - def test_simple_form(self): super(LongitudinalTestCase, self).test_simple_form() # should have one snapshot qs = ClinicalData.objects.collection(self.registry.code, "history") snapshots = qs.find(self.patient, record_type="snapshot").data() - self.assertGreater(len(snapshots), 0, - "History should be filled in on save") + self.assertGreater(len(snapshots), 0, "History should be filled in on save") for snapshot in snapshots: - self.assertIn("record", snapshot, - "Each snapshot should have a record field") - self.assertIn("timestamp", snapshot, - "Each snapshot should have a timestamp field") - self.assertIn("forms", snapshot["record"], - "Each snapshot should record dict contain a forms field") + self.assertIn( + "record", snapshot, "Each snapshot should have a record field" + ) + self.assertIn( + "timestamp", snapshot, "Each snapshot should have a timestamp field" + ) + self.assertIn( + "forms", + snapshot["record"], + "Each snapshot should record dict contain a forms field", + ) class DeCamelcaseTestCase(TestCase): @@ -823,9 +1183,9 @@ def test_decamelcase_first_upper(self): class DateFunctionsTestCase(TestCase): - def test_number_of_days_function(self): from rdrf.forms.fields.calculated_functions import number_of_days + r1 = number_of_days("2020-03-23", "2020-03-25") r2 = number_of_days("", "2020-03-25") r3 = number_of_days("hello", "2020-03-25") @@ -847,65 +1207,124 @@ class TimeStripperTestCase(TestCase): def setUp(self): super(TimeStripperTestCase, self).setUp() - self.data_with_date_cdes = {'django_model': 'Patient', - 'ClinicalData_timestamp': '2017-02-14T10:23:10.601182', - 'context_id': 4, - 'django_id': 3, - 'forms': [{'name': 'ClinicalData', - 'sections': [{'code': 'fhDateSection', 'allow_multiple': False, - 'cdes': [{'value': 'fh_is_index', 'code': 'CDEIndexOrRelative'}, - {'value': '1972-06-15T00:00:00.00', - 'code': 'DateOfAssessment'}, - {'value': '2015-01-05T10:23:10.601182', 'code': 'FHconsentDate'}]}, - {'code': 'SEC0007', 'allow_multiple': False, - 'cdes': [{'value': '', 'code': 'CDE00024'}, - {'value': '', 'code': 'CDEfhDutchLipidClinicNetwork'}]}]}]} + self.data_with_date_cdes = { + "django_model": "Patient", + "ClinicalData_timestamp": "2017-02-14T10:23:10.601182", + "context_id": 4, + "django_id": 3, + "forms": [ + { + "name": "ClinicalData", + "sections": [ + { + "code": "fhDateSection", + "allow_multiple": False, + "cdes": [ + {"value": "fh_is_index", "code": "CDEIndexOrRelative"}, + { + "value": "1972-06-15T00:00:00.00", + "code": "DateOfAssessment", + }, + { + "value": "2015-01-05T10:23:10.601182", + "code": "FHconsentDate", + }, + ], + }, + { + "code": "SEC0007", + "allow_multiple": False, + "cdes": [ + {"value": "", "code": "CDE00024"}, + {"value": "", "code": "CDEfhDutchLipidClinicNetwork"}, + ], + }, + ], + } + ], + } self.copy_of_initial_data = deepcopy(self.data_with_date_cdes) - self.data_without_date_cdes = {'django_model': 'Patient', - 'ClinicalData_timestamp': '2017-02-14T10:23:10.601182', - 'context_id': 40, - 'django_id': 300, - 'forms': [{'name': 'ClinicalData', - 'sections': [{'code': 'fhDateSection', 'allow_multiple': False, - 'cdes': [{'value': 'fh_is_index', 'code': 'CDEIndexOrRelative'}]}, - {'code': 'SEC0007', 'allow_multiple': False, - 'cdes': [{'value': '', 'code': 'CDE00024'}, - {'value': '', 'code': 'CDEfhDutchLipidClinicNetwork'}]}]}]} + self.data_without_date_cdes = { + "django_model": "Patient", + "ClinicalData_timestamp": "2017-02-14T10:23:10.601182", + "context_id": 40, + "django_id": 300, + "forms": [ + { + "name": "ClinicalData", + "sections": [ + { + "code": "fhDateSection", + "allow_multiple": False, + "cdes": [ + {"value": "fh_is_index", "code": "CDEIndexOrRelative"} + ], + }, + { + "code": "SEC0007", + "allow_multiple": False, + "cdes": [ + {"value": "", "code": "CDE00024"}, + {"value": "", "code": "CDEfhDutchLipidClinicNetwork"}, + ], + }, + ], + } + ], + } self.m1 = FakeClinicalData(1, self.data_with_date_cdes) self.m2 = FakeClinicalData(2, self.data_without_date_cdes) self.ts = TimeStripper([self.m1, self.m2]) self.ts.test_mode = True - self.ts.date_cde_codes = ['DateOfAssessment', 'FHconsentDate'] + self.ts.date_cde_codes = ["DateOfAssessment", "FHconsentDate"] def test_timestripper(self): expected_date_of_assessment = "1972-06-15" expected_fh_consent_date = "2015-01-05" expected = [expected_date_of_assessment, expected_fh_consent_date] - clinicaldata_timestamp_before = self.data_with_date_cdes["ClinicalData_timestamp"] - fh_index_before = self.data_with_date_cdes["forms"][0]["sections"][0]["cdes"][0]["value"] + clinicaldata_timestamp_before = self.data_with_date_cdes[ + "ClinicalData_timestamp" + ] + fh_index_before = self.data_with_date_cdes["forms"][0]["sections"][0]["cdes"][ + 0 + ]["value"] self.ts.forward() - clinicaldata_timestamp_after = self.data_with_date_cdes["ClinicalData_timestamp"] - fh_index_after = self.data_with_date_cdes["forms"][0]["sections"][0]["cdes"][0]["value"] + clinicaldata_timestamp_after = self.data_with_date_cdes[ + "ClinicalData_timestamp" + ] + fh_index_after = self.data_with_date_cdes["forms"][0]["sections"][0]["cdes"][0][ + "value" + ] - self.assertTrue(self.ts.converted_date_cdes == expected, - "Expected %s Actual %s" % (expected, self.ts.converted_date_cdes)) + self.assertTrue( + self.ts.converted_date_cdes == expected, + "Expected %s Actual %s" % (expected, self.ts.converted_date_cdes), + ) value1 = self.data_with_date_cdes["forms"][0]["sections"][0]["cdes"][1]["value"] - self.assertTrue(value1 == expected_date_of_assessment, - "DateOfAssessment value not modified by TimeStripper") + self.assertTrue( + value1 == expected_date_of_assessment, + "DateOfAssessment value not modified by TimeStripper", + ) value2 = self.data_with_date_cdes["forms"][0]["sections"][0]["cdes"][2]["value"] - self.assertTrue(value2 == expected_fh_consent_date, - "FHConsentdate value not modified by TimeStripper") + self.assertTrue( + value2 == expected_fh_consent_date, + "FHConsentdate value not modified by TimeStripper", + ) - self.assertTrue(clinicaldata_timestamp_after == clinicaldata_timestamp_before, - "Timestamps which are not date cdes should not be affected by TimeStripper") - self.assertTrue(fh_index_before == fh_index_after, - "Non date cdes should not be affected by TimeStripper") + self.assertTrue( + clinicaldata_timestamp_after == clinicaldata_timestamp_before, + "Timestamps which are not date cdes should not be affected by TimeStripper", + ) + self.assertTrue( + fh_index_before == fh_index_after, + "Non date cdes should not be affected by TimeStripper", + ) def test_update_of_multisections(self): # multisection with 2 items , one cde Surgery , another SurgeryDate @@ -921,419 +1340,250 @@ def test_update_of_multisections(self): item2 = [cde_dict3, cde_dict4] item3 = [cde_dict5, cde_dict6] - multisection = {"allow_multiple": True, - "cdes": [item1, item2, item3]} + multisection = {"allow_multiple": True, "cdes": [item1, item2, item3]} - data_with_multisections = {"forms": [{"form": "testing", - "sections": [multisection]}]} + data_with_multisections = { + "forms": [{"form": "testing", "sections": [multisection]}] + } m = FakeClinicalData(23, data_with_multisections) ts = TimeStripper([m]) ts.test_mode = True - ts.date_cde_codes = ['SurgeryDate'] + ts.date_cde_codes = ["SurgeryDate"] ts.forward() - self.assertTrue(ts.converted_date_cdes == ["2017-02-14", "2018-03-26"], - "Multisection timestrip failed: actual = %s" % ts.converted_date_cdes) + self.assertTrue( + ts.converted_date_cdes == ["2017-02-14", "2018-03-26"], + "Multisection timestrip failed: actual = %s" % ts.converted_date_cdes, + ) expected_value1 = "2017-02-14" actual_value1 = m.data["forms"][0]["sections"][0]["cdes"][0][1]["value"] self.assertEqual( expected_value1, actual_value1, - "Update of multisection failed for first item: actual = %s" % - actual_value1) + "Update of multisection failed for first item: actual = %s" % actual_value1, + ) expected_value2 = "2018-03-26" actual_value2 = m.data["forms"][0]["sections"][0]["cdes"][1][1]["value"] self.assertEqual( expected_value2, actual_value2, - "Update of multisection failed for second item: actual = %s" % - actual_value2) + "Update of multisection failed for second item: actual = %s" + % actual_value2, + ) expected_value3 = "2011-11-05" # n shouldn't have changed actual_value3 = m.data["forms"][0]["sections"][0]["cdes"][2][1]["value"] self.assertEqual( expected_value3, actual_value3, - "Update of multisection failed for third item: actual = %s" % - actual_value3) + "Update of multisection failed for third item: actual = %s" % actual_value3, + ) def test_history_munging(self): from rdrf.helpers.utils import HistoryTimeStripper - history_modjgo_data = {"django_id": 1, - "record": { - "django_id": 1, - "timestamp": "2017-02-13T12:28:49.355839", - "forms": [ - { - "sections": [ - { - "allow_multiple": False, - "cdes": [ - { - "value": "fh_is_index", - "code": "CDEIndexOrRelative" - }, - { - "value": "2017-02-15", - "code": "DateOfAssessment" - }, - { - "value": "2017-02-14T00:00:00.000", - "code": "FHconsentDate" - } - ], - "code": "fhDateSection" - }, - { - "allow_multiple": False, - "cdes": [ - { - "value": "", - "code": "CDE00024" - }, - { - "value": "", - "code": "CDEfhDutchLipidClinicNetwork" - } - ], - "code": "SEC0007" - }, - { - "allow_multiple": False, - "cdes": [ - { - "value": "fh2_y", - "code": "CDE00004" - }, - { - "value": "fh2_n", - "code": "FHFamHistTendonXanthoma" - }, - { - "value": "fh2_n", - "code": "FHFamHistArcusCornealis" - }, - { - "value": "fh2_y", - "code": "CDE00003" - }, - { - "value": "y_childunder18", - "code": "FHFamilyHistoryChild" - } - ], - "code": "SEC0002" - }, - { - "allow_multiple": False, - "cdes": [ - { - "value": "", - "code": "FHSupravalvularDisease" - }, - { - "value": None, - "code": "FHAgeAtMI" - }, - { - "value": None, - "code": "FHAgeAtCV" - }, - { - "value": "", - "code": "FHPremNonCoronary" - }, - { - "value": "", - "code": "FHAorticValveDisease" - }, - { - "value": "fh2_n", - "code": "FHPersHistCerebralVD" - }, - { - "value": "fhpremcvd_unknown", - "code": "CDE00011" - }, - { - "value": "", - "code": "FHCoronaryRevasc" - }, - { - "value": "", - "code": "FHMyocardialInfarction" - } - ], - "code": "SEC0004" - }, - { - "allow_multiple": False, - "cdes": [ - { - "value": "u_", - "code": "CDE00002" - }, - { - "value": "", - "code": "FHXanthelasma" - }, - { - "value": "y", - "code": "CDE00001" - } - ], - "code": "SEC0001" - }, - { - "allow_multiple": False, - "cdes": [ - { - "value": "", - "code": "PlasmaLipidTreatment" - }, - { - "value": None, - "code": "CDE00019" - }, - { - "value": "NaN", - "code": "LDLCholesterolAdjTreatment" - }, - { - "value": None, - "code": "CDE00013" - } - ], - "code": "FHLDLforFHScore" - }, - { - "allow_multiple": True, - "cdes": [ - [ - { - "value": None, - "code": "CDE00014" - }, - { - "value": None, - "code": "FHLipidProfileUntreatedDate" - }, - { - "value": None, - "code": "FHAlbum" - }, - { - "value": None, - "code": "CDE00012" - }, - { - "value": None, - "code": "FHCK" - }, - { - "value": None, - "code": "FHA1" - }, - { - "value": "", - "code": "PlasmaLipidTreatmentNone" - }, - { - "value": None, - "code": "FHAST" - }, - { - "value": None, - "code": "CDE00015" - }, - { - "value": None, - "code": "FHApoB" - }, - { - "value": None, - "code": "FHALT" - }, - { - "value": None, - "code": "FHLLDLconc" - }, - { - "value": None, - "code": "FHCreatinine" - }, - { - "value": "", - "code": "FHCompliance" - }, - { - "value": "", - "code": "CDEfhOtherIntolerantDrug" - }, - { - "value": None, - "code": "CDE00016" - }, - { - "value": None, - "code": "FHCRP" - } - ] - ], - "code": "SEC0005" - }, - { - "allow_multiple": False, - "cdes": [ - { - "value": "NaN", - "code": "CDEBMI" - }, - { - "value": "", - "code": "FHHypertriglycerd" - }, - { - "value": None, - "code": "HbA1c" - }, - { - "value": "", - "code": "FHHypothyroidism" - }, - { - "value": None, - "code": "CDE00009" - }, - { - "value": None, - "code": "FHHeartRate" - }, - { - "value": None, - "code": "CDE00010" - }, - { - "value": None, - "code": "FHWaistCirc" - }, - { - "value": "", - "code": "FHObesity" - }, - { - "value": None, - "code": "CDE00008" - }, - { - "value": None, - "code": "CDEWeight" - }, - { - "value": None, - "code": "FHPackYears" - }, - { - "value": None, - "code": "CDEHeight" - }, - { - "value": "", - "code": "CDE00007" - }, - { - "value": "", - "code": "FHAlcohol" - }, - { - "value": "", - "code": "CDE00005" - }, - { - "value": "", - "code": "CDE00006" - }, - { - "value": "", - "code": "FHCVDOther" - }, - { - "value": None, - "code": "FHeGFR" - }, - { - "value": "", - "code": "ChronicKidneyDisease" - }, - { - "value": "", - "code": "FHHepaticSteatosis" - }, - { - "value": None, - "code": "FHTSH" - } - ], - "code": "SEC0003" - }, - { - "allow_multiple": True, - "cdes": [ - [{ - "value": "", - "code": "FHTrialStatus" - }, - { - "value": None, - "code": "FHTrialSTartDate" - }, - { - "value": "", - "code": "FHClinicalTrialName" - }, - { - "value": None, - "code": "FHTrialLength" - } - ] - ], - "code": "FHClinicalTrials" - } - ], - "name": "ClinicalData" - } - ], - "context_id": 1, - "ClinicalData_timestamp": "2017-02-13T12:28:49.355839", - "django_model": "Patient" - }, - "record_type": "snapshot", - "timestamp": "2017-02-13 12:28:49.665333", - "registry_code": "fh", - "context_id": 1, - "django_model": "Patient" - } - - expected_dates = ['2017-02-14'] + + history_modjgo_data = { + "django_id": 1, + "record": { + "django_id": 1, + "timestamp": "2017-02-13T12:28:49.355839", + "forms": [ + { + "sections": [ + { + "allow_multiple": False, + "cdes": [ + { + "value": "fh_is_index", + "code": "CDEIndexOrRelative", + }, + {"value": "2017-02-15", "code": "DateOfAssessment"}, + { + "value": "2017-02-14T00:00:00.000", + "code": "FHconsentDate", + }, + ], + "code": "fhDateSection", + }, + { + "allow_multiple": False, + "cdes": [ + {"value": "", "code": "CDE00024"}, + { + "value": "", + "code": "CDEfhDutchLipidClinicNetwork", + }, + ], + "code": "SEC0007", + }, + { + "allow_multiple": False, + "cdes": [ + {"value": "fh2_y", "code": "CDE00004"}, + { + "value": "fh2_n", + "code": "FHFamHistTendonXanthoma", + }, + { + "value": "fh2_n", + "code": "FHFamHistArcusCornealis", + }, + {"value": "fh2_y", "code": "CDE00003"}, + { + "value": "y_childunder18", + "code": "FHFamilyHistoryChild", + }, + ], + "code": "SEC0002", + }, + { + "allow_multiple": False, + "cdes": [ + {"value": "", "code": "FHSupravalvularDisease"}, + {"value": None, "code": "FHAgeAtMI"}, + {"value": None, "code": "FHAgeAtCV"}, + {"value": "", "code": "FHPremNonCoronary"}, + {"value": "", "code": "FHAorticValveDisease"}, + {"value": "fh2_n", "code": "FHPersHistCerebralVD"}, + {"value": "fhpremcvd_unknown", "code": "CDE00011"}, + {"value": "", "code": "FHCoronaryRevasc"}, + {"value": "", "code": "FHMyocardialInfarction"}, + ], + "code": "SEC0004", + }, + { + "allow_multiple": False, + "cdes": [ + {"value": "u_", "code": "CDE00002"}, + {"value": "", "code": "FHXanthelasma"}, + {"value": "y", "code": "CDE00001"}, + ], + "code": "SEC0001", + }, + { + "allow_multiple": False, + "cdes": [ + {"value": "", "code": "PlasmaLipidTreatment"}, + {"value": None, "code": "CDE00019"}, + { + "value": "NaN", + "code": "LDLCholesterolAdjTreatment", + }, + {"value": None, "code": "CDE00013"}, + ], + "code": "FHLDLforFHScore", + }, + { + "allow_multiple": True, + "cdes": [ + [ + {"value": None, "code": "CDE00014"}, + { + "value": None, + "code": "FHLipidProfileUntreatedDate", + }, + {"value": None, "code": "FHAlbum"}, + {"value": None, "code": "CDE00012"}, + {"value": None, "code": "FHCK"}, + {"value": None, "code": "FHA1"}, + { + "value": "", + "code": "PlasmaLipidTreatmentNone", + }, + {"value": None, "code": "FHAST"}, + {"value": None, "code": "CDE00015"}, + {"value": None, "code": "FHApoB"}, + {"value": None, "code": "FHALT"}, + {"value": None, "code": "FHLLDLconc"}, + {"value": None, "code": "FHCreatinine"}, + {"value": "", "code": "FHCompliance"}, + { + "value": "", + "code": "CDEfhOtherIntolerantDrug", + }, + {"value": None, "code": "CDE00016"}, + {"value": None, "code": "FHCRP"}, + ] + ], + "code": "SEC0005", + }, + { + "allow_multiple": False, + "cdes": [ + {"value": "NaN", "code": "CDEBMI"}, + {"value": "", "code": "FHHypertriglycerd"}, + {"value": None, "code": "HbA1c"}, + {"value": "", "code": "FHHypothyroidism"}, + {"value": None, "code": "CDE00009"}, + {"value": None, "code": "FHHeartRate"}, + {"value": None, "code": "CDE00010"}, + {"value": None, "code": "FHWaistCirc"}, + {"value": "", "code": "FHObesity"}, + {"value": None, "code": "CDE00008"}, + {"value": None, "code": "CDEWeight"}, + {"value": None, "code": "FHPackYears"}, + {"value": None, "code": "CDEHeight"}, + {"value": "", "code": "CDE00007"}, + {"value": "", "code": "FHAlcohol"}, + {"value": "", "code": "CDE00005"}, + {"value": "", "code": "CDE00006"}, + {"value": "", "code": "FHCVDOther"}, + {"value": None, "code": "FHeGFR"}, + {"value": "", "code": "ChronicKidneyDisease"}, + {"value": "", "code": "FHHepaticSteatosis"}, + {"value": None, "code": "FHTSH"}, + ], + "code": "SEC0003", + }, + { + "allow_multiple": True, + "cdes": [ + [ + {"value": "", "code": "FHTrialStatus"}, + {"value": None, "code": "FHTrialSTartDate"}, + {"value": "", "code": "FHClinicalTrialName"}, + {"value": None, "code": "FHTrialLength"}, + ] + ], + "code": "FHClinicalTrials", + }, + ], + "name": "ClinicalData", + } + ], + "context_id": 1, + "ClinicalData_timestamp": "2017-02-13T12:28:49.355839", + "django_model": "Patient", + }, + "record_type": "snapshot", + "timestamp": "2017-02-13 12:28:49.665333", + "registry_code": "fh", + "context_id": 1, + "django_model": "Patient", + } + + expected_dates = ["2017-02-14"] history_record = FakeClinicalData(73, history_modjgo_data) ts = HistoryTimeStripper([history_record]) ts.test_mode = True - ts.date_cde_codes = ['FHconsentDate'] + ts.date_cde_codes = ["FHconsentDate"] ts.forward() - self.assertTrue(ts.converted_date_cdes == expected_dates, - "Expected: %s, Actual: %s" % (expected_dates, - ts.converted_date_cdes)) + self.assertTrue( + ts.converted_date_cdes == expected_dates, + "Expected: %s, Actual: %s" % (expected_dates, ts.converted_date_cdes), + ) class MinTypeTest(TestCase): def test_string(self): from rdrf.helpers.utils import MinType + bottom = MinType() lst = ["a", "B", bottom] g = sorted(lst) @@ -1341,6 +1591,7 @@ def test_string(self): def test_ints(self): from rdrf.helpers.utils import MinType + bottom = MinType() lst = [10, 1, -7, bottom] g = sorted(lst) @@ -1348,14 +1599,15 @@ def test_ints(self): class StructureChecker(TestCase): - databases = {'default', 'clinical'} + databases = {"default", "clinical"} def _run_command(self, *args, **kwargs): from django.core import management import io + out_stream = io.StringIO("") # test_mode means the command does not issue sys.exit(1) - management.call_command('check_structure', *args, stdout=out_stream, **kwargs) + management.call_command("check_structure", *args, stdout=out_stream, **kwargs) return out_stream.getvalue() def clear_modjgo_objects(self): @@ -1377,52 +1629,88 @@ def test_cdes(self): # Some examples of possible mangled records # [ (desc,collectionname,example), ...] # we expect non-blank output/failure for each example - bad = [("bad id", "cdes", {"django_id": "fred", - "django_model": "Patient", - "timestamp": "2018-03-10T04:03:21", - "forms": []}), - - ("missing id", "cdes", {"django_model": "Patient", - "timestamp": "2018-03-10T04:03:21", - "forms": []}), - - ("bad model", "cdes", {"django_id": 100, - "django_model": "Tomato", - "timestamp": "2018-03-10T04:03:21", - "forms": []}), - - - ("missing_model", "cdes", {"django_id": 23, - "timestamp": "2018-03-10T04:03:21", - "forms": []}), - ("bad_forms", "cdes", {"django_id": 23, - "django_model": "Patient", - "timestamp": "2018-03-10T04:03:21", - "forms": 999}), - ("bad_old_format", "cdes", {"django_id": 23, - "django_model": "Patient", - "timestamp": "2018-03-10T04:03:21", - "formname____sectioncode____cdecode": 99, - "forms": []}) - ] + bad = [ + ( + "bad id", + "cdes", + { + "django_id": "fred", + "django_model": "Patient", + "timestamp": "2018-03-10T04:03:21", + "forms": [], + }, + ), + ( + "missing id", + "cdes", + { + "django_model": "Patient", + "timestamp": "2018-03-10T04:03:21", + "forms": [], + }, + ), + ( + "bad model", + "cdes", + { + "django_id": 100, + "django_model": "Tomato", + "timestamp": "2018-03-10T04:03:21", + "forms": [], + }, + ), + ( + "missing_model", + "cdes", + {"django_id": 23, "timestamp": "2018-03-10T04:03:21", "forms": []}, + ), + ( + "bad_forms", + "cdes", + { + "django_id": 23, + "django_model": "Patient", + "timestamp": "2018-03-10T04:03:21", + "forms": 999, + }, + ), + ( + "bad_old_format", + "cdes", + { + "django_id": 23, + "django_model": "Patient", + "timestamp": "2018-03-10T04:03:21", + "formname____sectioncode____cdecode": 99, + "forms": [], + }, + ), + ] for bad_example, collection, data in bad: self.clear_modjgo_objects() m = self.make_modjgo(collection, data) with self.assertRaises(SystemExit) as cm: - output = self._run_command(registry_code="foobar", collection=collection) + output = self._run_command( + registry_code="foobar", collection=collection + ) print("output = [%s]" % output) - assert output != "", "check_structure management command failed: Expected schema error for %s" % bad_example + assert output != "", ( + "check_structure management command failed: Expected schema error for %s" + % bad_example + ) parts = output.split(";") bad_pk = int(parts[0]) self.assertEqual(m.pk, bad_pk) self.assertEqual(cm.exception.code, 1) # finally, a good record - good = {"django_id": 23, - "django_model": "Patient", - "timestamp": "2018-03-10T04:03:21", - "forms": []} + good = { + "django_id": 23, + "django_model": "Patient", + "timestamp": "2018-03-10T04:03:21", + "forms": [], + } self.clear_modjgo_objects() m = self.make_modjgo("cdes", good) @@ -1434,22 +1722,27 @@ def test_history(self): foobar = Registry() foobar.code = "foobar" foobar.save() - bad_history = {"id": 6, - "registry_code": "foobar", - "collection": "history", - "data": {"record": {"django_id": 1, - "timestamp": "2017-07-10T14:45:36.760123", - "context_id": 1, - "django_model": "Patient", - "oldstyleform____section____cde": 23, - "Diagnosis_timestamp": "2017-07-10T14:45:36.760123"} - }, - "django_id": 1, - "timestamp": "2017-07-10 14:45:37.012962", - "context_id": 1, - "record_type": "snapshot", - "django_model": "Patient", - "registry_code": "foobar"} + bad_history = { + "id": 6, + "registry_code": "foobar", + "collection": "history", + "data": { + "record": { + "django_id": 1, + "timestamp": "2017-07-10T14:45:36.760123", + "context_id": 1, + "django_model": "Patient", + "oldstyleform____section____cde": 23, + "Diagnosis_timestamp": "2017-07-10T14:45:36.760123", + } + }, + "django_id": 1, + "timestamp": "2017-07-10 14:45:37.012962", + "context_id": 1, + "record_type": "snapshot", + "django_model": "Patient", + "registry_code": "foobar", + } self.clear_modjgo_objects() self.make_modjgo("history", bad_history) @@ -1462,8 +1755,9 @@ def test_history(self): class RemindersTestCase(TestCase): def _run_command(self, *args, **kwargs): import io + out_stream = io.StringIO("") - call_command('check_logins', *args, stdout=out_stream, **kwargs) + call_command("check_logins", *args, stdout=out_stream, **kwargs) return out_stream.getvalue() def setUp(self): @@ -1501,6 +1795,7 @@ def _setup_user(self, username, last_login, group="patients"): def set_metadata(self, d): import json + self.registry.metadata_json = json.dumps(d) self.registry.save() @@ -1527,12 +1822,16 @@ def _create_dummy_history(self, date_stamp): enh.date_stamp = date_stamp enh.language = "en" enh.email_notification = self.email_notification - enh.template_data = json.dumps({"user": {"id": self.user.id, - "model": "CustomUser", - "app": "groups"}, - "registry": {"id": self.registry.id, - "app": "rdrf", - "model": "Registry"}}) + enh.template_data = json.dumps( + { + "user": {"id": self.user.id, "model": "CustomUser", "app": "groups"}, + "registry": { + "id": self.registry.id, + "app": "rdrf", + "model": "Registry", + }, + } + ) enh.save() enh.date_stamp = date_stamp @@ -1557,7 +1856,9 @@ class Time: self._setup_user("testuser", Time.LONG_AGO) result = self._run_command(registry_code="foobar", days=365) lines = result.split("\n") - assert "testuser" in lines, "Expected to see testuser in output: instead [%s]" % result + assert "testuser" in lines, ( + "Expected to see testuser in output: instead [%s]" % result + ) # patient user logged in inside threshhold self._setup_user("testuser", Time.RECENTLY) @@ -1573,7 +1874,7 @@ class Time: parent_feature = True # Check parent feature is enabled. try: - __import__('angelman.parent_view') + __import__("angelman.parent_view") except ImportError: parent_feature = False if parent_feature: @@ -1589,14 +1890,15 @@ class Time: # mock the send-reminders action self._setup_user("testuser", Time.LONG_AGO) - result = self._run_command(registry_code="foobar", - days=365, - action="send-reminders", - test_mode=True) + result = self._run_command( + registry_code="foobar", days=365, action="send-reminders", test_mode=True + ) lines = result.split("\n") - assert "dummy send reg_code=foobar description=reminder" in lines[0], "send-reminders failed?" + assert ( + "dummy send reg_code=foobar description=reminder" in lines[0] + ), "send-reminders failed?" # create some dummy email notification history models to simulate previous # reminders being sent @@ -1604,14 +1906,15 @@ class Time: self._setup_notification() self._create_dummy_history(Time.RECENTLY) - result = self._run_command(registry_code="foobar", - days=365, - action="send-reminders", - test_mode=True) + result = self._run_command( + registry_code="foobar", days=365, action="send-reminders", test_mode=True + ) lines = result.split("\n") - assert "not sent" in lines, "Expected reminder NOT to be sent if one already sent" + assert ( + "not sent" in lines + ), "Expected reminder NOT to be sent if one already sent" # 2nd one allowed self._clear_notifications() @@ -1619,29 +1922,30 @@ class Time: self._setup_notification() self._create_dummy_history(Time.MONTH_AGO) - result = self._run_command(registry_code="foobar", - days=365, - action="send-reminders", - test_mode=True) + result = self._run_command( + registry_code="foobar", days=365, action="send-reminders", test_mode=True + ) lines = result.split("\n") print(lines) - assert "dummy send reg_code=foobar description=reminder" in lines[0], "send-reminders failed?" + assert ( + "dummy send reg_code=foobar description=reminder" in lines[0] + ), "send-reminders failed?" self._clear_notifications() self._setup_user("testuser", Time.LONG_AGO) self._setup_notification() self._create_dummy_history(Time.MONTH_AGO) self._create_dummy_history(Time.MONTH_AGO) - result = self._run_command(registry_code="foobar", - - days=365, - action="send-reminders", - test_mode=True) + result = self._run_command( + registry_code="foobar", days=365, action="send-reminders", test_mode=True + ) lines = result.split("\n") print(lines) - assert "not sent" in lines, "Expected reminder NOT to be sent if two or more already sent" + assert ( + "not sent" in lines + ), "Expected reminder NOT to be sent if two or more already sent" class ClinicalDataTestCase(RDRFTestCase): @@ -1652,14 +1956,13 @@ def create_clinicaldata(self, patient_id, registry_code): registry = None if registry is None: registry = Registry.objects.create(code=registry_code) - data = {"timestamp": "2018-10-12T04:03:21", - "forms": []} + data = {"timestamp": "2018-10-12T04:03:21", "forms": []} cd = ClinicalData() cd.data = data - cd.collection = 'cdes' + cd.collection = "cdes" cd.registry_code = registry_code cd.django_id = patient_id - cd.django_model = 'Patient' + cd.django_model = "Patient" cd.save() return cd @@ -1677,7 +1980,7 @@ def test_clinicaldata_delete(self): patient_model = self.create_new_patient() patient_id = patient_model.id - clinicaldata_model = self.create_clinicaldata(patient_id, 'dummy') + clinicaldata_model = self.create_clinicaldata(patient_id, "dummy") patient_model.delete() self.assertEqual(patient_model.active, False) @@ -1688,10 +1991,10 @@ def test_clinicaldata_delete(self): def test_delete_clinicaldata_sanity_check(self): patient_model = self.create_new_patient() patient_id = patient_model.id - clinicaldata_model1 = self.create_clinicaldata(patient_id, 'dummy') + clinicaldata_model1 = self.create_clinicaldata(patient_id, "dummy") # create another clinicaldata model with different patient id - clinicaldata_model2 = self.create_clinicaldata(patient_id + 1, 'dummy') + clinicaldata_model2 = self.create_clinicaldata(patient_id + 1, "dummy") patient_model.delete() self.assertEqual(patient_model.active, False) @@ -1705,7 +2008,7 @@ def test_delete_clinicaldata_sanity_check(self): def test_hard_delete_clinicaldata(self): patient_model = self.create_new_patient() patient_id = patient_model.id - self.create_clinicaldata(patient_id, 'dummy') + self.create_clinicaldata(patient_id, "dummy") patient_model._hard_delete() with self.assertRaises(Patient.DoesNotExist): @@ -1715,15 +2018,15 @@ def test_hard_delete_clinicaldata(self): Patient.objects.really_all().get(id=patient_id) with self.assertRaises(ClinicalData.DoesNotExist): - ClinicalData.objects.get(django_id=patient_id, django_model='Patient') + ClinicalData.objects.get(django_id=patient_id, django_model="Patient") def test_hard_delete_patient_and_clinicaldata_sanity_check(self): patient_model1 = self.create_new_patient() patient_id1 = patient_model1.id patient_model2 = self.create_new_patient() patient_id2 = patient_model2.id - self.create_clinicaldata(patient_id1, 'dummy') - clinicaldata_model2 = self.create_clinicaldata(patient_id2, 'dummy') + self.create_clinicaldata(patient_id1, "dummy") + clinicaldata_model2 = self.create_clinicaldata(patient_id2, "dummy") patient_model1._hard_delete() @@ -1734,7 +2037,7 @@ def test_hard_delete_patient_and_clinicaldata_sanity_check(self): Patient.objects.really_all().get(id=patient_id1) with self.assertRaises(ClinicalData.DoesNotExist): - ClinicalData.objects.get(django_id=patient_id1, django_model='Patient') + ClinicalData.objects.get(django_id=patient_id1, django_model="Patient") self.assertEqual(patient_model2.active, True) self.assertEqual(clinicaldata_model2.active, True) @@ -1742,7 +2045,6 @@ def test_hard_delete_patient_and_clinicaldata_sanity_check(self): class UpdateCalculatedFieldsTestCase(FormTestCase): - def setUp(self): super().setUp() @@ -1754,10 +2056,16 @@ def form_value(form_name, section_code, cde_code, db_record): for cde in section["cdes"]: if cde["code"] == cde_code: return cde["value"] + self.form_value = form_value - from rdrf.management.commands.update_calculated_fields import context_ids_for_patient_and_form - context_ids = context_ids_for_patient_and_form(self.patient, self.simple_form.name, self.registry) + from rdrf.management.commands.update_calculated_fields import ( + context_ids_for_patient_and_form, + ) + + context_ids = context_ids_for_patient_and_form( + self.patient, self.simple_form.name, self.registry + ) self.context_id = context_ids[0] ff = FormFiller(self.simple_form) @@ -1776,32 +2084,42 @@ def form_value(form_name, section_code, cde_code, db_record): self.registry.code, self.simple_form.pk, self.patient.pk, - self.context_id) + self.context_id, + ) def test_save_new_calculation(self): # Check the CDE value is correctly setup. collection = ClinicalData.objects.collection(self.registry.code, "cdes") db_record = collection.find(self.patient, self.context_id).data().first() - assert self.form_value( - self.simple_form.name, - self.sectionA.code, - "CDEAge", - db_record) == 20 + assert ( + self.form_value( + self.simple_form.name, self.sectionA.code, "CDEAge", db_record + ) + == 20 + ) # Change the CDE value and save it. - changed_calculated_cdes = {"CDEAge": {"old_value": 20, "new_value": 21, "section_code": "sectionA"}} - from rdrf.management.commands.update_calculated_fields import save_new_calculation - save_new_calculation(changed_calculated_cdes, self.context_id, - self.simple_form.name, self.patient, self.registry) + changed_calculated_cdes = { + "CDEAge": {"old_value": 20, "new_value": 21, "section_code": "sectionA"} + } + from rdrf.management.commands.update_calculated_fields import ( + save_new_calculation, + ) + + save_new_calculation( + changed_calculated_cdes, + self.context_id, + self.simple_form.name, + self.patient, + self.registry, + ) # Check that the CDE value has been updated. db_record = collection.find(self.patient, self.context_id).data().first() cdeage_value = self.form_value( - self.simple_form.name, - self.sectionA.code, - "CDEAge", - db_record) + self.simple_form.name, self.sectionA.code, "CDEAge", db_record + ) self.assertEqual(cdeage_value, 21) def test_update_calculated_fields_command(self): @@ -1810,20 +2128,20 @@ def test_update_calculated_fields_command(self): collection = ClinicalData.objects.collection(self.registry.code, "cdes") db_record = collection.find(self.patient, self.context_id).data().first() cdebmi_value = self.form_value( - self.simple_form.name, - self.sectionB.code, - "CDEBMI", - db_record) + self.simple_form.name, self.sectionB.code, "CDEBMI", db_record + ) self.assertEqual(cdebmi_value, "38") - call_command('update_calculated_fields', registry_code=self.registry.code, patient_id=[self.patient.id]) + call_command( + "update_calculated_fields", + registry_code=self.registry.code, + patient_id=[self.patient.id], + ) db_record = collection.find(self.patient, self.context_id).data().first() cdebmi_value = self.form_value( - self.simple_form.name, - self.sectionB.code, - "CDEBMI", - db_record) + self.simple_form.name, self.sectionB.code, "CDEBMI", db_record + ) self.assertEqual(cdebmi_value, "25.96") @@ -1832,9 +2150,11 @@ class CICImporterTestCase(TestCase): Tests for the definition importer """ - def _get_yaml_file(self, suffix='original'): + def _get_yaml_file(self, suffix="original"): this_dir = os.path.dirname(__file__) - test_yaml = os.path.abspath(os.path.join(this_dir, "..", "..", "fixtures", f"cic_lung_{suffix}.yaml")) + test_yaml = os.path.abspath( + os.path.join(this_dir, "..", "..", "fixtures", f"cic_lung_{suffix}.yaml") + ) return test_yaml def _get_survey_names(self): @@ -1879,7 +2199,10 @@ def _get_pvg_codes(self): return list( dict.fromkeys( [ - code for code in CommonDataElement.objects.filter(code__in=cdes).values_list("pv_group", flat=True) + code + for code in CommonDataElement.objects.filter( + code__in=cdes + ).values_list("pv_group", flat=True) if code is not None ] ) @@ -1890,7 +2213,12 @@ def _get_state_pvs(self): Returns a dict of State PV codes and positions """ pv_group = CDEPermittedValueGroup.objects.get(code="State") - return {pv.code: pv.position for pv in CDEPermittedValue.objects.filter(pv_group=pv_group).order_by('code')} + return { + pv.code: pv.position + for pv in CDEPermittedValue.objects.filter(pv_group=pv_group).order_by( + "code" + ) + } def model_to_dict(self, model, instance, fields): """ @@ -1924,8 +2252,10 @@ def model_to_json_string(self, model, instance, fields): def form_to_json_string(self, instance, fields): f = self.model_to_dict(RegistryForm, instance, fields) - f["sections"] = [self.model_to_dict(Section, section, self.section_fields) - for section in instance.section_models] + f["sections"] = [ + self.model_to_dict(Section, section, self.section_fields) + for section in instance.section_models + ] for section in f["sections"]: section["elements"] = section["elements"].split(",") return json.dumps(f) @@ -1936,12 +2266,12 @@ def _pvg_as_dict(self, pvg): :param pvg: PVG object :return: a dict of PVG and its PVs (excluding pk of PV) """ - pv_fields = {f.name: f.get_internal_type() - for f in CDEPermittedValue._meta.fields if not f.is_relation and not f.primary_key} - d = { - "code": pvg.code, - "values": [] + pv_fields = { + f.name: f.get_internal_type() + for f in CDEPermittedValue._meta.fields + if not f.is_relation and not f.primary_key } + d = {"code": pvg.code, "values": []} for pv in CDEPermittedValue.objects.filter(pv_group=pvg): value_dict = self.model_to_dict(CDEPermittedValue, pv, pv_fields) d["values"].append(value_dict) @@ -1961,12 +2291,12 @@ def _survey_question_as_dict(self, sq): "position": sq.position, "source": sq.source, "widget_config": sq.widget_config, - "precondition": None + "precondition": None, } if sq.precondition: d["precondition"] = { "cde": sq.precondition.cde.code, - "value": sq.precondition.value + "value": sq.precondition.value, } return d @@ -1982,7 +2312,7 @@ def _survey_as_dict(self, survey): "display_name": survey.display_name, "form": survey.form, "is_followup": survey.is_followup, - "questions": [] + "questions": [], } for question in SurveyQuestion.objects.filter(survey=survey): question_dict = self._survey_question_as_dict(question) @@ -2003,13 +2333,15 @@ def setUp(self): importer.create_registry() # using the original yaml file here self.state_pvs_original = self._get_state_pvs() - self.yaml_file = self._get_yaml_file(suffix='modified') + self.yaml_file = self._get_yaml_file(suffix="modified") with open(self.yaml_file) as yf: self.yaml_data = yaml.load(yf, Loader=yaml.FullLoader) importer.load_yaml(self.yaml_file) importer.create_registry() # using the modified yaml file here - self.cde_fields = {f.name: f.get_internal_type() for f in CommonDataElement._meta.fields} + self.cde_fields = { + f.name: f.get_internal_type() for f in CommonDataElement._meta.fields + } self.cdes_in_yaml = self.yaml_data["cdes"] self.state_pvs_modified = self._get_state_pvs() @@ -2023,27 +2355,35 @@ def setUp(self): self.pvgs_in_yaml = self.yaml_data["pvgs"] self.pvg_codes_in_db = self._get_pvg_codes() - self.section_fields = {f.name: f.get_internal_type() for f in Section._meta.fields if f.name != "id"} + self.section_fields = { + f.name: f.get_internal_type() + for f in Section._meta.fields + if f.name != "id" + } self.sections_in_yaml = [] # self.yaml_data["sections"] self.section_codes_in_db = self._get_section_codes() - self.form_fields = {f.name: f.get_internal_type() - for f in RegistryForm._meta.fields - if not f.is_relation and f.name not in ["id", "is_questionnaire_login"]} + self.form_fields = { + f.name: f.get_internal_type() + for f in RegistryForm._meta.fields + if not f.is_relation and f.name not in ["id", "is_questionnaire_login"] + } self.forms_in_yaml = self.yaml_data["forms"] self.form_names_in_db = self._get_form_names() def assert_precondition_imported(self, q, survey_questions_in_db, survey_in_yaml): cde = q["precondition"]["cde"] value = q["precondition"]["value"] - preconditions = Precondition.objects.filter(survey__name=survey_in_yaml["name"], - cde__code=cde, value=value).count() + preconditions = Precondition.objects.filter( + survey__name=survey_in_yaml["name"], cde__code=cde, value=value + ).count() self.assertEqual(preconditions, 1) def assert_precondition_validity(self, q, survey_questions_in_db): precondition_cde = q["precondition"]["cde"] - is_precondition_cde_present = self._precondition_cde_exists(precondition_cde, - survey_questions_in_db) + is_precondition_cde_present = self._precondition_cde_exists( + precondition_cde, survey_questions_in_db + ) self.assertTrue(is_precondition_cde_present) def test_cdes(self): @@ -2052,13 +2392,15 @@ def test_cdes(self): """ for cde_in_yaml in self.cdes_in_yaml: cde = CommonDataElement.objects.get(code=cde_in_yaml["code"]) - cde_from_db = self.model_to_json_string(CommonDataElement, cde, self.cde_fields) + cde_from_db = self.model_to_json_string( + CommonDataElement, cde, self.cde_fields + ) cde_from_yaml = json.dumps(cde_in_yaml) self.assertEqual(cde_from_yaml, cde_from_db) def test_forms(self): """ - Tests if the imported RegistryForm objects match the yaml + Tests if the imported RegistryForm objects match the yaml """ for form_in_yaml in self.forms_in_yaml: form = RegistryForm.objects.get(name=form_in_yaml["name"]) @@ -2074,20 +2416,30 @@ def test_survey_questions_and_preconditions(self): """ for survey_in_yaml in self.surveys_in_yaml: - assert (survey_in_yaml["name"] in self.survey_names_in_db) + assert survey_in_yaml["name"] in self.survey_names_in_db if survey_in_yaml["name"] in self.survey_names_in_db: survey = Survey.objects.get(name=survey_in_yaml["name"]) survey_in_db = self._survey_as_dict(survey) - survey_questions_in_yaml = sorted(survey_in_yaml["questions"], key=lambda k: k["cde"]) - survey_questions_in_db = sorted(survey_in_db["questions"], key=lambda k: k["cde"]) - self.assertEqual(survey_questions_in_yaml, survey_questions_in_db) # questions + survey_questions_in_yaml = sorted( + survey_in_yaml["questions"], key=lambda k: k["cde"] + ) + survey_questions_in_db = sorted( + survey_in_db["questions"], key=lambda k: k["cde"] + ) + self.assertEqual( + survey_questions_in_yaml, survey_questions_in_db + ) # questions for question_in_db in survey_questions_in_db: if question_in_db["precondition"] is not None: - self.assert_precondition_imported(question_in_db, survey_questions_in_db, survey_in_yaml) - self.assert_precondition_validity(question_in_db, survey_questions_in_db) + self.assert_precondition_imported( + question_in_db, survey_questions_in_db, survey_in_yaml + ) + self.assert_precondition_validity( + question_in_db, survey_questions_in_db + ) def test_pvgs(self): """ @@ -2098,7 +2450,9 @@ def test_pvgs(self): pvg = CDEPermittedValueGroup.objects.get(code=pvg_in_yaml["code"]) pvg_in_db = self._pvg_as_dict(pvg) - pvg_values_in_yaml = sorted(pvg_in_yaml["values"], key=lambda k: k["code"]) + pvg_values_in_yaml = sorted( + pvg_in_yaml["values"], key=lambda k: k["code"] + ) pvg_values_in_db = sorted(pvg_in_db["values"], key=lambda k: k["code"]) self.assertEqual(pvg_values_in_yaml, pvg_values_in_db) @@ -2119,16 +2473,17 @@ def test_if_version_gets_modified_by_import(self): class SetupPromsCommandTest(TestCase): - def setUp(self): importer = Importer() importer.load_yaml(self._get_yaml_file()) importer.create_registry() - self.modified_yaml = self._get_yaml_file(suffix='modified') + self.modified_yaml = self._get_yaml_file(suffix="modified") - def _get_yaml_file(self, suffix='original'): + def _get_yaml_file(self, suffix="original"): this_dir = os.path.dirname(__file__) - test_yaml = os.path.abspath(os.path.join(this_dir, "..", "..", "fixtures", f"cic_lung_{suffix}.yaml")) + test_yaml = os.path.abspath( + os.path.join(this_dir, "..", "..", "fixtures", f"cic_lung_{suffix}.yaml") + ) return test_yaml def test_version(self): @@ -2137,13 +2492,19 @@ def test_version(self): def test_preserving_metadata(self): call_command("setup_proms", yaml=self.modified_yaml) - proms_system_url = Registry.objects.get(code="ICHOMLC").metadata["proms_system_url"] + proms_system_url = Registry.objects.get(code="ICHOMLC").metadata[ + "proms_system_url" + ] self.assertEqual(proms_system_url, "https://rdrf.ccgapps.com.au/ciclungproms") def test_overwriting_metadata(self): call_command("setup_proms", yaml=self.modified_yaml, override=True) - proms_system_url = Registry.objects.get(code="ICHOMLC").metadata["proms_system_url"] - self.assertEqual(proms_system_url, "https://rdrf.ccgapps.com.au/ciclungpromsmodified") + proms_system_url = Registry.objects.get(code="ICHOMLC").metadata[ + "proms_system_url" + ] + self.assertEqual( + proms_system_url, "https://rdrf.ccgapps.com.au/ciclungpromsmodified" + ) script_paths = { @@ -2153,11 +2514,12 @@ def test_overwriting_metadata(self): class CheckViewsTestCase(TestCase): - def test_check_views(self): proj_name = os.getenv("PROJECT_NAME") completed_process = subprocess.run( - ["python", f"{script_paths[proj_name]}/check_views.py", "/app/rdrf"], capture_output=True) + ["python", f"{script_paths[proj_name]}/check_views.py", "/app/rdrf"], + capture_output=True, + ) if completed_process.returncode == 1: print("Insecure Views:") print(completed_process.stdout) @@ -2165,15 +2527,16 @@ def test_check_views(self): class CheckViewsUnitTests(TestCase): - def setUp(self): import sys + base_dir = os.getcwd() old_sys_path = sys.path proj_name = os.getenv("PROJECT_NAME") os.chdir(script_paths[proj_name]) sys.path.append(".") from check_views import search_and_check_views + os.chdir(base_dir) sys.path = old_sys_path @@ -2181,8 +2544,8 @@ def setUp(self): def check_view_assist(self, view_lines): good_view = True - state = 's' - view = '' + state = "s" + view = "" for index, line_var in enumerate(view_lines): bad_view, state, view = self.func_to_test( @@ -2245,26 +2608,38 @@ def test_search_and_check_views(self): "", ] - self.assertTrue(self.check_view_assist(not_a_view), "Error: should not find bad view where there is no view!") - self.assertTrue(self.check_view_assist(view_has_mixin), "Error: view has mixin, but mixin has not been found!") - self.assertTrue(self.check_view_assist(view_has_decorators), - "Error: view has decorators, but decorators have not been found!") - self.assertFalse(self.check_view_assist(view_lacks_security), "Error: view is not secure, but no issues found!") + self.assertTrue( + self.check_view_assist(not_a_view), + "Error: should not find bad view where there is no view!", + ) + self.assertTrue( + self.check_view_assist(view_has_mixin), + "Error: view has mixin, but mixin has not been found!", + ) + self.assertTrue( + self.check_view_assist(view_has_decorators), + "Error: view has decorators, but decorators have not been found!", + ) + self.assertFalse( + self.check_view_assist(view_lacks_security), + "Error: view is not secure, but no issues found!", + ) class CalculatedFieldSecurityTestCase(RDRFTestCase): - def setUp(self): super(CalculatedFieldSecurityTestCase, self).setUp() - self.registry = Registry.objects.get(code='fh') + self.registry = Registry.objects.get(code="fh") - self.wg1, created = WorkingGroup.objects.get_or_create(name="testgroup1", - registry=self.registry) + self.wg1, created = WorkingGroup.objects.get_or_create( + name="testgroup1", registry=self.registry + ) if created: self.wg1.save() - self.wg2, created = WorkingGroup.objects.get_or_create(name="testgroup2", - registry=self.registry) + self.wg2, created = WorkingGroup.objects.get_or_create( + name="testgroup2", registry=self.registry + ) if created: self.wg2.save() @@ -2300,12 +2675,14 @@ def create_patient(self): context_manager = RDRFContextManager(self.registry) self.default_context = context_manager.get_or_create_default_context( - p, new_patient=True) + p, new_patient=True + ) return p def test_calc_field_security(self): from rdrf.helpers.utils import same_working_group, is_calculated_cde_in_registry + # What tests do we need? # 1. Testing user and patient with matching working groups self.assertTrue(same_working_group(self.patient, self.user1, self.registry)) @@ -2314,13 +2691,23 @@ def test_calc_field_security(self): self.assertFalse(same_working_group(self.patient, self.user2, self.registry)) # 3. Testing Admin working group matching - self.assertTrue(same_working_group(self.patient, self.user_admin, self.registry)) + self.assertTrue( + same_working_group(self.patient, self.user_admin, self.registry) + ) # 4. Testing if FH calculated field exists in FH - self.assertTrue(is_calculated_cde_in_registry(CommonDataElement.objects.get(pk="CDEBMI"), self.registry)) + self.assertTrue( + is_calculated_cde_in_registry( + CommonDataElement.objects.get(pk="CDEBMI"), self.registry + ) + ) # 5. Testing if FH non-calculated field is picked up by function - self.assertFalse(is_calculated_cde_in_registry(CommonDataElement.objects.get(pk="CDE00003"), self.registry)) + self.assertFalse( + is_calculated_cde_in_registry( + CommonDataElement.objects.get(pk="CDE00003"), self.registry + ) + ) # 6. Testing if non-FH calculated field exists in FH # No non-FH calculated fields in the test data, but have @@ -2328,10 +2715,11 @@ def test_calc_field_security(self): class HL7HandlerTestCase(RDRFTestCase): - - def _get_yaml_file(self, suffix='original'): + def _get_yaml_file(self, suffix="original"): this_dir = os.path.dirname(__file__) - test_yaml = os.path.abspath(os.path.join(this_dir, "..", "..", "fixtures", f"cic_crc_{suffix}.yaml")) + test_yaml = os.path.abspath( + os.path.join(this_dir, "..", "..", "fixtures", f"cic_crc_{suffix}.yaml") + ) return test_yaml def setUp(self): @@ -2364,12 +2752,15 @@ def create_patient(self): p.rdrf_registry.set([self.registry]) context_manager = RDRFContextManager(self.registry) - self.default_context = context_manager.get_or_create_default_context(p, new_patient=True) + self.default_context = context_manager.get_or_create_default_context( + p, new_patient=True + ) p.save() return p def _create_hl7mapping(self): from intframework.models import HL7Mapping + mapping = { "Demographics/family_name": {"path": "PID.F5.R1.C1"}, "Demographics/given_names": {"path": "PID.F5.R1.C2"}, @@ -2379,29 +2770,64 @@ def _create_hl7mapping(self): "Demographics/place_of_birth": {"path": "PID.F23"}, "Demographics/country_of_birth": {"path": "PID.F11.R1.C6"}, "Demographics/ethnic_origin": {"path": "PID.F22.R1.C2"}, - "Demographics/sex": {"path": "PID.F8", "tag": "mapping", "map": {"M": 1, "F": 2, "U": 3, "O": 3, "A": 3, "N": 3}}, - "Demographics/home_phone": {"tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "P", "C3": "T"}}, - "Demographics/mobile_phone": {"tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "P", "C3": "M"}}, - "Demographics/email": {"tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "P", "C3": "E"}}, - "Demographics/work_phone": {"tag": "search", "path": "PID.F13", "num_components": 4, "select": "C4", "where": {"C2": "B", "C3": "P"}} + "Demographics/sex": { + "path": "PID.F8", + "tag": "mapping", + "map": {"M": 1, "F": 2, "U": 3, "O": 3, "A": 3, "N": 3}, + }, + "Demographics/home_phone": { + "tag": "search", + "path": "PID.F13", + "num_components": 4, + "select": "C4", + "where": {"C2": "P", "C3": "T"}, + }, + "Demographics/mobile_phone": { + "tag": "search", + "path": "PID.F13", + "num_components": 4, + "select": "C4", + "where": {"C2": "P", "C3": "M"}, + }, + "Demographics/email": { + "tag": "search", + "path": "PID.F13", + "num_components": 4, + "select": "C4", + "where": {"C2": "P", "C3": "E"}, + }, + "Demographics/work_phone": { + "tag": "search", + "path": "PID.F13", + "num_components": 4, + "select": "C4", + "where": {"C2": "B", "C3": "P"}, + }, } - hm = HL7Mapping.objects.create(event_code="ADR_A19", event_map=json.dumps(mapping)) + hm = HL7Mapping.objects.create( + event_code="ADR_A19", event_map=json.dumps(mapping) + ) hm.save() def test_update_patient(self): from intframework.updater import HL7Handler from intframework.hub import MockClient + self._create_hl7mapping() self.patient = self.create_patient() user = get_user_model().objects.get(username="curator") - client = MockClient(self.registry, user, settings.HUB_ENDPOINT, settings.HUB_PORT) + client = MockClient( + self.registry, user, settings.HUB_ENDPOINT, settings.HUB_PORT + ) this_dir = os.path.dirname(__file__) mock_message = os.path.abspath(os.path.join(this_dir, "mock-message.txt")) client.MOCK_MESSAGE = mock_message response_data = client.get_data("A4376449") hl7message = response_data["message"] - hl7_handler = HL7Handler(umrn="A4376449", hl7message=hl7message, username="testing") + hl7_handler = HL7Handler( + umrn="A4376449", hl7message=hl7message, username="testing" + ) hl7_handler.handle() updated_patient = Patient.objects.get(pk=self.patient.id) self.assertEqual(updated_patient.given_names.upper(), "FRANCIS") @@ -2410,37 +2836,46 @@ def test_update_patient(self): def test_subscribed_function(self): from intframework.utils import patient_subscribed from intframework.utils import parse_message + this_dir = os.path.dirname(__file__) mock_message_path = os.path.abspath(os.path.join(this_dir, "mock-message.txt")) m = parse_message(mock_message_path) - self.assertTrue(patient_subscribed(m), "Mock message has AA so should be subscribed") + self.assertTrue( + patient_subscribed(m), "Mock message has AA so should be subscribed" + ) def test_patient_found_function(self): from intframework.utils import patient_found from intframework.utils import parse_message + this_dir = os.path.dirname(__file__) mock_message_path = os.path.abspath(os.path.join(this_dir, "mock-message.txt")) m = parse_message(mock_message_path) - self.assertTrue(patient_found(m), "Mock message has PID so patient should be found") + self.assertTrue( + patient_found(m), "Mock message has PID so patient should be found" + ) class FamilyLinkageTestCase(RDRFTestCase): - def setUp(self): super(FamilyLinkageTestCase, self).setUp() # need to import FH to correctly use family linkage this_dir = os.path.dirname(__file__) - test_yaml = os.path.abspath(os.path.join(this_dir, "..", "..", "fixtures", "exported_fh_registry.yaml")) + test_yaml = os.path.abspath( + os.path.join(this_dir, "..", "..", "fixtures", "exported_fh_registry.yaml") + ) importer = Importer() importer.load_yaml(test_yaml) importer.create_registry() - self.registry = Registry.objects.get(code='fh') + self.registry = Registry.objects.get(code="fh") self.address_type, created = AddressType.objects.get_or_create(pk=1) # make 3 patients for full tests self.patient_ids = self.create_patients() # maybe make non-patient relative for "non-patient to index" use case - def create_new_patient(self, given_name, surname, date_of_birth, sex, living_status, p_ids): + def create_new_patient( + self, given_name, surname, date_of_birth, sex, living_status, p_ids + ): from rdrf.db.contexts_api import RDRFContextManager patient_new = Patient() @@ -2459,13 +2894,18 @@ def create_new_patient(self, given_name, surname, date_of_birth, sex, living_sta patient_new.rdrf_registry.set([self.registry]) context_manager = RDRFContextManager(self.registry) default_context = context_manager.get_or_create_default_context( - patient_new, new_patient=True) + patient_new, new_patient=True + ) patient_new.save() - p_ids += [patient_new.pk, ] + p_ids += [ + patient_new.pk, + ] return patient_new, p_ids, default_context - def create_new_patient_relative(self, given_name, surname, date_of_birth, sex, living_status, location, index): + def create_new_patient_relative( + self, given_name, surname, date_of_birth, sex, living_status, location, index + ): from registry.patients.models import PatientRelative patient_rel_new = PatientRelative() @@ -2499,9 +2939,11 @@ def create_patients(self): # make patients with func, and add pks to list patient_ids = [] patient_1, patient_ids, self.patient_1_context = self.create_new_patient( - "Test", "Test", datetime(1989, 10, 21), "Male", "Living", patient_ids) + "Test", "Test", datetime(1989, 10, 21), "Male", "Living", patient_ids + ) patient_2, patient_ids, self.patient_2_context = self.create_new_patient( - "Chester", "Test", datetime(1979, 4, 13), "Male", "Living", patient_ids) + "Chester", "Test", datetime(1979, 4, 13), "Male", "Living", patient_ids + ) # patient_3, patient_ids, self.patient_3_context = self.create_new_patient("Hester", "Test", datetime(1968, 1, 4), "Female", "Living", patient_ids) # make addresses and assign to patients with func - extend later with extra home & some postal addrs self.create_address(1, "123 Somewhere Street", "Australia", patient_1) @@ -2511,29 +2953,31 @@ def create_patients(self): def run_linkage_manager(self, new_packet): from rdrf.views.family_linkage import FamilyLinkageManager + self.linkage_manager = FamilyLinkageManager(self.registry, new_packet) self.linkage_manager.run() def patient_is_index(self, patient): family_linkage_value = patient.get_form_value( self.registry.code, - self.registry.metadata['family_linkage_form_name'], - self.registry.metadata['family_linkage_section_code'], - self.registry.metadata['family_linkage_cde_code'] + self.registry.metadata["family_linkage_form_name"], + self.registry.metadata["family_linkage_section_code"], + self.registry.metadata["family_linkage_cde_code"], ) - return family_linkage_value == 'fh_is_index' + return family_linkage_value == "fh_is_index" def patient_is_relative(self, patient): family_linkage_value = patient.get_form_value( self.registry.code, - self.registry.metadata['family_linkage_form_name'], - self.registry.metadata['family_linkage_section_code'], - self.registry.metadata['family_linkage_cde_code'] + self.registry.metadata["family_linkage_form_name"], + self.registry.metadata["family_linkage_section_code"], + self.registry.metadata["family_linkage_cde_code"], ) - return family_linkage_value == 'fh_is_relative' + return family_linkage_value == "fh_is_relative" def test_family_linkage_manager(self): from registry.patients.models import PatientRelative + # What tests do we need? # First, set index patient error_string = "Error in section: " @@ -2541,319 +2985,437 @@ def test_family_linkage_manager(self): patient1_test = Patient.objects.get(pk=self.patient_ids[0]) # make FamilyLinkageManager with initial packet init_packet = { - 'index': { - 'pk': patient1_test.pk, - 'given_names': patient1_test.given_names, - 'family_name': patient1_test.family_name, - 'class': 'Patient', - 'working_group': None, - 'link': f'/fh/patient/{patient1_test.pk}/edit' + "index": { + "pk": patient1_test.pk, + "given_names": patient1_test.given_names, + "family_name": patient1_test.family_name, + "class": "Patient", + "working_group": None, + "link": f"/fh/patient/{patient1_test.pk}/edit", + }, + "relatives": [], + "original_index": { + "pk": patient1_test.pk, + "given_names": patient1_test.given_names, + "family_name": patient1_test.family_name, + "class": "Patient", + "working_group": None, + "link": f"/fh/patient/{patient1_test.pk}/edit", }, - 'relatives': [], - 'original_index': { - 'pk': patient1_test.pk, - 'given_names': patient1_test.given_names, - 'family_name': patient1_test.family_name, - 'class': 'Patient', - 'working_group': None, - 'link': f'/fh/patient/{patient1_test.pk}/edit' - } } logger.info(f"{test_section_str}...") self.run_linkage_manager(init_packet) - self.assertTrue(self.linkage_manager.index_patient == patient1_test, - f"{error_string}{test_section_str}: Index in linkage manager does not match Patient {patient1_test} (ID = {patient1_test.pk})") - self.assertTrue(self.patient_is_index(patient1_test), - f"{error_string}{test_section_str}: Patient {patient1_test} (ID = {patient1_test.pk}) is not index") + self.assertTrue( + self.linkage_manager.index_patient == patient1_test, + f"{error_string}{test_section_str}: Index in linkage manager does not match Patient {patient1_test} (ID = {patient1_test.pk})", + ) + self.assertTrue( + self.patient_is_index(patient1_test), + f"{error_string}{test_section_str}: Patient {patient1_test} (ID = {patient1_test.pk}) is not index", + ) # 1. Link patient to index patient, check that location, living status, and sex carry over test_section_str = "Linking new patient to index" patient2_test = Patient.objects.get(pk=self.patient_ids[1]) link_patient_to_index_packet = { - 'index': { - 'pk': patient1_test.pk, - 'given_names': patient1_test.given_names, - 'family_name': patient1_test.family_name, - 'class': 'Patient', - 'working_group': None, - 'link': f'/fh/patient/{patient1_test.pk}/edit' + "index": { + "pk": patient1_test.pk, + "given_names": patient1_test.given_names, + "family_name": patient1_test.family_name, + "class": "Patient", + "working_group": None, + "link": f"/fh/patient/{patient1_test.pk}/edit", }, - 'relatives': [ + "relatives": [ { - 'pk': patient2_test.pk, - 'given_names': patient2_test.given_names, - 'family_name': patient2_test.family_name, - 'class': 'Patient', - 'working_group': None, - 'link': f'/fh/patient/{patient2_test.pk}/edit', - 'relationship': 'Sibling (1st degree)' + "pk": patient2_test.pk, + "given_names": patient2_test.given_names, + "family_name": patient2_test.family_name, + "class": "Patient", + "working_group": None, + "link": f"/fh/patient/{patient2_test.pk}/edit", + "relationship": "Sibling (1st degree)", }, ], - 'original_index': { - 'pk': patient1_test.pk, - 'given_names': patient1_test.given_names, - 'family_name': patient1_test.family_name, - 'class': 'Patient', - 'working_group': None, - 'link': f'/fh/patient/{patient1_test.pk}/edit' - } + "original_index": { + "pk": patient1_test.pk, + "given_names": patient1_test.given_names, + "family_name": patient1_test.family_name, + "class": "Patient", + "working_group": None, + "link": f"/fh/patient/{patient1_test.pk}/edit", + }, } logger.info(f"{test_section_str}...") self.run_linkage_manager(link_patient_to_index_packet) # No opposite to assertRaises - this test expects an exception NOT to be raised try: - relative_patient2_test = PatientRelative.objects.get(relative_patient=patient2_test) + relative_patient2_test = PatientRelative.objects.get( + relative_patient=patient2_test + ) except PatientRelative.DoesNotExist: self.fail( - f"{error_string}{test_section_str}: PatientRelative for Patient {patient2_test} (ID = {patient2_test.pk}) has not been created") - self.assertTrue(relative_patient2_test.sex == patient2_test.sex, - f"{error_string}{test_section_str}: PatientRelative sex {relative_patient2_test.sex} does not match Patient {patient2_test} sex '{patient2_test.sex}'") - self.assertTrue(relative_patient2_test.living_status == patient2_test.living_status, - f"{error_string}{test_section_str}: PatientRelative living status {relative_patient2_test.living_status} does not match Patient {patient2_test} living status '{patient2_test.living_status}'") - self.assertTrue(relative_patient2_test.location == PatientAddress.objects.get(patient=patient2_test).country, - f"{error_string}{test_section_str}: PatientRelative location {relative_patient2_test.location} does not match Patient {patient2_test} location '{PatientAddress.objects.get(patient=patient2_test).country}'") - self.assertTrue(relative_patient2_test.patient == patient1_test, - f"{error_string}{test_section_str}: PatientRelative index {relative_patient2_test.patient} does not match Patient {patient1_test}") - self.assertTrue(relative_patient2_test in patient1_test.relatives.all(), - f"{error_string}{test_section_str}: PatientRelative is not in index {patient1_test}'s relatives") - self.assertTrue(relative_patient2_test.relationship == "Sibling (1st degree)", - f"{error_string}{test_section_str}: PatientRelative's relationship {relative_patient2_test.relationship} does not match 'Sibling (1st degree)'") - self.assertTrue(self.patient_is_relative(patient2_test), - f"{error_string}{test_section_str}: Patient {patient2_test} is not a relative") - self.assertFalse(self.patient_is_index(patient2_test), - f"{error_string}{test_section_str}: Patient {patient2_test} is an index") + f"{error_string}{test_section_str}: PatientRelative for Patient {patient2_test} (ID = {patient2_test.pk}) has not been created" + ) + self.assertTrue( + relative_patient2_test.sex == patient2_test.sex, + f"{error_string}{test_section_str}: PatientRelative sex {relative_patient2_test.sex} does not match Patient {patient2_test} sex '{patient2_test.sex}'", + ) + self.assertTrue( + relative_patient2_test.living_status == patient2_test.living_status, + f"{error_string}{test_section_str}: PatientRelative living status {relative_patient2_test.living_status} does not match Patient {patient2_test} living status '{patient2_test.living_status}'", + ) + self.assertTrue( + relative_patient2_test.location + == PatientAddress.objects.get(patient=patient2_test).country, + f"{error_string}{test_section_str}: PatientRelative location {relative_patient2_test.location} does not match Patient {patient2_test} location '{PatientAddress.objects.get(patient=patient2_test).country}'", + ) + self.assertTrue( + relative_patient2_test.patient == patient1_test, + f"{error_string}{test_section_str}: PatientRelative index {relative_patient2_test.patient} does not match Patient {patient1_test}", + ) + self.assertTrue( + relative_patient2_test in patient1_test.relatives.all(), + f"{error_string}{test_section_str}: PatientRelative is not in index {patient1_test}'s relatives", + ) + self.assertTrue( + relative_patient2_test.relationship == "Sibling (1st degree)", + f"{error_string}{test_section_str}: PatientRelative's relationship {relative_patient2_test.relationship} does not match 'Sibling (1st degree)'", + ) + self.assertTrue( + self.patient_is_relative(patient2_test), + f"{error_string}{test_section_str}: Patient {patient2_test} is not a relative", + ) + self.assertFalse( + self.patient_is_index(patient2_test), + f"{error_string}{test_section_str}: Patient {patient2_test} is an index", + ) # 2. Swap relative to index, check that original index's location, living status, and sex are preserved test_section_str = "Setting relative to be new index" relative_to_index_packet = { - 'index': { - 'pk': relative_patient2_test.pk, - 'given_names': relative_patient2_test.given_names, - 'family_name': relative_patient2_test.family_name, - 'class': 'PatientRelative', - 'working_group': None, - 'link': f'/fh/patient/{relative_patient2_test.relative_patient.pk}/edit' + "index": { + "pk": relative_patient2_test.pk, + "given_names": relative_patient2_test.given_names, + "family_name": relative_patient2_test.family_name, + "class": "PatientRelative", + "working_group": None, + "link": f"/fh/patient/{relative_patient2_test.relative_patient.pk}/edit", }, - 'relatives': [ + "relatives": [ { - 'pk': patient1_test.pk, - 'given_names': patient1_test.given_names, - 'family_name': patient1_test.family_name, - 'class': 'Patient', - 'working_group': None, - 'link': f'/fh/patient/{patient1_test.pk}/edit', - 'relationship': 'Sibling (1st degree)' + "pk": patient1_test.pk, + "given_names": patient1_test.given_names, + "family_name": patient1_test.family_name, + "class": "Patient", + "working_group": None, + "link": f"/fh/patient/{patient1_test.pk}/edit", + "relationship": "Sibling (1st degree)", }, ], - 'original_index': { - 'pk': patient1_test.pk, - 'given_names': patient1_test.given_names, - 'family_name': patient1_test.family_name, - 'class': 'Patient', - 'working_group': None, - 'link': f'/fh/patient/{patient1_test.pk}/edit' - } + "original_index": { + "pk": patient1_test.pk, + "given_names": patient1_test.given_names, + "family_name": patient1_test.family_name, + "class": "Patient", + "working_group": None, + "link": f"/fh/patient/{patient1_test.pk}/edit", + }, } logger.info(f"{test_section_str}...") self.run_linkage_manager(relative_to_index_packet) - with self.assertRaises(PatientRelative.DoesNotExist, msg=f"{error_string}{test_section_str}: PatientRelative for Patient {patient2_test} exists when it should not"): - relative_patient2_test = PatientRelative.objects.get(relative_patient=patient2_test) - self.assertTrue(self.patient_is_index(patient2_test), - f"{error_string}{test_section_str}: Patient {patient2_test} is not an index") - self.assertFalse(self.patient_is_relative(patient2_test), - f"{error_string}{test_section_str}: Patient {patient2_test} is a relative") + with self.assertRaises( + PatientRelative.DoesNotExist, + msg=f"{error_string}{test_section_str}: PatientRelative for Patient {patient2_test} exists when it should not", + ): + relative_patient2_test = PatientRelative.objects.get( + relative_patient=patient2_test + ) + self.assertTrue( + self.patient_is_index(patient2_test), + f"{error_string}{test_section_str}: Patient {patient2_test} is not an index", + ) + self.assertFalse( + self.patient_is_relative(patient2_test), + f"{error_string}{test_section_str}: Patient {patient2_test} is a relative", + ) try: - relative_patient1_test = PatientRelative.objects.get(relative_patient=patient1_test) + relative_patient1_test = PatientRelative.objects.get( + relative_patient=patient1_test + ) except PatientRelative.DoesNotExist: self.fail( - f"{error_string}{test_section_str}: PatientRelative for Patient {patient1_test} (ID = {patient1_test.pk}) has not been created") - self.assertTrue(relative_patient1_test.sex == patient1_test.sex, - f"{error_string}{test_section_str}: PatientRelative sex {relative_patient1_test.sex} does not match Patient {patient1_test} sex '{patient1_test.sex}'") - self.assertTrue(relative_patient1_test.living_status == patient1_test.living_status, - f"{error_string}{test_section_str}: PatientRelative living status {relative_patient1_test.living_status} does not match Patient {patient1_test} living status '{patient1_test.living_status}'") - self.assertTrue(relative_patient1_test.location == PatientAddress.objects.get(patient=patient1_test).country, - f"{error_string}{test_section_str}: PatientRelative location {relative_patient1_test.location} does not match Patient {patient1_test} location '{PatientAddress.objects.get(patient=patient1_test).country}'") - self.assertTrue(relative_patient1_test.patient == patient2_test, - f"{error_string}{test_section_str}: PatientRelative index {relative_patient1_test.patient} does not match Patient {patient2_test}") - self.assertTrue(relative_patient1_test in patient2_test.relatives.all(), - f"{error_string}{test_section_str}: PatientRelative is not in index {patient2_test}'s relatives") - self.assertTrue(relative_patient1_test.relationship == "Sibling (1st degree)", - f"{error_string}{test_section_str}: PatientRelative's relationship {relative_patient1_test.relationship} does not match 'Sibling (1st degree)'") - self.assertTrue(self.patient_is_relative(patient1_test), - f"{error_string}{test_section_str}: Patient {patient1_test} is not a relative") - self.assertFalse(self.patient_is_index(patient1_test), - f"{error_string}{test_section_str}: Patient {patient1_test} is an index") + f"{error_string}{test_section_str}: PatientRelative for Patient {patient1_test} (ID = {patient1_test.pk}) has not been created" + ) + self.assertTrue( + relative_patient1_test.sex == patient1_test.sex, + f"{error_string}{test_section_str}: PatientRelative sex {relative_patient1_test.sex} does not match Patient {patient1_test} sex '{patient1_test.sex}'", + ) + self.assertTrue( + relative_patient1_test.living_status == patient1_test.living_status, + f"{error_string}{test_section_str}: PatientRelative living status {relative_patient1_test.living_status} does not match Patient {patient1_test} living status '{patient1_test.living_status}'", + ) + self.assertTrue( + relative_patient1_test.location + == PatientAddress.objects.get(patient=patient1_test).country, + f"{error_string}{test_section_str}: PatientRelative location {relative_patient1_test.location} does not match Patient {patient1_test} location '{PatientAddress.objects.get(patient=patient1_test).country}'", + ) + self.assertTrue( + relative_patient1_test.patient == patient2_test, + f"{error_string}{test_section_str}: PatientRelative index {relative_patient1_test.patient} does not match Patient {patient2_test}", + ) + self.assertTrue( + relative_patient1_test in patient2_test.relatives.all(), + f"{error_string}{test_section_str}: PatientRelative is not in index {patient2_test}'s relatives", + ) + self.assertTrue( + relative_patient1_test.relationship == "Sibling (1st degree)", + f"{error_string}{test_section_str}: PatientRelative's relationship {relative_patient1_test.relationship} does not match 'Sibling (1st degree)'", + ) + self.assertTrue( + self.patient_is_relative(patient1_test), + f"{error_string}{test_section_str}: Patient {patient1_test} is not a relative", + ) + self.assertFalse( + self.patient_is_index(patient1_test), + f"{error_string}{test_section_str}: Patient {patient1_test} is an index", + ) # 3. Add non-patient relative, ensure it proceeds correctly test_section_str = "Creating non-patient relative" logger.info(f"{test_section_str}...") relative_test = self.create_new_patient_relative( - "Hester", "Test", datetime(1968, 1, 4), "Female", "Living", "MA", patient2_test) - self.assertFalse(relative_test.relationship, - f"{error_string}{test_section_str}: PatientRelative {relative_test.given_names} {relative_test.family_name}'s relationship should not be defined") + "Hester", + "Test", + datetime(1968, 1, 4), + "Female", + "Living", + "MA", + patient2_test, + ) + self.assertFalse( + relative_test.relationship, + f"{error_string}{test_section_str}: PatientRelative {relative_test.given_names} {relative_test.family_name}'s relationship should not be defined", + ) test_section_str = "Linking non-patient relative to index" add_non_patient_relative_packet = { - 'index': { - 'pk': patient2_test.pk, - 'given_names': patient2_test.given_names, - 'family_name': patient2_test.family_name, - 'class': 'Patient', - 'working_group': None, - 'link': f'/fh/patient/{patient2_test.pk}/edit' + "index": { + "pk": patient2_test.pk, + "given_names": patient2_test.given_names, + "family_name": patient2_test.family_name, + "class": "Patient", + "working_group": None, + "link": f"/fh/patient/{patient2_test.pk}/edit", }, - 'relatives': [ + "relatives": [ { - 'pk': relative_patient1_test.pk, - 'given_names': patient1_test.given_names, - 'family_name': patient1_test.family_name, - 'class': 'PatientRelative', - 'working_group': None, - 'link': f'/fh/patient/{patient1_test.pk}/edit', - 'relationship': 'Sibling (1st degree)' + "pk": relative_patient1_test.pk, + "given_names": patient1_test.given_names, + "family_name": patient1_test.family_name, + "class": "PatientRelative", + "working_group": None, + "link": f"/fh/patient/{patient1_test.pk}/edit", + "relationship": "Sibling (1st degree)", }, { - 'pk': relative_test.pk, - 'given_names': relative_test.given_names, - 'family_name': relative_test.family_name, - 'class': 'PatientRelative', - 'working_group': None, - 'link': None, - 'relationship': '1st Cousin (3rd degree)' - } + "pk": relative_test.pk, + "given_names": relative_test.given_names, + "family_name": relative_test.family_name, + "class": "PatientRelative", + "working_group": None, + "link": None, + "relationship": "1st Cousin (3rd degree)", + }, ], - 'original_index': { - 'pk': patient2_test.pk, - 'given_names': patient2_test.given_names, - 'family_name': patient2_test.family_name, - 'class': 'Patient', - 'working_group': None, - 'link': f'/fh/patient/{patient2_test.pk}/edit' - } + "original_index": { + "pk": patient2_test.pk, + "given_names": patient2_test.given_names, + "family_name": patient2_test.family_name, + "class": "Patient", + "working_group": None, + "link": f"/fh/patient/{patient2_test.pk}/edit", + }, } logger.info(f"{test_section_str}...") self.run_linkage_manager(add_non_patient_relative_packet) # Need to re-get relative for relationship to be tested properly relative_test = PatientRelative.objects.get(pk=relative_test.pk) - self.assertTrue(relative_test.pk in [rel['pk'] for rel in self.linkage_manager.relatives], - f"{error_string}{test_section_str}: PatientRelative {relative_test.given_names} {relative_test.family_name} is not in linkage manager relative list") - self.assertFalse(relative_test.relative_patient, - f"{error_string}{test_section_str}: PatientRelative {relative_test.given_names} {relative_test.family_name} is a non-patient relative and should not be linked to a patient") - self.assertTrue(relative_test.patient == patient2_test, - f"{error_string}{test_section_str}: PatientRelative index {relative_test.patient} does not match Patient {patient2_test}") - self.assertTrue(relative_test.relationship == "1st Cousin (3rd degree)", - f"{error_string}{test_section_str}: PatientRelative's relationship {relative_test.relationship} does not match '1st Cousin (3rd degree)'") - self.assertTrue(relative_test in patient2_test.relatives.all(), - f"{error_string}{test_section_str}: PatientRelative is not in index {patient2_test}'s relatives") + self.assertTrue( + relative_test.pk in [rel["pk"] for rel in self.linkage_manager.relatives], + f"{error_string}{test_section_str}: PatientRelative {relative_test.given_names} {relative_test.family_name} is not in linkage manager relative list", + ) + self.assertFalse( + relative_test.relative_patient, + f"{error_string}{test_section_str}: PatientRelative {relative_test.given_names} {relative_test.family_name} is a non-patient relative and should not be linked to a patient", + ) + self.assertTrue( + relative_test.patient == patient2_test, + f"{error_string}{test_section_str}: PatientRelative index {relative_test.patient} does not match Patient {patient2_test}", + ) + self.assertTrue( + relative_test.relationship == "1st Cousin (3rd degree)", + f"{error_string}{test_section_str}: PatientRelative's relationship {relative_test.relationship} does not match '1st Cousin (3rd degree)'", + ) + self.assertTrue( + relative_test in patient2_test.relatives.all(), + f"{error_string}{test_section_str}: PatientRelative is not in index {patient2_test}'s relatives", + ) # 4. Swap non-patient relative to index, check that new patient is created + results of test #2 test_section_str = "Setting non-patient relative to be new index" relative_test_data = { - 'pk': relative_test.pk, - 'given_names': relative_test.given_names, - 'family_name': relative_test.family_name, - 'date_of_birth': relative_test.date_of_birth, - 'sex': relative_test.sex, - 'living_status': relative_test.living_status + "pk": relative_test.pk, + "given_names": relative_test.given_names, + "family_name": relative_test.family_name, + "date_of_birth": relative_test.date_of_birth, + "sex": relative_test.sex, + "living_status": relative_test.living_status, } non_patient_to_index_packet = { - 'index': { - 'pk': relative_test.pk, - 'given_names': relative_test.given_names, - 'family_name': relative_test.family_name, - 'class': 'PatientRelative', - 'working_group': None, - 'link': None + "index": { + "pk": relative_test.pk, + "given_names": relative_test.given_names, + "family_name": relative_test.family_name, + "class": "PatientRelative", + "working_group": None, + "link": None, }, - 'relatives': [ + "relatives": [ { - 'pk': relative_patient1_test.pk, - 'given_names': patient1_test.given_names, - 'family_name': patient1_test.family_name, - 'class': 'PatientRelative', - 'working_group': None, - 'link': f'/fh/patient/{patient1_test.pk}/edit', - 'relationship': '1st Cousin (3rd degree)' + "pk": relative_patient1_test.pk, + "given_names": patient1_test.given_names, + "family_name": patient1_test.family_name, + "class": "PatientRelative", + "working_group": None, + "link": f"/fh/patient/{patient1_test.pk}/edit", + "relationship": "1st Cousin (3rd degree)", }, { - 'pk': patient2_test.pk, - 'given_names': patient2_test.given_names, - 'family_name': patient2_test.family_name, - 'class': 'Patient', - 'working_group': None, - 'link': f'/fh/patient/{patient2_test.pk}/edit', - 'relationship': '1st Cousin (3rd degree)' - } + "pk": patient2_test.pk, + "given_names": patient2_test.given_names, + "family_name": patient2_test.family_name, + "class": "Patient", + "working_group": None, + "link": f"/fh/patient/{patient2_test.pk}/edit", + "relationship": "1st Cousin (3rd degree)", + }, ], - 'original_index': { - 'pk': patient2_test.pk, - 'given_names': patient2_test.given_names, - 'family_name': patient2_test.family_name, - 'class': 'Patient', - 'working_group': None, - 'link': f'/fh/patient/{patient2_test.pk}/edit' - } + "original_index": { + "pk": patient2_test.pk, + "given_names": patient2_test.given_names, + "family_name": patient2_test.family_name, + "class": "Patient", + "working_group": None, + "link": f"/fh/patient/{patient2_test.pk}/edit", + }, } logger.info(f"{test_section_str}...") self.run_linkage_manager(non_patient_to_index_packet) - with self.assertRaises(PatientRelative.DoesNotExist, msg=f"{error_string}{test_section_str}: PatientRelative still exists when it should not"): - relative_test = PatientRelative.objects.get(pk=relative_test_data['pk']) + with self.assertRaises( + PatientRelative.DoesNotExist, + msg=f"{error_string}{test_section_str}: PatientRelative still exists when it should not", + ): + relative_test = PatientRelative.objects.get(pk=relative_test_data["pk"]) try: - relative_patient1_test = PatientRelative.objects.get(relative_patient=patient1_test) + relative_patient1_test = PatientRelative.objects.get( + relative_patient=patient1_test + ) except PatientRelative.DoesNotExist: self.fail( - f"{error_string}{test_section_str}: PatientRelative for Patient {patient1_test} (ID = {patient1_test.pk}) does not exist") + f"{error_string}{test_section_str}: PatientRelative for Patient {patient1_test} (ID = {patient1_test.pk}) does not exist" + ) try: - relative_patient2_test = PatientRelative.objects.get(relative_patient=patient2_test) + relative_patient2_test = PatientRelative.objects.get( + relative_patient=patient2_test + ) except PatientRelative.DoesNotExist: self.fail( - f"{error_string}{test_section_str}: PatientRelative for Patient {patient2_test} (ID = {patient2_test.pk}) has not been created") + f"{error_string}{test_section_str}: PatientRelative for Patient {patient2_test} (ID = {patient2_test.pk}) has not been created" + ) relative_test_patient = relative_patient1_test.patient - self.assertTrue(relative_test_patient, - f"{error_string}{test_section_str}: New index patient does not exist") - self.assertTrue(self.patient_is_index(relative_test_patient), - f"{error_string}{test_section_str}: Patient {relative_test_patient} is not an index") - self.assertTrue(self.patient_is_relative(patient2_test), - f"{error_string}{test_section_str}: Patient {patient2_test} is not a relative") - self.assertTrue(relative_patient1_test in relative_test_patient.relatives.all(), - f"{error_string}{test_section_str}: PatientRelative {relative_patient1_test.given_names} {relative_patient1_test.family_name} is not in index {relative_test_patient}'s relatives") - self.assertTrue(relative_patient2_test in relative_test_patient.relatives.all(), - f"{error_string}{test_section_str}: PatientRelative {relative_patient2_test.given_names} {relative_patient2_test.family_name} is not in index {relative_test_patient}'s relatives") - self.assertTrue(relative_test_patient.given_names == relative_test_data['given_names'], - f"{error_string}{test_section_str}: Patient given name {relative_test_patient.given_names} does not match PatientRelative given name {relative_test_data['given_names']}") - self.assertTrue(relative_test_patient.family_name.lower() == relative_test_data['family_name'].lower(), - f"{error_string}{test_section_str}: Patient surname {relative_test_patient.family_name} does not match (lowercase) PatientRelative surname {relative_test_data['family_name']}") - self.assertTrue(relative_test_patient.date_of_birth == relative_test_data['date_of_birth'], - f"{error_string}{test_section_str}: Patient date of birth {relative_test_patient.date_of_birth} does not match PatientRelative date of birth {relative_test_data['date_of_birth']}") - self.assertTrue(relative_test_patient.sex == relative_test_data['sex'], - f"{error_string}{test_section_str}: Patient sex {relative_test_patient.sex} does not match PatientRelative sex {relative_test_data['sex']}") - self.assertTrue(relative_test_patient.living_status == relative_test_data['living_status'], - f"{error_string}{test_section_str}: Patient living status {relative_test_patient.living_status} does not match PatientRelative living status {relative_test_data['living_status']}") - self.assertTrue(relative_patient1_test.relationship == "1st Cousin (3rd degree)", - f"{error_string}{test_section_str}: PatientRelative {relative_patient1_test.given_names} {relative_patient1_test.family_name}'s relationship {relative_patient1_test.relationship} does not match '1st Cousin (3rd degree)'") - self.assertTrue(relative_patient2_test.relationship == "1st Cousin (3rd degree)", - f"{error_string}{test_section_str}: PatientRelative {relative_patient2_test.given_names} {relative_patient2_test.family_name}'s relationship {relative_patient2_test.relationship} does not match '1st Cousin (3rd degree)'") - self.assertTrue(relative_patient2_test.sex == patient2_test.sex, - f"{error_string}{test_section_str}: PatientRelative sex {relative_patient2_test.sex} does not match Patient {patient2_test} sex '{patient2_test.sex}'") - self.assertTrue(relative_patient2_test.living_status == patient2_test.living_status, - f"{error_string}{test_section_str}: PatientRelative living status {relative_patient2_test.living_status} does not match Patient {patient2_test} living status '{patient2_test.living_status}'") - self.assertTrue(relative_patient2_test.location == PatientAddress.objects.get(patient=patient2_test).country, - f"{error_string}{test_section_str}: PatientRelative location {relative_patient2_test.location} does not match Patient {patient2_test} location '{PatientAddress.objects.get(patient=patient2_test).country}'") - self.assertTrue(self.patient_is_relative(patient2_test), - f"{error_string}{test_section_str}: Patient {patient2_test} is not a relative") - self.assertFalse(self.patient_is_index(patient2_test), - f"{error_string}{test_section_str}: Patient {patient2_test} is an index") + self.assertTrue( + relative_test_patient, + f"{error_string}{test_section_str}: New index patient does not exist", + ) + self.assertTrue( + self.patient_is_index(relative_test_patient), + f"{error_string}{test_section_str}: Patient {relative_test_patient} is not an index", + ) + self.assertTrue( + self.patient_is_relative(patient2_test), + f"{error_string}{test_section_str}: Patient {patient2_test} is not a relative", + ) + self.assertTrue( + relative_patient1_test in relative_test_patient.relatives.all(), + f"{error_string}{test_section_str}: PatientRelative {relative_patient1_test.given_names} {relative_patient1_test.family_name} is not in index {relative_test_patient}'s relatives", + ) + self.assertTrue( + relative_patient2_test in relative_test_patient.relatives.all(), + f"{error_string}{test_section_str}: PatientRelative {relative_patient2_test.given_names} {relative_patient2_test.family_name} is not in index {relative_test_patient}'s relatives", + ) + self.assertTrue( + relative_test_patient.given_names == relative_test_data["given_names"], + f"{error_string}{test_section_str}: Patient given name {relative_test_patient.given_names} does not match PatientRelative given name {relative_test_data['given_names']}", + ) + self.assertTrue( + relative_test_patient.family_name.lower() + == relative_test_data["family_name"].lower(), + f"{error_string}{test_section_str}: Patient surname {relative_test_patient.family_name} does not match (lowercase) PatientRelative surname {relative_test_data['family_name']}", + ) + self.assertTrue( + relative_test_patient.date_of_birth == relative_test_data["date_of_birth"], + f"{error_string}{test_section_str}: Patient date of birth {relative_test_patient.date_of_birth} does not match PatientRelative date of birth {relative_test_data['date_of_birth']}", + ) + self.assertTrue( + relative_test_patient.sex == relative_test_data["sex"], + f"{error_string}{test_section_str}: Patient sex {relative_test_patient.sex} does not match PatientRelative sex {relative_test_data['sex']}", + ) + self.assertTrue( + relative_test_patient.living_status == relative_test_data["living_status"], + f"{error_string}{test_section_str}: Patient living status {relative_test_patient.living_status} does not match PatientRelative living status {relative_test_data['living_status']}", + ) + self.assertTrue( + relative_patient1_test.relationship == "1st Cousin (3rd degree)", + f"{error_string}{test_section_str}: PatientRelative {relative_patient1_test.given_names} {relative_patient1_test.family_name}'s relationship {relative_patient1_test.relationship} does not match '1st Cousin (3rd degree)'", + ) + self.assertTrue( + relative_patient2_test.relationship == "1st Cousin (3rd degree)", + f"{error_string}{test_section_str}: PatientRelative {relative_patient2_test.given_names} {relative_patient2_test.family_name}'s relationship {relative_patient2_test.relationship} does not match '1st Cousin (3rd degree)'", + ) + self.assertTrue( + relative_patient2_test.sex == patient2_test.sex, + f"{error_string}{test_section_str}: PatientRelative sex {relative_patient2_test.sex} does not match Patient {patient2_test} sex '{patient2_test.sex}'", + ) + self.assertTrue( + relative_patient2_test.living_status == patient2_test.living_status, + f"{error_string}{test_section_str}: PatientRelative living status {relative_patient2_test.living_status} does not match Patient {patient2_test} living status '{patient2_test.living_status}'", + ) + self.assertTrue( + relative_patient2_test.location + == PatientAddress.objects.get(patient=patient2_test).country, + f"{error_string}{test_section_str}: PatientRelative location {relative_patient2_test.location} does not match Patient {patient2_test} location '{PatientAddress.objects.get(patient=patient2_test).country}'", + ) + self.assertTrue( + self.patient_is_relative(patient2_test), + f"{error_string}{test_section_str}: Patient {patient2_test} is not a relative", + ) + self.assertFalse( + self.patient_is_index(patient2_test), + f"{error_string}{test_section_str}: Patient {patient2_test} is an index", + ) class LungCancerSmokingTestCase(RDRFTestCase): # "CIGDAY", "SMOKING", "SMOKINGSTARTYEAR", "SMOKINGSTOPYEAR", "SMOKABSTINENTYRS" def setUp(self): from rdrf.forms.fields.calculated_functions import SMOKEPACKYEAR + self.func = SMOKEPACKYEAR def values(self, smoking, cigday, start_year, abst, stop_year, expectation): @@ -2893,18 +3455,23 @@ class CICCancerStageTestCase(RDRFTestCase): """ This class tests calculated fields in CIC """ + patient_values = {} - yaml_map = {"crc": "crc44.yaml", - "lc": "lc22.yaml", - "bc": "bc29.yaml", - "ov": "ov41.yaml"} + yaml_map = { + "crc": "crc44.yaml", + "lc": "lc22.yaml", + "bc": "bc31.yaml", + "ov": "ov41.yaml", + } def get_rules(self): return [] def _get_yaml_file(self, filename): this_dir = os.path.dirname(__file__) - test_yaml = os.path.abspath(os.path.join(this_dir, "..", "..", "fixtures", filename)) + test_yaml = os.path.abspath( + os.path.join(this_dir, "..", "..", "fixtures", filename) + ) return test_yaml def import_registry(self, name): @@ -2996,4 +3563,6 @@ def sanity_check_spec(self, input_output_pairs, allowed_inputs): inputs_dict = pair[0] for spec_input in inputs_dict: if spec_input not in allowed_inputs: - raise Exception(f"input {spec_input} is not an allowed input: {allowed_inputs}") + raise Exception( + f"input {spec_input} is not an allowed input: {allowed_inputs}" + )