diff --git a/docassemble/MOHUDEvictionProject/data/questions/MOHUDEvictionProject.yml b/docassemble/MOHUDEvictionProject/data/questions/MOHUDEvictionProject.yml index 5b8b0d0..61ac445 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/MOHUDEvictionProject.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/MOHUDEvictionProject.yml @@ -1,4 +1,5 @@ --- +id: edde include include: - shared.yml --- @@ -21,12 +22,15 @@ metadata: al_weaver_version: "1.7.0" generated on: "2022-09-08" --- +id: edde modules modules: - docassemble.ALToolbox.al_income --- +id: edde interview_short_title code: | interview_short_title = "Eviction Defender" --- +id: edde sections block sections: - section_eviction_answer_intro: Getting started - section_eviction_answer_can_i: Should you file an Answer? @@ -39,10 +43,12 @@ sections: - section_eviction_discovery: Discovery - section_eviction_answer_download: Download, print, deliver, and file --- +id: edde user role code: | user_role = user_ask_role = "defendant" --- ###################### Main order ###################### +id: main order mandatory: True code: | al_intro_screen @@ -110,37 +116,47 @@ code: | ) eviction_defender_download --- +id: snapshot_user_information_time code: | snapshot_user_information_time = current_datetime(timezone = 'America/Chicago') --- +id: beginning_to_user_information_duration code: | beginning_to_user_information_duration = date_difference(starting=start_time(timezone = 'America/Chicago'),ending = snapshot_user_information_time) --- +id: snapshot_case_information_time code: | snapshot_case_information_time = current_datetime(timezone = 'America/Chicago') --- +id: user_to_case_information_duration code: | user_to_case_information_duration = date_difference(starting=snapshot_user_information_time,ending = snapshot_case_information_time) --- +id: snapshot_review_time code: | snapshot_review_time = current_datetime(timezone = 'America/Chicago') --- +id: case_to_review_duration code: | case_to_review_duration = date_difference(starting=snapshot_case_information_time, ending = snapshot_review_time) --- +id: snapshot_discovery_time code: | snapshot_discovery_time = current_datetime(timezone = 'America/Chicago') --- +id: review_to_discovery_duration code: | review_to_discovery_duration = date_difference(starting=snapshot_review_time, ending = snapshot_discovery_time) --- +id: discovery_to_final_duration code: | discovery_to_final_duration = date_difference(starting=snapshot_discovery_time, ending = current_datetime(timezone = 'America/Chicago') ) --- +id: total_interview_duration code: | total_interview_duration = date_difference(starting=start_time(timezone = 'America/Chicago'),ending = current_datetime(timezone = 'America/Chicago') ) --- -id: defense logic order +id: defenses_list comment: | This can't be the best way to do this. Can a DADict act like a checkboxes dictionary? code: | @@ -199,6 +215,7 @@ code: | temp_defenses_list.append("Excessive Rent for Subsidized Housing") defenses_list = temp_defenses_list --- +id: track_intro code: | store_variables_snapshot( persistent=True, @@ -209,6 +226,7 @@ code: | ) track_intro = True --- +id: track_user_information code: | store_variables_snapshot( persistent=True, @@ -227,6 +245,7 @@ code: | ) track_user_information = True --- +id: track_case_information code: | store_variables_snapshot( persistent=True, @@ -249,6 +268,7 @@ code: | ) track_case_information = True --- +id: track_review code: | store_variables_snapshot( persistent=True, @@ -275,6 +295,7 @@ code: | ) track_review = True --- +id: track_discovery code: | store_variables_snapshot( persistent=True, @@ -304,9 +325,9 @@ code: | track_discovery = True --- #################### Interview order ##################### +id: interview_order_eviction comment: | Controls order and branching logic for questions specific to this form -id: interview_order_eviction code: | ############## Intro nav.set_section('section_eviction_answer_intro') @@ -416,24 +437,27 @@ code: | document_order = True --- +id: precheck_items code: | interrogatories.precheck_items(limit=24) document_requests.precheck_items(limit=None) precheck_items = True --- -## other parties +## other parties +id: plaintiffs code: | other_parties[i].name.first other_parties[i].attorney.gather() other_parties[i].complete = True --- ## other party's attorneys +id: plaintiffs attorney code: | other_parties[i].attorney[0].name.first other_parties[i].attorney.complete = True --- -sets: posting_warning id: soft exit posting eviction +sets: posting_warning decoration: hand question: | % if person_answering == "tenant": @@ -569,6 +593,7 @@ subquestion: | % endif continue button field: recommend_filing_answer --- +id: landlord problems section order code: | if warranty_breaches.any_true(): notice_of_breach_to_landlord @@ -679,14 +704,15 @@ continue button field: eviction_defender_intro buttons: - I agree: continue --- -only sets: case_type_kickout id: case type kickout for answer +only sets: case_type_kickout code: | if not case_type["AC Rent and Possession"] and not case_type["AC Landlord Action (Bulk)"]: if unlawful_detainer_kick_out_option: motion_to_continue_order case_type_kickout = True --- +id: petition review order code: | docket_number filing_date @@ -719,9 +745,11 @@ depends on: original_hearing_date_past code: | eviction_motion_for_leave_attachment.enabled = original_hearing_date_past --- +id: add eviction discovery if wants discovery code: | eviction_discovery_attachment.enabled = wants_discovery --- +id: add motion to shorten time if wants discovery and hearing date in future code: | motion_to_shorten_time_attachment.enabled = wants_discovery and not original_hearing_date_past --- @@ -733,6 +761,7 @@ id: add notice of hearing if any motions enabled code: | notice_of_hearing_attachment.enabled = motion_to_shorten_time_attachment.enabled or eviction_motion_for_leave_attachment.enabled or eviction_motion_to_continue_attachment.enabled --- +id: motions for hearing code: | motions_for_hearing_temp = list() if motion_to_shorten_time_attachment.enabled and "Motion to Shorten Time" not in motions_for_hearing_temp: @@ -743,6 +772,7 @@ code: | motions_for_hearing_temp.append("Motion to Continue") motions_for_hearing = motions_for_hearing_temp --- +id: assembled_documents code: | assembled_documents_temp = list() if "Answer" not in assembled_documents_temp: diff --git a/docassemble/MOHUDEvictionProject/data/questions/MOHUDMotionToContinue.yml b/docassemble/MOHUDEvictionProject/data/questions/MOHUDMotionToContinue.yml index c6ce579..5d9eb0b 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/MOHUDMotionToContinue.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/MOHUDMotionToContinue.yml @@ -13,6 +13,7 @@ metadata: - Ian Eisaman - Mia Bonardi --- +id: main interview order comment: | I added document_order, which is set in the individual interviews. ###################### Main order ###################### @@ -48,9 +49,9 @@ code: | eviction_defender_download --- #################### Interview order ##################### +id: interview_order_eviction_motion_to_continue comment: | Controls order and branching logic for the motion to continue, which may be used in a standalone interview and may be used in other interviews with other forms. -id: interview_order_eviction_motion_to_continue code: | # Set the allowed courts for this interview REMOVED nav.set_section('section_eviction_answer_intro') @@ -83,6 +84,7 @@ code: | set_progress(50) motion_to_continue_order = True --- +id: eviction defender metadata comment: | Global interview metadata This block needs to be above the include block so that this mandatory block is run before any mandatory blocks in the shared.yml @@ -105,14 +107,17 @@ data: typical role: "defendant" generate download screen: True --- +id: include motion to continue comment: | This needs to be below the global interview metadata include: - shared.yml --- +id: interview_short_title code: | interview_short_title = "Motion to Continue" --- +id: sections block sections: - section_eviction_answer_intro: Introduction - section_eviction_answer_can_i: Should you file a Motion to Continue? @@ -212,8 +217,8 @@ subquestion: | At the end you will have customized documents, ready to {file} in court. continue button field: greet_user --- -sets: posting_warning id: soft exit posting for motion for continuance +sets: posting_warning decoration: hand question: | % if person_answering == "tenant": @@ -340,21 +345,27 @@ subquestion: | % endif continue button field: recommend_filing_answer --- +id: eviction_answer_attachment enabled code: | eviction_motion_to_continue_attachment.enabled = True --- +id: eviction_answer_attachment disabled code: | eviction_answer_attachment.enabled = False --- +id: eviction_defender_post_interview_instructions disabled code: | eviction_defender_post_interview_instructions.enabled = False --- +id: eviction_motion_for_leave_attachment disabled code: | eviction_motion_for_leave_attachment.enabled = False --- +id: motion_to_shorten_time_attachment disabled code: | motion_to_shorten_time_attachment.enabled = False --- +id: eviction_discovery_attachment disabled code: | eviction_discovery_attachment.enabled = False --- diff --git a/docassemble/MOHUDEvictionProject/data/questions/al_reminders.yml b/docassemble/MOHUDEvictionProject/data/questions/al_reminders.yml index 573705a..f2d4034 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/al_reminders.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/al_reminders.yml @@ -1,5 +1,6 @@ ####### This file is not currently used because Case.net reminders are a better option ####### --- +id: allow_cron mandatory: True code: | allow_cron = True @@ -87,6 +88,7 @@ fields: lambda y: phone_number_is_valid(y) or validation_error("Enter a valid phone number") show if: al_user_preferred_reminder_formats["sms"] --- +id: al_reminders variable name: al_reminders data: filing_documents: @@ -99,6 +101,7 @@ code: | al_reminders[i]["initial sms template"] = "al_reminder_initial_sms_template" al_reminders[i]["initial email template"] = "al_reminder_initial_email_template" --- +id: al_reminder_initial_sms_template template: al_reminder_initial_sms_template content: | % if person_answering == "tenant": @@ -109,6 +112,7 @@ content: | The tenant will get the reminders at this phone number. % endif --- +id: al_reminder_initial_email_template template: al_reminder_initial_email_template subject: | % if person_answering == "tenant": @@ -125,6 +129,7 @@ content: | You will get the reminders using this email address. % endif --- +id: al_reminder_filing_template template: al_reminder_filing_template subject: | % if person_answering == "tenant": @@ -139,6 +144,7 @@ content: | If the tenant has not filed yet, they should make a plan to or file today! % endif --- +id: reminders response event: cron_daily code: | # NOTE: there can only be one cron_daily per interview. If you want to add additional daily cron tasks instead of replacing @@ -171,6 +177,7 @@ code: | allow_cron = False response() --- +id: reminders cold code: | if al_user_wants_reminders and task_not_yet_performed(f"al_reminder_initial_{reminder}"): if al_user_preferred_reminder_formats.get("email") and task_not_yet_performed(f"al_reminder_initial_{reminder}_email"): diff --git a/docassemble/MOHUDEvictionProject/data/questions/autoterms.yml b/docassemble/MOHUDEvictionProject/data/questions/autoterms.yml index 4bbcc4a..c6f7738 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/autoterms.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/autoterms.yml @@ -1,3 +1,4 @@ +id: terms terms: ABANDONED PROPERTY: | When a tenant leaves their stuff behind in the rental place after moving out and doesn't want to get it back. diff --git a/docassemble/MOHUDEvictionProject/data/questions/court_information.yml b/docassemble/MOHUDEvictionProject/data/questions/court_information.yml index c911189..862aaff 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/court_information.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/court_information.yml @@ -1,4 +1,5 @@ --- +id: county information depends on: users[0].address.address code: | users[0].address.address @@ -23,6 +24,7 @@ code: | trial_court.division = "Associate Division" trial_court.address.county = trial_court.county --- +id: trial_court.address code: | if len(county_dictionary[trial_court.county]["courts"]) == 1: trial_court.address.address = county_dictionary[trial_court.county]["courts"][0]["address"] @@ -102,7 +104,6 @@ fields: under: | ${ collapse_template(find_case_number_docket_template) } --- - id: reason for eviction question: | Why does your landlord say they are evicting you? @@ -345,6 +346,7 @@ fields: code: | not (tenant_got_summons and petition_available) --- +id: find_case_type_example_template template: find_case_type_example_template subject: | Where do I find the case type on Case.net? @@ -355,6 +357,7 @@ content: | ${ warn_picture_is_example_template } --- +id: what_if_i_disagree_template template: what_if_i_disagree_template subject: | What if the reason the landlord says is not true? @@ -401,6 +404,7 @@ fields: code: | county_list --- +id: find_county_name_template template: find_county_name_template subject: | What if I don't know the name of my county? @@ -408,13 +412,16 @@ content: | You can use [data.mo.gov](https://data.mo.gov/Geography/Missouri-Zip-Codes-by-County-City/im7g-fucq/data_preview) to look up your county based on zip code and/or city. --- +id: trial_court.county depends on: trial_court.county code: | trial_court.classification = county_dictionary[trial_court.county]['class'] --- +id: county_list code: county_list = sorted(county_dictionary.keys()) --- +id: casenet code depends on: - users[0].address.county - users[0].name.first @@ -478,6 +485,7 @@ subquestion: | % endif continue button field: docket_review_conclusion --- +id: county_dictionary variable name: county_dictionary data: Adair County: diff --git a/docassemble/MOHUDEvictionProject/data/questions/defense_logic.yml b/docassemble/MOHUDEvictionProject/data/questions/defense_logic.yml index 7348ff8..1bb5f4f 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/defense_logic.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/defense_logic.yml @@ -1,4 +1,5 @@ --- +id: defense modules modules: - .defenses --- @@ -39,6 +40,7 @@ code: | defense_logic = True --- +id: breach defense logic depends on: - defense_no_breach - defense_breach_not_material @@ -51,6 +53,7 @@ code: | else: defense_ud_did_not_violate_lease = None --- +id: lease requirements defense logic depends on: - got_notice_to_terminate - has_written_lease @@ -66,11 +69,13 @@ code: | else: defense_ud_lease_requirements = None --- +id: federal emergency not in effect code: | # See: 24 C.F.R. § 247.4 (c) # COVID-19 emergency currently not in effect is_federal_emergency = False --- +id: notice defense logic depends on: - is_federal_emergency - case_type @@ -94,6 +99,7 @@ code: | else: defense_termination_notice_required_by_law = None --- +id: failure to terminate logic depends on: - case_type - got_notice_to_terminate @@ -230,6 +236,7 @@ fields: field: unfair_duress datatype: yesnoradio --- +id: unfair_duress_explanation_template template: unfair_duress_explanation_template subject: | What counts as "unfair pressure"? @@ -292,6 +299,7 @@ fields: datatype: area show if: false_promises_exists --- +id: false_promise_example_template template: false_promise_example_template subject: | What counts as a false promise? @@ -542,10 +550,10 @@ depends on: - notice_contains_sale_document - trial_court.classification --- +id: new owner facts for non-class 1 counties depends on: trial_court.classification if: | trial_court.classification.strip() != "Class 1" -id: new owner facts for non-class 1 counties question: | % if person_answering == "tenant": Did your landlord ever sell the house while you were a tenant at this address? @@ -576,10 +584,10 @@ fields: datatype: yesnomaybe show if: notice_of_sale_provided_new_landlord --- +id: new owner facts for class 1 counties depends on: trial_court.classification if: | trial_court.classification.strip() == "Class 1" -id: new owner facts for class 1 counties question: | % if person_answering == "tenant": Did your landlord ever sell the house while you were living at this address? @@ -631,6 +639,7 @@ depends on: - is_rent_subsidized - excessive_rent --- +id: times_per_year_list variable name: times_per_year_list data: - [52, "Weekly"] @@ -764,6 +773,7 @@ fields: variable: kind_of_lease_agreement is: periodic --- +id: lease_type_text variable name: lease_type_text use objects: True data: @@ -780,6 +790,7 @@ data: question: Unknown document: Unknown --- +id: number_of_units_in_building_text variable name: number_of_units_in_building_text use objects: True data: @@ -793,6 +804,7 @@ data: document: four or more question: 4 or more --- +id: why_tenancy_facts_template template: why_tenancy_facts_template subject: | Why does this matter? @@ -912,6 +924,7 @@ fields: js show if: | val("tenant_has_disability") && val("tenant_asked_for_accommodation") --- +id: disability_defense_example_template template: disability_defense_example_template subject: | Can you give me an example? @@ -935,6 +948,7 @@ content: | * the request was related to the disability, and * it was reasonable (something the landlord could do without too much cost or trouble). --- +id: reasonable accommodation logic depends on: - tenant_has_disability - tenant_needs_accommodation @@ -958,12 +972,14 @@ fields: field: landlord_refused_section_8 datatype: yesnoradio --- +id: section 8 discrimination logic depends on: - users[0].address.city - landlord_refused_section_8 code: | defense_ll_refused_section_8 = users[0].normalized_address().city == "St. Louis" and landlord_refused_section_8 --- +id: what_is_disability_template template: what_is_disability_template subject: | What is a disability? @@ -1060,6 +1076,7 @@ fields: js show if: | val("tenant_protected_classes") && val("tenant_protected_classes").length --- +id: discrimination logic depends on: - tenant_believes_discrimination - tenant_protected_classes @@ -1117,6 +1134,7 @@ fields: required: False show if: tenant_is_being_evicted_because_of_dv --- +id: vawa logic depends on: - is_rent_subsidized - tenant_is_dv_survivor @@ -1128,6 +1146,7 @@ code: | tenant_is_being_evicted_because_of_dv ) --- +id: dv_explanation_template template: dv_explanation_template subject: | Can you give me an example? @@ -1142,6 +1161,7 @@ content: | the tenant, even though a tenant who was not a survivor of domestic violence could be evicted for the same reasons. --- +id: subsidized_housing_text variable name: subsidized_housing_text use objects: True data: @@ -1245,6 +1265,7 @@ fields: - Are rent charges separated from other charges: petition_separates_nonrent datatype: yesnomaybe --- +id: sets petition_alleges_norent if no rent allegation depends on: petition_states_rent_amount code: | if petition_states_rent_amount: @@ -1325,6 +1346,7 @@ fields: variable: notice_to_terminate_includes_specific_day is: specific_day --- +id: notice_to_terminate_includes_specific_day_text variable name: notice_to_terminate_includes_specific_day_text use objects: True data: @@ -1397,6 +1419,7 @@ fields: datatype: yesnomaybe show if: lease_says_how_much_notice --- +id: ud notice logic depends on: - got_notice_to_terminate code: | @@ -1405,6 +1428,7 @@ code: | else: defense_ud_no_written_notice = None --- +id: rental period logic depends on: - is_mobile_home_owner - rent_day @@ -1426,6 +1450,7 @@ code: | else: defense_ud_no_rental_period_notice = None --- +id: sets has written lease based on kind of lease depends on: - kind_of_lease_agreement code: | @@ -1512,6 +1537,7 @@ fields: field: petition_states_rent_periods datatype: yesnomaybe --- +id: sets states rent periods to false if no rent allegation if: | petition_states_rent_amount == False code: | @@ -1820,6 +1846,7 @@ fields: datatype: area rows: 2 --- +id: estoppel_breaches_text variable name: estoppel_breaches_text use objects: True data: @@ -1833,6 +1860,7 @@ data: document: The landlord does not have an occupancy permit for the home. question: The landlord does not have an occupancy permit for the home. --- +id: estoppel_explanation_template template: estoppel_explanation_template subject: | What other laws does a landlord have to follow? @@ -1842,6 +1870,7 @@ content: | If you are not sure, it is OK to leave this question blank. --- +id: conditions_text variable name: conditions_text use objects: True data: @@ -1901,6 +1930,7 @@ data: document: Broken smoke detectors --- ## leaving "you" references because not sure how to make conditional +id: cqe_breaches_text variable name: cqe_breaches_text use objects: True data: @@ -1953,6 +1983,7 @@ data: % endif document: Failed to exterminate or take care of vermin or pests in the walls making disruptive noises --- +id: bad_conditions_explanation_template template: bad_conditions_explanation_template subject: | % if person_answering == "tenant": @@ -2005,6 +2036,7 @@ fields: datatype: area show if: cqe_breaches["other"] --- +id: bqe_explanation_template template: bqe_explanation_template subject: | Why does this matter? @@ -2058,6 +2090,7 @@ fields: - ${ rent_amount_paid_text["a_portion"] }: a_portion show if: was_rent_paid --- +id: rent_amount_paid_text variable name: rent_amount_paid_text use objects: True data: diff --git a/docassemble/MOHUDEvictionProject/data/questions/discovery.yml b/docassemble/MOHUDEvictionProject/data/questions/discovery.yml index d50ccb8..d83b1f4 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/discovery.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/discovery.yml @@ -1,7 +1,9 @@ --- +id: discovery include modules: - .discovery --- +id: discovery objects objects: - interrogatories: DiscoveryDict.using(yaml_source="data/sources/interrogatories.yml") - document_requests: DiscoveryDict.using(yaml_source="data/sources/document_requests.yml") @@ -63,6 +65,7 @@ validation code: | if interrogatories.count_checked() > 25: validation_error("You can only ask up to 25 questions.") --- +id: review_discovery_requests continue button field: review_discovery_requests question: | Review discovery requests diff --git a/docassemble/MOHUDEvictionProject/data/questions/feedback.yml b/docassemble/MOHUDEvictionProject/data/questions/feedback.yml index 50b0664..8e11f3c 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/feedback.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/feedback.yml @@ -1,7 +1,9 @@ --- +id: feedback include include: - docassemble.AssemblyLine:feedback.yml --- +id: al_how_to_get_legal_help template: al_how_to_get_legal_help subject: | Do you need more help? @@ -16,16 +18,19 @@ content: | - [Missouri Tenant Help](https://motenanthelp.org/resources/) --- +id: al_app_name code: | # Set this to the name of your application # Defaults to checking for a possible name from global docassemble config al_app_name = "Missouri Tenant Help" --- +id: AL_ORGANIZATION_TITLE code: | # The name of your organization. Defaults to a similar value as `al_app_name`, # but is still distinct AL_ORGANIZATION_TITLE = "Missouri Tenant Help" --- +id: AL_ORGANIZATION_HOMEPAGE code: | AL_ORGANIZATION_HOMEPAGE = "https://motenanthelp.org/" --- diff --git a/docassemble/MOHUDEvictionProject/data/questions/file_a_motion.yml b/docassemble/MOHUDEvictionProject/data/questions/file_a_motion.yml index ef528ea..b6f6fdc 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/file_a_motion.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/file_a_motion.yml @@ -1,4 +1,5 @@ --- +id: file a motion include include: - shared.yml - court_information.yml @@ -18,6 +19,7 @@ metadata: - Ian Eisaman - Mia Bonardi --- +id: file a motion order mandatory: True code: | nav.set_section("section_intro") @@ -98,6 +100,7 @@ code: | signature_date motions_download --- +id: warning_kickout_loop reconsider: - go_to_review - warning_kickout @@ -107,9 +110,11 @@ code: | warning_kickout_loop = True --- +id: enable_al_nav_sections code: | enable_al_nav_sections = True --- +id: al_nav_sections reconsider: True variable name: al_nav_sections data from code: @@ -149,6 +154,7 @@ data from code: - section_download: | "Download, print, and file" --- +id: motion_for_leave_to_file_order code: | motion_for_leave_to_file_intro petition_date @@ -162,11 +168,13 @@ code: | motion_for_leave_to_file_preview motion_for_leave_to_file_order = True --- +id: motion_to_dismiss_order code: | motion_to_dismiss_intro motion_to_dismiss_preview motion_to_dismiss_order = True --- +id: motion_to_set_aside_judgment_order code: | motion_to_set_aside_intro petition_date @@ -174,6 +182,7 @@ code: | motion_to_set_aside_preview motion_to_set_aside_judgment_order = True --- +id: motion_to_shorten_time_order code: | motion_to_shorten_time_intro trial_date @@ -186,6 +195,7 @@ code: | motion_to_shorten_time_preview motion_to_shorten_time_order = True --- +id: motion_to_elevate_security_order code: | motion_to_elevate_security_intro opposing_party_consent_to_motion_to_elevate_security @@ -197,6 +207,7 @@ code: | motion_to_elevate_security_preview motion_to_elevate_security_order = True --- +id: notice_of_hearing_order code: | #notice_of_hearing_intro #new_hearing_date @@ -204,24 +215,31 @@ code: | #notice_of_hearing_preview notice_of_hearing_order = True --- +id: file_a_motion_helper_next_steps_attachment code: | file_a_motion_helper_next_steps_attachment.enabled = True --- +id: motion_for_leave_to_file_attachment code: | motion_for_leave_to_file_attachment.enabled = motion_list['motion_for_leave_to_file'] --- +id: motion_to_dismiss_attachment code: | motion_to_dismiss_attachment.enabled = motion_list['motion_to_dismiss'] --- +id: motion_to_set_aside_attachment code: | motion_to_set_aside_attachment.enabled = motion_list['motion_to_set_aside_judgment'] --- +id: motion_to_shorten_time_attachment code: | motion_to_shorten_time_attachment.enabled = motion_list['motion_to_shorten_time'] --- +id: motion_to_elevate_security_attachment code: | motion_to_elevate_security_attachment.enabled = motion_list['motion_to_elevate_security'] --- +id: notice_of_hearing_attachment code: | notice_of_hearing_attachment.enabled = motion_list.any_true() --- @@ -377,9 +395,9 @@ fields: You cannot continue unless you agree to the terms of use. continue button field: al_intro_screen --- +id: motion list reconsider: - motion_checkboxes -id: motion list question: | Which {motion|motions} do you need? fields: @@ -389,6 +407,7 @@ fields: code: | motion_checkboxes --- +id: motion_checkboxes code: | motion_checkboxes = {'motion_for_leave_to_file': 'Motion for Leave to File Responsive Pleadings', 'motion_to_dismiss': 'Motion to Dismiss or For a More Definite Statement', @@ -422,8 +441,8 @@ code: | # label: Motion to Set Aside Judgment # visible: ${ final_judgment or judgment_date_more_than_30 } --- -depends on: judgment_date id: Calculating if judgment_date is more then 30 days ago +depends on: judgment_date code: | thirty_days_ago = current_datetime() - date_interval(days=30) @@ -447,6 +466,7 @@ fields: max: ${ today() } show if: final_judgment --- +id: find_judgment_date_on_casenet template: find_judgment_date_on_casenet subject: | How do I find the judgment and date on Case.net? @@ -478,6 +498,7 @@ fields: - Explain: supporting_statement input type: area --- +id: ALAddress objects: - rental_address: ALAddress --- @@ -546,6 +567,7 @@ fields: - Default Judgment - Dismissal --- +id: find_outcome_on_casenet_template template: find_outcome_on_casenet_template subject: | % if person_answering == "tenant": @@ -786,6 +808,7 @@ fields: field: enough_time datatype: yesnoradio --- +id: no_dilatory_motive code: | if not unfair_motive and not enough_time: no_dilatory_motive = True @@ -830,6 +853,7 @@ fields: - Does ${ other_parties } consent to this Motion?: opposing_party_consent_to_motion_to_shorten_time datatype: yesnoradio --- +id: days_before_trial code: | before_trial = date_difference(starting=date_counsel_retained,ending=trial_date) if before_trial.days == 0: @@ -855,18 +879,21 @@ fields: js show if: | val("new_hearing_time") == "Other" --- +id: motions_attached code: | motions_attached = list() for motion in motion_list.true_values(): if not motion == "motion_to_shorten_time": motions_attached.append(motion_list[motion]) --- +id: motions_for_hearing code: | motions_for_hearing = list() for motion in motion_list.true_values(): if not motion == "notice_of_hearing": motions_for_hearing.append(motion_checkboxes[motion]) --- +id: motion_to_shorten_time_attachment attachment: - name: motion to shorten time filename: motion_to_shorten_time.docx @@ -874,6 +901,7 @@ attachment: skip undefined: True docx template file: motion_to_shorten_time.docx --- +id: motion_to_dismiss_attachment attachment: - name: motion to dismiss filename: motion_to_dismiss @@ -881,6 +909,7 @@ attachment: skip undefined: True docx template file: motion_to_dismiss.docx --- +id: motion_to_set_aside_attachment attachment: - name: motion to set aside filename: motion_to_set_aside @@ -888,6 +917,7 @@ attachment: skip undefined: True docx template file: motion_to_set_aside.docx --- +id: motion_for_leave_to_file_attachment attachment: - name: motion for leave to file answer filename: motion_for_leave_to_file_answer.docx @@ -895,6 +925,7 @@ attachment: skip undefined: True docx template file: motion_for_leave_to_file.docx --- +id: motion_to_elevate_security_attachment attachment: - name: motion to elevate security filename: motion_to_elevate_security.docx @@ -902,6 +933,7 @@ attachment: skip undefined: True docx template file: motion_to_elevate_security.docx --- +id: notice_of_hearing_attachment attachment: - name: notice of hearing filename: notice_of_hearing.docx @@ -909,6 +941,7 @@ attachment: skip undefined: True docx template file: notice_of_hearing.docx --- +id: file_a_motion_helper_next_steps_attachment attachment: - name: file a motion helper next steps filename: file_a_motion_helper_next_steps.docx @@ -916,27 +949,35 @@ attachment: skip undefined: True docx template file: file_a_motion_helper_next_steps.docx --- +id: objects block objects: - motion_to_set_aside_attachment: ALDocument.using(title="File a Motion to Set Aside Judgment", filename="motion_to_set_aside.docx", has_addendum=False, default_overflow_message=AL_DEFAULT_OVERFLOW_MESSAGE) --- +id: objects block objects: - motion_to_shorten_time_attachment: ALDocument.using(title="File a Motion to Shorten Time", filename="motion_to_shorten_time.docx", has_addendum=False, default_overflow_message=AL_DEFAULT_OVERFLOW_MESSAGE) --- +id: objects block objects: - motion_to_dismiss_attachment: ALDocument.using(title="File a Motion to Dismiss", filename="motion_to_dismiss.docx", has_addendum=False, default_overflow_message=AL_DEFAULT_OVERFLOW_MESSAGE) --- +id: objects block objects: - motion_for_leave_to_file_attachment: ALDocument.using(title="File a Motion for Leave to File Responsive Pleadings", filename="motion_for_leave_to_file_answer.docx", has_addendum=False, default_overflow_message=AL_DEFAULT_OVERFLOW_MESSAGE) --- +id: objects block objects: - motion_to_elevate_security_attachment: ALDocument.using(title="File a Motion to Elevate Security", filename="motion_to_elevate_security.docx", has_addendum=False, default_overflow_message=AL_DEFAULT_OVERFLOW_MESSAGE) --- +id: objects block objects: - notice_of_hearing_attachment: ALDocument.using(title="File a Notice of Hearing", filename="notice_of_hearing.docx", has_addendum=False, default_overflow_message=AL_DEFAULT_OVERFLOW_MESSAGE) --- +id: objects block objects: - file_a_motion_helper_next_steps_attachment: ALDocument.using(title="Next Steps to File a Motion", filename="next_steps.docx", has_addendum=False, default_overflow_message=AL_DEFAULT_OVERFLOW_MESSAGE) --- +id: objects block objects: - al_user_bundle: ALDocumentBundle.using(elements=[file_a_motion_helper_next_steps_attachment, motion_to_dismiss_attachment, motion_to_shorten_time_attachment, motion_to_set_aside_attachment, motion_for_leave_to_file_attachment, motion_to_elevate_security_attachment,notice_of_hearing_attachment], filename="motions.docx", title="All forms to download for your records", enabled=True) - al_court_bundle: ALDocumentBundle.using(elements=attachment_list_court, filename="motions.docx", title="All forms to download for your records", enabled=True) @@ -1390,12 +1431,11 @@ review: Date: ${ showifdef('new_hearing_time') } --- - -event: |- - rental_address.revisit - id: |- revisit rental_address + +event: |- + rental_address.revisit question: |- Edit your answers about Rental Address diff --git a/docassemble/MOHUDEvictionProject/data/questions/information_collected.yml b/docassemble/MOHUDEvictionProject/data/questions/information_collected.yml index 6574963..13acf3d 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/information_collected.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/information_collected.yml @@ -1,4 +1,5 @@ --- +id: information_collected code: | what_happens_at_the_hearing_ic = list() what_the_judge_can_do_at_the_hearing_ic = list() diff --git a/docassemble/MOHUDEvictionProject/data/questions/legalaidlocator.yml b/docassemble/MOHUDEvictionProject/data/questions/legalaidlocator.yml index efe841f..e062db9 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/legalaidlocator.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/legalaidlocator.yml @@ -1,3 +1,4 @@ +id: legal aid locator include include: - docassemble.AssemblyLine:assembly_line.yml - docassemble.ALAnyState:any_state.yml @@ -22,6 +23,7 @@ metadata: - Ian Eisaman - Mia Bonardi --- +id: locate legal aid program mandatory: True question: | ${ county_dictionary[trial_court.county]["legal_aid_program"] } @@ -41,6 +43,7 @@ subquestion: | code: | users[0].name = "Not Important" --- +id: AL_DEFAULT_STATE code: | AL_DEFAULT_STATE = "Missouri" --- diff --git a/docassemble/MOHUDEvictionProject/data/questions/reminder.yml b/docassemble/MOHUDEvictionProject/data/questions/reminder.yml index d92731d..a5e39bf 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/reminder.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/reminder.yml @@ -77,6 +77,7 @@ help: | you want the tenant's information to be shared. % endif --- +id: send_user_email code: | if email_after_completion and wants_email and task_not_yet_performed("interview complete email"): send_email(task="interview complete email",to=users[0].email, template=interview_complete_email, attachments=[zip_file(al_user_bundle.as_list(), filename="Eviction_Forms.zip")]) @@ -84,6 +85,7 @@ code: | send_sms(to=phone_number_in_e164(users[0].phone_number), template=interview_complete_text, task='interview complete text') send_user_email = True --- +id: cron_daily event: cron_daily code: | import time @@ -105,6 +107,7 @@ code: | response() # This stops Docassemble from running the rest of the interview and potentially running into an error --- +id: court_reminder_email template: court_reminder_email subject: | % if person_answering == "tenant": @@ -151,6 +154,7 @@ content: | on ${format_date(start_time())}. % endif --- +id: attend_court_text template: attend_court_text content: | % if person_answering == "tenant": @@ -179,6 +183,7 @@ content: | - MADE from GBLS % endif --- +id: interview_complete_email template: interview_complete_email subject: | You finished the eviction interview! Keep this for your records (Massachusetts Defense for Eviction) for ${other_parties} v. ${users} @@ -217,6 +222,7 @@ content: | Was MADE helpful? [Tell us here](https://www.surveymonkey.com/r/8T2KZBV). --- +id: interview_complete_text template: interview_complete_text content: | Congrats on finishing the interview! diff --git a/docassemble/MOHUDEvictionProject/data/questions/review.yml b/docassemble/MOHUDEvictionProject/data/questions/review.yml index a1a9522..387b6c7 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/review.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/review.yml @@ -6,6 +6,7 @@ question: | subquestion: | ${ nonpayment_defense_explanation_template } --- +id: nonpayment_defense_explanation_template template: nonpayment_defense_explanation_template content: | Based on your answers, the following defenses are included in @@ -130,36 +131,42 @@ content: | % endif % endif --- +id: defense_failure_to_terminate_template template: defense_failure_to_terminate_template subject: | Landlord did not properly terminate the tenancy in accordance with RSMo § 441.060 content: | A landlord must give proper notice to terminate a lease. --- +id: defense_ud_did_not_violate_lease_template template: defense_ud_did_not_violate_lease_template subject: | Tenant denies that Tenant violated the terms of Tenant's lease or that the claimed violation is a material breach content: | A landlord should have to prove that the tenant committed a violation serious enough to evict for. --- +id: defense_discrimination_template template: defense_discrimination_template subject: | Landlord discriminated against Tenant in violation of state and federal law content: | Civil rights laws protect tenants from a landlord discriminating against them because of their race, gender, or other protected status. --- +id: defense_reasonable_accommodation_template template: defense_reasonable_accommodation_template subject: | Landlord failed to reasonably accommodate Tenant's disability content: | A landlord must make reasonable accommodations for a tenant's disability. If the landlord fails to make a reasonable accommodation, the landlord should not be able to evict the tenant for problems caused by that failure. --- +id: defense_vawa_template template: defense_vawa_template subject: | Tenant has a defense under the provisions of the Violence Against Women Act, 34 U.S.C. § 12491, et seq. content: | Residents of subsidized housing cannot be evicted because they are victims of domestic violence. --- +id: defense_rent_pleading_requirement_template template: defense_rent_pleading_requirement_template subject: | Landlord failed to state a claim for rent and possession @@ -218,6 +225,7 @@ content: | % endif % endif --- +id: defense_liquidated_damages_late_fees_template template: defense_liquidated_damages_late_fees_template subject: | The late fees attached to the Landlord’s Petition are @@ -246,18 +254,21 @@ content: | This defense alone may not help the tenant avoid the eviction, but it can reduce the amount of money the tenant owes the landlord. % endif --- +id: defense_foreclosure_template template: defense_foreclosure_template subject: | The premises have been foreclosed upon but the Landlord has not followed proper procedures content: | There are special protections for tenants when their landlord loses the home through foreclosure. The new owner of the home is required to provide notice of the foreclosure --- +id: defense_unrepresented_corporation_template template: defense_unrepresented_corporation_template subject: | The Landlord is required to have an attorney in this case and it must be dismissed content: | A business entity, like a corporation, must have an attorney to evict a tenant in court. --- +id: defense_lease_not_attached_template template: defense_lease_not_attached_template subject: | Plaintiff did not provide a copy or description of the lease @@ -266,6 +277,7 @@ subject: | content: | A landlord must attach the written {lease} to the landlord's petition to be able to evict. --- +id: defense_tender_refused_template template: defense_tender_refused_template subject: | Landlord refused Tenant’s tender of rent @@ -282,12 +294,14 @@ content: | The tenant will need proof such as a letter from the landlord refusing to accept the money, a written check or money order or a witness to the landlord’s refusal. If the tenant has no proof, the tenant can offer to pay the amount claimed plus court costs in front of the judge. Make sure the tenant has a certified check, money order or cash for the full amount with the tenant. Full payment of rent owed plus {court costs} is the tenant's best defense. % endif --- +id: defense_rent_payment_template template: defense_rent_payment_template subject: | Tenant has paid the rent allegedly owed content: | A landlord also needs to allege that a tenant didn't make the payment that a tenant is obligated to make. --- +id: defense_settlement_template template: defense_settlement_template subject: | Landlord and Tenant entered into a settlement agreement and Tenant has complied with the settlement’s terms @@ -298,6 +312,7 @@ content: | The tenant can enforce a {settlement|settlement agreement} the tenant made with the landlord to avoid an eviction. The tenant will need to prove that the tenant made an agreement and that the tenant did what the tenant was required to do under the agreement. % endif --- +id: defense_lease_signed_under_duress_template template: defense_lease_signed_under_duress_template subject: | The lease is invalid because unfair duress by Landlord caused Tenant to enter the lease @@ -308,6 +323,7 @@ content: | A landlord who forced the tenant or coerced the tenant into signing a lease should not be able to hold the tenant responsible to charges under that lease. % endif --- +id: defense_fraud_lease_template template: defense_fraud_lease_template subject: | Landlord’s fraudulent promises induced Tenant to enter the lease @@ -318,12 +334,14 @@ content: | A landlord who tricks the tenant into signing a lease should not be able to hold the tenant responsible to charges under that lease. % endif --- +id: defense_estoppel_illegality_template template: defense_estoppel_illegality_template subject: | Landlord is estopped from enforcement of the lease because it has violated Missouri law content: | "Estopped" means that a landlord should be prevented from benefiting from a lease if a landlord already violated the law. --- +id: defense_breach_of_habitability_template template: defense_breach_of_habitability_template subject: | Landlord has breached the implied warranty of habitability @@ -334,12 +352,14 @@ content: | For example, the landlord has let the building run down and has not fixed major problems such as lack of running water, even after being notified of such problems. The tenant should ask the judge to let the tenant stay and either continue to pay a lower rent, make the landlord pay the tenant for damages caused by the landlord’s failure to make needed repairs or excuse the tenant from paying all, or part of, the back rent owed. The tenant will need proof such as photos, letters to the tenant's landlord asking for repairs, copies of code violation reports or witnesses such as the building inspector. In some cases, the court may ask for proof that the tenant has set aside the money the tenant did not pay. % endif --- +id: defense_new_owner_failed_to_provide_notice_of_sale_template template: defense_new_owner_failed_to_provide_notice_of_sale_template subject: | The premises have been sold but the prior Landlord has not provided Tenant the required notices and therefore no rent is owed content: | There are special protections for tenants when their landlord sells the tenant's home. The new owner of the home is required to provide proof of the sale. --- +id: defense_excessive_rent_for_subsidized_housing_template template: defense_excessive_rent_for_subsidized_housing_template subject: | Plaintiff has charged Defendant excessive rent in violation of the housing subsidy @@ -2271,6 +2291,7 @@ review: - raw html: | ${ end_accordion() } --- +id: users.revisit continue button field: users.revisit question: | Edit users @@ -2279,6 +2300,7 @@ subquestion: | ${ users.add_action() } --- +id: users.table table: users.table rows: users columns: @@ -2291,6 +2313,7 @@ edit: - address confirm: True --- +id: other_parties.revisit continue button field: other_parties.revisit question: | Edit Plaintiffs/Landlord @@ -2299,6 +2322,7 @@ subquestion: | ${ other_parties.add_action() } --- +id: other_parties.table table: other_parties.table rows: other_parties columns: @@ -2314,6 +2338,7 @@ edit: - attorney.revisit confirm: True --- +id: other_parties attorney.revisit continue button field: other_parties[i].attorney.revisit question: | Attorney for ${ other_parties[i] } @@ -2322,6 +2347,7 @@ subquestion: | ${ other_parties[i].attorney.add_action() } --- +id: other_parties attorney.table table: other_parties[i].attorney.table rows: other_parties[i].attorney columns: @@ -2333,6 +2359,7 @@ edit: - address.address - name.first --- +id: false_promises.revisit continue button field: false_promises.revisit question: | Edit False Promises Made By Landlord @@ -2341,6 +2368,7 @@ subquestion: | ${ false_promises.add_action() } --- +id: false_promises.table table: false_promises.table rows: false_promises columns: @@ -2348,6 +2376,7 @@ columns: row_item edit: True --- +id: offer_attempts.revisit continue button field: offer_attempts.revisit question: | Edit Attempts to Pay Rent @@ -2356,6 +2385,7 @@ subquestion: | ${ offer_attempts.add_action() } --- +id: offer_attempts.table table: offer_attempts.table rows: offer_attempts columns: diff --git a/docassemble/MOHUDEvictionProject/data/questions/shared.yml b/docassemble/MOHUDEvictionProject/data/questions/shared.yml index 342b19a..9c78627 100644 --- a/docassemble/MOHUDEvictionProject/data/questions/shared.yml +++ b/docassemble/MOHUDEvictionProject/data/questions/shared.yml @@ -1,3 +1,4 @@ +id: shared include block include: - docassemble.AssemblyLine:assembly_line.yml - docassemble.GithubFeedbackForm:embedded_review.yml @@ -9,17 +10,21 @@ include: - autoterms.yml - discovery.yml --- +id: shared modules modules: - docassemble.demo.accordion --- +id: feedback_form code: | feedback_form = f"{user_info().package}:feedback.yml" --- +id: features features: bootstrap theme: motenanthelp.bootstrap.css css: custom.css inverse navbar: False --- +id: default screen parts default screen parts: pre: | logo: | @@ -31,6 +36,7 @@ default screen parts: ${ al_logo.alt_text } --- +id: main objects block objects: - other_parties: ALPeopleList.using(there_are_any=True,complete_attribute="complete") - other_parties[i].attorney: ALPeopleList.using(complete_attribute="complete") @@ -38,41 +44,52 @@ objects: - users: ALPeopleList.using(there_are_any=True) - offer_attempts: DAList.using(object_type=DAObject, complete_attribute="attempt_date") --- +id: github_repo_name code: | github_repo_name = 'docassemble-MOHUDEvictionProject' --- +id: logo objects: - al_logo: DAStaticFile.using(filename="logo.svg") --- +id: interview_metadata code: | interview_metadata['main_interview_key'] = 'eviction_defender' --- +id: AL_DEFAULT_COUNTRY code: | AL_DEFAULT_COUNTRY = "US" --- +id: AL_DEFAULT_STATE code: | AL_DEFAULT_STATE = "MO" --- +id: al_form_type code: | al_form_type = "existing_case" --- +id: AL_ORGANIZATION_TITLE code: | AL_ORGANIZATION_TITLE = "Missouri Tenant Help" --- +id: AL_ORGANIZATION_HOMEPAGE code: | AL_ORGANIZATION_HOMEPAGE = "https://motenanthelp.org/" --- +id: user_started_case code: | user_started_case = False --- +id: landlord_doc_name code: | landlord_doc_name = "Plaintiff" --- +id: tenant_doc_name code: | tenant_doc_name = "Defendant" --- -event: about_this_interview id: about AssemblyLine project +event: about_this_interview question: | About this form # TODO: I think people might want more form-specific info here? @@ -91,6 +108,7 @@ subquestion: | back button label: | Back to form --- +id: about_this_interview_version_info template: about_this_interview_version_info content: | "${all_variables(special='metadata').get('title','').rstrip()}" version @@ -176,6 +194,7 @@ fields: - code: | users[0].attorney[0].name_fields() --- +id: tenants attorney address sets: - users[0].attorney[0].address.address - users[0].attorney[0].address.city @@ -183,7 +202,6 @@ sets: - users[0].attorney[0].address.unit - users[0].attorney[0].address.state - users[0].attorney[0].address.country -id: tenants attorney address generic object: ALIndividual question: | What is your address for the {pleadings|pleading}? @@ -235,6 +253,7 @@ fields: - Is there another {Plaintiff}?: other_parties.there_is_another datatype: yesnomaybe --- +id: find_other_plaintiffs_template Template: find_other_plaintiffs_template Subject: | % if tenant_got_summons and petition_available: @@ -274,6 +293,7 @@ fields: - Is ${ other_parties[i] } represented by an {attorney}?: other_parties[i].attorney.there_are_any datatype: yesnoradio --- +id: find_plaintiff_attorney_representation_template Template: find_plaintiff_attorney_representation_template Subject: | % if tenant_got_summons and petition_available: @@ -320,6 +340,7 @@ fields: - code: | other_parties[i].attorney[j].name_fields() --- +id: find_plaintiff_attorney_name_template Template: find_plaintiff_attorney_name_template Subject: | % if tenant_got_summons and petition_available: @@ -410,6 +431,7 @@ fields: js show if: | val("original_hearing_time") == "Other" --- +id: find_original_hearing_on_casenet_template template: find_original_hearing_on_casenet_template subject: | % if tenant_got_summons and petition_available: @@ -483,8 +505,8 @@ fields: field: past_hearings datatype: yesnomaybe --- -depends on: original_hearing_date id: Calculating if hearing date is past +depends on: original_hearing_date code: | original_hearing_date_past = original_hearing_date < today() --- @@ -556,6 +578,7 @@ fields: variable: other_parties[i].person_type is: "business" --- +id: find_landlord_name_on_casenet_template template: find_landlord_name_on_casenet_template subject: | % if person_answering == "tenant": @@ -582,6 +605,7 @@ content: | [FILE ComplaintCaptionPlaintiff.png, 100%] % endif --- +id: warn_picture_is_example_template template: warn_picture_is_example_template content: |