From dd9e026c42422e3065a962e5903428aa427885da Mon Sep 17 00:00:00 2001 From: Jim Graszer Date: Fri, 5 Jun 2026 13:14:14 -0500 Subject: [PATCH 01/10] Updated testing that wasn't passing due to missing values. --- .gitignore | 1 + .../data/sources/housing_code_test.feature | 23 ++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index d3dbf0c..fd08ca3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ ~$* *Zone.Identifier +.venv \ No newline at end of file diff --git a/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature b/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature index 999122c..aadcecc 100644 --- a/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature +++ b/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature @@ -12,7 +12,7 @@ Want to disable the tests? Want to learn more? See ALKiln's docs: https://suffol @1 Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy Given I start the interview at "housing_code_interview.yml" - And the maximum seconds for each Step in this Scenario is 25 + And the maximum seconds for each Step in this Scenario is 1200 Then I tap the "#start_your_list" element And I get to the question id "download_conditions_checklist_docs" with this data: | var | value | trigger | @@ -33,11 +33,15 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | document_choice['get_report'] | True | | | users[0].address.address | Commonwealth Avenue | | | users[0].address.city | Boston | | + | users.there_is_another | False | | | other_parties[0].person_type | business | | | other_parties[0].name.first | ll_business | other_parties[0].person_type | | other_parties[0].address.address | Landlord address | | | other_parties[0].address.city | City | | + | other_parties.there_is_another | False | | | complaint_ask_for_damages| True | | + | complaint_raft_or_other_assistance | True | | + | complaint_retaliation| True | | | landlord_is_housing_authority | False | | | landlord_is_government | False | landlord_is_housing_authority | | landlord_lives_in_building | True | landlord_is_government | @@ -60,6 +64,9 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | signature_choice | this_device | signature_choice | | users[0].states_above_true['states_true'] | True | signature_choice | | users[0].signature | | users[0].signature | + | claim_jurytrial| True | | + | service_method| mail | | + | service_today| True | | Then I take a screenshot @2 @@ -95,9 +102,11 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | users[0].has_separate_mailing_address | True | | | users[0].mailing_address.address | Dartmouth | | | users[0].mailing_address.city | Boston | | + | users.there_is_another | False | | | other_parties[0].person_type | individual | | | other_parties[0].name.first | ll_business | other_parties[0].person_type | | other_parties[0].name.last | name | other_parties[0].person_type | + | other_parties.there_is_another | False | | | ll_address_unknown | True | | | users[0].email | test@example.com | | | tenant_repair_issue_date | 11/11/2001| | @@ -110,7 +119,9 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | damage_calculation_method | skip_amount | | | users[0].attorney.address.address | Newbury | | | users[0].attorney.address.city | Boston | | - | complaint_ask_for_damages | False | | + | complaint_ask_for_damages| True | | + | complaint_raft_or_other_assistance | True | | + | complaint_retaliation| True | | | landlord_is_housing_authority | True | | | complaint_utility_shutoff['gas'] | True | | | complaint_utility_not_paid['electricity'] | True | | @@ -127,6 +138,7 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | users[0].states_above_true['states_true'] | True | signature_choice | | users[0].attorney.signature | | users[0].attorney.signature | | users[0].signature | | users[0].signature | + | claim_jurytrial| True | | Then I take a screenshot @@ -163,9 +175,11 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | users[0].has_separate_mailing_address | True | | | users[0].mailing_address.address | Dartmouth | | | users[0].mailing_address.city | Boston | | + | users.there_is_another | False | | | other_parties[0].person_type | individual | | | other_parties[0].name.first | ll_business | other_parties[0].person_type | | other_parties[0].name.last | name | other_parties[0].person_type | + | other_parties.there_is_another | False | | | ll_address_unknown | True | | | users[0].email | test@example.com | | | tenant_repair_issue_date | 11/11/2001| | @@ -178,7 +192,9 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | damage_calculation_method | skip_amount | | | users[0].attorney.address.address | Newbury | | | users[0].attorney.address.city | Boston | | - | complaint_ask_for_damages | False | | + | complaint_ask_for_damages| True | | + | complaint_raft_or_other_assistance | True | | + | complaint_retaliation| True | | | landlord_is_housing_authority | True | | | complaint_utility_shutoff['gas'] | True | | | complaint_utility_not_paid['electricity'] | True | | @@ -195,4 +211,5 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | users[0].states_above_true['states_true'] | True | signature_choice | | users[0].attorney.signature | | users[0].attorney.signature | | users[0].signature | | users[0].signature | + | claim_jurytrial| True | | Then I take a screenshot \ No newline at end of file From 715c7a5e1bcee90ffd10582cbe3696f25fad303a Mon Sep 17 00:00:00 2001 From: Jim Graszer Date: Fri, 5 Jun 2026 15:03:09 -0500 Subject: [PATCH 02/10] Formatting issues possibly causing GH action crash. --- .../data/questions/customized_screens.yml | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/docassemble/HousingCodeChecklist/data/questions/customized_screens.yml b/docassemble/HousingCodeChecklist/data/questions/customized_screens.yml index d34d473..7ec0d7b 100644 --- a/docassemble/HousingCodeChecklist/data/questions/customized_screens.yml +++ b/docassemble/HousingCodeChecklist/data/questions/customized_screens.yml @@ -82,23 +82,21 @@ subquestion: | % elif person_answering == "tenant": First, you will be asked if your landlord is a business or an individual and then what your landlord's name is. - Your landlord **may not be the owner** of the property. It’s important to sue the owner, not just the landlord or property manager (in other words, name **both** the landlord and the owner in your court complaint and any demand letter you may want to send under the Consumer Protection Act). You will be asked if you have another landlord or owner to enter after this. + Your landlord **may not be the owner** of the property. It's important to sue the owner, not just the landlord or property manager (in other words, name **both** the landlord and the owner in your court complaint and any demand letter you may want to send under the Consumer Protection Act). You will be asked if you have another landlord or owner to enter after this. To find out who the owner is, try using [masslandrecords.com](https://www.masslandrecords.com/), or if you are having trouble: - - - call your local Registry of Deeds for help finding the most recent deed for the property, or - - call your town/city tax assessor’s office to find out who is listed as owner for the property's tax and water bills. - + + - call your local Registry of Deeds for help finding the most recent deed for the property, or + - call your town/city tax assessor's office to find out who is listed as owner for the property's tax and water bills. % else: First, you will be asked if the tenant's landlord is a business or an individual and then what the landlord's name is. - The tenant's landlord **may not be the owner** of the property. It’s important to sue the owner, not just the landlord or property manager (in other words, name **both** the landlord and the owner in the court complaint and any demand letter the tenant may want to send under the Consumer Protection Act). You will be asked if you have another landlord or owner to enter after this. + The tenant's landlord **may not be the owner** of the property. It's important to sue the owner, not just the landlord or property manager (in other words, name **both** the landlord and the owner in the court complaint and any demand letter the tenant may want to send under the Consumer Protection Act). You will be asked if you have another landlord or owner to enter after this. To find out who the owner is, try using [masslandrecords.com](https://www.masslandrecords.com/), or if you are having trouble: - - call the tenant's local Registry of Deeds for help finding the most recent deed for the property, or - - call the tenant's town/city tax assessor’s office to find out who is listed as owner for the property's tax and water bills. - + - call the tenant's local Registry of Deeds for help finding the most recent deed for the property, or + - call the tenant's town/city tax assessor's office to find out who is listed as owner for the property's tax and water bills. % endif fields: - label: | @@ -415,9 +413,9 @@ subquestion: | % if len(other_parties.elements) > 1: You have already told us about ${comma_and_list(other_parties.complete_elements())}. % elif person_answering == "tenant": - Your landlord may not be the owner of the property. It’s important to sue the owner, not just the landlord or property manager (in other words, name both the landlord and the owner in your court complaint and any demand letter you may want to send under the Consumer Protection Act). + Your landlord may not be the owner of the property. It's important to sue the owner, not just the landlord or property manager (in other words, name both the landlord and the owner in your court complaint and any demand letter you may want to send under the Consumer Protection Act). % else: - The tenant's landlord may not be the owner of the property. It’s important to sue the owner, not just the landlord or property manager (in other words, name both the landlord and the owner in the court complaint and any demand letter you may want to send under the Consumer Protection Act). + The tenant's landlord may not be the owner of the property. It's important to sue the owner, not just the landlord or property manager (in other words, name both the landlord and the owner in the court complaint and any demand letter you may want to send under the Consumer Protection Act). % endif fields: - Is anyone else on the landlord's side of the case?: other_parties.there_is_another @@ -1412,7 +1410,7 @@ content: |

You need to know

