From 229d5234933f23c82097afbe72db05e2984c013e Mon Sep 17 00:00:00 2001 From: Quinten Steenhuis Date: Tue, 30 Jul 2024 22:48:49 -0400 Subject: [PATCH 1/3] Basic repair letter --- .../questions/letter_to_request_repairs.yml | 449 ++++++++++++++++++ .../templates/letter_to_request_repairs.docx | Bin 0 -> 25580 bytes 2 files changed, 449 insertions(+) create mode 100644 docassemble/MOHUDEvictionProject/data/questions/letter_to_request_repairs.yml create mode 100644 docassemble/MOHUDEvictionProject/data/templates/letter_to_request_repairs.docx diff --git a/docassemble/MOHUDEvictionProject/data/questions/letter_to_request_repairs.yml b/docassemble/MOHUDEvictionProject/data/questions/letter_to_request_repairs.yml new file mode 100644 index 0000000..7609f93 --- /dev/null +++ b/docassemble/MOHUDEvictionProject/data/questions/letter_to_request_repairs.yml @@ -0,0 +1,449 @@ +--- +include: + - shared.yml +--- +modules: + - docassemble.ALToolbox.llms +--- +metadata: + title: >- + Ask your landlord to fix your home + short title: >- + Repair request + description: |- + If you are a Missouri tenant, you can use this interview to help you + write a letter to your landlord to get repairs made to your home. + can_i_use_this_form: | + You can use this interview if you are a Missouri tenant. + before_you_start: | + Before you start, you need to know: + + - The name and address of your landlord + - The problems in your home that need to be fixed + languages: + - en + - es + authors: + - Quinten Steenhuis + maturity: production + estimated_completion_minutes: 10 + estimated_completion_delta: 5 + help_page_url: https://motenanthelp.org + LIST_topics: + - HO-05-01-00-00 + tags: + - HO-05-01-00-00 + jurisdiction: NAM-US-US+MO + review_date: 2024 + typical_role: "plaintiff" + al_weaver_version: "1.10.2" + generated_on: "2024-07-30" + update_notes: | + New as of July 2024. This is a general letter and does not depend on specific law. +--- +code: | + # This controls the default country and list of states in address field questions + AL_DEFAULT_COUNTRY = "US" +--- +code: | + # This controls the default state in address field questions + AL_DEFAULT_STATE = "MO" +--- +code: | + interview_short_title = "Write a Letter to request repairs" +--- +code: | + al_form_type = "letter" +--- +objects: + - users: ALPeopleList + - other_parties: ALPeopleList.using(ask_number=True, target_number=1) +--- +sections: + - section_getting_started: Getting started + - section_housing_problems: Your housing problems + - section_about_you: About you + - section_landlord: About your landlord + - review_letter_to_request_repairs: Review your answers + - section_download: Download +--- +language: es +sections: + - section_getting_started: Empezar + - section_housing_problems: Problemas de vivienda + - section_about_you: Sobre ti + - section_landlord: Sobre tu dueño de casa + - review_letter_to_request_repairs: Revisar tus respuestas + - section_download: Descargar +--- +#################### Interview order ##################### +comment: | + Controls order and branching logic for questions specific to this form +id: interview_order_letter_to_request_repairs +code: | + nav.set_section("section_getting_started") + user_ask_role = "plaintiff" + users.gather() + letter_kind + set_parts(subtitle=str(users)) + nav.set_section("section_housing_problems") + housing_conditions + lease_agreement_mentions_repairs + set_progress(20) + users[0].phone_number + other_parties[0].address.address + set_progress(40) + other_parties.gather() + users[0].address.address + interview_order_letter_to_request_repairs = True +--- +###################### Main order ###################### +comment: | + This block includes the logic for standalone interviews. + Delete mandatory: True to include in another interview +mandatory: True +code: | + al_intro_screen + letter_to_request_repairs_intro + interview_order_letter_to_request_repairs + signature_date + # Store anonymous data for analytics / statistics + store_variables_snapshot( + persistent=True, + data={ + "zip": showifdef("users[0].address.zip"), + "reached_interview_end": True, + }, + ) + letter_to_request_repairs_download +--- +id: letter_to_request_repairs +continue button field: letter_to_request_repairs_intro +question: | + Write your landlord to fix your home +subquestion: | + This interview will help you ask your landlord to fix your home. + + It will help you make a letter that you can print and mail or email to your landlord. + + Before you get started, you need to know: + + * Your landlord's name + * Your landlord's address +--- +id: kind of letter +question: | + What kind of letter do you want to write? +subquestion: | + If this is the **first** time that you are letting the landlord know about the problems, + you may want to just write a letter so that you have a record in writing that you asked + for repairs. + + If you have already asked **multiple times** and the landlord has not fixed the problem, + you may want to write a more firm demand for repairs. + + Which kind of letter do you want to write? +field: letter_kind +buttons: + - Polite reminder: repairs_only + image: face-meh + css class: bg-yellow + - Firm request: repairs_and_mention_rights + image: face-frown + css class: bg-orange + - Urgent demand: withhold_rent + image: face-angry + css class: bg-red +--- +objects: + - housing_conditions_options: DAOrderedDict.using(elements=housing_conditions_options_for_daordered_dict, auto_gather=False, gathered=True) +--- +variable name: housing_conditions_options_for_daordered_dict +data: !!omap + - heat_not_working: No heat + - no_hot_water: No hot water + - locks_missing_unit: Locks missing or not working + - outside_windows_not_lockable: Outside windows are not lockable + - mouse_rats: Mice or rats + - roach_insects: Roaches + - bedbug_insects: Bedbugs + - other_insects: Insects + - dampness_water: Dampness or leaking + - mold: Mold + - electric_general_maintenance: Electrical fixtures not working + - lead_paint_child: Lead paint in a home with a child under 6 + - window_structural: Windows are broken or not working + - ceiling: Ceiling not in good repair + - floor: Floor not in good repair + - other: Other +--- +language: es +variable name: housing_conditions_options +data: + heat_not_working: Sin calefacción + no_hot_water: Sin agua caliente + locks_missing_unit: Cerraduras faltantes o no funcionan + outside_windows_not_lockable: Las ventanas exteriores no se pueden cerrar con llave + mouse_rats: Ratones o ratas + roach_insects: Cucarachas + bedbug_insects: Chinches + other_insects: Insectos + dampness_water: Humedad o filtraciones + mold: Moho + electric_general_maintenance: Accesorios eléctricos no funcionan + lead_paint_child: Pintura con plomo en una casa con un niño menor de 6 años + window_structural: Las ventanas están rotas o no funcionan + ceiling: El techo no está en buen estado + floor: El piso no está en buen estado + other: Otro +--- +id: housing_conditions +question: | + What are the problems in your home? +fields: + - Pick all that apply: housing_conditions + datatype: checkboxes + code: housing_conditions_options + minlength: 1 + - Other: housing_conditions_other + datatype: area + show if: housing_conditions["other"] +--- +id: Lease agreement mentions repairs +question: | + Facts for your letter +subquestion: | + Answer each question below. It will help us customize your letter. +fields: + - Does your lease say the landlord is responsible for repairs?: lease_agreement_mentions_repairs + datatype: yesnomaybe + - What deadline do you want your landlord to have to fix the problems?: repair_deadline_date + datatype: date + default: ${ today().plus(days=14).format("yyyy-MM-dd") } + under text: | + It is a good idea to give your landlord at least 14 days to fix the problems, which is ${ today().plus(days=14) }. + - Did you already ask your landlord to fix the problem?: asked_landlord_to_fix_already + datatype: yesnoradio + - When?: repair_request_dates + show if: asked_landlord_to_fix_already + under text: | + Write the best day you know. For example: "Last Sunday" + - Are **all** of the problems still there?: all_repairs_pending + show if: asked_landlord_to_fix_already + datatype: yesnomaybe +--- +id: contact information +question: | + How should your landlord contact you? +fields: + - Cell phone: users[0].mobile_number + datatype: al_international_phone + required: False + - Other phone: users[0].phone_number + datatype: al_international_phone + required: False + - Email: users[0].email + datatype: email + required: False +--- +id: preview letter_to_request_repairs +question: | + Preview your form before you sign it +subquestion: | + Here is a preview of the form you will sign on the next page. + + ${ al_recipient_bundle.as_pdf(key='preview') } + + Click the image to open it in a new tab. Click the "Edit answers" button + to edit your answers. + + ${ action_button_html(url_action('review_letter_to_request_repairs'), label='Edit answers', color='info') } + + Remember to come back to this window to continue and sign your form. +continue button field: letter_to_request_repairs_preview_question +--- +code: | + signature_fields = [] +--- +id: Letter to request repairs review screen +event: review_letter_to_request_repairs +question: | + Review your answers +review: + - Edit: example_defects[1].description + button: | + **Example defects[1].description**: + ${ example_defects[1].description } + - Edit: users.revisit + button: | + **Users** + + % for item in users: + * ${ item } + % endfor + - Edit: other_parties.revisit + button: | + **Other parties** + + % for item in other_parties: + * ${ item } + % endfor + - Edit: example_defects[2].description + button: | + **Example defects[2].description**: + ${ example_defects[2].description } + - Edit: lease_agreement_mentions_repairs + button: | + **Lease agreement mentions repairs**: + ${ lease_agreement_mentions_repairs } + - Edit: repair_deadline_date + button: | + **Date of Repair deadline**: + ${ repair_deadline_date } + - Edit: all_repairs_pending + button: | + **All repairs pending**: + ${ all_repairs_pending } +--- +continue button field: users.revisit +question: | + Edit users +subquestion: | + ${ users.table } + + ${ users.add_action() } +--- +table: users.table +rows: users +columns: + - Phone number: | + row_item.phone_number if defined("row_item.phone_number") else "" + - Name: | + row_item.name.full() if defined("row_item.name.first") else "" + - Contact information: | + row_item.contact_information if defined("row_item.contact_information") else "" + - Address: | + row_item.address.block() if defined("row_item.address.address") else "" +edit: + - phone_number + - name.first + - contact_information + - address.address +confirm: True + +--- +continue button field: other_parties.revisit +question: | + Edit other_parties +subquestion: | + ${ other_parties.table } + + ${ other_parties.add_action() } +--- +table: other_parties.table +rows: other_parties +columns: + - Address: | + row_item.address.block() if defined("row_item.address.address") else "" + - Name: | + row_item.name.full() if defined("row_item.name.first") else "" +edit: + - address.address + - name.first +confirm: True + +--- +id: download letter_to_request_repairs +event: letter_to_request_repairs_download +question: | + All done +subquestion: | + Thank you ${users}. Your form is ready to download and deliver. + + View, download and send your form below. Click the "Edit answers" button to fix any mistakes. + + ${ action_button_html(url_action('review_letter_to_request_repairs'), label='Edit answers', color='info') } + + + ${ al_user_bundle.download_list_html() } + + + ${ al_user_bundle.send_button_html(show_editable_checkbox=True) } + +progress: 100 +--- +id: other tenants +question: | + Will any other tenants sign this letter? +subquestion: | + % if users.number_gathered() > 1: + You have already told us about + ${ users.complete_elements() } + % endif +fields: + - label: | + Do you want another tenant to sign this letter? + field: users.there_is_another + datatype: yesnoradio +sets: + - other_parties[i].name.first + - other_parties[i].name.last + - other_parties[i].name.middle + - other_parties[i].name.suffix + - other_parties[i].person_type +--- +id: names of opposing parties +question: | + % if i >= 1: + What is your ${ ordinal(i) } landlord's name? + % elif i == 0: + What is your landlord's name? + % endif +fields: + - Landlord's name: other_parties[i].name.first +--- +id: your address +sets: + - users[0].address.address + - users[0].address.city + - users[0].address.zip + - users[0].address.unit + - users[0].address.state + - users[0].address.country +question: | + Where do you live? +fields: + - code: | + users[0].address_fields(country_code=AL_DEFAULT_COUNTRY, default_state=AL_DEFAULT_STATE) +--- +# ALDocument objects specify the metadata for each template +objects: + # - letter_to_request_repairs_Post_interview_instructions: ALDocument.using(title="Instructions", filename="letter_to_request_repairs_next_steps.docx", enabled=True, has_addendum=False) + - letter_to_request_repairs_attachment: ALDocument.using(title="Letter to request repairs", filename="letter_to_request_repairs", enabled=True, has_addendum=False, ) +--- +# Bundles group the ALDocuments into separate downloads, such as for court and for the user +objects: + - al_user_bundle: ALDocumentBundle.using(elements=[letter_to_request_repairs_attachment], filename="letter_to_request_repairs", title="All forms to download for your records", enabled=True) + - al_recipient_bundle: ALDocumentBundle.using(elements=[letter_to_request_repairs_attachment], filename="letter_to_request_repairs", title="All forms to file", enabled=True) +--- +# Each attachment defines a key in an ALDocument. We use `i` as the placeholder here so the same template is +# used for "preview" and "final" keys, and logic in the template checks the value of +# `i` to show or hide the user's signature +# attachment: +# name: Post-interview-Instructions +# filename: letter_to_request_repairs_next_steps +# docx template file: letter_to_request_repairs_next_steps.docx +# variable name: letter_to_request_repairs_Post_interview_instructions[i] +# skip undefined: True +# tagged pdf: True +--- +attachment: + name: Letter to request repairs + filename: letter_to_request_repairs + variable name: letter_to_request_repairs_attachment[i] + skip undefined: True + docx template file: letter_to_request_repairs.docx + tagged pdf: True + + + diff --git a/docassemble/MOHUDEvictionProject/data/templates/letter_to_request_repairs.docx b/docassemble/MOHUDEvictionProject/data/templates/letter_to_request_repairs.docx new file mode 100644 index 0000000000000000000000000000000000000000..2cdd29cd0125d9e9c0801e949317576a5814ba8a GIT binary patch literal 25580 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 literal 0 HcmV?d00001 From 8015eea6657376f1decd5b285c1bd0c3268809cf Mon Sep 17 00:00:00 2001 From: Quinten Steenhuis Date: Tue, 30 Jul 2024 22:53:33 -0400 Subject: [PATCH 2/3] Assume filled by tenant not attorney --- .../questions/letter_to_request_repairs.yml | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/docassemble/MOHUDEvictionProject/data/questions/letter_to_request_repairs.yml b/docassemble/MOHUDEvictionProject/data/questions/letter_to_request_repairs.yml index 7609f93..bd620c2 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/letter_to_request_repairs.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/letter_to_request_repairs.yml @@ -90,11 +90,13 @@ code: | housing_conditions lease_agreement_mentions_repairs set_progress(20) + nav.set_section("section_about_you") users[0].phone_number + users[0].address.address + nav.set_section("section_landlord") + other_parties.gather() other_parties[0].address.address set_progress(40) - other_parties.gather() - users[0].address.address interview_order_letter_to_request_repairs = True --- ###################### Main order ###################### @@ -112,6 +114,8 @@ code: | persistent=True, data={ "zip": showifdef("users[0].address.zip"), + "conditions": housing_conditions.true_values(), + "letter_kind": letter_kind, "reached_interview_end": True, }, ) @@ -416,6 +420,19 @@ fields: - code: | users[0].address_fields(country_code=AL_DEFAULT_COUNTRY, default_state=AL_DEFAULT_STATE) --- +id: your name +question: | + Your name +fields: + - First: users[0].name.first + - Middle: users[0].name.middle + required: False + - Last: users[0].name.last + - Suffix: users[0].name.suffix + code: | + name_suffix() + required: False +--- # ALDocument objects specify the metadata for each template objects: # - letter_to_request_repairs_Post_interview_instructions: ALDocument.using(title="Instructions", filename="letter_to_request_repairs_next_steps.docx", enabled=True, has_addendum=False) From 2cb10890b4dc7ba0a94e518a65b70ce5a61f2913 Mon Sep 17 00:00:00 2001 From: Quinten Steenhuis Date: Wed, 31 Jul 2024 23:07:51 -0400 Subject: [PATCH 3/3] PR feedback. Expand review screen, limit to 1 user for now until https://github.com/SuffolkLITLab/docassemble-AssemblyLine/pull/871 is merged --- .../questions/letter_to_request_repairs.yml | 60 ++++++++++++------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/docassemble/MOHUDEvictionProject/data/questions/letter_to_request_repairs.yml b/docassemble/MOHUDEvictionProject/data/questions/letter_to_request_repairs.yml index bd620c2..6a7d231 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/letter_to_request_repairs.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/letter_to_request_repairs.yml @@ -41,6 +41,9 @@ metadata: update_notes: | New as of July 2024. This is a general letter and does not depend on specific law. --- +code: | + al_form_requires_digital_signature = False +--- code: | # This controls the default country and list of states in address field questions AL_DEFAULT_COUNTRY = "US" @@ -56,7 +59,7 @@ code: | al_form_type = "letter" --- objects: - - users: ALPeopleList + - users: ALPeopleList.using(ask_number=True, target_number=1) - other_parties: ALPeopleList.using(ask_number=True, target_number=1) --- sections: @@ -108,6 +111,8 @@ code: | al_intro_screen letter_to_request_repairs_intro interview_order_letter_to_request_repairs + nav.set_section("review_letter_to_request_repairs") + review_letter_to_request_repairs signature_date # Store anonymous data for analytics / statistics store_variables_snapshot( @@ -119,6 +124,7 @@ code: | "reached_interview_end": True, }, ) + nav.set_section("section_download") letter_to_request_repairs_download --- id: letter_to_request_repairs @@ -151,13 +157,10 @@ field: letter_kind buttons: - Polite reminder: repairs_only image: face-meh - css class: bg-yellow - Firm request: repairs_and_mention_rights image: face-frown - css class: bg-orange - Urgent demand: withhold_rent image: face-angry - css class: bg-red --- objects: - housing_conditions_options: DAOrderedDict.using(elements=housing_conditions_options_for_daordered_dict, auto_gather=False, gathered=True) @@ -246,9 +249,9 @@ fields: - Other phone: users[0].phone_number datatype: al_international_phone required: False - - Email: users[0].email - datatype: email - required: False + # - Email: users[0].email + # datatype: email + # required: False --- id: preview letter_to_request_repairs question: | @@ -273,41 +276,53 @@ id: Letter to request repairs review screen event: review_letter_to_request_repairs question: | Review your answers +subquestion: | + Look over your answers below. If you need to make any changes, click the "Edit" button + next to the answer that you want to change. + + Click "Resume" when you are finished. review: - - Edit: example_defects[1].description + - Edit: letter_kind + button: | + **Kind of letter**: + ${ letter_kind } + - Edit: housing_conditions button: | - **Example defects[1].description**: - ${ example_defects[1].description } + **Problems in your home**: + + % for item in housing_conditions.true_values(): + * ${ housing_conditions_options[item] } + % endfor + % if showifdef("housing_conditions_other"): + * ${ housing_conditions_other } + % endif - Edit: users.revisit button: | - **Users** + **About you** % for item in users: * ${ item } % endfor - Edit: other_parties.revisit button: | - **Other parties** + **About your landlord** % for item in other_parties: * ${ item } % endfor - - Edit: example_defects[2].description - button: | - **Example defects[2].description**: - ${ example_defects[2].description } + - Edit: lease_agreement_mentions_repairs button: | **Lease agreement mentions repairs**: - ${ lease_agreement_mentions_repairs } + ${ yesno(lease_agreement_mentions_repairs) } - Edit: repair_deadline_date button: | **Date of Repair deadline**: - ${ repair_deadline_date } + ${ yesno(repair_deadline_date) } - Edit: all_repairs_pending button: | **All repairs pending**: - ${ all_repairs_pending } + ${ yesno(all_repairs_pending) } --- continue button field: users.revisit question: | @@ -363,14 +378,17 @@ question: | All done subquestion: | Thank you ${users}. Your form is ready to download and deliver. + + 1. Preview your letter to make sure it looks right. Click the "Edit answers" button to fix any mistakes. + 1. Download or email yourself your form to keep for your records. + 1. Print and mail or email a copy to your landlord. This interview does **not** send the form to your landlord for you. - View, download and send your form below. Click the "Edit answers" button to fix any mistakes. + View, download and send your form below. ${ action_button_html(url_action('review_letter_to_request_repairs'), label='Edit answers', color='info') } ${ al_user_bundle.download_list_html() } - ${ al_user_bundle.send_button_html(show_editable_checkbox=True) }