diff --git a/app/helpers/json_schema_validation.rb b/app/helpers/json_schema_validation.rb index d500e018d..3e46be8e0 100644 --- a/app/helpers/json_schema_validation.rb +++ b/app/helpers/json_schema_validation.rb @@ -5,385 +5,39 @@ require "json" # "start_year": 2021, # "end_year": 2022, # "sections": { -# "about_this_log": { -# "label": "About this log", -# "subsections": { # "about_this_log": { # "label": "About this log", -# "pages": { - # "tenant_code": { - # "header": "", - # "description": "", - # "questions": { - # "tenant_code": { - # "check_answer_label": "Tenant code", - # "header": "What is the tenant code?", - # "hint_text": "", - # "type": "text" - # } - # } - # }, +# "subsections": { +# "about_this_log": { +# "label": "About this log", +# "pages": { + # "tenant_code": { + # "header": "", + # "description": "", + # "questions": { + # "tenant_code": { + # "check_answer_label": "Tenant code", + # "header": "What is the tenant code?", + # "hint_text": "", + # "type": "text" + # } + # } + # }, begin - schema = { - "$schema": "http://json-schema.org/draft-04/schema", - "$id": "http://example.com/example.json", - "type": "object", - "title": "The root schema", - "description": "The root schema comprises the entire JSON document.", - "default": {}, - "examples": [ - { - "form_type": "lettings", - "start_year": 2021, - "end_year": 2022, - "sections": { - "household": { - "label": "About the household", - "subsections": { - "household_characteristics": { - "label": "Household characteristics", - "pages": { - "tenant_code": { - "questions": { - "tenant_code": { - "check_answer_label": "Tenant code", - "header": "What is the tenant code?", - "type": "text" - } - } - } - } - } - } - } - } - } - ], - "required": [ - "form_type", - "start_year", - "end_year", - "sections" - ], - "properties": { - "form_type": { - "$id": "#/properties/form_type", - "type": "string", - "title": "The form_type schema", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": [ - "lettings" - ] - }, - "start_year": { - "$id": "#/properties/start_year", - "type": "integer", - "title": "The start_year schema", - "description": "An explanation about the purpose of this instance.", - "default": 0, - "examples": [ - 2021 - ] - }, - "end_year": { - "$id": "#/properties/end_year", - "type": "integer", - "title": "The end_year schema", - "description": "An explanation about the purpose of this instance.", - "default": 0, - "examples": [ - 2022 - ] - }, - "sections": { - "$id": "#/properties/sections", - "type": "object", - "title": "The sections schema", - "description": "An explanation about the purpose of this instance.", - "default": {}, - "examples": [ - { - "household": { - "label": "About the household", - "subsections": { - "household_characteristics": { - "label": "Household characteristics", - "pages": { - "tenant_code": { - "questions": { - "tenant_code": { - "check_answer_label": "Tenant code", - "header": "What is the tenant code?", - "type": "text" - } - } - } - } - } - } - } - } - ], - "required": [ - "household" - ], - "properties": { - "household": { - "$id": "#/properties/sections/properties/household", - "type": "object", - "title": "The household schema", - "description": "An explanation about the purpose of this instance.", - "default": {}, - "examples": [ - { - "label": "About the household", - "subsections": { - "household_characteristics": { - "label": "Household characteristics", - "pages": { - "tenant_code": { - "questions": { - "tenant_code": { - "check_answer_label": "Tenant code", - "header": "What is the tenant code?", - "type": "text" - } - } - } - } - } - } - } - ], - "required": [ - "label", - "subsections" - ], - "properties": { - "label": { - "$id": "#/properties/sections/properties/household/properties/label", - "type": "string", - "title": "The label schema", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": [ - "About the household" - ] - }, - "subsections": { - "$id": "#/properties/sections/properties/household/properties/subsections", - "type": "object", - "title": "The subsections schema", - "description": "An explanation about the purpose of this instance.", - "default": {}, - "examples": [ - { - "household_characteristics": { - "label": "Household characteristics", - "pages": { - "tenant_code": { - "questions": { - "tenant_code": { - "check_answer_label": "Tenant code", - "header": "What is the tenant code?", - "type": "text" - } - } - } - } - } - } - ], - "required": [ - "household_characteristics" - ], - "properties": { - "household_characteristics": { - "$id": "#/properties/sections/properties/household/properties/subsections/properties/household_characteristics", - "type": "object", - "title": "The household_characteristics schema", - "description": "An explanation about the purpose of this instance.", - "default": {}, - "examples": [ - { - "label": "Household characteristics", - "pages": { - "tenant_code": { - "questions": { - "tenant_code": { - "check_answer_label": "Tenant code", - "header": "What is the tenant code?", - "type": "text" - } - } - } - } - } - ], - "required": [ - "label", - "pages" - ], - "properties": { - "label": { - "$id": "#/properties/sections/properties/household/properties/subsections/properties/household_characteristics/properties/label", - "type": "string", - "title": "The label schema", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": [ - "Household characteristics" - ] - }, - "pages": { - "$id": "#/properties/sections/properties/household/properties/subsections/properties/household_characteristics/properties/pages", - "type": "object", - "title": "The pages schema", - "description": "An explanation about the purpose of this instance.", - "default": {}, - "examples": [ - { - "tenant_code": { - "questions": { - "tenant_code": { - "check_answer_label": "Tenant code", - "header": "What is the tenant code?", - "type": "text" - } - } - } - } - ], - "required": [ - "tenant_code" - ], - "properties": { - "tenant_code": { - "$id": "#/properties/sections/properties/household/properties/subsections/properties/household_characteristics/properties/pages/properties/tenant_code", - "type": "object", - "title": "The tenant_code schema", - "description": "An explanation about the purpose of this instance.", - "default": {}, - "examples": [ - { - "questions": { - "tenant_code": { - "check_answer_label": "Tenant code", - "header": "What is the tenant code?", - "type": "text" - } - } - } - ], - "required": [ - "questions" - ], - "properties": { - "questions": { - "$id": "#/properties/sections/properties/household/properties/subsections/properties/household_characteristics/properties/pages/properties/tenant_code/properties/questions", - "type": "object", - "title": "The questions schema", - "description": "An explanation about the purpose of this instance.", - "default": {}, - "examples": [ - { - "tenant_code": { - "check_answer_label": "Tenant code", - "header": "What is the tenant code?", - "type": "text" - } - } - ], - "required": [ - "tenant_code" - ], - "properties": { - "tenant_code": { - "$id": "#/properties/sections/properties/household/properties/subsections/properties/household_characteristics/properties/pages/properties/tenant_code/properties/questions/properties/tenant_code", - "type": "object", - "title": "The tenant_code schema", - "description": "An explanation about the purpose of this instance.", - "default": {}, - "examples": [ - { - "check_answer_label": "Tenant code", - "header": "What is the tenant code?", - "type": "text" - } - ], - "required": [ - "check_answer_label", - "header", - "type" - ], - "properties": { - "check_answer_label": { - "$id": "#/properties/sections/properties/household/properties/subsections/properties/household_characteristics/properties/pages/properties/tenant_code/properties/questions/properties/tenant_code/properties/check_answer_label", - "type": "string", - "title": "The check_answer_label schema", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": [ - "Tenant code" - ] - }, - "header": { - "$id": "#/properties/sections/properties/household/properties/subsections/properties/household_characteristics/properties/pages/properties/tenant_code/properties/questions/properties/tenant_code/properties/header", - "type": "string", - "title": "The header schema", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": [ - "What is the tenant code?" - ] - }, - "type": { - "$id": "#/properties/sections/properties/household/properties/subsections/properties/household_characteristics/properties/pages/properties/tenant_code/properties/questions/properties/tenant_code/properties/type", - "type": "string", - "title": "The type schema", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": [ - "text" - ] - } - }, - "additionalProperties": true - } - }, - "additionalProperties": true - } - }, - "additionalProperties": true - } - }, - "additionalProperties": true - } - }, - "additionalProperties": true - } - }, - "additionalProperties": true - } - }, - "additionalProperties": true - } - }, - "additionalProperties": true - } - }, - "additionalProperties": true -} + path = "config/forms/schema/generic.json" + # path = "config/forms/schema/2021_2022.json" + + file = File.open(path) + schema = JSON.parse(file.read) metaschema = JSON::Validator.validator_for_name("draft4").metaschema if JSON::Validator.validate(metaschema, schema) - puts "schema valid" + puts "schema valid" else - puts "schema not valid" - return + puts "schema not valid" + return end path = "spec/fixtures/forms/test_validator.json" @@ -397,20 +51,20 @@ begin puts JSON::Validator.fully_validate(schema, data, :strict => true) begin - JSON::Validator.validate!(schema, data) + JSON::Validator.validate!(schema, data) rescue JSON::Schema::ValidationError => e - e.message + e.message end # def get_all_form_paths - # form_paths = [] - # directories = ["config/forms", "spec/fixtures/forms"] - # directories.each do |directory| - # Dir.glob("#{directory}/*.json").each do |form_path| - # form_path = form_path.sub(".json", "").split("/")[-1] - # form_paths.push(form_path) + # form_paths = [] + # directories = ["config/forms", "spec/fixtures/forms"] + # directories.each do |directory| + # Dir.glob("#{directory}/*.json").each do |form_path| + # form_path = form_path.sub(".json", "").split("/")[-1] + # form_paths.push(form_path) + # end # end - # end - # form_paths + # form_paths # end end diff --git a/config/forms/schema/2021_2022.json b/config/forms/schema/2021_2022.json new file mode 100644 index 000000000..2a825ffb8 --- /dev/null +++ b/config/forms/schema/2021_2022.json @@ -0,0 +1,2134 @@ +{ + "form_type": "lettings", + "start_year": 2021, + "end_year": 2022, + "sections": { + "household": { + "label": "About the household", + "subsections": { + "household_characteristics": { + "label": "Household characteristics", + "pages": { + "tenant_code": { + "header": "", + "description": "", + "questions": { + "tenant_code": { + "check_answer_label": "Tenant code", + "header": "What is the tenant code?", + "hint_text": "", + "type": "text" + } + } + }, + "person_1_age": { + "header": "", + "description": "", + "questions": { + "person_1_age": { + "check_answer_label": "Tenant's age", + "header": "What is the tenant's age?", + "hint_text": "", + "type": "numeric", + "min": 0, + "max": 120, + "step": 1 + } + } + }, + "person_1_gender": { + "header": "", + "description": "", + "questions": { + "person_1_gender": { + "check_answer_label": "Tenant's gender", + "header": "Which of these best describes the tenant's gender identity?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Female", + "1": "Male", + "2": "Non-binary", + "3": "Prefer not to say" + } + } + } + }, + "tenant_ethnic_group": { + "header": "", + "description": "", + "questions": { + "tenant_ethnic_group": { + "check_answer_label": "Ethnicity", + "header": "What is the tenant's ethnic group?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "White: English/Scottish/Welsh/Northern Irish/British", + "1": "White: Irish", + "2": "White: Gypsy/Irish Traveller", + "3": "White: Other", + "4": "Mixed: White & Black Caribbean", + "5": "Mixed: White & Black African", + "6": "Mixed: White & Asian", + "7": "Mixed: Other", + "8": "Asian or Asian British: Indian", + "9": "Asian or Asian British: Pakistani", + "10": "Asian or Asian British: Bangladeshi", + "11": "Asian or Asian British: Chinese", + "12": "Asian or Asian British: Other", + "13": "Black: Caribbean", + "14": "Black: African", + "15": "Black: Other", + "16": "Other Ethnic Group: Arab", + "17": "Other Ethnic Group: Other", + "18": "Prefer not to say" + } + } + } + }, + "tenant_nationality": { + "header": "", + "description": "", + "questions": { + "tenant_nationality": { + "check_answer_label": "Nationality", + "header": "What is the tenant's nationality?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "UK national resident in UK", + "1": "A current or former reserve in the UK Armed Forces (exc. National Service)", + "2": "UK national returning from residence overseas", + "3": "Czech Republic", + "4": "Estonia", + "5": "Hungary", + "6": "Latvia", + "7": "Lithuania", + "8": "Poland", + "9": "Slovakia", + "10": "Bulgaria", + "11": "Romania", + "12": "Ireland", + "13": "Other EU Economic Area (EEA country)", + "14": "Any other country", + "15": "Prefer not to say" + } + } + } + }, + "tenant_economic_status": { + "header": "", + "description": "", + "questions": { + "person_1_economic_status": { + "check_answer_label": "Work", + "header": "Which of these best describes the tenant's working situation?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Part-time - Less than 30 hours", + "1": "Full-time - 30 hours or more", + "2": "In government training into work, such as New Deal", + "3": "Jobseeker", + "4": "Retired", + "5": "Not seeking work", + "6": "Full-time student", + "7": "Unable to work because of long term sick or disability", + "8": "Child under 16", + "9": "Other", + "10": "Prefer not to say" + } + } + } + }, + "household_number_of_other_members": { + "header": "", + "description": "", + "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 7", + "type": "numeric", + "min": 0, + "max": 7, + "step": 1, + "conditional_for": { + "person_2_relationship": ">0", + "person_2_age": ">0", + "person_2_gender": ">0", + "person_2_economic_status": ">0", + "person_3_relationship": ">1", + "person_3_age": ">1", + "person_3_gender": ">1", + "person_3_economic_status": ">1", + "person_4_relationship": ">2", + "person_4_age": ">2", + "person_4_gender": ">2", + "person_4_economic_status": ">2", + "person_5_relationship": ">3", + "person_5_age": ">3", + "person_5_gender": ">3", + "person_5_economic_status": ">3", + "person_6_relationship": ">4", + "person_6_age": ">4", + "person_6_gender": ">4", + "person_6_economic_status": ">4", + "person_7_relationship": ">5", + "person_7_age": ">5", + "person_7_gender": ">5", + "person_7_economic_status": ">5", + "person_8_relationship": ">6", + "person_8_age": ">6", + "person_8_gender": ">6", + "person_8_economic_status": ">6" + } + }, + "person_2_relationship": { + "check_answer_label": "Person 2's relationship to lead tenant", + "header": "What's person 2's relationship to lead tenant", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Partner", + "1": "Child - includes young adult and grown-up", + "2": "Other", + "3": "Prefer not to say" + } + }, + "person_2_age": { + "check_answer_label": "Person 2's age", + "header": "What's person 2's age", + "hint_text": "", + "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?", + "hint_text": "", + "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?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Part-time - Less than 30 hours", + "1": "Full-time - 30 hours or more", + "2": "In government training into work, such as New Deal", + "3": "Jobseeker", + "4": "Retired", + "5": "Not seeking work", + "6": "Full-time student", + "7": "Unable to work because of long term sick or disability", + "8": "Child under 16", + "9": "Other", + "10": "Prefer not to say" + } + }, + "person_3_relationship": { + "check_answer_label": "Person 3's relationship to lead tenant", + "header": "What's person 3's relationship to lead tenant", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Partner", + "1": "Child - includes young adult and grown-up", + "2": "Other", + "3": "Prefer not to say" + } + }, + "person_3_age": { + "check_answer_label": "Person 3's age", + "header": "What's person 3's age", + "hint_text": "", + "type": "numeric", + "min": 0, + "max": 150, + "step": 1 + }, + "person_3_gender": { + "check_answer_label": "Person 3's gender", + "header": "Which of these best describes person 3's gender identity?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Female", + "1": "Male", + "2": "Non-binary", + "3": "Prefer not to say" + } + }, + "person_3_economic_status": { + "check_answer_label": "Person 3's Work", + "header": "Which of these best describes person 3's working situation?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Part-time - Less than 30 hours", + "1": "Full-time - 30 hours or more", + "2": "In government training into work, such as New Deal", + "3": "Jobseeker", + "4": "Retired", + "5": "Not seeking work", + "6": "Full-time student", + "7": "Unable to work because of long term sick or disability", + "8": "Child under 16", + "9": "Other", + "10": "Prefer not to say" + } + }, + "person_4_relationship": { + "check_answer_label": "Person 4's relationship to lead tenant", + "header": "What's person 4's relationship to lead tenant", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Partner", + "1": "Child - includes young adult and grown-up", + "2": "Other", + "3": "Prefer not to say" + } + }, + "person_4_age": { + "check_answer_label": "Person 4's age", + "header": "What's person 4's age", + "hint_text": "", + "type": "numeric", + "min": 0, + "max": 150, + "step": 1 + }, + "person_4_gender": { + "check_answer_label": "Person 4's gender", + "header": "Which of these best describes person 4's gender identity?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Female", + "1": "Male", + "2": "Non-binary", + "3": "Prefer not to say" + } + }, + "person_4_economic_status": { + "check_answer_label": "Person 4's Work", + "header": "Which of these best describes person 4's working situation?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Part-time - Less than 30 hours", + "1": "Full-time - 30 hours or more", + "2": "In government training into work, such as New Deal", + "3": "Jobseeker", + "4": "Retired", + "5": "Not seeking work", + "6": "Full-time student", + "7": "Unable to work because of long term sick or disability", + "8": "Child under 16", + "9": "Other", + "10": "Prefer not to say" + } + }, + "person_5_relationship": { + "check_answer_label": "Person 5's relationship to lead tenant", + "header": "What's person 5's relationship to lead tenant", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Partner", + "1": "Child - includes young adult and grown-up", + "2": "Other", + "3": "Prefer not to say" + } + }, + "person_5_age": { + "check_answer_label": "Person 5's age", + "header": "What's person 5's age", + "hint_text": "", + "type": "numeric", + "min": 0, + "max": 150, + "step": 1 + }, + "person_5_gender": { + "check_answer_label": "Person 5's gender", + "header": "Which of these best describes person 5's gender identity?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Female", + "1": "Male", + "2": "Non-binary", + "3": "Prefer not to say" + } + }, + "person_5_economic_status": { + "check_answer_label": "Person 5's Work", + "header": "Which of these best describes person 5's working situation?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Part-time - Less than 30 hours", + "1": "Full-time - 30 hours or more", + "2": "In government training into work, such as New Deal", + "3": "Jobseeker", + "4": "Retired", + "5": "Not seeking work", + "6": "Full-time student", + "7": "Unable to work because of long term sick or disability", + "8": "Child under 16", + "9": "Other", + "10": "Prefer not to say" + } + }, + "person_6_relationship": { + "check_answer_label": "Person 6's relationship to lead tenant", + "header": "What's person 6's relationship to lead tenant", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Partner", + "1": "Child - includes young adult and grown-up", + "2": "Other", + "3": "Prefer not to say" + } + }, + "person_6_age": { + "check_answer_label": "Person 6's age", + "header": "What's person 6's age", + "hint_text": "", + "type": "numeric", + "min": 0, + "max": 150, + "step": 1 + }, + "person_6_gender": { + "check_answer_label": "Person 6's gender", + "header": "Which of these best describes person 6's gender identity?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Female", + "1": "Male", + "2": "Non-binary", + "3": "Prefer not to say" + } + }, + "person_6_economic_status": { + "check_answer_label": "Person 6's Work", + "header": "Which of these best describes person 6's working situation?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Part-time - Less than 30 hours", + "1": "Full-time - 30 hours or more", + "2": "In government training into work, such as New Deal", + "3": "Jobseeker", + "4": "Retired", + "5": "Not seeking work", + "6": "Full-time student", + "7": "Unable to work because of long term sick or disability", + "8": "Child under 16", + "9": "Other", + "10": "Prefer not to say" + } + }, + "person_7_relationship": { + "check_answer_label": "Person 7's relationship to lead tenant", + "header": "What's person 7's relationship to lead tenant", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Partner", + "1": "Child - includes young adult and grown-up", + "2": "Other", + "3": "Prefer not to say" + } + }, + "person_7_age": { + "check_answer_label": "Person 7's age", + "header": "What's person 7's age", + "hint_text": "", + "type": "numeric", + "min": 0, + "max": 150, + "step": 1 + }, + "person_7_gender": { + "check_answer_label": "Person 7's gender", + "header": "Which of these best describes person 7's gender identity?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Female", + "1": "Male", + "2": "Non-binary", + "3": "Prefer not to say" + } + }, + "person_7_economic_status": { + "check_answer_label": "Person 7's Work", + "header": "Which of these best describes person 7's working situation?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Part-time - Less than 30 hours", + "1": "Full-time - 30 hours or more", + "2": "In government training into work, such as New Deal", + "3": "Jobseeker", + "4": "Retired", + "5": "Not seeking work", + "6": "Full-time student", + "7": "Unable to work because of long term sick or disability", + "8": "Child under 16", + "9": "Other", + "10": "Prefer not to say" + } + }, + "person_8_relationship": { + "check_answer_label": "Person 8's relationship to lead tenant", + "header": "What's person 8's relationship to lead tenant", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Partner", + "1": "Child - includes young adult and grown-up", + "2": "Other", + "3": "Prefer not to say" + } + }, + "person_8_age": { + "check_answer_label": "Person 8's age", + "header": "What's person 8's age", + "hint_text": "", + "type": "numeric", + "min": 0, + "max": 150, + "step": 1 + }, + "person_8_gender": { + "check_answer_label": "Person 8's gender", + "header": "Which of these best describes person 8's gender identity?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Female", + "1": "Male", + "2": "Non-binary", + "3": "Prefer not to say" + } + }, + "person_8_economic_status": { + "check_answer_label": "Person 8's Work", + "header": "Which of these best describes person 8's working situation?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Part-time - Less than 30 hours", + "1": "Full-time - 30 hours or more", + "2": "In government training into work, such as New Deal", + "3": "Jobseeker", + "4": "Retired", + "5": "Not seeking work", + "6": "Full-time student", + "7": "Unable to work because of long term sick or disability", + "8": "Child under 16", + "9": "Other", + "10": "Prefer not to say" + } + } + } + } + } + }, + "household_situation": { + "label": "Household situation", + "pages": { + "previous_housing_situation": { + "header": "", + "description": "", + "questions": { + "previous_housing_situation": { + "header": "What was the tenant’s housing situation immediately before this letting?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Owner occupation (private) ", + "1": "Owner occupation (low cost home ownership)", + "2": "Private sector tenancy", + "3": "Tied housing or rented with job", + "4": "Supported housing", + "5": "Sheltered accomodation", + "6": "Residential care home", + "7": "Living with friends or family", + "8": "Refuge", + "9": "Hospital", + "10": "Prison / approved probation hostel", + "11": "Direct access hostel", + "12": "Bed & Breakfast", + "13": "Mobile home / caravan", + "14": "Any other temporary accommodation", + "15": "Home Office Asylum Support", + "16": "Children’s home / foster care", + "17": "Rough sleeping", + "18": "Other", + "19": "Fixed term Local Authority General Needs tenancy", + "20": "Lifetime Local Authority General Needs tenancy", + "21": "Fixed term PRP General Needs tenancy", + "22": "Lifetime PRP General Needs tenancy" + } + } + } + }, + "homelessness": { + "header": "", + "description": "", + "questions": { + "homelessness": { + "header": "Did the tenant experience homelessness immediately before this letting?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes - assessed as homeless by a local authority and owed a homelessness duty. Including if threatened with homelessness within 56 days", + "1": "Yes - other homelessness ", + "2": "No" + } + } + } + }, + "reason_for_leaving_last_settled_home": { + "header": "Leaving their last settled home", + "description": "", + "questions": { + "reason_for_leaving_last_settled_home": { + "header": "What is the tenant’s main reason for leaving?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Permanently decanted from another property owned by this landlord", + "1": "Left home country as a refugee", + "2": "Loss of tied accommodation", + "3": "Domestic abuse", + "4": "(Non violent) relationship breakdown with partner", + "5": "Asked to leave by family or friends", + "6": "Racial harassment", + "7": "Other problems with neighbours", + "8": "Property unsuitable because of overcrowding", + "9": "End of assured shorthold tenancy - no fault", + "10": "End of assured shorthold tenancy - tenant's fault", + "11": "End of fixed term tenancy - no fault", + "12": "End of fixed term tenancy - tenant's fault", + "13": "Repossession", + "14": "Under occupation - offered incentive to downsize", + "15": "Under occupation - no incentive", + "16": "Property unsuitable because of ill health / disability", + "17": "Property unsuitable because of poor condition", + "18": "Couldn't afford fees attached to renewing the tenancy", + "19": "Couldn't afford increase in rent", + "20": "Couldn't afford rent or mortgage - welfare reforms", + "21": "Couldn't afford rent or mortgage - employment", + "22": "Couldn't afford rent or mortgage - other", + "23": "To move nearer to family / friends / school", + "24": "To move nearer to work", + "25": "To move to accomodation with support", + "26": "To move to independent accomodation", + "27": "Hate crime", + "28": "Death of household member in last settled accomodation", + "29": "Discharged from prison", + "30": "Discharged from long stay hospital or similar institution", + "31": "Other", + "32": "Do not know", + "33": "Prefer not to say" + }, + "conditional_for": { + "other_reason_for_leaving_last_settled_home": ["Other"] + } + }, + "other_reason_for_leaving_last_settled_home": { + "header": "Please state the reason for leaving last settled home", + "hint_text": "", + "type": "text" + }, + "benefit_cap_spare_room_subsidy": { + "header": "Was the reason for leaving because of the benefit cap or removal of the spare room subsidy?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes - benefit cap", + "1": "Yes - removal of the spare room subsidy", + "2": "Yes - both the benefit cap and the removal of the spare room subsidy", + "3": "No", + "4": "Do not know", + "5": "Prefer not to say" + } + } + } + } + } + }, + "household_needs": { + "label": "Household needs", + "pages": { + "armed_forces": { + "header": "Experience of the UK Armed Forces", + "description": "", + "questions": { + "armed_forces": { + "header": "Has the tenant ever served in the UK armed forces?", + "hint_text": "", + "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?", + "hint_text": "", + "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?", + "hint_text": "", + "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" + } + }, + "armed_forces_partner": { + "header": "Was the tenant the spouse or civil partner of someone who served in the UK armed forces?", + "hint_text": "", + "type": "radio", + "check_answer_label": "Was the tenant the spouse or civil partner of someone who served in the UK armed forces?", + "answer_options": { + "0": "Yes - was the spouse or civil partner of a UK Armed Forces member and have separated within the last 2 years", + "1": "Yes - was the spouse or civil partner of a UK Armed Forces member who died within the last 2 years", + "2": "No", + "3": "Prefer not to say" + } + } + } + }, + "medical_conditions": { + "header": "", + "description": "", + "questions": { + "medical_conditions": { + "header": "Does anyone in the household have any of the following that they expect to last for 12 months or more:", + "hint_text": "", + "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" + } + } + } + }, + "pregnancy": { + "header": "", + "description": "", + "questions": { + "pregnancy": { + "header": "Is anyone in the household pregnant?", + "hint_text": "", + "type": "radio", + "check_answer_label": "Pregnancy in the household", + "answer_options": { + "0": "Yes", + "1": "No", + "2": "Prefer not to say" + } + } + } + }, + "accessibility_requirements": { + "header": "", + "description": "", + "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", + "accessibility_requirements_other_disability_requirements": "Other disability requirements", + "accessibility_requirements_no_disability_requirements": "No disability requirements", + "divider_a": true, + "accessibility_requirements_do_not_know": "Do not know", + "divider_b": true, + "accessibility_requirements_prefer_not_to_say": "Prefer not to say" + } + } + } + }, + "condition_effects": { + "header": "", + "description": "", + "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", + "condition_effects_mobility": "Mobility - such as walking short distances or climbing stairs", + "condition_effects_dexterity": "Dexterity - such as lifting and carrying objects or using a keyboard", + "condition_effects_stamina": "Stamina or breathing or fatigue", + "condition_effects_learning": "Learning or understanding or concentrating", + "condition_effects_memory": "Memory", + "condition_effects_mental_health": "Mental health - such as depression, anxiety, schizophrenia or bipolar", + "condition_effects_social_or_behavioral": "Socially or behaviourally - such as those associated with autism spectral disorder (ASD) including Aspergers’ or attention deficit hyperactivity disorder (ADHD))", + "condition_effects_other": "Other", + "divider": true, + "condition_effects_prefer_not_to_say": "Prefer not to say" + } + } + } + } + } + } + } + }, + "tenancy_and_property": { + "label": "Tenancy and property information", + "subsections": { + "tenancy_information": { + "label": "Tenancy information", + "pages": { + "tenancy_code": { + "header": "", + "description": "", + "questions": { + "tenancy_code": { + "check_answer_label": "What is the tenancy code?", + "header": "What is the tenancy code?", + "hint_text": "", + "type": "text" + } + } + }, + "tenancy_start_date": { + "header": "", + "description": "", + "questions": { + "tenancy_start_date": { + "check_answer_label": "When is the tenancy start date?", + "header": "What is the tenancy start date?", + "hint_text": "For example, 27 3 2007", + "type": "date" + } + } + }, + "starter_tenancy": { + "header": "", + "description": "", + "questions": { + "starter_tenancy": { + "check_answer_label": "Is this a starter or introductory tenancy?", + "header": "Is this a starter tenancy?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes", + "1": "No" + } + } + } + }, + "fixed_term_tenancy": { + "header": "", + "description": "", + "questions": { + "fixed_term_tenancy": { + "check_answer_label": "If the main tenancy is a fixed term tenancy, please provide the length of the fixed term (to the nearest year) excluding any starter/introductory period", + "header": "If fixed-term, what is the length of the fixed-term tenancy after any starter period?", + "hint_text": "To the nearest year", + "type": "numeric", + "min": 0, + "max": 150, + "step": 1 + } + } + }, + "tenancy_type": { + "header": "", + "description": "", + "questions": { + "tenancy_type": { + "check_answer_label": "Type of main tenancy (after any starter/introductory period)", + "header": "What is the type of tenancy after the starter period has ended?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Fixed term – Secure", + "1": "Fixed term – Assured Shorthold Tenancy (AST)", + "2": "Lifetime – Secure", + "3": "Lifetime – Assured", + "4": "License agreement", + "5": "Other" + }, + "conditional_for": { + "other_tenancy_type": ["Other"] + } + }, + "other_tenancy_type": { + "header": "Please state the tenancy type", + "hint_text": "", + "type": "text" + } + } + }, + "letting_type": { + "header": "", + "description": "", + "questions": { + "letting_type": { + "check_answer_label": "Type of letting", + "header": "Which type of letting is this?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Social Rent - General Needs", + "1": "Social Rent - Supporting Housing", + "2": "Affordable Rent - General Needs", + "3": "Affordable Rent - Supporting Housing", + "4": "Rent To Buy - General Needs", + "5": "Rent To Buy - Supported Housing" + } + } + } + }, + "letting_provider": { + "header": "", + "description": "", + "questions": { + "letting_provider": { + "check_answer_label": "Provider", + "header": "Who is the letting provider?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "This landlord", + "1": "Another registered provider - includes housing association or local authority" + } + } + } + } + } + }, + "property_information": { + "label": "Property information", + "pages": { + "property_location": { + "header": "", + "description": "", + "questions": { + "property_location": { + "check_answer_label": "Property Location", + "header": "Property location", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Adur", + "1": "Allerdale", + "2": "Amber Valley", + "3": "Arun", + "4": "Ashfield", + "5": "Ashford", + "6": "Babergh", + "7": "Barking & Dagenham", + "8": "Barnet", + "9": "Barnsley", + "10": "Barrow-in-Furness", + "11": "Basildon", + "12": "Basingstoke & Deane", + "13": "Bassetlaw", + "14": "Bath & NE Somerset", + "15": "Bedford Borough Council", + "16": "Bexley", + "17": "Birmingham", + "18": "Blaby", + "19": "Blackburn", + "20": "Blackpool", + "21": "Bolsover", + "22": "Bolton", + "23": "Boston", + "24": "Bournemouth & Christchurch & Poole", + "25": "Bracknell Forest", + "26": "Bradford", + "27": "Braintree", + "28": "Breckland", + "29": "Brent", + "30": "Brentwood", + "31": "Brighton & Hove", + "32": "Bristol", + "33": "Broadland", + "34": "Bromley", + "35": "Bromsgrove", + "36": "Broxbourne", + "37": "Broxtowe", + "38": "Buckinghamshire", + "39": "Burnley", + "40": "Bury", + "41": "Calderdale", + "42": "Cambridge", + "43": "Camden", + "44": "Cannock Chase", + "45": "Canterbury", + "46": "Carlisle", + "47": "Castle Point", + "48": "Central Bedfordshire", + "49": "Charnwood", + "50": "Chelmsford", + "51": "Cheltenham", + "52": "Cherwell", + "53": "Cheshire West & Chester", + "54": "Chesterfield", + "55": "Chichester", + "56": "Chorley", + "57": "City of London", + "58": "Colchester", + "59": "Copeland", + "60": "Cornwall", + "61": "Cotswold", + "62": "Coventry", + "63": "Craven", + "64": "Crawley", + "65": "Croydon", + "66": "Dacorum", + "67": "Darlington", + "68": "Dartford", + "69": "Derby", + "70": "Derbyshire Dales", + "71": "Doncaster", + "72": "Dorset", + "73": "Dover", + "74": "Dudley", + "75": "Durham", + "76": "Ealing", + "77": "East Cambridgeshire", + "78": "East Cheshire", + "79": "East Devon", + "80": "East Hampshire", + "81": "East Herts", + "82": "East Lindsey", + "83": "East Riding", + "84": "East Staffordshire", + "85": "East Suffolk", + "86": "Eastbourne", + "87": "Eastleigh", + "88": "Eden", + "89": "Elmbridge", + "90": "Enfield", + "91": "Epping Forest", + "92": "Epsom & Ewell", + "93": "Erewash", + "94": "Exeter", + "95": "Fareham", + "96": "Fenland", + "97": "Folkestone & Hythe", + "98": "Forest of Dean", + "99": "Fylde", + "100": "Gateshead", + "101": "Gedling", + "102": "Gloucester", + "103": "Gosport", + "104": "Gravesham", + "105": "Great Yarmouth", + "106": "Greenwich", + "107": "Guildford", + "108": "Hackney", + "109": "Halton", + "110": "Hambleton", + "111": "Hammersmith & Fulham", + "112": "Harborough", + "113": "Haringey", + "114": "Harlow", + "115": "Harrogate", + "116": "Harrow", + "117": "Hart", + "118": "Hartlepool", + "119": "Hastings", + "120": "Havant", + "121": "Havering", + "122": "Herefordshire", + "123": "Hertsmere", + "124": "High Peak", + "125": "Hillingdon", + "126": "Hinckley & Bosworth", + "127": "Horsham", + "128": "Hounslow", + "129": "Huntingdonshire", + "130": "Hyndburn", + "131": "Ipswich", + "132": "Isle of Wight", + "133": "Isles of Scilly", + "134": "Islington", + "135": "Kensington & Chelsea", + "136": "Kings Lynn & West Norfolk", + "137": "Kingston-upon-Hull", + "138": "Kingston-upon-Thames", + "139": "Kirklees", + "140": "Knowsley", + "141": "Lambeth", + "142": "Lancaster", + "143": "Leeds", + "144": "Leicester", + "145": "Lewes", + "146": "Lewisham", + "147": "Lichfield", + "148": "Lincoln", + "149": "Liverpool", + "150": "Luton", + "151": "Maidstone", + "152": "Maldon", + "153": "Malvern Hills", + "154": "Manchester", + "155": "Mansfield", + "156": "Medway", + "157": "Melton", + "158": "Mendip", + "159": "Merton", + "160": "Mid Devon", + "161": "Mid Suffolk", + "162": "Mid Sussex", + "163": "Middlesbrough", + "164": "Milton Keynes", + "165": "Mole Valley", + "166": "N. Ireland", + "167": "New Forest", + "168": "Newark", + "169": "Newcastle-under-Lyme", + "170": "Newcastle-upon-Tyne", + "171": "Newham", + "172": "North Devon", + "173": "North East Derbyshire", + "174": "North East Lincolnshire", + "175": "North Hertfordshire", + "176": "North Kesteven", + "177": "North Lincolnshire", + "178": "North Norfolk", + "179": "North Northamptonshire", + "180": "North Somerset", + "181": "North Tyneside", + "182": "North Warwickshire", + "183": "North West Leics", + "184": "Northumberland", + "185": "Norwich", + "186": "Nottingham", + "187": "Nuneaton & Bedworth", + "188": "Oadby & Wigston", + "189": "Oldham", + "190": "Outside UK", + "191": "Oxford", + "192": "Pendle", + "193": "Peterborough", + "194": "Plymouth", + "195": "Portsmouth", + "196": "Preston", + "197": "Reading", + "198": "Redbridge", + "199": "Redcar & Cleveland", + "200": "Redditch", + "201": "Reigate & Banstead", + "202": "Ribble Valley", + "203": "Richmond-upon-Thames", + "204": "Richmondshire", + "205": "Rochdale", + "206": "Rochford", + "207": "Rossendale", + "208": "Rother", + "209": "Rotherham", + "210": "Rugby", + "211": "Runnymede", + "212": "Rushcliffe", + "213": "Rushmoor", + "214": "Rutland", + "215": "Ryedale", + "216": "Salford", + "217": "Sandwell", + "218": "Scarborough", + "219": "Scotland", + "220": "Sedgemoor", + "221": "Sefton", + "222": "Selby", + "223": "Sevenoaks", + "224": "Sheffield", + "225": "Shropshire", + "226": "Slough", + "227": "Solihull", + "228": "Somerset West & Taunton", + "229": "South Cambridgeshire", + "230": "South Derbyshire", + "231": "South Gloucestershire", + "232": "South Hams", + "233": "South Holland", + "234": "South Kesteven", + "235": "South Lakeland", + "236": "South Norfolk", + "237": "South Oxfordshire", + "238": "South Ribble", + "239": "South Somerset", + "240": "South Staffordshire", + "241": "South Tyneside", + "242": "Southampton", + "243": "Southend-on-Sea", + "244": "Southwark", + "245": "Spelthorne", + "246": "St Albans", + "247": "St Helens", + "248": "Stafford", + "249": "Staffordshire Moorlands", + "250": "Stevenage", + "251": "Stockport", + "252": "Stockton-on-Tees", + "253": "Stoke-on-Trent", + "254": "Stratford-on-Avon", + "255": "Stroud", + "256": "Sunderland", + "257": "Surrey Heath", + "258": "Sutton", + "259": "Swale", + "260": "Swindon", + "261": "Tameside", + "262": "Tamworth", + "263": "Tandridge", + "264": "Teignbridge", + "265": "Telford & Wrekin", + "266": "Tendring", + "267": "Test Valley", + "268": "Tewkesbury", + "269": "Thanet", + "270": "Three Rivers", + "271": "Thurrock", + "272": "Tonbridge & Malling", + "273": "Torbay", + "274": "Torridge", + "275": "Tower Hamlets", + "276": "Trafford", + "277": "Tunbridge Wells", + "278": "Uttlesford", + "279": "Vale of White Horse", + "280": "Wakefield", + "281": "Wales", + "282": "Walsall", + "283": "Waltham Forest", + "284": "Wandsworth", + "285": "Warrington", + "286": "Warwick", + "287": "Watford", + "288": "Waverley", + "289": "Wealden", + "290": "Welwyn Hatfield", + "291": "West Berkshire", + "292": "West Devon", + "293": "West Lancashire", + "294": "West Lindsey", + "295": "West Northamptonshire", + "296": "West Oxfordshire", + "297": "West Suffolk", + "298": "Westminster", + "299": "Wigan", + "300": "Wiltshire", + "301": "Winchester", + "302": "Windsor & Maidenhead", + "303": "Wirral", + "304": "Woking", + "305": "Wokingham", + "306": "Wolverhampton", + "307": "Worcester", + "308": "Worthing", + "309": "Wychavon", + "310": "Wyre", + "311": "Wyre Forest", + "312": "York" + } + } + } + }, + "property_postcode": { + "header": "", + "description": "", + "questions": { + "property_postcode": { + "check_answer_label": "What was the previous postcode?", + "header": "What is the property's postcode?", + "hint_text": "", + "type": "text" + } + } + }, + "property_relet": { + "header": "", + "description": "", + "questions": { + "property_relet": { + "check_answer_label": "Which type was the property most recently let as?", + "header": "Is this property a relet?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes", + "1": "No" + } + } + } + }, + "property_vacancy_reason": { + "header": "", + "description": "", + "questions": { + "property_vacancy_reason": { + "check_answer_label": "What is the reason for the property vacancy?", + "header": "What is the reason for the property vacancy?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "First let of newbuild property", + "1": "First let of conversion/rehabilitation/acquired property", + "2": "First let of leased property", + "3": "Relet - tenant evicted due to arrears", + "4": "Relet - tenant evicted due to ASB or other reason", + "5": "Relet - tenant died (no succession)", + "6": "Relet - tenant moved to other social housing provider", + "7": "Relet - tenant abandoned property", + "8": "Relet - tenant moved to private sector or other accommodation", + "9": "Relet - to tenant who occupied same property as temporary accommodation", + "10": "Relet – internal transfer (excluding renewals of a fixed-term tenancy)", + "11": "Relet – renewal of fixed-term tenancy", + "12": "Relet – tenant moved to care home", + "13": "Relet – tenant involved in a succession downsize" + } + } + } + }, + "property_reference": { + "header": "", + "description": "", + "questions": { + "property_reference": { + "check_answer_label": "What’s the property reference?", + "header": "What's the property reference?", + "hint_text": "", + "type": "text" + } + } + }, + "property_unit_type": { + "header": "", + "description": "", + "questions": { + "property_unit_type": { + "check_answer_label": "Which type of unit is the property?", + "header": "Which type of unit is the property?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Flat / maisonette", + "1": "Bed-sit", + "2": "House", + "3": "Bungalow", + "4": "Shared flat / maisonette", + "5": "Shared house", + "6": "Shared bungalow", + "7": "Other" + } + } + } + }, + "property_number_of_bedrooms": { + "header": "", + "description": "", + "questions": { + "property_number_of_bedrooms": { + "check_answer_label": "How many bedrooms are there in the property?", + "header": "How many bedrooms are there in the property?", + "hint_text": "If shared accommodation, enter number of bedrooms occupied by this household; a bed-sit has 1 bedroom", + "type": "numeric", + "min": 0, + "max": 150, + "step": 1 + } + } + }, + "property_major_repairs": { + "header": "", + "description": "", + "questions": { + "property_major_repairs": { + "check_answer_label": "Were major repairs carried out during the void period?", + "header": "Were any major repairs completed during the void period?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes", + "1": "No" + }, + "conditional_for": { + "property_major_repairs_date": ["Yes"] + } + }, + "property_major_repairs_date": { + "check_answer_label": "What was the major repairs completion date?", + "header": "What was the major repairs completion date?", + "hint_text": "For example, 27 3 2007", + "type": "date" + } + } + }, + "property_number_of_times_relet": { + "header": "", + "description": "", + "questions": { + "property_number_of_times_relet": { + "check_answer_label": "How many times has this unit been previously offered since becoming available for relet since the last tenancy ended or as a first let?", + "header": "How many times has this unit been previously offered since becoming available for relet since the last tenancy ended or as a first let? ", + "hint_text": "For an Affordable Rent or Intermediate Rent Letting, only include number of offers as that type. For a property let at the first attempt enter '0' ", + "type": "numeric", + "min": 0, + "max": 150, + "step": 1 + } + } + }, + "property_wheelchair_accessible": { + "header": "", + "description": "", + "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?", + "hint_text": "", + "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": { + "header": "", + "description": "", + "questions": { + "net_income_known": { + "check_answer_label": "Income known", + "header": "Do you know the tenant and their partner's net income?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes", + "1": "No", + "2": "Tenant prefers not to say" + }, + "conditional_for": { + "net_income": ["Yes"], + "net_income_frequency": ["Yes"] + } + }, + "net_income": { + "check_answer_label": "Income", + "header": "What is the tenant’s /and partner’s combined income after tax?", + "hint_text": "", + "type": "numeric", + "min": 0, + "step": "1" + }, + "net_income_frequency": { + "check_answer_label": "Income Frequency", + "header": "How often do they receive this income?", + "hint_text": "", + "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": { + "header": "", + "description": "", + "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?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "All", + "1": "Some", + "2": "None", + "3": "Do not know" + } + } + } + }, + "housing_benefit": { + "header": "", + "description": "", + "questions": { + "housing_benefit": { + "check_answer_label": "Universal Credit & Housing Benefit\t", + "header": "Is the tenant likely to be in receipt of any of these housing-related benefits?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Housing Benefit, but not Universal Credit", + "1": "Universal Credit with housing element, but not Housing Benefit", + "2": "Universal Credit without housing element and no Housing Benefit", + "3": "Universal Credit and Housing Benefit", + "4": "Not Housing Benefit or Universal Credit", + "5": "Do not know", + "6": "Prefer not to say" + } + } + } + } + } + }, + "rent": { + "label": "Rent", + "pages": { + "rent": { + "header": "", + "description": "", + "questions": { + "rent_frequency": { + "check_answer_label": "Rent Period", + "header": "Which period are rent and other charges due?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Weekly for 52 weeks", + "1": "Fortnightly", + "2": "Four-weekly", + "3": "Calendar monthly", + "4": "Weekly for 50 weeks", + "5": "Weekly for 49 weeks", + "6": "Weekly for 48 weeks", + "7": "Weekly for 47 weeks", + "8": "Weekly for 46 weeks", + "9": "Weekly for 53 weeks" + } + }, + "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 + }, + "outstanding_rent_or_charges": { + "check_answer_label": "After housing benefit and/or housing element of UC payment is received, will there be an outstanding amount for basic rent and/or benefit eligible charges?", + "header": "After housing benefit and/or housing element of UC payment is received, will there be an outstanding amount for basic rent and/or benefit eligible charges?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes", + "1": "No" + }, + "conditional_for": { + "outstanding_amount": ["Yes"] + } + }, + "outstanding_amount": { + "check_answer_label": "Outstanding amount", + "header": "What do you expect the amount to be?", + "hint_text": "If the amount is unknown you can estimate", + "type": "numeric", + "min": 0, + "step": 1 + } + } + } + } + } + } + }, + "local_authority": { + "label": "Local authority", + "subsections": { + "local_authority": { + "label": "Local authority", + "pages": { + "time_lived_in_la": { + "header": "", + "description": "", + "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?", + "hint_text": "", + "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": { + "header": "", + "description": "", + "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?", + "hint_text": "", + "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_la": { + "header": "", + "description": "", + "questions": { + "previous_la": { + "check_answer_label": "The LA in which household lived immediately before this letting\t", + "header": "Which local authority area did the household live in immediately before this letting?", + "hint_text": "Includes temporary accommodation", + "type": "radio", + "answer_options": { + "0": "Adur", + "1": "Allerdale", + "2": "Amber Valley", + "3": "Arun", + "4": "Ashfield", + "5": "Ashford", + "6": "Babergh", + "7": "Barking & Dagenham", + "8": "Barnet", + "9": "Barnsley", + "10": "Barrow-in-Furness", + "11": "Basildon", + "12": "Basingstoke & Deane", + "13": "Bassetlaw", + "14": "Bath & NE Somerset", + "15": "Bedford Borough Council", + "16": "Bexley", + "17": "Birmingham", + "18": "Blaby", + "19": "Blackburn", + "20": "Blackpool", + "21": "Bolsover", + "22": "Bolton", + "23": "Boston", + "24": "Bournemouth & Christchurch & Poole", + "25": "Bracknell Forest", + "26": "Bradford", + "27": "Braintree", + "28": "Breckland", + "29": "Brent", + "30": "Brentwood", + "31": "Brighton & Hove", + "32": "Bristol", + "33": "Broadland", + "34": "Bromley", + "35": "Bromsgrove", + "36": "Broxbourne", + "37": "Broxtowe", + "38": "Buckinghamshire", + "39": "Burnley", + "40": "Bury", + "41": "Calderdale", + "42": "Cambridge", + "43": "Camden", + "44": "Cannock Chase", + "45": "Canterbury", + "46": "Carlisle", + "47": "Castle Point", + "48": "Central Bedfordshire", + "49": "Charnwood", + "50": "Chelmsford", + "51": "Cheltenham", + "52": "Cherwell", + "53": "Cheshire West & Chester", + "54": "Chesterfield", + "55": "Chichester", + "56": "Chorley", + "57": "City of London", + "58": "Colchester", + "59": "Copeland", + "60": "Cornwall", + "61": "Cotswold", + "62": "Coventry", + "63": "Craven", + "64": "Crawley", + "65": "Croydon", + "66": "Dacorum", + "67": "Darlington", + "68": "Dartford", + "69": "Derby", + "70": "Derbyshire Dales", + "71": "Doncaster", + "72": "Dorset", + "73": "Dover", + "74": "Dudley", + "75": "Durham", + "76": "Ealing", + "77": "East Cambridgeshire", + "78": "East Cheshire", + "79": "East Devon", + "80": "East Hampshire", + "81": "East Herts", + "82": "East Lindsey", + "83": "East Riding", + "84": "East Staffordshire", + "85": "East Suffolk", + "86": "Eastbourne", + "87": "Eastleigh", + "88": "Eden", + "89": "Elmbridge", + "90": "Enfield", + "91": "Epping Forest", + "92": "Epsom & Ewell", + "93": "Erewash", + "94": "Exeter", + "95": "Fareham", + "96": "Fenland", + "97": "Folkestone & Hythe", + "98": "Forest of Dean", + "99": "Fylde", + "100": "Gateshead", + "101": "Gedling", + "102": "Gloucester", + "103": "Gosport", + "104": "Gravesham", + "105": "Great Yarmouth", + "106": "Greenwich", + "107": "Guildford", + "108": "Hackney", + "109": "Halton", + "110": "Hambleton", + "111": "Hammersmith & Fulham", + "112": "Harborough", + "113": "Haringey", + "114": "Harlow", + "115": "Harrogate", + "116": "Harrow", + "117": "Hart", + "118": "Hartlepool", + "119": "Hastings", + "120": "Havant", + "121": "Havering", + "122": "Herefordshire", + "123": "Hertsmere", + "124": "High Peak", + "125": "Hillingdon", + "126": "Hinckley & Bosworth", + "127": "Horsham", + "128": "Hounslow", + "129": "Huntingdonshire", + "130": "Hyndburn", + "131": "Ipswich", + "132": "Isle of Wight", + "133": "Isles of Scilly", + "134": "Islington", + "135": "Kensington & Chelsea", + "136": "Kings Lynn & West Norfolk", + "137": "Kingston-upon-Hull", + "138": "Kingston-upon-Thames", + "139": "Kirklees", + "140": "Knowsley", + "141": "Lambeth", + "142": "Lancaster", + "143": "Leeds", + "144": "Leicester", + "145": "Lewes", + "146": "Lewisham", + "147": "Lichfield", + "148": "Lincoln", + "149": "Liverpool", + "150": "Luton", + "151": "Maidstone", + "152": "Maldon", + "153": "Malvern Hills", + "154": "Manchester", + "155": "Mansfield", + "156": "Medway", + "157": "Melton", + "158": "Mendip", + "159": "Merton", + "160": "Mid Devon", + "161": "Mid Suffolk", + "162": "Mid Sussex", + "163": "Middlesbrough", + "164": "Milton Keynes", + "165": "Mole Valley", + "166": "N. Ireland", + "167": "New Forest", + "168": "Newark", + "169": "Newcastle-under-Lyme", + "170": "Newcastle-upon-Tyne", + "171": "Newham", + "172": "North Devon", + "173": "North East Derbyshire", + "174": "North East Lincolnshire", + "175": "North Hertfordshire", + "176": "North Kesteven", + "177": "North Lincolnshire", + "178": "North Norfolk", + "179": "North Northamptonshire", + "180": "North Somerset", + "181": "North Tyneside", + "182": "North Warwickshire", + "183": "North West Leics", + "184": "Northumberland", + "185": "Norwich", + "186": "Nottingham", + "187": "Nuneaton & Bedworth", + "188": "Oadby & Wigston", + "189": "Oldham", + "190": "Outside UK", + "191": "Oxford", + "192": "Pendle", + "193": "Peterborough", + "194": "Plymouth", + "195": "Portsmouth", + "196": "Preston", + "197": "Reading", + "198": "Redbridge", + "199": "Redcar & Cleveland", + "200": "Redditch", + "201": "Reigate & Banstead", + "202": "Ribble Valley", + "203": "Richmond-upon-Thames", + "204": "Richmondshire", + "205": "Rochdale", + "206": "Rochford", + "207": "Rossendale", + "208": "Rother", + "209": "Rotherham", + "210": "Rugby", + "211": "Runnymede", + "212": "Rushcliffe", + "213": "Rushmoor", + "214": "Rutland", + "215": "Ryedale", + "216": "Salford", + "217": "Sandwell", + "218": "Scarborough", + "219": "Scotland", + "220": "Sedgemoor", + "221": "Sefton", + "222": "Selby", + "223": "Sevenoaks", + "224": "Sheffield", + "225": "Shropshire", + "226": "Slough", + "227": "Solihull", + "228": "Somerset West & Taunton", + "229": "South Cambridgeshire", + "230": "South Derbyshire", + "231": "South Gloucestershire", + "232": "South Hams", + "233": "South Holland", + "234": "South Kesteven", + "235": "South Lakeland", + "236": "South Norfolk", + "237": "South Oxfordshire", + "238": "South Ribble", + "239": "South Somerset", + "240": "South Staffordshire", + "241": "South Tyneside", + "242": "Southampton", + "243": "Southend-on-Sea", + "244": "Southwark", + "245": "Spelthorne", + "246": "St Albans", + "247": "St Helens", + "248": "Stafford", + "249": "Staffordshire Moorlands", + "250": "Stevenage", + "251": "Stockport", + "252": "Stockton-on-Tees", + "253": "Stoke-on-Trent", + "254": "Stratford-on-Avon", + "255": "Stroud", + "256": "Sunderland", + "257": "Surrey Heath", + "258": "Sutton", + "259": "Swale", + "260": "Swindon", + "261": "Tameside", + "262": "Tamworth", + "263": "Tandridge", + "264": "Teignbridge", + "265": "Telford & Wrekin", + "266": "Tendring", + "267": "Test Valley", + "268": "Tewkesbury", + "269": "Thanet", + "270": "Three Rivers", + "271": "Thurrock", + "272": "Tonbridge & Malling", + "273": "Torbay", + "274": "Torridge", + "275": "Tower Hamlets", + "276": "Trafford", + "277": "Tunbridge Wells", + "278": "Uttlesford", + "279": "Vale of White Horse", + "280": "Wakefield", + "281": "Wales", + "282": "Walsall", + "283": "Waltham Forest", + "284": "Wandsworth", + "285": "Warrington", + "286": "Warwick", + "287": "Watford", + "288": "Waverley", + "289": "Wealden", + "290": "Welwyn Hatfield", + "291": "West Berkshire", + "292": "West Devon", + "293": "West Lancashire", + "294": "West Lindsey", + "295": "West Northamptonshire", + "296": "West Oxfordshire", + "297": "West Suffolk", + "298": "Westminster", + "299": "Wigan", + "300": "Wiltshire", + "301": "Winchester", + "302": "Windsor & Maidenhead", + "303": "Wirral", + "304": "Woking", + "305": "Wokingham", + "306": "Wolverhampton", + "307": "Worcester", + "308": "Worthing", + "309": "Wychavon", + "310": "Wyre", + "311": "Wyre Forest", + "312": "York" + } + } + } + }, + "previous_postcode": { + "header": "", + "description": "", + "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" + } + } + }, + "reasonable_preference": { + "header": "", + "description": "", + "questions": { + "reasonable_preference": { + "check_answer_label": "Was the household given Reasonable Preference (i.e. priority) for housing by the Local Authority?", + "header": "Was the household given reasonable preference by the local authority?", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes", + "1": "No" + }, + "conditional_for": { + "reasonable_preference_reason": ["Yes"] + } + }, + "reasonable_preference_reason": { + "check_answer_label": "Reason for reasonable preference", + "header": "Why were they given reasonable preference?", + "hint_text": "Select all that apply", + "type": "checkbox", + "answer_options": { + "reasonable_preference_reason_homeless": "Homeless or about to lose their home (within 56 days)", + "reasonable_preference_reason_unsatisfactory_housing": "Living in insanitary or overcrowded or unsatisfactory housing", + "reasonable_preference_reason_medical_grounds": "A need to move on medical and welfare grounds (including a disability)", + "reasonable_preference_reason_avoid_hardship": "A need to move to avoid hardship to themselves or others", + "divider": true, + "reasonable_preference_reason_do_not_know": "Do not know" + } + } + } + }, + "lettings_policy": { + "header": "", + "description": "", + "questions": { + "cbl_letting": { + "check_answer_label": "Choice-based letting?", + "header": "Was the letting made under choice-based lettings (CBL)? ", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes", + "1": "No" + } + }, + "chr_letting": { + "check_answer_label": "Common housing register letting?", + "header": "Was the letting made under common housing register (CHR)? ", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes", + "1": "No" + } + }, + "cap_letting": { + "check_answer_label": "Common allocation policy letting?", + "header": "Was the letting made under common allocation policy (CAP)? ", + "hint_text": "", + "type": "radio", + "answer_options": { + "0": "Yes", + "1": "No" + } + } + } + } + } + } + } + }, + "submission": { + "label": "Submission", + "subsections": { + "declaration": { + "label": "Declaration", + "pages": { + "declaration": { + "header": "", + "description": "", + "questions": { + "declaration": { + "check_answer_label": "", + "header": "What is the tenant code?", + "hint_text": "", + "type": "text" + } + } + } + } + } + } + } + } + } + \ No newline at end of file diff --git a/config/forms/schema/generic.json b/config/forms/schema/generic.json new file mode 100644 index 000000000..a52897c43 --- /dev/null +++ b/config/forms/schema/generic.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema", + "$id": "https://example.com/product.schema.json", + "title": "Form", + "description": "A form", + "type": "object", + "properties": { + "form_type": { + "description": "", + "type": "string" + }, + "start_year": { + "description": "", + "type": "integer" + }, + "end_year": { + "description": "", + "type": "integer" + }, + "sections": { + "description": "", + "type": "object", + "patternProperties": { + "^[0-9]+$": { + "description": "", + "type": "string" + }, + "label": { + "description": "", + "type": "string" + }, + "subsections": { + "type": "object" + } + } + } + } +} \ No newline at end of file