* **UpToCode does not provide legal advice**. If you need legal advice, you can use the [Massachusetts Legal Resource Finder](https://masslrf.org) to find a lawyer. - * The information and documents on UpToCode have no warranty. We provide the information “as-is.” By using UpToCode, you agree not to hold GBLS or the information providers on UpToCode liable. + * The information and documents on UpToCode have no warranty. We provide the information "as-is." By using UpToCode, you agree not to hold GBLS or the information providers on UpToCode liable. * We work hard to keep the information on UpToCode up to date. Lawyers drafted and reviewed the documents UpToCode uses. But laws and local rules change over time. These changes can make a document out of date when you use it. * We do our best to keep UpToCode working! To do that, we allow you to submit feedback so we can track problems on UpToCode. But we cannot provide individual technical support. From ecbf0bc68a73cac23898b75a544e233b282461d9 Mon Sep 17 00:00:00 2001 From: Jim Graszer Date: Fri, 5 Jun 2026 15:06:20 -0500 Subject: [PATCH 03/10] Potential URL breaking the build/check action. --- .../data/questions/Repair_Letter_Tenant.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docassemble/HousingCodeChecklist/data/questions/Repair_Letter_Tenant.yml b/docassemble/HousingCodeChecklist/data/questions/Repair_Letter_Tenant.yml index 074e3a7..2a038f3 100644 --- a/docassemble/HousingCodeChecklist/data/questions/Repair_Letter_Tenant.yml +++ b/docassemble/HousingCodeChecklist/data/questions/Repair_Letter_Tenant.yml @@ -119,7 +119,7 @@ subquestion: | Before you start, you will need information about your landlord and their address. - *The [Court Forms Online](https://courtformsonline.org/housing/) project may be able to help with other housing problems.* + *The [Court Forms Online](https://courtformsonline.org/ma/housing) project may be able to help with other housing problems.* help: label: | From 0cf57f791daaf25020fa29dca4fadb8a8908741b Mon Sep 17 00:00:00 2001 From: Jim Graszer Date: Mon, 8 Jun 2026 10:23:55 -0500 Subject: [PATCH 04/10] Problem year range was not picking up. Verifying trial court works. --- .../data/sources/housing_code_test.feature | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature b/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature index aadcecc..615a802 100644 --- a/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature +++ b/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature @@ -59,6 +59,7 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | complaint_ask_for_tro | False | | | complaint_ask_for_relocation | True | | | other_parties[0].email | test@example.com | | + | trial_court | Suffolk County Superior Court (Boston) | | | users[0].email | test@example.com | | | verified_complaint_wants_fee_waiver | False | | | signature_choice | this_device | signature_choice | @@ -88,7 +89,7 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | kind_of_lawsuit['illegal_lockout'] | True | | | kind_of_lawsuit['entered_without_permission'] | True || | bad_conditions[i].details[j].condition_existed_at_start | False | | - | bad_conditions[i].details[j].start_year | 2004 | | + | bad_conditions[i].details[j].start_year | 2024 | | | wants_detailed_conditions | False | | | screen_tenant_facing_eviction | has case | screen_tenant_facing_eviction | | screen_ll_knows_problem | True | | @@ -132,6 +133,7 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | complaint_ask_for_tro | False | | | complaint_ask_for_relocation | False | | | other_parties[0].email | test@example.com | | + | trial_court | Suffolk County Superior Court (Boston) | | | verified_complaint_wants_fee_waiver | True | | | public_assistance_kinds['TAFDC'] | True | | | signature_choice | this_device | | @@ -161,7 +163,7 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | kind_of_lawsuit['illegal_lockout'] | True | | | kind_of_lawsuit['entered_without_permission'] | True || | bad_conditions[i].details[j].condition_existed_at_start | False | | - | bad_conditions[i].details[j].start_year | 2004 | | + | bad_conditions[i].details[j].start_year | 2024 | | | wants_detailed_conditions | False | | | screen_tenant_facing_eviction | pending | screen_tenant_facing_eviction | | screen_ll_knows_problem | True | | @@ -205,6 +207,7 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | complaint_ask_for_tro | False | | | complaint_ask_for_relocation | False | | | other_parties[0].email | test@example.com | | + | trial_court | Suffolk County Superior Court (Boston) | | | verified_complaint_wants_fee_waiver | True | | | public_assistance_kinds['TAFDC'] | True | | | signature_choice | this_device | | From 5ad118dff6bed0ba78226143b8a3136ce81d26e5 Mon Sep 17 00:00:00 2001 From: Jim Graszer Date: Mon, 8 Jun 2026 11:05:19 -0500 Subject: [PATCH 05/10] Fixing address issue and object selection. --- .../data/sources/housing_code_test.feature | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature b/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature index 615a802..ac4cc56 100644 --- a/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature +++ b/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature @@ -36,8 +36,12 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | users.there_is_another | False | | | other_parties[0].person_type | business | | | other_parties[0].name.first | ll_business | other_parties[0].person_type | - | other_parties[0].address.address | Landlord address | | - | other_parties[0].address.city | City | | + | other_parties[0].address.address | 123 Testing St | | + | other_parties[0].address.city | Boston | | + | other_parties[0].address.location.known | False | | + | other_parties[0].address.state | MA | | + | other_parties[0].address.unit | | | + | other_parties[0].address.zip | 02111 | | | other_parties.there_is_another | False | | | complaint_ask_for_damages| True | | | complaint_raft_or_other_assistance | True | | @@ -59,7 +63,7 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | complaint_ask_for_tro | False | | | complaint_ask_for_relocation | True | | | other_parties[0].email | test@example.com | | - | trial_court | Suffolk County Superior Court (Boston) | | + | trial_court | all_courts[154] | | | users[0].email | test@example.com | | | verified_complaint_wants_fee_waiver | False | | | signature_choice | this_device | signature_choice | @@ -107,6 +111,12 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | other_parties[0].person_type | individual | | | other_parties[0].name.first | ll_business | other_parties[0].person_type | | other_parties[0].name.last | name | other_parties[0].person_type | + | other_parties[0].address.address | 123 Testing St | | + | other_parties[0].address.city | Boston | | + | other_parties[0].address.location.known | False | | + | other_parties[0].address.state | MA | | + | other_parties[0].address.unit | | | + | other_parties[0].address.zip | 02111 | | | other_parties.there_is_another | False | | | ll_address_unknown | True | | | users[0].email | test@example.com | | @@ -133,7 +143,7 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | complaint_ask_for_tro | False | | | complaint_ask_for_relocation | False | | | other_parties[0].email | test@example.com | | - | trial_court | Suffolk County Superior Court (Boston) | | + | trial_court | all_courts[154] | | | verified_complaint_wants_fee_waiver | True | | | public_assistance_kinds['TAFDC'] | True | | | signature_choice | this_device | | @@ -181,6 +191,12 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | other_parties[0].person_type | individual | | | other_parties[0].name.first | ll_business | other_parties[0].person_type | | other_parties[0].name.last | name | other_parties[0].person_type | + | other_parties[0].address.address | 123 Testing St | | + | other_parties[0].address.city | Boston | | + | other_parties[0].address.location.known | False | | + | other_parties[0].address.state | MA | | + | other_parties[0].address.unit | | | + | other_parties[0].address.zip | 02111 | | | other_parties.there_is_another | False | | | ll_address_unknown | True | | | users[0].email | test@example.com | | @@ -207,7 +223,7 @@ Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy | complaint_ask_for_tro | False | | | complaint_ask_for_relocation | False | | | other_parties[0].email | test@example.com | | - | trial_court | Suffolk County Superior Court (Boston) | | + | trial_court | all_courts[154] | | | verified_complaint_wants_fee_waiver | True | | | public_assistance_kinds['TAFDC'] | True | | | signature_choice | this_device | | From f75884ae768cdc959033ae7cdeac674c8f992ece Mon Sep 17 00:00:00 2001 From: Quinten Steenhuis Date: Tue, 9 Jun 2026 16:18:50 -0400 Subject: [PATCH 06/10] Refresh ALKiln fixtures for current interview flow Replace the brittle three-column scenarios with two focused, generated-style paths that stop at the review screen. This avoids coupling the browser tests to asynchronous document generation and the transient waiting screen. Supply the required Terms of Use and none-of-the-above checkbox answers, use ALKiln's resolved names for dynamically indexed condition details, and provide the current required repair-description fields. Correct the photo upload field from the obsolete picture attribute to the active files attribute and add a small JPEG fixture. The basic and upload scenarios were both exercised against a local jhpyle/docassemble container with ALKiln 5.16.x. Both reached review-screen successfully, and the upload fixture was confirmed to be consumed. --- .../data/sources/dummy_photo1.jpg | Bin 0 -> 825 bytes .../data/sources/housing_code_test.feature | 299 +++++------------- 2 files changed, 71 insertions(+), 228 deletions(-) create mode 100644 docassemble/HousingCodeChecklist/data/sources/dummy_photo1.jpg diff --git a/docassemble/HousingCodeChecklist/data/sources/dummy_photo1.jpg b/docassemble/HousingCodeChecklist/data/sources/dummy_photo1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..615bb3be1143988082690293e03c5b36e6747a58 GIT binary patch literal 825 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!=o3Ax_(anF0iOegJB3`=KnVVUriAz literal 0 HcmV?d00001 diff --git a/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature b/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature index ac4cc56..c8ff1ee 100644 --- a/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature +++ b/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature @@ -1,234 +1,77 @@ -@interviews_start -Feature: The interviews run without erroring +@interviews_start @generated +Feature: Generated end-to-end housing code interview paths -This file: -[x] Test that each interview starts without an error. -[x] Contains some additional example Steps. They use fake values and are commented out with a "#" so they won't run. +These scenarios were generated from completed docassemble sessions with the +ALDashboard ALKiln story generator, then trimmed to user-provided answers. +They stop at the review screen so background document assembly does not make +the browser test depend on the transient waiting screen. -These tests are made to work with the ALKiln testing framework, an automated testing framework made under the Document Assembly Line Project. - -Want to disable the tests? Want to learn more? See ALKiln's docs: https://suffolklitlab.github.io/docassemble-AssemblyLine-documentation/docs/automated_integrated_testing - -@1 -Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy +@happy_path +Scenario: A tenant completes a basic repair and report path Given I start the interview at "housing_code_interview.yml" - And the maximum seconds for each Step in this Scenario is 1200 + And the maximum seconds for each Step in this Scenario is 120 Then I tap the "#start_your_list" element - And I get to the question id "download_conditions_checklist_docs" with this data: - | var | value | trigger | - | acknowledged_information_use['I accept the Terms of Use.'] | True | acknowledged_information_use | - | person_answering | tenant | | - | users[0].name.first | Joe | | - | users[0].name.last | Carpenter | | - | bad_conditions["common problems"].claims['heat_not_working'] | True | | - | kind_of_lawsuit['illegal_lockout'] | True | | - | bad_conditions[i].details[j].condition_existed_at_start | True | | - | wants_detailed_conditions | False | | - | screen_tenant_facing_eviction | notice only | screen_tenant_facing_eviction | - | screen_ll_knows_problem | True | | - | screen_ll_already_fixing | False | screen_ll_knows_problem | - | screen_other_tenants_with_problem | False | screen_ll_knows_problem | - | screen_contacted_housing_inspector | True | screen_ll_knows_problem | - | has_tro | False | screen_ll_knows_problem | - | document_choice['get_report'] | True | | - | users[0].address.address | Commonwealth Avenue | | - | users[0].address.city | Boston | | - | users.there_is_another | False | | - | other_parties[0].person_type | business | | - | other_parties[0].name.first | ll_business | other_parties[0].person_type | - | other_parties[0].address.address | 123 Testing St | | - | other_parties[0].address.city | Boston | | - | other_parties[0].address.location.known | False | | - | other_parties[0].address.state | MA | | - | other_parties[0].address.unit | | | - | other_parties[0].address.zip | 02111 | | - | other_parties.there_is_another | False | | - | complaint_ask_for_damages| True | | - | complaint_raft_or_other_assistance | True | | - | complaint_retaliation| True | | - | landlord_is_housing_authority | False | | - | landlord_is_government | False | landlord_is_housing_authority | - | landlord_lives_in_building | True | landlord_is_government | - | building_larger_than_4_units | True | landlord_lives_in_building | - | demand_letter_sent | True | | - | date_of_93A_notice | 11/11/2000 | demand_letter_sent | - | got_93a_settlement_offer | True | | - | verified_complaint_claims[i].details | something| | - | verified_complaint_claims[i].date | 2023 | | - | tenant_gets_rent_subsidy | True | | - | tenant_rent_share | 500 | | - | tenant_unit_rent | 750 | | - | tenant_subsidy_is_voucher | True | | - | verified_complaint_tenant_voucher_at_risk | True | tenant_subsidy_is_voucher | - | complaint_ask_for_tro | False | | - | complaint_ask_for_relocation | True | | - | other_parties[0].email | test@example.com | | - | trial_court | all_courts[154] | | - | users[0].email | test@example.com | | - | verified_complaint_wants_fee_waiver | False | | - | signature_choice | this_device | signature_choice | - | users[0].states_above_true['states_true'] | True | signature_choice | - | users[0].signature | | users[0].signature | - | claim_jurytrial| True | | - | service_method| mail | | - | service_today| True | | - Then I take a screenshot - -@2 -Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy - Given I start the interview at "housing_code_interview.yml" - And the maximum seconds for each Step in this Scenario is 80 - Then I tap the "#start_your_list" element - And I get to the question id "download_conditions_checklist_docs" with this data: - | var | value | trigger | - | acknowledged_information_use['I accept the Terms of Use.'] | True | | - | person_answering | attorney | | - | representation_type| entering_appearance | person_answering | - | users[0].name.first | Joe | | - | users[0].name.last | Carpenter | | - | users[0].attorney.organization | law_firm | | - | users[0].attorney.name.first | Lawyer | | - | users[0].attorney.name.last | Name | | - | bad_conditions["common problems"].claims['heat_not_working'] | True | | - | kind_of_lawsuit['illegal_lockout'] | True | | - | kind_of_lawsuit['entered_without_permission'] | True || - | bad_conditions[i].details[j].condition_existed_at_start | False | | - | bad_conditions[i].details[j].start_year | 2024 | | - | wants_detailed_conditions | False | | - | screen_tenant_facing_eviction | has case | screen_tenant_facing_eviction | - | screen_ll_knows_problem | True | | - | screen_ll_already_fixing | True | screen_ll_knows_problem | - | screen_other_tenants_with_problem | True | screen_ll_knows_problem | - | screen_contacted_housing_inspector | True | screen_ll_knows_problem | - | has_tro | False | screen_ll_knows_problem | - | document_choice['tell_landlord'] | True | | - | users[0].address.address | Commonwealth Avenue | | - | users[0].address.city | Boston | | - | users[0].has_separate_mailing_address | True | | - | users[0].mailing_address.address | Dartmouth | | - | users[0].mailing_address.city | Boston | | - | users.there_is_another | False | | - | other_parties[0].person_type | individual | | - | other_parties[0].name.first | ll_business | other_parties[0].person_type | - | other_parties[0].name.last | name | other_parties[0].person_type | - | other_parties[0].address.address | 123 Testing St | | - | other_parties[0].address.city | Boston | | - | other_parties[0].address.location.known | False | | - | other_parties[0].address.state | MA | | - | other_parties[0].address.unit | | | - | other_parties[0].address.zip | 02111 | | - | other_parties.there_is_another | False | | - | ll_address_unknown | True | | - | users[0].email | test@example.com | | - | tenant_repair_issue_date | 11/11/2001| | - | sanitary_code_citation_style | detailed_cites | sanitary_code_citation_style | - | users[0].move_in_date | 11/11/2001 | | - | notification_date | 2023 | | - | written_notification | True | | - | letter_date | 2021 | written_notification | - | effect_of_conditions | something | | - | damage_calculation_method | skip_amount | | - | users[0].attorney.address.address | Newbury | | - | users[0].attorney.address.city | Boston | | - | complaint_ask_for_damages| True | | - | complaint_raft_or_other_assistance | True | | - | complaint_retaliation| True | | - | landlord_is_housing_authority | True | | - | complaint_utility_shutoff['gas'] | True | | - | complaint_utility_not_paid['electricity'] | True | | - | verified_complaint_claims[i].details | something | | - | verified_complaint_claims[i].date | 2023 | | - | tenant_gets_rent_subsidy | True | | - | tenant_subsidy_is_voucher | False | | - | complaint_ask_for_tro | False | | - | complaint_ask_for_relocation | False | | - | other_parties[0].email | test@example.com | | - | trial_court | all_courts[154] | | - | verified_complaint_wants_fee_waiver | True | | - | public_assistance_kinds['TAFDC'] | True | | - | signature_choice | this_device | | - | users[0].states_above_true['states_true'] | True | signature_choice | - | users[0].attorney.signature | | users[0].attorney.signature | - | users[0].signature | | users[0].signature | - | claim_jurytrial| True | | - Then I take a screenshot - - -@3 -Scenario: housing_code_interview.yml tenant runs, one plantiff, rent subsidy + And the user gets to "review-screen" with this data: + | var | value | + | acknowledged_information_use['I accept the Terms of Use.'] | True | + | person_answering | tenant | + | users.target_number | 1 | + | users[0].name.first | Jane | + | users[0].name.last | Tenant | + | users[0].address.address | 123 Main Street | + | users[0].address.city | Boston | + | users[0].address.state | MA | + | users[0].address.zip | 02111 | + | users[0].email | tenant@example.com | + | bad_conditions["common problems"].claims['heat_not_working'] | True | + | bad_conditions["common problems"].claims['mouse_rats'] | True | + | kind_of_lawsuit['None'] | True | + | bad_conditions[common problems].details[heat_not_working].condition_existed_at_start | True | + | bad_conditions[common problems].details[mouse_rats].condition_existed_at_start | True | + | wants_detailed_conditions | False | + | screen_tenant_facing_eviction | no case | + | screen_ll_knows_problem | True | + | screen_ll_already_fixing | False | + | screen_other_tenants_with_problem | False | + | screen_contacted_housing_inspector | False | + | has_tro | False | + | other_parties.target_number | 1 | + | other_parties[0].person_type | individual | + | other_parties[0].name.first | Landlord | + | ll_address_unknown | True | + +@complex_path +Scenario: A tenant completes a detailed conditions path with an uploaded photo Given I start the interview at "housing_code_interview.yml" - And the maximum seconds for each Step in this Scenario is 80 + And the maximum seconds for each Step in this Scenario is 120 Then I tap the "#start_your_list" element - And I get to the question id "download_conditions_checklist_docs" with this data: - | var | value | trigger | - | acknowledged_information_use['I accept the Terms of Use.'] | True | | - | person_answering | attorney | | - | representation_type| entering_appearance | person_answering | - | users[0].name.first | Joe | | - | users[0].name.last | Carpenter | | - | users[0].attorney.organization | law_firm | | - | users[0].attorney.name.first | Lawyer | | - | users[0].attorney.name.last | Name | | - | bad_conditions["common problems"].claims['heat_not_working'] | True | | - | kind_of_lawsuit['illegal_lockout'] | True | | - | kind_of_lawsuit['entered_without_permission'] | True || - | bad_conditions[i].details[j].condition_existed_at_start | False | | - | bad_conditions[i].details[j].start_year | 2024 | | - | wants_detailed_conditions | False | | - | screen_tenant_facing_eviction | pending | screen_tenant_facing_eviction | - | screen_ll_knows_problem | True | | - | screen_ll_already_fixing | True | screen_ll_knows_problem | - | screen_other_tenants_with_problem | True | screen_ll_knows_problem | - | screen_contacted_housing_inspector | True | screen_ll_knows_problem | - | has_tro | False | screen_ll_knows_problem | - | document_choice['get_report'] | True | | - | users[0].address.address | Commonwealth Avenue | | - | users[0].address.city | Boston | | - | users[0].has_separate_mailing_address | True | | - | users[0].mailing_address.address | Dartmouth | | - | users[0].mailing_address.city | Boston | | - | users.there_is_another | False | | - | other_parties[0].person_type | individual | | - | other_parties[0].name.first | ll_business | other_parties[0].person_type | - | other_parties[0].name.last | name | other_parties[0].person_type | - | other_parties[0].address.address | 123 Testing St | | - | other_parties[0].address.city | Boston | | - | other_parties[0].address.location.known | False | | - | other_parties[0].address.state | MA | | - | other_parties[0].address.unit | | | - | other_parties[0].address.zip | 02111 | | - | other_parties.there_is_another | False | | - | ll_address_unknown | True | | - | users[0].email | test@example.com | | - | tenant_repair_issue_date | 11/11/2001| | - | sanitary_code_citation_style | detailed_cites | sanitary_code_citation_style | - | users[0].move_in_date | 11/11/2001 | | - | notification_date | 2023 | | - | written_notification | True | | - | letter_date | 2021 | written_notification | - | effect_of_conditions | something | | - | damage_calculation_method | skip_amount | | - | users[0].attorney.address.address | Newbury | | - | users[0].attorney.address.city | Boston | | - | complaint_ask_for_damages| True | | - | complaint_raft_or_other_assistance | True | | - | complaint_retaliation| True | | - | landlord_is_housing_authority | True | | - | complaint_utility_shutoff['gas'] | True | | - | complaint_utility_not_paid['electricity'] | True | | - | verified_complaint_claims[i].details | something | | - | verified_complaint_claims[i].date | 2023 | | - | tenant_gets_rent_subsidy | True | | - | tenant_subsidy_is_voucher | False | | - | complaint_ask_for_tro | False | | - | complaint_ask_for_relocation | False | | - | other_parties[0].email | test@example.com | | - | trial_court | all_courts[154] | | - | verified_complaint_wants_fee_waiver | True | | - | public_assistance_kinds['TAFDC'] | True | | - | signature_choice | this_device | | - | users[0].states_above_true['states_true'] | True | signature_choice | - | users[0].attorney.signature | | users[0].attorney.signature | - | users[0].signature | | users[0].signature | - | claim_jurytrial| True | | - Then I take a screenshot \ No newline at end of file + And the user gets to "review-screen" with this data: + | var | value | + | acknowledged_information_use['I accept the Terms of Use.'] | True | + | person_answering | tenant | + | users.target_number | 1 | + | users[0].name.first | Alex | + | users[0].name.last | Tenant | + | users[0].address.address | 456 Washington Street | + | users[0].address.city | Boston | + | users[0].address.state | MA | + | users[0].address.zip | 02111 | + | users[0].email | alex@example.com | + | bad_conditions["common problems"].claims['heat_not_working'] | True | + | kind_of_lawsuit['None'] | True | + | bad_conditions[common problems].details[heat_not_working].condition_existed_at_start | True | + | bad_conditions[common problems].details[heat_not_working].has_file_to_upload | True | + | bad_conditions[common problems].details[heat_not_working].files | dummy_photo1.jpg | + | wants_detailed_conditions | False | + | screen_tenant_facing_eviction | no case | + | screen_ll_knows_problem | False | + | tenant_repair_issue_date | 01/01/2024 | + | tenant_repair_issue_description | My apartment has no heat and I uploaded a photo of the problem. | + | other_parties.target_number | 1 | + | other_parties[0].person_type | individual | + | other_parties[0].name.first | Landlord | + | other_parties[0].address.address | 789 State Street | + | other_parties[0].address.city | Boston | + | other_parties[0].address.state | MA | + | other_parties[0].address.zip | 02109 | + | ll_address_unknown | False | From 006f6672dc5e164cdd282c5654a298e2cf596a55 Mon Sep 17 00:00:00 2001 From: Quinten Steenhuis Date: Wed, 10 Jun 2026 15:55:09 -0400 Subject: [PATCH 07/10] Updated maximalist test --- .gitignore | 3 +- .../data/sources/dummy_photo2.jpg | Bin 0 -> 825 bytes .../data/sources/housing_code_test.feature | 77 -- .../data/sources/interviews_run.feature | 19 - .../data/sources/maximalist_path.feature | 1223 +++++++++++++++++ 5 files changed, 1225 insertions(+), 97 deletions(-) create mode 100644 docassemble/HousingCodeChecklist/data/sources/dummy_photo2.jpg delete mode 100644 docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature delete mode 100644 docassemble/HousingCodeChecklist/data/sources/interviews_run.feature create mode 100644 docassemble/HousingCodeChecklist/data/sources/maximalist_path.feature diff --git a/.gitignore b/.gitignore index fd08ca3..b3152a0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ ~$* *Zone.Identifier -.venv \ No newline at end of file +.venv +node_modules diff --git a/docassemble/HousingCodeChecklist/data/sources/dummy_photo2.jpg b/docassemble/HousingCodeChecklist/data/sources/dummy_photo2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7203c6c1ba50d9fd988245bd91f5a9f23fdadf8 GIT binary patch literal 825 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^cw^i}n}V99Yz)!7zj|^Z%Oww!9Eh literal 0 HcmV?d00001 diff --git a/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature b/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature deleted file mode 100644 index c8ff1ee..0000000 --- a/docassemble/HousingCodeChecklist/data/sources/housing_code_test.feature +++ /dev/null @@ -1,77 +0,0 @@ -@interviews_start @generated -Feature: Generated end-to-end housing code interview paths - -These scenarios were generated from completed docassemble sessions with the -ALDashboard ALKiln story generator, then trimmed to user-provided answers. -They stop at the review screen so background document assembly does not make -the browser test depend on the transient waiting screen. - -@happy_path -Scenario: A tenant completes a basic repair and report path - Given I start the interview at "housing_code_interview.yml" - And the maximum seconds for each Step in this Scenario is 120 - Then I tap the "#start_your_list" element - And the user gets to "review-screen" with this data: - | var | value | - | acknowledged_information_use['I accept the Terms of Use.'] | True | - | person_answering | tenant | - | users.target_number | 1 | - | users[0].name.first | Jane | - | users[0].name.last | Tenant | - | users[0].address.address | 123 Main Street | - | users[0].address.city | Boston | - | users[0].address.state | MA | - | users[0].address.zip | 02111 | - | users[0].email | tenant@example.com | - | bad_conditions["common problems"].claims['heat_not_working'] | True | - | bad_conditions["common problems"].claims['mouse_rats'] | True | - | kind_of_lawsuit['None'] | True | - | bad_conditions[common problems].details[heat_not_working].condition_existed_at_start | True | - | bad_conditions[common problems].details[mouse_rats].condition_existed_at_start | True | - | wants_detailed_conditions | False | - | screen_tenant_facing_eviction | no case | - | screen_ll_knows_problem | True | - | screen_ll_already_fixing | False | - | screen_other_tenants_with_problem | False | - | screen_contacted_housing_inspector | False | - | has_tro | False | - | other_parties.target_number | 1 | - | other_parties[0].person_type | individual | - | other_parties[0].name.first | Landlord | - | ll_address_unknown | True | - -@complex_path -Scenario: A tenant completes a detailed conditions path with an uploaded photo - Given I start the interview at "housing_code_interview.yml" - And the maximum seconds for each Step in this Scenario is 120 - Then I tap the "#start_your_list" element - And the user gets to "review-screen" with this data: - | var | value | - | acknowledged_information_use['I accept the Terms of Use.'] | True | - | person_answering | tenant | - | users.target_number | 1 | - | users[0].name.first | Alex | - | users[0].name.last | Tenant | - | users[0].address.address | 456 Washington Street | - | users[0].address.city | Boston | - | users[0].address.state | MA | - | users[0].address.zip | 02111 | - | users[0].email | alex@example.com | - | bad_conditions["common problems"].claims['heat_not_working'] | True | - | kind_of_lawsuit['None'] | True | - | bad_conditions[common problems].details[heat_not_working].condition_existed_at_start | True | - | bad_conditions[common problems].details[heat_not_working].has_file_to_upload | True | - | bad_conditions[common problems].details[heat_not_working].files | dummy_photo1.jpg | - | wants_detailed_conditions | False | - | screen_tenant_facing_eviction | no case | - | screen_ll_knows_problem | False | - | tenant_repair_issue_date | 01/01/2024 | - | tenant_repair_issue_description | My apartment has no heat and I uploaded a photo of the problem. | - | other_parties.target_number | 1 | - | other_parties[0].person_type | individual | - | other_parties[0].name.first | Landlord | - | other_parties[0].address.address | 789 State Street | - | other_parties[0].address.city | Boston | - | other_parties[0].address.state | MA | - | other_parties[0].address.zip | 02109 | - | ll_address_unknown | False | diff --git a/docassemble/HousingCodeChecklist/data/sources/interviews_run.feature b/docassemble/HousingCodeChecklist/data/sources/interviews_run.feature deleted file mode 100644 index b7ea74b..0000000 --- a/docassemble/HousingCodeChecklist/data/sources/interviews_run.feature +++ /dev/null @@ -1,19 +0,0 @@ -@interviews_start -Feature: The interviews run without erroring - -This file: -[x] Test that each interview starts without an error. -[x] Contains some additional example Steps. They use fake values and are commented out with a "#" so they won't run. - -These tests are made to work with the ALKiln testing framework, an automated testing framework made under the Document Assembly Line Project. - -Want to disable the tests? Want to learn more? See ALKiln's docs: https://suffolklitlab.github.io/docassemble-AssemblyLine-documentation/docs/automated_integrated_testing - -@housingcodeinterview -Scenario: housing_code_interview.yml runs - Given I start the interview at "housing_code_interview.yml" - #And the maximum seconds for each Step in this Scenario is 50 - #And I get to the question id "downloads" with this data: - # | var | value | trigger | - # | users[0].name.first | Uli | users[0].name.first | - # | users[0].name.last | User1 | users[0].name.first | \ No newline at end of file diff --git a/docassemble/HousingCodeChecklist/data/sources/maximalist_path.feature b/docassemble/HousingCodeChecklist/data/sources/maximalist_path.feature new file mode 100644 index 0000000..be87f6e --- /dev/null +++ b/docassemble/HousingCodeChecklist/data/sources/maximalist_path.feature @@ -0,0 +1,1223 @@ +Feature: Generated docassemble test + +Scenario: Maximalist Path generated from session + Given I start the interview at "housing_code_interview.yml" + And I tap the "text=Get help in court" element and go to the next page + And the user gets to "download_conditions_checklist_docs" with this data: + | var | value | + | redis_panel_emails_key | docassemble-GithubFeedbackForm:panel_emails | + | initial_action_selection | help_in_court | + | initial_action_display_cards | True | + | acknowledged_information_use['I accept the Terms of Use.'] | True | + | intro_and_terms_of_use_in_court | True | + | person_answering | attorney | + | representation_type | entering_appearance | + | users.target_number | 1 | + | users[0].name.first | Rerum laboriosam am | + | users[0].name.middle | Atque quis soluta ve | + | users[0].name.last | Tenetur ipsum aliqui | + | users[0].name.suffix | Sr. | + | users[0].address.location.known | True | + | users[0].address.location.description | 197 Friend Street [NEWLINE] Boston, MA 02114 | + | users[0].address.address | 197 Friend Street | + | users[0].address.unit | | + | users[0].address.city | Boston | + | users[0].address.state | MA | + | users[0].address.zip | 02114 | + | users[0].address.one_line | 197 Friend St, Boston, MA 02114, USA | + | users[0].address.street_number | 197 | + | users[0].address.street | Friend St | + | users[0].address.neighborhood | Bulfinch Triangle Historic District | + | users[0].address.locality | Boston | + | users[0].address.political | Boston | + | users[0].address.county | Suffolk County | + | users[0].address.administrative_area_level_1 | Massachusetts | + | users[0].address.country | US | + | users[0].address.postal_code | 02114 | + | users[0].address.postal_code_suffix | 2004 | + | users[0].address.zip4 | 02114-2004 | + | users[0].location.known | False | + | users[0].previous_addresses.target_number | 0 | + | users[0].other_addresses.target_number | 0 | + | users[0].mailing_address | users[0].address | + | users[0].mailing_address.location | users[0].address.location | + | users[0].mailing_address.location.known | True | + | users[0].mailing_address.location.description | 197 Friend Street [NEWLINE] Boston, MA 02114 | + | users[0].mailing_address.address | 197 Friend Street | + | users[0].mailing_address.unit | | + | users[0].mailing_address.city | Boston | + | users[0].mailing_address.state | MA | + | users[0].mailing_address.zip | 02114 | + | users[0].mailing_address.one_line | 197 Friend St, Boston, MA 02114, USA | + | users[0].mailing_address.street_number | 197 | + | users[0].mailing_address.street | Friend St | + | users[0].mailing_address.neighborhood | Bulfinch Triangle Historic District | + | users[0].mailing_address.locality | Boston | + | users[0].mailing_address.political | Boston | + | users[0].mailing_address.county | Suffolk County | + | users[0].mailing_address.administrative_area_level_1 | Massachusetts | + | users[0].mailing_address.country | US | + | users[0].mailing_address.postal_code | 02114 | + | users[0].mailing_address.postal_code_suffix | 2004 | + | users[0].mailing_address.zip4 | 02114-2004 | + | users[0].service_address.location.known | False | + | users[0].previous_names.target_number | 0 | + | users[0].aliases.target_number | 0 | + | users[0].has_separate_mailing_address | False | + | users[0].complete | True | + | users[0].attorney.name.first | Quinten | + | users[0].attorney.name.last | Steenhuis | + | users[0].attorney.name.suffix | Esq. | + | users[0].attorney.address.location.known | False | + | users[0].attorney.address.address | Cupiditate alias exp | + | users[0].attorney.address.unit | Ex ipsam nemo praese | + | users[0].attorney.address.city | Ut id inventore arch | + | users[0].attorney.address.state | MA | + | users[0].attorney.address.zip | 13185 | + | users[0].attorney.location.known | False | + | users[0].attorney.previous_addresses.target_number | 0 | + | users[0].attorney.other_addresses.target_number | 0 | + | users[0].attorney.mailing_address.location.known | False | + | users[0].attorney.service_address.location.known | False | + | users[0].attorney.previous_names.target_number | 0 | + | users[0].attorney.aliases.target_number | 0 | + | users[0].attorney.target_number | 1 | + | users[0].attorney.organization | Petersen Morgan Inc | + | users[0].attorney.middle | | + | users[0].attorney.bbo_number | 149 | + | users[0].attorney.phone_number | +1 (617) 303-9933 | + | users[0].attorney.email | wycojap@mailinator.com | + | users[0].attorney.signature.str | | + | users[0].mobile_number | | + | users[0].phone_number | +1 (267) 648-2259 | + | users[0].email | qimisys@mailinator.com | + | users[0].no_contact_method | False | + | users.revisit | True | + | kind_of_lawsuit['get_emergency_repairs'] | True | + | kind_of_lawsuit['past_repair_needs'] | True | + | kind_of_lawsuit['illegal_lockout'] | True | + | kind_of_lawsuit['entered_without_permission'] | True | + | kind_of_lawsuit['insufficient_notice'] | True | + | kind_of_lawsuit['utilities_no_agreement'] | True | + | kind_of_lawsuit['utility_shutoff'] | True | + | kind_of_lawsuit['other_landlord_tenant'] | True | + | kind_of_lawsuit['file_contempt_complaint'] | True | + | review_conditions | True | + | intro_terms_of_use | True | + | document_choice['get_report'] | True | + | document_choice['tell_landlord'] | False | + | document_choice['organize_tenants'] | False | + | document_choice['get_inspection'] | False | + | document_choice['demand_letter_93a'] | False | + | document_choice['sue_landlord'] | True | + | document_choice['contempt_complaint'] | False | + | document_choice['discovery'] | True | + | document_choice['fee_waiver'] | True | + | initial_screen_tenant_facing_eviction | no case | + | tenant_sent_ll_notice | True | + | tenant_called_inspector | True | + | screen_contacted_housing_inspector | True | + | set_document_choice_by_lawsuit_kind | True | + | bad_conditions[i].details[j].condition_existed_at_start | True | + | bad_conditions[i].details[j].condition_ended | False | + | bad_conditions[i].details[j].description | | + | bad_conditions[i].details[j].has_file_to_upload | False | + | bad_conditions[i].details[j].picture | dummy_photo1.jpg | + | bad_conditions[i].details[j].start_year | 2017 | + | bad_conditions[i].details[j].start_month | 9 | + | bad_conditions[i].details[j].start_day | 12 | + | bad_conditions[i].details[j].end_date | 09/17/2021 | + | bad_conditions[i].details[j].start_date | 09/12/2017 | + | bad_conditions[i].details[j].approximate_month | False | + | bad_conditions[i].details[j].approximate_day | False | + | bad_conditions['common problems'].details['there_are_any'] | True | + | bad_conditions['common problems'].claims['heat_not_working'] | True | + | bad_conditions['common problems'].claims['no_hot_water'] | True | + | bad_conditions['common problems'].claims['locks_missing_unit'] | True | + | bad_conditions['common problems'].claims['outside_windows_not_lockable'] | True | + | bad_conditions['common problems'].claims['mouse_rats'] | True | + | bad_conditions['common problems'].claims['roach_insects'] | True | + | bad_conditions['common problems'].claims['bedbug_insects'] | True | + | bad_conditions['common problems'].claims['other_insects'] | True | + | bad_conditions['common problems'].claims['electric_general_maintenance'] | True | + | bad_conditions['common problems'].claims['lead_paint_child'] | True | + | bad_conditions['common problems'].claims['window_structural'] | True | + | bad_conditions['common problems'].claims['ceiling_living_room'] | True | + | bad_conditions['common problems'].claims['floor_living_room'] | True | + | bad_conditions['common problems'].df | {\"Deadline\":{\"outside_windows_not_lockable\":\"24 hours\",\"electric_general_maintenance\":\"30 days\",\"other_insects\":\"24 hours\",\"bedbug_insects\":\"24 hours\",\"lead_paint_child\":\"24 hours\",\"floor_living_room\":\"24 hours\",\"heat_not_working\":\"24 hours\",\"ceiling_living_room\":\"24 hours\",\"roach_insects\":\"24 hours\",\"locks_missing_unit\":\"24 hours\",\"mouse_rats\":\"24 hours\",\"window_structural\":\"24 hours\",\"no_hot_water\":\"24 hours\"},\"Category\":{\"outside_windows_not_lockable\":\"Safety\",\"electric_general_maintenance\":\"General Maintenance\",\"other_insects\":\"Rodents and insects\",\"bedbug_insects\":\"Rodents and insects\",\"lead_paint_child\":\"Lead paint\",\"floor_living_room\":\"Living area\",\"heat_not_working\":\"Heat\",\"ceiling_living_room\":\"Living area\",\"roach_insects\":\"Rodents and insects\",\"locks_missing_unit\":\"Safety\",\"mouse_rats\":\"Rodents and insects\",\"window_structural\":\"Building Structure\",\"no_hot_water\":\"Water\"},\"Letter description\":{\"outside_windows_not_lockable\":null,\"electric_general_maintenance\":null,\"other_insects\":null,\"bedbug_insects\":null,\"lead_paint_child\":null,\"floor_living_room\":null,\"heat_not_working\":null,\"ceiling_living_room\":null,\"roach_insects\":null,\"locks_missing_unit\":null,\"mouse_rats\":null,\"window_structural\":null,\"no_hot_water\":null},\"Interview description\":{\"outside_windows_not_lockable\":\"Common area windows or doors do not lock.\",\"electric_general_maintenance\":\"Problem with electric fixtures or wiring.\",\"other_insects\":\"Flies, ants, or other insects infestation.\",\"bedbug_insects\":\"Bedbugs\",\"lead_paint_child\":\"Lead paint on surfaces that a child under the age of 6 can reach.\",\"floor_living_room\":\"Floor has holes or cracks so weather, moisture, or pests can get in.\",\"heat_not_working\":\"No heat or not enough heat between September 15 and May 31.\",\"ceiling_living_room\":\"Living room ceiling has holes or cracks so weather, moisture, or pests can get in.\",\"roach_insects\":\"Cockroaches\",\"locks_missing_unit\":\"Locks for the apartment are missing or not secure.\",\"mouse_rats\":\"Mice or rats\",\"window_structural\":\"Windows leak.\",\"no_hot_water\":\"Not enough hot or cold water for more than 24 hours.\"},\"Description_ES\":{\"outside_windows_not_lockable\":\"Las ventanas o puertas de las \\u00e1reas comunes no cierran con llave.\",\"electric_general_maintenance\":\"Problema con elementos o cableado el\\u00e9ctricos.\",\"other_insects\":\"Infestaci\\u00f3n de moscas, hormigas u otros insectos.\",\"bedbug_insects\":\"Chinches\",\"lead_paint_child\":\"Pintura con plomo en superficies que un ni\\u00f1o menor de 6 a\\u00f1os pueda alcanzar.\",\"floor_living_room\":\"El piso tiene agujeros o grietas, as\\u00ed que pueden entrar agua, humedad o plagas.\",\"heat_not_working\":\"No hay calefacci\\u00f3n o hay calefacci\\u00f3n insuficiente entre el 15 de septiembre y el 31 de mayo.\",\"ceiling_living_room\":\"El techo de la sala de estar tiene agujeros o grietas, as\\u00ed que pueden entrar agua, humedad o plagas.\",\"roach_insects\":\"Cucarachas\",\"locks_missing_unit\":\"Faltan cerraduras en el apartamento o no son seguras.\",\"mouse_rats\":\"Ratones o ratas\",\"window_structural\":\"Las ventanas tienen filtraciones de agua.\",\"no_hot_water\":\"No hay suficiente agua fr\\u00eda o caliente durante m\\u00e1s de 24 horas.\"},\"Help\":{\"outside_windows_not_lockable\":\"The landlord must make sure that all exterior windows that open and all entry doors have working locks.\",\"electric_general_maintenance\":\"The landlord must install correctly and keep free of leaks, blocks, and other defects all electrical fixtures, outlets, and wiring.\",\"other_insects\":\"No insects are allowed in the apartment or building. The landlord must exterminate them when they are found in common areas or in any individual apartment in buildings with two or more units.\",\"bedbug_insects\":\"No bedbugs or other insects are allowed in the apartment or building. The landlord must exterminate them when they are found in common areas or in any individual apartment in buildings with two or more units.\",\"lead_paint_child\":\"If you have a child under the age of 6, your landlord must\\nremove or properly cover lead paint up to 5 feet from the\\nfloor. Repainting with a non-lead paint is not good enough. \",\"floor_living_room\":\"Floor must be weathertight, free from excess moisture, insect-proof, or rodent-proof. It cannot have holes, cracks, loose plaster, or other defects.\",\"heat_not_working\":\"From September 15 to May 31, the landlord must provide equipment and appliances to heat every habitable room and bathroom to at least: 68 degrees Fahrenheit between 7 a.m. and 11 p.m. and 64 degrees between 11 p.m. and 7 a.m.\",\"ceiling_living_room\":\"Ceiling must be weathertight, free from excess moisture, insect-proof, or rodent-proof. It cannot have holes, cracks, loose plaster and other defects.\",\"roach_insects\":\"No roaches or other insects are allowed in the apartment or building. The landlord must exterminate them when they are found in common areas or in any individual apartment in buildings with two or more units.\",\"locks_missing_unit\":\"Entry doors for the apartment have no locks or inadequate locks.\",\"mouse_rats\":\"No rats or mice are allowed in the apartment or building. The landlord must exterminate them when they are found in common areas or in any individual apartment in buildings with two or more units.\",\"window_structural\":\"Windows must have good weather stripping or storm window or storm door. All glass panes must be unbroken and caulked correctly.\",\"no_hot_water\":\"No or not enough hot or cold water (including amount, pressure, and temperature) for 24 hours or longer.\"},\"Help_ES\":{\"outside_windows_not_lockable\":\"El arrendador debe asegurarse de que todas las ventanas exteriores que se abren y todas las puertas de entrada tengan cerraduras que funcionen.\",\"electric_general_maintenance\":\"El arrendador debe instalar correctamente y mantener libres de fugas, obstrucciones y otros defectos todos los accesorios, enchufes y cableado el\\u00e9ctricos.\",\"other_insects\":\"No debe haber insectos en el apartamento o edificio. El arrendador debe exterminarlos cuando se encuentren en \\u00e1reas comunes o en cualquier apartamento individual en edificios de dos o m\\u00e1s unidades.\",\"bedbug_insects\":\"No debe haber chinches u otros insectos en el apartamento o edificio. El arrendador debe exterminarlos cuando se encuentren en \\u00e1reas comunes o en cualquier apartamento individual en edificios de dos o m\\u00e1s unidades.\",\"lead_paint_child\":\"Si tiene un ni\\u00f1o menor de 6 a\\u00f1os, su arrendador debe\\nretirar o cubrir adecuadamente la pintura con plomo hasta 5 pies de distancia del\\npiso. Repintar con pintura sin plomo no es suficiente. \",\"floor_living_room\":\"El piso debe ser impermeable, estar libre de exceso de humedad, y ser a prueba de insectos o roedores. No debe tener agujeros, grietas, yeso suelto u otros defectos.\",\"heat_not_working\":\"Del 15 de septiembre al 31 de mayo, el arrendador debe proporcionar equipos y electrodom\\u00e9sticos para calentar cada habitaci\\u00f3n habitable y ba\\u00f1o a al menos: 68\\u00a0\\u00b0F entre las 7\\u00a0a.m. y las 11\\u00a0p.m., y 64\\u00a0\\u00b0F entre las 11\\u00a0p.m. y las 7\\u00a0a.m.\",\"ceiling_living_room\":\"El techo debe ser impermeable, estar libre de exceso de humedad, y ser a prueba de insectos o roedores. No debe tener agujeros, grietas, yeso suelto u otros defectos.\",\"roach_insects\":\"No debe haber cucarachas u otros insectos en el apartamento o edificio. El arrendador debe exterminarlos cuando se encuentren en \\u00e1reas comunes o en cualquier apartamento individual en edificios de dos o m\\u00e1s unidades.\",\"locks_missing_unit\":\"Las puertas de entrada al apartamento no tienen cerraduras o tienen cerraduras inadecuadas.\",\"mouse_rats\":\"No debe haber ratas ni ratones en el apartamento ni en el edificio. El arrendador debe exterminarlos cuando se encuentren en \\u00e1reas comunes o en cualquier apartamento individual en edificios de dos o m\\u00e1s unidades.\",\"window_structural\":\"Las ventanas deben tener buenos burletes o una ventana o puerta contra tormentas. Todos los paneles de vidrio deben estar intactos y sellados correctamente.\",\"no_hot_water\":\"No hay suficiente agua caliente o fr\\u00eda (incluida cantidad, presi\\u00f3n y temperatura) durante 24 horas o m\\u00e1s.\"},\"Sanitary Code Section\":{\"outside_windows_not_lockable\":\"105 C.M.R. 410.270\",\"electric_general_maintenance\":\"105 C.M.R. 410.320\",\"other_insects\":\"105 C.M.R. 410.550\",\"bedbug_insects\":\"105 C.M.R. 410.550\",\"lead_paint_child\":\"105 C.M.R. 410.470, G.L. c. 111, \\u00a7 190-199\",\"floor_living_room\":\"105 C.M.R. 410.500\",\"heat_not_working\":\"105 C.M.R. 410.160, 180\",\"ceiling_living_room\":\"105 C.M.R. 410.500\",\"roach_insects\":\"105 C.M.R. 410.550\",\"locks_missing_unit\":\"105 C.M.R. 410.270\",\"mouse_rats\":\"105 C.M.R. 410.550\",\"window_structural\":\"105 C.M.R. 410.500(B), 530\",\"no_hot_water\":\"105 C.M.R. 410.130, 140, 235, 630\"}} | + | bad_conditions.there_are_any | True | + | dataloader.filename | housing_code_checklist.xlsx | + | simple_conditions_list[0] | heat_not_working | + | simple_conditions_list[1] | no_hot_water | + | simple_conditions_list[2] | locks_missing_unit | + | simple_conditions_list[3] | outside_windows_not_lockable | + | simple_conditions_list[4] | mouse_rats | + | simple_conditions_list[5] | roach_insects | + | simple_conditions_list[6] | bedbug_insects | + | simple_conditions_list[7] | other_insects | + | simple_conditions_list[8] | electric_general_maintenance | + | simple_conditions_list[9] | lead_paint_child | + | simple_conditions_list[10] | window_structural | + | simple_conditions_list[11] | ceiling_living_room | + | simple_conditions_list[12] | floor_living_room | + | kind_of_lawsuit_text['utilities_no_agreement']['question'] | The tenant's landlord made the tenant pay for utilities, but they did not have a written agreement\n | + | kind_of_lawsuit_text['utilities_no_agreement']['document'] | The tenant's landlord made the tenant pay for utilities, but they did not have a written agreement\n | + | kind_of_lawsuit_text['utilities_no_agreement'].kwargs['question'] | The tenant's landlord made the tenant pay for utilities, but they did not have a written agreement\n | + | kind_of_lawsuit_text['utilities_no_agreement'].kwargs['document'] | The tenant's landlord made the tenant pay for utilities, but they did not have a written agreement\n | + | kind_of_lawsuit_text['illegal_lockout']['question'] | The tenant's landlord changed their locks, moved their things or threatened to do so\n | + | kind_of_lawsuit_text['illegal_lockout']['document'] | The tenant's landlord changed their locks, moved their things or threatened to do so\n | + | kind_of_lawsuit_text['illegal_lockout'].kwargs['question'] | The tenant's landlord changed their locks, moved their things or threatened to do so\n | + | kind_of_lawsuit_text['illegal_lockout'].kwargs['document'] | The tenant's landlord changed their locks, moved their things or threatened to do so\n | + | kind_of_lawsuit_text['entered_without_permission']['question'] | The tenant's landlord went into the tenant's home without permission\n | + | kind_of_lawsuit_text['entered_without_permission']['document'] | The tenant's landlord went into the tenant's home without permission\n | + | kind_of_lawsuit_text['entered_without_permission'].kwargs['question'] | The tenant's landlord went into the tenant's home without permission\n | + | kind_of_lawsuit_text['entered_without_permission'].kwargs['document'] | The tenant's landlord went into the tenant's home without permission\n | + | kind_of_lawsuit_text['insufficient_notice']['question'] | The tenant's landlord went into the tenant's home without giving them enough notice\n | + | kind_of_lawsuit_text['insufficient_notice']['document'] | The tenant's landlord went into the tenant's home without giving them enough notice\n | + | kind_of_lawsuit_text['insufficient_notice'].kwargs['question'] | The tenant's landlord went into the tenant's home without giving them enough notice\n | + | kind_of_lawsuit_text['insufficient_notice'].kwargs['document'] | The tenant's landlord went into the tenant's home without giving them enough notice\n | + | kind_of_lawsuit_text['utility_shutoff']['question'] | The tenant's utilities were shutoff\n | + | kind_of_lawsuit_text['utility_shutoff']['document'] | The tenant's utilities were shutoff\n | + | kind_of_lawsuit_text['utility_shutoff'].kwargs['question'] | The tenant's utilities were shutoff\n | + | kind_of_lawsuit_text['utility_shutoff'].kwargs['document'] | The tenant's utilities were shutoff\n | + | kind_of_lawsuit_text['file_contempt_complaint']['question'] | The landlord is ignoring a court order\n | + | kind_of_lawsuit_text['file_contempt_complaint']['document'] | The landlord is ignoring a court order\n | + | kind_of_lawsuit_text['file_contempt_complaint'].kwargs['question'] | The landlord is ignoring a court order\n | + | kind_of_lawsuit_text['file_contempt_complaint'].kwargs['document'] | The landlord is ignoring a court order\n | + | claim | other | + | wants_detailed_conditions | False | + | user_language | en | + | stuff_to_snapshot['start_time'] | 2026-06-10 | + | stuff_to_snapshot['address_city'] | Boston | + | stuff_to_snapshot['zip'] | 02114 | + | stuff_to_snapshot['language'] | en | + | stuff_to_snapshot['document_choice'] | discovery, fee_waiver, get_report, sue_landlord | + | stuff_to_snapshot['reached_document_choice_screen'] | True | + | stuff_to_snapshot['bad_conditions'] | | + | stuff_to_snapshot['reached_download_screen'] | True | + | screen_ll_knows_problem | True | + | explain_documents | True | + | user | users[0] | + | user.name | users[0].name | + | user.name.first | Rerum laboriosam am | + | user.name.middle | Atque quis soluta ve | + | user.name.last | Tenetur ipsum aliqui | + | user.name.suffix | Sr. | + | user.address | users[0].address | + | user.address.location | users[0].address.location | + | user.address.location.known | True | + | user.address.location.description | 197 Friend Street [NEWLINE] Boston, MA 02114 | + | user.address.address | 197 Friend Street | + | user.address.unit | | + | user.address.city | Boston | + | user.address.state | MA | + | user.address.zip | 02114 | + | user.address.one_line | 197 Friend St, Boston, MA 02114, USA | + | user.address.street_number | 197 | + | user.address.street | Friend St | + | user.address.neighborhood | Bulfinch Triangle Historic District | + | user.address.locality | Boston | + | user.address.political | Boston | + | user.address.county | Suffolk County | + | user.address.administrative_area_level_1 | Massachusetts | + | user.address.country | US | + | user.address.postal_code | 02114 | + | user.address.postal_code_suffix | 2004 | + | user.address.zip4 | 02114-2004 | + | user.location | users[0].location | + | user.location.known | False | + | user.previous_addresses | users[0].previous_addresses | + | user.previous_addresses.target_number | 0 | + | user.other_addresses | users[0].other_addresses | + | user.other_addresses.target_number | 0 | + | user.mailing_address | users[0].address | + | user.mailing_address.location | users[0].address.location | + | user.mailing_address.location.known | True | + | user.mailing_address.location.description | 197 Friend Street [NEWLINE] Boston, MA 02114 | + | user.mailing_address.address | 197 Friend Street | + | user.mailing_address.unit | | + | user.mailing_address.city | Boston | + | user.mailing_address.state | MA | + | user.mailing_address.zip | 02114 | + | user.mailing_address.one_line | 197 Friend St, Boston, MA 02114, USA | + | user.mailing_address.street_number | 197 | + | user.mailing_address.street | Friend St | + | user.mailing_address.neighborhood | Bulfinch Triangle Historic District | + | user.mailing_address.locality | Boston | + | user.mailing_address.political | Boston | + | user.mailing_address.county | Suffolk County | + | user.mailing_address.administrative_area_level_1 | Massachusetts | + | user.mailing_address.country | US | + | user.mailing_address.postal_code | 02114 | + | user.mailing_address.postal_code_suffix | 2004 | + | user.mailing_address.zip4 | 02114-2004 | + | user.service_address | users[0].service_address | + | user.service_address.location | users[0].service_address.location | + | user.service_address.location.known | False | + | user.previous_names | users[0].previous_names | + | user.previous_names.target_number | 0 | + | user.aliases | users[0].aliases | + | user.aliases.target_number | 0 | + | user.preferred_name | users[0].preferred_name | + | user.has_separate_mailing_address | False | + | user.complete | True | + | user.attorney | users[0].attorney | + | user.attorney.name | users[0].attorney.name | + | user.attorney.name.first | Quinten | + | user.attorney.name.last | Steenhuis | + | user.attorney.name.suffix | Esq. | + | user.attorney.address | users[0].attorney.address | + | user.attorney.address.location | users[0].attorney.address.location | + | user.attorney.address.location.known | False | + | user.attorney.address.address | Cupiditate alias exp | + | user.attorney.address.unit | Ex ipsam nemo praese | + | user.attorney.address.city | Ut id inventore arch | + | user.attorney.address.state | MA | + | user.attorney.address.zip | 13185 | + | user.attorney.location | users[0].attorney.location | + | user.attorney.location.known | False | + | user.attorney.previous_addresses | users[0].attorney.previous_addresses | + | user.attorney.previous_addresses.target_number | 0 | + | user.attorney.other_addresses | users[0].attorney.other_addresses | + | user.attorney.other_addresses.target_number | 0 | + | user.attorney.mailing_address | users[0].attorney.mailing_address | + | user.attorney.mailing_address.location | users[0].attorney.mailing_address.location | + | user.attorney.mailing_address.location.known | False | + | user.attorney.service_address | users[0].attorney.service_address | + | user.attorney.service_address.location | users[0].attorney.service_address.location | + | user.attorney.service_address.location.known | False | + | user.attorney.previous_names | users[0].attorney.previous_names | + | user.attorney.previous_names.target_number | 0 | + | user.attorney.aliases | users[0].attorney.aliases | + | user.attorney.aliases.target_number | 0 | + | user.attorney.preferred_name | users[0].attorney.preferred_name | + | user.attorney.target_number | 1 | + | user.attorney.organization | Petersen Morgan Inc | + | user.attorney.middle | | + | user.attorney.bbo_number | 149 | + | user.attorney.phone_number | +1 (617) 303-9933 | + | user.attorney.email | wycojap@mailinator.com | + | user.attorney.signature.str | | + | user.mobile_number | | + | user.phone_number | +1 (267) 648-2259 | + | user.email | qimisys@mailinator.com | + | user.no_contact_method | False | + | other_parties.target_number | 1 | + | other_parties[0].name.first | Darrel Waller | + | other_parties[0].address.location.known | False | + | other_parties[0].address.address | 99 High Street | + | other_parties[0].address.unit | | + | other_parties[0].address.city | Boston | + | other_parties[0].address.state | MA | + | other_parties[0].address.zip | 02110 | + | other_parties[0].location.known | False | + | other_parties[0].previous_addresses.target_number | 0 | + | other_parties[0].other_addresses.target_number | 0 | + | other_parties[0].mailing_address.location.known | False | + | other_parties[0].service_address.location.known | False | + | other_parties[0].previous_names.target_number | 0 | + | other_parties[0].aliases.target_number | 0 | + | other_parties[0].person_type | business | + | other_parties[0].phone_number | +1 (857) 281-1269 | + | other_parties[0].email | suqinerino@mailinator.com | + | other_parties[0].complete | True | + | other_parties.revisit | True | + | landlord_name_is_optional | False | + | ll_name_unknown | False | + | user_ask_role | plaintiff | + | addresses_to_search[0] | users[0].address | + | addresses_to_search[0].location | users[0].address.location | + | addresses_to_search[0].location.known | True | + | addresses_to_search[0].location.description | 197 Friend Street [NEWLINE] Boston, MA 02114 | + | addresses_to_search[0].address | 197 Friend Street | + | addresses_to_search[0].unit | | + | addresses_to_search[0].city | Boston | + | addresses_to_search[0].state | MA | + | addresses_to_search[0].zip | 02114 | + | addresses_to_search[0].one_line | 197 Friend St, Boston, MA 02114, USA | + | addresses_to_search[0].street_number | 197 | + | addresses_to_search[0].street | Friend St | + | addresses_to_search[0].neighborhood | Bulfinch Triangle Historic District | + | addresses_to_search[0].locality | Boston | + | addresses_to_search[0].political | Boston | + | addresses_to_search[0].county | Suffolk County | + | addresses_to_search[0].administrative_area_level_1 | Massachusetts | + | addresses_to_search[0].country | US | + | addresses_to_search[0].postal_code | 02114 | + | addresses_to_search[0].postal_code_suffix | 2004 | + | addresses_to_search[0].zip4 | 02114-2004 | + | all_matches[0] | all_courts[22] | + | all_matches[0].address | all_courts[22].address | + | all_matches[0].address.location | all_courts[22].address.location | + | all_matches[0].address.location.known | False | + | all_matches[0].address.address | 24 New Chardon Street | + | all_matches[0].address.city | Edward W. Brooke Courthouse, Boston | + | all_matches[0].address.state | MA | + | all_matches[0].address.zip | 02114 | + | all_matches[0].address.county | Suffolk County | + | all_matches[0].location | all_courts[22].location | + | all_matches[0].location.known | False | + | all_matches[0].tyler_code | 1245 | + | all_matches[0].tyler_lower_court_code | 1754 | + | all_matches[0].tyler_prod_lower_court_code | 6983 | + | all_matches[0].name | Central Division, Boston Municipal Court | + | all_matches[0].phone | (617) 788-8600 | + | all_matches[0].description | This court serves the Downtown Boston area, Chinatown, North End, South End through Massachusetts Avenue, West End, and Beacon Hill. | + | all_matches[0].ada_coordinators[0]['name'] | Denise Donovan | + | all_matches[0].ada_coordinators[0]['phone'] | 617-788-8668 | + | all_matches[0].ada_coordinators[0]['email'] | denise.donovan@jud.state.ma.us | + | all_matches[0].ada_coordinators[1]['name'] | Marcella Gerardi | + | all_matches[0].ada_coordinators[1]['phone'] | 617-788-8772 | + | all_matches[0].ada_coordinators[1]['email'] | marcella.gerardi@jud.state.ma.us | + | all_matches[1] | all_courts[44] | + | all_matches[1].address | all_courts[44].address | + | all_matches[1].address.location | all_courts[44].address.location | + | all_matches[1].address.location.known | False | + | all_matches[1].address.address | 24 New Chardon St. | + | all_matches[1].address.city | Boston | + | all_matches[1].address.state | MA | + | all_matches[1].address.zip | 02114 | + | all_matches[1].address.county | Suffolk County | + | all_matches[1].location | all_courts[44].location | + | all_matches[1].location.known | False | + | all_matches[1].tyler_code | 537 | + | all_matches[1].tyler_lower_court_code | 1827 | + | all_matches[1].tyler_prod_lower_court_code | 7056 | + | all_matches[1].name | Eastern Housing Court | + | all_matches[1].phone | (617) 788-8485 | + | all_matches[1].description | The Eastern Division of the Housing Court serves Boston, Brookline and Newton. | + | all_matches[1].ada_coordinators[0]['name'] | Natasha Woodley | + | all_matches[1].ada_coordinators[0]['phone'] | (617) 788-6523 | + | all_matches[1].ada_coordinators[0]['email'] | Natasha.woodley@jud.state.ma.us | + | all_matches[2] | all_courts[154] | + | all_matches[2].address | all_courts[154].address | + | all_matches[2].address.location | all_courts[154].address.location | + | all_matches[2].address.location.known | False | + | all_matches[2].address.address | 3 Pemberton Square | + | all_matches[2].address.city | Boston | + | all_matches[2].address.state | MA | + | all_matches[2].address.zip | 02108 | + | all_matches[2].address.county | Suffolk County | + | all_matches[2].location | all_courts[154].location | + | all_matches[2].location.known | False | + | all_matches[2].tyler_code | None | + | all_matches[2].tyler_lower_court_code | 1882 | + | all_matches[2].tyler_prod_lower_court_code | 7111 | + | all_matches[2].name | Suffolk County Superior Court | + | all_matches[2].phone | (617) 788-8175 | + | all_matches[2].description | This court serves Boston, Winthrop, Chelsea, and Revere. | + | all_matches[2].ada_coordinators[0]['name'] | Margaret Buckley | + | all_matches[2].ada_coordinators[0]['phone'] | (617) 788-8110 | + | all_matches[2].ada_coordinators[0]['email'] | margaret.buckley@jud.state.ma.us | + | all_matches[2].ada_coordinators[1]['name'] | Paul Kenneally | + | all_matches[2].ada_coordinators[1]['phone'] | (617) 788-8172 | + | all_matches[2].ada_coordinators[1]['email'] | paul.kenneally@jud.state.ma.us | + | all_matches[2].ada_coordinators[2]['name'] | Abigail Bryan | + | all_matches[2].ada_coordinators[2]['phone'] | (617) 788-7769 | + | all_matches[2].ada_coordinators[2]['email'] | abigail.bryan@jud.state.ma.us | + | trial_court | all_courts[44] | + | trial_court.address | all_courts[44].address | + | trial_court.address.location | all_courts[44].address.location | + | trial_court.address.location.known | False | + | trial_court.address.address | 24 New Chardon St. | + | trial_court.address.city | Boston | + | trial_court.address.state | MA | + | trial_court.address.zip | 02114 | + | trial_court.address.county | Suffolk County | + | trial_court.location | all_courts[44].location | + | trial_court.location.known | False | + | trial_court.tyler_code | 537 | + | trial_court.tyler_lower_court_code | 1827 | + | trial_court.tyler_prod_lower_court_code | 7056 | + | trial_court.name | Eastern Housing Court | + | trial_court.phone | (617) 788-8485 | + | trial_court.description | The Eastern Division of the Housing Court serves Boston, Brookline and Newton. | + | trial_court.ada_coordinators[0]['name'] | Natasha Woodley | + | trial_court.ada_coordinators[0]['phone'] | (617) 788-6523 | + | trial_court.ada_coordinators[0]['email'] | Natasha.woodley@jud.state.ma.us | + | verified_complaint_tro_fee | 90 | + | verified_complaint_entry_of_action_Fee | 135 | + | File_a_Verified_Complaint_Form | True | + | complaint_ask_for_damages | True | + | landlord_is_housing_authority | False | + | landlord_is_government | False | + | landlord_lives_in_building | False | + | is_landlord_subject_to_93a | True | + | demand_letter_sent | False | + | confirm_ask_for_damages | keep_on_suing | + | update_ask_for_damages | True | + | verified_complaint_claims[i].has_claim | True | + | verified_complaint_claims[i].details | Cupidatat aut tempor | + | verified_complaint_claims[i].date | 1974 | + | verified_complaint_claims['complete_element'][0] | has_claim | + | verified_complaint_claims['complete_element'][1] | date | + | verified_complaint_claims['there_are_any'] | True | + | verified_complaint_claims_terms['illegal lockout']['question'] | The tenant's landlord illegally locked the tenant out of the apartment or moved their belongings out, or threatened to do so\n | + | verified_complaint_claims_terms['illegal lockout']['document'] | locked me out of my home or removed my belongings without lawful authority\n | + | verified_complaint_claims_terms['illegal lockout']['direct'] | locked the tenant out of their home or removed their belongings without lawful authority\n | + | verified_complaint_claims_terms['entered without permission']['question'] | Went into the tenant's home without permission\n | + | verified_complaint_claims_terms['entered without permission']['document'] | entered my home without permission\n | + | verified_complaint_claims_terms['entered without permission']['direct'] | entered the tenant's home without permission\n | + | verified_complaint_claims_terms['utility shutoff']['question'] | Turned off the gas, electricity or oil service or did not turn it back on | + | verified_complaint_claims_terms['utility shutoff']['document'] | turned off or failed to restore a utility service | + | verified_complaint_claims_terms['utility shutoff']['direct'] | turned off or failed to restore a utility service | + | verified_complaint_claims_terms['utility no agreement']['question'] | Made the tenant pay for utilities without a written agreement\n | + | verified_complaint_claims_terms['utility no agreement']['document'] | required me to pay for utilities without a written agreement\n | + | verified_complaint_claims_terms['utility no agreement']['direct'] | required the tenant to pay for utilities without a written agreement\n | + | verified_complaint_claims_terms['insufficient notice']['question'] | Made repairs without giving the tenant reasonable warning of the time and day they would come\n | + | verified_complaint_claims_terms['insufficient notice']['document'] | did not give me reasonable notice to make repairs\n | + | verified_complaint_claims_terms['insufficient notice']['direct'] | did not give the tenant reasonable notice to make repairs\n | + | verified_complaint_claims_terms['other']['question'] | other | + | verified_complaint_claims_terms['other']['document'] | other | + | verified_complaint_claims_terms['other']['direct'] | other | + | verified_complaint_claims['illegal lockout'].details | Cupidatat aut tempor | + | verified_complaint_claims['illegal lockout'].date | 01/01/2023 | + | verified_complaint_claims['entered without permission'].details | Cupidatat aut tempor | + | verified_complaint_claims['entered without permission'].date | 01/01/2023 | + | verified_complaint_claims['utility shutoff'].details | Cupidatat aut tempor | + | verified_complaint_claims['utility shutoff'].date | 01/01/2023 | + | verified_complaint_claims['utility no agreement'].details | Cupidatat aut tempor | + | verified_complaint_claims['utility no agreement'].date | 01/01/2023 | + | verified_complaint_claims['insufficient notice'].details | Cupidatat aut tempor | + | verified_complaint_claims['insufficient notice'].date | 01/01/2023 | + | verified_complaint_claims['other'].details | Cupidatat aut tempor | + | verified_complaint_claims['other'].date | 01/01/2023 | + | complaint_utility_shutoff['gas'] | True | + | complaint_utility_shutoff['fuel oil'] | False | + | complaint_utility_shutoff['electricity'] | False | + | complaint_utility_not_paid['gas'] | False | + | complaint_utility_not_paid['fuel oil'] | True | + | complaint_utility_not_paid['electricity'] | False | + | verified_complaint_nota | False | + | tenant_gets_rent_subsidy | True | + | tenant_rent_share | 677.0 | + | tenant_unit_rent | 799.0 | + | tenant_subsidy_is_voucher | True | + | verified_complaint_tenant_voucher_at_risk | True | + | complaint_ask_for_tro | True | + | verified_complaint_other_emergency_basis | Deserunt incididunt | + | complaint_ask_for_relocation | True | + | complaint_raft_or_other_assistance | True | + | complaint_retaliation | True | + | wants_discovery | True | + | interrogatories['respondent_info'].checked | True | + | interrogatories['respondent_info'].soft_check | True | + | interrogatories['respondent_info'].default_check | True | + | interrogatories['respondent_info'].conditions | None | + | interrogatories['respondent_info'].priority | 800 | + | interrogatories['respondent_info'].is_custom | False | + | interrogatories['respondent_info'].name | respondent_info | + | interrogatories['respondent_info'].description | Provide the name, address, email, telephone number, occupation, and relationship to the Tenant’s apartment of the person answering these questions. | + | interrogatories['respondent_info'].category | Tenancy | + | interrogatories['apartment_ownership_details'].checked | True | + | interrogatories['apartment_ownership_details'].soft_check | True | + | interrogatories['apartment_ownership_details'].default_check | True | + | interrogatories['apartment_ownership_details'].conditions | None | + | interrogatories['apartment_ownership_details'].priority | 700 | + | interrogatories['apartment_ownership_details'].is_custom | False | + | interrogatories['apartment_ownership_details'].name | apartment_ownership_details | + | interrogatories['apartment_ownership_details'].description | List the name and address of each owner of the apartment and the date they purchased the building. | + | interrogatories['apartment_ownership_details'].category | Tenancy | + | interrogatories['tenancy_terms_description'].checked | True | + | interrogatories['tenancy_terms_description'].soft_check | True | + | interrogatories['tenancy_terms_description'].default_check | True | + | interrogatories['tenancy_terms_description'].conditions | None | + | interrogatories['tenancy_terms_description'].priority | 750 | + | interrogatories['tenancy_terms_description'].is_custom | False | + | interrogatories['tenancy_terms_description'].name | tenancy_terms_description | + | interrogatories['tenancy_terms_description'].description | Describe all terms of the tenancy, including rent amount, due dates, written/oral agreements, utility responsibilities, and changes to the terms. | + | interrogatories['tenancy_terms_description'].category | Tenancy | + | interrogatories['management_information'].checked | True | + | interrogatories['management_information'].soft_check | True | + | interrogatories['management_information'].default_check | True | + | interrogatories['management_information'].conditions | None | + | interrogatories['management_information'].priority | 650 | + | interrogatories['management_information'].is_custom | False | + | interrogatories['management_information'].name | management_information | + | interrogatories['management_information'].description | Provide details about the management of the apartment or building, including the management company or individual’s name, address, duties, and duration of management. | + | interrogatories['management_information'].category | Tenancy | + | interrogatories['record_keeping_systems'].checked | True | + | interrogatories['record_keeping_systems'].soft_check | True | + | interrogatories['record_keeping_systems'].default_check | True | + | interrogatories['record_keeping_systems'].conditions | None | + | interrogatories['record_keeping_systems'].priority | 550 | + | interrogatories['record_keeping_systems'].is_custom | False | + | interrogatories['record_keeping_systems'].name | record_keeping_systems | + | interrogatories['record_keeping_systems'].description | Describe the record-keeping system used to document repair requests, work orders, and tenancy-related issues. | + | interrogatories['record_keeping_systems'].category | Tenancy | + | interrogatories['persons_with_knowledge'].checked | True | + | interrogatories['persons_with_knowledge'].soft_check | True | + | interrogatories['persons_with_knowledge'].default_check | True | + | interrogatories['persons_with_knowledge'].conditions | None | + | interrogatories['persons_with_knowledge'].priority | 700 | + | interrogatories['persons_with_knowledge'].is_custom | False | + | interrogatories['persons_with_knowledge'].name | persons_with_knowledge | + | interrogatories['persons_with_knowledge'].description | List all individuals with knowledge of facts related to the tenant’s complaint or the landlord’s defense, including contact information and factual information they possess. | + | interrogatories['persons_with_knowledge'].category | Tenant’s Claims | + | interrogatories['trial_witnesses'].checked | True | + | interrogatories['trial_witnesses'].soft_check | True | + | interrogatories['trial_witnesses'].default_check | True | + | interrogatories['trial_witnesses'].conditions | None | + | interrogatories['trial_witnesses'].priority | 600 | + | interrogatories['trial_witnesses'].is_custom | False | + | interrogatories['trial_witnesses'].name | trial_witnesses | + | interrogatories['trial_witnesses'].description | List all individuals intended to testify at trial and/or hearing, including their contact information, anticipated testimony, and qualifications. | + | interrogatories['trial_witnesses'].category | Tenant’s Claims | + | interrogatories['subsidized_housing_facts'].checked | True | + | interrogatories['subsidized_housing_facts'].soft_check | True | + | interrogatories['subsidized_housing_facts'].default_check | False | + | interrogatories['subsidized_housing_facts'].conditions[0] | tenant_gets_rent_subsidy | + | interrogatories['subsidized_housing_facts'].conditions[1] | tenant_subsidy_is_voucher | + | interrogatories['subsidized_housing_facts'].conditions[2] | verified_complaint_tenant_voucher_at_risk | + | interrogatories['subsidized_housing_facts'].conditions[3] | landlord_is_housing_authority | + | interrogatories['subsidized_housing_facts'].conditions[4] | landlord_is_government | + | interrogatories['subsidized_housing_facts'].priority | 800 | + | interrogatories['subsidized_housing_facts'].is_custom | False | + | interrogatories['subsidized_housing_facts'].name | subsidized_housing_facts | + | interrogatories['subsidized_housing_facts'].description | Describe the Tenant’s subsidy, including the program name, administering agency, full contract rent, and the Tenant’s portion with any changes. | + | interrogatories['subsidized_housing_facts'].category | Subsidized Housing | + | interrogatories['subsidy_communications'].checked | True | + | interrogatories['subsidy_communications'].soft_check | True | + | interrogatories['subsidy_communications'].default_check | False | + | interrogatories['subsidy_communications'].conditions[0] | tenant_gets_rent_subsidy | + | interrogatories['subsidy_communications'].conditions[1] | tenant_subsidy_is_voucher | + | interrogatories['subsidy_communications'].conditions[2] | verified_complaint_tenant_voucher_at_risk | + | interrogatories['subsidy_communications'].conditions[3] | landlord_is_housing_authority | + | interrogatories['subsidy_communications'].conditions[4] | landlord_is_government | + | interrogatories['subsidy_communications'].priority | 750 | + | interrogatories['subsidy_communications'].is_custom | False | + | interrogatories['subsidy_communications'].name | subsidy_communications | + | interrogatories['subsidy_communications'].description | Describe communications between the Landlord and the housing authority, including dates, persons involved, reasons, actions taken, and subsidy payment changes. | + | interrogatories['subsidy_communications'].category | Subsidized Housing | + | interrogatories['rental_assistance_communications'].checked | True | + | interrogatories['rental_assistance_communications'].soft_check | True | + | interrogatories['rental_assistance_communications'].default_check | False | + | interrogatories['rental_assistance_communications'].conditions[0] | complaint_raft_or_other_assistance | + | interrogatories['rental_assistance_communications'].priority | 750 | + | interrogatories['rental_assistance_communications'].is_custom | False | + | interrogatories['rental_assistance_communications'].name | rental_assistance_communications | + | interrogatories['rental_assistance_communications'].description | Describe all communications with any agency regarding the Tenant’s RAFT or other rental assistance application, including dates, substance, persons involved, and whether each communication was verbal or in writing. | + | interrogatories['rental_assistance_communications'].category | Subsidized Housing | + | interrogatories['rental_assistance_refusal'].checked | True | + | interrogatories['rental_assistance_refusal'].soft_check | True | + | interrogatories['rental_assistance_refusal'].default_check | False | + | interrogatories['rental_assistance_refusal'].conditions[0] | complaint_raft_or_other_assistance | + | interrogatories['rental_assistance_refusal'].priority | 800 | + | interrogatories['rental_assistance_refusal'].is_custom | False | + | interrogatories['rental_assistance_refusal'].name | rental_assistance_refusal | + | interrogatories['rental_assistance_refusal'].description | Describe in detail the reasons for refusing or intending to refuse rental assistance from RAFT or any other subsidy program. | + | interrogatories['rental_assistance_refusal'].category | Subsidized Housing | + | interrogatories['maintenance_and_repairs'].checked | True | + | interrogatories['maintenance_and_repairs'].soft_check | True | + | interrogatories['maintenance_and_repairs'].default_check | False | + | interrogatories['maintenance_and_repairs'].conditions[0] | screen_ll_knows_problem | + | interrogatories['maintenance_and_repairs'].priority | 750 | + | interrogatories['maintenance_and_repairs'].is_custom | False | + | interrogatories['maintenance_and_repairs'].name | maintenance_and_repairs | + | interrogatories['maintenance_and_repairs'].description | Describe all maintenance and repairs conducted during the tenancy, including responsible persons, reported issues, and actions taken. | + | interrogatories['maintenance_and_repairs'].category | Problems with the Apartment/Building | + | interrogatories['repair_issue_details'].checked | True | + | interrogatories['repair_issue_details'].soft_check | True | + | interrogatories['repair_issue_details'].default_check | False | + | interrogatories['repair_issue_details'].conditions[0] | screen_ll_knows_problem | + | interrogatories['repair_issue_details'].priority | 800 | + | interrogatories['repair_issue_details'].is_custom | False | + | interrogatories['repair_issue_details'].name | repair_issue_details | + | interrogatories['repair_issue_details'].description | Describe how you became aware of each repair need or problem in the Tenant’s apartment or common areas in the past 6 years, including the problem’s nature, date, source, and steps taken in response. | + | interrogatories['repair_issue_details'].category | Problems with the Apartment/Building | + | interrogatories['inspections_details'].checked | True | + | interrogatories['inspections_details'].soft_check | True | + | interrogatories['inspections_details'].default_check | False | + | interrogatories['inspections_details'].conditions[0] | screen_ll_knows_problem | + | interrogatories['inspections_details'].conditions[1] | screen_contacted_housing_inspector | + | interrogatories['inspections_details'].priority | 700 | + | interrogatories['inspections_details'].is_custom | False | + | interrogatories['inspections_details'].name | inspections_details | + | interrogatories['inspections_details'].description | Provide details of inspections conducted by government agencies or third parties in the past 6 years, including dates, findings, and actions taken. | + | interrogatories['inspections_details'].category | Problems with the Apartment/Building | + | interrogatories['purchase_inspection_details'].checked | True | + | interrogatories['purchase_inspection_details'].soft_check | True | + | interrogatories['purchase_inspection_details'].default_check | False | + | interrogatories['purchase_inspection_details'].conditions[0] | screen_ll_knows_problem | + | interrogatories['purchase_inspection_details'].priority | 500 | + | interrogatories['purchase_inspection_details'].is_custom | False | + | interrogatories['purchase_inspection_details'].name | purchase_inspection_details | + | interrogatories['purchase_inspection_details'].description | Provide details of any inspection or evaluation conducted before, during, or after the building’s purchase, including the date, inspector’s information, findings, and actions taken in response. | + | interrogatories['purchase_inspection_details'].category | Problems with the Apartment/Building | + | interrogatories['inspection_repair_history'].checked | True | + | interrogatories['inspection_repair_history'].soft_check | True | + | interrogatories['inspection_repair_history'].default_check | False | + | interrogatories['inspection_repair_history'].conditions[0] | screen_ll_knows_problem | + | interrogatories['inspection_repair_history'].conditions[1] | screen_contacted_housing_inspector | + | interrogatories['inspection_repair_history'].priority | 800 | + | interrogatories['inspection_repair_history'].is_custom | False | + | interrogatories['inspection_repair_history'].name | inspection_repair_history | + | interrogatories['inspection_repair_history'].description | Describe inspections or repairs made in the past 6 years, including the type, notification to the Tenant, dates, responsible parties, costs, and how the issue was discovered. | + | interrogatories['inspection_repair_history'].category | Problems with the Apartment/Building | + | interrogatories['lead_paint_information'].checked | False | + | interrogatories['lead_paint_information'].soft_check | False | + | interrogatories['lead_paint_information'].default_check | False | + | interrogatories['lead_paint_information'].conditions[0] | lead_paint_5_feet_from_floor | + | interrogatories['lead_paint_information'].conditions[1] | lead_paint_anywhere | + | interrogatories['lead_paint_information'].conditions[2] | lead_paint_child | + | interrogatories['lead_paint_information'].priority | 750 | + | interrogatories['lead_paint_information'].is_custom | False | + | interrogatories['lead_paint_information'].name | lead_paint_information | + | interrogatories['lead_paint_information'].description | Describe any investigation or knowledge regarding the presence of lead paint, including inspection dates, findings, and remediation steps. | + | interrogatories['lead_paint_information'].category | Problems with the Apartment/Building | + | interrogatories['tenant_damage_claims'].checked | True | + | interrogatories['tenant_damage_claims'].soft_check | True | + | interrogatories['tenant_damage_claims'].default_check | False | + | interrogatories['tenant_damage_claims'].conditions[0] | screen_ll_knows_problem | + | interrogatories['tenant_damage_claims'].priority | 700 | + | interrogatories['tenant_damage_claims'].is_custom | False | + | interrogatories['tenant_damage_claims'].name | tenant_damage_claims | + | interrogatories['tenant_damage_claims'].description | If applicable, describe any damage caused by the tenant, including the nature of the damage, repairs made, associated costs, and contact information for any witnesses. | + | interrogatories['tenant_damage_claims'].category | Problems with the Apartment/Building | + | interrogatories['tenant_interference_with_repairs'].checked | False | + | interrogatories['tenant_interference_with_repairs'].soft_check | False | + | interrogatories['tenant_interference_with_repairs'].default_check | False | + | interrogatories['tenant_interference_with_repairs'].conditions[0] | entered_without_permission | + | interrogatories['tenant_interference_with_repairs'].conditions[1] | insufficient_notice | + | interrogatories['tenant_interference_with_repairs'].priority | 750 | + | interrogatories['tenant_interference_with_repairs'].is_custom | False | + | interrogatories['tenant_interference_with_repairs'].name | tenant_interference_with_repairs | + | interrogatories['tenant_interference_with_repairs'].description | Describe instances where the Tenant allegedly interfered with inspections or repairs, including dates, notifications, actions taken, witnesses, rescheduling attempts, and any resulting losses. | + | interrogatories['tenant_interference_with_repairs'].category | Problems with the Apartment/Building | + | interrogatories['landlord_access_to_apartment'].checked | True | + | interrogatories['landlord_access_to_apartment'].soft_check | True | + | interrogatories['landlord_access_to_apartment'].default_check | False | + | interrogatories['landlord_access_to_apartment'].conditions[0] | entered_without_permission | + | interrogatories['landlord_access_to_apartment'].conditions[1] | insufficient_notice | + | interrogatories['landlord_access_to_apartment'].conditions[2] | screen_ll_knows_problem | + | interrogatories['landlord_access_to_apartment'].priority | 700 | + | interrogatories['landlord_access_to_apartment'].is_custom | False | + | interrogatories['landlord_access_to_apartment'].name | landlord_access_to_apartment | + | interrogatories['landlord_access_to_apartment'].description | Describe instances when the landlord or representatives entered the apartment, including dates, reasons, and whether the tenant was present. | + | interrogatories['landlord_access_to_apartment'].category | Problems with the Apartment/Building | + | interrogatories['tenant_utility_billing'].checked | True | + | interrogatories['tenant_utility_billing'].soft_check | True | + | interrogatories['tenant_utility_billing'].default_check | False | + | interrogatories['tenant_utility_billing'].conditions[0] | utilities_no_agreement | + | interrogatories['tenant_utility_billing'].conditions[1] | complaint_utility_not_paid | + | interrogatories['tenant_utility_billing'].priority | 600 | + | interrogatories['tenant_utility_billing'].is_custom | False | + | interrogatories['tenant_utility_billing'].name | tenant_utility_billing | + | interrogatories['tenant_utility_billing'].description | Describe how utilities are billed (to the Tenant or to the Landlord), including the type of utility and the applicable billing period. | + | interrogatories['tenant_utility_billing'].category | Utilities | + | interrogatories['utilities_and_billing'].checked | True | + | interrogatories['utilities_and_billing'].soft_check | True | + | interrogatories['utilities_and_billing'].default_check | False | + | interrogatories['utilities_and_billing'].conditions[0] | utilities_no_agreement | + | interrogatories['utilities_and_billing'].conditions[1] | complaint_utility_not_paid | + | interrogatories['utilities_and_billing'].priority | 650 | + | interrogatories['utilities_and_billing'].is_custom | False | + | interrogatories['utilities_and_billing'].name | utilities_and_billing | + | interrogatories['utilities_and_billing'].description | Describe the tenant’s responsibility for utility payments, including written agreements and billing periods. | + | interrogatories['utilities_and_billing'].category | Utilities | + | interrogatories['utility_disconnection_details'].checked | True | + | interrogatories['utility_disconnection_details'].soft_check | True | + | interrogatories['utility_disconnection_details'].default_check | False | + | interrogatories['utility_disconnection_details'].conditions[0] | utility_shutoff | + | interrogatories['utility_disconnection_details'].conditions[1] | incident_utility | + | interrogatories['utility_disconnection_details'].conditions[2] | complaint_utility_shutoff | + | interrogatories['utility_disconnection_details'].priority | 650 | + | interrogatories['utility_disconnection_details'].is_custom | False | + | interrogatories['utility_disconnection_details'].name | utility_disconnection_details | + | interrogatories['utility_disconnection_details'].description | Describe any utility disconnections or threats of disconnection, including dates, reasons, and when service was restored. | + | interrogatories['utility_disconnection_details'].category | Utilities | + | interrogatories['common_area_utility_accounts'].checked | True | + | interrogatories['common_area_utility_accounts'].soft_check | True | + | interrogatories['common_area_utility_accounts'].default_check | False | + | interrogatories['common_area_utility_accounts'].conditions[0] | utilities_no_agreement | + | interrogatories['common_area_utility_accounts'].conditions[1] | complaint_utility_not_paid | + | interrogatories['common_area_utility_accounts'].priority | 550 | + | interrogatories['common_area_utility_accounts'].is_custom | False | + | interrogatories['common_area_utility_accounts'].name | common_area_utility_accounts | + | interrogatories['common_area_utility_accounts'].description | Provide details about accounts for common area utility usage, including the utility company name, account numbers, and areas covered. | + | interrogatories['common_area_utility_accounts'].category | Utilities | + | interrogatories['tenant_outside_utility_responsibility'].checked | True | + | interrogatories['tenant_outside_utility_responsibility'].soft_check | True | + | interrogatories['tenant_outside_utility_responsibility'].default_check | False | + | interrogatories['tenant_outside_utility_responsibility'].conditions[0] | utilities_no_agreement | + | interrogatories['tenant_outside_utility_responsibility'].conditions[1] | complaint_utility_not_paid | + | interrogatories['tenant_outside_utility_responsibility'].priority | 750 | + | interrogatories['tenant_outside_utility_responsibility'].is_custom | False | + | interrogatories['tenant_outside_utility_responsibility'].name | tenant_outside_utility_responsibility | + | interrogatories['tenant_outside_utility_responsibility'].description | Describe any utility payments the Tenant was responsible for outside the apartment, including the type of utility, written agreements, and the start date of the arrangement. | + | interrogatories['tenant_outside_utility_responsibility'].category | Utilities | + | interrogatories['rental_properties_owned'].checked | True | + | interrogatories['rental_properties_owned'].soft_check | True | + | interrogatories['rental_properties_owned'].default_check | True | + | interrogatories['rental_properties_owned'].conditions | None | + | interrogatories['rental_properties_owned'].priority | 750 | + | interrogatories['rental_properties_owned'].is_custom | False | + | interrogatories['rental_properties_owned'].name | rental_properties_owned | + | interrogatories['rental_properties_owned'].description | List all rental properties owned by the Landlord during the tenant’s tenancy, including addresses, number of apartments, and purchase dates. | + | interrogatories['rental_properties_owned'].category | Facts About the Landlord | + | interrogatories['ownership_entity_details'].checked | True | + | interrogatories['ownership_entity_details'].soft_check | True | + | interrogatories['ownership_entity_details'].default_check | True | + | interrogatories['ownership_entity_details'].conditions | None | + | interrogatories['ownership_entity_details'].priority | 600 | + | interrogatories['ownership_entity_details'].is_custom | False | + | interrogatories['ownership_entity_details'].name | ownership_entity_details | + | interrogatories['ownership_entity_details'].description | Describe the ownership entity if the Tenant’s apartment is owned by a trust or business entity, including the entity name and type, trustees or managers, beneficiaries, and relevant governing documents. | + | interrogatories['ownership_entity_details'].category | Facts About the Landlord | + | interrogatories['landlord_sale_plan'].checked | True | + | interrogatories['landlord_sale_plan'].soft_check | True | + | interrogatories['landlord_sale_plan'].default_check | True | + | interrogatories['landlord_sale_plan'].conditions | None | + | interrogatories['landlord_sale_plan'].priority | 700 | + | interrogatories['landlord_sale_plan'].is_custom | False | + | interrogatories['landlord_sale_plan'].name | landlord_sale_plan | + | interrogatories['landlord_sale_plan'].description | If the landlord intends to sell the property, describe actions taken, including marketing, appraisals, and communications with brokers or buyers. | + | interrogatories['landlord_sale_plan'].category | Facts About the Landlord | + | interrogatories['fair_market_rental_value'].checked | True | + | interrogatories['fair_market_rental_value'].soft_check | True | + | interrogatories['fair_market_rental_value'].default_check | True | + | interrogatories['fair_market_rental_value'].conditions | None | + | interrogatories['fair_market_rental_value'].priority | 750 | + | interrogatories['fair_market_rental_value'].is_custom | False | + | interrogatories['fair_market_rental_value'].name | fair_market_rental_value | + | interrogatories['fair_market_rental_value'].description | State your opinion of the apartment’s fair market rental value for each month of the Tenant’s occupancy, including the factual basis for your opinion and compliance with applicable codes and regulations. | + | interrogatories['fair_market_rental_value'].category | Facts About the Landlord | + | interrogatories['tenant_organization_involvement'].checked | True | + | interrogatories['tenant_organization_involvement'].soft_check | True | + | interrogatories['tenant_organization_involvement'].default_check | False | + | interrogatories['tenant_organization_involvement'].conditions[0] | complaint_retaliation | + | interrogatories['tenant_organization_involvement'].priority | 450 | + | interrogatories['tenant_organization_involvement'].is_custom | False | + | interrogatories['tenant_organization_involvement'].name | tenant_organization_involvement | + | interrogatories['tenant_organization_involvement'].description | Describe any knowledge of the tenant’s involvement in tenant organizations or actions taken to assert tenant rights. | + | interrogatories['tenant_organization_involvement'].category | Other | + | interrogatories['eviction_proceedings'].checked | False | + | interrogatories['eviction_proceedings'].soft_check | False | + | interrogatories['eviction_proceedings'].default_check | False | + | interrogatories['eviction_proceedings'].conditions[0] | screen_tenant_facing_eviction_is_case | + | interrogatories['eviction_proceedings'].conditions[1] | screen_tenant_facing_eviction_is_notice | + | interrogatories['eviction_proceedings'].conditions[2] | screen_tenant_facing_eviction_is_pending | + | interrogatories['eviction_proceedings'].conditions[3] | screen_tenant_facing_eviction_is_closed | + | interrogatories['eviction_proceedings'].priority | 550 | + | interrogatories['eviction_proceedings'].is_custom | False | + | interrogatories['eviction_proceedings'].name | eviction_proceedings | + | interrogatories['eviction_proceedings'].description | List all eviction proceedings or lawsuits against the Tenant, including dates, reasons, and how each was resolved. | + | interrogatories['eviction_proceedings'].category | Other | + | interrogatories['lock_changes_and_exclusion'].checked | False | + | interrogatories['lock_changes_and_exclusion'].soft_check | False | + | interrogatories['lock_changes_and_exclusion'].default_check | False | + | interrogatories['lock_changes_and_exclusion'].conditions[0] | illegal_lockout | + | interrogatories['lock_changes_and_exclusion'].priority | 850 | + | interrogatories['lock_changes_and_exclusion'].is_custom | False | + | interrogatories['lock_changes_and_exclusion'].name | lock_changes_and_exclusion | + | interrogatories['lock_changes_and_exclusion'].description | If the Landlord changed locks or took actions to exclude the Tenant from the apartment or any part of the building, provide details including dates, reasons, and notifications. | + | interrogatories['lock_changes_and_exclusion'].category | Other | + | interrogatories.yaml_source | data/sources/interrogatories.yml | + | interrogatories.categories[0] | Tenancy | + | interrogatories.categories[1] | Tenant’s Claims | + | interrogatories.categories[2] | Subsidized Housing | + | interrogatories.categories[3] | Problems with the Apartment/Building | + | interrogatories.categories[4] | Utilities | + | interrogatories.categories[5] | Facts About the Landlord | + | interrogatories.categories[6] | Other | + | interrogatories.there_are_any | True | + | document_requests['rental_documents_general'].checked | True | + | document_requests['rental_documents_general'].soft_check | True | + | document_requests['rental_documents_general'].default_check | True | + | document_requests['rental_documents_general'].conditions | None | + | document_requests['rental_documents_general'].priority | 800 | + | document_requests['rental_documents_general'].is_custom | False | + | document_requests['rental_documents_general'].name | rental_documents_general | + | document_requests['rental_documents_general'].description | Provide documents related to the rental of the apartment, including rental applications, credit checks, references, leases, and addenda. | + | document_requests['rental_documents_general'].category | Tenancy | + | document_requests['tenant_landlord_written_communications'].checked | True | + | document_requests['tenant_landlord_written_communications'].soft_check | True | + | document_requests['tenant_landlord_written_communications'].default_check | True | + | document_requests['tenant_landlord_written_communications'].conditions | None | + | document_requests['tenant_landlord_written_communications'].priority | 750 | + | document_requests['tenant_landlord_written_communications'].is_custom | False | + | document_requests['tenant_landlord_written_communications'].name | tenant_landlord_written_communications | + | document_requests['tenant_landlord_written_communications'].description | Include letters, emails, texts, and notices exchanged between the Tenant and Landlord. | + | document_requests['tenant_landlord_written_communications'].category | Tenancy | + | document_requests['tenant_landlord_communications_others'].checked | True | + | document_requests['tenant_landlord_communications_others'].soft_check | True | + | document_requests['tenant_landlord_communications_others'].default_check | True | + | document_requests['tenant_landlord_communications_others'].conditions | None | + | document_requests['tenant_landlord_communications_others'].priority | 700 | + | document_requests['tenant_landlord_communications_others'].is_custom | False | + | document_requests['tenant_landlord_communications_others'].name | tenant_landlord_communications_others | + | document_requests['tenant_landlord_communications_others'].description | Provide communications between the Landlord and others regarding the Tenant or tenancy. | + | document_requests['tenant_landlord_communications_others'].category | Tenancy | + | document_requests['rent_payment_records_all'].checked | True | + | document_requests['rent_payment_records_all'].soft_check | True | + | document_requests['rent_payment_records_all'].default_check | True | + | document_requests['rent_payment_records_all'].conditions | None | + | document_requests['rent_payment_records_all'].priority | 800 | + | document_requests['rent_payment_records_all'].is_custom | False | + | document_requests['rent_payment_records_all'].name | rent_payment_records_all | + | document_requests['rent_payment_records_all'].description | Provide all records related to rent or occupancy payments made by or on behalf of the Tenant. | + | document_requests['rent_payment_records_all'].category | Tenancy | + | document_requests['charges_other_than_rent'].checked | True | + | document_requests['charges_other_than_rent'].soft_check | True | + | document_requests['charges_other_than_rent'].default_check | True | + | document_requests['charges_other_than_rent'].conditions | None | + | document_requests['charges_other_than_rent'].priority | 650 | + | document_requests['charges_other_than_rent'].is_custom | False | + | document_requests['charges_other_than_rent'].name | charges_other_than_rent | + | document_requests['charges_other_than_rent'].description | Provide all records concerning charges to the Tenant for items other than rent or occupancy. | + | document_requests['charges_other_than_rent'].category | Tenancy | + | document_requests['tenant_file_documents'].checked | True | + | document_requests['tenant_file_documents'].soft_check | True | + | document_requests['tenant_file_documents'].default_check | True | + | document_requests['tenant_file_documents'].conditions | None | + | document_requests['tenant_file_documents'].priority | 700 | + | document_requests['tenant_file_documents'].is_custom | False | + | document_requests['tenant_file_documents'].name | tenant_file_documents | + | document_requests['tenant_file_documents'].description | Provide all documents maintained in the Tenant’s file by the owner or manager. | + | document_requests['tenant_file_documents'].category | Tenancy | + | document_requests['rent_increase_documents'].checked | True | + | document_requests['rent_increase_documents'].soft_check | True | + | document_requests['rent_increase_documents'].default_check | True | + | document_requests['rent_increase_documents'].conditions | None | + | document_requests['rent_increase_documents'].priority | 750 | + | document_requests['rent_increase_documents'].is_custom | False | + | document_requests['rent_increase_documents'].name | rent_increase_documents | + | document_requests['rent_increase_documents'].description | Provide all documents related to rent increases or requests for rent increases concerning the tenancy. | + | document_requests['rent_increase_documents'].category | Tenancy | + | document_requests['documents_from_previous_owners'].checked | True | + | document_requests['documents_from_previous_owners'].soft_check | True | + | document_requests['documents_from_previous_owners'].default_check | True | + | document_requests['documents_from_previous_owners'].conditions | None | + | document_requests['documents_from_previous_owners'].priority | 700 | + | document_requests['documents_from_previous_owners'].is_custom | False | + | document_requests['documents_from_previous_owners'].name | documents_from_previous_owners | + | document_requests['documents_from_previous_owners'].description | Include all documents received from previous building owners regarding the property condition, tenancies, and security deposits and last months' rents. | + | document_requests['documents_from_previous_owners'].category | Tenancy | + | document_requests['tenant_claim_related_documents'].checked | True | + | document_requests['tenant_claim_related_documents'].soft_check | True | + | document_requests['tenant_claim_related_documents'].default_check | True | + | document_requests['tenant_claim_related_documents'].conditions | None | + | document_requests['tenant_claim_related_documents'].priority | 750 | + | document_requests['tenant_claim_related_documents'].is_custom | False | + | document_requests['tenant_claim_related_documents'].name | tenant_claim_related_documents | + | document_requests['tenant_claim_related_documents'].description | Include all documents related to the Tenant’s claims or the Landlord’s defenses or counterclaims. | + | document_requests['tenant_claim_related_documents'].category | Tenancy | + | document_requests['documents_for_trial'].checked | True | + | document_requests['documents_for_trial'].soft_check | True | + | document_requests['documents_for_trial'].default_check | True | + | document_requests['documents_for_trial'].conditions | None | + | document_requests['documents_for_trial'].priority | 850 | + | document_requests['documents_for_trial'].is_custom | False | + | document_requests['documents_for_trial'].name | documents_for_trial | + | document_requests['documents_for_trial'].description | Provide documents the Landlord plans to present at trial or hearing. | + | document_requests['documents_for_trial'].category | Tenancy | + | document_requests['management_agreements'].checked | True | + | document_requests['management_agreements'].soft_check | True | + | document_requests['management_agreements'].default_check | True | + | document_requests['management_agreements'].conditions | None | + | document_requests['management_agreements'].priority | 600 | + | document_requests['management_agreements'].is_custom | False | + | document_requests['management_agreements'].name | management_agreements | + | document_requests['management_agreements'].description | Provide management contracts and documents related to the management of the property. | + | document_requests['management_agreements'].category | Facts About the Landlord | + | document_requests['maintenance_logs_and_records'].checked | True | + | document_requests['maintenance_logs_and_records'].soft_check | True | + | document_requests['maintenance_logs_and_records'].default_check | True | + | document_requests['maintenance_logs_and_records'].conditions | None | + | document_requests['maintenance_logs_and_records'].priority | 750 | + | document_requests['maintenance_logs_and_records'].is_custom | False | + | document_requests['maintenance_logs_and_records'].name | maintenance_logs_and_records | + | document_requests['maintenance_logs_and_records'].description | Include logs and records of maintenance done at the property. | + | document_requests['maintenance_logs_and_records'].category | Facts About the Landlord | + | document_requests['landlord_purchase_refinance_documents'].checked | True | + | document_requests['landlord_purchase_refinance_documents'].soft_check | True | + | document_requests['landlord_purchase_refinance_documents'].default_check | True | + | document_requests['landlord_purchase_refinance_documents'].conditions | None | + | document_requests['landlord_purchase_refinance_documents'].priority | 550 | + | document_requests['landlord_purchase_refinance_documents'].is_custom | False | + | document_requests['landlord_purchase_refinance_documents'].name | landlord_purchase_refinance_documents | + | document_requests['landlord_purchase_refinance_documents'].description | Provide documents related to the building purchase or refinancing, including inspections, contracts, and appraisals. | + | document_requests['landlord_purchase_refinance_documents'].category | Facts About the Landlord | + | document_requests['sale_related_documents'].checked | True | + | document_requests['sale_related_documents'].soft_check | True | + | document_requests['sale_related_documents'].default_check | True | + | document_requests['sale_related_documents'].conditions | None | + | document_requests['sale_related_documents'].priority | 600 | + | document_requests['sale_related_documents'].is_custom | False | + | document_requests['sale_related_documents'].name | sale_related_documents | + | document_requests['sale_related_documents'].description | Include documents related to the anticipated or actual sale of the building, including inspections, appraisals, marketing, and purchase agreements. | + | document_requests['sale_related_documents'].category | Facts About the Landlord | + | document_requests['subsidized_housing_documentation'].checked | True | + | document_requests['subsidized_housing_documentation'].soft_check | True | + | document_requests['subsidized_housing_documentation'].default_check | False | + | document_requests['subsidized_housing_documentation'].conditions[0] | tenant_gets_rent_subsidy | + | document_requests['subsidized_housing_documentation'].conditions[1] | tenant_subsidy_is_voucher | + | document_requests['subsidized_housing_documentation'].conditions[2] | verified_complaint_tenant_voucher_at_risk | + | document_requests['subsidized_housing_documentation'].conditions[3] | landlord_is_housing_authority | + | document_requests['subsidized_housing_documentation'].conditions[4] | landlord_is_government | + | document_requests['subsidized_housing_documentation'].priority | 800 | + | document_requests['subsidized_housing_documentation'].is_custom | False | + | document_requests['subsidized_housing_documentation'].name | subsidized_housing_documentation | + | document_requests['subsidized_housing_documentation'].description | Include documents related to the type or nature of any rental subsidy for the tenancy. | + | document_requests['subsidized_housing_documentation'].category | Subsidized Housing | + | document_requests['contract_rent_increase_requests'].checked | True | + | document_requests['contract_rent_increase_requests'].soft_check | True | + | document_requests['contract_rent_increase_requests'].default_check | False | + | document_requests['contract_rent_increase_requests'].conditions[0] | tenant_gets_rent_subsidy | + | document_requests['contract_rent_increase_requests'].conditions[1] | tenant_subsidy_is_voucher | + | document_requests['contract_rent_increase_requests'].conditions[2] | verified_complaint_tenant_voucher_at_risk | + | document_requests['contract_rent_increase_requests'].conditions[3] | landlord_is_housing_authority | + | document_requests['contract_rent_increase_requests'].conditions[4] | landlord_is_government | + | document_requests['contract_rent_increase_requests'].priority | 750 | + | document_requests['contract_rent_increase_requests'].is_custom | False | + | document_requests['contract_rent_increase_requests'].name | contract_rent_increase_requests | + | document_requests['contract_rent_increase_requests'].description | Provide all documents related to the Landlord’s requests for an increase in contract rent and responses from the Tenant or subsidy-administering agency. | + | document_requests['contract_rent_increase_requests'].category | Subsidized Housing | + | document_requests['conference_and_grievance_documents'].checked | True | + | document_requests['conference_and_grievance_documents'].soft_check | True | + | document_requests['conference_and_grievance_documents'].default_check | False | + | document_requests['conference_and_grievance_documents'].conditions[0] | tenant_gets_rent_subsidy | + | document_requests['conference_and_grievance_documents'].conditions[1] | tenant_subsidy_is_voucher | + | document_requests['conference_and_grievance_documents'].conditions[2] | verified_complaint_tenant_voucher_at_risk | + | document_requests['conference_and_grievance_documents'].conditions[3] | landlord_is_housing_authority | + | document_requests['conference_and_grievance_documents'].conditions[4] | landlord_is_government | + | document_requests['conference_and_grievance_documents'].priority | 700 | + | document_requests['conference_and_grievance_documents'].is_custom | False | + | document_requests['conference_and_grievance_documents'].name | conference_and_grievance_documents | + | document_requests['conference_and_grievance_documents'].description | Provide all documents related to any informal conferences or grievance hearings during the tenancy. | + | document_requests['conference_and_grievance_documents'].category | Subsidized Housing | + | document_requests['agency_communications'].checked | True | + | document_requests['agency_communications'].soft_check | True | + | document_requests['agency_communications'].default_check | False | + | document_requests['agency_communications'].conditions[0] | tenant_gets_rent_subsidy | + | document_requests['agency_communications'].conditions[1] | tenant_subsidy_is_voucher | + | document_requests['agency_communications'].conditions[2] | verified_complaint_tenant_voucher_at_risk | + | document_requests['agency_communications'].conditions[3] | landlord_is_housing_authority | + | document_requests['agency_communications'].conditions[4] | landlord_is_government | + | document_requests['agency_communications'].priority | 800 | + | document_requests['agency_communications'].is_custom | False | + | document_requests['agency_communications'].name | agency_communications | + | document_requests['agency_communications'].description | Provide all written communications between the Landlord and any housing authority, EOHLC, MassHousing, HUD, or other agency regarding the Tenant or the apartment. | + | document_requests['agency_communications'].category | Subsidized Housing | + | document_requests['rental_assistance_records'].checked | True | + | document_requests['rental_assistance_records'].soft_check | True | + | document_requests['rental_assistance_records'].default_check | False | + | document_requests['rental_assistance_records'].conditions[0] | tenant_gets_rent_subsidy | + | document_requests['rental_assistance_records'].conditions[1] | tenant_subsidy_is_voucher | + | document_requests['rental_assistance_records'].conditions[2] | verified_complaint_tenant_voucher_at_risk | + | document_requests['rental_assistance_records'].conditions[3] | landlord_is_housing_authority | + | document_requests['rental_assistance_records'].conditions[4] | landlord_is_government | + | document_requests['rental_assistance_records'].priority | 700 | + | document_requests['rental_assistance_records'].is_custom | False | + | document_requests['rental_assistance_records'].name | rental_assistance_records | + | document_requests['rental_assistance_records'].description | Provide all documents related to rental assistance applications, approvals, or denials. | + | document_requests['rental_assistance_records'].category | Subsidized Housing | + | document_requests['inspection_notices_and_reports'].checked | True | + | document_requests['inspection_notices_and_reports'].soft_check | True | + | document_requests['inspection_notices_and_reports'].default_check | True | + | document_requests['inspection_notices_and_reports'].conditions | None | + | document_requests['inspection_notices_and_reports'].priority | 750 | + | document_requests['inspection_notices_and_reports'].is_custom | False | + | document_requests['inspection_notices_and_reports'].name | inspection_notices_and_reports | + | document_requests['inspection_notices_and_reports'].description | Include notices and reports related to inspections or repair notices for the apartment or building. | + | document_requests['inspection_notices_and_reports'].category | Problems with the Apartment/Building | + | document_requests['photographic_evidence'].checked | True | + | document_requests['photographic_evidence'].soft_check | True | + | document_requests['photographic_evidence'].default_check | True | + | document_requests['photographic_evidence'].conditions | None | + | document_requests['photographic_evidence'].priority | 700 | + | document_requests['photographic_evidence'].is_custom | False | + | document_requests['photographic_evidence'].name | photographic_evidence | + | document_requests['photographic_evidence'].description | Include all photographs, videos, or digital images related to the Tenant’s apartment or the building. | + | document_requests['photographic_evidence'].category | Problems with the Apartment/Building | + | document_requests['lead_paint_investigation'].checked | False | + | document_requests['lead_paint_investigation'].soft_check | False | + | document_requests['lead_paint_investigation'].default_check | False | + | document_requests['lead_paint_investigation'].conditions[0] | lead_paint_5_feet_from_floor | + | document_requests['lead_paint_investigation'].conditions[1] | lead_paint_anywhere | + | document_requests['lead_paint_investigation'].conditions[2] | lead_paint_child | + | document_requests['lead_paint_investigation'].priority | 800 | + | document_requests['lead_paint_investigation'].is_custom | False | + | document_requests['lead_paint_investigation'].name | lead_paint_investigation | + | document_requests['lead_paint_investigation'].description | Provide documents related to lead paint inspections, reports, and verification of lead hazard removal. | + | document_requests['lead_paint_investigation'].category | Problems with the Apartment/Building | + | document_requests['condition_inspection_reports'].checked | True | + | document_requests['condition_inspection_reports'].soft_check | True | + | document_requests['condition_inspection_reports'].default_check | True | + | document_requests['condition_inspection_reports'].conditions | None | + | document_requests['condition_inspection_reports'].priority | 650 | + | document_requests['condition_inspection_reports'].is_custom | False | + | document_requests['condition_inspection_reports'].name | condition_inspection_reports | + | document_requests['condition_inspection_reports'].description | Include inspection reports regarding the condition of the apartment and common areas. | + | document_requests['condition_inspection_reports'].category | Problems with the Apartment/Building | + | document_requests['repair_invoices_and_records'].checked | True | + | document_requests['repair_invoices_and_records'].soft_check | True | + | document_requests['repair_invoices_and_records'].default_check | True | + | document_requests['repair_invoices_and_records'].conditions | None | + | document_requests['repair_invoices_and_records'].priority | 750 | + | document_requests['repair_invoices_and_records'].is_custom | False | + | document_requests['repair_invoices_and_records'].name | repair_invoices_and_records | + | document_requests['repair_invoices_and_records'].description | Include invoices, estimates, and work orders for repairs to the apartment or building. | + | document_requests['repair_invoices_and_records'].category | Problems with the Apartment/Building | + | document_requests['rental_value_assessments'].checked | True | + | document_requests['rental_value_assessments'].soft_check | True | + | document_requests['rental_value_assessments'].default_check | True | + | document_requests['rental_value_assessments'].conditions | None | + | document_requests['rental_value_assessments'].priority | 600 | + | document_requests['rental_value_assessments'].is_custom | False | + | document_requests['rental_value_assessments'].name | rental_value_assessments | + | document_requests['rental_value_assessments'].description | Provide documents related to assessments of the fair market rental value of the apartment. | + | document_requests['rental_value_assessments'].category | Problems with the Apartment/Building | + | document_requests['utility_payment_responsibility'].checked | True | + | document_requests['utility_payment_responsibility'].soft_check | True | + | document_requests['utility_payment_responsibility'].default_check | True | + | document_requests['utility_payment_responsibility'].conditions[0] | utilities_no_agreement | + | document_requests['utility_payment_responsibility'].conditions[1] | complaint_utility_not_paid | + | document_requests['utility_payment_responsibility'].priority | 750 | + | document_requests['utility_payment_responsibility'].is_custom | False | + | document_requests['utility_payment_responsibility'].name | utility_payment_responsibility | + | document_requests['utility_payment_responsibility'].description | Provide all documents identifying who was responsible for paying water, sewer, heat, hot water, electricity, or other utilities during the Tenant’s occupancy. | + | document_requests['utility_payment_responsibility'].category | Utilities | + | document_requests['utility_termination_notices'].checked | True | + | document_requests['utility_termination_notices'].soft_check | True | + | document_requests['utility_termination_notices'].default_check | True | + | document_requests['utility_termination_notices'].conditions[0] | utility_shutoff | + | document_requests['utility_termination_notices'].conditions[1] | incident_utility | + | document_requests['utility_termination_notices'].conditions[2] | complaint_utility_shutoff | + | document_requests['utility_termination_notices'].priority | 700 | + | document_requests['utility_termination_notices'].is_custom | False | + | document_requests['utility_termination_notices'].name | utility_termination_notices | + | document_requests['utility_termination_notices'].description | Provide documents related to the threatened or actual termination and restoration of utilities. | + | document_requests['utility_termination_notices'].category | Utilities | + | document_requests['common_area_utility_accounts'].checked | True | + | document_requests['common_area_utility_accounts'].soft_check | True | + | document_requests['common_area_utility_accounts'].default_check | True | + | document_requests['common_area_utility_accounts'].conditions[0] | utilities_no_agreement | + | document_requests['common_area_utility_accounts'].conditions[1] | complaint_utility_not_paid | + | document_requests['common_area_utility_accounts'].priority | 700 | + | document_requests['common_area_utility_accounts'].is_custom | False | + | document_requests['common_area_utility_accounts'].name | common_area_utility_accounts | + | document_requests['common_area_utility_accounts'].description | Provide all documents related to the Landlord’s accounts for common area water and other utility usage in the building. | + | document_requests['common_area_utility_accounts'].category | Utilities | + | document_requests['tenant_outside_utility_documents'].checked | True | + | document_requests['tenant_outside_utility_documents'].soft_check | True | + | document_requests['tenant_outside_utility_documents'].default_check | True | + | document_requests['tenant_outside_utility_documents'].conditions[0] | utilities_no_agreement | + | document_requests['tenant_outside_utility_documents'].conditions[1] | complaint_utility_not_paid | + | document_requests['tenant_outside_utility_documents'].priority | 750 | + | document_requests['tenant_outside_utility_documents'].is_custom | False | + | document_requests['tenant_outside_utility_documents'].name | tenant_outside_utility_documents | + | document_requests['tenant_outside_utility_documents'].description | Provide all documents related to the Tenant’s responsibility for paying any utility outside the apartment, including hallways, the basement, or the building exterior during occupancy. | + | document_requests['tenant_outside_utility_documents'].category | Utilities | + | document_requests['property_insurance_policies'].checked | False | + | document_requests['property_insurance_policies'].soft_check | True | + | document_requests['property_insurance_policies'].default_check | True | + | document_requests['property_insurance_policies'].conditions | None | + | document_requests['property_insurance_policies'].priority | 550 | + | document_requests['property_insurance_policies'].is_custom | False | + | document_requests['property_insurance_policies'].name | property_insurance_policies | + | document_requests['property_insurance_policies'].description | Include documents related to fire, property, or liability insurance for the property. | + | document_requests['property_insurance_policies'].category | Other | + | document_requests['legal_claims_documents'].checked | True | + | document_requests['legal_claims_documents'].soft_check | True | + | document_requests['legal_claims_documents'].default_check | True | + | document_requests['legal_claims_documents'].conditions[0] | screen_tenant_facing_eviction_is_case | + | document_requests['legal_claims_documents'].conditions[1] | screen_tenant_facing_eviction_is_notice | + | document_requests['legal_claims_documents'].conditions[2] | screen_tenant_facing_eviction_is_pending | + | document_requests['legal_claims_documents'].conditions[3] | screen_tenant_facing_eviction_is_closed | + | document_requests['legal_claims_documents'].priority | 700 | + | document_requests['legal_claims_documents'].is_custom | False | + | document_requests['legal_claims_documents'].name | legal_claims_documents | + | document_requests['legal_claims_documents'].description | Include documents related to any lawsuits or legal claims involving the property, the Landlord, and the Tenant. | + | document_requests['legal_claims_documents'].category | Other | + | document_requests.yaml_source | data/sources/document_requests.yml | + | document_requests.categories[0] | Tenancy | + | document_requests.categories[1] | Facts About the Landlord | + | document_requests.categories[2] | Subsidized Housing | + | document_requests.categories[3] | Problems with the Apartment/Building | + | document_requests.categories[4] | Utilities | + | document_requests.categories[5] | Other | + | document_requests.there_are_any | True | + | customize_discovery_choice | default_discovery | + | interview_order_discovery | True | + | claim_jurytrial | True | + | verified_complaint_wants_fee_waiver | wants_fee_waiver | + | fees['Filing fee'].waive | True | + | fees['Filing fee'].amount | 225.0 | + | fees['Service'].waive | True | + | fees['Service'].amount | 45.0 | + | fees['Costs of an expert witness'].str | | + | fees['Depositions'].str | | + | fees['Appeal cost'].str | | + | fees['Appeal bond'].str | | + | fees['recordings'].str | | + | fees['transcript'].str | | + | fees['Other'].str | | + | fees['Other cost'].str | | + | fees['there_are_any'] | True | + | set_fee_waiver_defaults | True | + | docket_numbers.str | | + | affidavit_is_standalone | False | + | public_assistance_kinds['TAFDC'] | True | + | public_assistance_kinds['Medicaid'] | False | + | public_assistance_kinds['EAEDC'] | False | + | public_assistance_kinds['VA Benefits'] | False | + | public_assistance_kinds['SSI'] | False | + | is_indigent | True | + | need_supplement | False | + | need_income | False | + | qualify_interstitial | True | + | fees_interstitial | True | + | tried_geolocating | True | + | affidavit_of_indigency_filing_court | all_courts[44] | + | affidavit_of_indigency_filing_court.address | all_courts[44].address | + | affidavit_of_indigency_filing_court.address.location | all_courts[44].address.location | + | affidavit_of_indigency_filing_court.address.location.known | False | + | affidavit_of_indigency_filing_court.address.address | 24 New Chardon St. | + | affidavit_of_indigency_filing_court.address.city | Boston | + | affidavit_of_indigency_filing_court.address.state | MA | + | affidavit_of_indigency_filing_court.address.zip | 02114 | + | affidavit_of_indigency_filing_court.address.county | Suffolk County | + | affidavit_of_indigency_filing_court.location | all_courts[44].location | + | affidavit_of_indigency_filing_court.location.known | False | + | affidavit_of_indigency_filing_court.tyler_code | 537 | + | affidavit_of_indigency_filing_court.tyler_lower_court_code | 1827 | + | affidavit_of_indigency_filing_court.tyler_prod_lower_court_code | 7056 | + | affidavit_of_indigency_filing_court.name | Eastern Housing Court | + | affidavit_of_indigency_filing_court.phone | (617) 788-8485 | + | affidavit_of_indigency_filing_court.description | The Eastern Division of the Housing Court serves Boston, Brookline and Newton. | + | affidavit_of_indigency_filing_court.ada_coordinators[0]['name'] | Natasha Woodley | + | affidavit_of_indigency_filing_court.ada_coordinators[0]['phone'] | (617) 788-6523 | + | affidavit_of_indigency_filing_court.ada_coordinators[0]['email'] | Natasha.woodley@jud.state.ma.us | + | fee | Other cost | + | set_empty_fees | True | + | ask_affidavit_questions | True | + | service_method | email and mail | + | service_today | True | + | interview_order_verified_complaint_and_motions | True | + | uptocode_review | True | + | signature_choice | sign_after_printing | + | saw_signature_choice | True | + | signature | users[0].attorney.signature | + | basic_questions_signature_flow | True | + | direct_inspection_email | False | + | reached_download_screen | True | + | tasks_to_monitor[0] | None | + | tasks_to_monitor[1] | None | + | tasks_to_monitor[2] | None | + | snapshot_interview_state | True | + | did_react | False | + | sharing_choices[0]['tell_friend'] | Tell a friend about this website | + | sharing_choices[1]['share_answers'] | Share my answers and progress with someone | + + And I download "housing_conditions_report.docx" + And I download "next_steps_for_court.docx" + And I download "verified_complaint.docx" + And I download "motion_for_injunctive_relief.docx" + And I download "temporary_order.docx" + And I download "simple_temporary_order.docx" + And I download "preliminary_injunction.docx" + And I download "simple_preliminary_injunction.docx" + And I download "Discovery.docx" + And I download "motion_to_compel_discovery.docx" + And I download "affidavit_of_indigency.pdf" From 1c7897c7e13783bc2e2031bd50b95fc7f742ae9b Mon Sep 17 00:00:00 2001 From: Quinten Steenhuis Date: Wed, 10 Jun 2026 16:07:12 -0400 Subject: [PATCH 08/10] Address dayamlchecker findings, format code --- docassemble/HousingCodeChecklist/__init__.py | 2 +- .../Repair_Demand_Letter_standalone.yml | 17 +- .../Repair_Demand_Letter_to_include.yml | 61 ++-- .../data/questions/Repair_Letter_Tenant.yml | 46 +-- .../Repair_Letter_Tenant_standalone.yml | 2 +- .../contempt_complaint_standalone.yml | 15 +- .../data/questions/customized_screens.yml | 99 ++++-- .../data/questions/discovery.yml | 2 +- .../data/questions/feedback.yml | 50 +-- .../data/questions/housing_code_interview.yml | 288 ++++++++++++------ .../data/questions/language.yml | 24 +- .../data/questions/load_answers.yml | 13 +- ...ified_complaint_and_motions_standalone.yml | 12 +- ...ified_complaint_and_motions_to_include.yml | 52 ++-- docassemble/HousingCodeChecklist/discovery.py | 123 ++++---- docassemble/HousingCodeChecklist/language.py | 121 ++++---- docassemble/HousingCodeChecklist/load_data.py | 92 +++--- docassemble/__init__.py | 3 +- 18 files changed, 637 insertions(+), 385 deletions(-) diff --git a/docassemble/HousingCodeChecklist/__init__.py b/docassemble/HousingCodeChecklist/__init__.py index 1160b07..ac4c647 100644 --- a/docassemble/HousingCodeChecklist/__init__.py +++ b/docassemble/HousingCodeChecklist/__init__.py @@ -1 +1 @@ -__version__ = '1.31.0' +__version__ = "1.31.0" diff --git a/docassemble/HousingCodeChecklist/data/questions/Repair_Demand_Letter_standalone.yml b/docassemble/HousingCodeChecklist/data/questions/Repair_Demand_Letter_standalone.yml index 93c4e39..e3f3379 100644 --- a/docassemble/HousingCodeChecklist/data/questions/Repair_Demand_Letter_standalone.yml +++ b/docassemble/HousingCodeChecklist/data/questions/Repair_Demand_Letter_standalone.yml @@ -13,7 +13,7 @@ metadata: - Sofija Belajcic --- code: | - interview_metadata['main_interview_key'] = 'Repair_Demand_Letter' + interview_metadata["main_interview_key"] = "Repair_Demand_Letter" --- code: | # This controls the default country and list of states in address field questions @@ -24,13 +24,13 @@ code: | AL_DEFAULT_STATE = "MA" --- code: | - github_repo_name = 'docassemble-RepairDemandLetter' + github_repo_name = "docassemble-RepairDemandLetter" --- code: | interview_short_title = "Write a repair demand letter to your landlord" --- code: | - al_form_type = 'letter' + al_form_type = "letter" --- objects: - other_parties: ALPeopleList.using(ask_number=True,target_number=1) @@ -44,8 +44,8 @@ comment: | Controls order and branching logic for questions specific to this form id: interview_order_Repair_Demand_Letter code: | - nav.set_section('review_Repair_Demand_Letter') - user_role = 'na' + nav.set_section("review_Repair_Demand_Letter") + user_role = "na" users.gather() set_parts(subtitle=str(users)) users[0].address.address @@ -56,7 +56,7 @@ code: | notification_date set_progress(40) if written_notification == True: - letter_date + letter_date tenant_repair_issue_description effect_of_conditions set_progress(60) @@ -78,12 +78,13 @@ code: | interview_order_Repair_Demand_Letter signature_date # Save anonymized interview statistics (customize the saved data below) - store_variables_snapshot(data={'zip': users[0].address.zip}) + store_variables_snapshot(data={"zip": users[0].address.zip}) Repair_Demand_Letter_preview_question basic_questions_signature_flow users[0].signature Repair_Demand_Letter_download --- +id: landlord is not subject to 93a standalone event: landlord_is_not_subject_to_93a decoration: hand question: | @@ -138,4 +139,4 @@ objects: --- code: | Repair_Demand_Letter_post_interview_instructions.enabled = True - Repair_Demand_Letter_attachment.enabled = True \ No newline at end of file + Repair_Demand_Letter_attachment.enabled = True diff --git a/docassemble/HousingCodeChecklist/data/questions/Repair_Demand_Letter_to_include.yml b/docassemble/HousingCodeChecklist/data/questions/Repair_Demand_Letter_to_include.yml index 4702fcd..c471c53 100644 --- a/docassemble/HousingCodeChecklist/data/questions/Repair_Demand_Letter_to_include.yml +++ b/docassemble/HousingCodeChecklist/data/questions/Repair_Demand_Letter_to_include.yml @@ -12,21 +12,21 @@ code: | interview_metadata if not defined("interview_metadata['Repair_Demand_Letter']"): interview_metadata.initializeObject("Repair_Demand_Letter") - interview_metadata["Repair_Demand_Letter"].update({ - "al_weaver_version": "1.6.2", - "generated on": "2022-03-31", - "title": "Repair Demand Letter", - "short title": "Repair Demand Letter", - "description": "A letter of demand for relief under the Consumer Protection Act, Chapter 93A", - "original_form": "https://www.masslegalhelp.org/sites/default/files/2024-01/lt1-form-10-repair-demand.pdf", - "allowed courts": [ - ], - "categories": [ - ], - "logic block variable": "interview_order_Repair_Demand_Letter", - "attachment block variable": "Repair_Demand_Letter_attachment", - "typical role": "plaintiff", - }) + interview_metadata["Repair_Demand_Letter"].update( + { + "al_weaver_version": "1.6.2", + "generated on": "2022-03-31", + "title": "Repair Demand Letter", + "short title": "Repair Demand Letter", + "description": "A letter of demand for relief under the Consumer Protection Act, Chapter 93A", + "original_form": "https://www.masslegalhelp.org/sites/default/files/2024-01/lt1-form-10-repair-demand.pdf", + "allowed courts": [], + "categories": [], + "logic block variable": "interview_order_Repair_Demand_Letter", + "attachment block variable": "Repair_Demand_Letter_attachment", + "typical role": "plaintiff", + } + ) --- objects: - other_parties: ALPeopleList.using(ask_number=True,target_number=1) @@ -37,8 +37,8 @@ comment: | Controls order and branching logic for questions specific to this form id: interview_order_Repair_Demand_Letter code: | - nav.set_section('review_Repair_Demand_Letter') - user_role = 'plaintiff' + nav.set_section("review_Repair_Demand_Letter") + user_role = "plaintiff" users[0].email users.gather() set_parts(subtitle=str(users)) @@ -46,7 +46,7 @@ code: | tenant_movein_date notification_date if written_notification == True: - letter_date + letter_date tenant_repair_issue_description effect_of_conditions if damage_calculation_method in ["tenant_calculation", "uptocode_calculation"]: @@ -200,8 +200,16 @@ fields: val("landlord_is_housing_authority") === false && val("landlord_is_government") === false && (val("landlord_lives_in_building") === false || (val("building_larger_than_4_units") || val("landlord_rents_other_property")) ) --- code: | - is_landlord_subject_to_93a = not landlord_is_housing_authority and not landlord_is_government and (not landlord_lives_in_building or (building_larger_than_4_units or landlord_rents_other_property)) + is_landlord_subject_to_93a = ( + not landlord_is_housing_authority + and not landlord_is_government + and ( + not landlord_lives_in_building + or (building_larger_than_4_units or landlord_rents_other_property) + ) + ) --- +id: landlord is not subject to 93a continue button field: landlord_is_not_subject_to_93a decoration: hand question: | @@ -583,7 +591,10 @@ fields: validation code: | if damage_calculation_method == "uptocode_calculation": if tenant_percentage_estimate < 5: - validation_error("Select a percentage that is greater than 0", field="tenant_percentage_estimate") + validation_error( + "Select a percentage that is greater than 0", + field="tenant_percentage_estimate", + ) --- template: what_if_problem_over_multiple_periods subject: | @@ -738,9 +749,11 @@ depends on: - tenant_percentage_estimate code: | tenant_warranty_estimate = ( - tenant_unit_rent * 12 * ( - min(tenant_time_estimate / tenant_time_estimate_denominator, 6) - ) * tenant_percentage_estimate / 100 + tenant_unit_rent + * 12 + * (min(tenant_time_estimate / tenant_time_estimate_denominator, 6)) + * tenant_percentage_estimate + / 100 ) --- template: settlement_offer_93a_explanation @@ -832,6 +845,7 @@ review: * ${ item } % endfor --- +id: edit repair demand letter landlords continue button field: other_parties.revisit question: | Edit other_parties @@ -853,6 +867,7 @@ edit: confirm: True --- +id: edit repair demand letter tenants continue button field: users.revisit question: | Edit users diff --git a/docassemble/HousingCodeChecklist/data/questions/Repair_Letter_Tenant.yml b/docassemble/HousingCodeChecklist/data/questions/Repair_Letter_Tenant.yml index 2a038f3..93f356b 100644 --- a/docassemble/HousingCodeChecklist/data/questions/Repair_Letter_Tenant.yml +++ b/docassemble/HousingCodeChecklist/data/questions/Repair_Letter_Tenant.yml @@ -9,27 +9,29 @@ comment: | This section is used by MAVirtualCourts to control how some of the questions work. mandatory: True code: | - interview_metadata # make sure we initialize the object + interview_metadata # make sure we initialize the object if not defined("interview_metadata['tenant_repair_request']"): - interview_metadata.initializeObject('tenant_repair_request') - interview_metadata['tenant_repair_request'].update({ - 'title': 'Tenant Repair Request Letter', - 'short title': 'Tenant Repair Request Letter', - 'description': 'Tenant Repair Request Letter', - 'original_form': '', - 'allowed courts': [ - 'Boston Municipal Court', - 'District Court', - 'Housing Court', - 'Superior Court', - ], - 'categories': [ - 'Housing', - ], - 'logic block variable': 'tenant_repair_request', - 'attachment block variable': 'tenant_repair_request', - 'typical role': 'plaintiff', - }) + interview_metadata.initializeObject("tenant_repair_request") + interview_metadata["tenant_repair_request"].update( + { + "title": "Tenant Repair Request Letter", + "short title": "Tenant Repair Request Letter", + "description": "Tenant Repair Request Letter", + "original_form": "", + "allowed courts": [ + "Boston Municipal Court", + "District Court", + "Housing Court", + "Superior Court", + ], + "categories": [ + "Housing", + ], + "logic block variable": "tenant_repair_request", + "attachment block variable": "tenant_repair_request", + "typical role": "plaintiff", + } + ) --- features: navigation: True @@ -39,8 +41,8 @@ sections: --- id: interview_order_tenant_repair_request code: | - user_role = 'plaintiff' - # mailing_method + user_role = "plaintiff" + # mailing_method set_parts(subtitle=str(users)) set_progress(12.5) users[0].email diff --git a/docassemble/HousingCodeChecklist/data/questions/Repair_Letter_Tenant_standalone.yml b/docassemble/HousingCodeChecklist/data/questions/Repair_Letter_Tenant_standalone.yml index 1609dad..31a0f59 100644 --- a/docassemble/HousingCodeChecklist/data/questions/Repair_Letter_Tenant_standalone.yml +++ b/docassemble/HousingCodeChecklist/data/questions/Repair_Letter_Tenant_standalone.yml @@ -20,7 +20,7 @@ code: | interview_order_tenant_repair_request preview_screen users[i].signature - download_tenant_repair_request + download_tenant_repair_request --- code: | al_form_type = "letter" diff --git a/docassemble/HousingCodeChecklist/data/questions/contempt_complaint_standalone.yml b/docassemble/HousingCodeChecklist/data/questions/contempt_complaint_standalone.yml index 1876166..0ed6902 100644 --- a/docassemble/HousingCodeChecklist/data/questions/contempt_complaint_standalone.yml +++ b/docassemble/HousingCodeChecklist/data/questions/contempt_complaint_standalone.yml @@ -26,8 +26,13 @@ code: | user_role = "plaintiff" --- code: | - allowed_courts = ["Boston Municipal Court","District Court","Housing Court","Superior Court"] - al_form_type = 'existing_case' + allowed_courts = [ + "Boston Municipal Court", + "District Court", + "Housing Court", + "Superior Court", + ] + al_form_type = "existing_case" --- code: | landlord_name_is_optional = False @@ -40,7 +45,7 @@ comment: | Controls order and branching logic for questions specific to this form id: interview_order_Contempt_Complaint code: | - nav.set_section('review_Contempt_Complaint') + nav.set_section("review_Contempt_Complaint") user_role = "plaintiff" users.gather() users.there_is_another @@ -72,7 +77,7 @@ code: | interview_order_Contempt_Complaint signature_date # Save anonymized interview statistics (customize the saved data below) - store_variables_snapshot(data={'zip': users[0].address.zip}) + store_variables_snapshot(data={"zip": users[0].address.zip}) Contempt_Complaint_preview_question basic_questions_signature_flow users[0].signature @@ -149,7 +154,7 @@ question: | % endif fields: - code: | - other_parties[i].name_fields(person_or_business='unsure') + other_parties[i].name_fields(person_or_business="unsure") --- id: information about the landlord question: | diff --git a/docassemble/HousingCodeChecklist/data/questions/customized_screens.yml b/docassemble/HousingCodeChecklist/data/questions/customized_screens.yml index 7ec0d7b..950728a 100644 --- a/docassemble/HousingCodeChecklist/data/questions/customized_screens.yml +++ b/docassemble/HousingCodeChecklist/data/questions/customized_screens.yml @@ -58,7 +58,9 @@ fields: depends on: - document_choice["sue_landlord"] code: | - landlord_name_is_optional = not screen_ll_knows_problem or not document_choice.get("sue_landlord") + landlord_name_is_optional = not screen_ll_knows_problem or not document_choice.get( + "sue_landlord" + ) if landlord_name_is_optional: ll_name_unknown = False --- @@ -188,7 +190,7 @@ validation code: | if ll_name_unknown: other_parties[i].name.first = "[ Landlord's Name ]" --- -id: tenant contact information +id: tenant contact information indexed question: | % if person_answering == "tenant": ${ users[i].familiar() }, what is your contact information? @@ -240,13 +242,19 @@ fields: disable others: True validation code: | if users[i].no_contact_method: - users[i].phone_number = users[i].mobile_number = users[i].email = "" - if (not showifdef('users[i].phone_number') and \ - (not showifdef('users[i].mobile_number')) and \ - (not showifdef('users[i].email')) and \ - (not users[i].no_contact_method) + users[i].phone_number = users[i].mobile_number = users[i].email = "" + if ( + not showifdef("users[i].phone_number") + and (not showifdef("users[i].mobile_number")) + and (not showifdef("users[i].email")) + and (not users[i].no_contact_method) ): - validation_error(word("You need to provide at least one contact method, or state that you do not have any."), field="users[i].mobile_number") + validation_error( + word( + "You need to provide at least one contact method, or state that you do not have any." + ), + field="users[i].mobile_number", + ) --- id: tenant contact information question: | @@ -300,13 +308,19 @@ fields: disable others: True validation code: | if users[0].no_contact_method: - users[0].phone_number = users[0].mobile_number = users[0].email = "" - if (not showifdef('users[0].phone_number') and \ - (not showifdef('users[0].mobile_number')) and \ - (not showifdef('users[0].email')) and \ - (not users[0].no_contact_method) + users[0].phone_number = users[0].mobile_number = users[0].email = "" + if ( + not showifdef("users[0].phone_number") + and (not showifdef("users[0].mobile_number")) + and (not showifdef("users[0].email")) + and (not users[0].no_contact_method) ): - validation_error(word("You need to provide at least one contact method, or state that you do not have any."), field="users[0].mobile_number") + validation_error( + word( + "You need to provide at least one contact method, or state that you do not have any." + ), + field="users[0].mobile_number", + ) --- id: landlord's contact information generic object: ALIndividual @@ -647,7 +661,8 @@ fields: We can text or share a link with your phone on the next screen - On a computer with my mouse: this_device - On the paper with a pen after I print the documents: sign_after_printing - - no label: users[0].states_above_true + - label: Affirm that the statements above are true + field: users[0].states_above_true datatype: checkboxes minlength: 1 choices: @@ -657,7 +672,8 @@ fields: You cannot keep going unless you did your best to tell the truth. js show if: | val("signature_choice") == "phone" || val("signature_choice") == "this_device" - - no label: users[0].states_above_true + - label: Certify service of the motion on the landlord + field: users[0].states_above_true datatype: checkboxes minlength: 1 choices: @@ -710,12 +726,17 @@ fields: --- code: | if len(bad_conditions[i].details.elements): - bad_conditions[i].min_date = min([c.start_date if not c.condition_existed_at_start else users[0].move_in_date for c in bad_conditions[i].details.elements.values()]) + bad_conditions[i].min_date = min( + [ + c.start_date if not c.condition_existed_at_start else users[0].move_in_date + for c in bad_conditions[i].details.elements.values() + ] + ) else: bad_conditions[i].min_date = today() --- code: | - tenant_repair_default_date = min([c.min_date for c in bad_conditions.elements.values()]) + tenant_repair_default_date = min([c.min_date for c in bad_conditions.elements.values()]) --- id: include citations? question: | @@ -762,7 +783,7 @@ content: | ############### --- code: | - tenant_repair_issue_date + tenant_repair_issue_date --- id: tenant_repair_issue_date question: | @@ -815,7 +836,7 @@ fields: ################################################################# --- code: | - repairs_request_date = tenant_repair_issue_date # From + repairs_request_date = tenant_repair_issue_date # From --- id: Issue s Description question: | @@ -1081,7 +1102,7 @@ help: | working from home, permitted construction may still be allowed) * Unsafe living conditions that your landlord isn't fixing - [Read more](https://www.masslegalhelp.org/housing-apartments-shelter/repairs-bad-conditions/your-right-decent-place-live) + [Read more about the right to a decent place to live](https://www.masslegalhelp.org/housing-apartments-shelter/repairs-bad-conditions/your-right-decent-place-live) --- ######################################### ## Petition to enforce Sanitary Code @@ -1098,6 +1119,7 @@ help: | # We will leave this form out of your final packet. #continue button field: kick_out #--- +id: review request housing inspection event: review_request_housing_inspection question: | Review your request for a housing inspection @@ -1390,7 +1412,10 @@ validation code: | if damage_calculation_method == "uptocode_calculation": tenant_time_estimate_denominator = 365 if tenant_percentage_estimate < 5: - validation_error("Select a percentage that is greater than 0", field="tenant_percentage_estimate") + validation_error( + "Select a percentage that is greater than 0", + field="tenant_percentage_estimate", + ) --- variable name: damage_tenant_severity_estimate_text use objects: True @@ -1709,7 +1734,9 @@ fields: show if: fees['Other cost'].waive validation code: | if len([fee for fee in fees if fees[fee].waive]) < 1: - validation_error("You need to choose at least one.", field="fees['Other cost'].waive") + validation_error( + "You need to choose at least one.", field="fees['Other cost'].waive" + ) --- template: what_fee_amount_should_i_write_template subject: | @@ -1981,9 +2008,14 @@ fields: field: users[0].jobs[i].is_self_employed datatype: yesno - code: | - users[0].jobs[i].employer.name_fields(person_or_business='unsure', show_if={'variable': 'users[0].jobs[i].is_self_employed', 'is': 'False'}) + users[0].jobs[i].employer.name_fields( + person_or_business="unsure", + show_if={"variable": "users[0].jobs[i].is_self_employed", "is": "False"}, + ) - code: | - users[0].jobs[i].employer.address.address_fields(show_if={'variable': 'users[0].jobs[i].is_self_employed', 'is': 'False'}) + users[0].jobs[i].employer.address.address_fields( + show_if={"variable": "users[0].jobs[i].is_self_employed", "is": "False"} + ) - Phone number: users[0].jobs[i].employer.phone_number required: False show if: @@ -2065,6 +2097,7 @@ fields: datatype: currency required: False --- +id: itemized job has other incomes or deductions generic object: ALItemizedJob question: | % if person_answering == "tenant": @@ -2081,6 +2114,7 @@ fields: datatype: yesnoradio --- #id: other itemized job income name +id: other itemized job income name generic object: ALItemizedJob question: | Other incomes @@ -2094,7 +2128,9 @@ fields: - Type of income: x.to_add.new_item_name validation code: | if x.to_add.new_item_name in x.to_add.complete_elements().keys(): - validation_error(f'You already told us about { job_items_names.get(x.to_add.new_item_name, x.to_add.new_item_name) } that pays { currency( x.to_add[ x.to_add.new_item_name ].value )}. Pick a different name.') + validation_error( + f"You already told us about { job_items_names.get(x.to_add.new_item_name, x.to_add.new_item_name) } that pays { currency( x.to_add[ x.to_add.new_item_name ].value )}. Pick a different name." + ) --- id: other itemized job reduction value generic object: ALItemizedJob @@ -2234,6 +2270,7 @@ subquestion: | field: review_income_screen --- +id: confirm itemized income can skip supplement question: | % if person_answering == "tenant": You might not need to complete this supplement @@ -2271,6 +2308,7 @@ fields: variable: confirm_can_skip_supplement is: false --- +id: edit itemized job deductions generic object: ALItemizedJob continue button field: x.to_subtract.revisit question: | @@ -2363,7 +2401,8 @@ question: | Does the tenant own a home? % endif fields: - - no label: user_owns_home + - label: Home ownership + field: user_owns_home datatype: yesnoradio - What is the value of the home?: user_home_value show if: user_owns_home @@ -2391,7 +2430,8 @@ question: | Does the tenant own a car? % endif fields: - - no label: user_owns_car + - label: Car ownership + field: user_owns_car datatype: yesnoradio - "Car year": user_car_year show if: user_owns_car @@ -2470,6 +2510,7 @@ fields: - no label: users[0].accounts.there_is_another datatype: yesnoradio --- +id: other property ownership question: | % if person_answering == "tenant": Do you own any property you haven't told us about? @@ -2615,4 +2656,4 @@ question: | What is the name of the tenant's ${ ordinal(i) } household member? % endif fields: - code: household[i].name_fields() \ No newline at end of file + code: household[i].name_fields() diff --git a/docassemble/HousingCodeChecklist/data/questions/discovery.yml b/docassemble/HousingCodeChecklist/data/questions/discovery.yml index d6cf905..a13ddd6 100644 --- a/docassemble/HousingCodeChecklist/data/questions/discovery.yml +++ b/docassemble/HousingCodeChecklist/data/questions/discovery.yml @@ -112,7 +112,7 @@ subquestion: | --- code: | # Backport a few variables just to be used for discovery calculations - screen_tenant_facing_eviction_is_notice = screen_tenant_facing_eviction["notice only"] + screen_tenant_facing_eviction_is_notice = screen_tenant_facing_eviction["notice only"] screen_tenant_facing_eviction_is_pending = screen_tenant_facing_eviction["pending"] screen_tenant_facing_eviction_is_case = screen_tenant_facing_eviction["has case"] screen_tenant_facing_eviction_is_closed = screen_tenant_facing_eviction["closed"] \ No newline at end of file diff --git a/docassemble/HousingCodeChecklist/data/questions/feedback.yml b/docassemble/HousingCodeChecklist/data/questions/feedback.yml index cf5e212..86375db 100644 --- a/docassemble/HousingCodeChecklist/data/questions/feedback.yml +++ b/docassemble/HousingCodeChecklist/data/questions/feedback.yml @@ -43,23 +43,23 @@ image sets: mandatory: True code: | intro - if reason == 'bug': + if reason == "bug": bug_details issue_template = bug_report - elif reason == 'confusing': + elif reason == "confusing": confusing_details issue_template = confusing_report - elif reason == 'else': + elif reason == "else": other_feedback issue_template = other_feedback_report - elif reason == 'help': + elif reason == "help": gentle_exit else: - value(reason) + value(reason) issue_template = generic_report[reason] send_to_github prevent_going_back() - store_variables_snapshot(persistent=True) # this is mostly just for backup reasons + store_variables_snapshot(persistent=True) # this is mostly just for backup reasons end_results --- code: github_user = url_args.get('github_user', default_github_user_or_organization) @@ -73,15 +73,15 @@ code: question_id = url_args.get('question_id') code: package_version = url_args.get('package_version') --- code: | - if not task_performed('sent to github', persistent=True): + if not task_performed("sent to github", persistent=True): if github_user in allowed_github_users: issue_url = make_github_issue(github_user, github_repo, template=issue_template) - mark_task_as_performed('sent to github', persistent=True) + mark_task_as_performed("sent to github", persistent=True) send_to_github = True --- if: | not get_config('debug') -id: intro +id: public feedback intro question: | Tell us how we're doing decoration: opinion @@ -111,7 +111,7 @@ continue button field: intro --- if: | get_config('debug') -id: intro +id: tester feedback intro question: | Tester feedback form decoration: opinion @@ -180,11 +180,11 @@ fields: code: maturity_levels show if: code: | - get_config('debug') + get_config("debug") - Who are you? Just tell us your name or github username, not email. This will be public.: user_contact_info show if: code: | - get_config('debug') + get_config("debug") - label: | **Tell us the steps that you followed before you noticed the problem.** [BR] For example: 1. I opened the interview. 2. On the first page, I put in just my first name. 3. On the second page, I put in my phone number. 4. I pressed a button to go to the next page. @@ -231,16 +231,16 @@ fields: field: page_title show if: code: | - not question_id + not question_id - When should this fix be implemented?: maturity_level code: maturity_levels show if: code: | - get_config('debug') + get_config("debug") - Who are you? Just tell us your name or github username, not email. This will be public.: user_contact_info show if: code: | - get_config('debug') + get_config("debug") - label: | **What was confusing or missing information? ** field: confusing_details @@ -273,7 +273,7 @@ fields: - Who are you? Just tell us your name or github username, not email. This will be public.: user_contact_info show if: code: | - get_config('debug') + get_config("debug") - Other (please specify): user_type show if: variable: user_type @@ -294,16 +294,16 @@ fields: field: page_title show if: code: | - not question_id + not question_id - When should this fix be implemented?: maturity_level code: maturity_levels show if: code: | - get_config('debug') + get_config("debug") - Who are you? Just tell us your name or github username, not email. This will be public.: user_contact_info show if: code: | - get_config('debug') + get_config("debug") - label: | **What language fix is needed? ** field: language @@ -326,16 +326,16 @@ fields: field: page_title show if: code: | - not question_id + not question_id - When should this fix be implemented?: maturity_level code: maturity_levels show if: code: | - get_config('debug') + get_config("debug") - Who are you? Just tell us your name or github username, not email. This will be public.: user_contact_info show if: code: | - get_config('debug') + get_config("debug") - label: | **What logic fix is needed? ** field: logic @@ -356,11 +356,11 @@ fields: code: maturity_levels show if: code: | - get_config('debug') + get_config("debug") - Who are you? Just tell us your name or github username, not email. This will be public.: user_contact_info show if: code: | - get_config('debug') + get_config("debug") - label: | **What enhancement do you propose? ** field: enhancement @@ -518,4 +518,4 @@ content: | Package version | `${ package_version }` % endif Maturity target | ${ maturity_level } - Tester contact info | ${ user_contact_info } \ No newline at end of file + Tester contact info | ${ user_contact_info } diff --git a/docassemble/HousingCodeChecklist/data/questions/housing_code_interview.yml b/docassemble/HousingCodeChecklist/data/questions/housing_code_interview.yml index 413a0ef..2128616 100644 --- a/docassemble/HousingCodeChecklist/data/questions/housing_code_interview.yml +++ b/docassemble/HousingCodeChecklist/data/questions/housing_code_interview.yml @@ -145,10 +145,10 @@ code: | users[0].attorney.target_number = 0 intro_terms_of_use if initial_action_selection == "help_in_court": - nav.set_section('review_conditions') + nav.set_section("review_conditions") kind_of_lawsuit set_document_choice_by_lawsuit_kind - if initial_screen_tenant_facing_eviction in('pending', 'has case'): + if initial_screen_tenant_facing_eviction in ("pending", "has case"): warn_eviction if kind_of_lawsuit.any_true("get_emergency_repairs", "past_repair_needs"): if not tenant_sent_ll_notice: @@ -156,19 +156,19 @@ code: | if not tenant_called_inspector: add_inspection_letter interview_order_navigate_conditions - + snapshot_interview_state - + if initial_action_selection in ["document_by_room", "give_notice"]: interview_order_navigate_conditions - nav.set_section('main_triage_screen') + nav.set_section("main_triage_screen") screen_ll_knows_problem - reconsider('snapshot_interview_state') - nav.set_section('provide_details') - + reconsider("snapshot_interview_state") + nav.set_section("provide_details") + if not kind_of_lawsuit["file_contempt_complaint"] and not len(kind_of_lawsuit) == 1: - include_conditions_in_complaint # Evaluate so it is available in complaint template - + include_conditions_in_complaint # Evaluate so it is available in complaint template + if not screen_ll_knows_problem: reconsider("al_nav_sections") nav.set_section("review_tenant_repair_request") @@ -178,38 +178,38 @@ code: | else: explain_documents reconsider("al_nav_sections") - if screen_ll_knows_problem and document_choice['get_report']: + if screen_ll_knows_problem and document_choice["get_report"]: nav.set_section("review_checklist") for user in users.complete_elements(): user.email other_parties.gather() - if screen_ll_knows_problem and document_choice['tell_landlord']: + if screen_ll_knows_problem and document_choice["tell_landlord"]: nav.set_section("review_tenant_repair_request") for user in users.complete_elements(): user.email interview_order_tenant_repair_request - #if screen_ll_knows_problem and document_choice['share_with_tenants']: + # if screen_ll_knows_problem and document_choice['share_with_tenants']: # nav.set_section("share_with_tenants") # explain_sharing # store_for_tenant_sharing - if screen_ll_knows_problem and document_choice['organize_tenants']: + if screen_ll_knows_problem and document_choice["organize_tenants"]: nav.set_section("organizing_interstitial") try: users[0].address.geocode() except: pass organizing_interstitial - if screen_ll_knows_problem and document_choice['get_inspection']: + if screen_ll_knows_problem and document_choice["get_inspection"]: nav.set_section("review_request_housing_inspection") for user in users.complete_elements(): user.email interview_order_request_housing_inspection - if screen_ll_knows_problem and document_choice['demand_letter_93a']: + if screen_ll_knows_problem and document_choice["demand_letter_93a"]: nav.set_section("review_Repair_Demand_Letter") for user in users.complete_elements(): user.email interview_order_Repair_Demand_Letter - if screen_ll_knows_problem and document_choice['sue_landlord']: + if screen_ll_knows_problem and document_choice["sue_landlord"]: nav.set_section("review_verified_complaint_and_motion") for user in users.complete_elements(): user.email @@ -219,19 +219,19 @@ code: | user.email other_parties.gather() interview_order_contempt_complaint - - nav.set_section('review_and_sign') + + nav.set_section("review_and_sign") uptocode_review basic_questions_signature_flow - + if document_choice["get_inspection"] and users[0].address.city.lower() == "chelsea": direct_inspection_email else: direct_inspection_email = False - + reached_download_screen = True - reconsider('snapshot_interview_state') - nav.set_section('download_conditions_checklist_docs') + reconsider("snapshot_interview_state") + nav.set_section("download_conditions_checklist_docs") # Kick off the background assembly tasks tasks_to_monitor = [] @@ -240,10 +240,16 @@ code: | tasks_to_monitor.append(housing_code_bundle.generate_downloads_with_docx_task) tenant_repair_letter_bundle.generate_downloads_with_docx_task tasks_to_monitor.append(tenant_repair_letter_bundle.generate_downloads_with_docx_task) - if screen_ll_knows_problem and document_choice['sue_landlord'] or document_choice["contempt_complaint"]: + if ( + screen_ll_knows_problem + and document_choice["sue_landlord"] + or document_choice["contempt_complaint"] + ): affirmative_complaint_bundle.generate_downloads_with_docx_task - tasks_to_monitor.append(affirmative_complaint_bundle.generate_downloads_with_docx_task) - + tasks_to_monitor.append( + affirmative_complaint_bundle.generate_downloads_with_docx_task + ) + if not all(task.ready() for task in tasks_to_monitor): al_download_waiting_screen @@ -253,10 +259,12 @@ code: | if person_answering == "attorney" and representation_type == "entering_appearance": signature_fields = ["users[0].attorney.signature"] else: - signature_fields = [user.attr_name("signature") for user in users.complete_elements()] + signature_fields = [ + user.attr_name("signature") for user in users.complete_elements() + ] --- code: | - nav.set_section('review_conditions') + nav.set_section("review_conditions") bad_conditions["common problems"].claims for claim in bad_conditions["common problems"].claims.true_values(): bad_conditions["common problems"].details[claim].condition_existed_at_start @@ -266,8 +274,16 @@ code: | if bad_conditions.count_conditions() > 0: # This is a bit of a workaround for room in bad_conditions: - for condition in bad_conditions[room].claims.true_values().difference(bad_conditions.get("common problems",DAEmpty()).claims.true_values()): - bad_conditions[room].details[condition].condition_existed_at_start + for condition in ( + bad_conditions[room] + .claims.true_values() + .difference( + bad_conditions.get( + "common problems", DAEmpty() + ).claims.true_values() + ) + ): + bad_conditions[room].details[condition].condition_existed_at_start review_conditions else: warn_add_conditions @@ -483,6 +499,7 @@ comment: | # # --- +id: terms of use for court continue button field: intro_and_terms_of_use_in_court question: | Get an order from a judge @@ -695,31 +712,29 @@ modules: --- code: | stuff_to_snapshot = { - 'start_time': str(start_time().format('yyyy-MM-dd')), - 'address_city': showifdef('users[0].address.city'), - 'zip': showifdef('users[0].address.zip'), - 'language': user_language, - } - try: - stuff_to_snapshot['document_choice'] = comma_list(document_choice.true_values()) - stuff_to_snapshot['reached_document_choice_screen'] = True + "start_time": str(start_time().format("yyyy-MM-dd")), + "address_city": showifdef("users[0].address.city"), + "zip": showifdef("users[0].address.zip"), + "language": user_language, + } + try: + stuff_to_snapshot["document_choice"] = comma_list(document_choice.true_values()) + stuff_to_snapshot["reached_document_choice_screen"] = True except: - pass + pass flattened_conditions = [] if defined("bad_conditions") and include_conditions_in_complaint: for category in bad_conditions.complete_elements(): flattened_conditions.extend(bad_conditions[category].claims.true_values()) - stuff_to_snapshot['bad_conditions'] = comma_list(flattened_conditions) - if defined('reached_download_screen'): - stuff_to_snapshot['reached_download_screen'] = True - + stuff_to_snapshot["bad_conditions"] = comma_list(flattened_conditions) + if defined("reached_download_screen"): + stuff_to_snapshot["reached_download_screen"] = True + log(stuff_to_snapshot) - store_variables_snapshot( - data=stuff_to_snapshot, persistent=True - ) + store_variables_snapshot(data=stuff_to_snapshot, persistent=True) snapshot_interview_state = True - log('saved the snapshot') + log("saved the snapshot") --- id: launch made continue button field: launch_made @@ -1039,7 +1054,11 @@ depends on: code: | bad_conditions[i].claims bad_conditions[i].df - for condition in bad_conditions[i].claims.true_values().difference(bad_conditions.get("common problems",DAEmpty()).claims.true_values()): + for condition in ( + bad_conditions[i] + .claims.true_values() + .difference(bad_conditions.get("common problems", DAEmpty()).claims.true_values()) + ): bad_conditions[i].details[condition].condition_existed_at_start bad_conditions[i].complete = True --- @@ -1418,7 +1437,7 @@ subquestion: | field: bad_conditions.new_item_name buttons: code: | - [button for button in available_buttons if next(iter(button)) not in bad_conditions ] + [button for button in available_buttons if next(iter(button)) not in bad_conditions] back button label: | Back under: | @@ -1495,10 +1514,16 @@ fields: datatype: checkboxes required: False code: | - conditions_with_help(dataloader, "24 hours", search_column="Deadline", language=al_user_language) + conditions_with_help( + dataloader, "24 hours", search_column="Deadline", language=al_user_language + ) default: code: | - bad_conditions[i].claims.true_values() if defined('bad_conditions[i].claims') else [] + bad_conditions["common problems"].claims.true_values() + ( + bad_conditions[i].claims.true_values() + if defined("bad_conditions[i].claims") + else [] + bad_conditions["common problems"].claims.true_values() + ) --- template: emergency_sanitary_code_template subject: | @@ -1534,7 +1559,11 @@ fields: conditions_with_help(dataloader, i, language=al_user_language) default: code: | - bad_conditions[i].claims.true_values() if defined('bad_conditions[i].claims') else [] + bad_conditions["common problems"].claims.true_values() + ( + bad_conditions[i].claims.true_values() + if defined("bad_conditions[i].claims") + else [] + bad_conditions["common problems"].claims.true_values() + ) --- template: sanitary_code_explanation_template subject: | @@ -1562,11 +1591,14 @@ subquestion: | Select "yes" if you want to look at problems in another room or category. Select "no" if you want to skip other rooms and categories and continue to a solution. -yesno: bad_conditions.there_is_another +fields: + - label: List problems in another room or category + field: bad_conditions.there_is_another + datatype: yesno --- code: | # available buttons doesn't include the "short" list - if len(bad_conditions.complete_elements()) >= len(available_buttons) + 1: + if len(bad_conditions.complete_elements()) >= len(available_buttons) + 1: bad_conditions.there_is_another = False --- code: | @@ -1577,10 +1609,14 @@ depends on: - bad_conditions[i].claims code: | if i != "common problems": - overlapping_conditions = bad_conditions.get("common problems",DAEmpty()).claims.true_values() + overlapping_conditions = bad_conditions.get( + "common problems", DAEmpty() + ).claims.true_values() else: overlapping_conditions = [] - bad_conditions[i].df = dataloader.load_rows(bad_conditions[i].claims.true_values().difference(overlapping_conditions)) + bad_conditions[i].df = dataloader.load_rows( + bad_conditions[i].claims.true_values().difference(overlapping_conditions) + ) --- continue button field: review_conditions id: review conditions @@ -1660,6 +1696,7 @@ content: | If you are done selecting, listing, and editing problems by room and category, continue to start working on a solution. --- +id: warn no conditions added event: warn_add_conditions question: | You haven't added any problems yet @@ -1884,7 +1921,6 @@ fields: default: code: | ["get_report", "sue_landlord"] if kind_of_lawsuit.any_true() else ["get_report"] - - no label: document_choice required: False datatype: checkboxes @@ -1931,7 +1967,13 @@ fields: none of the above: False default: code: | - ["get_report", "contempt_complaint"] if kind_of_lawsuit["file_contempt_complaint"] else ["get_report", "sue_landlord"] if kind_of_lawsuit.any_true() else ["get_report"] + ( + ["get_report", "contempt_complaint"] + if kind_of_lawsuit["file_contempt_complaint"] + else ( + ["get_report", "sue_landlord"] if kind_of_lawsuit.any_true() else ["get_report"] + ) + ) validation code: | if screen_ll_knows_problem and len(document_choice.true_values()) < 1: validation_error("Pick at least one.", field="document_choice") @@ -1965,16 +2007,13 @@ code: | screen_contacted_housing_inspector = tenant_called_inspector if not tenant_called_inspector: document_choice["get_inspection"] = add_inspection_letter - if ( - not tenant_sent_ll_notice - and confirm_suing_choice == "give_notice_first" - ): + if not tenant_sent_ll_notice and confirm_suing_choice == "give_notice_first": screen_ll_knows_problem = False document_choice["sue_landlord"] = False document_choice["tell_landlord"] = True else: document_choice["sue_landlord"] = True - elif kind_of_lawsuit["file_contempt_complaint"]: # shouldn't start a new lawsuit + elif kind_of_lawsuit["file_contempt_complaint"]: # shouldn't start a new lawsuit screen_contacted_housing_inspector = None initial_screen_tenant_facing_eviction = None screen_ll_knows_problem = True @@ -2015,10 +2054,20 @@ code: | interview_order_request_housing_inspection = True --- code: | - if users[0].normalized_address().city.lower() in ['boston', 'charlestown', 'dorchester','roxbury', 'jamaica plain', 'brighton', 'allston']: + if users[0].normalized_address().city.lower() in [ + "boston", + "charlestown", + "dorchester", + "roxbury", + "jamaica plain", + "brighton", + "allston", + ]: inspector_information = inspector_loader.load_row("Boston").fillna("") else: - inspector_information = inspector_loader.load_row(users[0].normalized_address().city).fillna("") + inspector_information = inspector_loader.load_row( + users[0].normalized_address().city + ).fillna("") if inspector_information.empty: inspector_information = DAEmpty() --- @@ -2087,9 +2136,11 @@ fields: id: direct_inspection_email_success code: | if direct_inspection_email == True: - chelsea_email = "housingcomplaints@chelseama.gov" - # chelsea_email = "quinten@lemmalegal.com" - direct_inspection_email_success = inspector_bundle.send_email(to=chelsea_email, template=chelsea_inspection_email_template) + chelsea_email = "housingcomplaints@chelseama.gov" + # chelsea_email = "quinten@lemmalegal.com" + direct_inspection_email_success = inspector_bundle.send_email( + to=chelsea_email, template=chelsea_inspection_email_template + ) --- template: chelsea_inspection_email_template subject: | @@ -2165,7 +2216,7 @@ subquestion: | A unit can be {condemned} in these circumstances. - Find legal aid organizations in your area by answering a few questions [here](https://masslrf.org/en/triage/start/housing). + [Find legal aid organizations in your area](https://masslrf.org/en/triage/start/housing) by answering a few questions. % endif

To call the housing inspector for your city or town

@@ -2186,7 +2237,7 @@ subquestion: | A unit can be {condemned} in these circumstances. - Find legal aid organizations in the tenant's area by answering a few questions [here](https://masslrf.org/en/triage/start/housing). + [Find legal aid organizations in the tenant's area](https://masslrf.org/en/triage/start/housing) by answering a few questions. % endif

To call the housing inspector for your city or town

@@ -2347,7 +2398,7 @@ fields: - Day: bad_conditions[i].details[j].start_day datatype: integer code: | - range(1,31+1) + range(1, 31 + 1) required: False show if: variable: bad_conditions[i].details[j].condition_existed_at_start @@ -2398,24 +2449,45 @@ fields: validation code: | # Transform the approximate date into a real DADateTime object if not bad_conditions[i].details[j].condition_existed_at_start: - bad_conditions[i].details[j].start_date = today().replace(day=1, month=1) # otherwise if the current day is past 28 might get a value error + bad_conditions[i].details[j].start_date = today().replace( + day=1, month=1 + ) # otherwise if the current day is past 28 might get a value error try: if bad_conditions[i].details[j].start_year: - bad_conditions[i].details[j].start_date = bad_conditions[i].details[j].start_date.replace(year=int(bad_conditions[i].details[j].start_year)) - if int(bad_conditions[i].details[j].start_month) in range(1,12): - bad_conditions[i].details[j].start_date = bad_conditions[i].details[j].start_date.replace(month=int(bad_conditions[i].details[j].start_month)) + bad_conditions[i].details[j].start_date = ( + bad_conditions[i] + .details[j] + .start_date.replace(year=int(bad_conditions[i].details[j].start_year)) + ) + if int(bad_conditions[i].details[j].start_month) in range(1, 12): + bad_conditions[i].details[j].start_date = ( + bad_conditions[i] + .details[j] + .start_date.replace(month=int(bad_conditions[i].details[j].start_month)) + ) bad_conditions[i].details[j].approximate_month = False else: - bad_conditions[i].details[j].start_date = bad_conditions[i].details[j].start_date.replace(month=1) + bad_conditions[i].details[j].start_date = ( + bad_conditions[i].details[j].start_date.replace(month=1) + ) bad_conditions[i].details[j].approximate_month = True - if int(bad_conditions[i].details[j].start_day) in range(1,31): - bad_conditions[i].details[j].start_date = bad_conditions[i].details[j].start_date.replace(day=int(bad_conditions[i].details[j].start_day)) + if int(bad_conditions[i].details[j].start_day) in range(1, 31): + bad_conditions[i].details[j].start_date = ( + bad_conditions[i] + .details[j] + .start_date.replace(day=int(bad_conditions[i].details[j].start_day)) + ) bad_conditions[i].details[j].approximate_day = False else: - bad_conditions[i].details[j].start_date = bad_conditions[i].details[j].start_date.replace(day=1) + bad_conditions[i].details[j].start_date = ( + bad_conditions[i].details[j].start_date.replace(day=1) + ) bad_conditions[i].details[j].approximate_day = True except ValueError: - validation_error(f"The date {bad_conditions[i].details[j].start_month or 1}/{bad_conditions[i].details[j].start_day or 1}/{bad_conditions[i].details[j].start_year} is not a valid date. Check the day of the month or leave it blank.", field="bad_conditions[i].details[j].start_day") + validation_error( + f"The date {bad_conditions[i].details[j].start_month or 1}/{bad_conditions[i].details[j].start_day or 1}/{bad_conditions[i].details[j].start_year} is not a valid date. Check the day of the month or leave it blank.", + field="bad_conditions[i].details[j].start_day", + ) --- if: | not document_choice['sue_landlord'] @@ -2485,12 +2557,14 @@ subquestion: | themself or to send them to someone else. The tenant should download and email a copy of each document to themself or a trusted friend or family member so that they always have a copy and can **print** them if they need to in the future. % endif --- +id: explain sharing information continue button field: explain_sharing question: | Thank you for sharing your information subquestion: | Your name and apartment number will stay private. --- +id: review housing code checklist event: review_checklist question: | Edit answers on your housing code checklist @@ -2898,38 +2972,58 @@ code: | feedback_form = user_info().package + ":feedback.yml" --- code: | - organize_tenants_attachment.enabled = screen_ll_knows_problem and document_choice['organize_tenants'] + organize_tenants_attachment.enabled = ( + screen_ll_knows_problem and document_choice["organize_tenants"] + ) --- code: | conditions_report_attachment.enabled = ( - action_argument('enabled') - or (screen_ll_knows_problem and document_choice['get_report'] and include_conditions_in_complaint) + action_argument("enabled") + or ( + screen_ll_knows_problem + and document_choice["get_report"] + and include_conditions_in_complaint + ) or direct_inspection_email ) --- code: | - request_housing_inspection_attachment.enabled = screen_ll_knows_problem and document_choice['get_inspection'] or direct_inspection_email + request_housing_inspection_attachment.enabled = ( + screen_ll_knows_problem + and document_choice["get_inspection"] + or direct_inspection_email + ) --- code: | - tenant_repair_request_attachment.enabled = not screen_ll_knows_problem or document_choice['tell_landlord'] + tenant_repair_request_attachment.enabled = ( + not screen_ll_knows_problem or document_choice["tell_landlord"] + ) --- code: | - letter_to_notify_landlord_instructions_attachment.enabled = not screen_ll_knows_problem or document_choice['tell_landlord'] + letter_to_notify_landlord_instructions_attachment.enabled = ( + not screen_ll_knows_problem or document_choice["tell_landlord"] + ) --- code: | - Repair_Demand_Letter_attachment.enabled = screen_ll_knows_problem and document_choice['demand_letter_93a'] + Repair_Demand_Letter_attachment.enabled = ( + screen_ll_knows_problem and document_choice["demand_letter_93a"] + ) --- code: | - Repair_Demand_Letter_post_interview_instructions.enabled = screen_ll_knows_problem and document_choice['demand_letter_93a'] + Repair_Demand_Letter_post_interview_instructions.enabled = ( + screen_ll_knows_problem and document_choice["demand_letter_93a"] + ) --- code: | verified_complaint_attachment.enabled = document_choice["sue_landlord"] --- code: | - next_steps_for_court_attachment.enabled = document_choice['sue_landlord'] + next_steps_for_court_attachment.enabled = document_choice["sue_landlord"] --- code: | - verified_complaint_attachment.enabled = screen_ll_knows_problem and document_choice['sue_landlord'] + verified_complaint_attachment.enabled = ( + screen_ll_knows_problem and document_choice["sue_landlord"] + ) --- code: | temporary_order.enabled = verified_complaint_attachment.enabled @@ -2947,7 +3041,9 @@ code: | order_of_notice.enabled = False --- code: | - contempt_complaint.enabled = screen_ll_knows_problem and document_choice['contempt_complaint'] + contempt_complaint.enabled = ( + screen_ll_knows_problem and document_choice["contempt_complaint"] + ) --- objects: - inspector_bundle: ALDocumentBundle.using(elements=[ @@ -2986,7 +3082,9 @@ attachment: docx template file: next_steps_request_for_repairs_letter.docx --- code: | - request_housing_inspection_instructions_attachment.enabled = request_housing_inspection_attachment.enabled + request_housing_inspection_instructions_attachment.enabled = ( + request_housing_inspection_attachment.enabled + ) --- objects: - housing_code_bundle: ALDocumentBundle.using(elements=[ @@ -3154,7 +3252,7 @@ subquestion: | 1. Your unit is {overcrowded}. 1. Your unit is {uninhabitable}. - Find legal aid organizations in your area by answering a few questions [here](https://masslrf.org/en/triage/start/housing). + [Find legal aid organizations in your area](https://masslrf.org/en/triage/start/housing) by answering a few questions. % else: A unit can be {condemned} in certain circumstances. @@ -3164,5 +3262,5 @@ subquestion: | 1. Their unit is {overcrowded}. 1. Their unit is {uninhabitable}. - Find legal aid organizations in the tenant's area by answering a few questions [here](https://masslrf.org/en/triage/start/housing). - % endif \ No newline at end of file + [Find legal aid organizations in the tenant's area](https://masslrf.org/en/triage/start/housing) by answering a few questions. + % endif diff --git a/docassemble/HousingCodeChecklist/data/questions/language.yml b/docassemble/HousingCodeChecklist/data/questions/language.yml index 012a257..20a9a15 100644 --- a/docassemble/HousingCodeChecklist/data/questions/language.yml +++ b/docassemble/HousingCodeChecklist/data/questions/language.yml @@ -337,7 +337,9 @@ objects: - letter_to_notify_landlord_instructions_attachment_es: ALDocument.using(title="Instrucciones para notificar al arrendador", filename="next_steps_request_for_repairs_letter.docx", has_addendum=False) --- code: | - next_steps_for_court_attachment_es.enabled = (al_user_language == "es") and next_steps_for_court_attachment.enabled + next_steps_for_court_attachment_es.enabled = ( + al_user_language == "es" + ) and next_steps_for_court_attachment.enabled --- attachments: - name: Tus próximos pasos en corte @@ -347,7 +349,9 @@ attachments: docx template file: next_steps_for_courtes-419.docx --- code: | - verified_complaint_attachment_es.enabled = (al_user_language == "es") and verified_complaint_attachment.enabled + verified_complaint_attachment_es.enabled = ( + al_user_language == "es" + ) and verified_complaint_attachment.enabled --- attachments: - name: Demanda verificada @@ -357,7 +361,9 @@ attachments: docx template file: verified_complaintes-419.docx --- code: | - motion_for_injunctive_relief_attachment_es.enabled = (al_user_language == "es") and motion_for_injunctive_relief_attachment.enabled + motion_for_injunctive_relief_attachment_es.enabled = ( + al_user_language == "es" + ) and motion_for_injunctive_relief_attachment.enabled --- attachments: - name: Moción para alivio cautelar @@ -367,7 +373,9 @@ attachments: docx template file: motion_for_injunctive_reliefes-419.docx --- code: | - Repair_Demand_Letter_post_interview_instructions_es.enabled = (al_user_language == "es") and Repair_Demand_Letter_post_interview_instructions.enabled + Repair_Demand_Letter_post_interview_instructions_es.enabled = ( + al_user_language == "es" + ) and Repair_Demand_Letter_post_interview_instructions.enabled --- attachments: - name: Instrucciones posteriores a la entrevista de la carta de demanda de reparación @@ -377,7 +385,9 @@ attachments: docx template file: next_steps_demand_letteres-419.docx --- code: | - request_housing_inspection_instructions_attachment_es.enabled = (al_user_language == "es") and request_housing_inspection_instructions_attachment.enabled + request_housing_inspection_instructions_attachment_es.enabled = ( + al_user_language == "es" + ) and request_housing_inspection_instructions_attachment.enabled --- attachments: - name: Instrucciones para solicitar inspección de vivienda @@ -387,7 +397,9 @@ attachments: docx template file: next_steps_inspection_request_letteres-419.docx --- code: | - letter_to_notify_landlord_instructions_attachment_es.enabled = (al_user_language == "es") and letter_to_notify_landlord_instructions_attachment.enabled + letter_to_notify_landlord_instructions_attachment_es.enabled = ( + al_user_language == "es" + ) and letter_to_notify_landlord_instructions_attachment.enabled --- attachments: - name: Instrucciones para notificar al arrendador diff --git a/docassemble/HousingCodeChecklist/data/questions/load_answers.yml b/docassemble/HousingCodeChecklist/data/questions/load_answers.yml index 953675b..7e3eaac 100644 --- a/docassemble/HousingCodeChecklist/data/questions/load_answers.yml +++ b/docassemble/HousingCodeChecklist/data/questions/load_answers.yml @@ -45,14 +45,23 @@ objects: - uptocode_logo: DAStaticFile.using(filename="horiztonal-white1.5x_blue.svg") --- code: | - answers = get_saved_interview_list(filename=f"{user_info().package}:housing_code_interview.yml", exclude_newly_started_sessions=True) + answers = get_saved_interview_list( + filename=f"{user_info().package}:housing_code_interview.yml", + exclude_newly_started_sessions=True, + ) first_answer = dict(next(iter(answers))) --- code: | if len(answers) == 1: - response(url=interview_url(i=f"{user_info().package}:housing_code_interview.yml", session=first_answer.get("key"))) + response( + url=interview_url( + i=f"{user_info().package}:housing_code_interview.yml", + session=first_answer.get("key"), + ) + ) load_answers --- +id: load saved UpToCode session mandatory: True event: load_answers question: | diff --git a/docassemble/HousingCodeChecklist/data/questions/verified_complaint_and_motions_standalone.yml b/docassemble/HousingCodeChecklist/data/questions/verified_complaint_and_motions_standalone.yml index 9dd1d84..a08a32c 100644 --- a/docassemble/HousingCodeChecklist/data/questions/verified_complaint_and_motions_standalone.yml +++ b/docassemble/HousingCodeChecklist/data/questions/verified_complaint_and_motions_standalone.yml @@ -18,7 +18,7 @@ metadata: - Sofija Belajcic --- code: | - interview_metadata['main_interview_key'] = 'verified_complaint_and_motions' + interview_metadata["main_interview_key"] = "verified_complaint_and_motions" --- code: | # This controls the default country and list of states in address field questions @@ -29,13 +29,13 @@ code: | AL_DEFAULT_STATE = "MA" --- code: | - github_repo_name = 'docassemble-VerifiedComplaintAndMotions' + github_repo_name = "docassemble-VerifiedComplaintAndMotions" --- code: | interview_short_title = "File a Verified Complaint Form" --- code: | - al_form_type = 'starts_case' + al_form_type = "starts_case" --- code: | landlord_name_is_optional = False @@ -58,7 +58,7 @@ code: | interview_order_verified_complaint_and_motions signature_date # Save anonymized interview statistics (customize the saved data below) - store_variables_snapshot(data={'zip': users[0].address.zip}) + store_variables_snapshot(data={"zip": users[0].address.zip}) verified_complaint_and_motions_preview_question basic_questions_signature_flow verified_complaint_and_motions_download @@ -129,4 +129,6 @@ objects: - al_court_bundle: ALDocumentBundle.using(elements=[verified_complaint_and_motions_attachment], filename="verified_complaint_and_motions", title="All forms to download for your records", enabled=True) --- code: | - verified_complaint_and_motions_attachment.enabled = screen_ll_knows_problem and document_choice['sue_landlord'] \ No newline at end of file + verified_complaint_and_motions_attachment.enabled = ( + screen_ll_knows_problem and document_choice["sue_landlord"] + ) \ No newline at end of file diff --git a/docassemble/HousingCodeChecklist/data/questions/verified_complaint_and_motions_to_include.yml b/docassemble/HousingCodeChecklist/data/questions/verified_complaint_and_motions_to_include.yml index 5b597d2..a2622f9 100644 --- a/docassemble/HousingCodeChecklist/data/questions/verified_complaint_and_motions_to_include.yml +++ b/docassemble/HousingCodeChecklist/data/questions/verified_complaint_and_motions_to_include.yml @@ -39,8 +39,8 @@ id: interview_order_verified_complaint_and_motions code: | # Set the allowed courts for this interview allowed_courts = interview_metadata["verified_complaint_and_motions"]["allowed courts"] - user_role = 'plaintiff' - user_ask_role = 'plaintiff' + user_role = "plaintiff" + user_ask_role = "plaintiff" File_a_Verified_Complaint_Form users[0].email users.gather() @@ -53,7 +53,7 @@ code: | confirm_ask_for_damages update_ask_for_damages verified_complaint_claims.gathered - tenant_gets_rent_subsidy # from Repair_Demand_letter_to_include.yml + tenant_gets_rent_subsidy # from Repair_Demand_letter_to_include.yml if complaint_ask_for_damages: tenant_unit_rent if tenant_gets_rent_subsidy and tenant_subsidy_is_voucher: @@ -70,13 +70,13 @@ code: | claim_jurytrial verified_complaint_wants_fee_waiver if verified_complaint_wants_fee_waiver == "wants_fee_waiver": - document_choice["fee_waiver"] = True - reconsider("al_nav_sections") - nav.set_section("review_fee_waiver") - set_fee_waiver_defaults - case_name - docket_numbers - ask_affidavit_questions + document_choice["fee_waiver"] = True + reconsider("al_nav_sections") + nav.set_section("review_fee_waiver") + set_fee_waiver_defaults + case_name + docket_numbers + ask_affidavit_questions service_method interview_order_verified_complaint_and_motions = True --- @@ -91,7 +91,7 @@ code: | customize_discovery_choice if customize_discovery_choice == "customize_discovery": customize_discovery_requests - + interview_order_discovery = True --- code: | @@ -111,7 +111,11 @@ code: | motion_for_injunctive_relief_attachment.enabled = verified_complaint_attachment.enabled --- code: | - affidavitofindigency_attachment.enabled = document_choice['sue_landlord'] and verified_complaint_wants_fee_waiver == "wants_fee_waiver" and is_indigent + affidavitofindigency_attachment.enabled = ( + document_choice["sue_landlord"] + and verified_complaint_wants_fee_waiver == "wants_fee_waiver" + and is_indigent + ) --- comment: | This question is used to introduce your interview. Please customize @@ -131,18 +135,20 @@ code: | elif trial_court.department in ["District Court", "Boston Municipal Court"]: verified_complaint_tro_fee = 0 verified_complaint_entry_of_action_Fee = 195 - else: # Superior Court + else: # Superior Court verified_complaint_tro_fee = 90 verified_complaint_entry_of_action_Fee = 240 --- code: | - fees['Filing fee'].waive = True - fees['Filing fee'].amount = verified_complaint_tro_fee + verified_complaint_entry_of_action_Fee - fees['Service'].waive = True + fees["Filing fee"].waive = True + fees["Filing fee"].amount = ( + verified_complaint_tro_fee + verified_complaint_entry_of_action_Fee + ) + fees["Service"].waive = True if trial_court.department in ["District Court", "Boston Municipal Court"]: - fees['Service'].amount = 60 + fees["Service"].amount = 60 else: - fees['Service'].amount = 45 + fees["Service"].amount = 45 set_fee_waiver_defaults = True --- id: review discovery @@ -955,7 +961,7 @@ only sets: code: | if confirm_ask_for_damages == "postpone_damages": complaint_ask_for_damages = False - update_ask_for_damages = True + update_ask_for_damages = True --- code: | addresses_to_search = [user.address for user in users] @@ -1173,6 +1179,7 @@ review: Would you like to find out if you qualify to file for free?: ${ word(yesno(verified_complaint_wants_fee_waiver)) } --- +id: edit verified complaint landlords continue button field: other_parties.revisit question: | Edit landlords @@ -1195,6 +1202,7 @@ edit: - address.address confirm: True --- +id: edit verified complaint tenants continue button field: users.revisit question: | Edit tenant information @@ -1380,4 +1388,8 @@ attachment: --- code: | # This gets overridden inside UpToCode interview - tenant_repair_default_date = next(item.date for item in sorted(verified_complaint_claims.items(), key=lambda y: y.date) if item.has_claim) \ No newline at end of file + tenant_repair_default_date = next( + item.date + for item in sorted(verified_complaint_claims.items(), key=lambda y: y.date) + if item.has_claim + ) diff --git a/docassemble/HousingCodeChecklist/discovery.py b/docassemble/HousingCodeChecklist/discovery.py index eed7588..fd32820 100644 --- a/docassemble/HousingCodeChecklist/discovery.py +++ b/docassemble/HousingCodeChecklist/discovery.py @@ -1,7 +1,16 @@ -from docassemble.base.util import DAObject, DADict, DAList, value, showifdef, path_and_mimetype, log +from docassemble.base.util import ( + DAObject, + DADict, + DAList, + value, + showifdef, + path_and_mimetype, + log, +) import yaml from typing import Optional, List, Dict, Union + class DiscoveryItem(DAObject): """ A single item in a discovery request. @@ -13,7 +22,7 @@ class DiscoveryItem(DAObject): content (str): The content of the discovery item (e.g., interrogatory question). This is only defined for "custom" interrogatories. default_check (bool): Indicates that the discovery item is relevant to all cases. - soft_check (bool): Indicates that the discovery item is probably relevant, + soft_check (bool): Indicates that the discovery item is probably relevant, but it may or may not be included dependent on priority. checked (bool): Whether the discovery item is checked. category (str): The category of the discovery item. @@ -25,7 +34,7 @@ def init(self, *pargs, **kwargs): super().init(*pargs, **kwargs) if not hasattr(self, "checked"): self.checked = False - + if not hasattr(self, "soft_check"): self.soft_check = False @@ -34,7 +43,7 @@ def init(self, *pargs, **kwargs): if not hasattr(self, "conditions"): self.conditions = [] - + if not hasattr(self, "priority"): self.priority = 0 @@ -43,21 +52,21 @@ def init(self, *pargs, **kwargs): def __bool__(self): return self.checked - + def __str__(self): return self.name - + def applies(self) -> bool: """ Check if the discovery item is relevant in the interview's context. Note: this is not a pure function; it depends on the Docassemble interview's context. - It will evaluate each condition assigned to the request in order with `showifdef` + It will evaluate each condition assigned to the request in order with `showifdef` and return True if any condition is True. Args: conditions (List[str]): The conditions (inclusive) that may be met for the discovery item to apply. - + Returns: bool: Whether the discovery item applies to the given conditions. """ @@ -66,19 +75,20 @@ def applies(self) -> bool: if not hasattr(self, "conditions") or not self.conditions: return False return any(showifdef(condition) for condition in self.conditions) - + def ask_about(self): return { - "label": f"{self.description}", - "field": f"{self.instanceName}.checked", - "default": self.checked if hasattr(self, "checked") else False, - "datatype": "yesnowide" - } - + "label": f"{self.description}", + "field": f"{self.instanceName}.checked", + "default": self.checked if hasattr(self, "checked") else False, + "datatype": "yesnowide", + } + + class DiscoveryDict(DADict): """ A dictionary of discovery items. - + Methods: precheck_items: Pre-check discovery items based on their priority, up to a limit. ask_about_items: Returns the Docassemble question code for asking about discovery items. @@ -89,6 +99,7 @@ class DiscoveryDict(DADict): any_in_category: Returns whether any discovery items from a given category are checked. count_checked: Returns the number of checked discovery items. """ + def init(self, *pargs, **kwargs): super().init(*pargs, **kwargs) self.object_type = DiscoveryItem @@ -96,21 +107,22 @@ def init(self, *pargs, **kwargs): self.auto_gather = False if hasattr(self, "yaml_source"): - if not self.yaml_source.startswith("/"): # A relative path using docassemble package notation + if not self.yaml_source.startswith( + "/" + ): # A relative path using docassemble package notation self._load_from_yaml(path_and_mimetype(self.yaml_source)[0]) else: # We have the canonical path to the file self._load_from_yaml(self.yaml_source) - - def _load_from_yaml(self, yaml_path:str): + def _load_from_yaml(self, yaml_path: str): """ Load discovery items from a YAML file. - + Args: yaml_path (str): The path to the YAML file. """ - with open(yaml_path, 'r') as stream: + with open(yaml_path, "r") as stream: try: yaml_items = yaml.safe_load(stream) except yaml.YAMLError as exc: @@ -119,17 +131,19 @@ def _load_from_yaml(self, yaml_path:str): for item in yaml_items: if item["category"] not in self.categories: self.categories.append(item["category"]) - dict_item = self.initializeObject(item["name"]) # ensure proper instance name - dict_item.name=item["name"] - dict_item.description=item.get("description", item["name"]) - dict_item.category=item["category"] - dict_item.priority=int(item["priority"]) - dict_item.conditions=item.get("conditions", []) - dict_item.default_check=item.get("default_check", False) - + dict_item = self.initializeObject( + item["name"] + ) # ensure proper instance name + dict_item.name = item["name"] + dict_item.description = item.get("description", item["name"]) + dict_item.category = item["category"] + dict_item.priority = int(item["priority"]) + dict_item.conditions = item.get("conditions", []) + dict_item.default_check = item.get("default_check", False) + self.gathered = True - def precheck_items(self, limit:int = 30): + def precheck_items(self, limit: int = 30): """ Pre-check discovery items based on their priority, up to a limit. @@ -141,42 +155,40 @@ def precheck_items(self, limit:int = 30): if val.applies(): val.soft_check = True candidate_list.append(val) - + candidate_list.sort(key=lambda x: x.priority, reverse=True) for item in candidate_list[:limit]: item.checked = True - def ask_about_items(self, show_category_notes:bool = True, category:Optional[str] = None): + def ask_about_items( + self, show_category_notes: bool = True, category: Optional[str] = None + ): """Returns the Docassemble question code for asking about discovery items. - + Args: show_category_notes (bool): Whether to include a heading with the category of each discovery item. category (Optional[str]): The category of discovery items to ask about. If None, all categories will be included. If defined, `show_category_notes` has no effect. - + Returns: List[Dict[str, Union[str, bool]]]: A list of dictionaries representing Docassemble questions. """ categories = self.get_categories() fields = [] - + if category is not None: for key in self.matches_from_category(category, checked_only=False): fields.append(self[key].ask_about()) - else: + else: for category in categories: if show_category_notes: - fields.append( - { - "note": f"## {category}" - } - ) + fields.append({"note": f"## {category}"}) for key in self.matches_from_category(category, checked_only=False): fields.append(self[key].ask_about()) return fields - + def get_categories(self): """Returns a list of categories for the discovery items.""" if hasattr(self, "categories"): @@ -185,32 +197,41 @@ def get_categories(self): def checked_values(self): """Returns a list of checked discovery items.""" - return DAList(elements=[key for key,value in self.iteritems() if value.checked is True]) - + return DAList( + elements=[key for key, value in self.iteritems() if value.checked is True] + ) + def unchecked_values(self): """Returns a list of unchecked discovery items.""" - return DAList(elements=[key for key,value in self.iteritems() if value.checked is False]) + return DAList( + elements=[key for key, value in self.iteritems() if value.checked is False] + ) def matches_from_category(self, category, checked_only=True): """Returns a list of discovery items from a given category.""" if checked_only: - return [key for key in self.elements if self.elements[key].checked and self.elements[key].category == category] + return [ + key + for key in self.elements + if self.elements[key].checked + and self.elements[key].category == category + ] return [key for key in self.elements if self.elements[key].category == category] - + def any_in_category(self, category): for key in self.elements: if self.elements[key].checked and self.elements[key].category == category: return True return False - + def count_checked(self): """Returns the number of checked discovery items.""" n = 0 for key in self.elements: - if self.elements[key].checked: + if self.elements[key].checked: n += 1 return n - + def hook_after_gather(self): if not hasattr(self, "categories"): self.categories = [] @@ -221,4 +242,4 @@ def hook_after_gather(self): def __getitem__(self, key): if key in self.elements: return self.elements[key] - return None \ No newline at end of file + return None diff --git a/docassemble/HousingCodeChecklist/language.py b/docassemble/HousingCodeChecklist/language.py index c841d3e..417a34b 100644 --- a/docassemble/HousingCodeChecklist/language.py +++ b/docassemble/HousingCodeChecklist/language.py @@ -1,74 +1,89 @@ # coding=utf-8 from docassemble.base.functions import url_action + def get_tuples(lang_codes): - """ Returns a list of tuples representing the language name, followed by language ISO 639-1 code. - Right now only lists languages in use by Massachusetts Defense for Eviction (MADE).""" - long_langs = {'en': 'English', - 'es': u'Español', - 'vi': u'Tiếng Việt', - 'ht': u'Kreyòl', - 'zh-t': u'中文', - 'pt': u'Português' - } - tuples = [] - for lang in lang_codes: - if lang in long_langs: - tuples.append((long_langs[lang],lang)) - return tuples - + """Returns a list of tuples representing the language name, followed by language ISO 639-1 code. + Right now only lists languages in use by Massachusetts Defense for Eviction (MADE). + """ + long_langs = { + "en": "English", + "es": "Español", + "vi": "Tiếng Việt", + "ht": "Kreyòl", + "zh-t": "中文", + "pt": "Português", + } + tuples = [] + for lang in lang_codes: + if lang in long_langs: + tuples.append((long_langs[lang], lang)) + return tuples + -def get_language_list(languages, current=''): - """ given a list of ordered tuples with (Description, language_code), returns - an Bootstrap-formatted unordered inline list. The current language will not be a link.""" - list_start = """ """ - for language in languages: - if language[1] == current: - list_start += get_language_list_item(language, link=False) - else: - list_start += get_language_list_item(language) - return list_start + list_end + for language in languages: + if language[1] == current: + list_start += get_language_list_item(language, link=False) + else: + list_start += get_language_list_item(language) + return list_start + list_end + def get_language_list_item(language, link=True): - """ Given an ordered tuple, returns a link to the current interview with lang=language code and the link title + """Given an ordered tuple, returns a link to the current interview with lang=language code and the link title given in the first part of the tuple.""" - - if link: - return f"""{ language[0] }""" - else: - return f'{ language[0] }' - -def get_language_list_inline(languages, current=''): - """ given a list of ordered tuples with (Description, language_code), returns - an Bootstrap-formatted unordered inline list. The current language will not be a link.""" - list_start = '
    ' - list_start += '
  • Language:
  • ' - list_end = '
' - for language in languages: - if language[1] == current: - list_start += get_language_list_item_inline(language, link=False) + if link: + return f"""{ language[0] }""" else: - list_start += get_language_list_item_inline(language) - return list_start + list_end + return f'{ language[0] }' + + +def get_language_list_inline(languages, current=""): + """given a list of ordered tuples with (Description, language_code), returns + an Bootstrap-formatted unordered inline list. The current language will not be a link. + """ + list_start = '
    ' + list_start += '
  • Language:
  • ' + list_end = "
" + for language in languages: + if language[1] == current: + list_start += get_language_list_item_inline(language, link=False) + else: + list_start += get_language_list_item_inline(language) + return list_start + list_end + def get_language_list_item_inline(language, link=True): - """ Given an ordered tuple, returns a link to the current interview with lang=language code and the link title + """Given an ordered tuple, returns a link to the current interview with lang=language code and the link title given in the first part of the tuple.""" - li_start = '
  • ' - li_end = '
  • ' - - if link: - iurl = url_action('change_language', lang = language[1]) - return li_start + '' + language[0] + '' + li_end - else: - return li_start + language[0] + li_end \ No newline at end of file + li_start = '
  • ' + li_end = "
  • " + + if link: + iurl = url_action("change_language", lang=language[1]) + return ( + li_start + + '' + + language[0] + + "" + + li_end + ) + else: + return li_start + language[0] + li_end diff --git a/docassemble/HousingCodeChecklist/load_data.py b/docassemble/HousingCodeChecklist/load_data.py index 8c5d643..840cc07 100644 --- a/docassemble/HousingCodeChecklist/load_data.py +++ b/docassemble/HousingCodeChecklist/load_data.py @@ -82,7 +82,7 @@ def load_rows(self, loci: List[Union[int, str]]) -> pd.DataFrame: """ df = self._load_data() existing = [l for l in loci if l in df.index] - missing = [l for l in loci if l not in df.index] + missing = [l for l in loci if l not in df.index] for locus in missing: log(f"Locus {locus!r} not found in data; skipping.") @@ -133,14 +133,13 @@ def _load_data(self) -> pd.DataFrame: ) # Our XLSX file has a column 'ID' with a text invariant identifier return df + class InspectorLoader(BaseDataLoader): def _load_data(self) -> pd.DataFrame: df = super()._load_data() - df.set_index( - "City", inplace=True - ) + df.set_index("City", inplace=True) return df - + def load_row(self, index: Union[int, str]) -> Union[pd.Series, pd.DataFrame]: """ Retrieve all of the data in a single row of the DataFrame @@ -152,6 +151,7 @@ def load_row(self, index: Union[int, str]) -> Union[pd.Series, pd.DataFrame]: return pd.DataFrame() return row + class Condition(DAObject): def init(self, *pargs, **kwargs): super().init(*pargs, **kwargs) @@ -178,7 +178,7 @@ def as_merged_list(self): """Merge condition details with original DF row""" results = pd.concat([self[c].df for c in self]) - def as_list(self, language:str="en"): + def as_list(self, language: str = "en"): flattened = DAList(auto_gather=False, gathered=True) for category in self.elements: for index, row in self[category].df.iterrows(): @@ -191,9 +191,8 @@ def as_list(self, language:str="en"): the_condition.row = row flattened.append(the_condition) return flattened - - - def has_condition(self, condition:Union[List[str], str]) -> bool: + + def has_condition(self, condition: Union[List[str], str]) -> bool: """ Return True if and only if the specified condition or list of conditions intersects with the conditions the user selected. @@ -201,16 +200,20 @@ def has_condition(self, condition:Union[List[str], str]) -> bool: for category in self.elements: if isinstance(condition, list): if any( - cond in self.elements[category].claims and self.elements[category].claims[cond] + cond in self.elements[category].claims + and self.elements[category].claims[cond] for cond in condition ): return True else: - if condition in self.elements[category].claims and self.elements[category].claims[condition]: + if ( + condition in self.elements[category].claims + and self.elements[category].claims[condition] + ): return True return False - def active_conditions(self, language:str="en"): + def active_conditions(self, language: str = "en"): return DAList( auto_gather=False, gathered=True, @@ -223,7 +226,7 @@ def active_conditions(self, language:str="en"): ], ) - def resolved_conditions(self, language:str="en"): + def resolved_conditions(self, language: str = "en"): return DAList( auto_gather=False, gathered=True, @@ -234,18 +237,21 @@ def resolved_conditions(self, language:str="en"): ], ) - def emergency_conditions(self, condition_ended:bool=False, language:str="en"): + def emergency_conditions(self, condition_ended: bool = False, language: str = "en"): return DAList( auto_gather=False, gathered=True, elements=[ condition for condition in self.as_list(language=language) - if condition.deadline == "24 hours" and condition.condition_ended == condition_ended + if condition.deadline == "24 hours" + and condition.condition_ended == condition_ended ], ) - def conditions_start(self, default_date:Optional[Union[DADateTime,str]]=None) -> DADateTime: + def conditions_start( + self, default_date: Optional[Union[DADateTime, str]] = None + ) -> DADateTime: if not default_date: default_date = today() if not isinstance(default_date, DADateTime): @@ -254,38 +260,55 @@ def conditions_start(self, default_date:Optional[Union[DADateTime,str]]=None) -> except: default_date = today() try: - return min([ - condition.start_date - for condition - in self.as_list() - if hasattr(condition, "start_date") and condition.start_date - ], default=default_date) or default_date + return ( + min( + [ + condition.start_date + for condition in self.as_list() + if hasattr(condition, "start_date") and condition.start_date + ], + default=default_date, + ) + or default_date + ) except: return default_date - def conditions_end(self, default_date:Optional[Union[DADateTime,str]]=None) -> DADateTime: + def conditions_end( + self, default_date: Optional[Union[DADateTime, str]] = None + ) -> DADateTime: if not default_date: default_date = today() try: - return max([ - condition.end_date - for condition - in self.as_list() - if hasattr(condition, "end_date") and condition.end_date - ], default=default_date) or default_date + return ( + max( + [ + condition.end_date + for condition in self.as_list() + if hasattr(condition, "end_date") and condition.end_date + ], + default=default_date, + ) + or default_date + ) except: return default_date - def conditions_days(self,default_date:Optional[Union[DADateTime,str]]=None) -> int: - return abs( (self.conditions_end(default_date) - self.conditions_start(default_date)).days ) - + def conditions_days( + self, default_date: Optional[Union[DADateTime, str]] = None + ) -> int: + return abs( + ( + self.conditions_end(default_date) - self.conditions_start(default_date) + ).days + ) def conditions_from_list( dataloader: DataLoader, loci: List[Union[int, str]], language: str = "en" ) -> List[Dict[str, str]]: df = dataloader.load_rows(loci=loci) - conditions:List[Dict[str, str]] = [] + conditions: List[Dict[str, str]] = [] for row in df.iterrows(): if language == "es": conditions.append( @@ -330,6 +353,3 @@ def tr_category(category, available_buttons): if category == cat.get("value"): return cat.get("label") return category - - - diff --git a/docassemble/__init__.py b/docassemble/__init__.py index 8d17c21..5284146 100644 --- a/docassemble/__init__.py +++ b/docassemble/__init__.py @@ -1,2 +1 @@ -__import__('pkg_resources').declare_namespace(__name__) - +__import__("pkg_resources").declare_namespace(__name__) From 38eb46733e95185dfb96580308953c01c5537348 Mon Sep 17 00:00:00 2001 From: Quinten Steenhuis Date: Wed, 10 Jun 2026 18:31:02 -0400 Subject: [PATCH 09/10] Add a 5 minute wait before trying to download files --- .../HousingCodeChecklist/data/sources/maximalist_path.feature | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docassemble/HousingCodeChecklist/data/sources/maximalist_path.feature b/docassemble/HousingCodeChecklist/data/sources/maximalist_path.feature index be87f6e..491bcea 100644 --- a/docassemble/HousingCodeChecklist/data/sources/maximalist_path.feature +++ b/docassemble/HousingCodeChecklist/data/sources/maximalist_path.feature @@ -3,6 +3,7 @@ Feature: Generated docassemble test Scenario: Maximalist Path generated from session Given I start the interview at "housing_code_interview.yml" And I tap the "text=Get help in court" element and go to the next page + And the maximum seconds for each Step is 300 And the user gets to "download_conditions_checklist_docs" with this data: | var | value | | redis_panel_emails_key | docassemble-GithubFeedbackForm:panel_emails | @@ -1210,6 +1211,7 @@ Scenario: Maximalist Path generated from session | sharing_choices[0]['tell_friend'] | Tell a friend about this website | | sharing_choices[1]['share_answers'] | Share my answers and progress with someone | + And the maximum seconds for each Step is 30 And I download "housing_conditions_report.docx" And I download "next_steps_for_court.docx" And I download "verified_complaint.docx" From c72fb8891558a64edf2ef3cde995287415f041e0 Mon Sep 17 00:00:00 2001 From: Quinten Steenhuis Date: Wed, 10 Jun 2026 22:16:02 -0400 Subject: [PATCH 10/10] Extend timeout to 10 minutes --- .../data/sources/maximalist_path.feature | 644 +----------------- 1 file changed, 4 insertions(+), 640 deletions(-) diff --git a/docassemble/HousingCodeChecklist/data/sources/maximalist_path.feature b/docassemble/HousingCodeChecklist/data/sources/maximalist_path.feature index 491bcea..6df43c2 100644 --- a/docassemble/HousingCodeChecklist/data/sources/maximalist_path.feature +++ b/docassemble/HousingCodeChecklist/data/sources/maximalist_path.feature @@ -3,8 +3,8 @@ Feature: Generated docassemble test Scenario: Maximalist Path generated from session Given I start the interview at "housing_code_interview.yml" And I tap the "text=Get help in court" element and go to the next page - And the maximum seconds for each Step is 300 - And the user gets to "download_conditions_checklist_docs" with this data: + And the maximum seconds for each Step is 660 + And the user gets to any of the question ids ["download_conditions_checklist_docs", "waiting-screen"] with this data: | var | value | | redis_panel_emails_key | docassemble-GithubFeedbackForm:panel_emails | | initial_action_selection | help_in_court | @@ -501,644 +501,6 @@ Scenario: Maximalist Path generated from session | complaint_raft_or_other_assistance | True | | complaint_retaliation | True | | wants_discovery | True | - | interrogatories['respondent_info'].checked | True | - | interrogatories['respondent_info'].soft_check | True | - | interrogatories['respondent_info'].default_check | True | - | interrogatories['respondent_info'].conditions | None | - | interrogatories['respondent_info'].priority | 800 | - | interrogatories['respondent_info'].is_custom | False | - | interrogatories['respondent_info'].name | respondent_info | - | interrogatories['respondent_info'].description | Provide the name, address, email, telephone number, occupation, and relationship to the Tenant’s apartment of the person answering these questions. | - | interrogatories['respondent_info'].category | Tenancy | - | interrogatories['apartment_ownership_details'].checked | True | - | interrogatories['apartment_ownership_details'].soft_check | True | - | interrogatories['apartment_ownership_details'].default_check | True | - | interrogatories['apartment_ownership_details'].conditions | None | - | interrogatories['apartment_ownership_details'].priority | 700 | - | interrogatories['apartment_ownership_details'].is_custom | False | - | interrogatories['apartment_ownership_details'].name | apartment_ownership_details | - | interrogatories['apartment_ownership_details'].description | List the name and address of each owner of the apartment and the date they purchased the building. | - | interrogatories['apartment_ownership_details'].category | Tenancy | - | interrogatories['tenancy_terms_description'].checked | True | - | interrogatories['tenancy_terms_description'].soft_check | True | - | interrogatories['tenancy_terms_description'].default_check | True | - | interrogatories['tenancy_terms_description'].conditions | None | - | interrogatories['tenancy_terms_description'].priority | 750 | - | interrogatories['tenancy_terms_description'].is_custom | False | - | interrogatories['tenancy_terms_description'].name | tenancy_terms_description | - | interrogatories['tenancy_terms_description'].description | Describe all terms of the tenancy, including rent amount, due dates, written/oral agreements, utility responsibilities, and changes to the terms. | - | interrogatories['tenancy_terms_description'].category | Tenancy | - | interrogatories['management_information'].checked | True | - | interrogatories['management_information'].soft_check | True | - | interrogatories['management_information'].default_check | True | - | interrogatories['management_information'].conditions | None | - | interrogatories['management_information'].priority | 650 | - | interrogatories['management_information'].is_custom | False | - | interrogatories['management_information'].name | management_information | - | interrogatories['management_information'].description | Provide details about the management of the apartment or building, including the management company or individual’s name, address, duties, and duration of management. | - | interrogatories['management_information'].category | Tenancy | - | interrogatories['record_keeping_systems'].checked | True | - | interrogatories['record_keeping_systems'].soft_check | True | - | interrogatories['record_keeping_systems'].default_check | True | - | interrogatories['record_keeping_systems'].conditions | None | - | interrogatories['record_keeping_systems'].priority | 550 | - | interrogatories['record_keeping_systems'].is_custom | False | - | interrogatories['record_keeping_systems'].name | record_keeping_systems | - | interrogatories['record_keeping_systems'].description | Describe the record-keeping system used to document repair requests, work orders, and tenancy-related issues. | - | interrogatories['record_keeping_systems'].category | Tenancy | - | interrogatories['persons_with_knowledge'].checked | True | - | interrogatories['persons_with_knowledge'].soft_check | True | - | interrogatories['persons_with_knowledge'].default_check | True | - | interrogatories['persons_with_knowledge'].conditions | None | - | interrogatories['persons_with_knowledge'].priority | 700 | - | interrogatories['persons_with_knowledge'].is_custom | False | - | interrogatories['persons_with_knowledge'].name | persons_with_knowledge | - | interrogatories['persons_with_knowledge'].description | List all individuals with knowledge of facts related to the tenant’s complaint or the landlord’s defense, including contact information and factual information they possess. | - | interrogatories['persons_with_knowledge'].category | Tenant’s Claims | - | interrogatories['trial_witnesses'].checked | True | - | interrogatories['trial_witnesses'].soft_check | True | - | interrogatories['trial_witnesses'].default_check | True | - | interrogatories['trial_witnesses'].conditions | None | - | interrogatories['trial_witnesses'].priority | 600 | - | interrogatories['trial_witnesses'].is_custom | False | - | interrogatories['trial_witnesses'].name | trial_witnesses | - | interrogatories['trial_witnesses'].description | List all individuals intended to testify at trial and/or hearing, including their contact information, anticipated testimony, and qualifications. | - | interrogatories['trial_witnesses'].category | Tenant’s Claims | - | interrogatories['subsidized_housing_facts'].checked | True | - | interrogatories['subsidized_housing_facts'].soft_check | True | - | interrogatories['subsidized_housing_facts'].default_check | False | - | interrogatories['subsidized_housing_facts'].conditions[0] | tenant_gets_rent_subsidy | - | interrogatories['subsidized_housing_facts'].conditions[1] | tenant_subsidy_is_voucher | - | interrogatories['subsidized_housing_facts'].conditions[2] | verified_complaint_tenant_voucher_at_risk | - | interrogatories['subsidized_housing_facts'].conditions[3] | landlord_is_housing_authority | - | interrogatories['subsidized_housing_facts'].conditions[4] | landlord_is_government | - | interrogatories['subsidized_housing_facts'].priority | 800 | - | interrogatories['subsidized_housing_facts'].is_custom | False | - | interrogatories['subsidized_housing_facts'].name | subsidized_housing_facts | - | interrogatories['subsidized_housing_facts'].description | Describe the Tenant’s subsidy, including the program name, administering agency, full contract rent, and the Tenant’s portion with any changes. | - | interrogatories['subsidized_housing_facts'].category | Subsidized Housing | - | interrogatories['subsidy_communications'].checked | True | - | interrogatories['subsidy_communications'].soft_check | True | - | interrogatories['subsidy_communications'].default_check | False | - | interrogatories['subsidy_communications'].conditions[0] | tenant_gets_rent_subsidy | - | interrogatories['subsidy_communications'].conditions[1] | tenant_subsidy_is_voucher | - | interrogatories['subsidy_communications'].conditions[2] | verified_complaint_tenant_voucher_at_risk | - | interrogatories['subsidy_communications'].conditions[3] | landlord_is_housing_authority | - | interrogatories['subsidy_communications'].conditions[4] | landlord_is_government | - | interrogatories['subsidy_communications'].priority | 750 | - | interrogatories['subsidy_communications'].is_custom | False | - | interrogatories['subsidy_communications'].name | subsidy_communications | - | interrogatories['subsidy_communications'].description | Describe communications between the Landlord and the housing authority, including dates, persons involved, reasons, actions taken, and subsidy payment changes. | - | interrogatories['subsidy_communications'].category | Subsidized Housing | - | interrogatories['rental_assistance_communications'].checked | True | - | interrogatories['rental_assistance_communications'].soft_check | True | - | interrogatories['rental_assistance_communications'].default_check | False | - | interrogatories['rental_assistance_communications'].conditions[0] | complaint_raft_or_other_assistance | - | interrogatories['rental_assistance_communications'].priority | 750 | - | interrogatories['rental_assistance_communications'].is_custom | False | - | interrogatories['rental_assistance_communications'].name | rental_assistance_communications | - | interrogatories['rental_assistance_communications'].description | Describe all communications with any agency regarding the Tenant’s RAFT or other rental assistance application, including dates, substance, persons involved, and whether each communication was verbal or in writing. | - | interrogatories['rental_assistance_communications'].category | Subsidized Housing | - | interrogatories['rental_assistance_refusal'].checked | True | - | interrogatories['rental_assistance_refusal'].soft_check | True | - | interrogatories['rental_assistance_refusal'].default_check | False | - | interrogatories['rental_assistance_refusal'].conditions[0] | complaint_raft_or_other_assistance | - | interrogatories['rental_assistance_refusal'].priority | 800 | - | interrogatories['rental_assistance_refusal'].is_custom | False | - | interrogatories['rental_assistance_refusal'].name | rental_assistance_refusal | - | interrogatories['rental_assistance_refusal'].description | Describe in detail the reasons for refusing or intending to refuse rental assistance from RAFT or any other subsidy program. | - | interrogatories['rental_assistance_refusal'].category | Subsidized Housing | - | interrogatories['maintenance_and_repairs'].checked | True | - | interrogatories['maintenance_and_repairs'].soft_check | True | - | interrogatories['maintenance_and_repairs'].default_check | False | - | interrogatories['maintenance_and_repairs'].conditions[0] | screen_ll_knows_problem | - | interrogatories['maintenance_and_repairs'].priority | 750 | - | interrogatories['maintenance_and_repairs'].is_custom | False | - | interrogatories['maintenance_and_repairs'].name | maintenance_and_repairs | - | interrogatories['maintenance_and_repairs'].description | Describe all maintenance and repairs conducted during the tenancy, including responsible persons, reported issues, and actions taken. | - | interrogatories['maintenance_and_repairs'].category | Problems with the Apartment/Building | - | interrogatories['repair_issue_details'].checked | True | - | interrogatories['repair_issue_details'].soft_check | True | - | interrogatories['repair_issue_details'].default_check | False | - | interrogatories['repair_issue_details'].conditions[0] | screen_ll_knows_problem | - | interrogatories['repair_issue_details'].priority | 800 | - | interrogatories['repair_issue_details'].is_custom | False | - | interrogatories['repair_issue_details'].name | repair_issue_details | - | interrogatories['repair_issue_details'].description | Describe how you became aware of each repair need or problem in the Tenant’s apartment or common areas in the past 6 years, including the problem’s nature, date, source, and steps taken in response. | - | interrogatories['repair_issue_details'].category | Problems with the Apartment/Building | - | interrogatories['inspections_details'].checked | True | - | interrogatories['inspections_details'].soft_check | True | - | interrogatories['inspections_details'].default_check | False | - | interrogatories['inspections_details'].conditions[0] | screen_ll_knows_problem | - | interrogatories['inspections_details'].conditions[1] | screen_contacted_housing_inspector | - | interrogatories['inspections_details'].priority | 700 | - | interrogatories['inspections_details'].is_custom | False | - | interrogatories['inspections_details'].name | inspections_details | - | interrogatories['inspections_details'].description | Provide details of inspections conducted by government agencies or third parties in the past 6 years, including dates, findings, and actions taken. | - | interrogatories['inspections_details'].category | Problems with the Apartment/Building | - | interrogatories['purchase_inspection_details'].checked | True | - | interrogatories['purchase_inspection_details'].soft_check | True | - | interrogatories['purchase_inspection_details'].default_check | False | - | interrogatories['purchase_inspection_details'].conditions[0] | screen_ll_knows_problem | - | interrogatories['purchase_inspection_details'].priority | 500 | - | interrogatories['purchase_inspection_details'].is_custom | False | - | interrogatories['purchase_inspection_details'].name | purchase_inspection_details | - | interrogatories['purchase_inspection_details'].description | Provide details of any inspection or evaluation conducted before, during, or after the building’s purchase, including the date, inspector’s information, findings, and actions taken in response. | - | interrogatories['purchase_inspection_details'].category | Problems with the Apartment/Building | - | interrogatories['inspection_repair_history'].checked | True | - | interrogatories['inspection_repair_history'].soft_check | True | - | interrogatories['inspection_repair_history'].default_check | False | - | interrogatories['inspection_repair_history'].conditions[0] | screen_ll_knows_problem | - | interrogatories['inspection_repair_history'].conditions[1] | screen_contacted_housing_inspector | - | interrogatories['inspection_repair_history'].priority | 800 | - | interrogatories['inspection_repair_history'].is_custom | False | - | interrogatories['inspection_repair_history'].name | inspection_repair_history | - | interrogatories['inspection_repair_history'].description | Describe inspections or repairs made in the past 6 years, including the type, notification to the Tenant, dates, responsible parties, costs, and how the issue was discovered. | - | interrogatories['inspection_repair_history'].category | Problems with the Apartment/Building | - | interrogatories['lead_paint_information'].checked | False | - | interrogatories['lead_paint_information'].soft_check | False | - | interrogatories['lead_paint_information'].default_check | False | - | interrogatories['lead_paint_information'].conditions[0] | lead_paint_5_feet_from_floor | - | interrogatories['lead_paint_information'].conditions[1] | lead_paint_anywhere | - | interrogatories['lead_paint_information'].conditions[2] | lead_paint_child | - | interrogatories['lead_paint_information'].priority | 750 | - | interrogatories['lead_paint_information'].is_custom | False | - | interrogatories['lead_paint_information'].name | lead_paint_information | - | interrogatories['lead_paint_information'].description | Describe any investigation or knowledge regarding the presence of lead paint, including inspection dates, findings, and remediation steps. | - | interrogatories['lead_paint_information'].category | Problems with the Apartment/Building | - | interrogatories['tenant_damage_claims'].checked | True | - | interrogatories['tenant_damage_claims'].soft_check | True | - | interrogatories['tenant_damage_claims'].default_check | False | - | interrogatories['tenant_damage_claims'].conditions[0] | screen_ll_knows_problem | - | interrogatories['tenant_damage_claims'].priority | 700 | - | interrogatories['tenant_damage_claims'].is_custom | False | - | interrogatories['tenant_damage_claims'].name | tenant_damage_claims | - | interrogatories['tenant_damage_claims'].description | If applicable, describe any damage caused by the tenant, including the nature of the damage, repairs made, associated costs, and contact information for any witnesses. | - | interrogatories['tenant_damage_claims'].category | Problems with the Apartment/Building | - | interrogatories['tenant_interference_with_repairs'].checked | False | - | interrogatories['tenant_interference_with_repairs'].soft_check | False | - | interrogatories['tenant_interference_with_repairs'].default_check | False | - | interrogatories['tenant_interference_with_repairs'].conditions[0] | entered_without_permission | - | interrogatories['tenant_interference_with_repairs'].conditions[1] | insufficient_notice | - | interrogatories['tenant_interference_with_repairs'].priority | 750 | - | interrogatories['tenant_interference_with_repairs'].is_custom | False | - | interrogatories['tenant_interference_with_repairs'].name | tenant_interference_with_repairs | - | interrogatories['tenant_interference_with_repairs'].description | Describe instances where the Tenant allegedly interfered with inspections or repairs, including dates, notifications, actions taken, witnesses, rescheduling attempts, and any resulting losses. | - | interrogatories['tenant_interference_with_repairs'].category | Problems with the Apartment/Building | - | interrogatories['landlord_access_to_apartment'].checked | True | - | interrogatories['landlord_access_to_apartment'].soft_check | True | - | interrogatories['landlord_access_to_apartment'].default_check | False | - | interrogatories['landlord_access_to_apartment'].conditions[0] | entered_without_permission | - | interrogatories['landlord_access_to_apartment'].conditions[1] | insufficient_notice | - | interrogatories['landlord_access_to_apartment'].conditions[2] | screen_ll_knows_problem | - | interrogatories['landlord_access_to_apartment'].priority | 700 | - | interrogatories['landlord_access_to_apartment'].is_custom | False | - | interrogatories['landlord_access_to_apartment'].name | landlord_access_to_apartment | - | interrogatories['landlord_access_to_apartment'].description | Describe instances when the landlord or representatives entered the apartment, including dates, reasons, and whether the tenant was present. | - | interrogatories['landlord_access_to_apartment'].category | Problems with the Apartment/Building | - | interrogatories['tenant_utility_billing'].checked | True | - | interrogatories['tenant_utility_billing'].soft_check | True | - | interrogatories['tenant_utility_billing'].default_check | False | - | interrogatories['tenant_utility_billing'].conditions[0] | utilities_no_agreement | - | interrogatories['tenant_utility_billing'].conditions[1] | complaint_utility_not_paid | - | interrogatories['tenant_utility_billing'].priority | 600 | - | interrogatories['tenant_utility_billing'].is_custom | False | - | interrogatories['tenant_utility_billing'].name | tenant_utility_billing | - | interrogatories['tenant_utility_billing'].description | Describe how utilities are billed (to the Tenant or to the Landlord), including the type of utility and the applicable billing period. | - | interrogatories['tenant_utility_billing'].category | Utilities | - | interrogatories['utilities_and_billing'].checked | True | - | interrogatories['utilities_and_billing'].soft_check | True | - | interrogatories['utilities_and_billing'].default_check | False | - | interrogatories['utilities_and_billing'].conditions[0] | utilities_no_agreement | - | interrogatories['utilities_and_billing'].conditions[1] | complaint_utility_not_paid | - | interrogatories['utilities_and_billing'].priority | 650 | - | interrogatories['utilities_and_billing'].is_custom | False | - | interrogatories['utilities_and_billing'].name | utilities_and_billing | - | interrogatories['utilities_and_billing'].description | Describe the tenant’s responsibility for utility payments, including written agreements and billing periods. | - | interrogatories['utilities_and_billing'].category | Utilities | - | interrogatories['utility_disconnection_details'].checked | True | - | interrogatories['utility_disconnection_details'].soft_check | True | - | interrogatories['utility_disconnection_details'].default_check | False | - | interrogatories['utility_disconnection_details'].conditions[0] | utility_shutoff | - | interrogatories['utility_disconnection_details'].conditions[1] | incident_utility | - | interrogatories['utility_disconnection_details'].conditions[2] | complaint_utility_shutoff | - | interrogatories['utility_disconnection_details'].priority | 650 | - | interrogatories['utility_disconnection_details'].is_custom | False | - | interrogatories['utility_disconnection_details'].name | utility_disconnection_details | - | interrogatories['utility_disconnection_details'].description | Describe any utility disconnections or threats of disconnection, including dates, reasons, and when service was restored. | - | interrogatories['utility_disconnection_details'].category | Utilities | - | interrogatories['common_area_utility_accounts'].checked | True | - | interrogatories['common_area_utility_accounts'].soft_check | True | - | interrogatories['common_area_utility_accounts'].default_check | False | - | interrogatories['common_area_utility_accounts'].conditions[0] | utilities_no_agreement | - | interrogatories['common_area_utility_accounts'].conditions[1] | complaint_utility_not_paid | - | interrogatories['common_area_utility_accounts'].priority | 550 | - | interrogatories['common_area_utility_accounts'].is_custom | False | - | interrogatories['common_area_utility_accounts'].name | common_area_utility_accounts | - | interrogatories['common_area_utility_accounts'].description | Provide details about accounts for common area utility usage, including the utility company name, account numbers, and areas covered. | - | interrogatories['common_area_utility_accounts'].category | Utilities | - | interrogatories['tenant_outside_utility_responsibility'].checked | True | - | interrogatories['tenant_outside_utility_responsibility'].soft_check | True | - | interrogatories['tenant_outside_utility_responsibility'].default_check | False | - | interrogatories['tenant_outside_utility_responsibility'].conditions[0] | utilities_no_agreement | - | interrogatories['tenant_outside_utility_responsibility'].conditions[1] | complaint_utility_not_paid | - | interrogatories['tenant_outside_utility_responsibility'].priority | 750 | - | interrogatories['tenant_outside_utility_responsibility'].is_custom | False | - | interrogatories['tenant_outside_utility_responsibility'].name | tenant_outside_utility_responsibility | - | interrogatories['tenant_outside_utility_responsibility'].description | Describe any utility payments the Tenant was responsible for outside the apartment, including the type of utility, written agreements, and the start date of the arrangement. | - | interrogatories['tenant_outside_utility_responsibility'].category | Utilities | - | interrogatories['rental_properties_owned'].checked | True | - | interrogatories['rental_properties_owned'].soft_check | True | - | interrogatories['rental_properties_owned'].default_check | True | - | interrogatories['rental_properties_owned'].conditions | None | - | interrogatories['rental_properties_owned'].priority | 750 | - | interrogatories['rental_properties_owned'].is_custom | False | - | interrogatories['rental_properties_owned'].name | rental_properties_owned | - | interrogatories['rental_properties_owned'].description | List all rental properties owned by the Landlord during the tenant’s tenancy, including addresses, number of apartments, and purchase dates. | - | interrogatories['rental_properties_owned'].category | Facts About the Landlord | - | interrogatories['ownership_entity_details'].checked | True | - | interrogatories['ownership_entity_details'].soft_check | True | - | interrogatories['ownership_entity_details'].default_check | True | - | interrogatories['ownership_entity_details'].conditions | None | - | interrogatories['ownership_entity_details'].priority | 600 | - | interrogatories['ownership_entity_details'].is_custom | False | - | interrogatories['ownership_entity_details'].name | ownership_entity_details | - | interrogatories['ownership_entity_details'].description | Describe the ownership entity if the Tenant’s apartment is owned by a trust or business entity, including the entity name and type, trustees or managers, beneficiaries, and relevant governing documents. | - | interrogatories['ownership_entity_details'].category | Facts About the Landlord | - | interrogatories['landlord_sale_plan'].checked | True | - | interrogatories['landlord_sale_plan'].soft_check | True | - | interrogatories['landlord_sale_plan'].default_check | True | - | interrogatories['landlord_sale_plan'].conditions | None | - | interrogatories['landlord_sale_plan'].priority | 700 | - | interrogatories['landlord_sale_plan'].is_custom | False | - | interrogatories['landlord_sale_plan'].name | landlord_sale_plan | - | interrogatories['landlord_sale_plan'].description | If the landlord intends to sell the property, describe actions taken, including marketing, appraisals, and communications with brokers or buyers. | - | interrogatories['landlord_sale_plan'].category | Facts About the Landlord | - | interrogatories['fair_market_rental_value'].checked | True | - | interrogatories['fair_market_rental_value'].soft_check | True | - | interrogatories['fair_market_rental_value'].default_check | True | - | interrogatories['fair_market_rental_value'].conditions | None | - | interrogatories['fair_market_rental_value'].priority | 750 | - | interrogatories['fair_market_rental_value'].is_custom | False | - | interrogatories['fair_market_rental_value'].name | fair_market_rental_value | - | interrogatories['fair_market_rental_value'].description | State your opinion of the apartment’s fair market rental value for each month of the Tenant’s occupancy, including the factual basis for your opinion and compliance with applicable codes and regulations. | - | interrogatories['fair_market_rental_value'].category | Facts About the Landlord | - | interrogatories['tenant_organization_involvement'].checked | True | - | interrogatories['tenant_organization_involvement'].soft_check | True | - | interrogatories['tenant_organization_involvement'].default_check | False | - | interrogatories['tenant_organization_involvement'].conditions[0] | complaint_retaliation | - | interrogatories['tenant_organization_involvement'].priority | 450 | - | interrogatories['tenant_organization_involvement'].is_custom | False | - | interrogatories['tenant_organization_involvement'].name | tenant_organization_involvement | - | interrogatories['tenant_organization_involvement'].description | Describe any knowledge of the tenant’s involvement in tenant organizations or actions taken to assert tenant rights. | - | interrogatories['tenant_organization_involvement'].category | Other | - | interrogatories['eviction_proceedings'].checked | False | - | interrogatories['eviction_proceedings'].soft_check | False | - | interrogatories['eviction_proceedings'].default_check | False | - | interrogatories['eviction_proceedings'].conditions[0] | screen_tenant_facing_eviction_is_case | - | interrogatories['eviction_proceedings'].conditions[1] | screen_tenant_facing_eviction_is_notice | - | interrogatories['eviction_proceedings'].conditions[2] | screen_tenant_facing_eviction_is_pending | - | interrogatories['eviction_proceedings'].conditions[3] | screen_tenant_facing_eviction_is_closed | - | interrogatories['eviction_proceedings'].priority | 550 | - | interrogatories['eviction_proceedings'].is_custom | False | - | interrogatories['eviction_proceedings'].name | eviction_proceedings | - | interrogatories['eviction_proceedings'].description | List all eviction proceedings or lawsuits against the Tenant, including dates, reasons, and how each was resolved. | - | interrogatories['eviction_proceedings'].category | Other | - | interrogatories['lock_changes_and_exclusion'].checked | False | - | interrogatories['lock_changes_and_exclusion'].soft_check | False | - | interrogatories['lock_changes_and_exclusion'].default_check | False | - | interrogatories['lock_changes_and_exclusion'].conditions[0] | illegal_lockout | - | interrogatories['lock_changes_and_exclusion'].priority | 850 | - | interrogatories['lock_changes_and_exclusion'].is_custom | False | - | interrogatories['lock_changes_and_exclusion'].name | lock_changes_and_exclusion | - | interrogatories['lock_changes_and_exclusion'].description | If the Landlord changed locks or took actions to exclude the Tenant from the apartment or any part of the building, provide details including dates, reasons, and notifications. | - | interrogatories['lock_changes_and_exclusion'].category | Other | - | interrogatories.yaml_source | data/sources/interrogatories.yml | - | interrogatories.categories[0] | Tenancy | - | interrogatories.categories[1] | Tenant’s Claims | - | interrogatories.categories[2] | Subsidized Housing | - | interrogatories.categories[3] | Problems with the Apartment/Building | - | interrogatories.categories[4] | Utilities | - | interrogatories.categories[5] | Facts About the Landlord | - | interrogatories.categories[6] | Other | - | interrogatories.there_are_any | True | - | document_requests['rental_documents_general'].checked | True | - | document_requests['rental_documents_general'].soft_check | True | - | document_requests['rental_documents_general'].default_check | True | - | document_requests['rental_documents_general'].conditions | None | - | document_requests['rental_documents_general'].priority | 800 | - | document_requests['rental_documents_general'].is_custom | False | - | document_requests['rental_documents_general'].name | rental_documents_general | - | document_requests['rental_documents_general'].description | Provide documents related to the rental of the apartment, including rental applications, credit checks, references, leases, and addenda. | - | document_requests['rental_documents_general'].category | Tenancy | - | document_requests['tenant_landlord_written_communications'].checked | True | - | document_requests['tenant_landlord_written_communications'].soft_check | True | - | document_requests['tenant_landlord_written_communications'].default_check | True | - | document_requests['tenant_landlord_written_communications'].conditions | None | - | document_requests['tenant_landlord_written_communications'].priority | 750 | - | document_requests['tenant_landlord_written_communications'].is_custom | False | - | document_requests['tenant_landlord_written_communications'].name | tenant_landlord_written_communications | - | document_requests['tenant_landlord_written_communications'].description | Include letters, emails, texts, and notices exchanged between the Tenant and Landlord. | - | document_requests['tenant_landlord_written_communications'].category | Tenancy | - | document_requests['tenant_landlord_communications_others'].checked | True | - | document_requests['tenant_landlord_communications_others'].soft_check | True | - | document_requests['tenant_landlord_communications_others'].default_check | True | - | document_requests['tenant_landlord_communications_others'].conditions | None | - | document_requests['tenant_landlord_communications_others'].priority | 700 | - | document_requests['tenant_landlord_communications_others'].is_custom | False | - | document_requests['tenant_landlord_communications_others'].name | tenant_landlord_communications_others | - | document_requests['tenant_landlord_communications_others'].description | Provide communications between the Landlord and others regarding the Tenant or tenancy. | - | document_requests['tenant_landlord_communications_others'].category | Tenancy | - | document_requests['rent_payment_records_all'].checked | True | - | document_requests['rent_payment_records_all'].soft_check | True | - | document_requests['rent_payment_records_all'].default_check | True | - | document_requests['rent_payment_records_all'].conditions | None | - | document_requests['rent_payment_records_all'].priority | 800 | - | document_requests['rent_payment_records_all'].is_custom | False | - | document_requests['rent_payment_records_all'].name | rent_payment_records_all | - | document_requests['rent_payment_records_all'].description | Provide all records related to rent or occupancy payments made by or on behalf of the Tenant. | - | document_requests['rent_payment_records_all'].category | Tenancy | - | document_requests['charges_other_than_rent'].checked | True | - | document_requests['charges_other_than_rent'].soft_check | True | - | document_requests['charges_other_than_rent'].default_check | True | - | document_requests['charges_other_than_rent'].conditions | None | - | document_requests['charges_other_than_rent'].priority | 650 | - | document_requests['charges_other_than_rent'].is_custom | False | - | document_requests['charges_other_than_rent'].name | charges_other_than_rent | - | document_requests['charges_other_than_rent'].description | Provide all records concerning charges to the Tenant for items other than rent or occupancy. | - | document_requests['charges_other_than_rent'].category | Tenancy | - | document_requests['tenant_file_documents'].checked | True | - | document_requests['tenant_file_documents'].soft_check | True | - | document_requests['tenant_file_documents'].default_check | True | - | document_requests['tenant_file_documents'].conditions | None | - | document_requests['tenant_file_documents'].priority | 700 | - | document_requests['tenant_file_documents'].is_custom | False | - | document_requests['tenant_file_documents'].name | tenant_file_documents | - | document_requests['tenant_file_documents'].description | Provide all documents maintained in the Tenant’s file by the owner or manager. | - | document_requests['tenant_file_documents'].category | Tenancy | - | document_requests['rent_increase_documents'].checked | True | - | document_requests['rent_increase_documents'].soft_check | True | - | document_requests['rent_increase_documents'].default_check | True | - | document_requests['rent_increase_documents'].conditions | None | - | document_requests['rent_increase_documents'].priority | 750 | - | document_requests['rent_increase_documents'].is_custom | False | - | document_requests['rent_increase_documents'].name | rent_increase_documents | - | document_requests['rent_increase_documents'].description | Provide all documents related to rent increases or requests for rent increases concerning the tenancy. | - | document_requests['rent_increase_documents'].category | Tenancy | - | document_requests['documents_from_previous_owners'].checked | True | - | document_requests['documents_from_previous_owners'].soft_check | True | - | document_requests['documents_from_previous_owners'].default_check | True | - | document_requests['documents_from_previous_owners'].conditions | None | - | document_requests['documents_from_previous_owners'].priority | 700 | - | document_requests['documents_from_previous_owners'].is_custom | False | - | document_requests['documents_from_previous_owners'].name | documents_from_previous_owners | - | document_requests['documents_from_previous_owners'].description | Include all documents received from previous building owners regarding the property condition, tenancies, and security deposits and last months' rents. | - | document_requests['documents_from_previous_owners'].category | Tenancy | - | document_requests['tenant_claim_related_documents'].checked | True | - | document_requests['tenant_claim_related_documents'].soft_check | True | - | document_requests['tenant_claim_related_documents'].default_check | True | - | document_requests['tenant_claim_related_documents'].conditions | None | - | document_requests['tenant_claim_related_documents'].priority | 750 | - | document_requests['tenant_claim_related_documents'].is_custom | False | - | document_requests['tenant_claim_related_documents'].name | tenant_claim_related_documents | - | document_requests['tenant_claim_related_documents'].description | Include all documents related to the Tenant’s claims or the Landlord’s defenses or counterclaims. | - | document_requests['tenant_claim_related_documents'].category | Tenancy | - | document_requests['documents_for_trial'].checked | True | - | document_requests['documents_for_trial'].soft_check | True | - | document_requests['documents_for_trial'].default_check | True | - | document_requests['documents_for_trial'].conditions | None | - | document_requests['documents_for_trial'].priority | 850 | - | document_requests['documents_for_trial'].is_custom | False | - | document_requests['documents_for_trial'].name | documents_for_trial | - | document_requests['documents_for_trial'].description | Provide documents the Landlord plans to present at trial or hearing. | - | document_requests['documents_for_trial'].category | Tenancy | - | document_requests['management_agreements'].checked | True | - | document_requests['management_agreements'].soft_check | True | - | document_requests['management_agreements'].default_check | True | - | document_requests['management_agreements'].conditions | None | - | document_requests['management_agreements'].priority | 600 | - | document_requests['management_agreements'].is_custom | False | - | document_requests['management_agreements'].name | management_agreements | - | document_requests['management_agreements'].description | Provide management contracts and documents related to the management of the property. | - | document_requests['management_agreements'].category | Facts About the Landlord | - | document_requests['maintenance_logs_and_records'].checked | True | - | document_requests['maintenance_logs_and_records'].soft_check | True | - | document_requests['maintenance_logs_and_records'].default_check | True | - | document_requests['maintenance_logs_and_records'].conditions | None | - | document_requests['maintenance_logs_and_records'].priority | 750 | - | document_requests['maintenance_logs_and_records'].is_custom | False | - | document_requests['maintenance_logs_and_records'].name | maintenance_logs_and_records | - | document_requests['maintenance_logs_and_records'].description | Include logs and records of maintenance done at the property. | - | document_requests['maintenance_logs_and_records'].category | Facts About the Landlord | - | document_requests['landlord_purchase_refinance_documents'].checked | True | - | document_requests['landlord_purchase_refinance_documents'].soft_check | True | - | document_requests['landlord_purchase_refinance_documents'].default_check | True | - | document_requests['landlord_purchase_refinance_documents'].conditions | None | - | document_requests['landlord_purchase_refinance_documents'].priority | 550 | - | document_requests['landlord_purchase_refinance_documents'].is_custom | False | - | document_requests['landlord_purchase_refinance_documents'].name | landlord_purchase_refinance_documents | - | document_requests['landlord_purchase_refinance_documents'].description | Provide documents related to the building purchase or refinancing, including inspections, contracts, and appraisals. | - | document_requests['landlord_purchase_refinance_documents'].category | Facts About the Landlord | - | document_requests['sale_related_documents'].checked | True | - | document_requests['sale_related_documents'].soft_check | True | - | document_requests['sale_related_documents'].default_check | True | - | document_requests['sale_related_documents'].conditions | None | - | document_requests['sale_related_documents'].priority | 600 | - | document_requests['sale_related_documents'].is_custom | False | - | document_requests['sale_related_documents'].name | sale_related_documents | - | document_requests['sale_related_documents'].description | Include documents related to the anticipated or actual sale of the building, including inspections, appraisals, marketing, and purchase agreements. | - | document_requests['sale_related_documents'].category | Facts About the Landlord | - | document_requests['subsidized_housing_documentation'].checked | True | - | document_requests['subsidized_housing_documentation'].soft_check | True | - | document_requests['subsidized_housing_documentation'].default_check | False | - | document_requests['subsidized_housing_documentation'].conditions[0] | tenant_gets_rent_subsidy | - | document_requests['subsidized_housing_documentation'].conditions[1] | tenant_subsidy_is_voucher | - | document_requests['subsidized_housing_documentation'].conditions[2] | verified_complaint_tenant_voucher_at_risk | - | document_requests['subsidized_housing_documentation'].conditions[3] | landlord_is_housing_authority | - | document_requests['subsidized_housing_documentation'].conditions[4] | landlord_is_government | - | document_requests['subsidized_housing_documentation'].priority | 800 | - | document_requests['subsidized_housing_documentation'].is_custom | False | - | document_requests['subsidized_housing_documentation'].name | subsidized_housing_documentation | - | document_requests['subsidized_housing_documentation'].description | Include documents related to the type or nature of any rental subsidy for the tenancy. | - | document_requests['subsidized_housing_documentation'].category | Subsidized Housing | - | document_requests['contract_rent_increase_requests'].checked | True | - | document_requests['contract_rent_increase_requests'].soft_check | True | - | document_requests['contract_rent_increase_requests'].default_check | False | - | document_requests['contract_rent_increase_requests'].conditions[0] | tenant_gets_rent_subsidy | - | document_requests['contract_rent_increase_requests'].conditions[1] | tenant_subsidy_is_voucher | - | document_requests['contract_rent_increase_requests'].conditions[2] | verified_complaint_tenant_voucher_at_risk | - | document_requests['contract_rent_increase_requests'].conditions[3] | landlord_is_housing_authority | - | document_requests['contract_rent_increase_requests'].conditions[4] | landlord_is_government | - | document_requests['contract_rent_increase_requests'].priority | 750 | - | document_requests['contract_rent_increase_requests'].is_custom | False | - | document_requests['contract_rent_increase_requests'].name | contract_rent_increase_requests | - | document_requests['contract_rent_increase_requests'].description | Provide all documents related to the Landlord’s requests for an increase in contract rent and responses from the Tenant or subsidy-administering agency. | - | document_requests['contract_rent_increase_requests'].category | Subsidized Housing | - | document_requests['conference_and_grievance_documents'].checked | True | - | document_requests['conference_and_grievance_documents'].soft_check | True | - | document_requests['conference_and_grievance_documents'].default_check | False | - | document_requests['conference_and_grievance_documents'].conditions[0] | tenant_gets_rent_subsidy | - | document_requests['conference_and_grievance_documents'].conditions[1] | tenant_subsidy_is_voucher | - | document_requests['conference_and_grievance_documents'].conditions[2] | verified_complaint_tenant_voucher_at_risk | - | document_requests['conference_and_grievance_documents'].conditions[3] | landlord_is_housing_authority | - | document_requests['conference_and_grievance_documents'].conditions[4] | landlord_is_government | - | document_requests['conference_and_grievance_documents'].priority | 700 | - | document_requests['conference_and_grievance_documents'].is_custom | False | - | document_requests['conference_and_grievance_documents'].name | conference_and_grievance_documents | - | document_requests['conference_and_grievance_documents'].description | Provide all documents related to any informal conferences or grievance hearings during the tenancy. | - | document_requests['conference_and_grievance_documents'].category | Subsidized Housing | - | document_requests['agency_communications'].checked | True | - | document_requests['agency_communications'].soft_check | True | - | document_requests['agency_communications'].default_check | False | - | document_requests['agency_communications'].conditions[0] | tenant_gets_rent_subsidy | - | document_requests['agency_communications'].conditions[1] | tenant_subsidy_is_voucher | - | document_requests['agency_communications'].conditions[2] | verified_complaint_tenant_voucher_at_risk | - | document_requests['agency_communications'].conditions[3] | landlord_is_housing_authority | - | document_requests['agency_communications'].conditions[4] | landlord_is_government | - | document_requests['agency_communications'].priority | 800 | - | document_requests['agency_communications'].is_custom | False | - | document_requests['agency_communications'].name | agency_communications | - | document_requests['agency_communications'].description | Provide all written communications between the Landlord and any housing authority, EOHLC, MassHousing, HUD, or other agency regarding the Tenant or the apartment. | - | document_requests['agency_communications'].category | Subsidized Housing | - | document_requests['rental_assistance_records'].checked | True | - | document_requests['rental_assistance_records'].soft_check | True | - | document_requests['rental_assistance_records'].default_check | False | - | document_requests['rental_assistance_records'].conditions[0] | tenant_gets_rent_subsidy | - | document_requests['rental_assistance_records'].conditions[1] | tenant_subsidy_is_voucher | - | document_requests['rental_assistance_records'].conditions[2] | verified_complaint_tenant_voucher_at_risk | - | document_requests['rental_assistance_records'].conditions[3] | landlord_is_housing_authority | - | document_requests['rental_assistance_records'].conditions[4] | landlord_is_government | - | document_requests['rental_assistance_records'].priority | 700 | - | document_requests['rental_assistance_records'].is_custom | False | - | document_requests['rental_assistance_records'].name | rental_assistance_records | - | document_requests['rental_assistance_records'].description | Provide all documents related to rental assistance applications, approvals, or denials. | - | document_requests['rental_assistance_records'].category | Subsidized Housing | - | document_requests['inspection_notices_and_reports'].checked | True | - | document_requests['inspection_notices_and_reports'].soft_check | True | - | document_requests['inspection_notices_and_reports'].default_check | True | - | document_requests['inspection_notices_and_reports'].conditions | None | - | document_requests['inspection_notices_and_reports'].priority | 750 | - | document_requests['inspection_notices_and_reports'].is_custom | False | - | document_requests['inspection_notices_and_reports'].name | inspection_notices_and_reports | - | document_requests['inspection_notices_and_reports'].description | Include notices and reports related to inspections or repair notices for the apartment or building. | - | document_requests['inspection_notices_and_reports'].category | Problems with the Apartment/Building | - | document_requests['photographic_evidence'].checked | True | - | document_requests['photographic_evidence'].soft_check | True | - | document_requests['photographic_evidence'].default_check | True | - | document_requests['photographic_evidence'].conditions | None | - | document_requests['photographic_evidence'].priority | 700 | - | document_requests['photographic_evidence'].is_custom | False | - | document_requests['photographic_evidence'].name | photographic_evidence | - | document_requests['photographic_evidence'].description | Include all photographs, videos, or digital images related to the Tenant’s apartment or the building. | - | document_requests['photographic_evidence'].category | Problems with the Apartment/Building | - | document_requests['lead_paint_investigation'].checked | False | - | document_requests['lead_paint_investigation'].soft_check | False | - | document_requests['lead_paint_investigation'].default_check | False | - | document_requests['lead_paint_investigation'].conditions[0] | lead_paint_5_feet_from_floor | - | document_requests['lead_paint_investigation'].conditions[1] | lead_paint_anywhere | - | document_requests['lead_paint_investigation'].conditions[2] | lead_paint_child | - | document_requests['lead_paint_investigation'].priority | 800 | - | document_requests['lead_paint_investigation'].is_custom | False | - | document_requests['lead_paint_investigation'].name | lead_paint_investigation | - | document_requests['lead_paint_investigation'].description | Provide documents related to lead paint inspections, reports, and verification of lead hazard removal. | - | document_requests['lead_paint_investigation'].category | Problems with the Apartment/Building | - | document_requests['condition_inspection_reports'].checked | True | - | document_requests['condition_inspection_reports'].soft_check | True | - | document_requests['condition_inspection_reports'].default_check | True | - | document_requests['condition_inspection_reports'].conditions | None | - | document_requests['condition_inspection_reports'].priority | 650 | - | document_requests['condition_inspection_reports'].is_custom | False | - | document_requests['condition_inspection_reports'].name | condition_inspection_reports | - | document_requests['condition_inspection_reports'].description | Include inspection reports regarding the condition of the apartment and common areas. | - | document_requests['condition_inspection_reports'].category | Problems with the Apartment/Building | - | document_requests['repair_invoices_and_records'].checked | True | - | document_requests['repair_invoices_and_records'].soft_check | True | - | document_requests['repair_invoices_and_records'].default_check | True | - | document_requests['repair_invoices_and_records'].conditions | None | - | document_requests['repair_invoices_and_records'].priority | 750 | - | document_requests['repair_invoices_and_records'].is_custom | False | - | document_requests['repair_invoices_and_records'].name | repair_invoices_and_records | - | document_requests['repair_invoices_and_records'].description | Include invoices, estimates, and work orders for repairs to the apartment or building. | - | document_requests['repair_invoices_and_records'].category | Problems with the Apartment/Building | - | document_requests['rental_value_assessments'].checked | True | - | document_requests['rental_value_assessments'].soft_check | True | - | document_requests['rental_value_assessments'].default_check | True | - | document_requests['rental_value_assessments'].conditions | None | - | document_requests['rental_value_assessments'].priority | 600 | - | document_requests['rental_value_assessments'].is_custom | False | - | document_requests['rental_value_assessments'].name | rental_value_assessments | - | document_requests['rental_value_assessments'].description | Provide documents related to assessments of the fair market rental value of the apartment. | - | document_requests['rental_value_assessments'].category | Problems with the Apartment/Building | - | document_requests['utility_payment_responsibility'].checked | True | - | document_requests['utility_payment_responsibility'].soft_check | True | - | document_requests['utility_payment_responsibility'].default_check | True | - | document_requests['utility_payment_responsibility'].conditions[0] | utilities_no_agreement | - | document_requests['utility_payment_responsibility'].conditions[1] | complaint_utility_not_paid | - | document_requests['utility_payment_responsibility'].priority | 750 | - | document_requests['utility_payment_responsibility'].is_custom | False | - | document_requests['utility_payment_responsibility'].name | utility_payment_responsibility | - | document_requests['utility_payment_responsibility'].description | Provide all documents identifying who was responsible for paying water, sewer, heat, hot water, electricity, or other utilities during the Tenant’s occupancy. | - | document_requests['utility_payment_responsibility'].category | Utilities | - | document_requests['utility_termination_notices'].checked | True | - | document_requests['utility_termination_notices'].soft_check | True | - | document_requests['utility_termination_notices'].default_check | True | - | document_requests['utility_termination_notices'].conditions[0] | utility_shutoff | - | document_requests['utility_termination_notices'].conditions[1] | incident_utility | - | document_requests['utility_termination_notices'].conditions[2] | complaint_utility_shutoff | - | document_requests['utility_termination_notices'].priority | 700 | - | document_requests['utility_termination_notices'].is_custom | False | - | document_requests['utility_termination_notices'].name | utility_termination_notices | - | document_requests['utility_termination_notices'].description | Provide documents related to the threatened or actual termination and restoration of utilities. | - | document_requests['utility_termination_notices'].category | Utilities | - | document_requests['common_area_utility_accounts'].checked | True | - | document_requests['common_area_utility_accounts'].soft_check | True | - | document_requests['common_area_utility_accounts'].default_check | True | - | document_requests['common_area_utility_accounts'].conditions[0] | utilities_no_agreement | - | document_requests['common_area_utility_accounts'].conditions[1] | complaint_utility_not_paid | - | document_requests['common_area_utility_accounts'].priority | 700 | - | document_requests['common_area_utility_accounts'].is_custom | False | - | document_requests['common_area_utility_accounts'].name | common_area_utility_accounts | - | document_requests['common_area_utility_accounts'].description | Provide all documents related to the Landlord’s accounts for common area water and other utility usage in the building. | - | document_requests['common_area_utility_accounts'].category | Utilities | - | document_requests['tenant_outside_utility_documents'].checked | True | - | document_requests['tenant_outside_utility_documents'].soft_check | True | - | document_requests['tenant_outside_utility_documents'].default_check | True | - | document_requests['tenant_outside_utility_documents'].conditions[0] | utilities_no_agreement | - | document_requests['tenant_outside_utility_documents'].conditions[1] | complaint_utility_not_paid | - | document_requests['tenant_outside_utility_documents'].priority | 750 | - | document_requests['tenant_outside_utility_documents'].is_custom | False | - | document_requests['tenant_outside_utility_documents'].name | tenant_outside_utility_documents | - | document_requests['tenant_outside_utility_documents'].description | Provide all documents related to the Tenant’s responsibility for paying any utility outside the apartment, including hallways, the basement, or the building exterior during occupancy. | - | document_requests['tenant_outside_utility_documents'].category | Utilities | - | document_requests['property_insurance_policies'].checked | False | - | document_requests['property_insurance_policies'].soft_check | True | - | document_requests['property_insurance_policies'].default_check | True | - | document_requests['property_insurance_policies'].conditions | None | - | document_requests['property_insurance_policies'].priority | 550 | - | document_requests['property_insurance_policies'].is_custom | False | - | document_requests['property_insurance_policies'].name | property_insurance_policies | - | document_requests['property_insurance_policies'].description | Include documents related to fire, property, or liability insurance for the property. | - | document_requests['property_insurance_policies'].category | Other | - | document_requests['legal_claims_documents'].checked | True | - | document_requests['legal_claims_documents'].soft_check | True | - | document_requests['legal_claims_documents'].default_check | True | - | document_requests['legal_claims_documents'].conditions[0] | screen_tenant_facing_eviction_is_case | - | document_requests['legal_claims_documents'].conditions[1] | screen_tenant_facing_eviction_is_notice | - | document_requests['legal_claims_documents'].conditions[2] | screen_tenant_facing_eviction_is_pending | - | document_requests['legal_claims_documents'].conditions[3] | screen_tenant_facing_eviction_is_closed | - | document_requests['legal_claims_documents'].priority | 700 | - | document_requests['legal_claims_documents'].is_custom | False | - | document_requests['legal_claims_documents'].name | legal_claims_documents | - | document_requests['legal_claims_documents'].description | Include documents related to any lawsuits or legal claims involving the property, the Landlord, and the Tenant. | - | document_requests['legal_claims_documents'].category | Other | - | document_requests.yaml_source | data/sources/document_requests.yml | - | document_requests.categories[0] | Tenancy | - | document_requests.categories[1] | Facts About the Landlord | - | document_requests.categories[2] | Subsidized Housing | - | document_requests.categories[3] | Problems with the Apartment/Building | - | document_requests.categories[4] | Utilities | - | document_requests.categories[5] | Other | - | document_requests.there_are_any | True | | customize_discovery_choice | default_discovery | | interview_order_discovery | True | | claim_jurytrial | True | @@ -1211,6 +573,8 @@ Scenario: Maximalist Path generated from session | sharing_choices[0]['tell_friend'] | Tell a friend about this website | | sharing_choices[1]['share_answers'] | Share my answers and progress with someone | + And I wait 600 seconds + And the question id should be "download_conditions_checklist_docs" And the maximum seconds for each Step is 30 And I download "housing_conditions_report.docx" And I download "next_steps_for_court.docx"