diff --git a/app/helpers/json_schema_validation.rb b/app/helpers/json_schema_validation.rb index dd0655d3b..12084b020 100644 --- a/app/helpers/json_schema_validation.rb +++ b/app/helpers/json_schema_validation.rb @@ -13,7 +13,8 @@ end begin - path = "config/forms/schema/generic.json" + # path = "config/forms/schema/generic.json" + path = "config/forms/schema/test.json" # path = "config/forms/schema/2021_2022.json" file = File.open(path) diff --git a/config/forms/schema/generic.json b/config/forms/schema/generic.json index b9502c0e1..d7e71468d 100644 --- a/config/forms/schema/generic.json +++ b/config/forms/schema/generic.json @@ -4,6 +4,7 @@ "title": "Form", "description": "A form", "type": "object", + "required": ["form_type", "start_year", "end_year", "sections"], "properties": { "form_type": { "description": "", @@ -11,8 +12,7 @@ }, "start_year": { "description": "", - "type": "integer", - "optional": "true" + "type": "integer" }, "end_year": { "description": "", diff --git a/config/forms/schema/test.json b/config/forms/schema/test.json new file mode 100644 index 000000000..998146adf --- /dev/null +++ b/config/forms/schema/test.json @@ -0,0 +1,80 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "$id": "https://example.com/product.schema.json", + "title": "Form", + "description": "A form", + "type": "object", + "required": ["form_type", "start_year", "end_year", "sections"], + "properties": { + "form_type": { + "description": "", + "type": "string" + }, + "start_year": { + "description": "", + "type": "integer" + }, + "end_year": { + "description": "", + "type": "integer" + }, + "sections": { + "type": "object", + "patternProperties": { + "^[0-9]+$": { + "description": "", + "type": "string" + }, + "properties": { + "label": { + "description": "", + "type": "string" + }, + "subsections": { + "description": "", + "type": "object", + "patternProperties": { + "^[0-9]+$": { + "description": "", + "type": "object", + "required": ["label"], + "properties": { + "label": { + "description": "", + "type": "string" + }, + "pages": { + "type": "object", + "patternProperties": { + "^[0-9]+$": { + "properties": { + "header": { + "description": "", + "type": "string" + }, + "description": { + "description": "", + "type": "string" + }, + "questions": { + "type": "object", + "properties": { + + } + } + } + } + } + } + } + }, + "additionalProperties": false, + "maxProperties": 1, + "minProperties": 1 + } + } + } + } + } + } +} \ No newline at end of file diff --git a/spec/fixtures/forms/test_form.json b/spec/fixtures/forms/test_form.json index 0d26827fa..73df96635 100644 --- a/spec/fixtures/forms/test_form.json +++ b/spec/fixtures/forms/test_form.json @@ -17,520 +17,6 @@ "type": "text" } } - }, - "person_1_age": { - "questions": { - "person_1_age": { - "check_answer_label": "Tenant's age", - "header": "What is the tenant's age?", - "type": "numeric", - "min": 0, - "max": 150, - "step": 1 - } - } - }, - "person_1_gender": { - "questions": { - "person_1_gender": { - "check_answer_label": "Tenant's gender", - "header": "Which of these best describes the tenant's gender identity?", - "type": "radio", - "answer_options": { - "0": "Female", - "1": "Male", - "2": "Non-binary", - "3": "Prefer not to say" - } - } - } - }, - "household_number_of_other_members": { - "questions": { - "household_number_of_other_members": { - "check_answer_label": "Number of Other Household Members", - "header": "How many other people are there in the household?", - "hint_text": "The maximum number of others is 1", - "type": "numeric", - "min": 0, - "max": 1, - "step": 1, - "conditional_for": { - "person_2_relationship": ">0", - "person_2_age": ">0", - "person_2_gender": ">0", - "person_2_economic_status": ">0" - } - }, - "person_2_relationship": { - "check_answer_label": "Person 2's relationship to lead tenant", - "header": "What's person 2's relationship to lead tenant", - "type": "radio", - "answer_options": { - "0": "Other", - "1": "Prefer not to say" - } - }, - "person_2_age": { - "check_answer_label": "Person 2's age", - "header": "What's person 2's age", - "type": "numeric", - "min": 0, - "max": 150, - "step": 1 - }, - "person_2_gender": { - "check_answer_label": "Person 2's gender", - "header": "Which of these best describes person 2's gender identity?", - "type": "radio", - "answer_options": { - "0": "Female", - "1": "Male", - "2": "Non-binary", - "3": "Prefer not to say" - } - }, - "person_2_economic_status": { - "check_answer_label": "Person 2's Work", - "header": "Which of these best describes person 2's working situation?", - "type": "radio", - "answer_options": { - "0": "Other", - "1": "Prefer not to say" - } - } - } - } - } - }, - "household_needs": { - "label": "Household needs", - "pages": { - "armed_forces": { - "header": "Experience of the UK Armed Forces", - "questions": { - "armed_forces": { - "header": "Has the tenant ever served in the UK armed forces?", - "type": "radio", - "check_answer_label": "Armed Forces", - "answer_options": { - "0": "Yes - a regular", - "1": "Yes - a reserve", - "2": "No", - "3": "Prefer not to say" - }, - "conditional_for": { - "armed_forces_active": [ - "Yes - a regular", - "Yes - a reserve" - ], - "armed_forces_injured": [ - "Yes - a regular", - "Yes - a reserve" - ] - } - }, - "armed_forces_active": { - "header": "Are they still serving?", - "type": "radio", - "check_answer_label": "When did they leave the Armed Forces?", - "answer_options": { - "0": "Yes", - "1": "No - they left up to 5 years ago", - "2": "No - they left more than 5 years ago", - "3": "Prefer not to say" - } - }, - "armed_forces_injured": { - "header": "Were they seriously injured or ill as a result of their service?", - "type": "radio", - "check_answer_label": "Has anyone in the household been seriously injured or ill as a result of their service in the armed forces?", - "answer_options": { - "0": "Yes", - "1": "No", - "2": "Prefer not to say" - } - } - } - }, - "medical_conditions": { - "questions": { - "medical_conditions": { - "header": "Does anyone in the household have any of the following that they expect to last for 12 months or more:", - "type": "radio", - "check_answer_label": "Physical, mental health or illness in the household", - "answer_options": { - "0": "Yes", - "1": "No", - "2": "Do not know", - "3": "Prefer not to say" - } - } - } - }, - "accessibility_requirements": { - "questions": { - "accessibility_requirements": { - "header": "Are any of these affected by their condition or illness?", - "hint_text": "Select all that apply", - "type": "checkbox", - "check_answer_label": "Disability requirements", - "answer_options": { - "accessibility_requirements_fully_wheelchair_accessible_housing": "Fully wheelchair accessible housing", - "accessibility_requirements_wheelchair_access_to_essential_rooms": "Wheelchair access to essential rooms", - "accessibility_requirements_level_access_housing": "Level access housing", - "divider_a": true, - "accessibility_requirements_do_not_know": "Do not know" - } - } - } - }, - "condition_effects": { - "questions": { - "condition_effects": { - "header": "Are any of these affected by their condition or illness?", - "hint_text": "Select all that apply", - "type": "checkbox", - "check_answer_label": "Conditions or illnesses", - "answer_options": { - "condition_effects_vision": "Vision - such as blindness or partial sight", - "condition_effects_hearing": "Hearing - such as deafness or partial hearing" - } - } - } - } - } - } - } - }, - "tenancy_and_property": { - "label": "Tenancy and property information", - "subsections": { - "tenancy_information": { - "label": "Tenancy information", - "pages": { - "tenancy_code": { - "questions": { - "tenancy_code": { - "check_answer_label": "What is the tenancy code?", - "header": "What is the tenancy code?", - "type": "text" - } - } - } - } - }, - "property_information": { - "label": "Property information", - "pages": { - "property_wheelchair_accessible": { - "questions": { - "property_wheelchair_accessible": { - "check_answer_label": "Is property built or adapted to wheelchair user standards?", - "header": "Is property built or adapted to wheelchair user standards?", - "type": "radio", - "answer_options": { - "0": "Yes", - "1": "No" - } - } - } - } - } - }, - "conditional_question": { - "label": "Conditional question", - "pages": { - "conditional_question": { - "questions": { - "pregnancy": { - "check_answer_label": "Has the condition been met?", - "header": "Has the condition been met?", - "type": "radio", - "answer_options": { - "0": "Yes", - "1": "No" - } - } - }, - "conditional_route_to": { - "rent": { "pregnancy": "Yes", "person_1_gender": "Female" }, - "conditional_question_yes_page": { "pregnancy": "Yes" }, - "conditional_question_no_page": { "pregnancy": "No" } - }, - "default_next_page": "check_answers" - }, - "conditional_question_yes_page": { - "questions": { - "cbl_letting": { - "check_answer_label": "Has the next condition been met?", - "header": "Has the next condition been met?", - "type": "radio", - "answer_options": { - "0": "Yes", - "1": "No" - } - } - }, - "default_next_page": "check_answers" - }, - "conditional_question_no_page": { - "questions": { - "conditional_question_no_question": { - "check_answer_label": "Has the condition not been met?", - "header": "Has the next condition not been met?", - "type": "radio", - "answer_options": { - "0": "Yes", - "1": "No" - } - } - }, - "default_next_page": "conditional_question_no_second_page" - }, - "conditional_question_no_second_page": { - "questions": { - "conditional_question_no_second_question": { - "check_answer_label": "Has the condition not been met again?", - "header": "Has the next condition not been met again?", - "type": "radio", - "answer_options": { - "0": "Yes", - "1": "No" - } - } - } - } - } - } - } - }, - "rent_and_charges": { - "label": "Rent and charges", - "subsections": { - "income_and_benefits": { - "label": "Income and benefits", - "pages": { - "net_income": { - "questions": { - "net_income": { - "check_answer_label": "Income", - "header": "What is the tenant’s /and partner’s combined income after tax?", - "type": "numeric", - "min": 0, - "step": "1" - }, - "net_income_frequency": { - "check_answer_label": "Income Frequency", - "header": "How often do they receive this income?", - "type": "radio", - "answer_options": { - "0": "Weekly", - "1": "Monthly", - "2": "Yearly" - } - } - }, - "soft_validations": { - "override_net_income_validation": { - "check_answer_label": "Net income confirmed?", - "type": "validation_override", - "answer_options": { - "override_net_income_validation": "Yes" - } - } - } - }, - "net_income_uc_proportion": { - "questions": { - "net_income_uc_proportion": { - "check_answer_label": "Benefits as a proportion of income", - "header": "How much of the tenant’s income is from Universal Credit, state pensions or benefits?", - "type": "radio", - "answer_options": { - "0": "All", - "1": "Some" - } - } - } - }, - "housing_benefit": { - "questions": { - "housing_benefit": { - "check_answer_label": "Universal Credit & Housing Benefit", - "header": "Is the tenant likely to be in receipt of any of these housing-related benefits?", - "type": "radio", - "answer_options": { - "0": "Housing Benefit, but not Universal Credit", - "1": "Prefer not to say" - } - } - } - } - } - }, - "rent": { - "label": "Rent", - "pages": { - "rent": { - "questions": { - "rent_frequency": { - "check_answer_label": "Rent Period", - "header": "Which period are rent and other charges due?", - "type": "radio", - "answer_options": { - "0": "Weekly for 52 weeks", - "1": "Fortnightly" - } - }, - "basic_rent": { - "check_answer_label": "Basic Rent", - "header": "What is the basic rent?", - "hint_text": "Eligible for housing benefit or Universal Credit", - "type": "numeric", - "min": 0, - "step": 1, - "fields-to-add": [ - "basic_rent", - "service_charge", - "personal_service_charge", - "support_charge" - ], - "result-field": "total_charge" - }, - "service_charge": { - "check_answer_label": "Service Charge", - "header": "What is the service charge?", - "hint_text": "Eligible for housing benefit or Universal Credit", - "type": "numeric", - "min": 0, - "step": 1, - "fields-to-add": [ - "basic_rent", - "service_charge", - "personal_service_charge", - "support_charge" - ], - "result-field": "total_charge" - }, - "personal_service_charge": { - "check_answer_label": "Personal Service Charge", - "header": "What is the personal service charge?", - "hint_text": "Not eligible for housing benefit or Universal Credit. For example, hot water excluding water rates.", - "type": "numeric", - "min": 0, - "step": 1, - "fields-to-add": [ - "basic_rent", - "service_charge", - "personal_service_charge", - "support_charge" - ], - "result-field": "total_charge" - }, - "support_charge": { - "check_answer_label": "Support Charge", - "header": "What is the support charge?", - "hint_text": "This is to fund housing-related support services included in the tenancy agreement", - "type": "numeric", - "min": 0, - "step": 1, - "fields-to-add": [ - "basic_rent", - "service_charge", - "personal_service_charge", - "support_charge" - ], - "result-field": "total_charge" - }, - "total_charge": { - "check_answer_label": "Total Charge", - "header": "Total charge?", - "hint_text": "This is the total of rent and all charges", - "type": "numeric", - "min": 0, - "step": 1, - "readonly": true - } - } - } - } - } - } - }, - "local_authority": { - "label": "Local authority", - "subsections": { - "local_authority": { - "label": "Local authority", - "pages": { - "time_lived_in_la": { - "questions": { - "time_lived_in_la": { - "check_answer_label": "How long has the household continuously lived in the local authority area where the new letting is located?", - "header": "How long has the household continuously lived in the local authority area where the new letting is located?", - "type": "radio", - "answer_options": { - "0": "Just moved to local authority area", - "1": "Less than 1 year", - "2": "1 to 2 years", - "3": "2 to 3 years", - "4": "3 to 4 years", - "5": "4 to 5 years", - "6": "5 years or more", - "7": "Do not know" - } - } - } - }, - "time_on_la_waiting_list": { - "questions": { - "time_on_la_waiting_list": { - "check_answer_label": "How long has the household been on the local authority waiting list where the new letting is located?", - "header": "How long has the household been on the local authority waiting list where the new letting is located?", - "type": "radio", - "answer_options": { - "0": "Just moved to local authority area", - "1": "Less than 1 year", - "2": "1 to 2 years", - "3": "2 to 3 years", - "4": "3 to 4 years", - "5": "4 to 5 years", - "6": "5 years or more", - "7": "Do not know" - } - } - } - }, - "previous_postcode": { - "questions": { - "previous_postcode": { - "check_answer_label": "Postcode of previous accomodation if the household has moved from settled accommodation", - "header": "Postcode for the previous accommodation", - "hint_text": "If the household has moved from settled accommodation immediately prior to being re-housed", - "type": "text", - "conditional_for": { "faake_key": "fake_condition" } - } - } - } - } - } - } - }, - "submission": { - "label": "Submission", - "subsections": { - "declaration": { - "label": "Declaration", - "pages": { - "declaration": { - "questions": { - "declaration": { - "check_answer_label": "", - "header": "What is the tenant code?", - "type": "text" - } - } } } } @@ -538,3 +24,4 @@ } } } + \ No newline at end of file