gitextract_3yjwnnlc/ ├── .coderabbit.yaml ├── .coveragerc ├── .dockerignore ├── .editorconfig ├── .github/ │ ├── CODEOWNERS │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ └── commcare-enhancement-proposal.md │ ├── PULL_REQUEST_TEMPLATE.md │ ├── dependabot.yml │ ├── labels.yml │ ├── release.yml │ └── workflows/ │ ├── build-static.yml │ ├── codeql-analysis.yml │ ├── dependency-metrics.yml │ ├── docker-image.yml │ ├── lint.yml │ ├── rebuild-staging.yml │ ├── required-labels.yml │ ├── test-docs.yml │ ├── tests.yml │ └── update-translations.yml ├── .gitignore ├── .gitmodules ├── .isort.cfg ├── .python-version ├── .pytype.cfg ├── .readthedocs.yml ├── .scss-lint.yml ├── .transifexrc.example ├── .tx/ │ └── config ├── AGENTS.md ├── CODE_STANDARDS.md ├── CONTRIBUTING.rst ├── DEV_FAQ.md ├── DEV_SETUP.md ├── DEV_SETUP_MAC.md ├── Dockerfile ├── Dockerfile_incl ├── Gruntfile.js ├── LICENSE ├── Makefile ├── README.md ├── STANDARDS.rst ├── codecov.yml ├── corehq/ │ ├── README.rst │ ├── __init__.py │ ├── apps/ │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── accounting/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── async_handlers.py │ │ │ ├── automated_reports.py │ │ │ ├── bootstrap/ │ │ │ │ ├── __init__.py │ │ │ │ ├── config/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── annual_plans_may_2024.py │ │ │ │ │ ├── enterprise.py │ │ │ │ │ ├── form_submitting_mobile_worker_feature_rate.py │ │ │ │ │ ├── new_plans_dec_2019.py │ │ │ │ │ ├── remove_free_50_sms_sep_2023.py │ │ │ │ │ ├── report_builder_v0.py │ │ │ │ │ ├── resellers_and_managed_hosting.py │ │ │ │ │ ├── standard_pricing_march_2018.py │ │ │ │ │ ├── standard_update_april_2025.py │ │ │ │ │ ├── standard_user_limit_march_2018.py │ │ │ │ │ ├── standard_user_limit_october_2018.py │ │ │ │ │ ├── testing.py │ │ │ │ │ ├── user_buckets_august_2018.py │ │ │ │ │ ├── user_buckets_jan_2017.py │ │ │ │ │ └── web_user_feature_rate.py │ │ │ │ ├── features.py │ │ │ │ └── utils.py │ │ │ ├── const.py │ │ │ ├── decorators.py │ │ │ ├── dispatcher.py │ │ │ ├── emails.py │ │ │ ├── exceptions.py │ │ │ ├── filters.py │ │ │ ├── forms.py │ │ │ ├── interface.py │ │ │ ├── invoice_pdf.py │ │ │ ├── invoicing.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── add_operations_user.py │ │ │ │ ├── change_role_for_software_plan_version.py │ │ │ │ ├── create_test_pdf_templates.py │ │ │ │ ├── find_inactive_custom_modules.py │ │ │ │ ├── get_minimum_features_by_domain.py │ │ │ │ ├── get_partner_domain_user_history.py │ │ │ │ ├── list_customer_billing_account_software_plan.py │ │ │ │ ├── list_prepayments_by_year.py │ │ │ │ └── make_domain_enterprise_level.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_squashed_0052_ensure_report_builder_plans.py │ │ │ │ ├── 0002_auto_20170222_2008.py │ │ │ │ ├── 0003_auto_20170328_2102.py │ │ │ │ ├── 0004_auto_20170404_0028.py │ │ │ │ ├── 0005_automatic_downgrade_adjustment_method.py │ │ │ │ ├── 0006_unique_active_domain_subscription.py │ │ │ │ ├── 0007_practice_mobile_workers.py │ │ │ │ ├── 0008_update_report_builder_included_feature_numbers.py │ │ │ │ ├── 0009_make_billingaccount_name_unique.py │ │ │ │ ├── 0010_remove_softwareproduct_product_type.py │ │ │ │ ├── 0011_remove_softwareproduct.py │ │ │ │ ├── 0012_replace__product_type__with__is_product.py │ │ │ │ ├── 0013_subscription_dates_check.py │ │ │ │ ├── 0014_paymentmethod__web_user__nonnullable.py │ │ │ │ ├── 0015_grandfather_login_as.py │ │ │ │ ├── 0016_grandfather_reportbuilder_5_pro.py │ │ │ │ ├── 0017_nonnullable_char_fields.py │ │ │ │ ├── 0018_alter_nonnullable_char_fields.py │ │ │ │ ├── 0019_standard_pricing_march_2018.py │ │ │ │ ├── 0020_payment_method__unique_together.py │ │ │ │ ├── 0021_standard_user_limit_march_2018.py │ │ │ │ ├── 0022_add__skip_auto_downgrade_reason.py │ │ │ │ ├── 0023_auto_20180501_1813.py │ │ │ │ ├── 0024_unique__transaction_id.py │ │ │ │ ├── 0025_auto_20180508_1952.py │ │ │ │ ├── 0026_auto_20180508_1956.py │ │ │ │ ├── 0027_auto_20180509_1857.py │ │ │ │ ├── 0028_auto_20180604_1757.py │ │ │ │ ├── 0029_auto_20180605_1826.py │ │ │ │ ├── 0030_softwareplan_max_domains.py │ │ │ │ ├── 0031_billingaccount_billing_admin_emails.py │ │ │ │ ├── 0032_billingaccount_invoicing_plan.py │ │ │ │ ├── 0032_customerinvoice_squashed_0036_customerbillingrecord.py │ │ │ │ ├── 0033_auto_20180709_1837.py │ │ │ │ ├── 0034_merge_20180711_1828.py │ │ │ │ ├── 0034_remove_subscription_date_delay_invoicing.py │ │ │ │ ├── 0035_enterprise_settings.py │ │ │ │ ├── 0035_merge_20180711_2039.py │ │ │ │ ├── 0036_domainuserhistory.py │ │ │ │ ├── 0037_merge_20180807_0915.py │ │ │ │ ├── 0038_remove_billingaccount_restrict_signup_email.py │ │ │ │ ├── 0039_auto_20180828_2258.py │ │ │ │ ├── 0040_auto_20181002_1721.py │ │ │ │ ├── 0041_auto_20190130_1709.py │ │ │ │ ├── 0042_domain_user_history__unique__and__nonnullable.py │ │ │ │ ├── 0043_grandfather_case_privs.py │ │ │ │ ├── 0044_grandfather_odata_privs.py │ │ │ │ ├── 0045_grandfather_data_forwarding_privs.py │ │ │ │ ├── 0046_new_plans.py │ │ │ │ ├── 0047_invoice_communication.py │ │ │ │ ├── 0048_friendly_writeoff.py │ │ │ │ ├── 0049_auto_20200924_1753.py │ │ │ │ ├── 0050_app_user_profiles.py │ │ │ │ ├── 0051_hubspot_restrictions.py │ │ │ │ ├── 0052_geocoder_permissions.py │ │ │ │ ├── 0053_app_user_profiles_advanced.py │ │ │ │ ├── 0054_default_export_settings.py │ │ │ │ ├── 0055_linked_projects.py │ │ │ │ ├── 0056_add_release_management.py │ │ │ │ ├── 0057_add_sms_report_toggle.py │ │ │ │ ├── 0058_delete_linked_projects_role.py │ │ │ │ ├── 0059_add_lite_release_management_priv.py │ │ │ │ ├── 0060_add_loadtest_users_priv.py │ │ │ │ ├── 0061_remove_enterprise_v1.py │ │ │ │ ├── 0062_add_release_management_to_enterprise.py │ │ │ │ ├── 0063_replace_linked_projects_ff_with_erm.py │ │ │ │ ├── 0064_add_form_link_workflow_priv.py │ │ │ │ ├── 0065_phone_apk_heartbeat_privs.py │ │ │ │ ├── 0066_data_file_download_priv.py │ │ │ │ ├── 0067_add_view_app_diff_priv.py │ │ │ │ ├── 0068_regex_field_validation_privilege.py │ │ │ │ ├── 0069_location_safe_case_imports_priv.py │ │ │ │ ├── 0070_form_case_ids_case_importer_priv.py │ │ │ │ ├── 0071_add_billingaccountwebuserhistory.py │ │ │ │ ├── 0072_export_multisort_priv.py │ │ │ │ ├── 0073_export_ownership_priv.py │ │ │ │ ├── 0074_filtered_bulk_user_download_priv.py │ │ │ │ ├── 0075_application_error_report_priv.py │ │ │ │ ├── 0076_location_owner_in_report_builder_priv.py │ │ │ │ ├── 0077_case_list_explorer_priv.py │ │ │ │ ├── 0078_revert_location_owner_in_report_builder_priv.py │ │ │ │ ├── 0079_add_web_user_feature.py │ │ │ │ ├── 0080_add_web_user_feature_in_other_models.py │ │ │ │ ├── 0081_billingaccount_bill_web_user.py │ │ │ │ ├── 0082_application_error_report_priv.py │ │ │ │ ├── 0083_data_dictionary_priv.py │ │ │ │ ├── 0084_copy_cases_priv.py │ │ │ │ ├── 0085_remove_free_50_sms.py │ │ │ │ ├── 0086_add_duplicate_invoice_id_to_invoice_model.py │ │ │ │ ├── 0087_invoice_unique_constraints.py │ │ │ │ ├── 0088_add_new_softwareplan_visibility.py │ │ │ │ ├── 0089_dedupe_priv.py │ │ │ │ ├── 0090_custom_domain_alerts_priv.py │ │ │ │ ├── 0091_remove_custom_banner_alerts_feature_flag.py │ │ │ │ ├── 0092_revert_application_error_report_priv.py │ │ │ │ ├── 0093_defaultproductplan_is_annual_plan.py │ │ │ │ ├── 0094_add_annual_softwareplans.py │ │ │ │ ├── 0095_update_softwareplan_visibilities.py │ │ │ │ ├── 0096_formsubmittingmobileworkerhistory_and_featuretype_choice.py │ │ │ │ ├── 0097_add_form_submitting_mobile_worker_feature.py │ │ │ │ ├── 0098_app_dependencies_priv.py │ │ │ │ ├── 0099_data_cleaning_priv.py │ │ │ │ ├── 0100_alter_customerinvoicecommunicationhistory_communication_type_and_more.py │ │ │ │ ├── 0101_update_standard_plan_pricing_users_and_privs.py │ │ │ │ ├── 0102_alter_defaultproductplan_edition_and_more.py │ │ │ │ ├── 0103_bulk_data_cleaning_priv.py │ │ │ │ ├── 0104_fix_priv_community_rename.py │ │ │ │ ├── 0105_alter_billingcontactinfo_city_and_more.py │ │ │ │ ├── 0106_alter_billingcontactinfo_company_name.py │ │ │ │ ├── 0107_two_stage_mobile_worker_creation_priv.py │ │ │ │ ├── 0108_subscription_auto_renew_and_more.py │ │ │ │ ├── 0109_enable_all_add_ons_priv.py │ │ │ │ ├── 0110_alter_customerinvoicecommunicationhistory_communication_type_and_more.py │ │ │ │ ├── 0111_rename_is_auto_invoiceable_billingaccount_require_auto_pay.py │ │ │ │ ├── 0112_data_dict_types_priv.py │ │ │ │ ├── 0113_geojson_export_priv.py │ │ │ │ ├── 0114_custom_icon_badges_priv.py │ │ │ │ ├── 0115_loc_cols_in_user_last_activity_priv.py │ │ │ │ ├── 0116_creditadjustment_payment_type.py │ │ │ │ └── __init__.py │ │ │ ├── mixins.py │ │ │ ├── models.py │ │ │ ├── payment_handlers.py │ │ │ ├── signals.py │ │ │ ├── static/ │ │ │ │ └── accounting/ │ │ │ │ └── js/ │ │ │ │ ├── base_subscriptions_main.js │ │ │ │ ├── billing_account_form.js │ │ │ │ ├── confirm_plan.js │ │ │ │ ├── credits.js │ │ │ │ ├── credits_tab.js │ │ │ │ ├── payment_method_handler.js │ │ │ │ ├── pricing_table.js │ │ │ │ ├── renew_plan_selection.js │ │ │ │ ├── report_filter_actions.js │ │ │ │ ├── software_plan_version_handler.js │ │ │ │ ├── stripe.js │ │ │ │ ├── subscriptions_main.js │ │ │ │ └── widgets.js │ │ │ ├── subscription_changes.py │ │ │ ├── task_utils.py │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── accounting/ │ │ │ │ ├── accounting_admins.html │ │ │ │ ├── accounts.html │ │ │ │ ├── accounts_base.html │ │ │ │ ├── email/ │ │ │ │ │ ├── autopay_card_removed.html │ │ │ │ │ ├── autopay_failed.html │ │ │ │ │ ├── autopay_failed.txt │ │ │ │ │ ├── bookkeeper.html │ │ │ │ │ ├── bookkeeper.txt │ │ │ │ │ ├── bulk_payment_receipt.html │ │ │ │ │ ├── bulk_payment_receipt.txt │ │ │ │ │ ├── credit_receipt.html │ │ │ │ │ ├── credit_receipt.txt │ │ │ │ │ ├── credits_on_hq.html │ │ │ │ │ ├── credits_on_hq.txt │ │ │ │ │ ├── customer_invoice.html │ │ │ │ │ ├── customer_invoice.txt │ │ │ │ │ ├── digest.html │ │ │ │ │ ├── digest.txt │ │ │ │ │ ├── downgrade.html │ │ │ │ │ ├── downgrade.txt │ │ │ │ │ ├── downgrade_warning.html │ │ │ │ │ ├── downgrade_warning.txt │ │ │ │ │ ├── invoice.html │ │ │ │ │ ├── invoice.txt │ │ │ │ │ ├── invoice_autopay_setup.html │ │ │ │ │ ├── invoice_autopayment.html │ │ │ │ │ ├── invoice_autopayment.txt │ │ │ │ │ ├── invoice_contracted.html │ │ │ │ │ ├── invoice_contracted.txt │ │ │ │ │ ├── invoice_receipt.html │ │ │ │ │ ├── invoice_receipt.txt │ │ │ │ │ ├── invoice_reminder.html │ │ │ │ │ ├── invoice_reminder.txt │ │ │ │ │ ├── overdue_notice.html │ │ │ │ │ ├── overdue_notice.txt │ │ │ │ │ ├── pay_annually_unpaid.html │ │ │ │ │ ├── pay_annually_unpaid.txt │ │ │ │ │ ├── sales_request.html │ │ │ │ │ ├── subscription_change.html │ │ │ │ │ ├── subscription_change.txt │ │ │ │ │ ├── subscription_ending.html │ │ │ │ │ ├── subscription_ending.txt │ │ │ │ │ ├── subscription_ending_reminder_dimagi.html │ │ │ │ │ ├── subscription_ending_reminder_dimagi.txt │ │ │ │ │ ├── subscription_renewal_reminder.html │ │ │ │ │ ├── subscription_renewal_reminder.txt │ │ │ │ │ ├── subscription_renewed.html │ │ │ │ │ ├── subscription_renewed.txt │ │ │ │ │ ├── wire_invoice.html │ │ │ │ │ └── wire_invoice.txt │ │ │ │ ├── invoice.html │ │ │ │ ├── invoice_list.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── add_new_item_button.html │ │ │ │ │ ├── adjust_balance.html │ │ │ │ │ ├── anchor_tag.html │ │ │ │ │ ├── confirm_pause_summary.html │ │ │ │ │ ├── confirm_plan_summary.html │ │ │ │ │ ├── credits_tab.html │ │ │ │ │ ├── customer_plan_version_tools.html │ │ │ │ │ ├── downgrade_messages.html │ │ │ │ │ ├── invoice_table.html │ │ │ │ │ ├── renew_plan_selection.html │ │ │ │ │ ├── stripe_card_ko_template.html │ │ │ │ │ ├── subscriptions_tab.html │ │ │ │ │ └── version_summary_tab.html │ │ │ │ ├── plan_version.html │ │ │ │ ├── plans.html │ │ │ │ ├── plans_base.html │ │ │ │ ├── report_filter_actions.html │ │ │ │ ├── subscriptions.html │ │ │ │ ├── subscriptions_base.html │ │ │ │ ├── test_reminder_emails.html │ │ │ │ ├── trigger_accounting_tests.html │ │ │ │ ├── trigger_bookkeeper.html │ │ │ │ ├── trigger_customer_invoice.html │ │ │ │ └── trigger_invoice.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base_tests.py │ │ │ │ ├── data/ │ │ │ │ │ ├── app-commcare-icon-build.json │ │ │ │ │ └── app-commcare-icon-standard.json │ │ │ │ ├── generator.py │ │ │ │ ├── test_admin_software_plans.py │ │ │ │ ├── test_autopay.py │ │ │ │ ├── test_autopay_with_api.py │ │ │ │ ├── test_card_utils.py │ │ │ │ ├── test_change_role_for_software_plan_version.py │ │ │ │ ├── test_credit_lines.py │ │ │ │ ├── test_customer_invoicing.py │ │ │ │ ├── test_domain_user_history.py │ │ │ │ ├── test_emails.py │ │ │ │ ├── test_ensure_plans.py │ │ │ │ ├── test_enterprise_mode.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_invoice_line_items.py │ │ │ │ ├── test_invoice_pdf.py │ │ │ │ ├── test_invoicing.py │ │ │ │ ├── test_migrations.py │ │ │ │ ├── test_model_validation.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_new_domain_subscription.py │ │ │ │ ├── test_race_condition_is_prevented.py │ │ │ │ ├── test_renew_subscription.py │ │ │ │ ├── test_revoke_grants.py │ │ │ │ ├── test_software_plan_version_filter.py │ │ │ │ ├── test_stripe_payment.py │ │ │ │ ├── test_stripe_payment_method_with_api.py │ │ │ │ ├── test_stripe_utils_with_api.py │ │ │ │ ├── test_subscription_changes.py │ │ │ │ ├── test_subscription_permissions_changes.py │ │ │ │ ├── test_task_utils.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_unpaid_invoice.py │ │ │ │ ├── test_utils.py │ │ │ │ ├── test_wire_invoice.py │ │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ ├── usage.py │ │ │ ├── user_text.py │ │ │ ├── utils/ │ │ │ │ ├── __init__.py │ │ │ │ ├── account.py │ │ │ │ ├── cards.py │ │ │ │ ├── invoicing.py │ │ │ │ ├── software_plans.py │ │ │ │ ├── stripe.py │ │ │ │ ├── subscription.py │ │ │ │ └── unpaid_invoice.py │ │ │ └── views.py │ │ ├── analytics/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── ab_tests.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── audit_user_in_hubspot.py │ │ │ │ ├── blocked_hubspot_users_summary.py │ │ │ │ ├── list_blocked_from_hubspot.py │ │ │ │ ├── manually_cleanup_blocked_hubspot_contacts.py │ │ │ │ └── update_hubspot_properties.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_data_point_unique_constraint.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── signals.py │ │ │ ├── static/ │ │ │ │ └── analytix/ │ │ │ │ └── js/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── cta_forms.js │ │ │ │ │ └── hubspot.js │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── cta_forms.js │ │ │ │ │ └── hubspot.js │ │ │ │ ├── google.js │ │ │ │ ├── gtx.js │ │ │ │ ├── initial.js │ │ │ │ ├── logging.js │ │ │ │ ├── noopMetrics.js │ │ │ │ └── utils.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── analytics/ │ │ │ │ ├── email/ │ │ │ │ │ ├── partner_analytics_report.html │ │ │ │ │ └── partner_analytics_report.txt │ │ │ │ ├── forms/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ └── hubspot_cta_form.html │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ └── hubspot_cta_form.html │ │ │ │ ├── google.html │ │ │ │ └── initial/ │ │ │ │ ├── all.html │ │ │ │ ├── global.html │ │ │ │ ├── google.html │ │ │ │ ├── gtm.html │ │ │ │ └── hubspot.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_hubspot.py │ │ │ │ ├── test_partner_analytics_utils.py │ │ │ │ ├── test_subscription_properties.py │ │ │ │ ├── test_tasks.py │ │ │ │ └── test_utils.py │ │ │ ├── urls.py │ │ │ ├── utils/ │ │ │ │ ├── __init__.py │ │ │ │ ├── hubspot.py │ │ │ │ └── partner_analytics.py │ │ │ └── views.py │ │ ├── api/ │ │ │ ├── __init__.py │ │ │ ├── accounting.py │ │ │ ├── cors.py │ │ │ ├── decorators.py │ │ │ ├── domain_metadata.py │ │ │ ├── es.py │ │ │ ├── exceptions.py │ │ │ ├── fields.py │ │ │ ├── keyset_paginator.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_alter_permissions.py │ │ │ │ ├── 0003_populate_apiuser.py │ │ │ │ ├── 0004_rename_apiuser.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── object_fetch_api.py │ │ │ ├── odata/ │ │ │ │ ├── __init__.py │ │ │ │ ├── serializers.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── data/ │ │ │ │ │ │ ├── populated_case_odata_metadata_document_from_config.xml │ │ │ │ │ │ └── populated_form_odata_metadata_document_from_config.xml │ │ │ │ │ ├── test_auth.py │ │ │ │ │ ├── test_feed.py │ │ │ │ │ ├── test_metadata.py │ │ │ │ │ ├── test_models.py │ │ │ │ │ ├── test_serializers.py │ │ │ │ │ ├── test_service.py │ │ │ │ │ └── utils.py │ │ │ │ ├── urls.py │ │ │ │ ├── utils.py │ │ │ │ └── views.py │ │ │ ├── query_adapters.py │ │ │ ├── resources/ │ │ │ │ ├── __init__.py │ │ │ │ ├── auth.py │ │ │ │ ├── messaging_event/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── filters.py │ │ │ │ │ ├── pagination.py │ │ │ │ │ ├── serializers.py │ │ │ │ │ ├── utils.py │ │ │ │ │ └── view.py │ │ │ │ ├── meta.py │ │ │ │ ├── pagination.py │ │ │ │ ├── serializers.py │ │ │ │ ├── v0_1.py │ │ │ │ ├── v0_3.py │ │ │ │ ├── v0_4.py │ │ │ │ ├── v0_5.py │ │ │ │ └── v1_0.py │ │ │ ├── serializers.py │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── api/ │ │ │ │ └── odata_metadata.xml │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── app_resources.py │ │ │ │ ├── audit_resources.py │ │ │ │ ├── case_resources.py │ │ │ │ ├── core_api.py │ │ │ │ ├── form_resources.py │ │ │ │ ├── group_resources.py │ │ │ │ ├── internal_resources.py │ │ │ │ ├── keyset_paginator_tests.py │ │ │ │ ├── lookup_table_resources.py │ │ │ │ ├── test_auth.py │ │ │ │ ├── test_det_export_resource.py │ │ │ │ ├── test_es.py │ │ │ │ ├── test_messaging_event_api.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_ucr_resources.py │ │ │ │ ├── test_user_resources.py │ │ │ │ ├── test_user_updates.py │ │ │ │ ├── test_validation.py │ │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ ├── user_updates.py │ │ │ ├── util.py │ │ │ └── validation.py │ │ ├── app_execution/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── apps.py │ │ │ ├── const.py │ │ │ ├── data_model/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── expectations.py │ │ │ │ └── steps.py │ │ │ ├── db_accessors.py │ │ │ ├── exceptions.py │ │ │ ├── forms.py │ │ │ ├── har_parser.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ └── clean_har_file.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_alter_appworkflowconfig_unique_together.py │ │ │ │ ├── 0003_appexecutionlog_updated.py │ │ │ │ ├── 0004_alter_appworkflowconfig_notification_emails_and_more.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── app_execution/ │ │ │ │ └── js/ │ │ │ │ ├── workflow_charts.js │ │ │ │ └── workflow_logs.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── app_execution/ │ │ │ │ ├── components/ │ │ │ │ │ ├── logs.html │ │ │ │ │ └── title_bar.html │ │ │ │ ├── workflow_form.html │ │ │ │ ├── workflow_list.html │ │ │ │ ├── workflow_log.html │ │ │ │ ├── workflow_log_list.html │ │ │ │ └── workflow_run.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── case_list.json │ │ │ │ │ ├── case_list_action.json │ │ │ │ │ ├── reg_form.json │ │ │ │ │ ├── search_again.json │ │ │ │ │ ├── split_case_search_search.json │ │ │ │ │ └── split_case_search_select.json │ │ │ │ ├── mock_formplayer.py │ │ │ │ ├── response_factory.py │ │ │ │ ├── test_dsl.py │ │ │ │ ├── test_execution.py │ │ │ │ ├── test_expect_xpath.py │ │ │ │ ├── test_expectations.py │ │ │ │ ├── test_har_extract.py │ │ │ │ ├── test_question_value.py │ │ │ │ ├── test_steps.py │ │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ ├── views.py │ │ │ └── workflow_dsl.py │ │ ├── app_manager/ │ │ │ ├── __init__.py │ │ │ ├── _design/ │ │ │ │ ├── filters/ │ │ │ │ │ └── all_apps.js │ │ │ │ └── views/ │ │ │ │ ├── applications/ │ │ │ │ │ └── map.js │ │ │ │ ├── applications_brief/ │ │ │ │ │ └── map.js │ │ │ │ ├── builds_by_date/ │ │ │ │ │ ├── map.js │ │ │ │ │ └── reduce.js │ │ │ │ └── saved_app/ │ │ │ │ └── map.js │ │ │ ├── add_ons.py │ │ │ ├── analytics.py │ │ │ ├── app_schemas/ │ │ │ │ ├── __init__.py │ │ │ │ ├── app_case_metadata.py │ │ │ │ ├── case_properties.py │ │ │ │ ├── casedb_schema.py │ │ │ │ ├── form_metadata.py │ │ │ │ ├── session_schema.py │ │ │ │ └── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_app_diffs.py │ │ │ │ ├── test_case_meta.py │ │ │ │ ├── test_case_properties.py │ │ │ │ ├── test_form_metadata.py │ │ │ │ └── test_schema.py │ │ │ ├── app_strings.py │ │ │ ├── commcare_settings.py │ │ │ ├── const.py │ │ │ ├── current_builds.py │ │ │ ├── dbaccessors.py │ │ │ ├── decorators.py │ │ │ ├── detail_screen.py │ │ │ ├── download_urls.py │ │ │ ├── exceptions.py │ │ │ ├── feature_support.py │ │ │ ├── fields.py │ │ │ ├── fixtures/ │ │ │ │ ├── __init__.py │ │ │ │ └── mobile_ucr.py │ │ │ ├── forms.py │ │ │ ├── helpers/ │ │ │ │ ├── __init__.py │ │ │ │ └── validators.py │ │ │ ├── id_strings.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── _form_iterator.py │ │ │ │ ├── add_case_tile_template_field.py │ │ │ │ ├── add_resource_overrides.py │ │ │ │ ├── applications_with_add_ons.py │ │ │ │ ├── audit_case_search_config.py │ │ │ │ ├── audit_form_questions.py │ │ │ │ ├── benchmark_build_times.py │ │ │ │ ├── benchmark_direct_ccz.py │ │ │ │ ├── check_for_form_entities.py │ │ │ │ ├── check_for_xss_attempts.py │ │ │ │ ├── delete_case_list_custom_variables_xml.py │ │ │ │ ├── download_app_forms.py │ │ │ │ ├── fix_app_docs_with_empty_keys.py │ │ │ │ ├── fix_broken_blob_references.py │ │ │ │ ├── helpers.py │ │ │ │ ├── import_app.py │ │ │ │ ├── migrate_address_popup.py │ │ │ │ ├── migrate_case_list_custom_variables.py │ │ │ │ ├── overwrite_app.py │ │ │ │ └── upload_app_forms.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_linked_app_domain.py │ │ │ │ ├── 0002_latestenabledbuildprofiles.py │ │ │ │ ├── 0003_auto_20190326_0853.py │ │ │ │ ├── 0004_latestenabledbuildprofiles_active.py │ │ │ │ ├── 0005_latestenabledbuildprofiles_domain.py │ │ │ │ ├── 0006_multi_master_linked_apps.py │ │ │ │ ├── 0007_add_linked_app_fields_to_es.py │ │ │ │ ├── 0008_remove_uses_master_app_form_ids.py │ │ │ │ ├── 0009_add_sqlglobalappconfig.py │ │ │ │ ├── 0009_resourceoverride.py │ │ │ │ ├── 0010_merge_20191211_1921.py │ │ │ │ ├── 0010_run_add_resource_overrides.py │ │ │ │ ├── 0010_sqlglobalappconfig.py │ │ │ │ ├── 0011_merge_20191212_0106.py │ │ │ │ ├── 0011_merge_20191212_0936.py │ │ │ │ ├── 0012_merge_20191217_0605.py │ │ │ │ ├── 0013_rename_sqlglobalappconfig.py │ │ │ │ ├── 0014_create_exchangeapplication.py │ │ │ │ ├── 0015_alter_exchangeapplication.py │ │ │ │ ├── 0016_alter_exchangeapplication.py │ │ │ │ ├── 0017_migrate_case_search_relevant.py │ │ │ │ ├── 0018_migrate_case_search_labels.py │ │ │ │ ├── 0019_exchangeapplication_required_privileges.py │ │ │ │ ├── 0020_exchangeapplication_allow_blank_privilege.py │ │ │ │ ├── 0021_migrate_case_search_itemset_ids.py │ │ │ │ ├── 0022_migrate_to_conditional_case_update.py │ │ │ │ ├── 0023_applicationreleaselog.py │ │ │ │ ├── 0024_applicationreleaselog_info.py │ │ │ │ ├── 0025_migrate_to_search_filter_flag.py │ │ │ │ ├── 0026_conditional_case_update_deleted_apps.py │ │ │ │ ├── 0027_add_case_tile_template_field.py │ │ │ │ ├── 0028_case_list_custom_variable_xml_to_dict.py │ │ │ │ ├── 0029_delete_case_list_custom_variable_xml.py │ │ │ │ ├── 0030_credentialapplication.py │ │ │ │ ├── 0031_delete_latestenabledbuildprofiles.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── remote_app.py │ │ │ ├── signals.py │ │ │ ├── static/ │ │ │ │ └── app_manager/ │ │ │ │ ├── css/ │ │ │ │ │ └── diff.css │ │ │ │ ├── js/ │ │ │ │ │ ├── app_exchange.js │ │ │ │ │ ├── app_manager_utils.js │ │ │ │ │ ├── app_view.js │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── add_ons.js │ │ │ │ │ │ ├── app_manager.js │ │ │ │ │ │ ├── app_manager_media.js │ │ │ │ │ │ ├── download_async_modal.js │ │ │ │ │ │ ├── download_index_main.js │ │ │ │ │ │ ├── manage_releases_by_location.js │ │ │ │ │ │ ├── multimedia_size_util.js │ │ │ │ │ │ ├── nav_menu_media.js │ │ │ │ │ │ ├── nav_menu_media_common.js │ │ │ │ │ │ ├── preview_app.js │ │ │ │ │ │ ├── source_files.js │ │ │ │ │ │ ├── supported_languages.js │ │ │ │ │ │ └── visit_scheduler.js │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── add_ons.js │ │ │ │ │ │ ├── app_manager.js │ │ │ │ │ │ ├── app_manager_media.js │ │ │ │ │ │ ├── download_async_modal.js │ │ │ │ │ │ ├── download_index_main.js │ │ │ │ │ │ ├── manage_releases_by_location.js │ │ │ │ │ │ ├── multimedia_size_util.js │ │ │ │ │ │ ├── nav_menu_media.js │ │ │ │ │ │ ├── nav_menu_media_common.js │ │ │ │ │ │ ├── preview_app.js │ │ │ │ │ │ ├── source_files.js │ │ │ │ │ │ ├── supported_languages.js │ │ │ │ │ │ └── visit_scheduler.js │ │ │ │ │ ├── case_config_utils.js │ │ │ │ │ ├── custom_assertions.js │ │ │ │ │ ├── custom_icon.js │ │ │ │ │ ├── details/ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── case_list_callout.js │ │ │ │ │ │ │ ├── column.js │ │ │ │ │ │ │ ├── detail_tab_nodeset.js │ │ │ │ │ │ │ ├── graph_config.js │ │ │ │ │ │ │ ├── screen.js │ │ │ │ │ │ │ ├── screen_config.js │ │ │ │ │ │ │ └── sort_rows.js │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ ├── case_list_callout.js │ │ │ │ │ │ │ ├── column.js │ │ │ │ │ │ │ ├── detail_tab_nodeset.js │ │ │ │ │ │ │ ├── graph_config.js │ │ │ │ │ │ │ ├── screen.js │ │ │ │ │ │ │ ├── screen_config.js │ │ │ │ │ │ │ └── sort_rows.js │ │ │ │ │ │ ├── case_claim.js │ │ │ │ │ │ ├── filter.js │ │ │ │ │ │ ├── fixture_select.js │ │ │ │ │ │ ├── parent_select.js │ │ │ │ │ │ └── utils.js │ │ │ │ │ ├── forms/ │ │ │ │ │ │ ├── advanced/ │ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ │ ├── actions.js │ │ │ │ │ │ │ │ └── case_config_ui.js │ │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ │ ├── actions.js │ │ │ │ │ │ │ │ └── case_config_ui.js │ │ │ │ │ │ │ └── case_properties.js │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── case_config_ui.js │ │ │ │ │ │ │ ├── form_designer.js │ │ │ │ │ │ │ ├── form_view.js │ │ │ │ │ │ │ └── form_workflow.js │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ ├── case_config_ui.js │ │ │ │ │ │ │ ├── form_designer.js │ │ │ │ │ │ │ ├── form_view.js │ │ │ │ │ │ │ └── form_workflow.js │ │ │ │ │ │ ├── case_knockout_bindings.js │ │ │ │ │ │ ├── copy_form_to_app.js │ │ │ │ │ │ ├── custom_instances.js │ │ │ │ │ │ ├── edit_form_details.js │ │ │ │ │ │ ├── form_action_diffs.js │ │ │ │ │ │ └── form_designer_analytics.js │ │ │ │ │ ├── menu.js │ │ │ │ │ ├── modules/ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── module_view.js │ │ │ │ │ │ │ ├── module_view_report.js │ │ │ │ │ │ │ └── report_module.js │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ ├── module_view.js │ │ │ │ │ │ │ ├── module_view_report.js │ │ │ │ │ │ │ └── report_module.js │ │ │ │ │ │ ├── case_list_setting.js │ │ │ │ │ │ └── shadow_module_settings.js │ │ │ │ │ ├── releases/ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── app_view_release_manager.js │ │ │ │ │ │ │ ├── language_profiles.js │ │ │ │ │ │ │ ├── releases.js │ │ │ │ │ │ │ └── update_prompt.js │ │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ │ ├── app_view_release_manager.js │ │ │ │ │ │ ├── language_profiles.js │ │ │ │ │ │ ├── releases.js │ │ │ │ │ │ └── update_prompt.js │ │ │ │ │ ├── section_changer.js │ │ │ │ │ ├── settings/ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── app_logos.js │ │ │ │ │ │ │ └── commcare_settings.js │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ ├── app_logos.js │ │ │ │ │ │ │ └── commcare_settings.js │ │ │ │ │ │ └── translations.js │ │ │ │ │ ├── summary/ │ │ │ │ │ │ ├── case_summary.js │ │ │ │ │ │ ├── form_diff.js │ │ │ │ │ │ ├── form_models.js │ │ │ │ │ │ ├── form_summary.js │ │ │ │ │ │ ├── models.js │ │ │ │ │ │ └── utils.js │ │ │ │ │ ├── vellum/ │ │ │ │ │ │ ├── 1307.js │ │ │ │ │ │ ├── 150.js │ │ │ │ │ │ ├── 1664.js │ │ │ │ │ │ ├── 1879.js │ │ │ │ │ │ ├── 2229.js │ │ │ │ │ │ ├── 2773.js │ │ │ │ │ │ ├── 2979.js │ │ │ │ │ │ ├── 3333.js │ │ │ │ │ │ ├── 3534.js │ │ │ │ │ │ ├── 3576.js │ │ │ │ │ │ ├── 358.js │ │ │ │ │ │ ├── 3588.js │ │ │ │ │ │ ├── 3606.js │ │ │ │ │ │ ├── 3720.js │ │ │ │ │ │ ├── 375.js │ │ │ │ │ │ ├── 395.js │ │ │ │ │ │ ├── 3984.js │ │ │ │ │ │ ├── 4002.js │ │ │ │ │ │ ├── 4054.js │ │ │ │ │ │ ├── 4141.js │ │ │ │ │ │ ├── 4194.js │ │ │ │ │ │ ├── 4334.js │ │ │ │ │ │ ├── 4437.js │ │ │ │ │ │ ├── 4518.js │ │ │ │ │ │ ├── 4580.js │ │ │ │ │ │ ├── 4636.js │ │ │ │ │ │ ├── 4730.js │ │ │ │ │ │ ├── 477.js │ │ │ │ │ │ ├── 5051.js │ │ │ │ │ │ ├── 5319.js │ │ │ │ │ │ ├── 5455.js │ │ │ │ │ │ ├── 5460.js │ │ │ │ │ │ ├── 5498.js │ │ │ │ │ │ ├── 571.js │ │ │ │ │ │ ├── 576.js │ │ │ │ │ │ ├── 6077.js │ │ │ │ │ │ ├── 6129.js │ │ │ │ │ │ ├── 6367.js │ │ │ │ │ │ ├── 6414.js │ │ │ │ │ │ ├── 6794.js │ │ │ │ │ │ ├── 6940.js │ │ │ │ │ │ ├── 711.js │ │ │ │ │ │ ├── 711.js.LICENSE.txt │ │ │ │ │ │ ├── 7574.js │ │ │ │ │ │ ├── 7828.js │ │ │ │ │ │ ├── 8324.js │ │ │ │ │ │ ├── 8324.js.LICENSE.txt │ │ │ │ │ │ ├── 8454.js │ │ │ │ │ │ ├── 8985.js │ │ │ │ │ │ ├── 9084.js │ │ │ │ │ │ ├── 9084.js.LICENSE.txt │ │ │ │ │ │ ├── 9928.js │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ ├── SaveButton.js │ │ │ │ │ │ │ └── diff_match_patch.js │ │ │ │ │ │ ├── main.js │ │ │ │ │ │ ├── main.js.LICENSE.txt │ │ │ │ │ │ ├── manifest.txt │ │ │ │ │ │ ├── tests.js │ │ │ │ │ │ ├── tests.js.LICENSE.txt │ │ │ │ │ │ └── version.txt │ │ │ │ │ ├── widgets.js │ │ │ │ │ └── xpathValidator.js │ │ │ │ ├── json/ │ │ │ │ │ ├── case-reserved-words.json │ │ │ │ │ ├── commcare-app-settings.yml │ │ │ │ │ ├── commcare-profile-settings.yml │ │ │ │ │ ├── commcare-settings-layout.yml │ │ │ │ │ └── vellum-app-callout-templates.yml │ │ │ │ ├── spec/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── download_async_modal_spec.js │ │ │ │ │ │ ├── form_workflow_spec.js │ │ │ │ │ │ ├── main.js │ │ │ │ │ │ └── releases_spec.js │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ ├── download_async_modal_spec.js │ │ │ │ │ ├── form_workflow_spec.js │ │ │ │ │ ├── main.js │ │ │ │ │ └── releases_spec.js │ │ │ │ └── template_apps/ │ │ │ │ ├── agriculture/ │ │ │ │ │ ├── app.json │ │ │ │ │ └── multimedia.json │ │ │ │ ├── health/ │ │ │ │ │ ├── app.json │ │ │ │ │ └── multimedia.json │ │ │ │ ├── wash/ │ │ │ │ │ ├── app.json │ │ │ │ │ └── multimedia.json │ │ │ │ └── wash_before_cond_case_update/ │ │ │ │ └── app.json │ │ │ ├── static_strings.py │ │ │ ├── suite_xml/ │ │ │ │ ├── __init__.py │ │ │ │ ├── case_tile_templates/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── icon_text_grid.json │ │ │ │ │ ├── icon_text_grid.xml │ │ │ │ │ ├── person_simple.json │ │ │ │ │ └── person_simple.xml │ │ │ │ ├── const.py │ │ │ │ ├── contributors.py │ │ │ │ ├── features/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── case_tiles.py │ │ │ │ │ ├── mobile_ucr.py │ │ │ │ │ └── scheduler.py │ │ │ │ ├── generator.py │ │ │ │ ├── post_process/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── endpoints.py │ │ │ │ │ ├── instances.py │ │ │ │ │ ├── menu.py │ │ │ │ │ ├── remote_requests.py │ │ │ │ │ ├── resources.py │ │ │ │ │ └── workflow.py │ │ │ │ ├── sections/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── details.py │ │ │ │ │ ├── entries.py │ │ │ │ │ ├── fixtures.py │ │ │ │ │ ├── menus.py │ │ │ │ │ └── resources.py │ │ │ │ ├── utils.py │ │ │ │ └── xml_models.py │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── app_manager/ │ │ │ │ ├── CommCare.jad │ │ │ │ ├── app_exchange.html │ │ │ │ ├── app_view_release_manager.html │ │ │ │ ├── app_view_settings.html │ │ │ │ ├── base_summary.html │ │ │ │ ├── blank_form.xml │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── app_diff.html │ │ │ │ │ ├── app_view.html │ │ │ │ │ ├── apps_base.html │ │ │ │ │ ├── download_index.html │ │ │ │ │ ├── form_designer.html │ │ │ │ │ ├── form_view.html │ │ │ │ │ ├── module_view.html │ │ │ │ │ ├── module_view_advanced.html │ │ │ │ │ ├── module_view_report.html │ │ │ │ │ ├── no_longer_supported.html │ │ │ │ │ ├── odk_install.html │ │ │ │ │ └── source_files.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── app_diff.html │ │ │ │ │ ├── app_view.html │ │ │ │ │ ├── apps_base.html │ │ │ │ │ ├── download_index.html │ │ │ │ │ ├── form_designer.html │ │ │ │ │ ├── form_view.html │ │ │ │ │ ├── module_view.html │ │ │ │ │ ├── module_view_advanced.html │ │ │ │ │ ├── module_view_report.html │ │ │ │ │ ├── no_longer_supported.html │ │ │ │ │ ├── odk_install.html │ │ │ │ │ └── source_files.html │ │ │ │ ├── case_summary.html │ │ │ │ ├── default_followup_form.xml │ │ │ │ ├── form_summary.html │ │ │ │ ├── form_summary_base.html │ │ │ │ ├── form_summary_diff.html │ │ │ │ ├── languages.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── add_item_templates.html │ │ │ │ │ │ ├── add_new_module_modal.html │ │ │ │ │ │ ├── app_summary_button.html │ │ │ │ │ │ ├── appnav_menu_header.html │ │ │ │ │ │ ├── appnav_menu_langs.html │ │ │ │ │ │ ├── apps_stylesheets.html │ │ │ │ │ │ ├── build_errors.html │ │ │ │ │ │ ├── build_profiles_select.html │ │ │ │ │ │ ├── case_list_session_endpoint.html │ │ │ │ │ │ ├── confirm_delete_app.html │ │ │ │ │ │ ├── custom_icon.html │ │ │ │ │ │ ├── define_case_type_modal.html │ │ │ │ │ │ ├── download_async_modal.html │ │ │ │ │ │ ├── form_session_endpoint.html │ │ │ │ │ │ ├── function_datum_endpoints.html │ │ │ │ │ │ ├── load_save_questions.html │ │ │ │ │ │ ├── module_session_endpoint.html │ │ │ │ │ │ ├── nav_menu_media.html │ │ │ │ │ │ ├── nav_menu_media_single_type.html │ │ │ │ │ │ ├── toggle_diff_modal.html │ │ │ │ │ │ └── undo_delete_app.html │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── add_item_templates.html │ │ │ │ │ │ ├── add_new_module_modal.html │ │ │ │ │ │ ├── app_summary_button.html │ │ │ │ │ │ ├── appnav_menu_header.html │ │ │ │ │ │ ├── appnav_menu_langs.html │ │ │ │ │ │ ├── apps_stylesheets.html │ │ │ │ │ │ ├── build_errors.html │ │ │ │ │ │ ├── build_profiles_select.html │ │ │ │ │ │ ├── case_list_session_endpoint.html │ │ │ │ │ │ ├── confirm_delete_app.html │ │ │ │ │ │ ├── custom_icon.html │ │ │ │ │ │ ├── define_case_type_modal.html │ │ │ │ │ │ ├── download_async_modal.html │ │ │ │ │ │ ├── form_session_endpoint.html │ │ │ │ │ │ ├── function_datum_endpoints.html │ │ │ │ │ │ ├── load_save_questions.html │ │ │ │ │ │ ├── module_session_endpoint.html │ │ │ │ │ │ ├── nav_menu_media.html │ │ │ │ │ │ ├── nav_menu_media_single_type.html │ │ │ │ │ │ ├── toggle_diff_modal.html │ │ │ │ │ │ └── undo_delete_app.html │ │ │ │ │ ├── bulk_upload_app_translations.html │ │ │ │ │ ├── case_summary_case_details.html │ │ │ │ │ ├── form_error_message.html │ │ │ │ │ ├── form_summary_header.html │ │ │ │ │ ├── forms/ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── case_config.html │ │ │ │ │ │ │ ├── case_config_advanced.html │ │ │ │ │ │ │ ├── case_config_ko_templates.html │ │ │ │ │ │ │ ├── custom_assertions.html │ │ │ │ │ │ │ ├── custom_instances.html │ │ │ │ │ │ │ ├── form_filter.html │ │ │ │ │ │ │ ├── form_gps_capture.html │ │ │ │ │ │ │ ├── form_tab_advanced.html │ │ │ │ │ │ │ ├── form_tab_settings.html │ │ │ │ │ │ │ ├── form_tab_visit_scheduler.html │ │ │ │ │ │ │ ├── form_view_modals.html │ │ │ │ │ │ │ ├── form_workflow.html │ │ │ │ │ │ │ ├── release_notes_setting.html │ │ │ │ │ │ │ ├── shadow_parent_select.html │ │ │ │ │ │ │ └── usercase_config.html │ │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ │ ├── case_config.html │ │ │ │ │ │ ├── case_config_advanced.html │ │ │ │ │ │ ├── case_config_ko_templates.html │ │ │ │ │ │ ├── custom_assertions.html │ │ │ │ │ │ ├── custom_instances.html │ │ │ │ │ │ ├── form_filter.html │ │ │ │ │ │ ├── form_gps_capture.html │ │ │ │ │ │ ├── form_tab_advanced.html │ │ │ │ │ │ ├── form_tab_settings.html │ │ │ │ │ │ ├── form_tab_visit_scheduler.html │ │ │ │ │ │ ├── form_view_modals.html │ │ │ │ │ │ ├── form_workflow.html │ │ │ │ │ │ ├── release_notes_setting.html │ │ │ │ │ │ ├── shadow_parent_select.html │ │ │ │ │ │ └── usercase_config.html │ │ │ │ │ ├── menu/ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── appnav_menu.html │ │ │ │ │ │ │ ├── form_link.html │ │ │ │ │ │ │ └── module_link.html │ │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ │ ├── appnav_menu.html │ │ │ │ │ │ ├── form_link.html │ │ │ │ │ │ └── module_link.html │ │ │ │ │ ├── mobile_ucr_v1_warning.html │ │ │ │ │ ├── module_options/ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── module_option_advanced.html │ │ │ │ │ │ │ ├── module_option_biometrics.html │ │ │ │ │ │ │ ├── module_option_button_base.html │ │ │ │ │ │ │ ├── module_option_case.html │ │ │ │ │ │ │ ├── module_option_report.html │ │ │ │ │ │ │ ├── module_option_shadow.html │ │ │ │ │ │ │ ├── module_option_shadow_v1.html │ │ │ │ │ │ │ ├── module_option_survey.html │ │ │ │ │ │ │ └── module_option_training.html │ │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ │ ├── module_option_advanced.html │ │ │ │ │ │ ├── module_option_biometrics.html │ │ │ │ │ │ ├── module_option_button_base.html │ │ │ │ │ │ ├── module_option_case.html │ │ │ │ │ │ ├── module_option_report.html │ │ │ │ │ │ ├── module_option_shadow.html │ │ │ │ │ │ ├── module_option_shadow_v1.html │ │ │ │ │ │ ├── module_option_survey.html │ │ │ │ │ │ └── module_option_training.html │ │ │ │ │ ├── modules/ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── add_property_button.html │ │ │ │ │ │ │ ├── case_detail.html │ │ │ │ │ │ │ ├── case_list.html │ │ │ │ │ │ │ ├── case_list_filtering.html │ │ │ │ │ │ │ ├── case_list_form_setting.html │ │ │ │ │ │ │ ├── case_list_lazy_loading.html │ │ │ │ │ │ │ ├── case_list_lookup.html │ │ │ │ │ │ │ ├── case_list_missing_warning.html │ │ │ │ │ │ │ ├── case_list_module_overwrite.html │ │ │ │ │ │ │ ├── case_list_multi_select.html │ │ │ │ │ │ │ ├── case_list_properties.html │ │ │ │ │ │ │ ├── case_list_setting.html │ │ │ │ │ │ │ ├── case_search_properties.html │ │ │ │ │ │ │ ├── case_search_property.html │ │ │ │ │ │ │ ├── case_tile_preview.html │ │ │ │ │ │ │ ├── case_tile_templates.html │ │ │ │ │ │ │ ├── custom_detail_variables.html │ │ │ │ │ │ │ ├── enable_schedule.html │ │ │ │ │ │ │ ├── filter_configs.html │ │ │ │ │ │ │ ├── fixture_case_selection.html │ │ │ │ │ │ │ ├── graph_configuration_modal.html │ │ │ │ │ │ │ ├── mobile_report_configs.html │ │ │ │ │ │ │ ├── module_actions.html │ │ │ │ │ │ │ ├── module_filter.html │ │ │ │ │ │ │ ├── module_view_case_type.html │ │ │ │ │ │ │ ├── module_view_heading.html │ │ │ │ │ │ │ ├── module_view_settings.html │ │ │ │ │ │ │ ├── report_context_tile.html │ │ │ │ │ │ │ └── style_configuration_modal.html │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ ├── add_property_button.html │ │ │ │ │ │ │ ├── case_detail.html │ │ │ │ │ │ │ ├── case_list.html │ │ │ │ │ │ │ ├── case_list_filtering.html │ │ │ │ │ │ │ ├── case_list_form_setting.html │ │ │ │ │ │ │ ├── case_list_lazy_loading.html │ │ │ │ │ │ │ ├── case_list_lookup.html │ │ │ │ │ │ │ ├── case_list_missing_warning.html │ │ │ │ │ │ │ ├── case_list_module_overwrite.html │ │ │ │ │ │ │ ├── case_list_multi_select.html │ │ │ │ │ │ │ ├── case_list_properties.html │ │ │ │ │ │ │ ├── case_list_setting.html │ │ │ │ │ │ │ ├── case_search_properties.html │ │ │ │ │ │ │ ├── case_search_property.html │ │ │ │ │ │ │ ├── case_tile_preview.html │ │ │ │ │ │ │ ├── case_tile_templates.html │ │ │ │ │ │ │ ├── custom_detail_variables.html │ │ │ │ │ │ │ ├── enable_schedule.html │ │ │ │ │ │ │ ├── filter_configs.html │ │ │ │ │ │ │ ├── fixture_case_selection.html │ │ │ │ │ │ │ ├── graph_configuration_modal.html │ │ │ │ │ │ │ ├── mobile_report_configs.html │ │ │ │ │ │ │ ├── module_actions.html │ │ │ │ │ │ │ ├── module_filter.html │ │ │ │ │ │ │ ├── module_view_case_type.html │ │ │ │ │ │ │ ├── module_view_heading.html │ │ │ │ │ │ │ ├── module_view_settings.html │ │ │ │ │ │ │ ├── report_context_tile.html │ │ │ │ │ │ │ └── style_configuration_modal.html │ │ │ │ │ │ └── graph_configs.html │ │ │ │ │ ├── multimedia_sizes.html │ │ │ │ │ ├── preview_app.html │ │ │ │ │ ├── releases/ │ │ │ │ │ │ ├── app_release_logs.html │ │ │ │ │ │ ├── build_profiles.html │ │ │ │ │ │ ├── releases.html │ │ │ │ │ │ ├── releases_deploy_modal.html │ │ │ │ │ │ ├── releases_deploy_modal_sms.html │ │ │ │ │ │ └── releases_table.html │ │ │ │ │ ├── settings/ │ │ │ │ │ │ ├── add_ons.html │ │ │ │ │ │ ├── app_settings.html │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ └── supported_languages.html │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ └── supported_languages.html │ │ │ │ │ │ ├── commcare_settings.html │ │ │ │ │ │ └── multimedia_ajax.html │ │ │ │ │ ├── vellum_case_management_warning.html │ │ │ │ │ └── view_submissions_button.html │ │ │ │ ├── profile.xml │ │ │ │ ├── simprints_enrolment_form.xml │ │ │ │ ├── simprints_followup_form.xml │ │ │ │ └── spec/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ └── mocha.html │ │ │ │ └── bootstrap5/ │ │ │ │ └── mocha.html │ │ │ ├── templatetags/ │ │ │ │ ├── __init__.py │ │ │ │ ├── app_manager_extras.py │ │ │ │ ├── url_extras.py │ │ │ │ └── xforms_extras.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── app_factory.py │ │ │ │ ├── data/ │ │ │ │ │ ├── bad_case_tile_config.json │ │ │ │ │ ├── case_in_form.xml │ │ │ │ │ ├── case_list_form/ │ │ │ │ │ │ ├── case-list-form-advanced-autoload.xml │ │ │ │ │ │ ├── case-list-form-advanced.xml │ │ │ │ │ │ ├── case-list-form-suite-form-nav-entry.xml │ │ │ │ │ │ ├── case-list-form-suite-multiple-references.xml │ │ │ │ │ │ ├── case-list-form-suite-no-media-partial.xml │ │ │ │ │ │ ├── case-list-form-suite-parent-child-advanced.xml │ │ │ │ │ │ ├── case-list-form-suite-parent-child-basic.xml │ │ │ │ │ │ ├── case-list-form-suite-parent-child-submodule-advanced-rename-var.xml │ │ │ │ │ │ ├── case-list-form-suite-parent-child-submodule-advanced.xml │ │ │ │ │ │ ├── case-list-form-suite-parent-child-submodule-basic.xml │ │ │ │ │ │ ├── case-list-form-suite-parent-child-submodule-mixed.xml │ │ │ │ │ │ ├── case-list-form-suite-usercase.xml │ │ │ │ │ │ ├── case-list-form-suite.xml │ │ │ │ │ │ ├── case_list_form_advanced_form.xml │ │ │ │ │ │ ├── case_list_form_basic_form.xml │ │ │ │ │ │ ├── case_list_form_end_of_form_case_list.xml │ │ │ │ │ │ ├── case_list_form_end_of_form_case_list_clmi_only.xml │ │ │ │ │ │ ├── case_list_form_reg_form_creates_child_case.xml │ │ │ │ │ │ ├── source_requires_case_target_doesnt.xml │ │ │ │ │ │ └── target_module_different_datums.xml │ │ │ │ │ ├── case_meta/ │ │ │ │ │ │ └── standard_questions.xml │ │ │ │ │ ├── cyclical-app.json │ │ │ │ │ ├── days_ago_migration.json │ │ │ │ │ ├── days_ago_suite.xml │ │ │ │ │ ├── duplicate_text_questions.xml │ │ │ │ │ ├── extension_case/ │ │ │ │ │ │ ├── case_index_relationship_question.xml │ │ │ │ │ │ ├── open_subcase.xml │ │ │ │ │ │ ├── open_subcase_child.xml │ │ │ │ │ │ ├── original.xml │ │ │ │ │ │ ├── preload_host_case.xml │ │ │ │ │ │ ├── preload_host_case_adv.xml │ │ │ │ │ │ ├── update_host_case.xml │ │ │ │ │ │ └── update_host_case_adv.xml │ │ │ │ │ ├── fixtures/ │ │ │ │ │ │ ├── expected_v1_report.xml │ │ │ │ │ │ ├── expected_v2_report.xml │ │ │ │ │ │ └── expected_v2_report_total.xml │ │ │ │ │ ├── form_preparation_v2/ │ │ │ │ │ │ ├── attachment.xml │ │ │ │ │ │ ├── close_case.xml │ │ │ │ │ │ ├── complex-case-sharing.json │ │ │ │ │ │ ├── complex-case-sharing.xml │ │ │ │ │ │ ├── gps.json │ │ │ │ │ │ ├── gps_no_question.xml │ │ │ │ │ │ ├── gps_no_question_auto.xml │ │ │ │ │ │ ├── gps_with_question.xml │ │ │ │ │ │ ├── gps_with_question_auto.xml │ │ │ │ │ │ ├── ignore_retain.xml │ │ │ │ │ │ ├── ignore_retain_stripped.xml │ │ │ │ │ │ ├── missing_instances.xml │ │ │ │ │ │ ├── multi_no_actions.xml │ │ │ │ │ │ ├── multi_open_update_case.xml │ │ │ │ │ │ ├── multiple_subcase_repeat.json │ │ │ │ │ │ ├── multiple_subcase_repeat.xml │ │ │ │ │ │ ├── no_actions.xml │ │ │ │ │ │ ├── normal_suite.xml │ │ │ │ │ │ ├── open_case.xml │ │ │ │ │ │ ├── open_case_external_id.xml │ │ │ │ │ │ ├── open_update_case.xml │ │ │ │ │ │ ├── subcase-parent-ref.json │ │ │ │ │ │ ├── subcase-parent-ref.xml │ │ │ │ │ │ ├── subcase-repeat-sharing.xml │ │ │ │ │ │ ├── subcase-repeat.json │ │ │ │ │ │ ├── subcase-repeat.xml │ │ │ │ │ │ ├── subcase_repeat_mixed_form_post.xml │ │ │ │ │ │ ├── subcase_repeat_mixed_form_pre.xml │ │ │ │ │ │ ├── task_mode_update_preload_case.xml │ │ │ │ │ │ ├── update_attachment_case.xml │ │ │ │ │ │ ├── update_case.xml │ │ │ │ │ │ ├── update_parent_case.xml │ │ │ │ │ │ └── update_preload_case.xml │ │ │ │ │ ├── form_preparation_v2_advanced/ │ │ │ │ │ │ ├── attachment.xml │ │ │ │ │ │ ├── child_module_adjusted_case_id_advanced.xml │ │ │ │ │ │ ├── child_module_adjusted_case_id_basic.xml │ │ │ │ │ │ ├── close_case.xml │ │ │ │ │ │ ├── extension-case.xml │ │ │ │ │ │ ├── no_actions.xml │ │ │ │ │ │ ├── open_case.xml │ │ │ │ │ │ ├── open_close_case.xml │ │ │ │ │ │ ├── open_update_case.xml │ │ │ │ │ │ ├── schedule.xml │ │ │ │ │ │ ├── subcase-open.xml │ │ │ │ │ │ ├── subcase-repeat-multiple.xml │ │ │ │ │ │ ├── subcase-repeat-sharing.xml │ │ │ │ │ │ ├── subcase-repeat.xml │ │ │ │ │ │ ├── subcase.xml │ │ │ │ │ │ ├── subcase_original.xml │ │ │ │ │ │ ├── update_attachment_case.xml │ │ │ │ │ │ ├── update_case.xml │ │ │ │ │ │ ├── update_parent_case.xml │ │ │ │ │ │ ├── update_preload_case.xml │ │ │ │ │ │ └── update_preload_case_multiple.xml │ │ │ │ │ ├── form_with_fixtures.xml │ │ │ │ │ ├── form_with_repeats.xml │ │ │ │ │ ├── form_workflow/ │ │ │ │ │ │ ├── form_link_basic_form.xml │ │ │ │ │ │ ├── form_link_child_modules.xml │ │ │ │ │ │ ├── form_link_create_update_case.xml │ │ │ │ │ │ ├── form_link_enikshay.xml │ │ │ │ │ │ ├── form_link_followup_module.xml │ │ │ │ │ │ ├── form_link_multiple.xml │ │ │ │ │ │ ├── form_link_registration_module.xml │ │ │ │ │ │ ├── form_link_submodule.xml │ │ │ │ │ │ ├── form_link_tdh.xml │ │ │ │ │ │ ├── form_link_tdh_with_fallback_module.xml │ │ │ │ │ │ ├── form_link_tdh_with_fallback_previous.xml │ │ │ │ │ │ ├── form_link_tdh_with_fallback_root.xml │ │ │ │ │ │ ├── form_link_update_case.xml │ │ │ │ │ │ ├── suite-workflow-module-in-root.xml │ │ │ │ │ │ ├── suite-workflow-module.xml │ │ │ │ │ │ ├── suite-workflow-previous.xml │ │ │ │ │ │ └── suite-workflow-root.xml │ │ │ │ │ ├── itext_form.xml │ │ │ │ │ ├── itext_form_normalized.xml │ │ │ │ │ ├── label_form.xml │ │ │ │ │ ├── list_apps/ │ │ │ │ │ │ └── list_apps.xml │ │ │ │ │ ├── one_question_two_images.xml │ │ │ │ │ ├── original_form.xml │ │ │ │ │ ├── save_to_case_in_groups.xml │ │ │ │ │ ├── session_endpoint_remote_request.xml │ │ │ │ │ ├── session_endpoint_remote_request_multi_select.xml │ │ │ │ │ ├── subcase-details.json │ │ │ │ │ ├── suite/ │ │ │ │ │ │ ├── advanced_module_parent.xml │ │ │ │ │ │ ├── advanced_module_parent_filters.xml │ │ │ │ │ │ ├── advanced_module_parent_null_relationship.xml │ │ │ │ │ │ ├── advanced_submodule_xform.xml │ │ │ │ │ │ ├── app.json │ │ │ │ │ │ ├── app_attached_image.json │ │ │ │ │ │ ├── app_audio_format.json │ │ │ │ │ │ ├── app_case_detail_instances.json │ │ │ │ │ │ ├── app_case_detail_tabs.json │ │ │ │ │ │ ├── app_case_detail_tabs_with_nodesets.json │ │ │ │ │ │ ├── app_case_sharing.json │ │ │ │ │ │ ├── app_case_tiles.json │ │ │ │ │ │ ├── app_fixture_graphing.json │ │ │ │ │ │ ├── app_graphing.json │ │ │ │ │ │ ├── app_no_case_sharing.json │ │ │ │ │ │ ├── app_video_inline.json │ │ │ │ │ │ ├── autoload_supplypoint.xml │ │ │ │ │ │ ├── basic_submodule_xform.xml │ │ │ │ │ │ ├── call-center.json │ │ │ │ │ │ ├── call-center.xml │ │ │ │ │ │ ├── case-search-again-with-action.xml │ │ │ │ │ │ ├── case-search-again-with-localized-action.xml │ │ │ │ │ │ ├── case-search-with-action.xml │ │ │ │ │ │ ├── case-search-with-localized-action.xml │ │ │ │ │ │ ├── case-tile-case-detail-tabs.xml │ │ │ │ │ │ ├── case-tile-case-detail.xml │ │ │ │ │ │ ├── case_list_media_suite.xml │ │ │ │ │ │ ├── case_tile_pulldown_session.xml │ │ │ │ │ │ ├── case_tile_template_format.xml │ │ │ │ │ │ ├── child-module-entry-datums-added-advanced.xml │ │ │ │ │ │ ├── child-module-entry-datums-added-basic.xml │ │ │ │ │ │ ├── child-module-entry-datums-added-usercase.xml │ │ │ │ │ │ ├── child-module-entry-datums-parent-select-other-same-case-type.xml │ │ │ │ │ │ ├── child-module-entry-datums-parent-select-other.xml │ │ │ │ │ │ ├── child-module-entry-datums.xml │ │ │ │ │ │ ├── child-module-form-workflow-previous.xml │ │ │ │ │ │ ├── child-module-grandchild-case.xml │ │ │ │ │ │ ├── child-module-preload-parent-ref.xml │ │ │ │ │ │ ├── child-module-rename-session-vars.xml │ │ │ │ │ │ ├── child-module-with-parent-select-and-case-list.xml │ │ │ │ │ │ ├── child-module-with-parent-select-entry-datums-added.xml │ │ │ │ │ │ ├── custom-parent-ref.xml │ │ │ │ │ │ ├── fixture-to-case-selection-localization.xml │ │ │ │ │ │ ├── fixture-to-case-selection-parent-child.xml │ │ │ │ │ │ ├── fixture-to-case-selection-with-form-filtering.xml │ │ │ │ │ │ ├── fixture-to-case-selection.xml │ │ │ │ │ │ ├── form_media_suite.xml │ │ │ │ │ │ ├── form_media_suite_all.xml │ │ │ │ │ │ ├── form_media_suite_en.xml │ │ │ │ │ │ ├── form_media_suite_hin.xml │ │ │ │ │ │ ├── form_with_media_refs.xml │ │ │ │ │ │ ├── load_case_from_custom_fixture_instance.xml │ │ │ │ │ │ ├── load_case_from_custom_fixture_session.xml │ │ │ │ │ │ ├── load_case_from_fixture_arbitrary_datum.xml │ │ │ │ │ │ ├── load_case_from_fixture_instance.xml │ │ │ │ │ │ ├── load_case_from_fixture_session.xml │ │ │ │ │ │ ├── load_case_from_report_fixture_instance.xml │ │ │ │ │ │ ├── load_case_from_report_fixture_session.xml │ │ │ │ │ │ ├── load_from_fixture_autoselect_session.xml │ │ │ │ │ │ ├── load_from_fixture_instance.xml │ │ │ │ │ │ ├── load_from_fixture_session.xml │ │ │ │ │ │ ├── media-suite-lazy-false.xml │ │ │ │ │ │ ├── media-suite-lazy-true.xml │ │ │ │ │ │ ├── module-filter-user-entry.xml │ │ │ │ │ │ ├── module-filter-user.xml │ │ │ │ │ │ ├── module-filter.xml │ │ │ │ │ │ ├── multi-sort.json │ │ │ │ │ │ ├── multi-sort.xml │ │ │ │ │ │ ├── multi_select_case_list/ │ │ │ │ │ │ │ └── basic_remote_request.xml │ │ │ │ │ │ ├── normal-suite.xml │ │ │ │ │ │ ├── open_case_and_subcase.xml │ │ │ │ │ │ ├── owner-name.json │ │ │ │ │ │ ├── owner-name.xml │ │ │ │ │ │ ├── parent_null_relationship_same_type.xml │ │ │ │ │ │ ├── remote_request.xml │ │ │ │ │ │ ├── reports_module_data_detail-translated-mixed.xml │ │ │ │ │ │ ├── reports_module_data_detail-translated-simple.xml │ │ │ │ │ │ ├── reports_module_data_detail-translated.xml │ │ │ │ │ │ ├── reports_module_data_detail.xml │ │ │ │ │ │ ├── reports_module_data_entry.xml │ │ │ │ │ │ ├── reports_module_data_entry_mobile_ucr_v1.xml │ │ │ │ │ │ ├── reports_module_menu.xml │ │ │ │ │ │ ├── reports_module_menu_multimedia.xml │ │ │ │ │ │ ├── reports_module_select_detail.xml │ │ │ │ │ │ ├── reports_module_summary_detail_hide_data_table.xml │ │ │ │ │ │ ├── reports_module_summary_detail_use_localized_description.xml │ │ │ │ │ │ ├── reports_module_summary_detail_use_xpath_description.xml │ │ │ │ │ │ ├── schedule-entry.xml │ │ │ │ │ │ ├── schedule-fixture.xml │ │ │ │ │ │ ├── search_command_detail.xml │ │ │ │ │ │ ├── search_config_blacklisted_owners.xml │ │ │ │ │ │ ├── search_config_default_only.xml │ │ │ │ │ │ ├── shadow_module.json │ │ │ │ │ │ ├── shadow_module.xml │ │ │ │ │ │ ├── shadow_module_cases.json │ │ │ │ │ │ ├── shadow_module_cases.xml │ │ │ │ │ │ ├── shadow_module_families_source_child.xml │ │ │ │ │ │ ├── shadow_module_families_source_parent.xml │ │ │ │ │ │ ├── shadow_module_families_source_parent_forms_only.xml │ │ │ │ │ │ ├── shadow_module_families_source_parent_forms_only_v1.xml │ │ │ │ │ │ ├── shadow_module_families_source_parent_v1.xml │ │ │ │ │ │ ├── shadow_module_forms_only.json │ │ │ │ │ │ ├── shadow_module_forms_only.xml │ │ │ │ │ │ ├── shadow_module_source_parent_v1_v2.xml │ │ │ │ │ │ ├── smart_link_remote_request.xml │ │ │ │ │ │ ├── sort-cache-search.xml │ │ │ │ │ │ ├── sort-cache.xml │ │ │ │ │ │ ├── sort-only-value.json │ │ │ │ │ │ ├── sort-only-value.xml │ │ │ │ │ │ ├── suite-advanced-autoselect-case-mobile.xml │ │ │ │ │ │ ├── suite-advanced-autoselect-case.xml │ │ │ │ │ │ ├── suite-advanced-autoselect-fixture.xml │ │ │ │ │ │ ├── suite-advanced-autoselect-raw.xml │ │ │ │ │ │ ├── suite-advanced-autoselect-user.xml │ │ │ │ │ │ ├── suite-advanced-autoselect-usercase.xml │ │ │ │ │ │ ├── suite-advanced-autoselect-with-filter.xml │ │ │ │ │ │ ├── suite-advanced-details.xml │ │ │ │ │ │ ├── suite-advanced-filter.xml │ │ │ │ │ │ ├── suite-advanced.json │ │ │ │ │ │ ├── suite-advanced.xml │ │ │ │ │ │ ├── suite-attached-image.xml │ │ │ │ │ │ ├── suite-case-detail-instances.xml │ │ │ │ │ │ ├── suite-case-detail-tabs-with-nodesets-for-sorting-search-only.xml │ │ │ │ │ │ ├── suite-case-detail-tabs-with-nodesets.xml │ │ │ │ │ │ ├── suite-case-detail-tabs.xml │ │ │ │ │ │ ├── suite-case-sharing.xml │ │ │ │ │ │ ├── suite-case-tiles.xml │ │ │ │ │ │ ├── suite-fixture-graphing.xml │ │ │ │ │ │ ├── suite-graphing.xml │ │ │ │ │ │ ├── suite-no-case-sharing.xml │ │ │ │ │ │ ├── task-mode-suite.xml │ │ │ │ │ │ ├── tiered-select-3.json │ │ │ │ │ │ ├── tiered-select-3.xml │ │ │ │ │ │ ├── tiered-select.json │ │ │ │ │ │ ├── tiered-select.xml │ │ │ │ │ │ ├── update_case_and_subcase.xml │ │ │ │ │ │ └── usercase_entry.xml │ │ │ │ │ ├── suite_inline_search/ │ │ │ │ │ │ ├── detail_tabs.xml │ │ │ │ │ │ └── shadow_module_entry.xml │ │ │ │ │ ├── suite_registry/ │ │ │ │ │ │ ├── detail_tabs.xml │ │ │ │ │ │ ├── form_link_followup_module_registry.xml │ │ │ │ │ │ ├── shadow_module_entry.xml │ │ │ │ │ │ └── shadow_module_remote_request.xml │ │ │ │ │ ├── unicode_error_form.xhtml │ │ │ │ │ ├── very_simple_form.xml │ │ │ │ │ ├── xform_builder/ │ │ │ │ │ │ ├── data_types.xml │ │ │ │ │ │ ├── group.xml │ │ │ │ │ │ ├── question_params.xml │ │ │ │ │ │ ├── repeat_group.xml │ │ │ │ │ │ ├── select1_question.xml │ │ │ │ │ │ ├── select_question.xml │ │ │ │ │ │ ├── unicode_translation.xml │ │ │ │ │ │ └── xform_title.xml │ │ │ │ │ ├── xform_test/ │ │ │ │ │ │ └── MySuperSpecialForm.xml │ │ │ │ │ ├── yesno.json │ │ │ │ │ ├── yesno_default_app_strings.txt │ │ │ │ │ ├── yesno_en_app_strings.txt │ │ │ │ │ └── yesno_es_app_strings.txt │ │ │ │ ├── mocks/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── mobile_ucr.py │ │ │ │ ├── templatetags/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_xforms_extras.py │ │ │ │ ├── test_advanced_suite.py │ │ │ │ ├── test_analytics.py │ │ │ │ ├── test_app_import_api.py │ │ │ │ ├── test_app_strings.py │ │ │ │ ├── test_app_view_context.py │ │ │ │ ├── test_apps.py │ │ │ │ ├── test_build_errors.py │ │ │ │ ├── test_build_errors_inline_search.py │ │ │ │ ├── test_bulk_ui_translation.py │ │ │ │ ├── test_case_detail_distance.py │ │ │ │ ├── test_case_list_form.py │ │ │ │ ├── test_case_list_lookup.py │ │ │ │ ├── test_case_refs_from_fb.py │ │ │ │ ├── test_ccz.py │ │ │ │ ├── test_child_module.py │ │ │ │ ├── test_commcare_settings.py │ │ │ │ ├── test_commcare_versioning.py │ │ │ │ ├── test_copy_form.py │ │ │ │ ├── test_days_ago_migration.py │ │ │ │ ├── test_dbaccessors.py │ │ │ │ ├── test_delete_case_list_custom_variables_xml.py │ │ │ │ ├── test_exceptions.py │ │ │ │ ├── test_filters.py │ │ │ │ ├── test_fix_app_docs_with_empty_keys.py │ │ │ │ ├── test_form_actions_diff.py │ │ │ │ ├── test_form_preparation_v2.py │ │ │ │ ├── test_form_versioning.py │ │ │ │ ├── test_form_workflow.py │ │ │ │ ├── test_form_workflow_multiple_case_types.py │ │ │ │ ├── test_form_xmlns.py │ │ │ │ ├── test_generators.py │ │ │ │ ├── test_get_questions.py │ │ │ │ ├── test_grid_menus.py │ │ │ │ ├── test_handle_shadow_child_modules.py │ │ │ │ ├── test_id_strings.py │ │ │ │ ├── test_list_apps_view.py │ │ │ │ ├── test_location_xpath.py │ │ │ │ ├── test_media_suite.py │ │ │ │ ├── test_migrate_address_popup.py │ │ │ │ ├── test_migrate_case_list_custom_variables.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_modules.py │ │ │ │ ├── test_practice_user_config.py │ │ │ │ ├── test_profile.py │ │ │ │ ├── test_release_notes_form.py │ │ │ │ ├── test_repeater.py │ │ │ │ ├── test_report_config.py │ │ │ │ ├── test_report_fixtures_provider.py │ │ │ │ ├── test_schedule.py │ │ │ │ ├── test_shadow_forms.py │ │ │ │ ├── test_shadow_modules.py │ │ │ │ ├── test_suite.py │ │ │ │ ├── test_suite_assertions.py │ │ │ │ ├── test_suite_case_tiles.py │ │ │ │ ├── test_suite_case_tiles_grouping.py │ │ │ │ ├── test_suite_commtrack.py │ │ │ │ ├── test_suite_custom_case_tiles.py │ │ │ │ ├── test_suite_detail_tabs.py │ │ │ │ ├── test_suite_filters.py │ │ │ │ ├── test_suite_fixture_to_case_selection.py │ │ │ │ ├── test_suite_form_filter_errors.py │ │ │ │ ├── test_suite_formats.py │ │ │ │ ├── test_suite_graphing.py │ │ │ │ ├── test_suite_inline_search.py │ │ │ │ ├── test_suite_instances.py │ │ │ │ ├── test_suite_multi_select_case_list.py │ │ │ │ ├── test_suite_regex.py │ │ │ │ ├── test_suite_registry_search.py │ │ │ │ ├── test_suite_remote_request.py │ │ │ │ ├── test_suite_resource_overrides.py │ │ │ │ ├── test_suite_session_endpoints.py │ │ │ │ ├── test_suite_shadow_module.py │ │ │ │ ├── test_suite_sorting.py │ │ │ │ ├── test_suite_split_screen_case_search.py │ │ │ │ ├── test_suite_subcases.py │ │ │ │ ├── test_suite_training_module.py │ │ │ │ ├── test_suite_usercase.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_translation_file_paths.py │ │ │ │ ├── test_util.py │ │ │ │ ├── test_views.py │ │ │ │ ├── test_xform.py │ │ │ │ ├── test_xform_builder.py │ │ │ │ ├── test_xform_parsing.py │ │ │ │ ├── test_xml_parsing.py │ │ │ │ ├── test_xpath.py │ │ │ │ ├── util.py │ │ │ │ └── views/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_apply_patch.py │ │ │ │ ├── test_get_form_datums.py │ │ │ │ ├── test_paginate_releases.py │ │ │ │ ├── test_release_build.py │ │ │ │ └── test_session_endpoint_utils.py │ │ │ ├── ui_translations/ │ │ │ │ ├── __init__.py │ │ │ │ ├── commcare_versioning.py │ │ │ │ └── ui_translations.py │ │ │ ├── urls.py │ │ │ ├── util.py │ │ │ ├── view_helpers.py │ │ │ ├── views/ │ │ │ │ ├── __init__.py │ │ │ │ ├── app_import_api.py │ │ │ │ ├── app_summary.py │ │ │ │ ├── apps.py │ │ │ │ ├── cli.py │ │ │ │ ├── download.py │ │ │ │ ├── formdesigner.py │ │ │ │ ├── forms.py │ │ │ │ ├── media_utils.py │ │ │ │ ├── modules.py │ │ │ │ ├── multimedia.py │ │ │ │ ├── phone.py │ │ │ │ ├── releases.py │ │ │ │ ├── schedules.py │ │ │ │ ├── settings.py │ │ │ │ ├── utils.py │ │ │ │ └── view_generic.py │ │ │ ├── xform.py │ │ │ ├── xform_builder.py │ │ │ ├── xpath.py │ │ │ └── xpath_validator/ │ │ │ ├── __init__.py │ │ │ ├── config.py │ │ │ ├── exceptions.py │ │ │ ├── nodejs/ │ │ │ │ ├── xpathConfig.js │ │ │ │ └── xpathValidator.js │ │ │ ├── tests.py │ │ │ └── wrapper.py │ │ ├── appstore/ │ │ │ ├── __init__.py │ │ │ ├── exceptions.py │ │ │ ├── management/ │ │ │ │ └── commands/ │ │ │ │ └── export_exchange.py │ │ │ └── models.py │ │ ├── auditcare/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── decorators/ │ │ │ │ └── __init__.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── export_audit_data.py │ │ │ │ ├── export_domain_logins.py │ │ │ │ ├── gdpr_scrub_user_auditcare.py │ │ │ │ ├── generate_request_report.py │ │ │ │ └── resolve_urls.py │ │ │ ├── middleware.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_sqlmodels.py │ │ │ │ ├── 0002_uniques.py │ │ │ │ ├── 0003_truncatechars.py │ │ │ │ ├── 0004_add_couch_id.py │ │ │ │ ├── 0005_auditcaremigrationmeta.py │ │ │ │ ├── 0006_auto_20210811_1215.py │ │ │ │ ├── 0007_delete_auditcaremigrationmeta.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ └── auditcare_migration.py │ │ │ │ ├── test_auth.py │ │ │ │ ├── test_export.py │ │ │ │ ├── test_gdpr_scrub_user_auditcare.py │ │ │ │ ├── test_middleware.py │ │ │ │ ├── test_models.py │ │ │ │ └── testutils.py │ │ │ ├── urls.py │ │ │ ├── utils/ │ │ │ │ ├── __init__.py │ │ │ │ ├── export.py │ │ │ │ ├── resolver.py │ │ │ │ └── show_urls.py │ │ │ └── views.py │ │ ├── builds/ │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── _design/ │ │ │ │ ├── filters/ │ │ │ │ │ └── all_builds.js │ │ │ │ └── views/ │ │ │ │ └── all/ │ │ │ │ ├── map.js │ │ │ │ └── reduce.js │ │ │ ├── fixtures.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ └── add_commcare_build.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── builds/ │ │ │ │ └── js/ │ │ │ │ └── edit_builds.js │ │ │ ├── templates/ │ │ │ │ └── builds/ │ │ │ │ ├── all.html │ │ │ │ └── edit_menu.html │ │ │ ├── tests/ │ │ │ │ └── test_utils.py │ │ │ ├── tests.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── cachehq/ │ │ │ ├── __init__.py │ │ │ ├── cachemodels.py │ │ │ ├── invalidate.py │ │ │ ├── mixins.py │ │ │ ├── models.py │ │ │ ├── signals.py │ │ │ └── tests.py │ │ ├── callcenter/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── app_parser.py │ │ │ ├── checks.py │ │ │ ├── const.py │ │ │ ├── data_source.py │ │ │ ├── data_sources/ │ │ │ │ ├── call_center_case_actions.json │ │ │ │ ├── call_center_cases.json │ │ │ │ └── call_center_forms.json │ │ │ ├── fixturegenerators.py │ │ │ ├── indicator_sets.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ └── rebuild_call_center_datasources.py │ │ │ ├── models.py │ │ │ ├── queries.py │ │ │ ├── sync_usercase.py │ │ │ ├── tasks.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ └── form_template.xml │ │ │ │ ├── sql_fixture.py │ │ │ │ ├── test_datasources.py │ │ │ │ ├── test_indicator_fixture.py │ │ │ │ ├── test_indicators.py │ │ │ │ ├── test_location_owners.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_owner_options_view.py │ │ │ │ ├── test_sync_usercases_tasks.py │ │ │ │ ├── test_use_fixtures_configuration.py │ │ │ │ └── test_utils.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── campaign/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── const.py │ │ │ ├── forms.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_dashboardmap_dashboardreport.py │ │ │ │ ├── 0003_add_dashboard_widget_fields.py │ │ │ │ ├── 0004_gauge.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── services.py │ │ │ ├── static/ │ │ │ │ └── campaign/ │ │ │ │ └── js/ │ │ │ │ └── dashboard.js │ │ │ ├── templates/ │ │ │ │ └── campaign/ │ │ │ │ ├── dashboard.html │ │ │ │ └── partials/ │ │ │ │ ├── add_widget_button.html │ │ │ │ ├── case_properties_dropdown.html │ │ │ │ ├── dashboard_gauge.html │ │ │ │ ├── dashboard_map.html │ │ │ │ ├── delete_widget_button.html │ │ │ │ ├── delete_widget_confirmation_modal.html │ │ │ │ ├── edit_widget_button.html │ │ │ │ ├── widget_form.html │ │ │ │ └── widget_modal.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_services.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── case_importer/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── base.py │ │ │ ├── const.py │ │ │ ├── do_import.py │ │ │ ├── exceptions.py │ │ │ ├── extension_points.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── import_cases.py │ │ │ │ ├── terminate_case_import.py │ │ │ │ └── update_case_property.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20161206_1937.py │ │ │ │ ├── 0003_caseuploadrecord_couch_user_id.py │ │ │ │ ├── 0004_caseuploadrecord_case_type.py │ │ │ │ ├── 0005_caseuploadfilemeta.py │ │ │ │ ├── 0006_caseuploadrecord_upload_file_meta.py │ │ │ │ ├── 0007_auto_20161209_2004.py │ │ │ │ ├── 0008_caseuploadrecord_task_status_json.py │ │ │ │ ├── 0009_caseuploadrecord_comment.py │ │ │ │ ├── 0010_caseuploadformrecord.py │ │ │ │ ├── 0011_update_blob_paths.py │ │ │ │ ├── 0012_auto_20190405_1747.py │ │ │ │ ├── 0013_make_duplicates_errors.py │ │ │ │ ├── 0014_rename_caseuploadrecord_domain_created_case_import_domain_21a470_idx.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── case_importer/ │ │ │ │ ├── js/ │ │ │ │ │ ├── excel_fields.js │ │ │ │ │ ├── import_history.js │ │ │ │ │ └── main.js │ │ │ │ └── spec/ │ │ │ │ ├── excel_fields_spec.js │ │ │ │ └── main.js │ │ │ ├── suggested_fields.py │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── case_importer/ │ │ │ │ ├── excel_config.html │ │ │ │ ├── excel_fields.html │ │ │ │ ├── import_cases.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── excel_field_rows.html │ │ │ │ │ ├── help_message.html │ │ │ │ │ ├── ko_import_history.html │ │ │ │ │ └── ko_import_status.html │ │ │ │ └── spec/ │ │ │ │ └── mocha.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_importer.py │ │ │ │ ├── test_importer_config_compat.py │ │ │ │ ├── test_suggested_fields.py │ │ │ │ └── test_util.py │ │ │ ├── tracking/ │ │ │ │ ├── __init__.py │ │ │ │ ├── analytics.py │ │ │ │ ├── case_upload_tracker.py │ │ │ │ ├── dbaccessors.py │ │ │ │ ├── filestorage.py │ │ │ │ ├── jsmodels.py │ │ │ │ ├── models.py │ │ │ │ ├── permissions.py │ │ │ │ ├── task_status.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_dbaccessors.py │ │ │ │ │ └── test_filestorage.py │ │ │ │ └── views.py │ │ │ ├── urls.py │ │ │ ├── util.py │ │ │ └── views.py │ │ ├── case_search/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── const.py │ │ │ ├── dsl_utils.py │ │ │ ├── exceptions.py │ │ │ ├── filter_dsl.py │ │ │ ├── fixtures.py │ │ │ ├── forms.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20161114_1901.py │ │ │ │ ├── 0003_casesearchqueryaddition.py │ │ │ │ ├── 0004_auto_20170518_2018.py │ │ │ │ ├── 0005_migrate_json_config.py │ │ │ │ ├── 0006_remove_casesearchconfig__config.py │ │ │ │ ├── 0007_auto_20170522_1506.py │ │ │ │ ├── 0008_auto_20180119_1716.py │ │ │ │ ├── 0009_delete_casesearchqueryaddition.py │ │ │ │ ├── 0010_casesearchconfig_synchronous_web_apps.py │ │ │ │ ├── 0011_domainsnotincasesearchindex.py │ │ │ │ ├── 0012_casesearchconfig_sync_cases_on_form_entry.py │ │ │ │ ├── 0013_casesearchconfig_fuzzy_prefix_length.py │ │ │ │ ├── 0014_casesearchconfig_index_name.py │ │ │ │ ├── 0015_csqlfixtureexpression_csqlfixtureexpressionlog.py │ │ │ │ ├── 0016_csqlfixtureexpression_user_data_criteria.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── case_search/ │ │ │ │ └── js/ │ │ │ │ ├── case_search.js │ │ │ │ └── profile_case_search.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── case_search/ │ │ │ │ ├── case_search.html │ │ │ │ ├── csql_expression_form.html │ │ │ │ ├── csql_fixture_configuration.html │ │ │ │ ├── csql_modal_form.html │ │ │ │ ├── csql_user_data_criteria_fields.html │ │ │ │ └── profile_case_search.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_ancestor_functions.py │ │ │ │ ├── test_case_search_endpoint.py │ │ │ │ ├── test_case_search_es_queries.py │ │ │ │ ├── test_case_search_filters.py │ │ │ │ ├── test_case_search_registry.py │ │ │ │ ├── test_filter_dsl.py │ │ │ │ ├── test_fixtures.py │ │ │ │ ├── test_get_related_cases.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_subcase_query_parser.py │ │ │ │ ├── test_utils.py │ │ │ │ ├── test_value_functions.py │ │ │ │ ├── test_views.py │ │ │ │ ├── test_xpath_functions.py │ │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ ├── views.py │ │ │ └── xpath_functions/ │ │ │ ├── __init__.py │ │ │ ├── ancestor_functions.py │ │ │ ├── comparison.py │ │ │ ├── query_functions.py │ │ │ ├── subcase_functions.py │ │ │ ├── utils.py │ │ │ └── value_functions.py │ │ ├── casegroups/ │ │ │ ├── __init__.py │ │ │ ├── dbaccessors.py │ │ │ ├── models.py │ │ │ └── tests.py │ │ ├── celery/ │ │ │ ├── __init__.py │ │ │ ├── analytics.py │ │ │ ├── durable.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ └── requeue_task_records.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_taskrecord.py │ │ │ │ ├── 0002_taskrecord_kombu_serialization.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── periodic.py │ │ │ ├── serial.py │ │ │ ├── shared_task.py │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_celery_app.py │ │ │ ├── test_durable_task.py │ │ │ └── test_requeue_task_records.py │ │ ├── change_feed/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── connection.py │ │ │ ├── consumer/ │ │ │ │ ├── __init__.py │ │ │ │ └── feed.py │ │ │ ├── data_sources.py │ │ │ ├── document_types.py │ │ │ ├── exceptions.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── create_kafka_topics.py │ │ │ │ ├── list_kafka_topics.py │ │ │ │ ├── pillow_topic_assignments.py │ │ │ │ └── validate_kafka_pillow_checkpoints.py │ │ │ ├── pillow.py │ │ │ ├── producer.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_connection.py │ │ │ │ ├── test_data_sources.py │ │ │ │ ├── test_document_types.py │ │ │ │ ├── test_kafka_change_feed.py │ │ │ │ ├── test_pillow.py │ │ │ │ ├── test_topics.py │ │ │ │ └── utils.py │ │ │ └── topics.py │ │ ├── cleanup/ │ │ │ ├── __init__.py │ │ │ ├── dbaccessors.py │ │ │ ├── deletable_doc_types.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── couch_integrity/ │ │ │ │ │ └── basic.json │ │ │ │ ├── couch_integrity.py │ │ │ │ ├── delete_case_indices.py │ │ │ │ ├── delete_couch_dbs.py │ │ │ │ ├── delete_doc_conflicts.py │ │ │ │ ├── delete_duplicate_users.py │ │ │ │ ├── delete_es_docs_for_domain.py │ │ │ │ ├── delete_forms.py │ │ │ │ ├── evaluate_couch_model_for_sql.py │ │ │ │ ├── fire_repeaters.py │ │ │ │ ├── get_doc_info.py │ │ │ │ ├── multi_populate.py │ │ │ │ ├── pillow_reset.py │ │ │ │ ├── populate_sql_model_from_couch_model.py │ │ │ │ ├── purge_docs.py │ │ │ │ ├── rebuild_cases.py │ │ │ │ ├── remove_deleted_cases_from_es.py │ │ │ │ ├── reprocess_error_forms.py │ │ │ │ ├── reprocess_incomplete_submissions.py │ │ │ │ ├── republish_forms_rebuild_cases.py │ │ │ │ ├── templates/ │ │ │ │ │ ├── couch_model_additions.j2 │ │ │ │ │ ├── migration_attr_equality_test.j2 │ │ │ │ │ ├── populate_command.j2 │ │ │ │ │ └── sql_model.j2 │ │ │ │ ├── undelete_docs.py │ │ │ │ └── undo_uuid_clash.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_convert_change_feed_checkpoint_to_sql.py │ │ │ │ ├── 0002_convert_mc_checkpoint_to_sql.py │ │ │ │ ├── 0003_convert_fluff_checkpoints_to_sql.py │ │ │ │ ├── 0004_convert_ucr_checkpoints_to_sql.py │ │ │ │ ├── 0005_convert_mvp_checkpoints_to_sql.py │ │ │ │ ├── 0006_convert_report_es_checkpoints_to_sql.py │ │ │ │ ├── 0007_convert_es_checkpoints_to_sql.py │ │ │ │ ├── 0008_convert_sofabed_checkpoints_to_sql.py │ │ │ │ ├── 0009_convert_final_checkpoints_to_sql.py │ │ │ │ ├── 0010_rename_default_change_feed_checkpoint.py │ │ │ │ ├── 0011_merge_couch_sql_pillows.py │ │ │ │ ├── 0012_add_es_index_to_checkpoint_ids.py │ │ │ │ ├── 0013_migrate_kafka_checkpoint_format.py │ │ │ │ ├── 0014_deletedcouchdoc.py │ │ │ │ ├── 0015_deletedcouchdoc_unique_id_and_type.py │ │ │ │ ├── 0016_add_deletedsqldoc.py │ │ │ │ ├── 0017_delete_oauth_integrations_models.py │ │ │ │ ├── 0018_delete_ewsghana_models.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tasks.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_dbaccessors.py │ │ │ │ ├── test_delete_es_docs_for_domain.py │ │ │ │ ├── test_populate_sql_model_from_couch_model.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_utils.py │ │ │ │ └── util.py │ │ │ └── utils.py │ │ ├── cloudcare/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── const.py │ │ │ ├── dbaccessors.py │ │ │ ├── decorators.py │ │ │ ├── esaccessors.py │ │ │ ├── exceptions.py │ │ │ ├── middleware.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_sqlapplicationaccess.py │ │ │ │ ├── 0003_rename_sqlapplicationaccess.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── cloudcare/ │ │ │ │ └── js/ │ │ │ │ ├── config.js │ │ │ │ ├── debugger/ │ │ │ │ │ └── debugger.js │ │ │ │ ├── form_entry/ │ │ │ │ │ ├── const.js │ │ │ │ │ ├── entries.js │ │ │ │ │ ├── errors.js │ │ │ │ │ ├── form_ui.js │ │ │ │ │ ├── spec/ │ │ │ │ │ │ ├── entries_spec.js │ │ │ │ │ │ ├── fixtures.js │ │ │ │ │ │ ├── form_ui_spec.js │ │ │ │ │ │ ├── integration_spec.js │ │ │ │ │ │ ├── main.js │ │ │ │ │ │ ├── utils_spec.js │ │ │ │ │ │ └── web_form_session_spec.js │ │ │ │ │ ├── task_queue.js │ │ │ │ │ ├── utils.js │ │ │ │ │ └── web_form_session.js │ │ │ │ ├── formplayer/ │ │ │ │ │ ├── app.js │ │ │ │ │ ├── apps/ │ │ │ │ │ │ ├── api.js │ │ │ │ │ │ ├── collections.js │ │ │ │ │ │ ├── controller.js │ │ │ │ │ │ ├── models.js │ │ │ │ │ │ └── views.js │ │ │ │ │ ├── constants.js │ │ │ │ │ ├── hq_events.js │ │ │ │ │ ├── layout/ │ │ │ │ │ │ └── views/ │ │ │ │ │ │ ├── progress_bar.js │ │ │ │ │ │ └── settings.js │ │ │ │ │ ├── main.js │ │ │ │ │ ├── menus/ │ │ │ │ │ │ ├── api.js │ │ │ │ │ │ ├── collections.js │ │ │ │ │ │ ├── controller.js │ │ │ │ │ │ ├── utils.js │ │ │ │ │ │ ├── views/ │ │ │ │ │ │ │ └── query.js │ │ │ │ │ │ └── views.js │ │ │ │ │ ├── middleware.js │ │ │ │ │ ├── router.js │ │ │ │ │ ├── sessions/ │ │ │ │ │ │ ├── api.js │ │ │ │ │ │ ├── collections.js │ │ │ │ │ │ ├── controller.js │ │ │ │ │ │ ├── models.js │ │ │ │ │ │ └── views.js │ │ │ │ │ ├── spec/ │ │ │ │ │ │ ├── case_list_pagination_spec.js │ │ │ │ │ │ ├── debugger_spec.js │ │ │ │ │ │ ├── fake_formplayer.js │ │ │ │ │ │ ├── fixtures/ │ │ │ │ │ │ │ ├── case_grid_list.js │ │ │ │ │ │ │ ├── case_list.js │ │ │ │ │ │ │ ├── case_tile_list.js │ │ │ │ │ │ │ ├── menu_list.js │ │ │ │ │ │ │ └── split_screen_case_list.js │ │ │ │ │ │ ├── hq_events_spec.js │ │ │ │ │ │ ├── main.js │ │ │ │ │ │ ├── menu_list_spec.js │ │ │ │ │ │ ├── menu_utils_spec.js │ │ │ │ │ │ ├── query_spec.js │ │ │ │ │ │ ├── session_middleware_spec.js │ │ │ │ │ │ ├── split_screen_case_search_spec.js │ │ │ │ │ │ ├── user_spec.js │ │ │ │ │ │ └── utils_spec.js │ │ │ │ │ ├── users/ │ │ │ │ │ │ ├── collections.js │ │ │ │ │ │ ├── controller.js │ │ │ │ │ │ ├── models.js │ │ │ │ │ │ ├── utils.js │ │ │ │ │ │ └── views.js │ │ │ │ │ └── utils/ │ │ │ │ │ ├── calendar-picker-translations.js │ │ │ │ │ └── utils.js │ │ │ │ ├── gtx.js │ │ │ │ ├── markdown.js │ │ │ │ ├── preview_app/ │ │ │ │ │ ├── dragscroll.js │ │ │ │ │ ├── main.js │ │ │ │ │ └── preview_app.js │ │ │ │ ├── sentry.js │ │ │ │ ├── spec/ │ │ │ │ │ ├── markdown_spec.js │ │ │ │ │ └── utils_spec.js │ │ │ │ └── utils.js │ │ │ ├── templates/ │ │ │ │ └── cloudcare/ │ │ │ │ ├── block_preview_app.html │ │ │ │ ├── block_web_apps.html │ │ │ │ ├── config.html │ │ │ │ ├── formplayer_home.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── all_templates.html │ │ │ │ │ ├── case_detail.html │ │ │ │ │ ├── case_list/ │ │ │ │ │ │ ├── cell_container_style.html │ │ │ │ │ │ ├── cell_grid_style.html │ │ │ │ │ │ ├── cell_layout_style.html │ │ │ │ │ │ ├── config.html │ │ │ │ │ │ ├── config_modal.html │ │ │ │ │ │ ├── detail.html │ │ │ │ │ │ ├── item.html │ │ │ │ │ │ ├── list.html │ │ │ │ │ │ ├── menu_header.html │ │ │ │ │ │ ├── multi_select_continue_button.html │ │ │ │ │ │ ├── no_items_text.html │ │ │ │ │ │ ├── search_controls.html │ │ │ │ │ │ ├── show_map_button.html │ │ │ │ │ │ ├── table_container.html │ │ │ │ │ │ ├── tile_grouped_item.html │ │ │ │ │ │ └── tile_item.html │ │ │ │ │ ├── confirmation_modal.html │ │ │ │ │ ├── debugger.html │ │ │ │ │ ├── dependencies.html │ │ │ │ │ ├── form_entry/ │ │ │ │ │ │ ├── entry_address.html │ │ │ │ │ │ ├── entry_blank.html │ │ │ │ │ │ ├── entry_button.html │ │ │ │ │ │ ├── entry_choice_label.html │ │ │ │ │ │ ├── entry_datetime.html │ │ │ │ │ │ ├── entry_dropdown.html │ │ │ │ │ │ ├── entry_ethiopian_date.html │ │ │ │ │ │ ├── entry_file.html │ │ │ │ │ │ ├── entry_geo.html │ │ │ │ │ │ ├── entry_multidropdown.html │ │ │ │ │ │ ├── entry_numeric.html │ │ │ │ │ │ ├── entry_password.html │ │ │ │ │ │ ├── entry_select.html │ │ │ │ │ │ ├── entry_signature.html │ │ │ │ │ │ ├── entry_text.html │ │ │ │ │ │ ├── entry_unsupported.html │ │ │ │ │ │ ├── form.html │ │ │ │ │ │ ├── form_navigation.html │ │ │ │ │ │ ├── grouped_element_tile_row.html │ │ │ │ │ │ ├── help_multimedia.html │ │ │ │ │ │ ├── multimedia.html │ │ │ │ │ │ ├── question.html │ │ │ │ │ │ └── sub_group.html │ │ │ │ │ ├── grid_view/ │ │ │ │ │ │ ├── grid.html │ │ │ │ │ │ ├── row.html │ │ │ │ │ │ └── single_app.html │ │ │ │ │ ├── menu/ │ │ │ │ │ │ ├── audio.html │ │ │ │ │ │ ├── breadcrumbs.html │ │ │ │ │ │ ├── dropdown.html │ │ │ │ │ │ ├── grid.html │ │ │ │ │ │ ├── grid_item.html │ │ │ │ │ │ ├── list.html │ │ │ │ │ │ ├── persistent_menu.html │ │ │ │ │ │ └── row.html │ │ │ │ │ ├── new_app_version_modal.html │ │ │ │ │ ├── pagination.html │ │ │ │ │ ├── progress.html │ │ │ │ │ ├── query/ │ │ │ │ │ │ ├── group.html │ │ │ │ │ │ ├── item.html │ │ │ │ │ │ └── list.html │ │ │ │ │ ├── sessions/ │ │ │ │ │ │ ├── item.html │ │ │ │ │ │ └── list.html │ │ │ │ │ ├── settings_view.html │ │ │ │ │ └── users/ │ │ │ │ │ ├── restore_as.html │ │ │ │ │ ├── restore_as_banner.html │ │ │ │ │ ├── user_data.html │ │ │ │ │ └── user_row.html │ │ │ │ ├── preview_app.html │ │ │ │ ├── preview_app_base.html │ │ │ │ ├── spec/ │ │ │ │ │ ├── form_entry/ │ │ │ │ │ │ └── mocha.html │ │ │ │ │ └── mocha.html │ │ │ │ └── web_apps_disabled.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_api.py │ │ │ │ ├── test_doc_tests.py │ │ │ │ ├── test_esaccessors.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_session.py │ │ │ │ └── test_utils.py │ │ │ ├── touchforms_api.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── commtrack/ │ │ │ ├── __init__.py │ │ │ ├── const.py │ │ │ ├── consumption.py │ │ │ ├── exceptions.py │ │ │ ├── fixtures.py │ │ │ ├── forms.py │ │ │ ├── helpers.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ └── __init__.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_stockstate_last_modified_form_id.py │ │ │ │ ├── 0003_create_config_models.py │ │ │ │ ├── 0004_update_overstock_threshold.py │ │ │ │ ├── 0005_populate_config_models.py │ │ │ │ ├── 0006_remove_sqlcommtrackconfig_couch_id.py │ │ │ │ ├── 0007_rename_sql_models.py │ │ │ │ ├── 0008_delete_stockstate.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── processing.py │ │ │ ├── resources/ │ │ │ │ ├── __init__.py │ │ │ │ └── v0_1.py │ │ │ ├── sms.py │ │ │ ├── static/ │ │ │ │ └── commtrack/ │ │ │ │ └── js/ │ │ │ │ ├── base_list_view_model.js │ │ │ │ ├── products_and_programs_main.js │ │ │ │ └── sms.js │ │ │ ├── templates/ │ │ │ │ └── commtrack/ │ │ │ │ └── manage/ │ │ │ │ ├── default_consumption.html │ │ │ │ └── partials/ │ │ │ │ └── pagination.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── balances.py │ │ │ │ │ └── xml/ │ │ │ │ │ └── device_log.xml │ │ │ │ ├── test_dbaccessors.py │ │ │ │ ├── test_fixture.py │ │ │ │ ├── test_locations.py │ │ │ │ ├── test_products.py │ │ │ │ ├── test_programs.py │ │ │ │ ├── test_rebuild.py │ │ │ │ ├── test_settings.py │ │ │ │ ├── test_sms_reporting.py │ │ │ │ ├── test_stock_report.py │ │ │ │ ├── test_supply_points.py │ │ │ │ ├── test_utils.py │ │ │ │ ├── test_xml.py │ │ │ │ └── util.py │ │ │ ├── urls.py │ │ │ ├── util.py │ │ │ ├── views.py │ │ │ └── xmlutil.py │ │ ├── consumption/ │ │ │ ├── __init__.py │ │ │ ├── const.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_populate_sqldefaultconsumption.py │ │ │ │ ├── 0003_remove_sqldefaultconsumption_couch_id.py │ │ │ │ ├── 0004_rename_sqldefaultconsumption.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── shortcuts.py │ │ │ └── tests.py │ │ ├── custom_data_fields/ │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── edit_entity.py │ │ │ ├── edit_model.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_populate_customdatafieldsdefinition.py │ │ │ │ ├── 0003_remove_sqlcustomdatafieldsdefinition_couch_id.py │ │ │ │ ├── 0004_rename_tables.py │ │ │ │ ├── 0005_customdatafieldsprofile.py │ │ │ │ ├── 0006_auto_20200924_1753.py │ │ │ │ ├── 0007_custom_data_fields_erm_support.py │ │ │ │ ├── 0008_custom_data_fields_upstream_ids.py │ │ │ │ ├── 0009_field_required_for.py │ │ │ │ ├── 0010_customdatafieldsdefinition_profile_required_for_user_type.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── custom_data_fields/ │ │ │ │ └── js/ │ │ │ │ └── custom_data_fields.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── custom_data_fields/ │ │ │ │ ├── custom_data_fields.html │ │ │ │ └── partials/ │ │ │ │ ├── fields_tab.html │ │ │ │ ├── modal_delete.html │ │ │ │ ├── modal_edit.html │ │ │ │ ├── profiles_tab.html │ │ │ │ └── purge_existing_fields.html │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_edit_model.py │ │ │ ├── test_fields.py │ │ │ ├── test_form.py │ │ │ ├── test_models.py │ │ │ ├── test_profiles.py │ │ │ └── test_verification.py │ │ ├── dashboard/ │ │ │ ├── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── dashboard/ │ │ │ │ └── js/ │ │ │ │ └── dashboard.js │ │ │ ├── templates/ │ │ │ │ └── dashboard/ │ │ │ │ └── base.html │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── data_analytics/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── const.py │ │ │ ├── daily_calcs.py │ │ │ ├── esaccessors.py │ │ │ ├── feature_calcs.py │ │ │ ├── gir_generator.py │ │ │ ├── malt_generator.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── add_to_malt_table.py │ │ │ │ ├── collect_feature_metrics.py │ │ │ │ ├── update_gir_table.py │ │ │ │ └── update_malt_table.py │ │ │ ├── metric_registry.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_squashed_0004_auto_20150810_1710.py │ │ │ │ ├── 0002_maltrow_threshold.py │ │ │ │ ├── 0003_auto_20160205_0927.py │ │ │ │ ├── 0004_experienced_threshold.py │ │ │ │ ├── 0005_girrow.py │ │ │ │ ├── 0006_unique_girrow.py │ │ │ │ ├── 0007_auto_20160819_1423.py │ │ │ │ ├── 0008_auto_20161114_1903.py │ │ │ │ ├── 0009_remove_girrow_wam.py │ │ │ │ ├── 0010_maltrow_last_run_date.py │ │ │ │ ├── 0011_domainmetrics.py │ │ │ │ ├── 0012_update_domainmetrics_fields.py │ │ │ │ ├── 0013_domainmetrics_bulk_case_editing_sessions_and_more.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tasks.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_app_feature_metrics.py │ │ │ │ ├── test_collect_feature_metrics_command.py │ │ │ │ ├── test_data_export_feature_metrics.py │ │ │ │ ├── test_esaccessors.py │ │ │ │ ├── test_gir.py │ │ │ │ ├── test_malt_generator.py │ │ │ │ ├── test_metric_registry.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_user_security_feature_metrics.py │ │ │ │ ├── test_util.py │ │ │ │ └── utils.py │ │ │ └── util.py │ │ ├── data_cleaning/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── columns.py │ │ │ ├── decorators.py │ │ │ ├── exceptions.py │ │ │ ├── filters.py │ │ │ ├── forms/ │ │ │ │ ├── __init__.py │ │ │ │ ├── bulk_edit.py │ │ │ │ ├── columns.py │ │ │ │ ├── filters.py │ │ │ │ └── start_session.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── dc_create_test_app.py │ │ │ │ ├── dc_create_test_data.py │ │ │ │ ├── dc_create_test_users.py │ │ │ │ └── utils/ │ │ │ │ ├── __init__.py │ │ │ │ ├── apps/ │ │ │ │ │ └── plant_care_app.json │ │ │ │ ├── fake_data_users.py │ │ │ │ ├── fake_plant_data.py │ │ │ │ ├── input_validation.py │ │ │ │ └── issues.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_update_fields_and_ordering.py │ │ │ │ ├── 0003_column_filter_unique_ids_match_type_updates.py │ │ │ │ ├── 0004_alter_bulkeditcolumn_data_type_and_more.py │ │ │ │ ├── 0005_rename_bulkeditcolumnfilter_bulkeditfilter.py │ │ │ │ ├── 0006_alter_bulkeditchange_action_type.py │ │ │ │ ├── 0007_alter_bulkeditrecord_doc_id_and_more.py │ │ │ │ └── __init__.py │ │ │ ├── models/ │ │ │ │ ├── __init__.py │ │ │ │ ├── change.py │ │ │ │ ├── column.py │ │ │ │ ├── filters.py │ │ │ │ ├── record.py │ │ │ │ ├── session.py │ │ │ │ └── types.py │ │ │ ├── records.py │ │ │ ├── static/ │ │ │ │ └── data_cleaning/ │ │ │ │ └── js/ │ │ │ │ ├── bulk_edit_main.js │ │ │ │ ├── bulk_edit_session.js │ │ │ │ └── directives/ │ │ │ │ └── dynamic_options_select2.js │ │ │ ├── tables.py │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── data_cleaning/ │ │ │ │ ├── bulk_edit_main.html │ │ │ │ ├── bulk_edit_session.html │ │ │ │ ├── columns/ │ │ │ │ │ ├── column_editable.html │ │ │ │ │ ├── column_main.html │ │ │ │ │ ├── column_system.html │ │ │ │ │ ├── selection.html │ │ │ │ │ ├── selection_header.html │ │ │ │ │ ├── selection_read_only.html │ │ │ │ │ ├── task_form_ids.html │ │ │ │ │ ├── task_status.html │ │ │ │ │ └── values/ │ │ │ │ │ ├── empty.html │ │ │ │ │ ├── null.html │ │ │ │ │ └── text.html │ │ │ │ ├── filters/ │ │ │ │ │ ├── formatted_value.html │ │ │ │ │ └── pinned/ │ │ │ │ │ ├── base.html │ │ │ │ │ ├── multi_option.html │ │ │ │ │ └── single_option.html │ │ │ │ ├── forms/ │ │ │ │ │ ├── edit_selected_records_form.html │ │ │ │ │ ├── manage_columns_form.html │ │ │ │ │ ├── manage_filters_form.html │ │ │ │ │ ├── partials/ │ │ │ │ │ │ ├── active_session_exists.html │ │ │ │ │ │ ├── column_list_item.html │ │ │ │ │ │ └── filter_list_item.html │ │ │ │ │ └── pinned_filter_form.html │ │ │ │ ├── modals/ │ │ │ │ │ ├── base_confirm.html │ │ │ │ │ ├── confirm_apply.html │ │ │ │ │ ├── confirm_clear.html │ │ │ │ │ ├── confirm_select_all.html │ │ │ │ │ ├── confirm_undo.html │ │ │ │ │ └── select_all_not_possible.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── button_bar.html │ │ │ │ │ ├── data_type_icon.html │ │ │ │ │ ├── loading_indicator.html │ │ │ │ │ └── offcanvas.html │ │ │ │ ├── status/ │ │ │ │ │ ├── base_modal_body.html │ │ │ │ │ ├── complete.html │ │ │ │ │ ├── in_progress.html │ │ │ │ │ ├── modal.html │ │ │ │ │ ├── partial/ │ │ │ │ │ │ └── task_progress_bar.html │ │ │ │ │ └── previous_session.html │ │ │ │ ├── summary/ │ │ │ │ │ ├── apply_changes.html │ │ │ │ │ ├── clear_changes.html │ │ │ │ │ ├── partial/ │ │ │ │ │ │ ├── change_detail.html │ │ │ │ │ │ └── change_history.html │ │ │ │ │ └── undo_changes.html │ │ │ │ └── tables/ │ │ │ │ ├── bulk_edit_session.html │ │ │ │ └── recent_sessions.html │ │ │ ├── templatetags/ │ │ │ │ ├── __init__.py │ │ │ │ └── data_cleaning.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── mixins.py │ │ │ │ ├── test_add_column_form.py │ │ │ │ ├── test_add_filter_form.py │ │ │ │ ├── test_bulk_edit_form.py │ │ │ │ ├── test_changes.py │ │ │ │ ├── test_filter_outputs.py │ │ │ │ ├── test_filters.py │ │ │ │ ├── test_records.py │ │ │ │ ├── test_session.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_utils_cases.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ ├── utils/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cases.py │ │ │ │ └── decorators.py │ │ │ └── views/ │ │ │ ├── __init__.py │ │ │ ├── bulk_edit.py │ │ │ ├── columns.py │ │ │ ├── filters.py │ │ │ ├── main.py │ │ │ ├── mixins.py │ │ │ ├── start.py │ │ │ ├── status.py │ │ │ ├── summary.py │ │ │ └── tables.py │ │ ├── data_dictionary/ │ │ │ ├── __init__.py │ │ │ ├── bulk.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── generate_data_dictionary.py │ │ │ │ └── refresh_data_dictionary.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_squashed_0002_auto_20161116_2209.py │ │ │ │ ├── 0002_auto_20161118_1537.py │ │ │ │ ├── 0003_auto_20161128_2047.py │ │ │ │ ├── 0004_auto_20161130_2125.py │ │ │ │ ├── 0005_casetype_fully_generated.py │ │ │ │ ├── 0006_caseproperty_group.py │ │ │ │ ├── 0007_property_type_choices.py │ │ │ │ ├── 0008_casepropertyallowedvalue.py │ │ │ │ ├── 0009_caseproperty_label.py │ │ │ │ ├── 0010_caseproperty_index.py │ │ │ │ ├── 0011_casepropertygroup.py │ │ │ │ ├── 0012_populate_case_property_groups.py │ │ │ │ ├── 0013_auto_20230529_1614.py │ │ │ │ ├── 0014_auto_20230705_2007.py │ │ │ │ ├── 0015_casetype_is_deprecated.py │ │ │ │ ├── 0016_remove_case_property_group_and_rename_group_obj_caseproperty_group.py │ │ │ │ ├── 0017_refresh_data_dictionary.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── data_dictionary/ │ │ │ │ └── js/ │ │ │ │ ├── data_dictionary.js │ │ │ │ └── partials/ │ │ │ │ └── case_property_warning.js │ │ │ ├── templates/ │ │ │ │ └── data_dictionary/ │ │ │ │ ├── base.html │ │ │ │ └── partials/ │ │ │ │ ├── case_property_warning.html │ │ │ │ ├── confirmation_modals.html │ │ │ │ └── valid_values_th_content.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── broken_data_dictionary.xlsx │ │ │ │ │ └── clean_data_dictionary.xlsx │ │ │ │ ├── test_import_export.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_util.py │ │ │ │ ├── test_views.py │ │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ ├── util.py │ │ │ └── views.py │ │ ├── data_interfaces/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── app_config.py │ │ │ ├── deduplication.py │ │ │ ├── dispatcher.py │ │ │ ├── forms.py │ │ │ ├── interfaces.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── get_case_rule_submissions.py │ │ │ │ └── undo_case_rule_submissions.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_remove_exists_option.py │ │ │ │ ├── 0003_update__automaticupdaterulecriteria__match_type__choices.py │ │ │ │ ├── 0004_optional_modified_date_and_prop_type_choices.py │ │ │ │ ├── 0005_remove_match_type_choices.py │ │ │ │ ├── 0006_case_rule_refactor.py │ │ │ │ ├── 0007_logging_models.py │ │ │ │ ├── 0008_update_case_rulesubmission.py │ │ │ │ ├── 0009_scheduling_integration.py │ │ │ │ ├── 0010_automaticupdaterule_workflow.py │ │ │ │ ├── 0011_domaincaserulerun_num_creates.py │ │ │ │ ├── 0012_createscheduleinstanceactiondefinition_reset_case_property_name.py │ │ │ │ ├── 0013_createscheduleinstanceactiondefinition_scheduler_module_info.py │ │ │ │ ├── 0014_createscheduleinstanceactiondefinition_start_date_case_property.py │ │ │ │ ├── 0015_automaticupdaterule_locked_for_editing.py │ │ │ │ ├── 0016_createscheduleinstanceactiondefinition_specific_start_date.py │ │ │ │ ├── 0017_alter_domaincaserulerun.py │ │ │ │ ├── 0018_check_for_rule_migration.py │ │ │ │ ├── 0019_remove_old_rule_models.py │ │ │ │ ├── 0020_make_migrated_nullable.py │ │ │ │ ├── 0021_remove_automaticupdaterule_migrated.py │ │ │ │ ├── 0022_domaincaserulerun_case_type.py │ │ │ │ ├── 0023_auto_20210914_1726.py │ │ │ │ ├── 0024_add_automaticupdaterule_upstream_id.py │ │ │ │ ├── 0025_domaincaserulerun_num_errors.py │ │ │ │ ├── 0026_automaticupdaterule_criteria_operator.py │ │ │ │ ├── 0027_auto_20220511_2017.py │ │ │ │ ├── 0028_auto_20220420_1301.py │ │ │ │ ├── 0029_locationfilterdefinition_include_child_locations.py │ │ │ │ ├── 0030_add_workflow_choices.py │ │ │ │ ├── 0031_add_domaincaserulerun_status_choices.py │ │ │ │ ├── 0032_bootstrap_audit_events_for_update_rules.py │ │ │ │ ├── 0033_automaticupdaterule_deleted_on.py │ │ │ │ ├── 0034_case_name_actions.py │ │ │ │ ├── 0035_add_case_duplicate_new.py │ │ │ │ ├── 0036_backfill_dedupe_match_values.py │ │ │ │ ├── 0037_add_dedupe_update_toggle.py │ │ │ │ ├── 0038_alter_caseduplicate_potential_duplicates.py │ │ │ │ ├── 0039_rename_caserulesubmission_domain_created_on_data_interf_domain_718740_idx_and_more.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── pillow.py │ │ │ ├── signals.py │ │ │ ├── static/ │ │ │ │ └── data_interfaces/ │ │ │ │ ├── js/ │ │ │ │ │ ├── archive_forms.js │ │ │ │ │ ├── auto_update_rules.js │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── case_dedupe_main.js │ │ │ │ │ │ ├── case_management.js │ │ │ │ │ │ ├── deduplication_rules.js │ │ │ │ │ │ └── manage_case_groups.js │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── case_dedupe_main.js │ │ │ │ │ │ ├── case_management.js │ │ │ │ │ │ ├── deduplication_rules.js │ │ │ │ │ │ └── manage_case_groups.js │ │ │ │ │ ├── case_property_input.js │ │ │ │ │ ├── case_rule_actions.js │ │ │ │ │ ├── case_rule_criteria.js │ │ │ │ │ ├── case_rule_main.js │ │ │ │ │ ├── find_by_id.js │ │ │ │ │ └── make_read_only.js │ │ │ │ └── xlsx/ │ │ │ │ └── cases_bulk_example.xlsx │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── data_interfaces/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── auto_update_rules.html │ │ │ │ │ ├── case_rule.html │ │ │ │ │ ├── edit_deduplication_rule.html │ │ │ │ │ ├── find_by_id.html │ │ │ │ │ ├── list_case_groups.html │ │ │ │ │ ├── list_deduplication_rules.html │ │ │ │ │ └── manage_case_groups.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── auto_update_rules.html │ │ │ │ │ ├── case_rule.html │ │ │ │ │ ├── edit_deduplication_rule.html │ │ │ │ │ ├── find_by_id.html │ │ │ │ │ ├── list_case_groups.html │ │ │ │ │ ├── list_deduplication_rules.html │ │ │ │ │ └── manage_case_groups.html │ │ │ │ ├── interfaces/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── archive_forms.html │ │ │ │ │ │ └── case_management.html │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ ├── archive_forms.html │ │ │ │ │ └── case_management.html │ │ │ │ └── partials/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── auto_update_rule_list.html │ │ │ │ │ ├── auto_update_rule_run_history.html │ │ │ │ │ ├── case_rule_actions.html │ │ │ │ │ ├── case_rule_criteria.html │ │ │ │ │ ├── find_by_id_form.html │ │ │ │ │ └── modal_edit.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── auto_update_rule_list.html │ │ │ │ │ ├── auto_update_rule_run_history.html │ │ │ │ │ ├── case_rule_actions.html │ │ │ │ │ ├── case_rule_criteria.html │ │ │ │ │ ├── find_by_id_form.html │ │ │ │ │ └── modal_edit.html │ │ │ │ ├── case_copy_complete_email.html │ │ │ │ ├── case_copy_status.html │ │ │ │ ├── case_reassign_complete_email.html │ │ │ │ ├── case_reassign_status.html │ │ │ │ └── xform_management_status.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── deduplication_helpers.py │ │ │ │ ├── files/ │ │ │ │ │ ├── basic_forms_bulk.xlsx │ │ │ │ │ ├── missing_forms_bulk.xlsx │ │ │ │ │ └── wrong_file.xyz │ │ │ │ ├── test_auto_case_updates.py │ │ │ │ ├── test_auto_update_rules.py │ │ │ │ ├── test_case_deduplication.py │ │ │ │ ├── test_deduplication.py │ │ │ │ ├── test_deduplication_rules.py │ │ │ │ ├── test_form_validation.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_pillow.py │ │ │ │ ├── test_scheduling_integration.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_utils.py │ │ │ │ ├── test_views.py │ │ │ │ ├── test_xform_management.py │ │ │ │ └── util.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── data_pipeline_audit/ │ │ │ ├── __init__.py │ │ │ ├── dbacessors.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── compare_doc_counts.py │ │ │ │ ├── compare_doc_ids.py │ │ │ │ └── find_sql_forms_not_in_es.py │ │ │ ├── tools.py │ │ │ └── utils.py │ │ ├── domain/ │ │ │ ├── __init__.py │ │ │ ├── _design/ │ │ │ │ ├── filters/ │ │ │ │ │ ├── all_docs.js │ │ │ │ │ ├── all_domains.js │ │ │ │ │ └── domains_inclusive.js │ │ │ │ ├── fulltext/ │ │ │ │ │ └── snapshot_search/ │ │ │ │ │ └── index.js │ │ │ │ └── views/ │ │ │ │ ├── by_status/ │ │ │ │ │ ├── map.js │ │ │ │ │ └── reduce.js │ │ │ │ ├── copied_from_snapshot/ │ │ │ │ │ └── map.js │ │ │ │ ├── deleted_domains/ │ │ │ │ │ ├── map.js │ │ │ │ │ └── reduce.js │ │ │ │ ├── domains/ │ │ │ │ │ ├── map.js │ │ │ │ │ └── reduce.js │ │ │ │ ├── not_snapshots/ │ │ │ │ │ └── map.js │ │ │ │ ├── published_snapshots/ │ │ │ │ │ └── map.js │ │ │ │ └── snapshots/ │ │ │ │ ├── map.js │ │ │ │ └── reduce.js │ │ │ ├── admin.py │ │ │ ├── auth.py │ │ │ ├── calculations.py │ │ │ ├── dbaccessors.py │ │ │ ├── decorators.py │ │ │ ├── deletion.py │ │ │ ├── exceptions.py │ │ │ ├── extension_points.py │ │ │ ├── forms.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── bootstrap_app.py │ │ │ │ ├── calculate_physical_size.py │ │ │ │ ├── delete_domain.py │ │ │ │ ├── disable_toggles_for_deleted_domains.py │ │ │ │ ├── first_superuser.py │ │ │ │ ├── hard_delete_forms_and_cases_in_domain.py │ │ │ │ ├── make_superuser.py │ │ │ │ ├── redirect_url.py │ │ │ │ ├── remove_duplicate_domains.py │ │ │ │ ├── reset_case_search_toggles.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_make_superuser.py │ │ │ │ └── update_case_search_toggles.py │ │ │ ├── middleware.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20171020_1428.py │ │ │ │ ├── 0003_auto_20180525_1551.py │ │ │ │ ├── 0004_domainauditrecordentry.py │ │ │ │ ├── 0005_ga_opt_out.py │ │ │ │ ├── 0006_fix_domain_es_docs.py │ │ │ │ ├── 0007_auto_20200924_1753.py │ │ │ │ ├── 0008_use_livequery.py │ │ │ │ ├── 0009_restrict_mob_access_from_FF.py │ │ │ │ ├── 0010_projectlimit.py │ │ │ │ ├── 0011_alloweducrexpressionsettings.py │ │ │ │ ├── 0012_operatorcalllimitsettings.py │ │ │ │ ├── 0013_accountconfirmationsettings_squashed_0016_alter_smsaccountconfirmationsettings_project_name.py │ │ │ │ ├── 0014_appreleasemodesetting.py │ │ │ │ ├── 0015_delete_projectlimit.py │ │ │ │ ├── 0016_rename_superuserprojectentryrecord_domain_username_domain_supe_domain_c3d32e_idx.py │ │ │ │ ├── 0017_appmanagerdomainsettings.py │ │ │ │ ├── 0018_enable_all_add_ons.py │ │ │ │ ├── 0019_remove_usercase_enabled_field.py │ │ │ │ ├── 0020_delete_transferdomainrequest.py │ │ │ │ ├── 0021_delete_smsaccountconfirmationsettings.py │ │ │ │ ├── __init__.py │ │ │ │ └── sql_templates/ │ │ │ │ └── update_tables1.sql │ │ │ ├── models.py │ │ │ ├── project_access/ │ │ │ │ ├── __init__.py │ │ │ │ ├── middleware.py │ │ │ │ └── models.py │ │ │ ├── shortcuts.py │ │ │ ├── signals.py │ │ │ ├── static/ │ │ │ │ └── domain/ │ │ │ │ ├── js/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── billing_statements.js │ │ │ │ │ │ ├── info_basic.js │ │ │ │ │ │ ├── internal_subscription_management.js │ │ │ │ │ │ └── toggles.js │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── billing_statements.js │ │ │ │ │ │ ├── info_basic.js │ │ │ │ │ │ ├── internal_subscription_management.js │ │ │ │ │ │ └── toggles.js │ │ │ │ │ ├── case_search.js │ │ │ │ │ ├── commtrack_settings.js │ │ │ │ │ ├── confirm_billing_info.js │ │ │ │ │ ├── current_subscription.js │ │ │ │ │ ├── feature_previews.js │ │ │ │ │ ├── internal_calculations.js │ │ │ │ │ ├── internal_settings.js │ │ │ │ │ ├── ip_access_config.js │ │ │ │ │ ├── manage_alerts.js │ │ │ │ │ ├── my_project_settings.js │ │ │ │ │ ├── new_stripe_card_manager.js │ │ │ │ │ ├── select.js │ │ │ │ │ └── update_billing_contact_info.js │ │ │ │ └── json/ │ │ │ │ └── stop_words.yml │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ ├── domain/ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ ├── application_credentials.html │ │ │ │ │ │ ├── case_search.html │ │ │ │ │ │ ├── commtrack_settings.html │ │ │ │ │ │ ├── edit_alert.html │ │ │ │ │ │ ├── feature_previews.html │ │ │ │ │ │ ├── flags_and_privileges.html │ │ │ │ │ │ ├── global_sms_rates.html │ │ │ │ │ │ ├── info_basic.html │ │ │ │ │ │ ├── ip_access_config.html │ │ │ │ │ │ ├── location_fixture.html │ │ │ │ │ │ ├── manage_alerts.html │ │ │ │ │ │ ├── my_project_settings.html │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ │ └── project_limits_table.html │ │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ │ └── project_limits_table.html │ │ │ │ │ │ │ ├── case_search_templates.html │ │ │ │ │ │ │ ├── commtrack_action_table.html │ │ │ │ │ │ │ └── ocs_chatbot_enable_modal.html │ │ │ │ │ │ ├── project_limits.html │ │ │ │ │ │ ├── project_privacy.html │ │ │ │ │ │ ├── recovery_measures_history.html │ │ │ │ │ │ ├── sms_rates.html │ │ │ │ │ │ └── sms_settings.html │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── base_change_plan.html │ │ │ │ │ │ ├── billing_statements.html │ │ │ │ │ │ ├── confirm_plan.html │ │ │ │ │ │ ├── confirm_subscription_renewal.html │ │ │ │ │ │ ├── current_subscription.html │ │ │ │ │ │ ├── data_migration_in_progress.html │ │ │ │ │ │ ├── deactivated_notice.html │ │ │ │ │ │ ├── insufficient_privilege_notification.html │ │ │ │ │ │ ├── internal_subscription_management.html │ │ │ │ │ │ ├── manage_releases_by_location.html │ │ │ │ │ │ ├── renew_plan.html │ │ │ │ │ │ ├── select.html │ │ │ │ │ │ ├── select_plan.html │ │ │ │ │ │ ├── selected_plan_contact.html │ │ │ │ │ │ └── tombstone_management.html │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── base_change_plan.html │ │ │ │ │ │ ├── billing_statements.html │ │ │ │ │ │ ├── confirm_plan.html │ │ │ │ │ │ ├── confirm_subscription_renewal.html │ │ │ │ │ │ ├── current_subscription.html │ │ │ │ │ │ ├── data_migration_in_progress.html │ │ │ │ │ │ ├── deactivated_notice.html │ │ │ │ │ │ ├── insufficient_privilege_notification.html │ │ │ │ │ │ ├── internal_subscription_management.html │ │ │ │ │ │ ├── manage_releases_by_location.html │ │ │ │ │ │ ├── renew_plan.html │ │ │ │ │ │ ├── select.html │ │ │ │ │ │ ├── select_plan.html │ │ │ │ │ │ ├── selected_plan_contact.html │ │ │ │ │ │ └── tombstone_management.html │ │ │ │ │ ├── confirm_billing_info.html │ │ │ │ │ ├── email/ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ └── domain_invite.html │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ └── domain_invite.html │ │ │ │ │ │ ├── domain_invite.txt │ │ │ │ │ │ ├── domain_request_approval.html │ │ │ │ │ │ ├── domain_request_approval.txt │ │ │ │ │ │ ├── invite_confirmation.html │ │ │ │ │ │ ├── invite_confirmation.txt │ │ │ │ │ │ ├── password_reset_confirmation.html │ │ │ │ │ │ ├── password_reset_confirmation.txt │ │ │ │ │ │ ├── self_starter.html │ │ │ │ │ │ ├── self_starter.txt │ │ │ │ │ │ ├── support_handoff.html │ │ │ │ │ │ └── support_handoff.txt │ │ │ │ │ ├── import_app_from_another_server_main.html │ │ │ │ │ ├── internal_calculations.html │ │ │ │ │ ├── internal_settings.html │ │ │ │ │ ├── partials/ │ │ │ │ │ │ ├── app_list.html │ │ │ │ │ │ ├── autopay_terms.html │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── auto_renew_modal.html │ │ │ │ │ │ │ ├── license_explanations.html │ │ │ │ │ │ │ ├── new_stripe_card_template.html │ │ │ │ │ │ │ └── payment_modal.html │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ ├── auto_renew_modal.html │ │ │ │ │ │ │ ├── license_explanations.html │ │ │ │ │ │ │ ├── new_stripe_card_template.html │ │ │ │ │ │ │ ├── payment_modal.html │ │ │ │ │ │ │ └── restrictive_license.html │ │ │ │ │ │ ├── disable_auto_renew.html │ │ │ │ │ │ ├── enable_auto_renew.html │ │ │ │ │ │ ├── how_to_download_app_json.html │ │ │ │ │ │ ├── how_to_import_multimedia.html │ │ │ │ │ │ ├── how_to_start_with_import_app_feature.html │ │ │ │ │ │ ├── new_stripe_card_alpinejs.html │ │ │ │ │ │ ├── payment_methods.html │ │ │ │ │ │ └── select_autopay_method.html │ │ │ │ │ └── update_billing_contact_info.html │ │ │ │ ├── error.html │ │ │ │ └── login_and_password/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── login.html │ │ │ │ │ └── password_change_done.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── login.html │ │ │ │ │ └── password_change_done.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── login_full.html │ │ │ │ │ │ └── server_location_select.html │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── login_full.html │ │ │ │ │ │ └── server_location_select.html │ │ │ │ │ └── password_reset_form_only.html │ │ │ │ ├── password_reset_complete.html │ │ │ │ ├── password_reset_confirm.html │ │ │ │ ├── password_reset_done.html │ │ │ │ ├── password_reset_email.html │ │ │ │ ├── password_reset_form.html │ │ │ │ └── two_factor/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── _wizard_actions.html │ │ │ │ │ └── _wizard_forms.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── _wizard_actions.html │ │ │ │ │ └── _wizard_forms.html │ │ │ │ ├── core/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── backup_tokens.html │ │ │ │ │ │ ├── login.html │ │ │ │ │ │ ├── login_form.html │ │ │ │ │ │ ├── phone_register.html │ │ │ │ │ │ ├── setup.html │ │ │ │ │ │ └── setup_complete.html │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ ├── backup_tokens.html │ │ │ │ │ ├── login.html │ │ │ │ │ ├── login_form.html │ │ │ │ │ ├── otp_required.html │ │ │ │ │ ├── phone_register.html │ │ │ │ │ ├── setup.html │ │ │ │ │ └── setup_complete.html │ │ │ │ └── profile/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── disable.html │ │ │ │ │ └── profile.html │ │ │ │ └── bootstrap5/ │ │ │ │ ├── disable.html │ │ │ │ └── profile.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_api_key_auth.py │ │ │ │ ├── test_auth.py │ │ │ │ ├── test_auth_decorators.py │ │ │ │ ├── test_auth_type.py │ │ │ │ ├── test_dbaccessors.py │ │ │ │ ├── test_delete_domain.py │ │ │ │ ├── test_deletion_models.py │ │ │ │ ├── test_domain_calculated_properties.py │ │ │ │ ├── test_domain_name_generation.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_oauth_superuser_access.py │ │ │ │ ├── test_password_reset.py │ │ │ │ ├── test_password_strength.py │ │ │ │ ├── test_redirect_url.py │ │ │ │ ├── test_remove_duplicate_domains.py │ │ │ │ ├── test_two_factor_check.py │ │ │ │ ├── test_utils.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views/ │ │ │ ├── __init__.py │ │ │ ├── accounting.py │ │ │ ├── base.py │ │ │ ├── feedback.py │ │ │ ├── fixtures.py │ │ │ ├── import_apps.py │ │ │ ├── internal.py │ │ │ ├── releases.py │ │ │ ├── settings.py │ │ │ ├── sms.py │ │ │ └── tombstone.py │ │ ├── domain_migration_flags/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── exceptions.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_migrate_data_from_tzmigration.py │ │ │ │ ├── 0003_add_migration_dates.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ └── test_domain_migration_progress.py │ │ ├── dropbox/ │ │ │ ├── __init__.py │ │ │ ├── decorators.py │ │ │ ├── exceptions.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ └── upload_file_to_dropbox.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── dropbox/ │ │ │ │ └── emails/ │ │ │ │ ├── upload_error.html │ │ │ │ ├── upload_error.txt │ │ │ │ ├── upload_success.html │ │ │ │ └── upload_success.txt │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_dropbox_upload_helper.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── dump_reload/ │ │ │ ├── __init__.py │ │ │ ├── const.py │ │ │ ├── couch/ │ │ │ │ ├── __init__.py │ │ │ │ ├── dump.py │ │ │ │ ├── id_providers.py │ │ │ │ └── load.py │ │ │ ├── exceptions.py │ │ │ ├── interface.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── dump_case_data.py │ │ │ │ ├── dump_domain_data.py │ │ │ │ ├── dump_domain_data_raw.py │ │ │ │ ├── load_domain_data.py │ │ │ │ └── print_domain_stats.py │ │ │ ├── sql/ │ │ │ │ ├── __init__.py │ │ │ │ ├── dump.py │ │ │ │ ├── filters.py │ │ │ │ ├── load.py │ │ │ │ └── serialization.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ └── old-model-names.json │ │ │ │ ├── test_couch_dump_load.py │ │ │ │ ├── test_dump_models.py │ │ │ │ ├── test_serialization.py │ │ │ │ ├── test_slugs.py │ │ │ │ ├── test_sql_data_loader.py │ │ │ │ ├── test_sql_dump_load.py │ │ │ │ └── test_sql_filters.py │ │ │ └── util.py │ │ ├── email/ │ │ │ ├── __init__.py │ │ │ ├── forms.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_emailsettings_return_path_email.py │ │ │ │ ├── 0003_emailsettings_password_cbc.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── email/ │ │ │ │ └── js/ │ │ │ │ └── email_settings.js │ │ │ ├── templates/ │ │ │ │ └── email/ │ │ │ │ └── email_settings.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_email_form.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── enterprise/ │ │ │ ├── __init__.py │ │ │ ├── api/ │ │ │ │ ├── __init__.py │ │ │ │ ├── api.py │ │ │ │ └── resources.py │ │ │ ├── decorators.py │ │ │ ├── dispatcher.py │ │ │ ├── enterprise.py │ │ │ ├── exceptions.py │ │ │ ├── filters.py │ │ │ ├── forms.py │ │ │ ├── interface.py │ │ │ ├── iterators.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ └── report_on_enterprise_domain.py │ │ │ ├── metric_events.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_enterprisepermissions_account_unique.py │ │ │ │ ├── 0003_enterprisepermissions_modify_account.py │ │ │ │ ├── 0004_enterprisemobileworkersettings.py │ │ │ │ └── __init__.py │ │ │ ├── mixins.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── enterprise/ │ │ │ │ └── js/ │ │ │ │ ├── enterprise_settings.js │ │ │ │ └── project_dashboard.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── enterprise/ │ │ │ │ ├── enterprise_permissions.html │ │ │ │ ├── enterprise_settings.html │ │ │ │ ├── manage_mobile_workers.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── date_range_modal.html │ │ │ │ │ ├── enterprise_permissions_table.html │ │ │ │ │ └── project_tile.html │ │ │ │ └── project_dashboard.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── api/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_resources.py │ │ │ │ ├── test_apis.py │ │ │ │ ├── test_decorators.py │ │ │ │ ├── test_enterprise.py │ │ │ │ ├── test_enterprise_mobile_worker_settings.py │ │ │ │ ├── test_enterprise_tasks.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_interface.py │ │ │ │ ├── test_iterators.py │ │ │ │ ├── test_permissions.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_views.py │ │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── es/ │ │ │ ├── README.rst │ │ │ ├── REINDEX_PROCESS.md │ │ │ ├── __init__.py │ │ │ ├── aggregations.py │ │ │ ├── app_config.py │ │ │ ├── apps.py │ │ │ ├── case_search.py │ │ │ ├── case_search_sub.py │ │ │ ├── cases.py │ │ │ ├── client.py │ │ │ ├── const.py │ │ │ ├── domains.py │ │ │ ├── es_query.py │ │ │ ├── exceptions.py │ │ │ ├── fake/ │ │ │ │ ├── __init__.py │ │ │ │ ├── es_query_fake.py │ │ │ │ ├── forms_fake.py │ │ │ │ ├── groups_fake.py │ │ │ │ └── users_fake.py │ │ │ ├── filters.py │ │ │ ├── forms.py │ │ │ ├── groups.py │ │ │ ├── index/ │ │ │ │ ├── __init__.py │ │ │ │ ├── analysis.py │ │ │ │ └── settings.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── elastic_sync_multiplexed.py │ │ │ │ ├── ensure_indices_reindexed.py │ │ │ │ ├── es_version_for_index.py │ │ │ │ ├── make_elastic_migration.py │ │ │ │ ├── resave_failed_forms_and_cases.py │ │ │ │ ├── restore_es_snapshot.py │ │ │ │ ├── verify_reindex.py │ │ │ │ └── wipe_es.py │ │ │ ├── mappings/ │ │ │ │ ├── __init__.py │ │ │ │ ├── app_mapping.py │ │ │ │ ├── case_mapping.py │ │ │ │ ├── case_search_mapping.py │ │ │ │ ├── const.py │ │ │ │ ├── domain_mapping.py │ │ │ │ ├── group_mapping.py │ │ │ │ ├── sms_mapping.py │ │ │ │ ├── tests/ │ │ │ │ │ └── __init__.py │ │ │ │ ├── user_mapping.py │ │ │ │ └── xform_mapping.py │ │ │ ├── migration_operations.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_bootstrap_es_indexes.py │ │ │ │ ├── 0002_add_tombstones.py │ │ │ │ ├── 0003_add_assigned_location_ids.py │ │ │ │ ├── 0004_make_new_indexes.py │ │ │ │ ├── 0005_add_epoch_as_valid_date_to_forms.py │ │ │ │ ├── 0006_verify_es2_indices_reindexed.py │ │ │ │ ├── 0007_init_indices_for_fresh_es_5.py │ │ │ │ ├── 0008_add_doc_id_to_all_mappings.py │ │ │ │ ├── 0009_add_indices_for_reindex_in_es5.py │ │ │ │ ├── 0010_delete_reverted_indices.py │ │ │ │ ├── 0011_add_indices_for_es5_reindex.py │ │ │ │ ├── 0012_add_new_index_for_bha.py │ │ │ │ ├── 0013_add_last_modifed.py │ │ │ │ ├── 0014_enable_slowlogs.py │ │ │ │ ├── 0015_add_user_domain_memberships.py │ │ │ │ ├── 0016_add_new_index_for_cc_perf.py │ │ │ │ ├── 0017_add_is_account_confirmed.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── profiling.py │ │ │ ├── queries.py │ │ │ ├── sms.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── index/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_analysis.py │ │ │ │ │ └── test_settings.py │ │ │ │ ├── test_aggregations.py │ │ │ │ ├── test_app_adapter.py │ │ │ │ ├── test_case_adapter.py │ │ │ │ ├── test_case_search_adapter.py │ │ │ │ ├── test_case_search_es.py │ │ │ │ ├── test_client.py │ │ │ │ ├── test_command_make_elastic_migration.py │ │ │ │ ├── test_domain_adapter.py │ │ │ │ ├── test_elastic_sync_multiplexed_command.py │ │ │ │ ├── test_ensure_indices_reindexed.py │ │ │ │ ├── test_esquery.py │ │ │ │ ├── test_esqueryset.py │ │ │ │ ├── test_filters.py │ │ │ │ ├── test_form_adapter.py │ │ │ │ ├── test_migration_operations.py │ │ │ │ ├── test_queries.py │ │ │ │ ├── test_sms.py │ │ │ │ ├── test_sorting.py │ │ │ │ ├── test_test_utils.py │ │ │ │ ├── test_user_adapter.py │ │ │ │ ├── test_users_es.py │ │ │ │ ├── test_utils.py │ │ │ │ ├── test_verify_reindex.py │ │ │ │ └── utils.py │ │ │ ├── transient_util.py │ │ │ ├── users.py │ │ │ └── utils.py │ │ ├── events/ │ │ │ ├── __init__.py │ │ │ └── migrations/ │ │ │ ├── 0001_add_events_model.py │ │ │ ├── 0002_attendancetrackingconfig.py │ │ │ ├── 0003_event_attendance_taker_ids.py │ │ │ ├── 0004_event_id_case_id.py │ │ │ ├── 0005_rename_alter_event__attendance_taker_ids.py │ │ │ ├── 0006_remove_end_date_constraint.py │ │ │ ├── 0007_alter_event_attendee_list_status.py │ │ │ ├── 0008_alter_event__case_id.py │ │ │ ├── 0009_attendeemodel.py │ │ │ ├── 0010_event_location.py │ │ │ └── __init__.py │ │ ├── experiments/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── experiment.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_enabler.py │ │ │ └── test_experiment.py │ │ ├── export/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── const.py │ │ │ ├── dbaccessors.py │ │ │ ├── det/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── exceptions.py │ │ │ │ └── schema_generator.py │ │ │ ├── esaccessors.py │ │ │ ├── exceptions.py │ │ │ ├── export.py │ │ │ ├── filters.py │ │ │ ├── forms.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── deid_export.py │ │ │ │ ├── delete_exports.py │ │ │ │ ├── download_saved_export.py │ │ │ │ ├── process_skipped_pages.py │ │ │ │ ├── rebuild_export.py │ │ │ │ ├── update_export_with_newest_data.py │ │ │ │ └── upload_saved_export.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_datafile.py │ │ │ │ ├── 0003_emailexportwhendonerequest.py │ │ │ │ ├── 0004_datafile_delete_after.py │ │ │ │ ├── 0005_datafile_blobmeta.py │ │ │ │ ├── 0006_delete_dailysavedexportnotification.py │ │ │ │ ├── 0007_auto_20190906_0149.py │ │ │ │ ├── 0008_auto_20190906_2008.py │ │ │ │ ├── 0009_incrementalexport_incrementalexportcheckpoint.py │ │ │ │ ├── 0010_defaultexportsettings.py │ │ │ │ ├── 0011_defaultexportsettings_usecouchfiletypes.py │ │ │ │ ├── 0012_defaultexportsettings_remove_duplicates_option.py │ │ │ │ ├── 0013_rm_incrementalexport.py │ │ │ │ ├── 0014_deidhash.py │ │ │ │ └── __init__.py │ │ │ ├── models/ │ │ │ │ ├── __init__.py │ │ │ │ ├── deid_export.py │ │ │ │ ├── export_settings.py │ │ │ │ └── new.py │ │ │ ├── multiprocess.py │ │ │ ├── static/ │ │ │ │ └── export/ │ │ │ │ ├── js/ │ │ │ │ │ ├── const.js │ │ │ │ │ ├── create_export.js │ │ │ │ │ ├── customize_export_new.js │ │ │ │ │ ├── datasource_export.js │ │ │ │ │ ├── download_data_files.js │ │ │ │ │ ├── download_export.js │ │ │ │ │ ├── export_list.js │ │ │ │ │ ├── export_list_main.js │ │ │ │ │ ├── models.js │ │ │ │ │ └── utils.js │ │ │ │ └── spec/ │ │ │ │ ├── ExportColumn.spec.js │ │ │ │ ├── ExportInstance.spec.js │ │ │ │ ├── Exports.Utils.spec.js │ │ │ │ ├── data/ │ │ │ │ │ └── export_instances.js │ │ │ │ └── main.js │ │ │ ├── system_properties.py │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── export/ │ │ │ │ ├── commcare_analytics.html │ │ │ │ ├── customize_export_new.html │ │ │ │ ├── datasource_export_view.html │ │ │ │ ├── dialogs/ │ │ │ │ │ ├── bulk_delete_custom_export_dialog.html │ │ │ │ │ ├── delete_custom_export_dialog.html │ │ │ │ │ ├── process_deleted_questions.html │ │ │ │ │ └── process_deprecated_properties.html │ │ │ │ ├── download_data_files.html │ │ │ │ ├── download_export.html │ │ │ │ ├── export_list.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── customize_export_header.html │ │ │ │ │ ├── delete_bulk_notice.html │ │ │ │ │ ├── export_bulk_notice.html │ │ │ │ │ ├── export_download_prepare.html │ │ │ │ │ ├── export_download_progress.html │ │ │ │ │ ├── export_list_controller.html │ │ │ │ │ ├── export_list_create_export_modal.html │ │ │ │ │ ├── feed_filter_modal.html │ │ │ │ │ ├── loading_exports.html │ │ │ │ │ ├── new_customize_export_templates.html │ │ │ │ │ ├── odata_feed_limit_reached_modal.html │ │ │ │ │ └── table.html │ │ │ │ ├── paywall.html │ │ │ │ └── spec/ │ │ │ │ └── mocha.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── app_with_subcases.json │ │ │ │ │ ├── app_with_subcases_form.xml │ │ │ │ │ ├── app_with_subcases_submission.json │ │ │ │ │ ├── basic_application.json │ │ │ │ │ ├── basic_case_application.json │ │ │ │ │ ├── basic_form.xml │ │ │ │ │ ├── basic_form_version2.xml │ │ │ │ │ ├── basic_form_version2_delete.xml │ │ │ │ │ ├── det/ │ │ │ │ │ │ ├── case_export_instance.json │ │ │ │ │ │ ├── form_export_instance.json │ │ │ │ │ │ └── form_export_instance_with_repeat.json │ │ │ │ │ ├── form_with_labels.xml │ │ │ │ │ ├── multiple_choice_form.xml │ │ │ │ │ ├── multiple_choice_form_version2.xml │ │ │ │ │ ├── nested_repeat_form.xml │ │ │ │ │ ├── parent_child_case_application.json │ │ │ │ │ ├── question_schema_no_multi.xml │ │ │ │ │ ├── question_schema_test_app.json │ │ │ │ │ ├── question_schema_update_form.xml │ │ │ │ │ ├── repeat_group_form.xml │ │ │ │ │ ├── repeat_group_form_version2.xml │ │ │ │ │ └── stock_form.xml │ │ │ │ ├── test_add_inferred_export_properties.py │ │ │ │ ├── test_daily_saved_exports.py │ │ │ │ ├── test_dbaccessors.py │ │ │ │ ├── test_deid_export.py │ │ │ │ ├── test_det_schema_generation.py │ │ │ │ ├── test_esaccessors.py │ │ │ │ ├── test_export.py │ │ │ │ ├── test_export_column.py │ │ │ │ ├── test_export_data_schema.py │ │ │ │ ├── test_export_filters.py │ │ │ │ ├── test_export_form_subcases.py │ │ │ │ ├── test_export_forms.py │ │ │ │ ├── test_export_instance.py │ │ │ │ ├── test_export_item.py │ │ │ │ ├── test_export_list_helper.py │ │ │ │ ├── test_export_models_new.py │ │ │ │ ├── test_export_utils.py │ │ │ │ ├── test_export_views.py │ │ │ │ ├── test_get_export_file.py │ │ │ │ ├── test_inferred_schema.py │ │ │ │ ├── test_new.py │ │ │ │ ├── test_sms_export.py │ │ │ │ ├── test_table_configuration.py │ │ │ │ ├── test_views.py │ │ │ │ └── util.py │ │ │ ├── transforms.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views/ │ │ │ ├── __init__.py │ │ │ ├── download.py │ │ │ ├── edit.py │ │ │ ├── list.py │ │ │ ├── new.py │ │ │ └── utils.py │ │ ├── fixtures/ │ │ │ ├── __init__.py │ │ │ ├── apps.py │ │ │ ├── dispatcher.py │ │ │ ├── download.py │ │ │ ├── exceptions.py │ │ │ ├── fixturegenerators.py │ │ │ ├── interface.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_rm_blobdb_domain_fixtures.py │ │ │ │ ├── 0003_rm_blobdb_domain_fixtures.py │ │ │ │ ├── 0004_userlookuptablestatus.py │ │ │ │ ├── 0005_lookuptablemodels.py │ │ │ │ ├── 0005_sqllookuptablemodels.py │ │ │ │ ├── 0006_index_row_id.py │ │ │ │ ├── 0007_db_cascade.py │ │ │ │ ├── 0008_sqllookuptables.py │ │ │ │ ├── 0009_remove_lookuptablerowowner_couch_id.py │ │ │ │ ├── 0010_lookuptable_is_synced.py │ │ │ │ ├── 0011_lookuptable_last_modified.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── resources/ │ │ │ │ ├── __init__.py │ │ │ │ ├── v0_1.py │ │ │ │ └── v0_6.py │ │ │ ├── static/ │ │ │ │ └── fixtures/ │ │ │ │ └── js/ │ │ │ │ ├── lookup-manage.js │ │ │ │ └── view-table.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── fixtures/ │ │ │ │ ├── fixtures_base.html │ │ │ │ ├── manage_tables.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── edit_table_modal.html │ │ │ │ │ ├── fixture_upload_status.html │ │ │ │ │ ├── fixture_upload_status_api.txt │ │ │ │ │ └── modal_edit.html │ │ │ │ ├── upload_complete.html │ │ │ │ ├── upload_complete.txt │ │ │ │ └── view_table.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_download.py │ │ │ │ ├── test_field_names.py │ │ │ │ ├── test_fixture_data.py │ │ │ │ ├── test_location_ownership.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_upload/ │ │ │ │ │ ├── not_excel_file.xlsx │ │ │ │ │ └── ok.xlsx │ │ │ │ ├── test_upload.py │ │ │ │ ├── test_views.py │ │ │ │ └── test_workbook.py │ │ │ ├── upload/ │ │ │ │ ├── __init__.py │ │ │ │ ├── const.py │ │ │ │ ├── definitions.py │ │ │ │ ├── failure_messages.py │ │ │ │ ├── run_upload.py │ │ │ │ ├── validation.py │ │ │ │ └── workbook.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── formplayer_api/ │ │ │ ├── __init__.py │ │ │ ├── clear_user_data.py │ │ │ ├── const.py │ │ │ ├── exceptions.py │ │ │ ├── form_validation.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── clear_formplayer_dbs.py │ │ │ │ └── prime_formplayer_restores.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_drop_old_tables.py │ │ │ │ └── __init__.py │ │ │ ├── smsforms/ │ │ │ │ ├── __init__.py │ │ │ │ ├── api.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── sms.py │ │ │ │ └── tests/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_formplayer_interface.py │ │ │ ├── sync_db.py │ │ │ ├── tasks.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_form_validation.py │ │ │ │ └── test_prime_restore.py │ │ │ └── utils.py │ │ ├── geospatial/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── apps.py │ │ │ ├── const.py │ │ │ ├── dispatchers.py │ │ │ ├── es.py │ │ │ ├── exceptions.py │ │ │ ├── filters.py │ │ │ ├── forms.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── copy_gps_metadata.py │ │ │ │ ├── index_geolocation_case_properties.py │ │ │ │ └── index_utils.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_create_geopolygon.py │ │ │ │ ├── 0002_geoconfig.py │ │ │ │ ├── 0003_auto_20230908_0927.py │ │ │ │ ├── 0004_auto_20230920_0821.py │ │ │ │ ├── 0005_auto_20240202_0807.py │ │ │ │ ├── 0006_geoconfig_max_cases_per_user_and_more.py │ │ │ │ ├── 0007_geoconfig_max_case_distance_and_more.py │ │ │ │ ├── 0008_geoconfig_flag_assigned_cases.py │ │ │ │ ├── 0009_geoconfig_api_key_cbc_encryption.py │ │ │ │ ├── 0010_remove_road_network_algorithm.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── reports.py │ │ │ ├── routing_solvers/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── mapbox_utils.py │ │ │ │ └── pulp.py │ │ │ ├── static/ │ │ │ │ └── geospatial/ │ │ │ │ └── js/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── case_grouping_map.js │ │ │ │ │ ├── case_management.js │ │ │ │ │ ├── geo_config.js │ │ │ │ │ ├── gps_capture.js │ │ │ │ │ └── models.js │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── case_grouping_map.js │ │ │ │ │ ├── case_management.js │ │ │ │ │ ├── geo_config.js │ │ │ │ │ ├── gps_capture.js │ │ │ │ │ └── models.js │ │ │ │ └── utils.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── geospatial/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── base_template.html │ │ │ │ │ ├── case_grouping_map.html │ │ │ │ │ ├── case_grouping_map_base.html │ │ │ │ │ ├── case_management.html │ │ │ │ │ ├── case_management_base.html │ │ │ │ │ ├── gps_capture.html │ │ │ │ │ ├── gps_capture_view.html │ │ │ │ │ └── settings.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── base_template.html │ │ │ │ │ ├── case_grouping_map.html │ │ │ │ │ ├── case_grouping_map_base.html │ │ │ │ │ ├── case_management.html │ │ │ │ │ ├── case_management_base.html │ │ │ │ │ ├── gps_capture.html │ │ │ │ │ ├── gps_capture_view.html │ │ │ │ │ └── settings.html │ │ │ │ └── partials/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── delete_saved_area_modal.html │ │ │ │ │ ├── review_assignment_modal.html │ │ │ │ │ └── saved_polygon_filter.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── delete_saved_area_modal.html │ │ │ │ │ ├── review_assignment_modal.html │ │ │ │ │ └── saved_polygon_filter.html │ │ │ │ └── index_alert.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_copy_gps_metadata.py │ │ │ │ ├── test_es.py │ │ │ │ ├── test_index_geolocation_case_properties.py │ │ │ │ ├── test_mapbox_optimize.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_pulp.py │ │ │ │ ├── test_reports.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_utils.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── groups/ │ │ │ ├── __init__.py │ │ │ ├── _design/ │ │ │ │ └── views/ │ │ │ │ ├── all_groups/ │ │ │ │ │ └── map.js │ │ │ │ ├── by_name/ │ │ │ │ │ └── map.js │ │ │ │ └── by_user/ │ │ │ │ └── map.js │ │ │ ├── dbaccessors.py │ │ │ ├── exceptions.py │ │ │ ├── fields.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── groups/ │ │ │ │ └── js/ │ │ │ │ ├── all_groups.js │ │ │ │ └── group_members.js │ │ │ ├── templates/ │ │ │ │ └── groups/ │ │ │ │ ├── all_groups.html │ │ │ │ ├── group_members.html │ │ │ │ └── partials/ │ │ │ │ ├── case_sharing_upgrade_notice.html │ │ │ │ └── edit_group_disabled_case_sharing.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_groups.py │ │ │ │ ├── test_models.py │ │ │ │ └── test_utils.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── hqadmin/ │ │ │ ├── __init__.py │ │ │ ├── _design/ │ │ │ │ └── filters/ │ │ │ │ ├── domains_and_doc_types.js │ │ │ │ └── not_case_form.js │ │ │ ├── admin.py │ │ │ ├── app_config.py │ │ │ ├── corrupt_couch.py │ │ │ ├── escheck.py │ │ │ ├── forms.py │ │ │ ├── history.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cchq_prbac_bootstrap.py │ │ │ │ ├── cchq_prbac_grandfather_privs.py │ │ │ │ ├── cchq_prbac_revoke_privs.py │ │ │ │ ├── check_case_index_ids.py │ │ │ │ ├── check_services.py │ │ │ │ ├── clean_2fa_sessions.py │ │ │ │ ├── clear_supervisor_confs.py │ │ │ │ ├── corrupt_couch.py │ │ │ │ ├── corrupt_couch_nodes.py │ │ │ │ ├── delete_old_couch_views_from_disk.py │ │ │ │ ├── delete_related_cases.py │ │ │ │ ├── deploy_in_progress.py │ │ │ │ ├── export_domain_forms_raw.py │ │ │ │ ├── fetch_reconciliation_records.py │ │ │ │ ├── fix_checkpoint_after_rewind.py │ │ │ │ ├── fix_checkpoints_from_date.py │ │ │ │ ├── fix_checkpoints_from_file.py │ │ │ │ ├── force_web_user_password_reset.py │ │ │ │ ├── get_download_url.py │ │ │ │ ├── import_domain_forms_raw.py │ │ │ │ ├── kill_stale_celery_workers.py │ │ │ │ ├── mail_admins.py │ │ │ │ ├── preindex_everything.py │ │ │ │ ├── prune_couch_views.py │ │ │ │ ├── prune_elastic_indices.py │ │ │ │ ├── recent_changes.py │ │ │ │ ├── record_deploy_success.py │ │ │ │ ├── republish_doc_changes.py │ │ │ │ ├── send_email.py │ │ │ │ ├── shutdown_celery_worker_by_hostname.py │ │ │ │ ├── stale_data_in_es.py │ │ │ │ ├── static_analysis.py │ │ │ │ ├── update_django_locales.py │ │ │ │ ├── update_site_setup.py │ │ │ │ └── verify_ssl_connections.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_vcmmigrationaudit.py │ │ │ │ ├── 0003_auto_20160715_1543.py │ │ │ │ ├── 0004_auto_20160715_1547.py │ │ │ │ ├── 0005_auto_20160715_1612.py │ │ │ │ ├── 0006_esrestorepillowcheckpoints.py │ │ │ │ ├── 0007_esrestorepillowcheckpoint_datefield.py │ │ │ │ ├── 0008_delete_vcmmigration.py │ │ │ │ ├── 0009_auto_20170315_1322.py │ │ │ │ ├── 0010_sqlhqdeploy.py │ │ │ │ ├── 0011_alter_hqdeploy_environment.py │ │ │ │ ├── 0012_alter_hqdeploy_diffurl.py │ │ │ │ ├── 0013_populate_sqlhqdeploy.py │ │ │ │ ├── 0014_remove_sqlhqdeploy_couch_id.py │ │ │ │ ├── 0015_rename_sqlhqdeploy.py │ │ │ │ ├── 0016_hqdeploy_ordering.py │ │ │ │ ├── 0017_hqdeploy_commit.py │ │ │ │ ├── 0018_back_populate_deploy_commit.py │ │ │ │ ├── 0019_celery_taskmeta_sequence.py │ │ │ │ ├── 0020_celery_results_sequence.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── pillow_settings.py │ │ │ ├── reporting/ │ │ │ │ └── __init__.py │ │ │ ├── reports.py │ │ │ ├── service_checks.py │ │ │ ├── signals.py │ │ │ ├── static/ │ │ │ │ └── hqadmin/ │ │ │ │ └── js/ │ │ │ │ ├── admin_restore.js │ │ │ │ ├── app_build_timings.js │ │ │ │ ├── mass_email.js │ │ │ │ ├── raw_doc.js │ │ │ │ ├── superuser_management.js │ │ │ │ └── system_info.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── hqadmin/ │ │ │ │ ├── admin_restore.html │ │ │ │ ├── app_build_timings.html │ │ │ │ ├── branches_on_staging.html │ │ │ │ ├── call_center_ucr_check.html │ │ │ │ ├── disable_two_factor.html │ │ │ │ ├── disable_user.html │ │ │ │ ├── doc_in_es.html │ │ │ │ ├── email/ │ │ │ │ │ ├── account_disabled_email.html │ │ │ │ │ ├── error_email.html │ │ │ │ │ ├── superuser_staff_email.html │ │ │ │ │ └── two_factor_reset_email.html │ │ │ │ ├── email_status.html │ │ │ │ ├── gir_downloader.html │ │ │ │ ├── global_thresholds.html │ │ │ │ ├── hqadmin_base_filters.html │ │ │ │ ├── malt_downloader.html │ │ │ │ ├── mass_email.html │ │ │ │ ├── messaging_case_updates.html │ │ │ │ ├── offboarding_list.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── commit_table.html │ │ │ │ │ ├── commit_tr.html │ │ │ │ │ ├── deploy_history.html │ │ │ │ │ ├── pillow-operation-modal.html │ │ │ │ │ ├── project_snapshot.html │ │ │ │ │ └── timing_data_table.html │ │ │ │ ├── raw_doc.html │ │ │ │ ├── superuser_management.html │ │ │ │ ├── system_info.html │ │ │ │ ├── user_audit_report.html │ │ │ │ └── web_user_lookup.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ └── restore.xml │ │ │ │ ├── test_corrupt_couch.py │ │ │ │ ├── test_prbac.py │ │ │ │ ├── test_raw_doc.py │ │ │ │ ├── test_reports.py │ │ │ │ ├── test_service_checks.py │ │ │ │ ├── test_stale_data_in_es.py │ │ │ │ ├── test_user_audit_report.py │ │ │ │ ├── test_utils.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views/ │ │ │ ├── __init__.py │ │ │ ├── data.py │ │ │ ├── operations.py │ │ │ ├── reports.py │ │ │ ├── system.py │ │ │ ├── users.py │ │ │ └── utils.py │ │ ├── hqcase/ │ │ │ ├── __init__.py │ │ │ ├── analytics.py │ │ │ ├── api/ │ │ │ │ ├── core.py │ │ │ │ ├── get_bulk.py │ │ │ │ ├── get_list.py │ │ │ │ └── updates.py │ │ │ ├── bulk.py │ │ │ ├── case_helper.py │ │ │ ├── constants.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── initialize_es_indices.py │ │ │ │ ├── ptop_preindex.py │ │ │ │ ├── ptop_reindexer_v2.py │ │ │ │ ├── reindex_sql_forms_in_domain.py │ │ │ │ ├── reprocess_form_case_es_deletes.py │ │ │ │ └── reset_case_name.py │ │ │ ├── static/ │ │ │ │ └── hqcase/ │ │ │ │ └── js/ │ │ │ │ └── explode_cases.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── hqcase/ │ │ │ │ ├── explode_cases.html │ │ │ │ └── xml/ │ │ │ │ └── case_block.xml │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_api_updates.py │ │ │ │ ├── test_bugs.py │ │ │ │ ├── test_bulk.py │ │ │ │ ├── test_case_api_bulk_get.py │ │ │ │ ├── test_case_api_get.py │ │ │ │ ├── test_case_api_permissions.py │ │ │ │ ├── test_case_api_updates.py │ │ │ │ ├── test_case_copier.py │ │ │ │ ├── test_case_helper.py │ │ │ │ ├── test_case_list_api.py │ │ │ │ ├── test_case_sharing.py │ │ │ │ ├── test_case_update_api.py │ │ │ │ ├── test_dbaccessors.py │ │ │ │ ├── test_explode_cases.py │ │ │ │ ├── test_external_id_url_encoding.py │ │ │ │ ├── test_loadtest_users.py │ │ │ │ ├── test_object_cache.py │ │ │ │ ├── test_serialization.py │ │ │ │ └── test_utils.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── hqmedia/ │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── _design/ │ │ │ │ ├── fulltext/ │ │ │ │ │ ├── audio_search/ │ │ │ │ │ │ └── index.js │ │ │ │ │ └── image_search/ │ │ │ │ │ └── index.js │ │ │ │ └── views/ │ │ │ │ ├── by_domain/ │ │ │ │ │ └── map.js │ │ │ │ └── by_hash/ │ │ │ │ └── map.js │ │ │ ├── cache.py │ │ │ ├── controller.py │ │ │ ├── exceptions.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ └── __init__.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── hqmedia/ │ │ │ │ └── js/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── bulk_upload.js │ │ │ │ │ ├── media_reference_models.js │ │ │ │ │ ├── references_main.js │ │ │ │ │ ├── translations_coverage.js │ │ │ │ │ └── uploaders.js │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── bulk_upload.js │ │ │ │ │ ├── media_reference_models.js │ │ │ │ │ ├── references_main.js │ │ │ │ │ ├── translations_coverage.js │ │ │ │ │ └── uploaders.js │ │ │ │ └── manage_paths_main.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── hqmedia/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── audio_translator.html │ │ │ │ │ ├── bulk_upload.html │ │ │ │ │ ├── bulk_upload_status.html │ │ │ │ │ ├── manage_paths.html │ │ │ │ │ ├── references.html │ │ │ │ │ ├── translations_coverage.html │ │ │ │ │ └── uploader_base.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── audio_translator.html │ │ │ │ │ ├── bulk_upload.html │ │ │ │ │ ├── bulk_upload_status.html │ │ │ │ │ ├── manage_paths.html │ │ │ │ │ ├── references.html │ │ │ │ │ ├── translations_coverage.html │ │ │ │ │ └── uploader_base.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── bulk_upload.html │ │ │ │ │ │ ├── bulk_upload_status.html │ │ │ │ │ │ ├── manage_paths.html │ │ │ │ │ │ ├── multimedia_uploader.html │ │ │ │ │ │ ├── multimedia_zip_notice.html │ │ │ │ │ │ └── reference_table.html │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ ├── bulk_upload.html │ │ │ │ │ ├── bulk_upload_status.html │ │ │ │ │ ├── manage_paths.html │ │ │ │ │ ├── multimedia_uploader.html │ │ │ │ │ ├── multimedia_zip_notice.html │ │ │ │ │ └── reference_table.html │ │ │ │ └── uploader/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── preview_audio_single.html │ │ │ │ │ ├── preview_image_single.html │ │ │ │ │ ├── preview_video_single.html │ │ │ │ │ └── queue_single.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── preview_audio_single.html │ │ │ │ │ ├── preview_image_single.html │ │ │ │ │ ├── preview_video_single.html │ │ │ │ │ └── queue_single.html │ │ │ │ └── errors.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ └── manage-multimedia.json │ │ │ │ ├── test_audio_translator_files.py │ │ │ │ ├── test_manage_paths.py │ │ │ │ ├── test_pillow_library_usage.py │ │ │ │ └── test_utils.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ ├── view_helpers.py │ │ │ └── views.py │ │ ├── hqwebapp/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── async_handler.py │ │ │ ├── context.py │ │ │ ├── crispy.py │ │ │ ├── decorators.py │ │ │ ├── doc_info.py │ │ │ ├── doc_lookup.py │ │ │ ├── docs/ │ │ │ │ └── chat_widget_translations.md │ │ │ ├── encoders.py │ │ │ ├── exceptions.py │ │ │ ├── fields.py │ │ │ ├── forms.py │ │ │ ├── login_handlers.py │ │ │ ├── login_utils.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── build_bootstrap5_diffs.py │ │ │ │ ├── complete_bootstrap5_migration.py │ │ │ │ ├── complete_bootstrap5_report.py │ │ │ │ ├── copy_required_static_files.py │ │ │ │ ├── fix_less_imports_collectstatic.py │ │ │ │ ├── generate_webpack_settings.py │ │ │ │ ├── generate_widget_translations.py │ │ │ │ ├── list_waf_allow_patterns.py │ │ │ │ ├── migrate_app_to_bootstrap5.py │ │ │ │ ├── resource_static.py │ │ │ │ ├── show_invalid_bootstrap3_files.py │ │ │ │ └── update_manifest.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20171121_1803.py │ │ │ │ ├── 0003_maintenancealert_domains.py │ │ │ │ ├── 0004_apikeysettings.py │ │ │ │ ├── 0005_delete_apikeysettings.py │ │ │ │ ├── 0006_create_user_access_log.py │ │ │ │ ├── 0007_user_access_agent.py │ │ │ │ ├── 0008_hqoauthapplication.py │ │ │ │ ├── 0009_truncate_authtoken_table.py │ │ │ │ ├── 0010_maintenancealert_scheduling.py │ │ │ │ ├── 0011_add_new_columns_and_rename_model.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── precompilers.py │ │ │ ├── session_details_endpoint/ │ │ │ │ ├── __init__.py │ │ │ │ ├── tests.py │ │ │ │ └── views.py │ │ │ ├── signals.py │ │ │ ├── static/ │ │ │ │ ├── accounting/ │ │ │ │ │ ├── less/ │ │ │ │ │ │ ├── pricing-main.less │ │ │ │ │ │ └── pricing.less │ │ │ │ │ └── scss/ │ │ │ │ │ ├── pricing-main.scss │ │ │ │ │ └── pricing.scss │ │ │ │ ├── app_manager/ │ │ │ │ │ ├── less/ │ │ │ │ │ │ ├── app_manager-main.less │ │ │ │ │ │ ├── app_manager.less │ │ │ │ │ │ ├── case_tile_preview.less │ │ │ │ │ │ ├── content.less │ │ │ │ │ │ ├── corehq_overrides.less │ │ │ │ │ │ ├── deploy.less │ │ │ │ │ │ ├── diff.less │ │ │ │ │ │ ├── font/ │ │ │ │ │ │ │ ├── WorkflowFont-Regular.otf │ │ │ │ │ │ │ └── WorkflowFont.glyphs │ │ │ │ │ │ ├── font-workflow/ │ │ │ │ │ │ │ ├── core.less │ │ │ │ │ │ │ ├── icons.less │ │ │ │ │ │ │ ├── path.less │ │ │ │ │ │ │ └── variables.less │ │ │ │ │ │ ├── font-workflow.less │ │ │ │ │ │ ├── form_editing.less │ │ │ │ │ │ ├── navigation.less │ │ │ │ │ │ ├── new_module_modal.less │ │ │ │ │ │ ├── panel.less │ │ │ │ │ │ ├── popover.less │ │ │ │ │ │ ├── preview_app-main.less │ │ │ │ │ │ ├── preview_app.less │ │ │ │ │ │ ├── savebtn.less │ │ │ │ │ │ ├── summary-main.less │ │ │ │ │ │ ├── summary.less │ │ │ │ │ │ ├── table.less │ │ │ │ │ │ ├── tabs.less │ │ │ │ │ │ └── variables.less │ │ │ │ │ └── scss/ │ │ │ │ │ ├── app_manager-main.scss │ │ │ │ │ ├── app_manager.scss │ │ │ │ │ ├── font/ │ │ │ │ │ │ ├── WorkflowFont-Regular.otf │ │ │ │ │ │ └── WorkflowFont.glyphs │ │ │ │ │ ├── font-workflow/ │ │ │ │ │ │ ├── core.scss │ │ │ │ │ │ ├── icons.scss │ │ │ │ │ │ ├── path.scss │ │ │ │ │ │ └── variables.scss │ │ │ │ │ ├── font-workflow.scss │ │ │ │ │ ├── includes/ │ │ │ │ │ │ ├── _case_tile_preview.scss │ │ │ │ │ │ ├── _content.scss │ │ │ │ │ │ ├── _corehq_overrides.scss │ │ │ │ │ │ ├── _deploy.scss │ │ │ │ │ │ ├── _diff.scss │ │ │ │ │ │ ├── _form_editing.scss │ │ │ │ │ │ ├── _navigation.scss │ │ │ │ │ │ ├── _new_module_modal.scss │ │ │ │ │ │ ├── _panel.scss │ │ │ │ │ │ ├── _popover.scss │ │ │ │ │ │ ├── _savebtn.scss │ │ │ │ │ │ ├── _table.scss │ │ │ │ │ │ └── _variables.scss │ │ │ │ │ ├── preview_app-main.scss │ │ │ │ │ ├── preview_app.scss │ │ │ │ │ ├── summary-main.scss │ │ │ │ │ └── summary.scss │ │ │ │ ├── case_importer/ │ │ │ │ │ └── less/ │ │ │ │ │ └── case_importer.less │ │ │ │ ├── cloudcare/ │ │ │ │ │ └── scss/ │ │ │ │ │ ├── cloudcare-variables.scss │ │ │ │ │ ├── corehq_overrides.scss │ │ │ │ │ ├── debugger/ │ │ │ │ │ │ └── debugger.scss │ │ │ │ │ ├── formplayer-common/ │ │ │ │ │ │ ├── address.scss │ │ │ │ │ │ ├── appicon.scss │ │ │ │ │ │ ├── case.scss │ │ │ │ │ │ ├── config.scss │ │ │ │ │ │ ├── form.scss │ │ │ │ │ │ ├── formnav.scss │ │ │ │ │ │ ├── grid.scss │ │ │ │ │ │ ├── markdown-table.scss │ │ │ │ │ │ ├── mixins.scss │ │ │ │ │ │ ├── module.scss │ │ │ │ │ │ ├── navigation.scss │ │ │ │ │ │ ├── notifications.scss │ │ │ │ │ │ ├── paginate.scss │ │ │ │ │ │ ├── query.scss │ │ │ │ │ │ ├── request.scss │ │ │ │ │ │ ├── version.scss │ │ │ │ │ │ └── webforms.scss │ │ │ │ │ ├── formplayer-common-main.scss │ │ │ │ │ ├── formplayer-common.scss │ │ │ │ │ ├── formplayer-webapp/ │ │ │ │ │ │ ├── breadcrumbs.scss │ │ │ │ │ │ ├── case-tile.scss │ │ │ │ │ │ ├── content.scss │ │ │ │ │ │ ├── form.scss │ │ │ │ │ │ ├── formnav.scss │ │ │ │ │ │ ├── leaflet.scss │ │ │ │ │ │ ├── menu.scss │ │ │ │ │ │ ├── module.scss │ │ │ │ │ │ ├── navbar.scss │ │ │ │ │ │ ├── print-general.scss │ │ │ │ │ │ ├── query.scss │ │ │ │ │ │ └── version.scss │ │ │ │ │ ├── formplayer-webapp-main.scss │ │ │ │ │ └── formplayer-webapp.scss │ │ │ │ ├── dashboard/ │ │ │ │ │ └── scss/ │ │ │ │ │ ├── dashboard-main.scss │ │ │ │ │ └── dashboard.scss │ │ │ │ ├── data_dictionary/ │ │ │ │ │ └── less/ │ │ │ │ │ └── data_dictionary.less │ │ │ │ ├── hqwebapp/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── proptable.css │ │ │ │ │ │ └── splits.css │ │ │ │ │ ├── font/ │ │ │ │ │ │ ├── CommCare HQ Font.json │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── style.scss │ │ │ │ │ │ └── variables.scss │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── 500.js │ │ │ │ │ │ ├── alpinejs/ │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ └── wiggle_button.js │ │ │ │ │ │ │ ├── directives/ │ │ │ │ │ │ │ │ ├── datepicker.js │ │ │ │ │ │ │ │ ├── htmx_sortable.js │ │ │ │ │ │ │ │ ├── report_select2.js │ │ │ │ │ │ │ │ ├── select2.js │ │ │ │ │ │ │ │ └── tooltip.js │ │ │ │ │ │ │ └── stores/ │ │ │ │ │ │ │ └── gtx.js │ │ │ │ │ │ ├── assert_properties.js │ │ │ │ │ │ ├── atwho.js │ │ │ │ │ │ ├── base.js │ │ │ │ │ │ ├── base_ace.js │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── alert_user.js │ │ │ │ │ │ │ ├── base_main.js │ │ │ │ │ │ │ ├── commcarehq.js │ │ │ │ │ │ │ ├── common.js │ │ │ │ │ │ │ ├── crud_paginated_list.js │ │ │ │ │ │ │ ├── crud_paginated_list_init.js │ │ │ │ │ │ │ ├── downgrade_modal.js │ │ │ │ │ │ │ ├── email-request.js │ │ │ │ │ │ │ ├── hq.helpers.js │ │ │ │ │ │ │ ├── inactivity.js │ │ │ │ │ │ │ ├── knockout_bindings.ko.js │ │ │ │ │ │ │ ├── main.js │ │ │ │ │ │ │ ├── prepaid_modal.js │ │ │ │ │ │ │ ├── sticky_tabs.js │ │ │ │ │ │ │ ├── validators.ko.js │ │ │ │ │ │ │ └── widgets.js │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ ├── alert_user.js │ │ │ │ │ │ │ ├── base_main.js │ │ │ │ │ │ │ ├── commcarehq.js │ │ │ │ │ │ │ ├── common.js │ │ │ │ │ │ │ ├── crud_paginated_list.js │ │ │ │ │ │ │ ├── crud_paginated_list_init.js │ │ │ │ │ │ │ ├── downgrade_modal.js │ │ │ │ │ │ │ ├── email-request.js │ │ │ │ │ │ │ ├── hq.helpers.js │ │ │ │ │ │ │ ├── inactivity.js │ │ │ │ │ │ │ ├── knockout_bindings.ko.js │ │ │ │ │ │ │ ├── main.js │ │ │ │ │ │ │ ├── prepaid_modal.js │ │ │ │ │ │ │ ├── sticky_tabs.js │ │ │ │ │ │ │ ├── validators.ko.js │ │ │ │ │ │ │ └── widgets.js │ │ │ │ │ │ ├── bulk_upload_file.js │ │ │ │ │ │ ├── captcha.js │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ │ └── feedback.js │ │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ │ └── feedback.js │ │ │ │ │ │ │ ├── inline_edit.js │ │ │ │ │ │ │ ├── pagination.js │ │ │ │ │ │ │ ├── quill.css │ │ │ │ │ │ │ ├── rich_text_knockout_bindings.js │ │ │ │ │ │ │ ├── search_box.js │ │ │ │ │ │ │ └── select_toggle.js │ │ │ │ │ │ ├── components.ko.js │ │ │ │ │ │ ├── constants.js │ │ │ │ │ │ ├── daterangepicker.config.js │ │ │ │ │ │ ├── hq_extensions.jquery.js │ │ │ │ │ │ ├── htmx_and_alpine.js │ │ │ │ │ │ ├── htmx_base.js │ │ │ │ │ │ ├── htmx_utils/ │ │ │ │ │ │ │ ├── csrf_token.js │ │ │ │ │ │ │ ├── errors.js │ │ │ │ │ │ │ ├── hq_hx_action.js │ │ │ │ │ │ │ ├── hq_hx_loading.js │ │ │ │ │ │ │ ├── hq_hx_refresh.js │ │ │ │ │ │ │ ├── hq_hx_select_all.js │ │ │ │ │ │ │ ├── htmx_gtx.js │ │ │ │ │ │ │ └── retry_request.js │ │ │ │ │ │ ├── initial_page_data.js │ │ │ │ │ │ ├── key-value-mapping.js │ │ │ │ │ │ ├── knockout_subscribables.ko.js │ │ │ │ │ │ ├── layout.js │ │ │ │ │ │ ├── maintenance_alerts.js │ │ │ │ │ │ ├── multiselect_utils.js │ │ │ │ │ │ ├── password_validators.ko.js │ │ │ │ │ │ ├── privileges.js │ │ │ │ │ │ ├── select2_handler.js │ │ │ │ │ │ ├── select2_knockout_bindings.ko.js │ │ │ │ │ │ ├── select_2_ajax_widget.js │ │ │ │ │ │ ├── soil.js │ │ │ │ │ │ ├── sso_inactivity.js │ │ │ │ │ │ ├── tempus_dominus.js │ │ │ │ │ │ ├── toggles.js │ │ │ │ │ │ ├── ui_elements/ │ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ │ ├── ui-element-checkbox.js │ │ │ │ │ │ │ │ ├── ui-element-input-map.js │ │ │ │ │ │ │ │ ├── ui-element-input.js │ │ │ │ │ │ │ │ ├── ui-element-key-val-list.js │ │ │ │ │ │ │ │ ├── ui-element-key-val-mapping.js │ │ │ │ │ │ │ │ └── ui-element-select.js │ │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ │ ├── ui-element-checkbox.js │ │ │ │ │ │ │ │ ├── ui-element-input-map.js │ │ │ │ │ │ │ │ ├── ui-element-input.js │ │ │ │ │ │ │ │ ├── ui-element-key-val-list.js │ │ │ │ │ │ │ │ ├── ui-element-key-val-mapping.js │ │ │ │ │ │ │ │ └── ui-element-select.js │ │ │ │ │ │ │ └── ui-element-langcode-button.js │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ └── email.js │ │ │ │ │ ├── less/ │ │ │ │ │ │ ├── .gitignore │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── _hq/ │ │ │ │ │ │ │ ├── ace_cle.less │ │ │ │ │ │ │ ├── alerts.less │ │ │ │ │ │ │ ├── backgrounds.less │ │ │ │ │ │ │ ├── bootstrap5-temp.less │ │ │ │ │ │ │ ├── breadcrumbs.less │ │ │ │ │ │ │ ├── buttons.less │ │ │ │ │ │ │ ├── datagrid.less │ │ │ │ │ │ │ ├── datatables.less │ │ │ │ │ │ │ ├── date_range_picker.less │ │ │ │ │ │ │ ├── datetimepicker.less │ │ │ │ │ │ │ ├── dropdowns.less │ │ │ │ │ │ │ ├── facet.less │ │ │ │ │ │ │ ├── feedback.less │ │ │ │ │ │ │ ├── flag_icons.less │ │ │ │ │ │ │ ├── form_steps.less │ │ │ │ │ │ │ ├── forms.less │ │ │ │ │ │ │ ├── helpbubble.less │ │ │ │ │ │ │ ├── hubspot.less │ │ │ │ │ │ │ ├── icons.less │ │ │ │ │ │ │ ├── includes/ │ │ │ │ │ │ │ │ ├── extensions.less │ │ │ │ │ │ │ │ ├── mixins.less │ │ │ │ │ │ │ │ └── variables.less │ │ │ │ │ │ │ ├── inline_edit.less │ │ │ │ │ │ │ ├── label.less │ │ │ │ │ │ │ ├── layouts.less │ │ │ │ │ │ │ ├── list.less │ │ │ │ │ │ │ ├── mapbox.less │ │ │ │ │ │ │ ├── modals.less │ │ │ │ │ │ │ ├── navbar.less │ │ │ │ │ │ │ ├── navs.less │ │ │ │ │ │ │ ├── notifications.less │ │ │ │ │ │ │ ├── ocs_widget.less │ │ │ │ │ │ │ ├── pagination.less │ │ │ │ │ │ │ ├── panels.less │ │ │ │ │ │ │ ├── plan_notice.less │ │ │ │ │ │ │ ├── popovers.less │ │ │ │ │ │ │ ├── radio_select.less │ │ │ │ │ │ │ ├── readable_forms.less │ │ │ │ │ │ │ ├── report.less │ │ │ │ │ │ │ ├── select2s.less │ │ │ │ │ │ │ ├── svg.less │ │ │ │ │ │ │ ├── tables.less │ │ │ │ │ │ │ ├── tabs.less │ │ │ │ │ │ │ ├── typography.less │ │ │ │ │ │ │ └── utils.less │ │ │ │ │ │ ├── b5-compatibility.less │ │ │ │ │ │ ├── bootstrap.less │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ └── multiselect/ │ │ │ │ │ │ │ └── multiselect.less │ │ │ │ │ │ ├── docs-style-imports.less │ │ │ │ │ │ ├── docs-style.less │ │ │ │ │ │ ├── mobile/ │ │ │ │ │ │ │ └── c2/ │ │ │ │ │ │ │ ├── footer.less │ │ │ │ │ │ │ ├── navbar.less │ │ │ │ │ │ │ ├── reset.less │ │ │ │ │ │ │ ├── tables.less │ │ │ │ │ │ │ ├── type.less │ │ │ │ │ │ │ └── variables.less │ │ │ │ │ │ ├── style-imports.less │ │ │ │ │ │ ├── style.less │ │ │ │ │ │ └── styleguide/ │ │ │ │ │ │ └── palette.less │ │ │ │ │ ├── scss/ │ │ │ │ │ │ ├── commcarehq/ │ │ │ │ │ │ │ ├── _ace_cle.scss │ │ │ │ │ │ │ ├── _alert.scss │ │ │ │ │ │ │ ├── _animations.scss │ │ │ │ │ │ │ ├── _backgrounds.scss │ │ │ │ │ │ │ ├── _breadcrumb.scss │ │ │ │ │ │ │ ├── _buttons.scss │ │ │ │ │ │ │ ├── _cards.scss │ │ │ │ │ │ │ ├── _containers.scss │ │ │ │ │ │ │ ├── _datagrid.scss │ │ │ │ │ │ │ ├── _datatables.scss │ │ │ │ │ │ │ ├── _date_range_picker.scss │ │ │ │ │ │ │ ├── _datetimepicker.scss │ │ │ │ │ │ │ ├── _dropdown.scss │ │ │ │ │ │ │ ├── _facet.scss │ │ │ │ │ │ │ ├── _feedback.scss │ │ │ │ │ │ │ ├── _flag_icons.scss │ │ │ │ │ │ │ ├── _form_steps.scss │ │ │ │ │ │ │ ├── _forms.scss │ │ │ │ │ │ │ ├── _helpbubble.scss │ │ │ │ │ │ │ ├── _htmx.scss │ │ │ │ │ │ │ ├── _hubspot.scss │ │ │ │ │ │ │ ├── _icons.scss │ │ │ │ │ │ │ ├── _inline_edit.scss │ │ │ │ │ │ │ ├── _label.scss │ │ │ │ │ │ │ ├── _layouts.scss │ │ │ │ │ │ │ ├── _list.scss │ │ │ │ │ │ │ ├── _mapbox.scss │ │ │ │ │ │ │ ├── _mixins.scss │ │ │ │ │ │ │ ├── _modal.scss │ │ │ │ │ │ │ ├── _nav.scss │ │ │ │ │ │ │ ├── _navbar.scss │ │ │ │ │ │ │ ├── _notifications.scss │ │ │ │ │ │ │ ├── _ocs_widget.scss │ │ │ │ │ │ │ ├── _pagination.scss │ │ │ │ │ │ │ ├── _plan_notice.scss │ │ │ │ │ │ │ ├── _popover.scss │ │ │ │ │ │ │ ├── _print.scss │ │ │ │ │ │ │ ├── _radio_select.scss │ │ │ │ │ │ │ ├── _readable_forms.scss │ │ │ │ │ │ │ ├── _report.scss │ │ │ │ │ │ │ ├── _select2.scss │ │ │ │ │ │ │ ├── _svg.scss │ │ │ │ │ │ │ ├── _tables.scss │ │ │ │ │ │ │ ├── _tabs.scss │ │ │ │ │ │ │ ├── _type.scss │ │ │ │ │ │ │ ├── _utils.scss │ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ │ └── _variables_bootstrap3.scss │ │ │ │ │ │ ├── commcarehq.scss │ │ │ │ │ │ ├── data_cleaning.scss │ │ │ │ │ │ └── styleguide.scss │ │ │ │ │ └── spec/ │ │ │ │ │ ├── assert_properties_spec.js │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── inactivity_spec.js │ │ │ │ │ │ ├── main.js │ │ │ │ │ │ └── widgets_spec.js │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── inactivity_spec.js │ │ │ │ │ │ ├── main.js │ │ │ │ │ │ └── widgets_spec.js │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── main.js │ │ │ │ │ │ └── rich_text_spec.js │ │ │ │ │ ├── email_validator_spec.js │ │ │ │ │ └── urllib_spec.js │ │ │ │ ├── preview_app/ │ │ │ │ │ └── scss/ │ │ │ │ │ ├── preview_app/ │ │ │ │ │ │ ├── appicon.scss │ │ │ │ │ │ ├── breadcrumbs.scss │ │ │ │ │ │ ├── case-tile.scss │ │ │ │ │ │ ├── datepicker.scss │ │ │ │ │ │ ├── debugger.scss │ │ │ │ │ │ ├── form.scss │ │ │ │ │ │ ├── formnav.scss │ │ │ │ │ │ ├── grid.scss │ │ │ │ │ │ ├── module.scss │ │ │ │ │ │ ├── navigation.scss │ │ │ │ │ │ ├── notifications.scss │ │ │ │ │ │ ├── scrollable.scss │ │ │ │ │ │ └── variables.scss │ │ │ │ │ ├── preview_app-main.scss │ │ │ │ │ └── preview_app.scss │ │ │ │ ├── registration/ │ │ │ │ │ ├── less/ │ │ │ │ │ │ ├── register-domain.less │ │ │ │ │ │ ├── registration-main.less │ │ │ │ │ │ └── registration.less │ │ │ │ │ └── scss/ │ │ │ │ │ ├── register-domain.scss │ │ │ │ │ ├── registration-main.scss │ │ │ │ │ └── registration.scss │ │ │ │ ├── registry/ │ │ │ │ │ └── scss/ │ │ │ │ │ ├── light_color_scheme.scss │ │ │ │ │ └── registry.scss │ │ │ │ └── reports/ │ │ │ │ ├── less/ │ │ │ │ │ ├── reports.less │ │ │ │ │ └── sidebar.less │ │ │ │ └── scss/ │ │ │ │ ├── reports/ │ │ │ │ │ ├── _accordion.scss │ │ │ │ │ └── _sidebar.scss │ │ │ │ └── reports.scss │ │ │ ├── tables/ │ │ │ │ ├── __init__.py │ │ │ │ ├── columns.py │ │ │ │ ├── elasticsearch/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── records.py │ │ │ │ │ └── tables.py │ │ │ │ ├── export.py │ │ │ │ ├── htmx.py │ │ │ │ ├── pagination.py │ │ │ │ └── tests/ │ │ │ │ ├── test_columns.py │ │ │ │ └── test_export.py │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ ├── 403.html │ │ │ │ ├── 404.html │ │ │ │ ├── 500.html │ │ │ │ ├── apache_license.html │ │ │ │ ├── bsd_license.html │ │ │ │ ├── csrf_failure.html │ │ │ │ ├── error_base.html │ │ │ │ ├── google9633af922b8b0064.html │ │ │ │ ├── hq-captcha-field.html │ │ │ │ ├── hqwebapp/ │ │ │ │ │ ├── base.html │ │ │ │ │ ├── basic_errors.html │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── base_navigation.html │ │ │ │ │ │ ├── base_page.html │ │ │ │ │ │ ├── base_paginated_crud.html │ │ │ │ │ │ ├── base_section.html │ │ │ │ │ │ ├── blank.html │ │ │ │ │ │ ├── bulk_upload.html │ │ │ │ │ │ ├── downgrade_modal.html │ │ │ │ │ │ ├── full_screen.html │ │ │ │ │ │ ├── iframe_close_window.html │ │ │ │ │ │ ├── iframe_domain_login.html │ │ │ │ │ │ ├── iframe_sso_login_pending.html │ │ │ │ │ │ ├── iframe_sso_login_success.html │ │ │ │ │ │ ├── oauth_application_registration_form.html │ │ │ │ │ │ ├── prepaid_modal.html │ │ │ │ │ │ ├── rollout_revert_modal.html │ │ │ │ │ │ ├── soil_status_full.html │ │ │ │ │ │ └── two_column.html │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── base_navigation.html │ │ │ │ │ │ ├── base_page.html │ │ │ │ │ │ ├── base_paginated_crud.html │ │ │ │ │ │ ├── base_section.html │ │ │ │ │ │ ├── blank.html │ │ │ │ │ │ ├── bulk_upload.html │ │ │ │ │ │ ├── downgrade_modal.html │ │ │ │ │ │ ├── full_screen.html │ │ │ │ │ │ ├── iframe_close_window.html │ │ │ │ │ │ ├── iframe_domain_login.html │ │ │ │ │ │ ├── iframe_sso_login_pending.html │ │ │ │ │ │ ├── iframe_sso_login_success.html │ │ │ │ │ │ ├── oauth_application_registration_form.html │ │ │ │ │ │ ├── prepaid_modal.html │ │ │ │ │ │ ├── rollout_revert_modal.html │ │ │ │ │ │ ├── soil_status_full.html │ │ │ │ │ │ └── two_column.html │ │ │ │ │ ├── close_window.html │ │ │ │ │ ├── crispy/ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── accordion_group.html │ │ │ │ │ │ │ ├── checkbox_widget.html │ │ │ │ │ │ │ ├── field_with_addons.html │ │ │ │ │ │ │ ├── field_with_help_bubble.html │ │ │ │ │ │ │ ├── form_actions.html │ │ │ │ │ │ │ ├── multi_field.html │ │ │ │ │ │ │ ├── multi_inline_field.html │ │ │ │ │ │ │ ├── radioselect.html │ │ │ │ │ │ │ ├── single_crispy_form.html │ │ │ │ │ │ │ ├── static_field.html │ │ │ │ │ │ │ └── text_field.html │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ ├── accordion_group.html │ │ │ │ │ │ │ ├── checkbox_widget.html │ │ │ │ │ │ │ ├── field_with_addons.html │ │ │ │ │ │ │ ├── field_with_help_bubble.html │ │ │ │ │ │ │ ├── form_actions.html │ │ │ │ │ │ │ ├── multi_field.html │ │ │ │ │ │ │ ├── multi_inline_field.html │ │ │ │ │ │ │ ├── radioselect.html │ │ │ │ │ │ │ ├── single_crispy_form.html │ │ │ │ │ │ │ ├── static_field.html │ │ │ │ │ │ │ └── text_field.html │ │ │ │ │ │ ├── checkbox_widget.html │ │ │ │ │ │ ├── field/ │ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ │ ├── field_with_text.html │ │ │ │ │ │ │ │ └── hidden_with_errors.html │ │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ │ ├── field_with_text.html │ │ │ │ │ │ │ │ └── hidden_with_errors.html │ │ │ │ │ │ │ ├── errors_only_field.html │ │ │ │ │ │ │ ├── field_with_text.html │ │ │ │ │ │ │ ├── hidden_with_errors.html │ │ │ │ │ │ │ └── multifield.html │ │ │ │ │ │ ├── field_with_addons.html │ │ │ │ │ │ ├── field_with_help_bubble.html │ │ │ │ │ │ ├── form_actions.html │ │ │ │ │ │ ├── form_step_number.html │ │ │ │ │ │ ├── help_bubble.html │ │ │ │ │ │ ├── link_button.html │ │ │ │ │ │ ├── multi_field.html │ │ │ │ │ │ ├── multi_inline_field.html │ │ │ │ │ │ ├── radioselect.html │ │ │ │ │ │ ├── static_field.html │ │ │ │ │ │ ├── switch_widget.html │ │ │ │ │ │ ├── text_field.html │ │ │ │ │ │ └── validation_message.html │ │ │ │ │ ├── htmx/ │ │ │ │ │ │ ├── error_modal.html │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ └── next_action_form.html │ │ │ │ │ │ └── htmx_action_error.html │ │ │ │ │ ├── includes/ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── core_stylesheets.html │ │ │ │ │ │ │ ├── domain_list_dropdown.html │ │ │ │ │ │ │ ├── file_download.html │ │ │ │ │ │ │ ├── global_navigation_bar.html │ │ │ │ │ │ │ ├── inactivity_modal.html │ │ │ │ │ │ │ ├── modal_30_day_trial.html │ │ │ │ │ │ │ ├── modal_report_issue.html │ │ │ │ │ │ │ └── modal_solutions_feature_request.html │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ ├── core_stylesheets.html │ │ │ │ │ │ │ ├── domain_list_dropdown.html │ │ │ │ │ │ │ ├── file_download.html │ │ │ │ │ │ │ ├── global_navigation_bar.html │ │ │ │ │ │ │ ├── inactivity_modal.html │ │ │ │ │ │ │ ├── modal_30_day_trial.html │ │ │ │ │ │ │ ├── modal_report_issue.html │ │ │ │ │ │ │ └── modal_solutions_feature_request.html │ │ │ │ │ │ ├── create_item_form.html │ │ │ │ │ │ ├── inactivity_modal_data.html │ │ │ │ │ │ └── modal_eula.html │ │ │ │ │ ├── maintenance_alerts.html │ │ │ │ │ ├── no_permission.html │ │ │ │ │ ├── partials/ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── breadcrumbs.html │ │ │ │ │ │ │ ├── bulk_upload.html │ │ │ │ │ │ │ ├── footer.html │ │ │ │ │ │ │ ├── get_demo_modals.html │ │ │ │ │ │ │ ├── key_value_mapping.html │ │ │ │ │ │ │ ├── ko_feedback.html │ │ │ │ │ │ │ ├── ko_inline_edit.html │ │ │ │ │ │ │ ├── ko_pagination.html │ │ │ │ │ │ │ ├── ko_search_box.html │ │ │ │ │ │ │ ├── ko_select_toggle.html │ │ │ │ │ │ │ ├── maintenance_alerts.html │ │ │ │ │ │ │ ├── navigation_left_sidebar.html │ │ │ │ │ │ │ ├── pagination.html │ │ │ │ │ │ │ ├── paused_plan_notice.html │ │ │ │ │ │ │ ├── time_notice.html │ │ │ │ │ │ │ ├── unsupported_browser.html │ │ │ │ │ │ │ └── update_item_form.html │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ ├── breadcrumbs.html │ │ │ │ │ │ │ ├── bulk_upload.html │ │ │ │ │ │ │ ├── footer.html │ │ │ │ │ │ │ ├── get_demo_modals.html │ │ │ │ │ │ │ ├── key_value_mapping.html │ │ │ │ │ │ │ ├── ko_feedback.html │ │ │ │ │ │ │ ├── ko_inline_edit.html │ │ │ │ │ │ │ ├── ko_pagination.html │ │ │ │ │ │ │ ├── ko_search_box.html │ │ │ │ │ │ │ ├── ko_select_toggle.html │ │ │ │ │ │ │ ├── maintenance_alerts.html │ │ │ │ │ │ │ ├── navigation_left_sidebar.html │ │ │ │ │ │ │ ├── pagination.html │ │ │ │ │ │ │ ├── paused_plan_notice.html │ │ │ │ │ │ │ ├── time_notice.html │ │ │ │ │ │ │ ├── unsupported_browser.html │ │ │ │ │ │ │ └── update_item_form.html │ │ │ │ │ │ ├── download_status.html │ │ │ │ │ │ ├── free_edition_banner.html │ │ │ │ │ │ ├── generic_feature_upgrade.html │ │ │ │ │ │ ├── pending_plan_notice.html │ │ │ │ │ │ ├── shared_download_status.html │ │ │ │ │ │ ├── trial_banner.html │ │ │ │ │ │ └── webpack.html │ │ │ │ │ ├── pretty_doc_info.html │ │ │ │ │ ├── spec/ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ └── mocha.html │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ └── mocha.html │ │ │ │ │ │ └── components/ │ │ │ │ │ │ └── mocha.html │ │ │ │ │ ├── svg/ │ │ │ │ │ │ ├── dimagi_logo.html │ │ │ │ │ │ └── yikes_face.html │ │ │ │ │ └── tables/ │ │ │ │ │ ├── bootstrap5.html │ │ │ │ │ ├── bootstrap5_htmx.html │ │ │ │ │ ├── header.html │ │ │ │ │ └── single_table.html │ │ │ │ ├── message.html │ │ │ │ ├── osdd.xml │ │ │ │ ├── password_change.html │ │ │ │ └── robots.txt │ │ │ ├── templatetags/ │ │ │ │ ├── __init__.py │ │ │ │ ├── hq_shared_tags.py │ │ │ │ ├── hq_tables_tags.py │ │ │ │ ├── proptable_tags.py │ │ │ │ └── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── rendered/ │ │ │ │ │ ├── initial_page_data.html │ │ │ │ │ └── registerurl.html │ │ │ │ ├── templates/ │ │ │ │ │ ├── initial_page_data.html │ │ │ │ │ ├── registerurl.html │ │ │ │ │ └── webpack_base.html │ │ │ │ └── test_tag.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── bootstrap5_diff_config.json │ │ │ │ │ └── bootstrap5_diffs/ │ │ │ │ │ ├── analytics/ │ │ │ │ │ │ └── forms/ │ │ │ │ │ │ └── hubspot_cta_form.html.diff.txt │ │ │ │ │ ├── app_manager/ │ │ │ │ │ │ ├── app_diff.html.diff.txt │ │ │ │ │ │ ├── app_view.html.diff.txt │ │ │ │ │ │ ├── apps_base.html.diff.txt │ │ │ │ │ │ ├── download_index.html.diff.txt │ │ │ │ │ │ ├── form_designer.html.diff.txt │ │ │ │ │ │ ├── form_view.html.diff.txt │ │ │ │ │ │ ├── module_view.html.diff.txt │ │ │ │ │ │ ├── module_view_advanced.html.diff.txt │ │ │ │ │ │ ├── module_view_report.html.diff.txt │ │ │ │ │ │ ├── no_longer_supported.html.diff.txt │ │ │ │ │ │ ├── odk_install.html.diff.txt │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ ├── add_item_templates.html.diff.txt │ │ │ │ │ │ │ ├── add_new_module_modal.html.diff.txt │ │ │ │ │ │ │ ├── app_summary_button.html.diff.txt │ │ │ │ │ │ │ ├── appnav_menu_header.html.diff.txt │ │ │ │ │ │ │ ├── appnav_menu_langs.html.diff.txt │ │ │ │ │ │ │ ├── apps_stylesheets.html.diff.txt │ │ │ │ │ │ │ ├── build_errors.html.diff.txt │ │ │ │ │ │ │ ├── build_profiles_select.html.diff.txt │ │ │ │ │ │ │ ├── case_list_session_endpoint.html.diff.txt │ │ │ │ │ │ │ ├── confirm_delete_app.html.diff.txt │ │ │ │ │ │ │ ├── custom_icon.html.diff.txt │ │ │ │ │ │ │ ├── define_case_type_modal.html.diff.txt │ │ │ │ │ │ │ ├── download_async_modal.html.diff.txt │ │ │ │ │ │ │ ├── form_session_endpoint.html.diff.txt │ │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ │ ├── case_config.html.diff.txt │ │ │ │ │ │ │ │ ├── case_config_advanced.html.diff.txt │ │ │ │ │ │ │ │ ├── case_config_ko_templates.html.diff.txt │ │ │ │ │ │ │ │ ├── custom_assertions.html.diff.txt │ │ │ │ │ │ │ │ ├── custom_instances.html.diff.txt │ │ │ │ │ │ │ │ ├── form_filter.html.diff.txt │ │ │ │ │ │ │ │ ├── form_gps_capture.html.diff.txt │ │ │ │ │ │ │ │ ├── form_tab_advanced.html.diff.txt │ │ │ │ │ │ │ │ ├── form_tab_settings.html.diff.txt │ │ │ │ │ │ │ │ ├── form_tab_visit_scheduler.html.diff.txt │ │ │ │ │ │ │ │ ├── form_view_modals.html.diff.txt │ │ │ │ │ │ │ │ ├── form_workflow.html.diff.txt │ │ │ │ │ │ │ │ ├── release_notes_setting.html.diff.txt │ │ │ │ │ │ │ │ ├── shadow_parent_select.html.diff.txt │ │ │ │ │ │ │ │ └── usercase_config.html.diff.txt │ │ │ │ │ │ │ ├── function_datum_endpoints.html.diff.txt │ │ │ │ │ │ │ ├── load_save_questions.html.diff.txt │ │ │ │ │ │ │ ├── menu/ │ │ │ │ │ │ │ │ ├── appnav_menu.html.diff.txt │ │ │ │ │ │ │ │ ├── form_link.html.diff.txt │ │ │ │ │ │ │ │ └── module_link.html.diff.txt │ │ │ │ │ │ │ ├── module_options/ │ │ │ │ │ │ │ │ ├── module_option_advanced.html.diff.txt │ │ │ │ │ │ │ │ ├── module_option_biometrics.html.diff.txt │ │ │ │ │ │ │ │ ├── module_option_button_base.html.diff.txt │ │ │ │ │ │ │ │ ├── module_option_case.html.diff.txt │ │ │ │ │ │ │ │ ├── module_option_report.html.diff.txt │ │ │ │ │ │ │ │ ├── module_option_shadow.html.diff.txt │ │ │ │ │ │ │ │ ├── module_option_shadow_v1.html.diff.txt │ │ │ │ │ │ │ │ ├── module_option_survey.html.diff.txt │ │ │ │ │ │ │ │ └── module_option_training.html.diff.txt │ │ │ │ │ │ │ ├── module_session_endpoint.html.diff.txt │ │ │ │ │ │ │ ├── modules/ │ │ │ │ │ │ │ │ ├── add_property_button.html.diff.txt │ │ │ │ │ │ │ │ ├── case_detail.html.diff.txt │ │ │ │ │ │ │ │ ├── case_list.html.diff.txt │ │ │ │ │ │ │ │ ├── case_list_filtering.html.diff.txt │ │ │ │ │ │ │ │ ├── case_list_form_setting.html.diff.txt │ │ │ │ │ │ │ │ ├── case_list_lazy_loading.html.diff.txt │ │ │ │ │ │ │ │ ├── case_list_lookup.html.diff.txt │ │ │ │ │ │ │ │ ├── case_list_missing_warning.html.diff.txt │ │ │ │ │ │ │ │ ├── case_list_module_overwrite.html.diff.txt │ │ │ │ │ │ │ │ ├── case_list_multi_select.html.diff.txt │ │ │ │ │ │ │ │ ├── case_list_properties.html.diff.txt │ │ │ │ │ │ │ │ ├── case_list_setting.html.diff.txt │ │ │ │ │ │ │ │ ├── case_search_properties.html.diff.txt │ │ │ │ │ │ │ │ ├── case_search_property.html.diff.txt │ │ │ │ │ │ │ │ ├── case_tile_preview.html.diff.txt │ │ │ │ │ │ │ │ ├── case_tile_templates.html.diff.txt │ │ │ │ │ │ │ │ ├── custom_detail_variables.html.diff.txt │ │ │ │ │ │ │ │ ├── enable_schedule.html.diff.txt │ │ │ │ │ │ │ │ ├── filter_configs.html.diff.txt │ │ │ │ │ │ │ │ ├── fixture_case_selection.html.diff.txt │ │ │ │ │ │ │ │ ├── graph_configuration_modal.html.diff.txt │ │ │ │ │ │ │ │ ├── mobile_report_configs.html.diff.txt │ │ │ │ │ │ │ │ ├── module_actions.html.diff.txt │ │ │ │ │ │ │ │ ├── module_filter.html.diff.txt │ │ │ │ │ │ │ │ ├── module_view_case_type.html.diff.txt │ │ │ │ │ │ │ │ ├── module_view_heading.html.diff.txt │ │ │ │ │ │ │ │ ├── module_view_settings.html.diff.txt │ │ │ │ │ │ │ │ ├── report_context_tile.html.diff.txt │ │ │ │ │ │ │ │ └── style_configuration_modal.html.diff.txt │ │ │ │ │ │ │ ├── nav_menu_media.html.diff.txt │ │ │ │ │ │ │ ├── nav_menu_media_single_type.html.diff.txt │ │ │ │ │ │ │ ├── settings/ │ │ │ │ │ │ │ │ └── supported_languages.html.diff.txt │ │ │ │ │ │ │ ├── toggle_diff_modal.html.diff.txt │ │ │ │ │ │ │ └── undo_delete_app.html.diff.txt │ │ │ │ │ │ ├── source_files.html.diff.txt │ │ │ │ │ │ └── spec/ │ │ │ │ │ │ └── mocha.html.diff.txt │ │ │ │ │ ├── data_interfaces/ │ │ │ │ │ │ ├── auto_update_rules.html.diff.txt │ │ │ │ │ │ ├── case_rule.html.diff.txt │ │ │ │ │ │ ├── edit_deduplication_rule.html.diff.txt │ │ │ │ │ │ ├── find_by_id.html.diff.txt │ │ │ │ │ │ ├── interfaces/ │ │ │ │ │ │ │ ├── archive_forms.html.diff.txt │ │ │ │ │ │ │ └── case_management.html.diff.txt │ │ │ │ │ │ ├── list_case_groups.html.diff.txt │ │ │ │ │ │ ├── list_deduplication_rules.html.diff.txt │ │ │ │ │ │ ├── manage_case_groups.html.diff.txt │ │ │ │ │ │ └── partials/ │ │ │ │ │ │ ├── auto_update_rule_list.html.diff.txt │ │ │ │ │ │ ├── auto_update_rule_run_history.html.diff.txt │ │ │ │ │ │ ├── case_rule_actions.html.diff.txt │ │ │ │ │ │ ├── case_rule_criteria.html.diff.txt │ │ │ │ │ │ ├── find_by_id_form.html.diff.txt │ │ │ │ │ │ └── modal_edit.html.diff.txt │ │ │ │ │ ├── domain/ │ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ │ └── partials/ │ │ │ │ │ │ │ └── project_limits_table.html.diff.txt │ │ │ │ │ │ ├── base_change_plan.html.diff.txt │ │ │ │ │ │ ├── billing_statements.html.diff.txt │ │ │ │ │ │ ├── confirm_plan.html.diff.txt │ │ │ │ │ │ ├── confirm_subscription_renewal.html.diff.txt │ │ │ │ │ │ ├── current_subscription.html.diff.txt │ │ │ │ │ │ ├── data_migration_in_progress.html.diff.txt │ │ │ │ │ │ ├── deactivated_notice.html.diff.txt │ │ │ │ │ │ ├── email/ │ │ │ │ │ │ │ └── domain_invite.html.diff.txt │ │ │ │ │ │ ├── insufficient_privilege_notification.html.diff.txt │ │ │ │ │ │ ├── internal_subscription_management.html.diff.txt │ │ │ │ │ │ ├── manage_releases_by_location.html.diff.txt │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ ├── auto_renew_modal.html.diff.txt │ │ │ │ │ │ │ ├── license_explanations.html.diff.txt │ │ │ │ │ │ │ ├── new_stripe_card_template.html.diff.txt │ │ │ │ │ │ │ └── payment_modal.html.diff.txt │ │ │ │ │ │ ├── renew_plan.html.diff.txt │ │ │ │ │ │ ├── select.html.diff.txt │ │ │ │ │ │ ├── select_plan.html.diff.txt │ │ │ │ │ │ ├── selected_plan_contact.html.diff.txt │ │ │ │ │ │ └── tombstone_management.html.diff.txt │ │ │ │ │ ├── geospatial/ │ │ │ │ │ │ ├── base_template.html.diff.txt │ │ │ │ │ │ ├── case_grouping_map.html.diff.txt │ │ │ │ │ │ ├── case_grouping_map_base.html.diff.txt │ │ │ │ │ │ ├── case_management.html.diff.txt │ │ │ │ │ │ ├── case_management_base.html.diff.txt │ │ │ │ │ │ ├── gps_capture.html.diff.txt │ │ │ │ │ │ ├── gps_capture_view.html.diff.txt │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ ├── delete_saved_area_modal.html.diff.txt │ │ │ │ │ │ │ ├── review_assignment_modal.html.diff.txt │ │ │ │ │ │ │ └── saved_polygon_filter.html.diff.txt │ │ │ │ │ │ └── settings.html.diff.txt │ │ │ │ │ ├── hqmedia/ │ │ │ │ │ │ ├── audio_translator.html.diff.txt │ │ │ │ │ │ ├── bulk_upload.html.diff.txt │ │ │ │ │ │ ├── bulk_upload_status.html.diff.txt │ │ │ │ │ │ ├── manage_paths.html.diff.txt │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ ├── bulk_upload.html.diff.txt │ │ │ │ │ │ │ ├── bulk_upload_status.html.diff.txt │ │ │ │ │ │ │ ├── manage_paths.html.diff.txt │ │ │ │ │ │ │ ├── multimedia_uploader.html.diff.txt │ │ │ │ │ │ │ ├── multimedia_zip_notice.html.diff.txt │ │ │ │ │ │ │ └── reference_table.html.diff.txt │ │ │ │ │ │ ├── references.html.diff.txt │ │ │ │ │ │ ├── translations_coverage.html.diff.txt │ │ │ │ │ │ ├── uploader/ │ │ │ │ │ │ │ ├── preview_audio_single.html.diff.txt │ │ │ │ │ │ │ ├── preview_image_single.html.diff.txt │ │ │ │ │ │ │ ├── preview_video_single.html.diff.txt │ │ │ │ │ │ │ └── queue_single.html.diff.txt │ │ │ │ │ │ └── uploader_base.html.diff.txt │ │ │ │ │ ├── hqwebapp/ │ │ │ │ │ │ ├── base_navigation.html.diff.txt │ │ │ │ │ │ ├── base_page.html.diff.txt │ │ │ │ │ │ ├── base_paginated_crud.html.diff.txt │ │ │ │ │ │ ├── base_section.html.diff.txt │ │ │ │ │ │ ├── blank.html.diff.txt │ │ │ │ │ │ ├── bulk_upload.html.diff.txt │ │ │ │ │ │ ├── crispy/ │ │ │ │ │ │ │ ├── accordion_group.html.diff.txt │ │ │ │ │ │ │ ├── checkbox_widget.html.diff.txt │ │ │ │ │ │ │ ├── field/ │ │ │ │ │ │ │ │ ├── field_with_text.html.diff.txt │ │ │ │ │ │ │ │ └── hidden_with_errors.html.diff.txt │ │ │ │ │ │ │ ├── field_with_addons.html.diff.txt │ │ │ │ │ │ │ ├── field_with_help_bubble.html.diff.txt │ │ │ │ │ │ │ ├── form_actions.html.diff.txt │ │ │ │ │ │ │ ├── multi_field.html.diff.txt │ │ │ │ │ │ │ ├── multi_inline_field.html.diff.txt │ │ │ │ │ │ │ ├── radioselect.html.diff.txt │ │ │ │ │ │ │ ├── single_crispy_form.html.diff.txt │ │ │ │ │ │ │ ├── static_field.html.diff.txt │ │ │ │ │ │ │ └── text_field.html.diff.txt │ │ │ │ │ │ ├── downgrade_modal.html.diff.txt │ │ │ │ │ │ ├── full_screen.html.diff.txt │ │ │ │ │ │ ├── iframe_close_window.html.diff.txt │ │ │ │ │ │ ├── iframe_domain_login.html.diff.txt │ │ │ │ │ │ ├── iframe_sso_login_pending.html.diff.txt │ │ │ │ │ │ ├── iframe_sso_login_success.html.diff.txt │ │ │ │ │ │ ├── includes/ │ │ │ │ │ │ │ ├── core_stylesheets.html.diff.txt │ │ │ │ │ │ │ ├── domain_list_dropdown.html.diff.txt │ │ │ │ │ │ │ ├── file_download.html.diff.txt │ │ │ │ │ │ │ ├── global_navigation_bar.html.diff.txt │ │ │ │ │ │ │ ├── inactivity_modal.html.diff.txt │ │ │ │ │ │ │ ├── modal_30_day_trial.html.diff.txt │ │ │ │ │ │ │ ├── modal_report_issue.html.diff.txt │ │ │ │ │ │ │ └── modal_solutions_feature_request.html.diff.txt │ │ │ │ │ │ ├── oauth_application_registration_form.html.diff.txt │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ ├── breadcrumbs.html.diff.txt │ │ │ │ │ │ │ ├── bulk_upload.html.diff.txt │ │ │ │ │ │ │ ├── footer.html.diff.txt │ │ │ │ │ │ │ ├── get_demo_modals.html.diff.txt │ │ │ │ │ │ │ ├── key_value_mapping.html.diff.txt │ │ │ │ │ │ │ ├── ko_feedback.html.diff.txt │ │ │ │ │ │ │ ├── ko_inline_edit.html.diff.txt │ │ │ │ │ │ │ ├── ko_pagination.html.diff.txt │ │ │ │ │ │ │ ├── ko_search_box.html.diff.txt │ │ │ │ │ │ │ ├── ko_select_toggle.html.diff.txt │ │ │ │ │ │ │ ├── maintenance_alerts.html.diff.txt │ │ │ │ │ │ │ ├── navigation_left_sidebar.html.diff.txt │ │ │ │ │ │ │ ├── pagination.html.diff.txt │ │ │ │ │ │ │ ├── paused_plan_notice.html.diff.txt │ │ │ │ │ │ │ ├── time_notice.html.diff.txt │ │ │ │ │ │ │ ├── unsupported_browser.html.diff.txt │ │ │ │ │ │ │ └── update_item_form.html.diff.txt │ │ │ │ │ │ ├── prepaid_modal.html.diff.txt │ │ │ │ │ │ ├── rollout_revert_modal.html.diff.txt │ │ │ │ │ │ ├── soil_status_full.html.diff.txt │ │ │ │ │ │ ├── spec/ │ │ │ │ │ │ │ └── mocha.html.diff.txt │ │ │ │ │ │ └── two_column.html.diff.txt │ │ │ │ │ ├── javascript/ │ │ │ │ │ │ ├── analytics/ │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ ├── cta_forms.js.diff.txt │ │ │ │ │ │ │ └── hubspot.js.diff.txt │ │ │ │ │ │ ├── app_manager/ │ │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ │ ├── add_ons.js.diff.txt │ │ │ │ │ │ │ │ ├── app_manager.js.diff.txt │ │ │ │ │ │ │ │ ├── app_manager_media.js.diff.txt │ │ │ │ │ │ │ │ ├── details/ │ │ │ │ │ │ │ │ │ ├── case_list_callout.js.diff.txt │ │ │ │ │ │ │ │ │ ├── column.js.diff.txt │ │ │ │ │ │ │ │ │ ├── detail_tab_nodeset.js.diff.txt │ │ │ │ │ │ │ │ │ ├── graph_config.js.diff.txt │ │ │ │ │ │ │ │ │ ├── screen.js.diff.txt │ │ │ │ │ │ │ │ │ ├── screen_config.js.diff.txt │ │ │ │ │ │ │ │ │ └── sort_rows.js.diff.txt │ │ │ │ │ │ │ │ ├── download_async_modal.js.diff.txt │ │ │ │ │ │ │ │ ├── download_index_main.js.diff.txt │ │ │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ │ │ ├── advanced/ │ │ │ │ │ │ │ │ │ │ ├── actions.js.diff.txt │ │ │ │ │ │ │ │ │ │ └── case_config_ui.js.diff.txt │ │ │ │ │ │ │ │ │ ├── case_config_ui.js.diff.txt │ │ │ │ │ │ │ │ │ ├── form_designer.js.diff.txt │ │ │ │ │ │ │ │ │ ├── form_view.js.diff.txt │ │ │ │ │ │ │ │ │ └── form_workflow.js.diff.txt │ │ │ │ │ │ │ │ ├── manage_releases_by_location.js.diff.txt │ │ │ │ │ │ │ │ ├── modules/ │ │ │ │ │ │ │ │ │ ├── module_view.js.diff.txt │ │ │ │ │ │ │ │ │ ├── module_view_report.js.diff.txt │ │ │ │ │ │ │ │ │ └── report_module.js.diff.txt │ │ │ │ │ │ │ │ ├── multimedia_size_util.js.diff.txt │ │ │ │ │ │ │ │ ├── nav_menu_media.js.diff.txt │ │ │ │ │ │ │ │ ├── nav_menu_media_common.js.diff.txt │ │ │ │ │ │ │ │ ├── preview_app.js.diff.txt │ │ │ │ │ │ │ │ ├── releases/ │ │ │ │ │ │ │ │ │ ├── app_view_release_manager.js.diff.txt │ │ │ │ │ │ │ │ │ ├── language_profiles.js.diff.txt │ │ │ │ │ │ │ │ │ ├── releases.js.diff.txt │ │ │ │ │ │ │ │ │ └── update_prompt.js.diff.txt │ │ │ │ │ │ │ │ ├── settings/ │ │ │ │ │ │ │ │ │ ├── app_logos.js.diff.txt │ │ │ │ │ │ │ │ │ └── commcare_settings.js.diff.txt │ │ │ │ │ │ │ │ ├── source_files.js.diff.txt │ │ │ │ │ │ │ │ ├── supported_languages.js.diff.txt │ │ │ │ │ │ │ │ └── visit_scheduler.js.diff.txt │ │ │ │ │ │ │ └── spec/ │ │ │ │ │ │ │ ├── download_async_modal_spec.js.diff.txt │ │ │ │ │ │ │ ├── form_workflow_spec.js.diff.txt │ │ │ │ │ │ │ ├── main.js.diff.txt │ │ │ │ │ │ │ └── releases_spec.js.diff.txt │ │ │ │ │ │ ├── data_interfaces/ │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ ├── case_dedupe_main.js.diff.txt │ │ │ │ │ │ │ ├── case_management.js.diff.txt │ │ │ │ │ │ │ ├── deduplication_rules.js.diff.txt │ │ │ │ │ │ │ └── manage_case_groups.js.diff.txt │ │ │ │ │ │ ├── domain/ │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ ├── billing_statements.js.diff.txt │ │ │ │ │ │ │ ├── info_basic.js.diff.txt │ │ │ │ │ │ │ ├── internal_subscription_management.js.diff.txt │ │ │ │ │ │ │ └── toggles.js.diff.txt │ │ │ │ │ │ ├── geospatial/ │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ ├── case_grouping_map.js.diff.txt │ │ │ │ │ │ │ ├── case_management.js.diff.txt │ │ │ │ │ │ │ ├── geo_config.js.diff.txt │ │ │ │ │ │ │ ├── gps_capture.js.diff.txt │ │ │ │ │ │ │ └── models.js.diff.txt │ │ │ │ │ │ ├── hqmedia/ │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ ├── bulk_upload.js.diff.txt │ │ │ │ │ │ │ ├── media_reference_models.js.diff.txt │ │ │ │ │ │ │ ├── references_main.js.diff.txt │ │ │ │ │ │ │ ├── translations_coverage.js.diff.txt │ │ │ │ │ │ │ └── uploaders.js.diff.txt │ │ │ │ │ │ ├── hqwebapp/ │ │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ │ ├── alert_user.js.diff.txt │ │ │ │ │ │ │ │ ├── base_main.js.diff.txt │ │ │ │ │ │ │ │ ├── commcarehq.js.diff.txt │ │ │ │ │ │ │ │ ├── common.js.diff.txt │ │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ │ └── feedback.js.diff.txt │ │ │ │ │ │ │ │ ├── crud_paginated_list.js.diff.txt │ │ │ │ │ │ │ │ ├── crud_paginated_list_init.js.diff.txt │ │ │ │ │ │ │ │ ├── downgrade_modal.js.diff.txt │ │ │ │ │ │ │ │ ├── email-request.js.diff.txt │ │ │ │ │ │ │ │ ├── hq.helpers.js.diff.txt │ │ │ │ │ │ │ │ ├── inactivity.js.diff.txt │ │ │ │ │ │ │ │ ├── knockout_bindings.ko.js.diff.txt │ │ │ │ │ │ │ │ ├── main.js.diff.txt │ │ │ │ │ │ │ │ ├── prepaid_modal.js.diff.txt │ │ │ │ │ │ │ │ ├── sticky_tabs.js.diff.txt │ │ │ │ │ │ │ │ ├── ui_elements/ │ │ │ │ │ │ │ │ │ ├── ui-element-checkbox.js.diff.txt │ │ │ │ │ │ │ │ │ ├── ui-element-input-map.js.diff.txt │ │ │ │ │ │ │ │ │ ├── ui-element-input.js.diff.txt │ │ │ │ │ │ │ │ │ ├── ui-element-key-val-list.js.diff.txt │ │ │ │ │ │ │ │ │ ├── ui-element-key-val-mapping.js.diff.txt │ │ │ │ │ │ │ │ │ └── ui-element-select.js.diff.txt │ │ │ │ │ │ │ │ ├── validators.ko.js.diff.txt │ │ │ │ │ │ │ │ └── widgets.js.diff.txt │ │ │ │ │ │ │ └── spec/ │ │ │ │ │ │ │ ├── inactivity_spec.js.diff.txt │ │ │ │ │ │ │ ├── main.js.diff.txt │ │ │ │ │ │ │ └── widgets_spec.js.diff.txt │ │ │ │ │ │ ├── notifications/ │ │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ │ ├── notifications_service.js.diff.txt │ │ │ │ │ │ │ │ └── notifications_service_main.js.diff.txt │ │ │ │ │ │ │ └── spec/ │ │ │ │ │ │ │ ├── NotificationsService.spec.mo.js.diff.txt │ │ │ │ │ │ │ └── main.js.diff.txt │ │ │ │ │ │ ├── registration/ │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ ├── login.js.diff.txt │ │ │ │ │ │ │ ├── password.js.diff.txt │ │ │ │ │ │ │ └── user_login_form.js.diff.txt │ │ │ │ │ │ ├── repeaters/ │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ └── repeat_record_report.js.diff.txt │ │ │ │ │ │ ├── reports/ │ │ │ │ │ │ │ ├── js/ │ │ │ │ │ │ │ │ ├── aggregate_user_status.js.diff.txt │ │ │ │ │ │ │ │ ├── application_status.js.diff.txt │ │ │ │ │ │ │ │ ├── async.js.diff.txt │ │ │ │ │ │ │ │ ├── base.js.diff.txt │ │ │ │ │ │ │ │ ├── case_details.js.diff.txt │ │ │ │ │ │ │ │ ├── data_corrections.js.diff.txt │ │ │ │ │ │ │ │ ├── datatables_config.js.diff.txt │ │ │ │ │ │ │ │ ├── edit_scheduled_report.js.diff.txt │ │ │ │ │ │ │ │ ├── filters/ │ │ │ │ │ │ │ │ │ ├── drilldown_options.js.diff.txt │ │ │ │ │ │ │ │ │ └── main.js.diff.txt │ │ │ │ │ │ │ │ ├── form_data_main.js.diff.txt │ │ │ │ │ │ │ │ ├── hq_report.js.diff.txt │ │ │ │ │ │ │ │ ├── maps_utils.js.diff.txt │ │ │ │ │ │ │ │ ├── project_health_dashboard.js.diff.txt │ │ │ │ │ │ │ │ ├── readable_form.js.diff.txt │ │ │ │ │ │ │ │ ├── report_config_models.js.diff.txt │ │ │ │ │ │ │ │ ├── saved_reports_main.js.diff.txt │ │ │ │ │ │ │ │ ├── single_form.js.diff.txt │ │ │ │ │ │ │ │ ├── standard_hq_report.js.diff.txt │ │ │ │ │ │ │ │ ├── submission_error_report.js.diff.txt │ │ │ │ │ │ │ │ └── tabular.js.diff.txt │ │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ └── datagrid.js.diff.txt │ │ │ │ │ │ ├── reports_core/ │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ └── maps.js.diff.txt │ │ │ │ │ │ ├── translations/ │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ ├── app_translations.js.diff.txt │ │ │ │ │ │ │ └── translations.js.diff.txt │ │ │ │ │ │ ├── userreports/ │ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ │ ├── base.js.diff.txt │ │ │ │ │ │ │ ├── configurable_report.js.diff.txt │ │ │ │ │ │ │ ├── configure_report.js.diff.txt │ │ │ │ │ │ │ ├── data_source_select.js.diff.txt │ │ │ │ │ │ │ ├── expression_debugger.js.diff.txt │ │ │ │ │ │ │ ├── report_config.js.diff.txt │ │ │ │ │ │ │ ├── ucr_expression.js.diff.txt │ │ │ │ │ │ │ ├── ucr_expressions.js.diff.txt │ │ │ │ │ │ │ └── widgets.js.diff.txt │ │ │ │ │ │ └── users/ │ │ │ │ │ │ └── js/ │ │ │ │ │ │ ├── accept_invite.js.diff.txt │ │ │ │ │ │ ├── custom_data_fields.js.diff.txt │ │ │ │ │ │ ├── edit_commcare_user.js.diff.txt │ │ │ │ │ │ ├── edit_web_user.js.diff.txt │ │ │ │ │ │ ├── filtered_download.js.diff.txt │ │ │ │ │ │ ├── invite_web_user.js.diff.txt │ │ │ │ │ │ ├── mobile_workers.js.diff.txt │ │ │ │ │ │ └── web_users.js.diff.txt │ │ │ │ │ ├── login_and_password/ │ │ │ │ │ │ ├── login.html.diff.txt │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ ├── login_full.html.diff.txt │ │ │ │ │ │ │ └── server_location_select.html.diff.txt │ │ │ │ │ │ ├── password_change_done.html.diff.txt │ │ │ │ │ │ └── two_factor/ │ │ │ │ │ │ ├── _wizard_actions.html.diff.txt │ │ │ │ │ │ ├── _wizard_forms.html.diff.txt │ │ │ │ │ │ ├── core/ │ │ │ │ │ │ │ ├── backup_tokens.html.diff.txt │ │ │ │ │ │ │ ├── login.html.diff.txt │ │ │ │ │ │ │ ├── login_form.html.diff.txt │ │ │ │ │ │ │ ├── phone_register.html.diff.txt │ │ │ │ │ │ │ ├── setup.html.diff.txt │ │ │ │ │ │ │ └── setup_complete.html.diff.txt │ │ │ │ │ │ └── profile/ │ │ │ │ │ │ ├── disable.html.diff.txt │ │ │ │ │ │ └── profile.html.diff.txt │ │ │ │ │ ├── notifications/ │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ └── global_notifications.html.diff.txt │ │ │ │ │ │ └── spec/ │ │ │ │ │ │ └── mocha.html.diff.txt │ │ │ │ │ ├── repeaters/ │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ └── attempt_history.html.diff.txt │ │ │ │ │ │ └── repeat_record_report.html.diff.txt │ │ │ │ │ ├── reports/ │ │ │ │ │ │ ├── async/ │ │ │ │ │ │ │ ├── aggregate_user_status.html.diff.txt │ │ │ │ │ │ │ ├── basic.html.diff.txt │ │ │ │ │ │ │ ├── default.html.diff.txt │ │ │ │ │ │ │ ├── filters.html.diff.txt │ │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ │ └── aggregate_user_status/ │ │ │ │ │ │ │ │ └── chart_panel.html.diff.txt │ │ │ │ │ │ │ └── project_health_dashboard.html.diff.txt │ │ │ │ │ │ ├── base_template.html.diff.txt │ │ │ │ │ │ ├── datatables/ │ │ │ │ │ │ │ └── column.html.diff.txt │ │ │ │ │ │ ├── edit_scheduled_report.html.diff.txt │ │ │ │ │ │ ├── filters/ │ │ │ │ │ │ │ ├── base.html.diff.txt │ │ │ │ │ │ │ ├── checkbox.html.diff.txt │ │ │ │ │ │ │ ├── date_selector.html.diff.txt │ │ │ │ │ │ │ ├── daterange.html.diff.txt │ │ │ │ │ │ │ ├── datespan.html.diff.txt │ │ │ │ │ │ │ ├── devicelog_tags.html.diff.txt │ │ │ │ │ │ │ ├── drilldown_options.html.diff.txt │ │ │ │ │ │ │ ├── explorer_columns.html.diff.txt │ │ │ │ │ │ │ ├── filter_users.html.diff.txt │ │ │ │ │ │ │ ├── form_app_module_drilldown.html.diff.txt │ │ │ │ │ │ │ ├── location_async.html.diff.txt │ │ │ │ │ │ │ ├── month_datespan.html.diff.txt │ │ │ │ │ │ │ ├── multi_option.html.diff.txt │ │ │ │ │ │ │ ├── optional_daterange.html.diff.txt │ │ │ │ │ │ │ ├── optional_month_year.html.diff.txt │ │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ │ └── fuzzy_checkbox.html.diff.txt │ │ │ │ │ │ │ ├── sensitive_columns.html.diff.txt │ │ │ │ │ │ │ ├── simple.html.diff.txt │ │ │ │ │ │ │ ├── single_option.html.diff.txt │ │ │ │ │ │ │ ├── submit_error_types.html.diff.txt │ │ │ │ │ │ │ ├── textarea_with_select.html.diff.txt │ │ │ │ │ │ │ ├── time_input.html.diff.txt │ │ │ │ │ │ │ └── xpath_textarea.html.diff.txt │ │ │ │ │ │ ├── form/ │ │ │ │ │ │ │ └── partials/ │ │ │ │ │ │ │ ├── readable_form.html.diff.txt │ │ │ │ │ │ │ ├── single_form.html.diff.txt │ │ │ │ │ │ │ └── single_form_tree.html.diff.txt │ │ │ │ │ │ ├── messaging/ │ │ │ │ │ │ │ ├── event_detail.html.diff.txt │ │ │ │ │ │ │ └── survey_detail.html.diff.txt │ │ │ │ │ │ ├── notification_unsubscribe.html.diff.txt │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ ├── bulk_modal.html.diff.txt │ │ │ │ │ │ │ ├── data_corrections_modal.html.diff.txt │ │ │ │ │ │ │ ├── description.html.diff.txt │ │ │ │ │ │ │ ├── filter_panel.html.diff.txt │ │ │ │ │ │ │ ├── form_property_table.html.diff.txt │ │ │ │ │ │ │ ├── save_reports_modal.html.diff.txt │ │ │ │ │ │ │ └── scheduled_reports_table.html.diff.txt │ │ │ │ │ │ ├── project_health/ │ │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ │ ├── user_list.html.diff.txt │ │ │ │ │ │ │ │ └── users_tables.html.diff.txt │ │ │ │ │ │ │ ├── project_health_email.html.diff.txt │ │ │ │ │ │ │ └── user_details.html.diff.txt │ │ │ │ │ │ ├── reportdata/ │ │ │ │ │ │ │ ├── case_attachments.html.diff.txt │ │ │ │ │ │ │ ├── case_data.html.diff.txt │ │ │ │ │ │ │ ├── form_data.html.diff.txt │ │ │ │ │ │ │ └── view_form_attachment.html.diff.txt │ │ │ │ │ │ ├── reports_home.html.diff.txt │ │ │ │ │ │ ├── standard/ │ │ │ │ │ │ │ ├── base_template.html.diff.txt │ │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ │ ├── filter_panel.html.diff.txt │ │ │ │ │ │ │ │ └── user_history_changes.html.diff.txt │ │ │ │ │ │ │ └── submission_error_report.html.diff.txt │ │ │ │ │ │ ├── tableau_template.html.diff.txt │ │ │ │ │ │ ├── tableau_visualization.html.diff.txt │ │ │ │ │ │ └── tabular.html.diff.txt │ │ │ │ │ ├── reports_core/ │ │ │ │ │ │ ├── filters/ │ │ │ │ │ │ │ ├── choice_list_filter.html.diff.txt │ │ │ │ │ │ │ ├── datespan_filter.html.diff.txt │ │ │ │ │ │ │ ├── dynamic_choice_list.html.diff.txt │ │ │ │ │ │ │ ├── filter_base.html.diff.txt │ │ │ │ │ │ │ ├── location_async.html.diff.txt │ │ │ │ │ │ │ ├── numeric_filter.html.diff.txt │ │ │ │ │ │ │ └── quarter_filter.html.diff.txt │ │ │ │ │ │ └── partials/ │ │ │ │ │ │ └── filter_panel.html.diff.txt │ │ │ │ │ ├── sso/ │ │ │ │ │ │ ├── acs_errors.html.diff.txt │ │ │ │ │ │ ├── config_errors.html.diff.txt │ │ │ │ │ │ ├── sso_error.html.diff.txt │ │ │ │ │ │ └── sso_request_denied.html.diff.txt │ │ │ │ │ ├── stylesheets/ │ │ │ │ │ │ ├── app_manager-main.app_manager-main.style.diff.txt │ │ │ │ │ │ ├── app_manager.app_manager.style.diff.txt │ │ │ │ │ │ ├── font/ │ │ │ │ │ │ │ ├── core.core.style.diff.txt │ │ │ │ │ │ │ ├── icons.icons.style.diff.txt │ │ │ │ │ │ │ ├── path.path.style.diff.txt │ │ │ │ │ │ │ └── variables.variables.style.diff.txt │ │ │ │ │ │ ├── font-workflow.font-workflow.style.diff.txt │ │ │ │ │ │ ├── imports/ │ │ │ │ │ │ │ ├── ace_cle._ace_cle.style.diff.txt │ │ │ │ │ │ │ ├── alerts._alert.style.diff.txt │ │ │ │ │ │ │ ├── backgrounds._backgrounds.style.diff.txt │ │ │ │ │ │ │ ├── breadcrumbs._breadcrumb.style.diff.txt │ │ │ │ │ │ │ ├── buttons._buttons.style.diff.txt │ │ │ │ │ │ │ ├── case_tile_preview._case_tile_preview.style.diff.txt │ │ │ │ │ │ │ ├── content._content.style.diff.txt │ │ │ │ │ │ │ ├── corehq_overrides._corehq_overrides.style.diff.txt │ │ │ │ │ │ │ ├── datagrid._datagrid.style.diff.txt │ │ │ │ │ │ │ ├── datatables._datatables.style.diff.txt │ │ │ │ │ │ │ ├── date_range_picker._date_range_picker.style.diff.txt │ │ │ │ │ │ │ ├── datetimepicker._datetimepicker.style.diff.txt │ │ │ │ │ │ │ ├── deploy._deploy.style.diff.txt │ │ │ │ │ │ │ ├── diff._diff.style.diff.txt │ │ │ │ │ │ │ ├── dropdowns._dropdown.style.diff.txt │ │ │ │ │ │ │ ├── facet._facet.style.diff.txt │ │ │ │ │ │ │ ├── feedback._feedback.style.diff.txt │ │ │ │ │ │ │ ├── flag_icons._flag_icons.style.diff.txt │ │ │ │ │ │ │ ├── form_editing._form_editing.style.diff.txt │ │ │ │ │ │ │ ├── form_steps._form_steps.style.diff.txt │ │ │ │ │ │ │ ├── forms._forms.style.diff.txt │ │ │ │ │ │ │ ├── helpbubble._helpbubble.style.diff.txt │ │ │ │ │ │ │ ├── hubspot._hubspot.style.diff.txt │ │ │ │ │ │ │ ├── icons._icons.style.diff.txt │ │ │ │ │ │ │ ├── includes_mixins._mixins.style.diff.txt │ │ │ │ │ │ │ ├── includes_variables._variables.style.diff.txt │ │ │ │ │ │ │ ├── includes_variables._variables_bootstrap3.style.diff.txt │ │ │ │ │ │ │ ├── inline_edit._inline_edit.style.diff.txt │ │ │ │ │ │ │ ├── label._label.style.diff.txt │ │ │ │ │ │ │ ├── layouts._containers.style.diff.txt │ │ │ │ │ │ │ ├── layouts._layouts.style.diff.txt │ │ │ │ │ │ │ ├── mapbox._mapbox.style.diff.txt │ │ │ │ │ │ │ ├── modals._modal.style.diff.txt │ │ │ │ │ │ │ ├── navigation._navigation.style.diff.txt │ │ │ │ │ │ │ ├── navs._nav.style.diff.txt │ │ │ │ │ │ │ ├── new_module_modal._new_module_modal.style.diff.txt │ │ │ │ │ │ │ ├── notifications._notifications.style.diff.txt │ │ │ │ │ │ │ ├── ocs_widget._ocs_widget.style.diff.txt │ │ │ │ │ │ │ ├── pagination._pagination.style.diff.txt │ │ │ │ │ │ │ ├── panel._panel.style.diff.txt │ │ │ │ │ │ │ ├── panels._cards.style.diff.txt │ │ │ │ │ │ │ ├── plan_notice._plan_notice.style.diff.txt │ │ │ │ │ │ │ ├── popover._popover.style.diff.txt │ │ │ │ │ │ │ ├── popovers._popover.style.diff.txt │ │ │ │ │ │ │ ├── radio_select._radio_select.style.diff.txt │ │ │ │ │ │ │ ├── readable_forms._readable_forms.style.diff.txt │ │ │ │ │ │ │ ├── report._report.style.diff.txt │ │ │ │ │ │ │ ├── savebtn._savebtn.style.diff.txt │ │ │ │ │ │ │ ├── select2s._select2.style.diff.txt │ │ │ │ │ │ │ ├── svg._svg.style.diff.txt │ │ │ │ │ │ │ ├── table._table.style.diff.txt │ │ │ │ │ │ │ ├── tables._tables.style.diff.txt │ │ │ │ │ │ │ ├── tabs._tabs.style.diff.txt │ │ │ │ │ │ │ ├── typography._type.style.diff.txt │ │ │ │ │ │ │ ├── utils._utils.style.diff.txt │ │ │ │ │ │ │ └── variables._variables.style.diff.txt │ │ │ │ │ │ ├── preview_app-main.preview_app-main.style.diff.txt │ │ │ │ │ │ ├── preview_app.preview_app.style.diff.txt │ │ │ │ │ │ ├── pricing-main.pricing-main.style.diff.txt │ │ │ │ │ │ ├── pricing.pricing.style.diff.txt │ │ │ │ │ │ ├── registration.registration.style.diff.txt │ │ │ │ │ │ ├── style-imports.commcarehq.style.diff.txt │ │ │ │ │ │ ├── summary-main.summary-main.style.diff.txt │ │ │ │ │ │ └── summary.summary.style.diff.txt │ │ │ │ │ ├── tabs/ │ │ │ │ │ │ ├── menu_main.html.diff.txt │ │ │ │ │ │ └── menu_submenu.html.diff.txt │ │ │ │ │ ├── userreports/ │ │ │ │ │ │ ├── base.html.diff.txt │ │ │ │ │ │ ├── base_report_builder.html.diff.txt │ │ │ │ │ │ ├── configurable_report.html.diff.txt │ │ │ │ │ │ ├── configurable_reports_home.html.diff.txt │ │ │ │ │ │ ├── data_source_debugger.html.diff.txt │ │ │ │ │ │ ├── data_source_from_app.html.diff.txt │ │ │ │ │ │ ├── edit_data_source.html.diff.txt │ │ │ │ │ │ ├── edit_report_config.html.diff.txt │ │ │ │ │ │ ├── expression_debugger.html.diff.txt │ │ │ │ │ │ ├── import_report.html.diff.txt │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ ├── column_list_configuration.html.diff.txt │ │ │ │ │ │ │ ├── delete_report_button.html.diff.txt │ │ │ │ │ │ │ ├── filter_panel.html.diff.txt │ │ │ │ │ │ │ └── property_list_configuration.html.diff.txt │ │ │ │ │ │ ├── paywall/ │ │ │ │ │ │ │ ├── activating_subscription.html.diff.txt │ │ │ │ │ │ │ └── pricing.html.diff.txt │ │ │ │ │ │ ├── preview_data.html.diff.txt │ │ │ │ │ │ ├── report_error.html.diff.txt │ │ │ │ │ │ ├── reportbuilder/ │ │ │ │ │ │ │ ├── configure_report.html.diff.txt │ │ │ │ │ │ │ └── data_source_select.html.diff.txt │ │ │ │ │ │ ├── spec/ │ │ │ │ │ │ │ └── mocha.html.diff.txt │ │ │ │ │ │ ├── summary_data_source.html.diff.txt │ │ │ │ │ │ ├── ucr_expression.html.diff.txt │ │ │ │ │ │ ├── ucr_expressions.html.diff.txt │ │ │ │ │ │ └── userreports_base.html.diff.txt │ │ │ │ │ └── users/ │ │ │ │ │ ├── accept_invite.html.diff.txt │ │ │ │ │ ├── bulk_delete.html.diff.txt │ │ │ │ │ ├── bulk_lookup.html.diff.txt │ │ │ │ │ ├── commcare_user_account_confirmed.html.diff.txt │ │ │ │ │ ├── commcare_user_confirm_account.html.diff.txt │ │ │ │ │ ├── confirm_turn_off_demo_mode.html.diff.txt │ │ │ │ │ ├── confirmation_sent.html.diff.txt │ │ │ │ │ ├── deleted_account.html.diff.txt │ │ │ │ │ ├── domain_request.html.diff.txt │ │ │ │ │ ├── edit_commcare_user.html.diff.txt │ │ │ │ │ ├── edit_web_user.html.diff.txt │ │ │ │ │ ├── extra_users_confirm_billing.html.diff.txt │ │ │ │ │ ├── filter_and_download.html.diff.txt │ │ │ │ │ ├── invite_web_user.html.diff.txt │ │ │ │ │ ├── mobile_workers.html.diff.txt │ │ │ │ │ ├── partials/ │ │ │ │ │ │ ├── basic_info_form.html.diff.txt │ │ │ │ │ │ ├── basic_info_modals.html.diff.txt │ │ │ │ │ │ ├── commcare_user_groups.html.diff.txt │ │ │ │ │ │ ├── edit_commtrack_user_settings.html.diff.txt │ │ │ │ │ │ ├── manage_my_numbers.html.diff.txt │ │ │ │ │ │ ├── manage_phone_numbers.html.diff.txt │ │ │ │ │ │ ├── personalid_activation_modals.html.diff.txt │ │ │ │ │ │ ├── personalid_password_locked_banner.html.diff.txt │ │ │ │ │ │ ├── register_user_form_fields.html.diff.txt │ │ │ │ │ │ └── waiting_to_verify_email_message.html.diff.txt │ │ │ │ │ └── web_users.html.diff.txt │ │ │ │ ├── tables/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── generator.py │ │ │ │ │ ├── test_elastic_records.py │ │ │ │ │ └── test_elastic_tables.py │ │ │ │ ├── test_apps.py │ │ │ │ ├── test_bootstrap5_diffs.py │ │ │ │ ├── test_bootstrap5_migrated_apps.py │ │ │ │ ├── test_bug_report_email.py │ │ │ │ ├── test_compress_command.py │ │ │ │ ├── test_csrf_middleware.py │ │ │ │ ├── test_custom_login_page.py │ │ │ │ ├── test_decorators.py │ │ │ │ ├── test_default_landing_page.py │ │ │ │ ├── test_doc_info.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_hq_shared_tags.py │ │ │ │ ├── test_login_handlers.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_password_lockout.py │ │ │ │ ├── test_proptable_tags.py │ │ │ │ ├── test_signals.py │ │ │ │ ├── test_sso_enforced_login.py │ │ │ │ ├── test_static_resource_command.py │ │ │ │ ├── test_timeout_middleware.py │ │ │ │ ├── test_two_factor_gateways.py │ │ │ │ ├── test_views.py │ │ │ │ └── utils/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_bootstrap.py │ │ │ │ ├── test_bootstrap_changes.py │ │ │ │ ├── test_bootstrap_paths.py │ │ │ │ ├── test_bootstrap_status.py │ │ │ │ ├── test_html.py │ │ │ │ ├── test_thread_var.py │ │ │ │ └── test_translation.py │ │ │ ├── two_factor_gateways.py │ │ │ ├── two_factor_methods.py │ │ │ ├── urls.py │ │ │ ├── utils/ │ │ │ │ ├── __init__.py │ │ │ │ ├── bootstrap/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── changes.py │ │ │ │ │ ├── changes_guide/ │ │ │ │ │ │ ├── crispy.md │ │ │ │ │ │ ├── css-breadcrumb.md │ │ │ │ │ │ ├── css-checkbox.md │ │ │ │ │ │ ├── css-close.md │ │ │ │ │ │ ├── css-dl-horizontal.md │ │ │ │ │ │ ├── css-dropdown.md │ │ │ │ │ │ ├── css-file-inputs.md │ │ │ │ │ │ ├── css-form-group.md │ │ │ │ │ │ ├── css-form-inline.md │ │ │ │ │ │ ├── css-glyphicon.md │ │ │ │ │ │ ├── css-has-error.md │ │ │ │ │ │ ├── css-has-success.md │ │ │ │ │ │ ├── css-input-group-addon.md │ │ │ │ │ │ ├── css-input-group-btn.md │ │ │ │ │ │ ├── css-nav.md │ │ │ │ │ │ ├── css-navbar-dark.md │ │ │ │ │ │ ├── css-navbar-light.md │ │ │ │ │ │ ├── css-navbar.md │ │ │ │ │ │ ├── css-page-header.md │ │ │ │ │ │ ├── css-pagination.md │ │ │ │ │ │ ├── css-panel.md │ │ │ │ │ │ ├── css-progress.md │ │ │ │ │ │ ├── css-select-form-control.md │ │ │ │ │ │ ├── css-well.md │ │ │ │ │ │ ├── inline-style.md │ │ │ │ │ │ ├── js-affix.md │ │ │ │ │ │ ├── js-button.md │ │ │ │ │ │ ├── js-createDateRangePicker.md │ │ │ │ │ │ ├── js-datetimepicker.md │ │ │ │ │ │ ├── js-modal.md │ │ │ │ │ │ ├── js-popover.md │ │ │ │ │ │ ├── js-tab.md │ │ │ │ │ │ └── js-tooltip.md │ │ │ │ │ ├── git.py │ │ │ │ │ ├── middleware.py │ │ │ │ │ ├── paths.py │ │ │ │ │ ├── references.py │ │ │ │ │ ├── reports/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── debug.py │ │ │ │ │ │ ├── progress/ │ │ │ │ │ │ │ └── bootstrap3_to_5.json │ │ │ │ │ │ ├── progress.py │ │ │ │ │ │ └── stats.py │ │ │ │ │ ├── spec/ │ │ │ │ │ │ └── bootstrap_3_to_5.json │ │ │ │ │ ├── status/ │ │ │ │ │ │ └── bootstrap3_to_5.json │ │ │ │ │ └── status.py │ │ │ │ ├── html.py │ │ │ │ ├── management_commands.py │ │ │ │ ├── translation.py │ │ │ │ ├── two_factor.py │ │ │ │ └── webpack.py │ │ │ ├── view_permissions.py │ │ │ ├── views.py │ │ │ └── widgets.py │ │ ├── integration/ │ │ │ ├── __init__.py │ │ │ ├── forms.py │ │ │ ├── kyc/ │ │ │ │ ├── __init__.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── filters.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ ├── schemas/ │ │ │ │ │ └── kyc-verify-v1.json │ │ │ │ ├── services.py │ │ │ │ ├── tables.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_models.py │ │ │ │ │ ├── test_services.py │ │ │ │ │ ├── test_tables.py │ │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_dialersettings.py │ │ │ │ ├── 0003_hmaccalloutsettings.py │ │ │ │ ├── 0004_gaenotpserversettings.py │ │ │ │ ├── 0005_gaenotpserversettings_server_type.py │ │ │ │ ├── 0006_kycconfig.py │ │ │ │ ├── 0007_alter_kycconfig_api_field_to_user_data_map.py │ │ │ │ ├── 0008_kycconfig_provider_kycconfig_unique_domain_provider.py │ │ │ │ ├── 0009_alter_kycconfig_connection_settings.py │ │ │ │ ├── 0010_alter_kycconfig_api_field_to_user_data_map.py │ │ │ │ ├── 0011_remove_kycconfig_connection_settings.py │ │ │ │ ├── 0012_momoconfig.py │ │ │ │ ├── 0013_kycconfig_phone_number_field.py │ │ │ │ ├── 0014_kycconfig_passing_threshold.py │ │ │ │ ├── 0015_kycconfig_connection_settings_and_more.py │ │ │ │ ├── 0016_kycconfig_stores_full_name.py │ │ │ │ ├── 0017_drop_tables_for_removed_toggles.py │ │ │ │ ├── 0018_momoconfig_provider.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── payments/ │ │ │ │ ├── README.md │ │ │ │ ├── __init__.py │ │ │ │ ├── const.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── filters.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ ├── schemas.py │ │ │ │ ├── services.py │ │ │ │ ├── tables.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_services.py │ │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── static/ │ │ │ │ └── integration/ │ │ │ │ ├── css/ │ │ │ │ │ ├── dialerstyle.css │ │ │ │ │ └── pseudo-webapps.css │ │ │ │ └── js/ │ │ │ │ ├── biometric.js │ │ │ │ ├── checkbox_selection_handler.js │ │ │ │ ├── dialer/ │ │ │ │ │ ├── amazon-connect-min.js │ │ │ │ │ ├── connect-streams-min.js │ │ │ │ │ ├── dialer_utils.js │ │ │ │ │ └── domain_dialer_main.js │ │ │ │ ├── kyc/ │ │ │ │ │ ├── kyc_configure.js │ │ │ │ │ └── kyc_verify.js │ │ │ │ ├── payments/ │ │ │ │ │ └── payments_verify.js │ │ │ │ └── simprints.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ ├── integration/ │ │ │ │ │ └── biometric.html │ │ │ │ ├── kyc/ │ │ │ │ │ ├── kyc_config_base.html │ │ │ │ │ ├── kyc_verify_report.html │ │ │ │ │ └── partials/ │ │ │ │ │ ├── kyc_config_form_partial.html │ │ │ │ │ ├── kyc_export_alert.html │ │ │ │ │ ├── kyc_verify_alert.html │ │ │ │ │ ├── kyc_verify_button.html │ │ │ │ │ └── kyc_verify_status.html │ │ │ │ └── payments/ │ │ │ │ ├── partials/ │ │ │ │ │ ├── custom_error_modal.html │ │ │ │ │ ├── payments_config_form_partial.html │ │ │ │ │ ├── payments_confirmation_modal.html │ │ │ │ │ ├── payments_export_alert.html │ │ │ │ │ ├── payments_revert_verification_alert.html │ │ │ │ │ ├── payments_revert_verification_modal.html │ │ │ │ │ ├── payments_status.html │ │ │ │ │ └── payments_verify_alert.html │ │ │ │ ├── payments_config_base.html │ │ │ │ └── payments_verify_report.html │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── ip_access/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── middleware.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_config.py │ │ │ └── test_middleware.py │ │ ├── ivr/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_call_app_id.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ └── util.py │ │ │ └── urls.py │ │ ├── linked_domain/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── applications.py │ │ │ ├── auth.py │ │ │ ├── const.py │ │ │ ├── dbaccessors.py │ │ │ ├── decorators.py │ │ │ ├── exceptions.py │ │ │ ├── filters.py │ │ │ ├── keywords.py │ │ │ ├── local_accessors.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── add_app_id_to_linked_reports.py │ │ │ │ ├── add_downstream_domain.py │ │ │ │ ├── link_app_to_remote.py │ │ │ │ ├── link_apps.py │ │ │ │ ├── link_to_upstream_domain.py │ │ │ │ ├── migrate_feature_flag_domains.py │ │ │ │ └── unlink_apps.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_migrate_linked_apps.py │ │ │ │ ├── 0003_auto_20180207_0857.py │ │ │ │ ├── 0004_domainlinkhistory.py │ │ │ │ ├── 0005_migrate_linked_app_toggle.py │ │ │ │ ├── 0006_auto_20180208_1139.py │ │ │ │ ├── 0007_auto_20180215_1434.py │ │ │ │ ├── 0008_auto_20190405_1747.py │ │ │ │ ├── 0008_hidden_history.py │ │ │ │ ├── 0009_merge_20190408_1729.py │ │ │ │ ├── 0010_auto_20200622_0156.py │ │ │ │ ├── 0011_auto_20200728_2316.py │ │ │ │ ├── 0012_auto_20200929_0809.py │ │ │ │ ├── 0013_auto_20201005_2215.py │ │ │ │ ├── 0014_auto_20210503_1758.py │ │ │ │ ├── 0015_add_previews_to_choices_20210617_2010.py │ │ │ │ ├── 0016_reorder_history_model_choices.py │ │ │ │ ├── 0017_add_tableau_choice_20210720_1908.py │ │ │ │ ├── 0018_auto_20210806_1526.py │ │ │ │ ├── 0019_update_remote_base_url_help_text.py │ │ │ │ ├── 0020_auto_20211102_1501.py │ │ │ │ ├── 0021_alter_domainlinkhistory_model.py │ │ │ │ ├── 0022_alter_domainlinkhistory_model.py │ │ │ │ ├── 0023_alter_domainlinkhistory_model.py │ │ │ │ ├── 0024_alter_domainlinkhistory_model.py │ │ │ │ ├── 0025_alter_domainlinkhistory_model_choices.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── remote_accessors.py │ │ │ ├── static/ │ │ │ │ └── linked_domain/ │ │ │ │ └── js/ │ │ │ │ └── domain_links.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── linked_domain/ │ │ │ │ ├── domain_links.html │ │ │ │ └── partials/ │ │ │ │ ├── get_started.html │ │ │ │ ├── link_remote_ucr.html │ │ │ │ ├── manage_downstream_domains.html │ │ │ │ ├── pull_content.html │ │ │ │ ├── push_content.html │ │ │ │ └── push_warning_dialog.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_add_app_id_command.py │ │ │ │ ├── test_dbaccessors.py │ │ │ │ ├── test_decorators.py │ │ │ │ ├── test_delete_domain_links.py │ │ │ │ ├── test_domain_link_methods.py │ │ │ │ ├── test_helper_methods.py │ │ │ │ ├── test_link_domains.py │ │ │ │ ├── test_linked_apps.py │ │ │ │ ├── test_linked_case_claim.py │ │ │ │ ├── test_linked_domain_utils.py │ │ │ │ ├── test_linked_keywords.py │ │ │ │ ├── test_linked_ucr_expressions.py │ │ │ │ ├── test_linked_userreports.py │ │ │ │ ├── test_local_accessors.py │ │ │ │ ├── test_migrate_feature_flag_domains.py │ │ │ │ ├── test_release_manager.py │ │ │ │ ├── test_remote_auth.py │ │ │ │ ├── test_update_auto_update_rules.py │ │ │ │ ├── test_update_custom_data_fields.py │ │ │ │ ├── test_update_data_dictionary.py │ │ │ │ ├── test_update_fixtures.py │ │ │ │ ├── test_update_other_fixtures.py │ │ │ │ ├── test_update_previews.py │ │ │ │ ├── test_update_roles.py │ │ │ │ ├── test_update_tableau_server.py │ │ │ │ ├── test_update_tableau_visualization.py │ │ │ │ ├── test_update_toggles.py │ │ │ │ ├── test_updates.py │ │ │ │ ├── test_view_helpers.py │ │ │ │ └── test_views.py │ │ │ ├── ucr.py │ │ │ ├── ucr_expressions.py │ │ │ ├── updates.py │ │ │ ├── urls.py │ │ │ ├── util.py │ │ │ ├── view_helpers.py │ │ │ └── views.py │ │ ├── locations/ │ │ │ ├── __init__.py │ │ │ ├── adjacencylist.py │ │ │ ├── admin.py │ │ │ ├── analytics.py │ │ │ ├── bulk_management.py │ │ │ ├── const.py │ │ │ ├── dbaccessors.py │ │ │ ├── document_store.py │ │ │ ├── exceptions.py │ │ │ ├── fixtures.py │ │ │ ├── forms.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── fix_loc_type_reference.py │ │ │ │ ├── release_location_locks.py │ │ │ │ └── update_parent_location.py │ │ │ ├── middleware.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20160420_2105.py │ │ │ │ ├── 0003_remove_null_True.py │ │ │ │ ├── 0004_auto_20160914_2030.py │ │ │ │ ├── 0005_locationtype_include_without_expanding.py │ │ │ │ ├── 0006_locationfixtureconfiguration.py │ │ │ │ ├── 0007_add_blank_true.py │ │ │ │ ├── 0008_increase_name_max_length.py │ │ │ │ ├── 0009_add_location_user_fields.py │ │ │ │ ├── 0009_create_location_index.py │ │ │ │ ├── 0010_merge_20170511_0724.py │ │ │ │ ├── 0011_locationtype_include_only.py │ │ │ │ ├── 0012_get_location_fixture_ids.py │ │ │ │ ├── 0013_adding_indices_for_warehouse.py │ │ │ │ ├── 0013_rm_mptt_fields.py │ │ │ │ ├── 0014_merge_20180601_0608.py │ │ │ │ ├── 0015_create_related_locations.py │ │ │ │ ├── 0016_locationrelation_distance.py │ │ │ │ ├── 0017_locationrelation_last_modified.py │ │ │ │ ├── 0018_auto_20200430_1601.py │ │ │ │ ├── 0019_auto_20200924_1753.py │ │ │ │ ├── 0020_delete_locationrelation.py │ │ │ │ ├── 0021_add_fixture_queryset_case_sync_restriction.py │ │ │ │ ├── 0022_locationtype_has_users.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── permissions.py │ │ │ ├── resources/ │ │ │ │ ├── __init__.py │ │ │ │ ├── v0_1.py │ │ │ │ ├── v0_5.py │ │ │ │ └── v0_6.py │ │ │ ├── signals.py │ │ │ ├── sql_templates/ │ │ │ │ ├── get_case_owning_locations.sql │ │ │ │ └── get_location_fixture_ids.sql │ │ │ ├── static/ │ │ │ │ └── locations/ │ │ │ │ ├── js/ │ │ │ │ │ ├── filtered_download.js │ │ │ │ │ ├── import.js │ │ │ │ │ ├── location.js │ │ │ │ │ ├── location_drilldown.js │ │ │ │ │ ├── location_tree.js │ │ │ │ │ ├── location_types.js │ │ │ │ │ ├── locations.js │ │ │ │ │ ├── search.js │ │ │ │ │ └── widgets.js │ │ │ │ └── spec/ │ │ │ │ ├── data/ │ │ │ │ │ └── locations_data.js │ │ │ │ ├── location_drilldown_spec.js │ │ │ │ ├── main.js │ │ │ │ └── types_spec.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── locations/ │ │ │ │ ├── downgrade_locations.html │ │ │ │ ├── filter_and_download.html │ │ │ │ ├── location_types.html │ │ │ │ ├── manage/ │ │ │ │ │ ├── import.html │ │ │ │ │ ├── location.html │ │ │ │ │ ├── location_template.html │ │ │ │ │ ├── locations.html │ │ │ │ │ └── partials/ │ │ │ │ │ ├── autocomplete_select_widget.html │ │ │ │ │ ├── bulk_upload.html │ │ │ │ │ ├── drilldown_location_widget.html │ │ │ │ │ ├── loc_type_widget.html │ │ │ │ │ ├── locations_upload_status.html │ │ │ │ │ └── parent_loc_widget.html │ │ │ │ └── spec/ │ │ │ │ └── mocha.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── expand_from_county_at_city.xml │ │ │ │ │ ├── expand_from_root.xml │ │ │ │ │ ├── expand_from_root_flat.xml │ │ │ │ │ ├── expand_from_root_to_county.xml │ │ │ │ │ ├── expand_to_county.xml │ │ │ │ │ ├── expand_to_county_from_city.xml │ │ │ │ │ ├── expand_to_county_from_state.xml │ │ │ │ │ ├── forked_expand_to_county.xml │ │ │ │ │ ├── include_without_expanding.xml │ │ │ │ │ ├── include_without_expanding_same_level.xml │ │ │ │ │ ├── index_location_fixtures.xml │ │ │ │ │ ├── multiple_locations.xml │ │ │ │ │ ├── related_location_flat_fixture.xml │ │ │ │ │ ├── related_location_with_distance_flat_fixture.xml │ │ │ │ │ └── simple_fixture.xml │ │ │ │ ├── test_api_resources.py │ │ │ │ ├── test_bulk_management.py │ │ │ │ ├── test_change_administrative_status.py │ │ │ │ ├── test_dbaccessors.py │ │ │ │ ├── test_export.py │ │ │ │ ├── test_location_expressions.py │ │ │ │ ├── test_location_fixtures.py │ │ │ │ ├── test_location_groups.py │ │ │ │ ├── test_location_queries.py │ │ │ │ ├── test_location_safety.py │ │ │ │ ├── test_location_set.py │ │ │ │ ├── test_location_types.py │ │ │ │ ├── test_location_utils.py │ │ │ │ ├── test_locations.py │ │ │ │ ├── test_permissions.py │ │ │ │ ├── test_products_at_location.py │ │ │ │ ├── test_site_code.py │ │ │ │ ├── test_util.py │ │ │ │ ├── test_views.py │ │ │ │ └── util.py │ │ │ ├── tree_utils.py │ │ │ ├── ucr_expressions.py │ │ │ ├── urls.py │ │ │ ├── util.py │ │ │ └── views.py │ │ ├── mobile_auth/ │ │ │ ├── __init__.py │ │ │ ├── _design/ │ │ │ │ └── views/ │ │ │ │ └── key_records/ │ │ │ │ └── map.js │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_delete_sqlmobileauthkeyrecord.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tests.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ ├── views.py │ │ │ └── xml.py │ │ ├── mocha/ │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── static/ │ │ │ │ └── mocha/ │ │ │ │ └── js/ │ │ │ │ └── main.js │ │ │ ├── templates/ │ │ │ │ └── mocha/ │ │ │ │ └── base.html │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── notifications/ │ │ │ ├── __init__.py │ │ │ ├── forms.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_squashed_0003_auto_20160504_2049.py │ │ │ │ ├── 0002_auto_20160505_2058.py │ │ │ │ ├── 0003_lastseennotification.py │ │ │ │ ├── 0004_auto_20160830_2002.py │ │ │ │ ├── 0005_domain_specific_notifications.py │ │ │ │ ├── 0006_add_billing_type.py │ │ │ │ ├── 0007_auto_20170704_1643.py │ │ │ │ ├── 0008_add_notification_types.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── notifications/ │ │ │ │ ├── js/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── notifications_service.js │ │ │ │ │ │ └── notifications_service_main.js │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── notifications_service.js │ │ │ │ │ │ └── notifications_service_main.js │ │ │ │ │ └── manage_notifications.js │ │ │ │ └── spec/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── NotificationsService.spec.mo.js │ │ │ │ │ └── main.js │ │ │ │ └── bootstrap5/ │ │ │ │ ├── NotificationsService.spec.mo.js │ │ │ │ └── main.js │ │ │ ├── templates/ │ │ │ │ └── notifications/ │ │ │ │ ├── manage_notifications.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ └── global_notifications.html │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ └── global_notifications.html │ │ │ │ └── spec/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ └── mocha.html │ │ │ │ └── bootstrap5/ │ │ │ │ └── mocha.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_notifications.py │ │ │ │ └── test_views.py │ │ │ ├── ui_notify.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── ota/ │ │ │ ├── README.txt │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── case_restore.py │ │ │ ├── decorators.py │ │ │ ├── exceptions.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── profile_restore.py │ │ │ │ └── time_restore.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_alter_db_index.py │ │ │ │ ├── 0003_add_serial_id_model.py │ │ │ │ ├── 0004_mobilerecoverymeasure.py │ │ │ │ ├── 0005_rm_max_length_from_integer.py │ │ │ │ ├── 0006_one_reinstall_measure.py │ │ │ │ ├── 0007_update_blob_paths.py │ │ │ │ ├── 0008_auto_20190108_1808.py │ │ │ │ ├── 0009_devicelogrequest.py │ │ │ │ ├── 0010_alter_devicelogrequest.py │ │ │ │ ├── 0011_remove_devicelogrequest_deviceid.py │ │ │ │ ├── 0012_integritysamplepercentage.py │ │ │ │ ├── 0013_alter_serialidbucket_index_together.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── rate_limiter.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_app_aware_restore.py │ │ │ │ ├── test_auth.py │ │ │ │ ├── test_case_fixture_view.py │ │ │ │ ├── test_case_restore.py │ │ │ │ ├── test_claim.py │ │ │ │ ├── test_demo_user.py │ │ │ │ ├── test_digest_restore.py │ │ │ │ ├── test_formplayer_restore.py │ │ │ │ ├── test_heartbeat.py │ │ │ │ ├── test_restore_user_check.py │ │ │ │ ├── test_search_claim_endpoints.py │ │ │ │ ├── test_serial_id.py │ │ │ │ └── test_utils.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── products/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── bulk.py │ │ │ ├── fixtures.py │ │ │ ├── forms.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── products/ │ │ │ │ └── manage/ │ │ │ │ ├── partials/ │ │ │ │ │ └── product_upload_status.html │ │ │ │ ├── product.html │ │ │ │ └── products.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_products.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── programs/ │ │ │ ├── __init__.py │ │ │ ├── fixtures.py │ │ │ ├── forms.py │ │ │ ├── models.py │ │ │ ├── templates/ │ │ │ │ └── programs/ │ │ │ │ └── manage/ │ │ │ │ ├── program.html │ │ │ │ └── programs.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_programs.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── receiverwrapper/ │ │ │ ├── __init__.py │ │ │ ├── auth.py │ │ │ ├── exceptions.py │ │ │ ├── rate_limiter.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── bare_form.xml │ │ │ │ │ ├── case_ledger_form.xml │ │ │ │ │ ├── case_ledger_form_2.xml │ │ │ │ │ ├── demo_mode_simple_form.xml │ │ │ │ │ ├── device_log.xml │ │ │ │ │ ├── expected_form_sql.json │ │ │ │ │ ├── form_data_with_non_bmp_chars.xml │ │ │ │ │ ├── form_with_case.xml │ │ │ │ │ ├── form_with_demo_case.xml │ │ │ │ │ ├── invalid_form_xml.xml │ │ │ │ │ ├── missing_xmlns.xml │ │ │ │ │ ├── namespace_in_meta.xml │ │ │ │ │ ├── simple_form.xml │ │ │ │ │ ├── simple_form_before_2.44.0.xml │ │ │ │ │ ├── simple_form_edited.xml │ │ │ │ │ ├── suspicious_form.abc │ │ │ │ │ └── user_registration.xml │ │ │ │ ├── test_app_id.py │ │ │ │ ├── test_audit_logging.py │ │ │ │ ├── test_auth.py │ │ │ │ ├── test_submissions.py │ │ │ │ ├── test_submit_errors.py │ │ │ │ └── test_util.py │ │ │ ├── urls.py │ │ │ ├── util.py │ │ │ └── views.py │ │ ├── registration/ │ │ │ ├── __init__.py │ │ │ ├── forms.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_alter_request_ip.py │ │ │ │ ├── 0003_populate_sqlregistrationrequest.py │ │ │ │ ├── 0004_rename_sqlregistrationrequest.py │ │ │ │ ├── 0005_asyncsignuprequest.py │ │ │ │ ├── 0006_selfsignupworkflow.py │ │ │ │ ├── 0007_alter_selfsignupworkflow_subscribed_edition.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── rate_limiter.py │ │ │ ├── static/ │ │ │ │ └── registration/ │ │ │ │ ├── css/ │ │ │ │ │ └── style.css │ │ │ │ └── js/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── login.js │ │ │ │ │ ├── password.js │ │ │ │ │ └── user_login_form.js │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── login.js │ │ │ │ │ ├── password.js │ │ │ │ │ └── user_login_form.js │ │ │ │ ├── new_user.ko.js │ │ │ │ ├── password_reset_confirm.js │ │ │ │ ├── password_reset_form.js │ │ │ │ └── register_new_user.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── registration/ │ │ │ │ ├── base.html │ │ │ │ ├── confirmation_error.html │ │ │ │ ├── confirmation_resend.html │ │ │ │ ├── confirmation_sent.html │ │ │ │ ├── confirmation_waiting.html │ │ │ │ ├── domain_request.html │ │ │ │ ├── email/ │ │ │ │ │ ├── base_templates/ │ │ │ │ │ │ ├── _base.html │ │ │ │ │ │ └── _base_container_project_logo.html │ │ │ │ │ ├── confirm_account.html │ │ │ │ │ ├── confirm_account.txt │ │ │ │ │ ├── confirm_account_reminder.html │ │ │ │ │ ├── confirm_account_reminder.txt │ │ │ │ │ ├── mobile_signup_reminder.html │ │ │ │ │ ├── mobile_signup_reminder.txt │ │ │ │ │ ├── mobile_worker_confirm_account.html │ │ │ │ │ ├── mobile_worker_confirm_account.txt │ │ │ │ │ ├── password_reset_email_hq.html │ │ │ │ │ └── password_reset_subject_hq.txt │ │ │ │ ├── partials/ │ │ │ │ │ ├── confirmation_waiting_actions.html │ │ │ │ │ ├── icon_stack.html │ │ │ │ │ └── register_new_user/ │ │ │ │ │ ├── choose_cloud_location.html │ │ │ │ │ ├── chosen_cloud_location.html │ │ │ │ │ ├── server_errors.html │ │ │ │ │ ├── submit_errors.html │ │ │ │ │ ├── submit_info.html │ │ │ │ │ └── success.html │ │ │ │ └── register_new_user.html │ │ │ ├── templatetags/ │ │ │ │ ├── __init__.py │ │ │ │ └── field_tags.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_utils.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ ├── validation.py │ │ │ └── views.py │ │ ├── registry/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── app_config.py │ │ │ ├── exceptions.py │ │ │ ├── fixtures.py │ │ │ ├── helper.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_registry_slug_globally_unique.py │ │ │ │ ├── 0003_schema_validation.py │ │ │ │ ├── 0004_auto_20210907_1459.py │ │ │ │ ├── 0005_auto_20210923_1036.py │ │ │ │ ├── 0006_auto_20211011_1356.py │ │ │ │ ├── 0007_delete_registrypermission.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── notifications.py │ │ │ ├── schema.py │ │ │ ├── signals.py │ │ │ ├── static/ │ │ │ │ └── registry/ │ │ │ │ └── js/ │ │ │ │ ├── registry_actions.js │ │ │ │ ├── registry_edit.js │ │ │ │ ├── registry_list.js │ │ │ │ ├── registry_logs.js │ │ │ │ └── registry_text.js │ │ │ ├── templates/ │ │ │ │ └── registry/ │ │ │ │ ├── email/ │ │ │ │ │ ├── access_granted.html │ │ │ │ │ ├── access_granted.txt │ │ │ │ │ ├── invitation.html │ │ │ │ │ ├── invitation.txt │ │ │ │ │ ├── invitation_response.html │ │ │ │ │ └── invitation_response.txt │ │ │ │ ├── partials/ │ │ │ │ │ └── audit_logs.html │ │ │ │ ├── registry_edit.html │ │ │ │ └── registry_list.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_fixtures.py │ │ │ │ ├── test_helper.py │ │ │ │ ├── test_logging.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_permissions.py │ │ │ │ ├── test_schema.py │ │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── reminders/ │ │ │ ├── __init__.py │ │ │ ├── custom_recipients.py │ │ │ ├── forms.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ └── run_reminder_queue.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── reminders/ │ │ │ │ └── js/ │ │ │ │ ├── keyword.js │ │ │ │ └── keywords_list.js │ │ │ ├── templates/ │ │ │ │ └── reminders/ │ │ │ │ ├── keyword.html │ │ │ │ ├── keyword_list.html │ │ │ │ └── partials/ │ │ │ │ ├── modal_edit.html │ │ │ │ └── record_list_widget.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_util.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ ├── util.py │ │ │ └── views.py │ │ ├── reports/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── analytics/ │ │ │ │ ├── __init__.py │ │ │ │ ├── couchaccessors.py │ │ │ │ ├── dbaccessors.py │ │ │ │ └── esaccessors.py │ │ │ ├── api.py │ │ │ ├── app_config.py │ │ │ ├── basic.py │ │ │ ├── cache.py │ │ │ ├── casedetails/ │ │ │ │ ├── __init__.py │ │ │ │ ├── caseforms.py │ │ │ │ └── header.py │ │ │ ├── commtrack/ │ │ │ │ ├── __init__.py │ │ │ │ ├── const.py │ │ │ │ ├── data_sources.py │ │ │ │ ├── standard.py │ │ │ │ └── util.py │ │ │ ├── const.py │ │ │ ├── datatables/ │ │ │ │ ├── DTSortDirection.py │ │ │ │ ├── DTSortType.py │ │ │ │ └── __init__.py │ │ │ ├── daterange.py │ │ │ ├── dispatcher.py │ │ │ ├── display.py │ │ │ ├── exceptions.py │ │ │ ├── exportfilters.py │ │ │ ├── extension_points.py │ │ │ ├── filters/ │ │ │ │ ├── __init__.py │ │ │ │ ├── api.py │ │ │ │ ├── base.py │ │ │ │ ├── case_list.py │ │ │ │ ├── checkbox.py │ │ │ │ ├── commtrack.py │ │ │ │ ├── controllers.py │ │ │ │ ├── dates.py │ │ │ │ ├── devicelog.py │ │ │ │ ├── fixtures.py │ │ │ │ ├── forms.py │ │ │ │ ├── location.py │ │ │ │ ├── select.py │ │ │ │ ├── simple.py │ │ │ │ ├── urls.py │ │ │ │ └── users.py │ │ │ ├── formdetails/ │ │ │ │ ├── __init__.py │ │ │ │ ├── exceptions.py │ │ │ │ └── readable.py │ │ │ ├── forms.py │ │ │ ├── generic.py │ │ │ ├── graph_models.py │ │ │ ├── lookup.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── prepare_projects_for_case_list_explorer.py │ │ │ │ ├── project_stats_report.py │ │ │ │ └── update_custom_recipient_type.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20171121_1803.py │ │ │ │ ├── 0003_multiselect_report_filters_are_lists.py │ │ │ │ ├── 0004_tableauserver_tableauvisualization.py │ │ │ │ ├── 0005_auto_20210611_1358.py │ │ │ │ ├── 0006_remove_tableauserver_allow_domain_username_override.py │ │ │ │ ├── 0007_tableauvisualization_upstream_id.py │ │ │ │ ├── 0008_tableauvisualization_title.py │ │ │ │ ├── 0009_remove_tableauserver_domain_username.py │ │ │ │ ├── 0010_delete_reportssidebarordering.py │ │ │ │ ├── 0011_tableauconnectedapp.py │ │ │ │ ├── 0012_tableaugroup_tableauuser.py │ │ │ │ ├── 0013_tableau_various_20221205.py │ │ │ │ ├── 0014_querystringhash.py │ │ │ │ ├── 0015_tableauserver_allowed_tableau_groups.py │ │ │ │ ├── 0016_alter_tableauuser_role.py │ │ │ │ ├── 0017_alter_tableauuser_tableau_user_id.py │ │ │ │ ├── 0018_alter_tableauuser_role.py │ │ │ │ ├── 0019_tableauvisualization_location_safe.py │ │ │ │ ├── 0020_tableauserver_get_reports_using_role.py │ │ │ │ ├── 0021_tableauconnectedapp_use_aes_cbc_encryption.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── signals.py │ │ │ ├── sqlreport.py │ │ │ ├── standard/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cases/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── basic.py │ │ │ │ │ ├── case_data.py │ │ │ │ │ ├── case_list_explorer.py │ │ │ │ │ ├── data_sources.py │ │ │ │ │ ├── duplicate_cases.py │ │ │ │ │ ├── filters.py │ │ │ │ │ └── utils.py │ │ │ │ ├── deployments.py │ │ │ │ ├── forms/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── filters.py │ │ │ │ │ └── reports.py │ │ │ │ ├── inspect.py │ │ │ │ ├── message_event_display.py │ │ │ │ ├── monitoring.py │ │ │ │ ├── project_health.py │ │ │ │ ├── sms.py │ │ │ │ ├── tableau.py │ │ │ │ └── users/ │ │ │ │ ├── __init__.py │ │ │ │ └── reports.py │ │ │ ├── static/ │ │ │ │ └── reports/ │ │ │ │ ├── css/ │ │ │ │ │ ├── daterange-font-color.css │ │ │ │ │ ├── daterangepicker-bs2.css │ │ │ │ │ ├── maps.css │ │ │ │ │ └── timing-profile.css │ │ │ │ ├── js/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── aggregate_user_status.js │ │ │ │ │ │ ├── application_status.js │ │ │ │ │ │ ├── async.js │ │ │ │ │ │ ├── base.js │ │ │ │ │ │ ├── case_details.js │ │ │ │ │ │ ├── data_corrections.js │ │ │ │ │ │ ├── datatables_config.js │ │ │ │ │ │ ├── edit_scheduled_report.js │ │ │ │ │ │ ├── form_data_main.js │ │ │ │ │ │ ├── hq_report.js │ │ │ │ │ │ ├── maps_utils.js │ │ │ │ │ │ ├── project_health_dashboard.js │ │ │ │ │ │ ├── readable_form.js │ │ │ │ │ │ ├── report_config_models.js │ │ │ │ │ │ ├── saved_reports_main.js │ │ │ │ │ │ ├── single_form.js │ │ │ │ │ │ ├── standard_hq_report.js │ │ │ │ │ │ ├── submission_error_report.js │ │ │ │ │ │ └── tabular.js │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── aggregate_user_status.js │ │ │ │ │ │ ├── application_status.js │ │ │ │ │ │ ├── async.js │ │ │ │ │ │ ├── base.js │ │ │ │ │ │ ├── case_details.js │ │ │ │ │ │ ├── data_corrections.js │ │ │ │ │ │ ├── datatables_config.js │ │ │ │ │ │ ├── edit_scheduled_report.js │ │ │ │ │ │ ├── form_data_main.js │ │ │ │ │ │ ├── hq_report.js │ │ │ │ │ │ ├── maps_utils.js │ │ │ │ │ │ ├── project_health_dashboard.js │ │ │ │ │ │ ├── readable_form.js │ │ │ │ │ │ ├── report_config_models.js │ │ │ │ │ │ ├── saved_reports_main.js │ │ │ │ │ │ ├── single_form.js │ │ │ │ │ │ ├── standard_hq_report.js │ │ │ │ │ │ ├── submission_error_report.js │ │ │ │ │ │ └── tabular.js │ │ │ │ │ ├── case_activity.js │ │ │ │ │ ├── charts/ │ │ │ │ │ │ ├── main.js │ │ │ │ │ │ ├── multibar_chart.js │ │ │ │ │ │ └── pie_chart.js │ │ │ │ │ ├── datepicker.js │ │ │ │ │ ├── filters/ │ │ │ │ │ │ ├── advanced_forms_options.js │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ ├── drilldown_options.js │ │ │ │ │ │ │ └── main.js │ │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ │ ├── drilldown_options.js │ │ │ │ │ │ │ └── main.js │ │ │ │ │ │ ├── button_group.js │ │ │ │ │ │ ├── case_list_explorer.js │ │ │ │ │ │ ├── case_list_explorer_knockout_bindings.js │ │ │ │ │ │ ├── phone_number.js │ │ │ │ │ │ ├── schedule_instance.js │ │ │ │ │ │ └── select2s.js │ │ │ │ │ ├── inspect_data.js │ │ │ │ │ ├── scheduled_reports_list.js │ │ │ │ │ ├── tableau.js │ │ │ │ │ ├── user_history.js │ │ │ │ │ └── util.js │ │ │ │ └── v2/ │ │ │ │ └── js/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ └── datagrid.js │ │ │ │ ├── bootstrap5/ │ │ │ │ │ └── datagrid.js │ │ │ │ ├── context.js │ │ │ │ └── datagrid/ │ │ │ │ ├── binding_handlers.js │ │ │ │ ├── column_filters.js │ │ │ │ ├── columns.js │ │ │ │ ├── data_models.js │ │ │ │ └── report_filters.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── reports/ │ │ │ │ ├── async/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── aggregate_user_status.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── filters.html │ │ │ │ │ │ └── project_health_dashboard.html │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── aggregate_user_status.html │ │ │ │ │ │ ├── basic.html │ │ │ │ │ │ ├── default.html │ │ │ │ │ │ ├── filters.html │ │ │ │ │ │ └── project_health_dashboard.html │ │ │ │ │ ├── email_report.html │ │ │ │ │ ├── partials/ │ │ │ │ │ │ ├── aggregate_user_status/ │ │ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ │ │ └── chart_panel.html │ │ │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ │ │ └── chart_panel.html │ │ │ │ │ │ └── tabular_cell.html │ │ │ │ │ └── print_report.html │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── base_template.html │ │ │ │ │ ├── edit_scheduled_report.html │ │ │ │ │ ├── notification_unsubscribe.html │ │ │ │ │ ├── reports_home.html │ │ │ │ │ ├── tableau_template.html │ │ │ │ │ ├── tableau_visualization.html │ │ │ │ │ └── tabular.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── base_template.html │ │ │ │ │ ├── edit_scheduled_report.html │ │ │ │ │ ├── notification_unsubscribe.html │ │ │ │ │ ├── reports_home.html │ │ │ │ │ ├── tableau_template.html │ │ │ │ │ ├── tableau_visualization.html │ │ │ │ │ └── tabular.html │ │ │ │ ├── datatables/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ └── column.html │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ └── column.html │ │ │ │ ├── email/ │ │ │ │ │ └── report_list.html │ │ │ │ ├── filters/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── base.html │ │ │ │ │ │ ├── checkbox.html │ │ │ │ │ │ ├── date_selector.html │ │ │ │ │ │ ├── daterange.html │ │ │ │ │ │ ├── datespan.html │ │ │ │ │ │ ├── devicelog_tags.html │ │ │ │ │ │ ├── drilldown_options.html │ │ │ │ │ │ ├── explorer_columns.html │ │ │ │ │ │ ├── filter_users.html │ │ │ │ │ │ ├── form_app_module_drilldown.html │ │ │ │ │ │ ├── location_async.html │ │ │ │ │ │ ├── month_datespan.html │ │ │ │ │ │ ├── multi_option.html │ │ │ │ │ │ ├── optional_daterange.html │ │ │ │ │ │ ├── optional_month_year.html │ │ │ │ │ │ ├── sensitive_columns.html │ │ │ │ │ │ ├── simple.html │ │ │ │ │ │ ├── single_option.html │ │ │ │ │ │ ├── submit_error_types.html │ │ │ │ │ │ ├── textarea_with_select.html │ │ │ │ │ │ ├── time_input.html │ │ │ │ │ │ └── xpath_textarea.html │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── base.html │ │ │ │ │ │ ├── checkbox.html │ │ │ │ │ │ ├── date_selector.html │ │ │ │ │ │ ├── daterange.html │ │ │ │ │ │ ├── datespan.html │ │ │ │ │ │ ├── devicelog_tags.html │ │ │ │ │ │ ├── drilldown_options.html │ │ │ │ │ │ ├── explorer_columns.html │ │ │ │ │ │ ├── filter_users.html │ │ │ │ │ │ ├── form_app_module_drilldown.html │ │ │ │ │ │ ├── location_async.html │ │ │ │ │ │ ├── month_datespan.html │ │ │ │ │ │ ├── multi_option.html │ │ │ │ │ │ ├── optional_daterange.html │ │ │ │ │ │ ├── optional_month_year.html │ │ │ │ │ │ ├── sensitive_columns.html │ │ │ │ │ │ ├── simple.html │ │ │ │ │ │ ├── single_option.html │ │ │ │ │ │ ├── submit_error_types.html │ │ │ │ │ │ ├── textarea_with_select.html │ │ │ │ │ │ └── xpath_textarea.html │ │ │ │ │ ├── hidden.html │ │ │ │ │ └── partials/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ └── fuzzy_checkbox.html │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ └── fuzzy_checkbox.html │ │ │ │ ├── form/ │ │ │ │ │ └── partials/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── readable_form.html │ │ │ │ │ │ ├── single_form.html │ │ │ │ │ │ └── single_form_tree.html │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── readable_form.html │ │ │ │ │ │ ├── single_form.html │ │ │ │ │ │ └── single_form_tree.html │ │ │ │ │ └── single_form_label.html │ │ │ │ ├── messaging/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── event_detail.html │ │ │ │ │ │ └── survey_detail.html │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ ├── event_detail.html │ │ │ │ │ └── survey_detail.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── bulk_modal.html │ │ │ │ │ │ ├── data_corrections_modal.html │ │ │ │ │ │ ├── description.html │ │ │ │ │ │ ├── filter_panel.html │ │ │ │ │ │ ├── form_property_table.html │ │ │ │ │ │ ├── save_reports_modal.html │ │ │ │ │ │ └── scheduled_reports_table.html │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── bulk_modal.html │ │ │ │ │ │ ├── data_corrections_modal.html │ │ │ │ │ │ ├── description.html │ │ │ │ │ │ ├── filter_panel.html │ │ │ │ │ │ ├── form_property_table.html │ │ │ │ │ │ ├── save_reports_modal.html │ │ │ │ │ │ └── scheduled_reports_table.html │ │ │ │ │ ├── case_property_table.html │ │ │ │ │ ├── filters_css.html │ │ │ │ │ ├── graphs/ │ │ │ │ │ │ ├── multibar_chart.html │ │ │ │ │ │ └── pie_chart.html │ │ │ │ │ └── privacy_disclaimer.html │ │ │ │ ├── project_health/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── project_health_email.html │ │ │ │ │ │ └── user_details.html │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── project_health_email.html │ │ │ │ │ │ └── user_details.html │ │ │ │ │ └── partials/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── user_list.html │ │ │ │ │ │ └── users_tables.html │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ ├── user_list.html │ │ │ │ │ └── users_tables.html │ │ │ │ ├── report_email.html │ │ │ │ ├── report_email_content.html │ │ │ │ ├── reportdata/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── case_attachments.html │ │ │ │ │ │ ├── case_data.html │ │ │ │ │ │ ├── form_data.html │ │ │ │ │ │ └── view_form_attachment.html │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ ├── case_attachments.html │ │ │ │ │ ├── case_data.html │ │ │ │ │ ├── form_data.html │ │ │ │ │ └── view_form_attachment.html │ │ │ │ └── standard/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── base_template.html │ │ │ │ │ └── submission_error_report.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── base_template.html │ │ │ │ │ └── submission_error_report.html │ │ │ │ └── partials/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── filter_panel.html │ │ │ │ │ └── user_history_changes.html │ │ │ │ └── bootstrap5/ │ │ │ │ ├── filter_panel.html │ │ │ │ └── user_history_changes.html │ │ │ ├── templatetags/ │ │ │ │ ├── __init__.py │ │ │ │ └── xform_tags.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── commtrack/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_datasources.py │ │ │ │ ├── data/ │ │ │ │ │ └── case_list_report_data.py │ │ │ │ ├── edit_forms/ │ │ │ │ │ └── bad_calculate.xml │ │ │ │ ├── readable_forms/ │ │ │ │ │ ├── mismatched_group_hierarchy.py2.result.yml │ │ │ │ │ ├── mismatched_group_hierarchy.py3.result.yml │ │ │ │ │ ├── mismatched_group_hierarchy.submission.json │ │ │ │ │ ├── mismatched_group_hierarchy.xform.xml │ │ │ │ │ ├── top_level_refless_group.py2.result.yml │ │ │ │ │ ├── top_level_refless_group.py3.result.yml │ │ │ │ │ ├── top_level_refless_group.submission.json │ │ │ │ │ └── top_level_refless_group.xform.xml │ │ │ │ ├── sql_fixture.py │ │ │ │ ├── sql_reports.py │ │ │ │ ├── standard/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── cases/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── filters/ │ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ │ └── test_duplicate_case_rule_filter.py │ │ │ │ │ │ └── test_utils.py │ │ │ │ │ ├── test_deployments.py │ │ │ │ │ └── test_mixins.py │ │ │ │ ├── test_analytics.py │ │ │ │ ├── test_application_status_report.py │ │ │ │ ├── test_cache.py │ │ │ │ ├── test_case_copy.py │ │ │ │ ├── test_case_data.py │ │ │ │ ├── test_case_display.py │ │ │ │ ├── test_case_list_explorer_report.py │ │ │ │ ├── test_case_list_report.py │ │ │ │ ├── test_datatables.py │ │ │ │ ├── test_datatables_columns.py │ │ │ │ ├── test_daterange.py │ │ │ │ ├── test_dispatcher.py │ │ │ │ ├── test_display.py │ │ │ │ ├── test_enterprise_user_filter.py │ │ │ │ ├── test_esaccessors.py │ │ │ │ ├── test_export_api.py │ │ │ │ ├── test_export_response.py │ │ │ │ ├── test_filters.py │ │ │ │ ├── test_form_export.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_generic.py │ │ │ │ ├── test_message_event_display.py │ │ │ │ ├── test_message_log_report.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_phone_number_report.py │ │ │ │ ├── test_project_health.py │ │ │ │ ├── test_readable_formdata.py │ │ │ │ ├── test_report_api.py │ │ │ │ ├── test_scheduled_reports.py │ │ │ │ ├── test_sql_reports.py │ │ │ │ ├── test_supply_accessors.py │ │ │ │ ├── test_tableau_api_session.py │ │ │ │ ├── test_tableau_api_util.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_time_and_date_manipulations.py │ │ │ │ ├── test_util.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ ├── util.py │ │ │ ├── view_helpers.py │ │ │ └── views.py │ │ ├── reports_core/ │ │ │ ├── __init__.py │ │ │ ├── exceptions.py │ │ │ ├── filters.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── reports_core/ │ │ │ │ ├── js/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ └── maps.js │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ └── maps.js │ │ │ │ │ ├── charts.js │ │ │ │ │ └── choice_list_utils.js │ │ │ │ └── spec/ │ │ │ │ ├── choice_list_utils_spec.js │ │ │ │ └── main.js │ │ │ ├── templates/ │ │ │ │ └── reports_core/ │ │ │ │ ├── filters/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── choice_list_filter.html │ │ │ │ │ │ ├── datespan_filter.html │ │ │ │ │ │ ├── dynamic_choice_list.html │ │ │ │ │ │ ├── filter_base.html │ │ │ │ │ │ ├── location_async.html │ │ │ │ │ │ ├── numeric_filter.html │ │ │ │ │ │ └── quarter_filter.html │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── choice_list_filter.html │ │ │ │ │ │ ├── datespan_filter.html │ │ │ │ │ │ ├── dynamic_choice_list.html │ │ │ │ │ │ ├── filter_base.html │ │ │ │ │ │ ├── location_async.html │ │ │ │ │ │ ├── numeric_filter.html │ │ │ │ │ │ └── quarter_filter.html │ │ │ │ │ └── pre_filter.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ └── filter_panel.html │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ └── filter_panel.html │ │ │ │ └── spec/ │ │ │ │ └── choiceListUtils/ │ │ │ │ └── mocha.html │ │ │ └── templatetags/ │ │ │ ├── __init__.py │ │ │ └── reports_core_tags.py │ │ ├── saved_reports/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── exceptions.py │ │ │ ├── logging.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── daylight_savings.py │ │ │ │ ├── find_saved_reports_with_slug.py │ │ │ │ └── test_reports.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_scheduledreportlog.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── scheduled.py │ │ │ ├── tasks.py │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ ├── end_to_end/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_scheduled_reports.py │ │ │ ├── test_checkpointing.py │ │ │ ├── test_daylight_savings.py │ │ │ ├── test_logging.py │ │ │ ├── test_minute_mark_arithmetic.py │ │ │ ├── test_models.py │ │ │ ├── test_scheduled_reports.py │ │ │ └── test_tasks.py │ │ ├── settings/ │ │ │ ├── __init__.py │ │ │ ├── exceptions.py │ │ │ ├── forms.py │ │ │ ├── languages.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ └── create_test_qr_codes.py │ │ │ ├── static/ │ │ │ │ └── settings/ │ │ │ │ └── js/ │ │ │ │ ├── change_my_password.js │ │ │ │ ├── edit_my_account.js │ │ │ │ └── user_api_keys.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── settings/ │ │ │ │ ├── change_my_password.html │ │ │ │ ├── edit_my_account.html │ │ │ │ ├── email/ │ │ │ │ │ ├── about_to_expire_api_key.html │ │ │ │ │ └── about_to_expire_api_key.txt │ │ │ │ ├── enable_superuser.html │ │ │ │ ├── my_projects.html │ │ │ │ └── user_api_keys.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_languages.py │ │ │ │ ├── test_utils.py │ │ │ │ ├── test_validators.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ ├── validators.py │ │ │ └── views.py │ │ ├── sms/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── change_publishers.py │ │ │ ├── const.py │ │ │ ├── document_stores.py │ │ │ ├── event_handlers.py │ │ │ ├── filters.py │ │ │ ├── forms.py │ │ │ ├── handlers/ │ │ │ │ ├── __init__.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── fallback.py │ │ │ │ ├── form_session.py │ │ │ │ ├── forwarding.py │ │ │ │ └── keyword.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── backfill_sms_subevent_date.py │ │ │ │ ├── change_phonenumber_backend.py │ │ │ │ ├── generate_fake_sms_data.py │ │ │ │ ├── requeue_outgoing_messages.py │ │ │ │ └── run_sms_queue.py │ │ │ ├── messages.py │ │ │ ├── migration_status.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_add_selfregistrationinvitation.py │ │ │ │ ├── 0003_add_backend_models.py │ │ │ │ ├── 0004_add_sqlivrbackend_sqlkookoobackend.py │ │ │ │ ├── 0005_remove_mobilebackend_unique_constraint.py │ │ │ │ ├── 0006_add_migrationstatus.py │ │ │ │ ├── 0007_check_for_backend_migration.py │ │ │ │ ├── 0008_add_backend_mapping_unique_constraint.py │ │ │ │ ├── 0009_check_for_domain_default_backend_migration.py │ │ │ │ ├── 0010_update_sqlmobilebackend_couch_id.py │ │ │ │ ├── 0011_alter_inbound_api_key.py │ │ │ │ ├── 0012_add_lastreadmessage_expectedcallback.py │ │ │ │ ├── 0013_check_for_log_migration.py │ │ │ │ ├── 0014_add_queuedsms.py │ │ │ │ ├── 0015_rename_phonenumber_to_phoneblacklist.py │ │ │ │ ├── 0016_add_phonenumber.py │ │ │ │ ├── 0017_update_phoneblacklist.py │ │ │ │ ├── 0018_check_for_phone_number_migration.py │ │ │ │ ├── 0019_add_new_registration_invitation_fields.py │ │ │ │ ├── 0020_remove_selfregistrationinvitation_odk_url.py │ │ │ │ ├── 0021_add_keyword.py │ │ │ │ ├── 0022_keyword_last_modified.py │ │ │ │ ├── 0023_check_for_keyword_migration.py │ │ │ │ ├── 0024_add_is_two_way.py │ │ │ │ ├── 0025_add_custom_metadata.py │ │ │ │ ├── 0026_add_messagingsubevent_case_id_index.py │ │ │ │ ├── 0027_ivorycoastmtnbackend.py │ │ │ │ ├── 0028_messagingevent_source.py │ │ │ │ ├── 0029_daily_outbound_sms_limit_reached.py │ │ │ │ ├── 0030_karixbackend.py │ │ │ │ ├── 0031_airteltclbackend.py │ │ │ │ ├── 0032_couch_id_blank.py │ │ │ │ ├── 0033_starfishbackend.py │ │ │ │ ├── 0034_auto_20191007_0756_noop.py │ │ │ │ ├── 0036_index_cleanup.py │ │ │ │ ├── 0037_app_id.py │ │ │ │ ├── 0038_sqlturnwhatsappbackend.py │ │ │ │ ├── 0039_trumpia_gateway.py │ │ │ │ ├── 0040_remove_karix_backend.py │ │ │ │ ├── 0041_email.py │ │ │ │ ├── 0042_infobip_pinpoint_backends.py │ │ │ │ ├── 0043_auto_20200622_1243.py │ │ │ │ ├── 0044_opt_keywords.py │ │ │ │ ├── 0045_auto_20200902_0938.py │ │ │ │ ├── 0046_delete_selfregistrationinvitation.py │ │ │ │ ├── 0046_keywords_linked_domain_fields.py │ │ │ │ ├── 0047_merge_20200918_1641.py │ │ │ │ ├── 0048_delete_sqlicdsbackend.py │ │ │ │ ├── 0049_auto_enable_turnio_ff.py │ │ │ │ ├── 0050_sms_email_date_modified.py │ │ │ │ ├── 0051_reset_modified_on.py │ │ │ │ ├── 0052_messagingsubevent_date_last_activity.py │ │ │ │ ├── 0053_alter_messagingsubevent_date_last_activity.py │ │ │ │ ├── 0054_messagingsubevent_domain.py │ │ │ │ ├── 0055_messagingsubevent_index_domain_date_id.py │ │ │ │ ├── 0056_backfill_sms_event_date.py │ │ │ │ ├── 0057_fcm_content_type_messaging_events.py │ │ │ │ ├── 0058_email_html_body.py │ │ │ │ ├── 0059_remove_unicel_backend.py │ │ │ │ ├── 0060_alter_messagingevent_content_type_and_more.py │ │ │ │ ├── 0061_rename_expectedcallback_domain_date_sms_expecte_domain_d5863a_idx_and_more.py │ │ │ │ └── __init__.py │ │ │ ├── mixin.py │ │ │ ├── models.py │ │ │ ├── phonenumbers_helper.py │ │ │ ├── resources/ │ │ │ │ └── __init__.py │ │ │ ├── serializers.py │ │ │ ├── static/ │ │ │ │ └── sms/ │ │ │ │ └── js/ │ │ │ │ ├── add_gateway.js │ │ │ │ ├── add_gateway_form_handler.js │ │ │ │ ├── backend_map.js │ │ │ │ ├── chat.js │ │ │ │ ├── chat_contacts.js │ │ │ │ ├── compose.js │ │ │ │ ├── gateway_list.js │ │ │ │ ├── languages.js │ │ │ │ ├── settings.js │ │ │ │ └── sms_language_main.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── sms/ │ │ │ │ ├── add_gateway.html │ │ │ │ ├── backend_map.html │ │ │ │ ├── chat.html │ │ │ │ ├── chat_contacts.html │ │ │ │ ├── compose.html │ │ │ │ ├── connect_messaging_user.html │ │ │ │ ├── email/ │ │ │ │ │ └── new_sms_user.html │ │ │ │ ├── gateway_list.html │ │ │ │ ├── global_gateway_list.html │ │ │ │ ├── languages.html │ │ │ │ ├── message_tester.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── day_time_windows.html │ │ │ │ │ └── time_picker.html │ │ │ │ ├── phone_number_filter.html │ │ │ │ ├── settings.html │ │ │ │ ├── subscribe_sms.html │ │ │ │ ├── wall.html │ │ │ │ ├── whatsapp_templates.html │ │ │ │ └── xml/ │ │ │ │ ├── register_contact.xml │ │ │ │ └── update_contact.xml │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── app_source.json │ │ │ │ ├── data_generator.py │ │ │ │ ├── inbound_handlers.py │ │ │ │ ├── opt_tests.py │ │ │ │ ├── test_backends.py │ │ │ │ ├── test_backfill_subevent.py │ │ │ │ ├── test_chat.py │ │ │ │ ├── test_form_session_handler.py │ │ │ │ ├── test_inbound_sms_phone_entry_assignment.py │ │ │ │ ├── test_keyword.py │ │ │ │ ├── test_phone_number_in_multiple_domains.py │ │ │ │ ├── test_phone_numbers.py │ │ │ │ ├── test_phonenumbers_helper.py │ │ │ │ ├── test_queueing.py │ │ │ │ ├── test_registration.py │ │ │ │ ├── test_util.py │ │ │ │ ├── test_views.py │ │ │ │ └── util.py │ │ │ ├── urls.py │ │ │ ├── util.py │ │ │ ├── verify.py │ │ │ └── views.py │ │ ├── smsbillables/ │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── async_handlers.py │ │ │ ├── dispatcher.py │ │ │ ├── exceptions.py │ │ │ ├── filters.py │ │ │ ├── forms.py │ │ │ ├── interface.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ ├── commands/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── add_moz_zero_charge.py │ │ │ │ │ ├── add_sms_gateway_permissions.py │ │ │ │ │ ├── bootstrap_apposit_gateway.py │ │ │ │ │ ├── bootstrap_gateway_fees.py │ │ │ │ │ ├── bootstrap_grapevine_gateway.py │ │ │ │ │ ├── bootstrap_grapevine_gateway_update.py │ │ │ │ │ ├── bootstrap_mach_gateway.py │ │ │ │ │ ├── bootstrap_moz_gateway.py │ │ │ │ │ ├── bootstrap_smsgh_gateway.py │ │ │ │ │ ├── bootstrap_telerivet_gateway.py │ │ │ │ │ ├── bootstrap_test_gateway.py │ │ │ │ │ ├── bootstrap_tropo_gateway.py │ │ │ │ │ ├── bootstrap_usage_fees.py │ │ │ │ │ ├── bootstrap_yo_gateway.py │ │ │ │ │ ├── deactivate_grapevine_instance_fee_criteria.py │ │ │ │ │ └── retrobill_date_range.py │ │ │ │ └── pricing_data/ │ │ │ │ ├── Syniverse_coverage_list_PREMIUM_Sept2019.xlsx │ │ │ │ └── tropo_international_rates_2013-12-19.csv │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_bootstrap.py │ │ │ │ ├── 0003_update_twilio_rates_outgoing.py │ │ │ │ ├── 0004_bootstrap_smsgh_rates.py │ │ │ │ ├── 0005_update_http_backend_criteria.py │ │ │ │ ├── 0006_remove_smsbillable_api_response.py │ │ │ │ ├── 0007_smsbillable_multipart_count.py │ │ │ │ ├── 0008__multipart_count__non_nullable.py │ │ │ │ ├── 0009_smsbillable_direct_gateway_fee.py │ │ │ │ ├── 0010_gateway_fee_amount_null.py │ │ │ │ ├── 0011_date_to_datetime.py │ │ │ │ ├── 0012_remove_max_length.py │ │ │ │ ├── 0013_auto_20160826_1531.py │ │ │ │ ├── 0014_bootstrap_apposit_rates.py │ │ │ │ ├── 0015_bootstrap_icds_rates.py │ │ │ │ ├── 0016_smsgatewayfeecriteria_is_active.py │ │ │ │ ├── 0017_deactivate_grapevine_instance_fee_criteria.py │ │ │ │ ├── 0018_index__date_sent.py │ │ │ │ ├── 0019_deactivate_hardcoded_twilio_gateway_fees.py │ │ │ │ ├── 0020_update_sislog_fees.py │ │ │ │ ├── 0021_infobip_gateway_fee_amount_null.py │ │ │ │ ├── 0022_pinpoint_gateway_fee_amount_null.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── smsbillables/ │ │ │ │ └── js/ │ │ │ │ └── rate_calc.js │ │ │ ├── tasks.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── generator.py │ │ │ │ ├── test_billable_creation.py │ │ │ │ ├── test_gateway_charges.py │ │ │ │ ├── test_usage_fees.py │ │ │ │ └── utils.py │ │ │ └── utils.py │ │ ├── smsforms/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── app.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── close_stale_smsforms_sessions.py │ │ │ │ └── handle_survey_actions.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_add_state_tracking_fields.py │ │ │ │ ├── 0003_make_fields_not_null.py │ │ │ │ ├── 0004_rename_sqlxformssession_session_is_open_connection_id_smsforms_sq_session_5286fb_idx_and_more.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tasks.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_app.py │ │ │ │ ├── test_session_synchronization.py │ │ │ │ └── test_sql_session.py │ │ │ └── util.py │ │ ├── sso/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── async_handlers.py │ │ │ ├── backends.py │ │ │ ├── certificates.py │ │ │ ├── configuration.py │ │ │ ├── decorators.py │ │ │ ├── exceptions.py │ │ │ ├── forms.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ └── __init__.py │ │ │ ├── middleware.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_identityprovider_require_encrypted_assertions.py │ │ │ │ ├── 0003_oidc_onelogin_idp_update.py │ │ │ │ ├── 0004_login_enforcement_type_sso_test_user.py │ │ │ │ ├── 0005_alter_identityprovider_idp_type.py │ │ │ │ ├── 0006_add_new_fields_in_identityprovider.py │ │ │ │ ├── 0007_add_multi_view_api_fields.py │ │ │ │ ├── 0008_alter_identityprovider_idp_type.py │ │ │ │ ├── 0009_identityprovider_require_api_key_for_api_access.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── sso/ │ │ │ │ └── js/ │ │ │ │ ├── edit_identity_provider.js │ │ │ │ ├── enterprise_edit_identity_provider.js │ │ │ │ ├── models.js │ │ │ │ └── new_identity_provider.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── sso/ │ │ │ │ ├── accounting_admin/ │ │ │ │ │ ├── edit_identity_provider.html │ │ │ │ │ └── new_identity_provider.html │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── acs_errors.html │ │ │ │ │ ├── config_errors.html │ │ │ │ │ ├── sso_error.html │ │ │ │ │ └── sso_request_denied.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── acs_errors.html │ │ │ │ │ ├── config_errors.html │ │ │ │ │ ├── sso_error.html │ │ │ │ │ └── sso_request_denied.html │ │ │ │ ├── email/ │ │ │ │ │ ├── api_secret_expiring_reminder.html │ │ │ │ │ ├── api_secret_expiring_reminder.txt │ │ │ │ │ ├── idp_cert_expiring_reminder.html │ │ │ │ │ ├── idp_cert_expiring_reminder.txt │ │ │ │ │ ├── sso_deactivation_skip_notification.html │ │ │ │ │ └── sso_deactivation_skip_notification.txt │ │ │ │ ├── enterprise_admin/ │ │ │ │ │ ├── edit_identity_provider.html │ │ │ │ │ ├── manage_sso.html │ │ │ │ │ └── sso_api_expiration_warning.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── admin_danger_zone.html │ │ │ │ │ ├── manage_authenticated_email_domains.html │ │ │ │ │ ├── manage_sso_exempt_users.html │ │ │ │ │ └── manage_sso_test_users.html │ │ │ │ └── permissions/ │ │ │ │ └── untrusted_identity_provider_for_domain.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── generator.py │ │ │ │ ├── test_async_handlers.py │ │ │ │ ├── test_backends.py │ │ │ │ ├── test_caches.py │ │ │ │ ├── test_context_helpers.py │ │ │ │ ├── test_decorators.py │ │ │ │ ├── test_domain_helpers.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_identity_provider.py │ │ │ │ ├── test_login_helpers.py │ │ │ │ ├── test_message_helpers.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_oidc_utils.py │ │ │ │ ├── test_request_helpers.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_url_helpers.py │ │ │ │ └── test_user_helpers.py │ │ │ ├── urls.py │ │ │ ├── utils/ │ │ │ │ ├── __init__.py │ │ │ │ ├── context_helpers.py │ │ │ │ ├── domain_helpers.py │ │ │ │ ├── entra.py │ │ │ │ ├── login_helpers.py │ │ │ │ ├── message_helpers.py │ │ │ │ ├── oidc.py │ │ │ │ ├── request_helpers.py │ │ │ │ ├── session_helpers.py │ │ │ │ ├── url_helpers.py │ │ │ │ ├── user_helpers.py │ │ │ │ └── view_helpers.py │ │ │ └── views/ │ │ │ ├── __init__.py │ │ │ ├── accounting_admin.py │ │ │ ├── enterprise_admin.py │ │ │ ├── oidc.py │ │ │ └── saml.py │ │ ├── styleguide/ │ │ │ ├── __init__.py │ │ │ ├── context.py │ │ │ ├── example_forms.py │ │ │ ├── examples/ │ │ │ │ ├── __init__.py │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── checkbox_form.py │ │ │ │ │ ├── class_view.py │ │ │ │ │ ├── crispy_forms_basic.py │ │ │ │ │ ├── crispy_forms_errors.py │ │ │ │ │ ├── crispy_forms_knockout.py │ │ │ │ │ ├── crispy_forms_knockout_validation.py │ │ │ │ │ ├── datepicker_alpine_crispy.py │ │ │ │ │ ├── disabled_fields.py │ │ │ │ │ ├── example_urls.py │ │ │ │ │ ├── functional_view.py │ │ │ │ │ ├── htmx_alpine_form_demo.py │ │ │ │ │ ├── htmx_alpine_form_views.py │ │ │ │ │ ├── htmx_complex_store.py │ │ │ │ │ ├── htmx_debug_mixin_usage.py │ │ │ │ │ ├── htmx_key_value_view.py │ │ │ │ │ ├── htmx_next_action_simple_forms.py │ │ │ │ │ ├── htmx_next_action_simple_view.py │ │ │ │ │ ├── htmx_pagination_data.py │ │ │ │ │ ├── htmx_pagination_host_view.py │ │ │ │ │ ├── htmx_pagination_table.py │ │ │ │ │ ├── htmx_pagination_table_view.py │ │ │ │ │ ├── htmx_todo_list.py │ │ │ │ │ ├── multiselect_form.py │ │ │ │ │ ├── placeholder_help_text.py │ │ │ │ │ ├── select2_ajax_form.py │ │ │ │ │ ├── select2_alpine_crispy.py │ │ │ │ │ ├── select2_autocomplete_ko_form.py │ │ │ │ │ ├── select2_css_class_form.py │ │ │ │ │ ├── select2_dynamic_ko_form.py │ │ │ │ │ ├── select2_manual_form.py │ │ │ │ │ ├── select2_static_ko_form.py │ │ │ │ │ ├── select_toggle_form.py │ │ │ │ │ ├── switch_form.py │ │ │ │ │ └── tabs.py │ │ │ │ └── simple_crispy_form/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── fake_data.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── styleguide/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── pycco-syntax.css │ │ │ │ │ └── js/ │ │ │ │ │ ├── feedback.js │ │ │ │ │ ├── inline_edit.js │ │ │ │ │ ├── main.js │ │ │ │ │ ├── multiselect.js │ │ │ │ │ ├── pagination.js │ │ │ │ │ ├── search_box.js │ │ │ │ │ └── select2.js │ │ │ │ └── js/ │ │ │ │ ├── dates_times.js │ │ │ │ ├── examples/ │ │ │ │ │ ├── crispy_forms_knockout.js │ │ │ │ │ ├── crispy_forms_knockout_validation.js │ │ │ │ │ ├── datatables.js │ │ │ │ │ ├── date_only.js │ │ │ │ │ ├── date_range.js │ │ │ │ │ ├── feedback.js │ │ │ │ │ ├── inline_edit.js │ │ │ │ │ ├── inline_edit_lang.js │ │ │ │ │ ├── ko_migration/ │ │ │ │ │ │ ├── alpine_complex.js │ │ │ │ │ │ ├── alpine_complex_reusable.js │ │ │ │ │ │ ├── ko_complex.js │ │ │ │ │ │ ├── ko_simple.js │ │ │ │ │ │ └── use_alpine_complex_reusable.js │ │ │ │ │ ├── modal_ko.js │ │ │ │ │ ├── multiselect.js │ │ │ │ │ ├── multiselect_crispy.js │ │ │ │ │ ├── open_modal_ko.js │ │ │ │ │ ├── open_remote_modal_ko.js │ │ │ │ │ ├── paginated_table.js │ │ │ │ │ ├── pagination.js │ │ │ │ │ ├── search_box.js │ │ │ │ │ ├── select2_autocomplete_ko_crispy.js │ │ │ │ │ ├── select2_dynamic_ko_crispy.js │ │ │ │ │ ├── select2_ko_autocomplete.js │ │ │ │ │ ├── select2_ko_dynamic.js │ │ │ │ │ ├── select2_ko_static.js │ │ │ │ │ ├── select2_manual.js │ │ │ │ │ ├── select2_manual_allow_clear.js │ │ │ │ │ ├── select2_manual_crispy.js │ │ │ │ │ ├── select2_static_ko_crispy.js │ │ │ │ │ ├── tempus_dominus.js │ │ │ │ │ ├── time_only.js │ │ │ │ │ └── time_only_24.js │ │ │ │ ├── feedback.js │ │ │ │ ├── inline_edit.js │ │ │ │ ├── ko_migration.js │ │ │ │ ├── main.js │ │ │ │ ├── modals.js │ │ │ │ ├── pagination.js │ │ │ │ ├── searching.js │ │ │ │ ├── selections.js │ │ │ │ └── tables.js │ │ │ ├── tabs.py │ │ │ ├── templates/ │ │ │ │ └── styleguide/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── _includes/ │ │ │ │ │ │ ├── atoms/ │ │ │ │ │ │ │ ├── accessibility.html │ │ │ │ │ │ │ ├── colors/ │ │ │ │ │ │ │ │ └── swatch.html │ │ │ │ │ │ │ ├── colors.html │ │ │ │ │ │ │ ├── css.html │ │ │ │ │ │ │ ├── icons/ │ │ │ │ │ │ │ │ └── panel.html │ │ │ │ │ │ │ ├── icons.html │ │ │ │ │ │ │ ├── intro.html │ │ │ │ │ │ │ └── typography.html │ │ │ │ │ │ ├── molecules/ │ │ │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ │ │ └── button_row.html │ │ │ │ │ │ │ ├── buttons.html │ │ │ │ │ │ │ ├── checkboxes/ │ │ │ │ │ │ │ │ └── checkboxes_form.html │ │ │ │ │ │ │ ├── checkboxes.html │ │ │ │ │ │ │ ├── feedback.html │ │ │ │ │ │ │ ├── help.html │ │ │ │ │ │ │ ├── inline_edit.html │ │ │ │ │ │ │ ├── intro.html │ │ │ │ │ │ │ ├── modals.html │ │ │ │ │ │ │ ├── pagination.html │ │ │ │ │ │ │ ├── search_box.html │ │ │ │ │ │ │ └── selections.html │ │ │ │ │ │ ├── nav/ │ │ │ │ │ │ │ ├── atoms.html │ │ │ │ │ │ │ ├── molecules.html │ │ │ │ │ │ │ ├── organisms.html │ │ │ │ │ │ │ └── pages.html │ │ │ │ │ │ ├── organisms/ │ │ │ │ │ │ │ ├── forms/ │ │ │ │ │ │ │ │ └── basic_crispy.html │ │ │ │ │ │ │ ├── forms.html │ │ │ │ │ │ │ ├── intro.html │ │ │ │ │ │ │ └── tables.html │ │ │ │ │ │ └── pages/ │ │ │ │ │ │ ├── class_based.html │ │ │ │ │ │ ├── functional.html │ │ │ │ │ │ ├── intro.html │ │ │ │ │ │ └── navigation.html │ │ │ │ │ ├── base.html │ │ │ │ │ ├── base_doc.html │ │ │ │ │ ├── base_section.html │ │ │ │ │ ├── docs/ │ │ │ │ │ │ └── simple_crispy_form/ │ │ │ │ │ │ ├── forms.html │ │ │ │ │ │ └── views.html │ │ │ │ │ ├── example.html │ │ │ │ │ ├── example_html.html │ │ │ │ │ ├── examples/ │ │ │ │ │ │ ├── basic_table.html │ │ │ │ │ │ ├── button_group.html │ │ │ │ │ │ ├── checkbox_in_form.html │ │ │ │ │ │ ├── complex_table.html │ │ │ │ │ │ ├── doc_template.txt │ │ │ │ │ │ ├── error_form.html │ │ │ │ │ │ ├── feedback.html │ │ │ │ │ │ ├── header.html │ │ │ │ │ │ ├── help.html │ │ │ │ │ │ ├── html_form.html │ │ │ │ │ │ ├── inline_edit.html │ │ │ │ │ │ ├── lonely_checkbox.html │ │ │ │ │ │ ├── modals.html │ │ │ │ │ │ ├── multiselect.html │ │ │ │ │ │ ├── pagination.html │ │ │ │ │ │ ├── panels.html │ │ │ │ │ │ ├── search_box.html │ │ │ │ │ │ ├── select2.html │ │ │ │ │ │ ├── simple_crispy_form/ │ │ │ │ │ │ │ └── base.html │ │ │ │ │ │ └── tabs.html │ │ │ │ │ └── home.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── atoms/ │ │ │ │ │ │ ├── accessibility.html │ │ │ │ │ │ ├── colors.html │ │ │ │ │ │ ├── icons.html │ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ │ ├── gradient.html │ │ │ │ │ │ │ ├── icon_set.html │ │ │ │ │ │ │ └── swatch.html │ │ │ │ │ │ └── typography.html │ │ │ │ │ ├── base.html │ │ │ │ │ ├── base_example.html │ │ │ │ │ ├── code_display.html │ │ │ │ │ ├── code_example.html │ │ │ │ │ ├── code_guidelines.html │ │ │ │ │ ├── examples/ │ │ │ │ │ │ ├── basic_form.html │ │ │ │ │ │ ├── basic_table.html │ │ │ │ │ │ ├── checkbox.html │ │ │ │ │ │ ├── checkbox_form.html │ │ │ │ │ │ ├── checkbox_horizontal_form.html │ │ │ │ │ │ ├── datatables.html │ │ │ │ │ │ ├── date_only.html │ │ │ │ │ │ ├── date_range.html │ │ │ │ │ │ ├── datepicker_alpine_datetime.html │ │ │ │ │ │ ├── datepicker_alpine_simple.html │ │ │ │ │ │ ├── datepicker_widget.html │ │ │ │ │ │ ├── destructive_action_buttons.html │ │ │ │ │ │ ├── disabled_fields.html │ │ │ │ │ │ ├── download_upload_buttons.html │ │ │ │ │ │ ├── feedback.html │ │ │ │ │ │ ├── form_invalid.html │ │ │ │ │ │ ├── form_valid.html │ │ │ │ │ │ ├── help.html │ │ │ │ │ │ ├── html_guide/ │ │ │ │ │ │ │ ├── attribute_js.html │ │ │ │ │ │ │ ├── attribute_json.html │ │ │ │ │ │ │ ├── attribute_no_wrap.html │ │ │ │ │ │ │ ├── attribute_wrap_data.html │ │ │ │ │ │ │ ├── attribute_wrap_length.html │ │ │ │ │ │ │ ├── block_and_inline.html │ │ │ │ │ │ │ ├── final_example.html │ │ │ │ │ │ │ ├── indentation.html │ │ │ │ │ │ │ ├── self_closing.html │ │ │ │ │ │ │ ├── self_closing_line.html │ │ │ │ │ │ │ └── standard_attributes.html │ │ │ │ │ │ ├── htmx_get_started.html │ │ │ │ │ │ ├── htmx_loading_button.html │ │ │ │ │ │ ├── htmx_loading_checkbox.html │ │ │ │ │ │ ├── htmx_loading_form.html │ │ │ │ │ │ ├── htmx_pagination.html │ │ │ │ │ │ ├── inline_edit.html │ │ │ │ │ │ ├── inline_edit_lang.html │ │ │ │ │ │ ├── ko_migration/ │ │ │ │ │ │ │ ├── alpine_complex.html │ │ │ │ │ │ │ ├── alpine_simple.html │ │ │ │ │ │ │ ├── ko_complex.html │ │ │ │ │ │ │ ├── ko_simple.html │ │ │ │ │ │ │ ├── prompt_htmx_alpine.md │ │ │ │ │ │ │ ├── prompt_modules.md │ │ │ │ │ │ │ ├── prompt_one_liner.md │ │ │ │ │ │ │ ├── prompt_review.md │ │ │ │ │ │ │ ├── prompt_simple.md │ │ │ │ │ │ │ └── prompt_start.md │ │ │ │ │ │ ├── modal.html │ │ │ │ │ │ ├── modal_ko.html │ │ │ │ │ │ ├── most_buttons.html │ │ │ │ │ │ ├── multiselect.html │ │ │ │ │ │ ├── navs_cards.html │ │ │ │ │ │ ├── navs_tabs.html │ │ │ │ │ │ ├── open_modal_ko.html │ │ │ │ │ │ ├── open_remote_modal_ko.html │ │ │ │ │ │ ├── page_header.html │ │ │ │ │ │ ├── page_title_block.html │ │ │ │ │ │ ├── paginated_table.html │ │ │ │ │ │ ├── pagination.html │ │ │ │ │ │ ├── placeholder_help_text.html │ │ │ │ │ │ ├── primary_action_buttons.html │ │ │ │ │ │ ├── remote_modal.html │ │ │ │ │ │ ├── search_box.html │ │ │ │ │ │ ├── sectioned_table.html │ │ │ │ │ │ ├── select2_alpine_basic.html │ │ │ │ │ │ ├── select2_alpine_select2change.html │ │ │ │ │ │ ├── select2_alpine_with_options.html │ │ │ │ │ │ ├── select2_css_class.html │ │ │ │ │ │ ├── select2_css_class_multiple.html │ │ │ │ │ │ ├── select2_ko_autocomplete.html │ │ │ │ │ │ ├── select2_ko_dynamic.html │ │ │ │ │ │ ├── select2_ko_static.html │ │ │ │ │ │ ├── select2_manual.html │ │ │ │ │ │ ├── select2_manual_allow_clear.html │ │ │ │ │ │ ├── simple_centered_page.html │ │ │ │ │ │ ├── simple_section.html │ │ │ │ │ │ ├── simple_section_parent.html │ │ │ │ │ │ ├── switch.html │ │ │ │ │ │ ├── tempus_dominus.html │ │ │ │ │ │ ├── time_only.html │ │ │ │ │ │ ├── time_only_24.html │ │ │ │ │ │ └── toggles.html │ │ │ │ │ ├── form_example.html │ │ │ │ │ ├── form_js_example.html │ │ │ │ │ ├── home.html │ │ │ │ │ ├── html_guide.html │ │ │ │ │ ├── html_js_example.html │ │ │ │ │ ├── htmx_and_alpine.html │ │ │ │ │ ├── javascript_guide.html │ │ │ │ │ ├── knockout_to_alpine.html │ │ │ │ │ ├── migration_guide.html │ │ │ │ │ ├── molecules/ │ │ │ │ │ │ ├── buttons.html │ │ │ │ │ │ ├── checkboxes.html │ │ │ │ │ │ ├── dates_times.html │ │ │ │ │ │ ├── feedback.html │ │ │ │ │ │ ├── help.html │ │ │ │ │ │ ├── inline_editing.html │ │ │ │ │ │ ├── modals.html │ │ │ │ │ │ ├── pagination.html │ │ │ │ │ │ ├── searching.html │ │ │ │ │ │ └── selections.html │ │ │ │ │ ├── organisms/ │ │ │ │ │ │ ├── forms.html │ │ │ │ │ │ └── tables.html │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── navigation.html │ │ │ │ │ │ └── views.html │ │ │ │ │ └── partials/ │ │ │ │ │ ├── demo_callout.html │ │ │ │ │ ├── ko_migration_alert.html │ │ │ │ │ ├── readable_code_block.html │ │ │ │ │ └── sidebar.html │ │ │ │ ├── htmx_alpine_crispy/ │ │ │ │ │ ├── main.html │ │ │ │ │ └── partial_form.html │ │ │ │ ├── htmx_key_values/ │ │ │ │ │ ├── field_with_error.html │ │ │ │ │ ├── main.html │ │ │ │ │ └── partial.html │ │ │ │ ├── htmx_next_action_simple/ │ │ │ │ │ ├── main.html │ │ │ │ │ └── next_step_with_message.html │ │ │ │ └── htmx_todo/ │ │ │ │ ├── item.html │ │ │ │ ├── item_done.html │ │ │ │ ├── item_done_oob_swap.html │ │ │ │ └── main.html │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views/ │ │ │ ├── __init__.py │ │ │ ├── bootstrap5.py │ │ │ ├── bootstrap5_data.py │ │ │ └── docs.py │ │ ├── toggle_ui/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── migration_helpers.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_reconcile_commtrack_flags.py │ │ │ │ ├── 0002_toggleaudit.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── toggle_ui/ │ │ │ │ └── js/ │ │ │ │ ├── edit-flag.js │ │ │ │ └── flags.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── toggle/ │ │ │ │ ├── edit_flag.html │ │ │ │ └── flags.html │ │ │ ├── tests.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── translations/ │ │ │ ├── __init__.py │ │ │ ├── app_translations/ │ │ │ │ ├── __init__.py │ │ │ │ ├── download.py │ │ │ │ ├── upload_app.py │ │ │ │ ├── upload_form.py │ │ │ │ ├── upload_module.py │ │ │ │ └── utils.py │ │ │ ├── const.py │ │ │ ├── exceptions.py │ │ │ ├── generators.py │ │ │ ├── management/ │ │ │ │ └── commands/ │ │ │ │ └── translate_po_files.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_transifexblacklist.py │ │ │ │ ├── 0003_auto_20190318_1850.py │ │ │ │ ├── 0004_auto_20190318_1905.py │ │ │ │ ├── 0005_auto_20190405_1747.py │ │ │ │ ├── 0006_add_smstranslations.py │ │ │ │ ├── 0007_populate_smstranslations.py │ │ │ │ ├── 0008_remove_couch_id.py │ │ │ │ ├── 0009_auto_20200924_1753.py │ │ │ │ ├── 0010_transifex_organization_api_token_encryption.py │ │ │ │ ├── 0011_delete_transifexblacklist_and_more.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── static/ │ │ │ │ └── translations/ │ │ │ │ └── js/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── app_translations.js │ │ │ │ │ └── translations.js │ │ │ │ └── bootstrap5/ │ │ │ │ ├── app_translations.js │ │ │ │ └── translations.js │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── bulk_app_translation/ │ │ │ │ │ │ ├── aggregate/ │ │ │ │ │ │ │ ├── expected_xform.xml │ │ │ │ │ │ │ └── initial_xform.xml │ │ │ │ │ │ ├── basic/ │ │ │ │ │ │ │ ├── app.json │ │ │ │ │ │ │ ├── app_no_itext.json │ │ │ │ │ │ │ ├── change_upload_form.xml │ │ │ │ │ │ │ └── change_upload_form_en.xml │ │ │ │ │ │ ├── download/ │ │ │ │ │ │ │ └── app.json │ │ │ │ │ │ ├── form_modifications/ │ │ │ │ │ │ │ ├── app.json │ │ │ │ │ │ │ ├── expected_form.xml │ │ │ │ │ │ │ └── form_that_vellum_produces.xml │ │ │ │ │ │ ├── mismatched_ref/ │ │ │ │ │ │ │ └── app.json │ │ │ │ │ │ └── moved_module/ │ │ │ │ │ │ └── app.json │ │ │ │ │ ├── transifex/ │ │ │ │ │ │ ├── api/ │ │ │ │ │ │ │ ├── get_organizations.json │ │ │ │ │ │ │ ├── get_projects.json │ │ │ │ │ │ │ ├── get_projects_o:test-organization:p:test-project_languages.json │ │ │ │ │ │ │ ├── get_resource_language_stats.json │ │ │ │ │ │ │ ├── get_resource_language_stats_l:fr.json │ │ │ │ │ │ │ ├── get_resource_strings_async_downloads_content.txt │ │ │ │ │ │ │ ├── get_resource_translations_async_downloads_content.txt │ │ │ │ │ │ │ ├── get_resources.json │ │ │ │ │ │ │ ├── patch_resources_o:test-organization:p:test-project:r:test-resource.json │ │ │ │ │ │ │ ├── post_resource_strings_async_downloads.json │ │ │ │ │ │ │ ├── post_resource_strings_async_uploads.json │ │ │ │ │ │ │ ├── post_resource_translations_async_downloads.json │ │ │ │ │ │ │ └── post_resources.json │ │ │ │ │ │ ├── menus_and_forms-fr.po │ │ │ │ │ │ └── menus_and_forms.po │ │ │ │ │ └── transifex_blacklist.xml │ │ │ │ ├── test_bulk_app_translation.py │ │ │ │ ├── test_transifex_blacklisting.py │ │ │ │ ├── test_translate_po_files.py │ │ │ │ ├── test_updating_app_from_trans_dict.py │ │ │ │ └── utils.py │ │ │ ├── utils.py │ │ │ ├── validator.py │ │ │ └── views.py │ │ ├── user_importer/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── exceptions.py │ │ │ ├── helpers.py │ │ │ ├── importer.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tasks.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_importer.py │ │ │ │ └── test_validators.py │ │ │ └── validation.py │ │ ├── userreports/ │ │ │ ├── README.md │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── _design/ │ │ │ │ └── views/ │ │ │ │ ├── active_data_sources/ │ │ │ │ │ ├── map.js │ │ │ │ │ └── reduce.js │ │ │ │ ├── data_sources_by_build_info/ │ │ │ │ │ ├── map.js │ │ │ │ │ └── reduce.js │ │ │ │ ├── data_sources_by_last_modified/ │ │ │ │ │ ├── map.js │ │ │ │ │ └── reduce.js │ │ │ │ ├── report_configs_by_data_source/ │ │ │ │ │ ├── map.js │ │ │ │ │ └── reduce.js │ │ │ │ └── report_configs_by_domain/ │ │ │ │ ├── map.js │ │ │ │ └── reduce.js │ │ │ ├── adapter.py │ │ │ ├── adaptercache.py │ │ │ ├── admin.py │ │ │ ├── alembic_diffs.py │ │ │ ├── app_config.py │ │ │ ├── app_manager/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data_source_meta.py │ │ │ │ └── helpers.py │ │ │ ├── columns.py │ │ │ ├── const.py │ │ │ ├── custom/ │ │ │ │ ├── __init__.py │ │ │ │ └── data_source.py │ │ │ ├── data_source_providers.py │ │ │ ├── datatypes.py │ │ │ ├── dbaccessors.py │ │ │ ├── decorators.py │ │ │ ├── examples/ │ │ │ │ ├── dimagi/ │ │ │ │ │ ├── dimagi-case-data-source.json │ │ │ │ │ └── dimagi-chart-report.json │ │ │ │ └── gsid/ │ │ │ │ ├── gsid-form-data-source.json │ │ │ │ └── gsid-form-report.json │ │ │ ├── exceptions.py │ │ │ ├── expressions/ │ │ │ │ ├── __init__.py │ │ │ │ ├── date_specs.py │ │ │ │ ├── evaluator/ │ │ │ │ │ ├── FUNCTION_DOCS.rst │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── functions.py │ │ │ │ │ └── main.py │ │ │ │ ├── extension_expressions.py │ │ │ │ ├── factory.py │ │ │ │ ├── getters.py │ │ │ │ ├── list_specs.py │ │ │ │ ├── specs.py │ │ │ │ └── utils.py │ │ │ ├── extension_points.py │ │ │ ├── filters/ │ │ │ │ ├── __init__.py │ │ │ │ ├── factory.py │ │ │ │ └── specs.py │ │ │ ├── forms.py │ │ │ ├── indicators/ │ │ │ │ ├── __init__.py │ │ │ │ ├── factory.py │ │ │ │ ├── specs.py │ │ │ │ └── utils.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── add_inserted_at_index.py │ │ │ │ ├── async_rebuild_table.py │ │ │ │ ├── clean_report_config.py │ │ │ │ ├── count_ucrs.py │ │ │ │ ├── find_datasource_mismatches.py │ │ │ │ ├── load_spec.py │ │ │ │ ├── manage_orphaned_ucrs.py │ │ │ │ ├── profile_async_indicators.py │ │ │ │ ├── profile_data_source.py │ │ │ │ ├── queue_indicators.py │ │ │ │ ├── rebuild_indicator_table.py │ │ │ │ └── rebuild_tables_by_domain.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_migrate_translation_transforms.py │ │ │ │ ├── 0003_auto_20170321_2019.py │ │ │ │ ├── 0004_auto_20170330_2049.py │ │ │ │ ├── 0005_asyncindicator_unsuccessful_attempts.py │ │ │ │ ├── 0006_add_index_to_domain.py │ │ │ │ ├── 0007_index_indicator_config_ids.py │ │ │ │ ├── 0008_new_table_name_views.py │ │ │ │ ├── 0009_rename_ucr_tables.py │ │ │ │ ├── 0010_add_invaliducrdata.py │ │ │ │ ├── 0011_datasourceactionlog.py │ │ │ │ ├── 0012_datasourceactionlog_skip_destructive.py │ │ │ │ ├── 0013_reportcomparisondiff_reportcomparisonexception_reportcomparisontiming.py │ │ │ │ ├── 0014_auto_20190529_1458.py │ │ │ │ ├── 0015_auto_20190701_2006.py │ │ │ │ ├── 0016_change_primary_key_to_bigint.py │ │ │ │ ├── 0017_index_cleanup.py │ │ │ │ ├── 0018_ucrexpression.py │ │ │ │ ├── 0019_ucrexpression_upstream_id.py │ │ │ │ ├── 0020_delete_ucr_comparison_models.py │ │ │ │ ├── 0021_drop_aggregate_ucrs_tables.py │ │ │ │ └── __init__.py │ │ │ ├── mixins.py │ │ │ ├── models.py │ │ │ ├── operators.py │ │ │ ├── pillow.py │ │ │ ├── pillow_utils.py │ │ │ ├── rebuild.py │ │ │ ├── reports/ │ │ │ │ ├── README.md │ │ │ │ ├── __init__.py │ │ │ │ ├── builder/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── columns.py │ │ │ │ │ ├── const.py │ │ │ │ │ ├── filter_formats.py │ │ │ │ │ ├── forms.py │ │ │ │ │ └── sources.py │ │ │ │ ├── data_source.py │ │ │ │ ├── factory.py │ │ │ │ ├── filters/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── choice_providers.py │ │ │ │ │ ├── factory.py │ │ │ │ │ ├── specs.py │ │ │ │ │ └── values.py │ │ │ │ ├── sorting.py │ │ │ │ ├── specs.py │ │ │ │ ├── sum_when_templates.py │ │ │ │ ├── util.py │ │ │ │ └── view.py │ │ │ ├── specs.py │ │ │ ├── sql/ │ │ │ │ ├── __init__.py │ │ │ │ ├── adapter.py │ │ │ │ ├── columns.py │ │ │ │ ├── data_source.py │ │ │ │ └── util.py │ │ │ ├── static/ │ │ │ │ └── userreports/ │ │ │ │ ├── js/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── base.js │ │ │ │ │ │ ├── configurable_report.js │ │ │ │ │ │ ├── configure_report.js │ │ │ │ │ │ ├── data_source_select.js │ │ │ │ │ │ ├── expression_debugger.js │ │ │ │ │ │ ├── report_config.js │ │ │ │ │ │ ├── ucr_expression.js │ │ │ │ │ │ ├── ucr_expressions.js │ │ │ │ │ │ └── widgets.js │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── base.js │ │ │ │ │ │ ├── configurable_report.js │ │ │ │ │ │ ├── configure_report.js │ │ │ │ │ │ ├── data_source_select.js │ │ │ │ │ │ ├── expression_debugger.js │ │ │ │ │ │ ├── report_config.js │ │ │ │ │ │ ├── ucr_expression.js │ │ │ │ │ │ ├── ucr_expressions.js │ │ │ │ │ │ └── widgets.js │ │ │ │ │ ├── builder_view_models.js │ │ │ │ │ ├── configurable_reports_home.js │ │ │ │ │ ├── constants.js │ │ │ │ │ ├── data_source_evaluator.js │ │ │ │ │ ├── data_source_from_app.js │ │ │ │ │ ├── data_source_select_model.js │ │ │ │ │ ├── edit_report_config.js │ │ │ │ │ ├── expression_evaluator.js │ │ │ │ │ ├── report_analytix.js │ │ │ │ │ └── utils.js │ │ │ │ └── spec/ │ │ │ │ ├── PropertyListItem.spec.js │ │ │ │ └── main.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── userreports/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── base.html │ │ │ │ │ ├── base_report_builder.html │ │ │ │ │ ├── configurable_report.html │ │ │ │ │ ├── configurable_reports_home.html │ │ │ │ │ ├── data_source_debugger.html │ │ │ │ │ ├── data_source_from_app.html │ │ │ │ │ ├── edit_data_source.html │ │ │ │ │ ├── edit_report_config.html │ │ │ │ │ ├── expression_debugger.html │ │ │ │ │ ├── import_report.html │ │ │ │ │ ├── preview_data.html │ │ │ │ │ ├── report_error.html │ │ │ │ │ ├── summary_data_source.html │ │ │ │ │ ├── ucr_expression.html │ │ │ │ │ ├── ucr_expressions.html │ │ │ │ │ └── userreports_base.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── base.html │ │ │ │ │ ├── base_report_builder.html │ │ │ │ │ ├── configurable_report.html │ │ │ │ │ ├── configurable_reports_home.html │ │ │ │ │ ├── data_source_debugger.html │ │ │ │ │ ├── data_source_from_app.html │ │ │ │ │ ├── edit_data_source.html │ │ │ │ │ ├── edit_report_config.html │ │ │ │ │ ├── expression_debugger.html │ │ │ │ │ ├── import_report.html │ │ │ │ │ ├── preview_data.html │ │ │ │ │ ├── report_error.html │ │ │ │ │ ├── summary_data_source.html │ │ │ │ │ ├── ucr_expression.html │ │ │ │ │ ├── ucr_expressions.html │ │ │ │ │ └── userreports_base.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── basic_data_table.html │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── column_list_configuration.html │ │ │ │ │ │ ├── delete_report_button.html │ │ │ │ │ │ ├── filter_panel.html │ │ │ │ │ │ └── property_list_configuration.html │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── column_list_configuration.html │ │ │ │ │ │ ├── delete_report_button.html │ │ │ │ │ │ ├── filter_panel.html │ │ │ │ │ │ └── property_list_configuration.html │ │ │ │ │ ├── build_in_progress_warning.html │ │ │ │ │ ├── col-style.html │ │ │ │ │ ├── edit_report_button.html │ │ │ │ │ └── preview_warning.html │ │ │ │ ├── paywall/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── activating_subscription.html │ │ │ │ │ │ └── pricing.html │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ ├── activating_subscription.html │ │ │ │ │ └── pricing.html │ │ │ │ ├── reportbuilder/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── configure_report.html │ │ │ │ │ │ └── data_source_select.html │ │ │ │ │ └── bootstrap5/ │ │ │ │ │ ├── configure_report.html │ │ │ │ │ └── data_source_select.html │ │ │ │ └── spec/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ └── mocha.html │ │ │ │ └── bootstrap5/ │ │ │ │ └── mocha.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── configs/ │ │ │ │ │ │ ├── data_source_with_repeat.json │ │ │ │ │ │ ├── parent_child_data_source.json │ │ │ │ │ │ ├── sample_data_source.json │ │ │ │ │ │ ├── sample_registry_data_source.json │ │ │ │ │ │ └── sample_report_config.json │ │ │ │ │ ├── static_data_sources/ │ │ │ │ │ │ ├── sample_static_data_source.json │ │ │ │ │ │ └── sample_static_data_source.yml │ │ │ │ │ └── static_reports/ │ │ │ │ │ ├── static_report_2_config.json │ │ │ │ │ ├── static_report_config.json │ │ │ │ │ └── static_report_config.yml │ │ │ │ ├── test_adaptercache.py │ │ │ │ ├── test_adapters.py │ │ │ │ ├── test_alembic_diffs.py │ │ │ │ ├── test_app_manager_integration.py │ │ │ │ ├── test_async_indicators.py │ │ │ │ ├── test_choice_provider.py │ │ │ │ ├── test_columns.py │ │ │ │ ├── test_data_source_config.py │ │ │ │ ├── test_data_source_providers.py │ │ │ │ ├── test_data_source_repeats.py │ │ │ │ ├── test_data_source_validaton.py │ │ │ │ ├── test_date_expressions.py │ │ │ │ ├── test_dbaccessors.py │ │ │ │ ├── test_evaluator_expressions.py │ │ │ │ ├── test_export.py │ │ │ │ ├── test_expressions.py │ │ │ │ ├── test_extension_expressions.py │ │ │ │ ├── test_filters.py │ │ │ │ ├── test_get_report_configs.py │ │ │ │ ├── test_getters.py │ │ │ │ ├── test_indicators.py │ │ │ │ ├── test_list_expressions.py │ │ │ │ ├── test_location_data_source.py │ │ │ │ ├── test_manage_orphaned_ucrs.py │ │ │ │ ├── test_operators.py │ │ │ │ ├── test_pillow.py │ │ │ │ ├── test_pillow_utils.py │ │ │ │ ├── test_rebuild_migrate.py │ │ │ │ ├── test_registry_data_source_config.py │ │ │ │ ├── test_registry_pillow.py │ │ │ │ ├── test_report_aggregation.py │ │ │ │ ├── test_report_builder.py │ │ │ │ ├── test_report_builder_filters.py │ │ │ │ ├── test_report_charts.py │ │ │ │ ├── test_report_config.py │ │ │ │ ├── test_report_configuration.py │ │ │ │ ├── test_report_data.py │ │ │ │ ├── test_report_filters.py │ │ │ │ ├── test_report_rendering.py │ │ │ │ ├── test_save_errors.py │ │ │ │ ├── test_static_data_sources.py │ │ │ │ ├── test_static_reports.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_transforms.py │ │ │ │ ├── test_utils.py │ │ │ │ ├── test_view.py │ │ │ │ ├── test_views.py │ │ │ │ └── utils.py │ │ │ ├── transforms/ │ │ │ │ ├── __init__.py │ │ │ │ ├── custom/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── date.py │ │ │ │ │ ├── numeric.py │ │ │ │ │ └── users.py │ │ │ │ ├── factory.py │ │ │ │ └── specs.py │ │ │ ├── ui/ │ │ │ │ ├── __init__.py │ │ │ │ ├── fields.py │ │ │ │ ├── forms.py │ │ │ │ ├── help_text.py │ │ │ │ └── widgets.py │ │ │ ├── urls.py │ │ │ ├── util.py │ │ │ └── views.py │ │ ├── users/ │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── _design/ │ │ │ │ ├── filters/ │ │ │ │ │ └── all_users.js │ │ │ │ └── views/ │ │ │ │ ├── by_default_phone/ │ │ │ │ │ └── map.js │ │ │ │ ├── by_domain/ │ │ │ │ │ ├── map.js │ │ │ │ │ └── reduce.js │ │ │ │ ├── by_group/ │ │ │ │ │ └── map.js │ │ │ │ ├── by_username/ │ │ │ │ │ ├── map.js │ │ │ │ │ └── reduce.js │ │ │ │ └── phone_users_by_domain/ │ │ │ │ └── map.js │ │ │ ├── account_confirmation.py │ │ │ ├── admin.py │ │ │ ├── analytics.py │ │ │ ├── apps.py │ │ │ ├── audit/ │ │ │ │ ├── __init__.py │ │ │ │ └── change_messages.py │ │ │ ├── auditors.py │ │ │ ├── bulk_download.py │ │ │ ├── bulkupload.py │ │ │ ├── cases.py │ │ │ ├── credentials_issuing.py │ │ │ ├── dbaccessors.py │ │ │ ├── decorators.py │ │ │ ├── device_rate_limiter.py │ │ │ ├── event_handlers.py │ │ │ ├── exceptions.py │ │ │ ├── fixturegenerators.py │ │ │ ├── forms.py │ │ │ ├── landing_pages.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── accept_invite.py │ │ │ │ ├── archive_forms_submitted_by_user.py │ │ │ │ ├── copy_invitation_supply_point.py │ │ │ │ ├── delete_user.py │ │ │ │ ├── deleted_users.py │ │ │ │ ├── fix_commcare_version.py │ │ │ │ ├── gdpr_scrub_user_from_forms.py │ │ │ │ ├── rm_orphaned_user_data.py │ │ │ │ └── role_permission_history.py │ │ │ ├── middleware.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_add_location_permission.py │ │ │ │ ├── 0002_domainrequest.py │ │ │ │ ├── 0003_roles_permissions_update.py │ │ │ │ ├── 0004_rm_role_id_from_admins.py │ │ │ │ ├── 0005_add_user_reporting_metadata.py │ │ │ │ ├── 0006_auto_20191225_1207.py │ │ │ │ ├── 0007_userreportingmetadatastaging_created_on.py │ │ │ │ ├── 0008_auto_20200129_1852.py │ │ │ │ ├── 0009_sqlinvitation.py │ │ │ │ ├── 0010_populate_usersinvitation.py │ │ │ │ ├── 0011_sqlinvitation_uuid.py │ │ │ │ ├── 0012_alter_usersinvitation.py │ │ │ │ ├── 0013_remove_sqlinvitation_ids.py │ │ │ │ ├── 0014_rename_usersinvitation.py │ │ │ │ ├── 0015_domainpermissionsmirror.py │ │ │ │ ├── 0016_hqapikey.py │ │ │ │ ├── 0016_webappspermissions.py │ │ │ │ ├── 0017_merge_20200608_1401.py │ │ │ │ ├── 0018_auto_20200619_1626.py │ │ │ │ ├── 0019_editreportspermissions.py │ │ │ │ ├── 0020_user_staging_pk_to_bigint.py │ │ │ │ ├── 0021_add_view_apps_permission.py │ │ │ │ ├── 0021_invitation_email_status.py │ │ │ │ ├── 0022_merge_20200814_2045.py │ │ │ │ ├── 0023_hqapikey_role_id.py │ │ │ │ ├── 0024_add_login_as_all_users.py │ │ │ │ ├── 0025_hqapikey_domain.py │ │ │ │ ├── 0026_sql_role_permissions.py │ │ │ │ ├── 0027_role_permission_unique.py │ │ │ │ ├── 0028_migrate_roles_to_sql.py │ │ │ │ ├── 0028_remove_domainpermissionsmirror.py │ │ │ │ ├── 0029_merge_20210611_1436.py │ │ │ │ ├── 0029_userhistory.py │ │ │ │ ├── 0030_userhistory_user_upload_record.py │ │ │ │ ├── 0031_delete_domainpermissionsmirror.py │ │ │ │ ├── 0032_add_download_reports_permission.py │ │ │ │ ├── 0033_rename_sqluserrole.py │ │ │ │ ├── 0034_auto_20210813_1121.py │ │ │ │ ├── 0035_auto_20210826_1155.py │ │ │ │ ├── 0036_reset_user_history_records.py │ │ │ │ ├── 0037_add_edit_messaging_permission.py │ │ │ │ ├── 0038_add_ucr_permissions.py │ │ │ │ ├── 0038_auto_20210930_1235.py │ │ │ │ ├── 0039_merge_20211007_0556.py │ │ │ │ ├── 0040_add_repr_and_changed_by_repr.py │ │ │ │ ├── 0041_migrate_reprs.py │ │ │ │ ├── 0042_deactivatemobileworkertrigger.py │ │ │ │ ├── 0043_add_release_management_permission.py │ │ │ │ ├── 0044_userrole_is_commcare_user_default.py │ │ │ │ ├── 0045_add_view_tableau_permission.py │ │ │ │ ├── 0046_add_default_mobile_worker_role.py │ │ │ │ ├── 0047_rename_sqlpermission_permission.py │ │ │ │ ├── 0048_expiring_keys.py │ │ │ │ ├── 0049_add_data_dict_permissions.py │ │ │ │ ├── 0050_add_manage_attendance_tracking_permission.py │ │ │ │ ├── 0051_add_attendance_tracking_privilege.py │ │ │ │ ├── 0052_hqapikey_last_used.py │ │ │ │ ├── 0053_userreportingmetadatastaging_fcm_token.py │ │ │ │ ├── 0054_connectiduserlink.py │ │ │ │ ├── 0055_add_user_data.py │ │ │ │ ├── 0056_add_manage_domain_alerts_permission.py │ │ │ │ ├── 0057_populate_sql_user_data.py │ │ │ │ ├── 0058_createprofileanduserdata_copylocation.py │ │ │ │ ├── 0059_copy_transient_invitation_supply_point.py │ │ │ │ ├── 0060_invitations_addtableau_roles_and_groupids.py │ │ │ │ ├── 0061_auto_20240423_0802.py │ │ │ │ ├── 0062_add_web_apps_groups_permission_flag.py │ │ │ │ ├── 0063_rename_location_invitation_primary_location_and_more.py │ │ │ │ ├── 0064_add_edit_view_tableau_config_permissions.py │ │ │ │ ├── 0065_transfer_to_tableau_config_permission.py │ │ │ │ ├── 0066_add_profile_permissions.py │ │ │ │ ├── 0067_alter_invitation_tableau_role.py │ │ │ │ ├── 0068_grant_web_apps_to_default_mobile_worker_role.py │ │ │ │ ├── 0069_alter_invitation_custom_user_data_and_more.py │ │ │ │ ├── 0070_alter_invitation_tableau_role.py │ │ │ │ ├── 0071_rm_user_data.py │ │ │ │ ├── 0072_remove_invitation_supply_point.py │ │ │ │ ├── 0073_rm_location_from_user_data.py │ │ │ │ ├── 0074_alter_sqluserdata_profile.py │ │ │ │ ├── 0075_hqapikey_encrypted_key.py │ │ │ │ ├── 0076_connectiduserlink_messaging_consent_and_more.py │ │ │ │ ├── 0077_invitationhistory.py │ │ │ │ ├── 0078_sqluserdata_deleted_on.py │ │ │ │ ├── 0079_alter_sqluserdata_managers.py │ │ │ │ ├── 0080_connectiduserlink_is_active.py │ │ │ │ ├── 0081_rm_orphaned_user_data.py │ │ │ │ ├── 0082_connectidmessagingkey_unique_active_messaging_key_per_user_and_domain.py │ │ │ │ ├── 0083_reset_ccu_dm_is_active.py │ │ │ │ ├── 0084_remove_hqapikey_key.py │ │ │ │ ├── 0085_usercredential.py │ │ │ │ ├── 0086_backfill_usercases.py │ │ │ │ ├── 0087_alter_sqluserdata_managers.py │ │ │ │ └── __init__.py │ │ │ ├── model_log.py │ │ │ ├── models.py │ │ │ ├── models_role.py │ │ │ ├── permissions.py │ │ │ ├── role_utils.py │ │ │ ├── signals.py │ │ │ ├── static/ │ │ │ │ └── users/ │ │ │ │ ├── js/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── accept_invite.js │ │ │ │ │ │ ├── custom_data_fields.js │ │ │ │ │ │ ├── edit_commcare_user.js │ │ │ │ │ │ ├── edit_web_user.js │ │ │ │ │ │ ├── filtered_download.js │ │ │ │ │ │ ├── invite_web_user.js │ │ │ │ │ │ ├── mobile_workers.js │ │ │ │ │ │ └── web_users.js │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── accept_invite.js │ │ │ │ │ │ ├── custom_data_fields.js │ │ │ │ │ │ ├── edit_commcare_user.js │ │ │ │ │ │ ├── edit_web_user.js │ │ │ │ │ │ ├── filtered_download.js │ │ │ │ │ │ ├── invite_web_user.js │ │ │ │ │ │ ├── mobile_workers.js │ │ │ │ │ │ └── web_users.js │ │ │ │ │ ├── bulk_lookup.js │ │ │ │ │ ├── edit_role.js │ │ │ │ │ ├── roles.js │ │ │ │ │ ├── roles_and_permissions.js │ │ │ │ │ └── web_users_list.js │ │ │ │ └── xlsx/ │ │ │ │ └── users.xlsx │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── users/ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ ├── accept_invite.html │ │ │ │ │ ├── bulk_delete.html │ │ │ │ │ ├── bulk_lookup.html │ │ │ │ │ ├── commcare_user_account_confirmed.html │ │ │ │ │ ├── commcare_user_confirm_account.html │ │ │ │ │ ├── confirm_turn_off_demo_mode.html │ │ │ │ │ ├── confirmation_sent.html │ │ │ │ │ ├── deleted_account.html │ │ │ │ │ ├── domain_request.html │ │ │ │ │ ├── edit_commcare_user.html │ │ │ │ │ ├── edit_web_user.html │ │ │ │ │ ├── extra_users_confirm_billing.html │ │ │ │ │ ├── filter_and_download.html │ │ │ │ │ ├── invite_web_user.html │ │ │ │ │ ├── mobile_workers.html │ │ │ │ │ └── web_users.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ ├── accept_invite.html │ │ │ │ │ ├── bulk_delete.html │ │ │ │ │ ├── bulk_lookup.html │ │ │ │ │ ├── commcare_user_account_confirmed.html │ │ │ │ │ ├── commcare_user_confirm_account.html │ │ │ │ │ ├── confirm_turn_off_demo_mode.html │ │ │ │ │ ├── confirmation_sent.html │ │ │ │ │ ├── deleted_account.html │ │ │ │ │ ├── domain_request.html │ │ │ │ │ ├── edit_commcare_user.html │ │ │ │ │ ├── edit_web_user.html │ │ │ │ │ ├── extra_users_confirm_billing.html │ │ │ │ │ ├── filter_and_download.html │ │ │ │ │ ├── invite_web_user.html │ │ │ │ │ ├── mobile_workers.html │ │ │ │ │ └── web_users.html │ │ │ │ ├── edit_role.html │ │ │ │ ├── email/ │ │ │ │ │ ├── mobile_worker_account_confirmation.html │ │ │ │ │ ├── mobile_worker_account_confirmation.txt │ │ │ │ │ ├── new_domain_request.html │ │ │ │ │ ├── new_domain_request.txt │ │ │ │ │ ├── request_domain_access.html │ │ │ │ │ ├── request_domain_access.txt │ │ │ │ │ └── user_limit_notice.html │ │ │ │ ├── mobile/ │ │ │ │ │ └── partials/ │ │ │ │ │ ├── demo_restore_status.html │ │ │ │ │ └── user_upload_status.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ ├── basic_info_form.html │ │ │ │ │ │ ├── basic_info_modals.html │ │ │ │ │ │ ├── commcare_user_groups.html │ │ │ │ │ │ ├── edit_commtrack_user_settings.html │ │ │ │ │ │ ├── manage_my_numbers.html │ │ │ │ │ │ ├── manage_phone_numbers.html │ │ │ │ │ │ ├── personalid_activation_modals.html │ │ │ │ │ │ ├── personalid_password_locked_banner.html │ │ │ │ │ │ ├── register_user_form_fields.html │ │ │ │ │ │ └── waiting_to_verify_email_message.html │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ ├── basic_info_form.html │ │ │ │ │ │ ├── basic_info_modals.html │ │ │ │ │ │ ├── commcare_user_groups.html │ │ │ │ │ │ ├── edit_commtrack_user_settings.html │ │ │ │ │ │ ├── manage_my_numbers.html │ │ │ │ │ │ ├── manage_phone_numbers.html │ │ │ │ │ │ ├── personalid_activation_modals.html │ │ │ │ │ │ ├── personalid_password_locked_banner.html │ │ │ │ │ │ ├── register_user_form_fields.html │ │ │ │ │ │ └── waiting_to_verify_email_message.html │ │ │ │ │ ├── confirm_trust_identity_provider_message.html │ │ │ │ │ ├── linked_roles_modal.html │ │ │ │ │ ├── location_edit_warnings.html │ │ │ │ │ └── select_permission.html │ │ │ │ └── roles_and_permissions.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── case_utils.py │ │ │ │ ├── create.py │ │ │ │ ├── data/ │ │ │ │ │ └── email/ │ │ │ │ │ └── test_bounced_event.json │ │ │ │ ├── fixture_status.py │ │ │ │ ├── forms.py │ │ │ │ ├── permissions.py │ │ │ │ ├── phone_users.py │ │ │ │ ├── retire.py │ │ │ │ ├── sync.py │ │ │ │ ├── test_admin.py │ │ │ │ ├── test_analytics.py │ │ │ │ ├── test_audit.py │ │ │ │ ├── test_auditors.py │ │ │ │ ├── test_authorization.py │ │ │ │ ├── test_bulk_download.py │ │ │ │ ├── test_cases.py │ │ │ │ ├── test_commcare_users_lookup.py │ │ │ │ ├── test_confirm_account.py │ │ │ │ ├── test_confirm_account_view.py │ │ │ │ ├── test_create_mobile_workers.py │ │ │ │ ├── test_credentials_issuing.py │ │ │ │ ├── test_dbaccessors.py │ │ │ │ ├── test_deactivate_mobile_worker_trigger.py │ │ │ │ ├── test_device_rate_limiter.py │ │ │ │ ├── test_download.py │ │ │ │ ├── test_download_with_profile.py │ │ │ │ ├── test_email_events.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_get_domain_language.py │ │ │ │ ├── test_get_owner_ids.py │ │ │ │ ├── test_location_assignment.py │ │ │ │ ├── test_log_user_change.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_models_role.py │ │ │ │ ├── test_rm_orphaned_user_data.py │ │ │ │ ├── test_role_permission_history.py │ │ │ │ ├── test_role_utils.py │ │ │ │ ├── test_signals.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_user_data.py │ │ │ │ ├── test_user_invitation.py │ │ │ │ ├── test_user_model.py │ │ │ │ ├── test_user_role.py │ │ │ │ ├── test_username_validation.py │ │ │ │ ├── test_util.py │ │ │ │ ├── test_views.py │ │ │ │ ├── test_web_user_download.py │ │ │ │ ├── update.py │ │ │ │ └── util.py │ │ │ ├── urls.py │ │ │ ├── user_data.py │ │ │ ├── util.py │ │ │ ├── validation.py │ │ │ └── views/ │ │ │ ├── __init__.py │ │ │ ├── mobile/ │ │ │ │ ├── __init__.py │ │ │ │ ├── custom_data_fields.py │ │ │ │ ├── groups.py │ │ │ │ └── users.py │ │ │ ├── role.py │ │ │ ├── utils.py │ │ │ └── web.py │ │ └── zapier/ │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api/ │ │ │ ├── __init__.py │ │ │ └── v0_5.py │ │ ├── apps.py │ │ ├── consts.py │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20170117_1756.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── queries.py │ │ ├── services.py │ │ ├── signals/ │ │ │ ├── __init__.py │ │ │ └── receivers.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_create_update_cases_from_zapier.py │ │ │ ├── test_fields.py │ │ │ ├── test_polling.py │ │ │ ├── test_utils.py │ │ │ ├── test_zapier_forwarding.py │ │ │ └── test_zapier_hooks.py │ │ ├── urls.py │ │ ├── util.py │ │ └── views.py │ ├── blobs/ │ │ ├── __init__.py │ │ ├── atomic.py │ │ ├── exceptions.py │ │ ├── export.py │ │ ├── fsdb.py │ │ ├── interface.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ ├── blob_storage_report.py │ │ │ ├── check_blob_logs.py │ │ │ ├── emergency_restore_blobs_for_domain.py │ │ │ ├── export_selected_blobs.py │ │ │ ├── import_blob_zip.py │ │ │ ├── run_blob_export.py │ │ │ ├── run_blob_import.py │ │ │ ├── run_blob_migration.py │ │ │ └── wipe_blobdb.py │ │ ├── metadata.py │ │ ├── migrate.py │ │ ├── migrate_metadata.py │ │ ├── migratingdb.py │ │ ├── migrations/ │ │ │ ├── 0001_squashed_0009_domains.py │ │ │ ├── 0002_blobmeta.py │ │ │ ├── 0003_big_content.py │ │ │ ├── 0004_blobmeta_form_attachments.py │ │ │ ├── 0005_negative_id.py │ │ │ ├── 0006_restrict_form_attachments.py │ │ │ ├── 0007_drop_blobmeta_view.py │ │ │ ├── 0008_deletedblobmeta.py │ │ │ ├── 0009_delete_blobexpiration.py │ │ │ ├── 0010_auto_20191023_0938.py │ │ │ ├── 0011_blobmeta_compressed.py │ │ │ ├── 0012_rename_indexes.py │ │ │ ├── 0013_drop_icds_cas_index.py │ │ │ ├── 0014_alter_deletedblobmeta_id.py │ │ │ ├── 0015_rename_blobmeta_parent_id_type_code_name_blobs_blobm_parent__73d7c2_idx.py │ │ │ └── __init__.py │ │ ├── mixin.py │ │ ├── models.py │ │ ├── retry_s3db.py │ │ ├── s3db.py │ │ ├── sql_templates/ │ │ │ ├── big_content_length.sql │ │ │ ├── delete_blob_meta.sql │ │ │ ├── delete_blob_meta_v2.sql │ │ │ ├── drop_blobmeta_view.sql │ │ │ ├── get_blobmetas.sql │ │ │ ├── mutate_blobs_blobmeta.sql │ │ │ ├── restrict_legacy_attachment_metadata_insert.sql │ │ │ └── setup_blobmeta_view.sql │ │ ├── targzipdb.py │ │ ├── tasks.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── fixtures.py │ │ │ ├── test_atomic.py │ │ │ ├── test_blob_import.py │ │ │ ├── test_blob_timeout.py │ │ │ ├── test_export.py │ │ │ ├── test_fsdb.py │ │ │ ├── test_init.py │ │ │ ├── test_metadata.py │ │ │ ├── test_migrate.py │ │ │ ├── test_migrate_compress.py │ │ │ ├── test_migrate_metadata.py │ │ │ ├── test_migratingdb.py │ │ │ ├── test_mixin.py │ │ │ ├── test_models.py │ │ │ ├── test_s3db.py │ │ │ ├── test_type_codes.py │ │ │ ├── test_util.py │ │ │ └── util.py │ │ └── util.py │ ├── celery.py │ ├── celery_monitoring/ │ │ ├── __init__.py │ │ ├── app_config.py │ │ ├── heartbeat.py │ │ ├── models.py │ │ ├── signals.py │ │ ├── tasks.py │ │ └── tests.py │ ├── const.py │ ├── couchapps/ │ │ ├── README.md │ │ ├── __init__.py │ │ ├── all_docs/ │ │ │ └── views/ │ │ │ └── by_doc_type/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── app_translations_by_popularity/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── apps_with_submissions/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── by_domain_doc_type_date/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── deleted_users_by_username/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── doc_conflicts/ │ │ │ ├── __init__.py │ │ │ ├── tasks.py │ │ │ └── views/ │ │ │ └── conflicts/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── export_instances_by_domain/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── export_instances_by_is_daily_saved/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── exports_forms_by_app/ │ │ │ ├── README.md │ │ │ └── views/ │ │ │ └── view/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── forms_by_app_info/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── last_modified/ │ │ │ └── views/ │ │ │ └── by_last_modified/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── latest_apps/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── models.py │ │ ├── program_by_code/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ └── map.js │ │ ├── registry_data_sources/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── registry_data_sources_by_last_modified/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ └── map.js │ │ ├── registry_report_configs/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── reportconfig/ │ │ │ └── views/ │ │ │ ├── all_notifications/ │ │ │ │ ├── map.js │ │ │ │ └── reduce.js │ │ │ ├── configs_by_domain/ │ │ │ │ ├── map.js │ │ │ │ └── reduce.js │ │ │ ├── notifications_by_config/ │ │ │ │ ├── map.js │ │ │ │ └── reduce.js │ │ │ └── user_notifications/ │ │ │ └── map.js │ │ ├── saved_apps_auto_generated/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ └── map.js │ │ ├── schemas_by_xmlns_or_case_type/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ └── test_all_docs.py │ │ ├── users_by_domain/ │ │ │ └── views/ │ │ │ └── view/ │ │ │ ├── map.js │ │ │ └── reduce.js │ │ └── users_extra/ │ │ └── views/ │ │ └── users_by_location_id/ │ │ ├── map.js │ │ └── reduce.js │ ├── dbaccessors/ │ │ ├── __init__.py │ │ └── couchapps/ │ │ ├── __init__.py │ │ └── all_docs.py │ ├── elastic.py │ ├── ex-submodules/ │ │ ├── README.rst │ │ ├── casexml/ │ │ │ ├── __init__.py │ │ │ └── apps/ │ │ │ ├── __init__.py │ │ │ ├── case/ │ │ │ │ ├── __init__.py │ │ │ │ ├── _design/ │ │ │ │ │ ├── filters/ │ │ │ │ │ │ ├── casedocs.js │ │ │ │ │ │ └── cases_xforms.js │ │ │ │ │ └── fulltext/ │ │ │ │ │ └── search/ │ │ │ │ │ └── index.js │ │ │ │ ├── apps.py │ │ │ │ ├── cleanup.py │ │ │ │ ├── const.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── fixtures.py │ │ │ │ ├── management/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── commands/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── create_case.py │ │ │ │ │ └── create_case_fixtures.py │ │ │ │ ├── mock/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── case_block.py │ │ │ │ │ ├── mock.py │ │ │ │ │ └── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_case_block.py │ │ │ │ ├── signals.py │ │ │ │ ├── static/ │ │ │ │ │ └── case/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── jquery.treetable.css │ │ │ │ │ └── js/ │ │ │ │ │ ├── case_hierarchy.js │ │ │ │ │ ├── case_property_modal.js │ │ │ │ │ └── repeat_records.js │ │ │ │ ├── templates/ │ │ │ │ │ └── case/ │ │ │ │ │ └── partials/ │ │ │ │ │ ├── case_attachments.html │ │ │ │ │ ├── case_hierarchy.html │ │ │ │ │ ├── case_property_modal.html │ │ │ │ │ └── repeat_records.html │ │ │ │ ├── templatetags/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── case_tags.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── couch/ │ │ │ │ │ │ └── __init__.py │ │ │ │ │ ├── data/ │ │ │ │ │ │ ├── bugs/ │ │ │ │ │ │ │ ├── case_index_no_type.xml │ │ │ │ │ │ │ ├── duplicate_case_properties.xml │ │ │ │ │ │ │ ├── duplicate_case_properties_2.xml │ │ │ │ │ │ │ ├── lots_of_subcases.xml │ │ │ │ │ │ │ └── string_formatting.xml │ │ │ │ │ │ ├── case_fixture.xml │ │ │ │ │ │ ├── close.xml │ │ │ │ │ │ ├── create.xml │ │ │ │ │ │ ├── create_update.xml │ │ │ │ │ │ ├── exclusion/ │ │ │ │ │ │ │ ├── device_report.xml │ │ │ │ │ │ │ └── nested_device_report.xml │ │ │ │ │ │ ├── multicase/ │ │ │ │ │ │ │ ├── case_in_repeats.xml │ │ │ │ │ │ │ ├── mixed_cases.xml │ │ │ │ │ │ │ └── parallel_cases.xml │ │ │ │ │ │ ├── multimedia/ │ │ │ │ │ │ │ ├── multimedia_create.xml │ │ │ │ │ │ │ └── multimedia_update.xml │ │ │ │ │ │ ├── ordering/ │ │ │ │ │ │ │ ├── create_oo.xml │ │ │ │ │ │ │ └── update_oo.xml │ │ │ │ │ │ ├── update.xml │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ ├── basic_close.xml │ │ │ │ │ │ ├── basic_create.xml │ │ │ │ │ │ ├── basic_noop.xml │ │ │ │ │ │ ├── basic_update.xml │ │ │ │ │ │ ├── index_update.xml │ │ │ │ │ │ └── named_namespace.xml │ │ │ │ │ ├── test_bugs.py │ │ │ │ │ ├── test_case_block.py │ │ │ │ │ ├── test_case_history.py │ │ │ │ │ ├── test_close_extension_chain.py │ │ │ │ │ ├── test_const.py │ │ │ │ │ ├── test_delete.py │ │ │ │ │ ├── test_domains.py │ │ │ │ │ ├── test_exclusion.py │ │ │ │ │ ├── test_extract_caseblocks.py │ │ │ │ │ ├── test_factory.py │ │ │ │ │ ├── test_fixtures.py │ │ │ │ │ ├── test_from_xform.py │ │ │ │ │ ├── test_get_case_property_changes.py │ │ │ │ │ ├── test_indexes.py │ │ │ │ │ ├── test_multi_case_submits.py │ │ │ │ │ ├── test_multimedia.py │ │ │ │ │ ├── test_out_of_order_processing.py │ │ │ │ │ ├── test_rebuild.py │ │ │ │ │ ├── test_strict_datetimes.py │ │ │ │ │ ├── test_v2_parsing.py │ │ │ │ │ ├── test_xform.py │ │ │ │ │ ├── test_xform_case_ids.py │ │ │ │ │ ├── util.py │ │ │ │ │ └── xml/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_parser.py │ │ │ │ ├── urls.py │ │ │ │ ├── util.py │ │ │ │ ├── views.py │ │ │ │ ├── xform.py │ │ │ │ └── xml/ │ │ │ │ ├── __init__.py │ │ │ │ ├── generator.py │ │ │ │ └── parser.py │ │ │ ├── phone/ │ │ │ │ ├── README.txt │ │ │ │ ├── __init__.py │ │ │ │ ├── admin.py │ │ │ │ ├── change_publishers.py │ │ │ │ ├── checksum.py │ │ │ │ ├── const.py │ │ │ │ ├── data_providers/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── case/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── livequery.py │ │ │ │ │ ├── load_testing.py │ │ │ │ │ ├── stock.py │ │ │ │ │ └── utils.py │ │ │ │ ├── document_store.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── fixtures.py │ │ │ │ ├── management/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── commands/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── invalidate_sync_heads.py │ │ │ │ │ ├── sync_log_debugger.py │ │ │ │ │ └── sync_log_profile.py │ │ │ │ ├── middleware.py │ │ │ │ ├── migrations/ │ │ │ │ │ ├── 0001_initial.py │ │ │ │ │ ├── 0002_synclogsql.py │ │ │ │ │ ├── 0003_auto_20190405_1752.py │ │ │ │ │ ├── 0004_auto_20191021_1308.py │ │ │ │ │ ├── 0005_auto_20210119_1001.py │ │ │ │ │ ├── 0006_synclogsql_auth_type.py │ │ │ │ │ ├── 0007_delete_ownershipcleanlinessflag.py │ │ │ │ │ └── __init__.py │ │ │ │ ├── models.py │ │ │ │ ├── restore.py │ │ │ │ ├── restore_caching.py │ │ │ │ ├── tasks.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── const.py │ │ │ │ │ ├── data/ │ │ │ │ │ │ ├── attributes.xml │ │ │ │ │ │ ├── bugs/ │ │ │ │ │ │ │ └── dependent_case_conflicts/ │ │ │ │ │ │ │ ├── cf.xml │ │ │ │ │ │ │ ├── close.xml │ │ │ │ │ │ │ ├── reg1.xml │ │ │ │ │ │ │ └── reg2.xml │ │ │ │ │ │ ├── case_db_block.xml │ │ │ │ │ │ ├── case_relationship_tests.json │ │ │ │ │ │ ├── create_short.xml │ │ │ │ │ │ └── update_short.xml │ │ │ │ │ ├── dbaccessors.py │ │ │ │ │ ├── dummy.py │ │ │ │ │ ├── test_async_restore.py │ │ │ │ │ ├── test_dbaccessors.py │ │ │ │ │ ├── test_extension_indexes.py │ │ │ │ │ ├── test_index_tree.py │ │ │ │ │ ├── test_new_sync.py │ │ │ │ │ ├── test_ota_fixtures.py │ │ │ │ │ ├── test_ota_restore.py │ │ │ │ │ ├── test_ota_restore_v3.py │ │ │ │ │ ├── test_prune.py │ │ │ │ │ ├── test_restore_user.py │ │ │ │ │ ├── test_state_hash.py │ │ │ │ │ ├── test_sync_log_assertions.py │ │ │ │ │ ├── test_sync_logs.py │ │ │ │ │ ├── test_sync_mode.py │ │ │ │ │ ├── test_sync_purge.py │ │ │ │ │ ├── test_synclog_pillow.py │ │ │ │ │ ├── test_synclog_sql.py │ │ │ │ │ ├── test_utils.py │ │ │ │ │ ├── test_xml.py │ │ │ │ │ └── utils.py │ │ │ │ ├── utils.py │ │ │ │ └── xml.py │ │ │ └── stock/ │ │ │ ├── __init__.py │ │ │ ├── const.py │ │ │ ├── consumption.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ └── __init__.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_squashed_0002_stockreport_server_date.py │ │ │ │ ├── 0002_delete_stocktransaction.py │ │ │ │ ├── 0003_delete_stock_models.py │ │ │ │ ├── 0004_drop_unused_stock_tables.py │ │ │ │ └── __init__.py │ │ │ ├── mock.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── mock_consumption.py │ │ │ │ ├── test_consumption_calc.py │ │ │ │ └── test_consumption_for_case.py │ │ │ └── utils.py │ │ ├── couchexport/ │ │ │ ├── README.txt │ │ │ ├── __init__.py │ │ │ ├── deid.py │ │ │ ├── exceptions.py │ │ │ ├── export.py │ │ │ ├── files.py │ │ │ ├── models.py │ │ │ ├── properties.py │ │ │ ├── shortcuts.py │ │ │ ├── templates/ │ │ │ │ └── couchexport/ │ │ │ │ └── html_export.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_deid.py │ │ │ │ ├── test_excel_format_value.py │ │ │ │ ├── test_raw.py │ │ │ │ ├── test_saved.py │ │ │ │ ├── test_transforms.py │ │ │ │ └── test_writers.py │ │ │ ├── transforms.py │ │ │ ├── util.py │ │ │ └── writers.py │ │ ├── couchforms/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── analytics.py │ │ │ ├── const.py │ │ │ ├── exceptions.py │ │ │ ├── geopoint.py │ │ │ ├── getters.py │ │ │ ├── jsonobject_extensions.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ └── purge_forms_and_cases.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20170802_1505.py │ │ │ │ ├── 0003_auto_20170808_1212.py │ │ │ │ ├── 0004_unfinishedarchivestub.py │ │ │ │ ├── 0005_index_cleanup.py │ │ │ │ ├── 0006_unfinishedarchivestub_attempts.py │ │ │ │ ├── 0007_auto_20191210_2206.py │ │ │ │ ├── 0008_auto_20200701_0742.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── openrosa_response.py │ │ │ ├── signals.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── date_in_meta.xml │ │ │ │ │ ├── deprecation/ │ │ │ │ │ │ ├── edit.xml │ │ │ │ │ │ └── original.xml │ │ │ │ │ ├── devicelogs/ │ │ │ │ │ │ ├── devicelog.xml │ │ │ │ │ │ ├── multiple_nodes.xml │ │ │ │ │ │ ├── single_entry.xml │ │ │ │ │ │ ├── single_node.xml │ │ │ │ │ │ └── subreports_that_shouldnt_fail.xml │ │ │ │ │ ├── encoding.xml │ │ │ │ │ ├── gps_empty_location.xml │ │ │ │ │ ├── gps_location.xml │ │ │ │ │ ├── missing_date_in_meta.xml │ │ │ │ │ ├── posts/ │ │ │ │ │ │ ├── decimalmeta-sql.json │ │ │ │ │ │ ├── decimalmeta.xml │ │ │ │ │ │ ├── duplicate-sql.json │ │ │ │ │ │ ├── duplicate.xml │ │ │ │ │ │ ├── meta-sql.json │ │ │ │ │ │ ├── meta.xml │ │ │ │ │ │ ├── meta_bad_username-sql.json │ │ │ │ │ │ ├── meta_bad_username.xml │ │ │ │ │ │ ├── meta_dict_appversion-sql.json │ │ │ │ │ │ ├── meta_dict_appversion.xml │ │ │ │ │ │ ├── namespaces-sql.json │ │ │ │ │ │ ├── namespaces.xml │ │ │ │ │ │ ├── unicode-sql.json │ │ │ │ │ │ └── unicode.xml │ │ │ │ │ └── sample_xforms/ │ │ │ │ │ └── basic.xml │ │ │ │ ├── test_analytics.py │ │ │ │ ├── test_archive.py │ │ │ │ ├── test_auth.py │ │ │ │ ├── test_const.py │ │ │ │ ├── test_devicelogs.py │ │ │ │ ├── test_duplicates.py │ │ │ │ ├── test_edits.py │ │ │ │ ├── test_errors.py │ │ │ │ ├── test_geopoint.py │ │ │ │ ├── test_meta.py │ │ │ │ ├── test_namespaces.py │ │ │ │ ├── test_openrosa_response.py │ │ │ │ ├── test_post.py │ │ │ │ └── test_xml.py │ │ │ └── util.py │ │ ├── dimagi/ │ │ │ ├── __init__.py │ │ │ ├── ext/ │ │ │ │ ├── __init__.py │ │ │ │ ├── couchdbkit.py │ │ │ │ ├── jsonobject.py │ │ │ │ ├── models.py │ │ │ │ └── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_jsonobject.py │ │ │ │ └── test_schema.py │ │ │ ├── test_utils/ │ │ │ │ ├── __init__.py │ │ │ │ └── base.py │ │ │ └── utils/ │ │ │ ├── __init__.py │ │ │ ├── chunked.py │ │ │ ├── couch/ │ │ │ │ ├── __init__.py │ │ │ │ ├── bulk.py │ │ │ │ ├── cache/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── cache_core/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── api.py │ │ │ │ │ ├── const.py │ │ │ │ │ ├── gen.py │ │ │ │ │ └── lib.py │ │ │ │ ├── database.py │ │ │ │ ├── debugdb/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── debugdatabase.py │ │ │ │ ├── loosechange.py │ │ │ │ ├── migration.py │ │ │ │ ├── resource_conflict.py │ │ │ │ ├── safe_index.py │ │ │ │ ├── settingshelper.py │ │ │ │ ├── sync_docs.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_redis_lock.py │ │ │ │ └── undo.py │ │ │ ├── data/ │ │ │ │ ├── __init__.py │ │ │ │ ├── crud.py │ │ │ │ ├── deid_generator.py │ │ │ │ └── generator.py │ │ │ ├── dates.py │ │ │ ├── decorators/ │ │ │ │ ├── __init__.py │ │ │ │ ├── datespan.py │ │ │ │ ├── log_exception.py │ │ │ │ ├── profile.py │ │ │ │ └── view.py │ │ │ ├── django/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cached_object.py │ │ │ │ ├── email.py │ │ │ │ ├── fields.py │ │ │ │ ├── management.py │ │ │ │ ├── profiling_middleware.py │ │ │ │ ├── request.py │ │ │ │ ├── settingsutil.py │ │ │ │ └── test_email.py │ │ │ ├── gitinfo.py │ │ │ ├── logging.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── flush_caches.py │ │ │ │ └── prime_views.py │ │ │ ├── memory/ │ │ │ │ ├── __init__.py │ │ │ │ └── utils.py │ │ │ ├── models.py │ │ │ ├── modules.py │ │ │ ├── name_to_url.py │ │ │ ├── next_available_name.py │ │ │ ├── parsing.py │ │ │ ├── prime_views.py │ │ │ ├── rate_limit.py │ │ │ ├── read_only.py │ │ │ ├── repo.py │ │ │ ├── requestskit.py │ │ │ ├── retry.py │ │ │ ├── system.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cache_tests.py │ │ │ │ ├── dates.py │ │ │ │ ├── name_to_url.py │ │ │ │ ├── next_available_name.py │ │ │ │ ├── test_chunked.py │ │ │ │ ├── test_database.py │ │ │ │ ├── test_decorators.py │ │ │ │ ├── test_json_handler.py │ │ │ │ ├── test_modules.py │ │ │ │ ├── test_rate_limit.py │ │ │ │ ├── test_retry.py │ │ │ │ ├── test_undo.py │ │ │ │ └── test_web.py │ │ │ └── web.py │ │ ├── phonelog/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ └── __init__.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20160218_1613.py │ │ │ │ ├── 0002_auto_20160219_0951.py │ │ │ │ ├── 0003_auto_20160225_0420.py │ │ │ │ ├── 0004_merge.py │ │ │ │ ├── 0005_add_forceclose_entry_20160408_1530.py │ │ │ │ ├── 0006_usererrorentry_context_node.py │ │ │ │ ├── 0007_devicelog_indexes.py │ │ │ │ ├── 0008_devicelog_varchar_index.py │ │ │ │ ├── 0009_userentry_server_date.py │ │ │ │ ├── 0010_rename_device_model.py │ │ │ │ ├── 0011_partition_devicelogentry.py │ │ │ │ ├── 0012_server_date_not_null.py │ │ │ │ ├── 0013_delete_olddevicereportentry.py │ │ │ │ ├── 0014_auto_20170718_2039.py │ │ │ │ ├── 0015_devicereportentry_android_version_and_more.py │ │ │ │ ├── 0016_rename_devicereportentry_domain_device_id_phonelog_da_domain_e98c65_idx_and_more.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── reports.py │ │ │ ├── tasks.py │ │ │ ├── tests/ │ │ │ │ ├── data/ │ │ │ │ │ ├── forceclose_subreport.xml │ │ │ │ │ ├── log_subreport.xml │ │ │ │ │ └── usererror_subreport.xml │ │ │ │ └── test_sumologic.py │ │ │ └── utils.py │ │ ├── pillow_retry/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── const.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── run_pillow_retry_queue.py │ │ │ │ └── send_pillow_retry_queue_through_pillows.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_pillowerror_queued.py │ │ │ │ ├── 0003_auto_20151002_0944.py │ │ │ │ ├── 0004_auto_drop_legacy_ucr_errors.py │ │ │ │ ├── 0005_auto_20160923_1913.py │ │ │ │ ├── 0006_auto_20170615_0327.py │ │ │ │ ├── 0007_remove_pillowerror_queued.py │ │ │ │ ├── 0008_index_cleanup.py │ │ │ │ ├── 0009_pillow_error_pk_to_bigint.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tasks.py │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_all_pillows.py │ │ │ ├── test_model.py │ │ │ └── test_retry.py │ │ ├── pillowtop/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── checkpoints/ │ │ │ │ ├── __init__.py │ │ │ │ ├── manager.py │ │ │ │ └── util.py │ │ │ ├── const.py │ │ │ ├── couchdb.py │ │ │ ├── dao/ │ │ │ │ ├── __init__.py │ │ │ │ ├── couch.py │ │ │ │ ├── django.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── interface.py │ │ │ │ └── mock.py │ │ │ ├── es_utils.py │ │ │ ├── exceptions.py │ │ │ ├── feed/ │ │ │ │ ├── __init__.py │ │ │ │ ├── couch.py │ │ │ │ ├── interface.py │ │ │ │ └── mock.py │ │ │ ├── logger.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── add_kafka_partition.py │ │ │ │ ├── create_checkpoints_for_merged_pillows.py │ │ │ │ ├── merge_pillow_checkpoints.py │ │ │ │ ├── ptop_dump_remaining_changes.py │ │ │ │ ├── ptop_reset_checkpoint.py │ │ │ │ ├── ptop_run_docs.py │ │ │ │ ├── run_ptop.py │ │ │ │ ├── search_kafka_changes.py │ │ │ │ ├── split_pillow_checkpoints.py │ │ │ │ ├── sync_es_users.py │ │ │ │ ├── tail_kafka.py │ │ │ │ └── update_es_settings.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_djangopillowcheckpoint_sequence_format.py │ │ │ │ ├── 0003_auto_20170411_1957.py │ │ │ │ ├── 0004_offset_to_big_int.py │ │ │ │ ├── 0005_kafkacheckpoint_doc_modification_time.py │ │ │ │ ├── 0006_add_geopoint_to_case_search_index.py │ │ │ │ ├── 0007_copy_xforms_checkpoint.py │ │ │ │ ├── 0008_sync_es_with_couch_webusers.py │ │ │ │ ├── 0009_sync_es_with_couch_commcareusers.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── pillow/ │ │ │ │ ├── __init__.py │ │ │ │ └── interface.py │ │ │ ├── processors/ │ │ │ │ ├── __init__.py │ │ │ │ ├── elastic.py │ │ │ │ ├── form.py │ │ │ │ ├── interface.py │ │ │ │ └── sample.py │ │ │ ├── reindexer/ │ │ │ │ ├── __init__.py │ │ │ │ ├── change_providers/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── case.py │ │ │ │ │ ├── composite.py │ │ │ │ │ ├── couch.py │ │ │ │ │ ├── form.py │ │ │ │ │ └── interface.py │ │ │ │ └── reindexer.py │ │ │ ├── run_pillowtop.py │ │ │ ├── tasks.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_bulk.py │ │ │ │ ├── test_changes.py │ │ │ │ ├── test_checkpoints.py │ │ │ │ ├── test_config.py │ │ │ │ ├── test_couch.py │ │ │ │ ├── test_dao.py │ │ │ │ ├── test_elasticsearch.py │ │ │ │ ├── test_form_change_providers.py │ │ │ │ ├── test_form_submission_metadata_tracker_processor.py │ │ │ │ ├── test_import_pillows.py │ │ │ │ ├── test_metrics.py │ │ │ │ ├── test_pillow.py │ │ │ │ ├── test_run_pillowtop.py │ │ │ │ ├── test_utils.py │ │ │ │ └── utils.py │ │ │ └── utils.py │ │ └── soil/ │ │ ├── __init__.py │ │ ├── exceptions.py │ │ ├── progress.py │ │ ├── static/ │ │ │ └── soil/ │ │ │ └── js/ │ │ │ └── file_download.js │ │ ├── templates/ │ │ │ └── soil/ │ │ │ ├── base.html │ │ │ ├── file_download.html │ │ │ └── partials/ │ │ │ ├── dl_status.html │ │ │ └── download_in_progress.html │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_download_base.py │ │ │ ├── test_get_task_status.py │ │ │ └── test_progress_manager.py │ │ ├── urls.py │ │ ├── util.py │ │ └── views.py │ ├── feature_previews.py │ ├── form_processor/ │ │ ├── README.md │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── app_config.py │ │ ├── backends/ │ │ │ ├── __init__.py │ │ │ └── sql/ │ │ │ ├── __init__.py │ │ │ ├── casedb.py │ │ │ ├── dbaccessors.py │ │ │ ├── ledger.py │ │ │ ├── processor.py │ │ │ ├── supply.py │ │ │ └── update_strategy.py │ │ ├── casedb_base.py │ │ ├── change_publishers.py │ │ ├── document_stores.py │ │ ├── exceptions.py │ │ ├── interfaces/ │ │ │ ├── __init__.py │ │ │ ├── dbaccessors.py │ │ │ ├── ledger_processor.py │ │ │ ├── processor.py │ │ │ └── supply.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ ├── archive_all_forms_for_user_in_domain.py │ │ │ ├── check_forms_have_xml.py │ │ │ ├── create_mock_data.py │ │ │ ├── delete_form_attachments.py │ │ │ ├── get_case_ids_from_forms.py │ │ │ ├── list_data_by_shard.py │ │ │ ├── make_sharded_sql_function.py │ │ │ ├── populate_form_date_modified.py │ │ │ ├── run_sql.py │ │ │ └── run_submission_reprocessing_queue.py │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_xformattachmentsql.py │ │ │ ├── 0003_auto_20151104_2226.py │ │ │ ├── 0004_create_commcarecasesql.py │ │ │ ├── 0005_make_case_uuid_unique_indexed.py │ │ │ ├── 0006_commcarecaseindexsql.py │ │ │ ├── 0007_index_case_uuid_on_commcarecaseindex.py │ │ │ ├── 0008_add_index_for_caseforms_case_uuid.py │ │ │ ├── 0009_add_xform_operation_model_and_state.py │ │ │ ├── 0010_add_auth_and_openrosa_fields.py │ │ │ ├── 0011_add_fields_for_deprecation.py │ │ │ ├── 0012_xforminstancesql_problem.py │ │ │ ├── 0013_caseattachmentsql.py │ │ │ ├── 0014_caseattachmentsql_index_on_foreign_key.py │ │ │ ├── 0015_change_related_names_for_form_attachment.py │ │ │ ├── 0016_index_case_attachment_uuid.py │ │ │ ├── 0017_problem_to_text_field.py │ │ │ ├── 0018_xforminstancesql_user_id.py │ │ │ ├── 0019_allow_closed_by_null.py │ │ │ ├── 0020_rename_index_relationship.py │ │ │ ├── 0021_change_case_forms_related_name.py │ │ │ ├── 0022_set_default_value_for_case_json.py │ │ │ ├── 0023_make_case_name_top_level.py │ │ │ ├── 0024_rename_case_type.py │ │ │ ├── 0025_add_dict_defaults_for_xform.py │ │ │ ├── 0025_caseforms_server_date.py │ │ │ ├── 0026_caseforms_to_casetransaction.py │ │ │ ├── 0026_xforminstancesql_initial_processing_complete.py │ │ │ ├── 0027_allow_null_form_uuid_in_case_transaction.py │ │ │ ├── 0028_merge.py │ │ │ ├── 0029_drop_not_null_from_opened_on_by.py │ │ │ ├── 0030_casetransaction_revoked.py │ │ │ ├── 0031_add_details_field_to_case_transaction.py │ │ │ ├── 0032_change_transaction_related_name.py │ │ │ ├── 0033_commcarecasesql_location_uuid.py │ │ │ ├── 0034_location_id_index.py │ │ │ ├── 0035_remove_varchar_pattern_ops_indexes.py │ │ │ ├── 0036_cleanup_models.py │ │ │ ├── 0037_get_form_by_id_fn.py │ │ │ ├── 0038_form_functions.py │ │ │ ├── 0039_auto_20151130_1748.py │ │ │ ├── 0039_case_functions.py │ │ │ ├── 0040_save_functions.py │ │ │ ├── 0041_noop_specify_table_names.py │ │ │ ├── 0042_change_choice_values.py │ │ │ ├── 0043_rename_to_match.py │ │ │ ├── 0044_remove_foreign_key_to_case.py │ │ │ ├── 0045_casetransaction_sync_log_id.py │ │ │ ├── 0046_add_not_null_constraint_to_owner_id.py │ │ │ ├── 0047_add_deleted_state.py │ │ │ ├── 0048_attachment_content_length_blob_id.py │ │ │ ├── 0049_case_attachment_props.py │ │ │ ├── 0050_allow_null_content_type.py │ │ │ ├── 0051_auto_20160224_0922.py │ │ │ ├── 0052_auto_20160224_1011.py │ │ │ ├── 0053_add_deletion_fields.py │ │ │ ├── 0054_ledgertransaction.py │ │ │ ├── 0055_daily_consumption.py │ │ │ ├── 0056_last_modified_form_id.py │ │ │ ├── 0057_ledger_value_domain_location.py │ │ │ ├── 0058_update_indexes.py │ │ │ ├── 0059_remove_ledgervalue_location_id.py │ │ │ ├── 0060_convert_case_ids_to_foreign_keys.py │ │ │ ├── 0061_blob_bucket.py │ │ │ ├── 0062_auto_20160905_0938.py │ │ │ ├── 0063_auto_20160908_0954.py │ │ │ ├── 0064_auto_20170725_0943.py │ │ │ ├── 0065_auto_20170725_1339.py │ │ │ ├── 0066_auto_20170818_2020.py │ │ │ ├── 0067_auto_20170915_1506.py │ │ │ ├── 0068_xforminstancesql_modified_on.py │ │ │ ├── 0069_add_metafields.py │ │ │ ├── 0070_auto_20180329_1016.py │ │ │ ├── 0071_case_attachment_refactor.py │ │ │ ├── 0072_case_attachment_drops.py │ │ │ ├── 0073_drop_case_uuid_like_index.py │ │ │ ├── 0074_casetransaction__client_date.py │ │ │ ├── 0075_auto_20181026_0951.py │ │ │ ├── 0076_form_attachment_fk.py │ │ │ ├── 0077_null_properties.py │ │ │ ├── 0078_blobmeta_migrated_check.py │ │ │ ├── 0079_add_xmlns_index.py │ │ │ ├── 0080_migrate_delta_1_add_column.py │ │ │ ├── 0081_migrate_delta_2_create_trigger.py │ │ │ ├── 0082_migrate_delta_3_backfill_notnull.py │ │ │ ├── 0083_migrate_delta_4_switch_columns.py │ │ │ ├── 0084_migrate_delta_5_alter_field.py │ │ │ ├── 0085_migrate_balance_1_add_column.py │ │ │ ├── 0086_migrate_balance_2_create_trigger.py │ │ │ ├── 0087_migrate_balance_3_backfill_notnull.py │ │ │ ├── 0088_migrate_balance_4_switch_columns.py │ │ │ ├── 0089_migrate_balance_5_alter_field.py │ │ │ ├── 0090_auto_20190523_0833.py │ │ │ ├── 0091_auto_20190603_2023.py │ │ │ ├── 0092_auto_20200924_1753.py │ │ │ ├── 0093_rename_models.py │ │ │ ├── 0094_add_partial_index_xforms.py │ │ │ ├── 0095_remove_xforminstance_deleted_state.py │ │ │ ├── 0096_add_partial_index_cases.py │ │ │ ├── 0097_case_domain_type_id_index.py │ │ │ ├── 0098_rename_caseattachment_case_name_form_proces_case_id_2fd259_idx_and_more.py │ │ │ ├── 0099_xforminstance_form_proces_domain_3bcfdd_idx_and_more.py │ │ │ ├── __init__.py │ │ │ └── sql_templates/ │ │ │ ├── migrate_balance_1_add_column.sql │ │ │ ├── migrate_balance_2_create_trigger.sql │ │ │ ├── migrate_balance_3_backfill_notnull.sql │ │ │ ├── migrate_balance_4_switch_columns.sql │ │ │ ├── migrate_delta_1_add_column.sql │ │ │ ├── migrate_delta_2_create_trigger.sql │ │ │ ├── migrate_delta_3_backfill_notnull.sql │ │ │ └── migrate_delta_4_switch_columns.sql │ │ ├── models/ │ │ │ ├── __init__.py │ │ │ ├── attachment.py │ │ │ ├── cases.py │ │ │ ├── forms.py │ │ │ ├── ledgers.py │ │ │ ├── mixin.py │ │ │ └── util.py │ │ ├── parsers/ │ │ │ ├── __init__.py │ │ │ ├── form.py │ │ │ └── ledgers/ │ │ │ ├── __init__.py │ │ │ ├── form.py │ │ │ └── helpers.py │ │ ├── reprocess.py │ │ ├── serializers.py │ │ ├── signals.py │ │ ├── submission_post.py │ │ ├── submission_process_tracker.py │ │ ├── system_action.py │ │ ├── tasks.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── json2xml.py │ │ │ ├── test_adjust_datetimes.py │ │ │ ├── test_basics.py │ │ │ ├── test_cases.py │ │ │ ├── test_dbcache.py │ │ │ ├── test_doc_types.py │ │ │ ├── test_extension_cases.py │ │ │ ├── test_form_dbaccessor.py │ │ │ ├── test_forms.py │ │ │ ├── test_gdpr_scrub_user_from_forms.py │ │ │ ├── test_kafka.py │ │ │ ├── test_ledger_dbaccessor.py │ │ │ ├── test_ledgers.py │ │ │ ├── test_models.py │ │ │ ├── test_reindex_accessors.py │ │ │ ├── test_reprocess_errors.py │ │ │ ├── test_reprocessing_queue.py │ │ │ ├── test_serialization.py │ │ │ ├── test_sharding.py │ │ │ ├── test_sql_update_strategy.py │ │ │ ├── test_system_action.py │ │ │ ├── test_usercase_dbaccessor.py │ │ │ ├── test_utils.py │ │ │ └── utils.py │ │ ├── track_related.py │ │ ├── update_strategy_base.py │ │ └── utils/ │ │ ├── __init__.py │ │ ├── general.py │ │ ├── metadata.py │ │ ├── sql.py │ │ └── xform.py │ ├── messaging/ │ │ ├── __init__.py │ │ ├── fcm/ │ │ │ ├── __init__.py │ │ │ └── exceptions.py │ │ ├── ivrbackends/ │ │ │ ├── __init__.py │ │ │ └── kookoo/ │ │ │ ├── __init__.py │ │ │ ├── models.py │ │ │ └── urls.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ ├── export_conditional_alerts.py │ │ │ ├── import_conditional_alerts.py │ │ │ ├── manage_rule_run.py │ │ │ ├── queue_schedule_instances.py │ │ │ ├── resync_case_type.py │ │ │ └── run_rule.py │ │ ├── pillow.py │ │ ├── scheduling/ │ │ │ ├── __init__.py │ │ │ ├── async_handlers.py │ │ │ ├── const.py │ │ │ ├── custom_recipients.py │ │ │ ├── exceptions.py │ │ │ ├── filters.py │ │ │ ├── forms.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_add__custom_content__is_test.py │ │ │ │ ├── 0003_add_custom_metadata.py │ │ │ │ ├── 0004_timedschedule_start_offset.py │ │ │ │ ├── 0005_timedschedule_start_day_of_week.py │ │ │ │ ├── 0006_add_broadcast_recipients.py │ │ │ │ ├── 0007_add_schedule_ui_type.py │ │ │ │ ├── 0008_timedschedule_event_type.py │ │ │ │ ├── 0009_randomtimedevent.py │ │ │ │ ├── 0010_casepropertytimedevent.py │ │ │ │ ├── 0011_add_broadcast_deleted_flag.py │ │ │ │ ├── 0012_add_schedule_deleted_flag.py │ │ │ │ ├── 0013_advanced_survey_options.py │ │ │ │ ├── 0014_remove_is_test.py │ │ │ │ ├── 0015_rename_schedule_length_to_repeat_every.py │ │ │ │ ├── 0016_location_type_filter.py │ │ │ │ ├── 0017_update_ui_type.py │ │ │ │ ├── 0018_minutes_to_wait.py │ │ │ │ ├── 0019_add_use_utc_as_default_timezone.py │ │ │ │ ├── 0020_migratedreminder.py │ │ │ │ ├── 0021_add_user_data_filter.py │ │ │ │ ├── 0022_add_stop_date_case_property_name.py │ │ │ │ ├── 0023_add_remaining_content_models.py │ │ │ │ ├── 0024_app_id.py │ │ │ │ ├── 0025_schedule_and_broadcast_deleted_on.py │ │ │ │ ├── 0026_add_model_fcm_notification_content.py │ │ │ │ ├── 0027_emailcontent_html_message.py │ │ │ │ ├── 0028_alertschedule_use_user_case_for_filter_and_more.py │ │ │ │ ├── 0029_connectmessagecontent_connectmessagesurveycontent_and_more.py │ │ │ │ └── __init__.py │ │ │ ├── models/ │ │ │ │ ├── __init__.py │ │ │ │ ├── abstract.py │ │ │ │ ├── alert_schedule.py │ │ │ │ ├── content.py │ │ │ │ ├── migration.py │ │ │ │ └── timed_schedule.py │ │ │ ├── scheduling_partitioned/ │ │ │ │ ├── __init__.py │ │ │ │ ├── dbaccessors.py │ │ │ │ ├── migrations/ │ │ │ │ │ ├── 0001_initial.py │ │ │ │ │ ├── 0002_case_schedule_instances.py │ │ │ │ │ ├── 0003_add_last_reset_case_property_value.py │ │ │ │ │ ├── 0004_case_schedule_instance_unique_together.py │ │ │ │ │ ├── 0005_timed_schedule_instance_schedule_revision.py │ │ │ │ │ ├── 0006_unique_indexes.py │ │ │ │ │ ├── 0007_index_cleanup.py │ │ │ │ │ ├── 0008_track_attempts.py │ │ │ │ │ ├── 0009_rename_alertscheduleinstance_active_next_event_due_scheduling__active_c8422f_idx_and_more.py │ │ │ │ │ └── __init__.py │ │ │ │ ├── models.py │ │ │ │ └── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_access_restricted.py │ │ │ │ ├── test_dbaccessors_both.py │ │ │ │ ├── test_dbaccessors_non_partitioned.py │ │ │ │ └── test_dbaccessors_partitioned.py │ │ │ ├── static/ │ │ │ │ └── scheduling/ │ │ │ │ └── js/ │ │ │ │ ├── broadcasts_list.js │ │ │ │ ├── conditional_alert_list.js │ │ │ │ ├── conditional_alert_main.js │ │ │ │ ├── create_schedule.js │ │ │ │ ├── create_schedule_main.js │ │ │ │ └── dashboard.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── scheduling/ │ │ │ │ ├── broadcasts_list.html │ │ │ │ ├── conditional_alert.html │ │ │ │ ├── conditional_alert_list.html │ │ │ │ ├── create_schedule.html │ │ │ │ ├── create_schedule_base.html │ │ │ │ ├── dashboard.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── conditional_alert_continue.html │ │ │ │ │ ├── conditional_alert_save.html │ │ │ │ │ ├── custom_event_templates.html │ │ │ │ │ ├── days_of_month_picker.html │ │ │ │ │ ├── message_configuration.html │ │ │ │ │ ├── rich_text_editor.html │ │ │ │ │ ├── rich_text_email_template.html │ │ │ │ │ ├── rich_text_message_configuration.html │ │ │ │ │ └── schedule_form.html │ │ │ │ └── schedule_instance_filter.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_bulk_conditional_alerts.py │ │ │ │ ├── test_content.py │ │ │ │ ├── test_recipients.py │ │ │ │ ├── test_schedules.py │ │ │ │ ├── test_templating.py │ │ │ │ ├── test_util.py │ │ │ │ ├── test_views.py │ │ │ │ └── util.py │ │ │ ├── urls.py │ │ │ ├── util.py │ │ │ ├── view_helpers.py │ │ │ └── views.py │ │ ├── smsbackends/ │ │ │ ├── __init__.py │ │ │ ├── airtel_tcl/ │ │ │ │ ├── __init__.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ └── tests/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_airtel_tcl.py │ │ │ ├── amazon_pinpoint/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── apposit/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_models.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── connectid/ │ │ │ │ ├── backend.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── grapevine/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ └── urls.py │ │ │ ├── http/ │ │ │ │ ├── __init__.py │ │ │ │ ├── form_handling.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ ├── sms_sending.py │ │ │ │ └── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_models.py │ │ │ │ └── test_sms_sending.py │ │ │ ├── infobip/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── ivory_coast_mtn/ │ │ │ │ ├── __init__.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ └── tests/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_response.py │ │ │ ├── mach/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ └── models.py │ │ │ ├── megamobile/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ └── models.py │ │ │ ├── push/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── sislog/ │ │ │ │ ├── __init__.py │ │ │ │ ├── models.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_backend.py │ │ │ │ ├── urls.py │ │ │ │ ├── util.py │ │ │ │ └── views.py │ │ │ ├── smsgh/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── starfish/ │ │ │ │ ├── __init__.py │ │ │ │ ├── models.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_incoming.py │ │ │ │ │ └── test_outgoing.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── start_enterprise/ │ │ │ │ ├── __init__.py │ │ │ │ ├── const.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── forms.py │ │ │ │ ├── migrations/ │ │ │ │ │ ├── 0001_initial.py │ │ │ │ │ └── __init__.py │ │ │ │ ├── models.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_request.py │ │ │ │ │ └── test_response.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── telerivet/ │ │ │ │ ├── __init__.py │ │ │ │ ├── admin.py │ │ │ │ ├── cacert.pem │ │ │ │ ├── const.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── forms.py │ │ │ │ ├── migrations/ │ │ │ │ │ ├── 0001_initial.py │ │ │ │ │ ├── 0002_add_index_on_webhook_secret.py │ │ │ │ │ └── __init__.py │ │ │ │ ├── models.py │ │ │ │ ├── static/ │ │ │ │ │ └── telerivet/ │ │ │ │ │ └── js/ │ │ │ │ │ └── telerivet_setup.js │ │ │ │ ├── tasks.py │ │ │ │ ├── templates/ │ │ │ │ │ └── telerivet/ │ │ │ │ │ ├── partials/ │ │ │ │ │ │ ├── finish.html │ │ │ │ │ │ ├── start.html │ │ │ │ │ │ ├── step1.html │ │ │ │ │ │ ├── step2.html │ │ │ │ │ │ └── step3.html │ │ │ │ │ └── telerivet_setup.html │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_log_call.py │ │ │ │ │ ├── test_tasks.py │ │ │ │ │ ├── test_view.py │ │ │ │ │ └── test_webhook_lookup.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── test/ │ │ │ │ ├── __init__.py │ │ │ │ └── models.py │ │ │ ├── tropo/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ ├── tests/ │ │ │ │ │ └── __init__.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── trumpia/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_incoming.py │ │ │ │ │ └── test_outgoing.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── turn/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_template_messages.py │ │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── twilio/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_log_call.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── vertex/ │ │ │ │ ├── __init__.py │ │ │ │ ├── const.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── forms.py │ │ │ │ ├── models.py │ │ │ │ └── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_request.py │ │ │ │ └── test_response.py │ │ │ └── yo/ │ │ │ ├── __init__.py │ │ │ ├── models.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── tasks.py │ │ ├── templating.py │ │ ├── tests/ │ │ │ └── test_smsbackends.py │ │ ├── util.py │ │ └── whatsapputil.py │ ├── middleware.py │ ├── mobile_flags.py │ ├── motech/ │ │ ├── README.md │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── auth.py │ │ ├── const.py │ │ ├── dhis2/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── const.py │ │ │ ├── dbaccessors.py │ │ │ ├── dhis2_config.py │ │ │ ├── entities_helpers.py │ │ │ ├── events_helpers.py │ │ │ ├── exceptions.py │ │ │ ├── finders.py │ │ │ ├── forms.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── populate_couch_datasetmap.py │ │ │ │ ├── populate_sqldatasetmap.py │ │ │ │ └── send_datasets.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20170322_1323.py │ │ │ │ ├── 0003_jsonapilog_log_level.py │ │ │ │ ├── 0004_auto_20171122_0827.py │ │ │ │ ├── 0005_delete_jsonapilog.py │ │ │ │ ├── 0006_sqldhis2connection.py │ │ │ │ ├── 0007_populate_sqldhis2connection.py │ │ │ │ ├── 0008_rename_sqldhis2connection.py │ │ │ │ ├── 0009_sqldatasetmap_sqldatavaluemap.py │ │ │ │ ├── 0010_populate_sqldatasetmap.py │ │ │ │ ├── 0011_delete_dhis2connection.py │ │ │ │ ├── 0012_add_complete_date_column_to_sql_dataset_map.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── parse_response.py │ │ │ ├── repeaters.py │ │ │ ├── schema.py │ │ │ ├── serializers.py │ │ │ ├── static/ │ │ │ │ └── dhis2/ │ │ │ │ └── js/ │ │ │ │ ├── dataset_map.js │ │ │ │ ├── dataset_map_create.js │ │ │ │ ├── dataset_map_json.js │ │ │ │ ├── dataset_map_update.js │ │ │ │ ├── dhis2_entity_config.js │ │ │ │ ├── dhis2_events_config.js │ │ │ │ └── json_syntax_parse.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── dhis2/ │ │ │ │ ├── dataset_map_create.html │ │ │ │ ├── dataset_map_json.html │ │ │ │ ├── dataset_map_list.html │ │ │ │ ├── dataset_map_update.html │ │ │ │ ├── dhis2_entity_config.html │ │ │ │ └── dhis2_events_config.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── ignored.json │ │ │ │ │ ├── imported.json │ │ │ │ │ ├── repeater.py │ │ │ │ │ ├── tracked_entity_instance_1.json │ │ │ │ │ └── tracked_entity_type.json │ │ │ │ ├── test_dhis_config.py │ │ │ │ ├── test_entities_helpers.py │ │ │ │ ├── test_events_helpers.py │ │ │ │ ├── test_finders.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_parse_response.py │ │ │ │ ├── test_repeaters.py │ │ │ │ ├── test_schema.py │ │ │ │ ├── test_tasks.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── exceptions.py │ │ ├── fhir/ │ │ │ ├── README.txt │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── bundle.py │ │ │ ├── const.py │ │ │ ├── forms.py │ │ │ ├── json-schema/ │ │ │ │ ├── README.rst │ │ │ │ ├── fix-schema-files │ │ │ │ └── r4/ │ │ │ │ ├── Account.schema.json │ │ │ │ ├── ActivityDefinition.schema.json │ │ │ │ ├── Address.schema.json │ │ │ │ ├── AdverseEvent.schema.json │ │ │ │ ├── Age.schema.json │ │ │ │ ├── AllergyIntolerance.schema.json │ │ │ │ ├── Annotation.schema.json │ │ │ │ ├── Appointment.schema.json │ │ │ │ ├── AppointmentResponse.schema.json │ │ │ │ ├── Attachment.schema.json │ │ │ │ ├── AuditEvent.schema.json │ │ │ │ ├── BackboneElement.schema.json │ │ │ │ ├── Basic.schema.json │ │ │ │ ├── Binary.schema.json │ │ │ │ ├── BodySite.schema.json │ │ │ │ ├── Bundle.schema.json │ │ │ │ ├── CapabilityStatement.schema.json │ │ │ │ ├── CarePlan.schema.json │ │ │ │ ├── CareTeam.schema.json │ │ │ │ ├── ChargeItem.schema.json │ │ │ │ ├── Claim.schema.json │ │ │ │ ├── ClaimResponse.schema.json │ │ │ │ ├── ClinicalImpression.schema.json │ │ │ │ ├── CodeSystem.schema.json │ │ │ │ ├── CodeableConcept.schema.json │ │ │ │ ├── Coding.schema.json │ │ │ │ ├── Communication.schema.json │ │ │ │ ├── CommunicationRequest.schema.json │ │ │ │ ├── CompartmentDefinition.schema.json │ │ │ │ ├── Composition.schema.json │ │ │ │ ├── ConceptMap.schema.json │ │ │ │ ├── Condition.schema.json │ │ │ │ ├── Consent.schema.json │ │ │ │ ├── ContactDetail.schema.json │ │ │ │ ├── ContactPoint.schema.json │ │ │ │ ├── Contract.schema.json │ │ │ │ ├── Contributor.schema.json │ │ │ │ ├── Count.schema.json │ │ │ │ ├── Coverage.schema.json │ │ │ │ ├── DataElement.schema.json │ │ │ │ ├── DataRequirement.schema.json │ │ │ │ ├── DetectedIssue.schema.json │ │ │ │ ├── Device.schema.json │ │ │ │ ├── DeviceComponent.schema.json │ │ │ │ ├── DeviceMetric.schema.json │ │ │ │ ├── DeviceRequest.schema.json │ │ │ │ ├── DeviceUseStatement.schema.json │ │ │ │ ├── DiagnosticReport.schema.json │ │ │ │ ├── Distance.schema.json │ │ │ │ ├── DocumentManifest.schema.json │ │ │ │ ├── DocumentReference.schema.json │ │ │ │ ├── DomainResource.schema.json │ │ │ │ ├── Dosage.schema.json │ │ │ │ ├── Duration.schema.json │ │ │ │ ├── Element.schema.json │ │ │ │ ├── ElementDefinition.schema.json │ │ │ │ ├── EligibilityRequest.schema.json │ │ │ │ ├── EligibilityResponse.schema.json │ │ │ │ ├── Encounter.schema.json │ │ │ │ ├── Endpoint.schema.json │ │ │ │ ├── EnrollmentRequest.schema.json │ │ │ │ ├── EnrollmentResponse.schema.json │ │ │ │ ├── EpisodeOfCare.schema.json │ │ │ │ ├── ExpansionProfile.schema.json │ │ │ │ ├── ExplanationOfBenefit.schema.json │ │ │ │ ├── Extension.schema.json │ │ │ │ ├── FamilyMemberHistory.schema.json │ │ │ │ ├── Flag.schema.json │ │ │ │ ├── Goal.schema.json │ │ │ │ ├── GraphDefinition.schema.json │ │ │ │ ├── Group.schema.json │ │ │ │ ├── GuidanceResponse.schema.json │ │ │ │ ├── HealthcareService.schema.json │ │ │ │ ├── HumanName.schema.json │ │ │ │ ├── Identifier.schema.json │ │ │ │ ├── ImagingManifest.schema.json │ │ │ │ ├── ImagingStudy.schema.json │ │ │ │ ├── Immunization.schema.json │ │ │ │ ├── ImmunizationRecommendation.schema.json │ │ │ │ ├── ImplementationGuide.schema.json │ │ │ │ ├── Library.schema.json │ │ │ │ ├── Linkage.schema.json │ │ │ │ ├── List.schema.json │ │ │ │ ├── Location.schema.json │ │ │ │ ├── Measure.schema.json │ │ │ │ ├── MeasureReport.schema.json │ │ │ │ ├── Media.schema.json │ │ │ │ ├── Medication.schema.json │ │ │ │ ├── MedicationAdministration.schema.json │ │ │ │ ├── MedicationDispense.schema.json │ │ │ │ ├── MedicationRequest.schema.json │ │ │ │ ├── MedicationStatement.schema.json │ │ │ │ ├── MessageDefinition.schema.json │ │ │ │ ├── MessageHeader.schema.json │ │ │ │ ├── Meta.schema.json │ │ │ │ ├── Money.schema.json │ │ │ │ ├── NamingSystem.schema.json │ │ │ │ ├── Narrative.schema.json │ │ │ │ ├── NutritionOrder.schema.json │ │ │ │ ├── Observation.schema.json │ │ │ │ ├── OperationDefinition.schema.json │ │ │ │ ├── OperationOutcome.schema.json │ │ │ │ ├── Organization.schema.json │ │ │ │ ├── ParameterDefinition.schema.json │ │ │ │ ├── Parameters.schema.json │ │ │ │ ├── Patient.schema.json │ │ │ │ ├── PaymentNotice.schema.json │ │ │ │ ├── PaymentReconciliation.schema.json │ │ │ │ ├── Period.schema.json │ │ │ │ ├── Person.schema.json │ │ │ │ ├── PlanDefinition.schema.json │ │ │ │ ├── Practitioner.schema.json │ │ │ │ ├── PractitionerRole.schema.json │ │ │ │ ├── Procedure.schema.json │ │ │ │ ├── ProcedureRequest.schema.json │ │ │ │ ├── ProcessRequest.schema.json │ │ │ │ ├── ProcessResponse.schema.json │ │ │ │ ├── Provenance.schema.json │ │ │ │ ├── Quantity.schema.json │ │ │ │ ├── Questionnaire.schema.json │ │ │ │ ├── QuestionnaireResponse.schema.json │ │ │ │ ├── Range.schema.json │ │ │ │ ├── Ratio.schema.json │ │ │ │ ├── Reference.schema.json │ │ │ │ ├── RelatedArtifact.schema.json │ │ │ │ ├── RelatedPerson.schema.json │ │ │ │ ├── RequestGroup.schema.json │ │ │ │ ├── ResearchStudy.schema.json │ │ │ │ ├── ResearchSubject.schema.json │ │ │ │ ├── Resource.schema.json │ │ │ │ ├── ResourceList.schema.json │ │ │ │ ├── RiskAssessment.schema.json │ │ │ │ ├── SampledData.schema.json │ │ │ │ ├── Schedule.schema.json │ │ │ │ ├── SearchParameter.schema.json │ │ │ │ ├── Sequence.schema.json │ │ │ │ ├── ServiceDefinition.schema.json │ │ │ │ ├── ServiceRequest.schema.json │ │ │ │ ├── Signature.schema.json │ │ │ │ ├── Slot.schema.json │ │ │ │ ├── Specimen.schema.json │ │ │ │ ├── StructureDefinition.schema.json │ │ │ │ ├── StructureMap.schema.json │ │ │ │ ├── Subscription.schema.json │ │ │ │ ├── Substance.schema.json │ │ │ │ ├── SupplyDelivery.schema.json │ │ │ │ ├── SupplyRequest.schema.json │ │ │ │ ├── Task.schema.json │ │ │ │ ├── TestReport.schema.json │ │ │ │ ├── TestScript.schema.json │ │ │ │ ├── Timing.schema.json │ │ │ │ ├── TriggerDefinition.schema.json │ │ │ │ ├── UsageContext.schema.json │ │ │ │ ├── ValueSet.schema.json │ │ │ │ ├── VisionPrescription.schema.json │ │ │ │ └── fhir.schema.json │ │ │ ├── matchers.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_fhirresourcetype.py │ │ │ │ ├── 0003_auto_20210319_0948.py │ │ │ │ ├── 0004_remove_fhirresourcetype_template.py │ │ │ │ ├── 0005_fhirimportconfig.py │ │ │ │ ├── 0006_fhirimportresourcetype_resourcetyperelationship.py │ │ │ │ ├── 0007_fhirimportresourceproperty.py │ │ │ │ ├── 0008_blank_search_params.py │ │ │ │ ├── 0009_resourcetyperelationship_related_resource_is_parent.py │ │ │ │ ├── 0010_fhirimportconfig_frequency_choices.py │ │ │ │ ├── 0011_fhirimportconfig_owner_type.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── repeater_helpers.py │ │ │ ├── repeaters.py │ │ │ ├── searchers.py │ │ │ ├── serializers.py │ │ │ ├── signals.py │ │ │ ├── tasks.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_bundle.py │ │ │ │ ├── test_fhir_views.py │ │ │ │ ├── test_matchers.py │ │ │ │ ├── test_model_functions.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_patient_reg.py │ │ │ │ ├── test_repeater_helpers.py │ │ │ │ ├── test_searchers.py │ │ │ │ ├── test_signals.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_utils.py │ │ │ │ ├── test_validators.py │ │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ ├── validators.py │ │ │ └── views.py │ │ ├── finders.py │ │ ├── forms.py │ │ ├── generic_inbound/ │ │ │ ├── __init__.py │ │ │ ├── backend/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── hl7.py │ │ │ │ └── json.py │ │ │ ├── exceptions.py │ │ │ ├── forms.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_configurableapivalidation.py │ │ │ │ ├── 0003_add_logging_models.py │ │ │ │ ├── 0004_add_filter_expression.py │ │ │ │ ├── 0005_remove_requestlog_unused_fields.py │ │ │ │ ├── 0006_backend_external_response.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── reports.py │ │ │ ├── static/ │ │ │ │ └── generic_inbound/ │ │ │ │ └── js/ │ │ │ │ ├── api_edit.js │ │ │ │ ├── api_list.js │ │ │ │ ├── copy_data.js │ │ │ │ └── manage_links.js │ │ │ ├── templates/ │ │ │ │ └── generic_inbound/ │ │ │ │ ├── api_edit.html │ │ │ │ ├── api_list.html │ │ │ │ └── request_log_detail.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── adt_a01_2.8.er7 │ │ │ │ │ ├── adt_a01_2.8.json │ │ │ │ │ ├── oru_r01_2.5.1.er7 │ │ │ │ │ └── oru_r01_2.5.1.json │ │ │ │ ├── test_api.py │ │ │ │ ├── test_api_hl7.py │ │ │ │ ├── test_api_processing.py │ │ │ │ ├── test_hl7_json_conversion.py │ │ │ │ └── test_models.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ └── create_repeat_records.py │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_requestlog_payload_id.py │ │ │ ├── 0003_auto_20200102_1006.py │ │ │ ├── 0004_connectionsettings.py │ │ │ ├── 0005_requestlog_request_body.py │ │ │ ├── 0006_connection_settings.py │ │ │ ├── 0007_auto_20200909_2138.py │ │ │ ├── 0008_requestlog_response_headers.py │ │ │ ├── 0009_auto_20211122_2011.py │ │ │ ├── 0010_auto_20211124_1931.py │ │ │ ├── 0011_connectionsettings_is_deleted.py │ │ │ ├── 0012_alter_connectionsettings_auth_type.py │ │ │ ├── 0013_alter_connectionsettings_auth_type.py │ │ │ ├── 0014_alter_connectionsettings_password.py │ │ │ ├── 0015_requestlog_duration.py │ │ │ ├── 0016_connectionsettings_include_client_id_and_more.py │ │ │ ├── 0017_connectionsettings_use_aes_cbc_encryption.py │ │ │ ├── 0018_openmrsimporter_use_aes_cbc_encryption.py │ │ │ ├── 0019_connectionsettings_custom_headers.py │ │ │ ├── 0020_alter_connectionsettings_increase_max_url_lengths.py │ │ │ ├── 0021_alter_requestlog_request_url.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── openmrs/ │ │ │ ├── __init__.py │ │ │ ├── atom_feed.py │ │ │ ├── const.py │ │ │ ├── dbaccessors.py │ │ │ ├── docs/ │ │ │ │ └── index.rst │ │ │ ├── exceptions.py │ │ │ ├── finders.py │ │ │ ├── forms.py │ │ │ ├── jsonpath.py │ │ │ ├── models.py │ │ │ ├── openmrs_config.py │ │ │ ├── repeater_helpers.py │ │ │ ├── repeaters.py │ │ │ ├── serializers.py │ │ │ ├── static/ │ │ │ │ └── openmrs/ │ │ │ │ └── js/ │ │ │ │ └── openmrs_importers.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── openmrs/ │ │ │ │ ├── edit_config.html │ │ │ │ ├── importers.html │ │ │ │ └── partials/ │ │ │ │ └── openmrs_importer_template.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── encounter.json │ │ │ │ │ ├── encounter_with_diagnoses.json │ │ │ │ │ ├── followup.json │ │ │ │ │ ├── openmrs_repeater.py │ │ │ │ │ ├── registration.json │ │ │ │ │ └── voided_patient.json │ │ │ │ ├── test_atom_feed.py │ │ │ │ ├── test_finders.py │ │ │ │ ├── test_importer.py │ │ │ │ ├── test_jsonpath.py │ │ │ │ ├── test_repeaters.py │ │ │ │ ├── test_serializers.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_views.py │ │ │ │ ├── test_workflow.py │ │ │ │ ├── test_workflow_tasks.py │ │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ ├── views.py │ │ │ ├── workflow.py │ │ │ └── workflow_tasks.py │ │ ├── rate_limiter.py │ │ ├── repeater_helpers.py │ │ ├── repeaters/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── apps.py │ │ │ ├── const.py │ │ │ ├── exceptions.py │ │ │ ├── expression/ │ │ │ │ ├── __init__.py │ │ │ │ ├── forms.py │ │ │ │ ├── repeater_generators.py │ │ │ │ ├── repeaters.py │ │ │ │ ├── tests.py │ │ │ │ └── views.py │ │ │ ├── forms.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ ├── delete_duplicate_cancelled_records.py │ │ │ │ ├── generate_repeaters_summary.py │ │ │ │ ├── repeater.py │ │ │ │ └── update_cancelled_records.py │ │ │ ├── migration_utils.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_adjust_auth_field_format_squashed_0015_drop_connection_settings_fk.py │ │ │ │ ├── 0002_repeaters_db.py │ │ │ │ ├── 0003_id_fields.py │ │ │ │ ├── 0004_fix_whitelist_bug_repeaters.py │ │ │ │ ├── 0005_datasourcerepeater.py │ │ │ │ ├── 0006_int_state_add_next_check_rm_repeater_id.py │ │ │ │ ├── 0007_lengthen_payload_id.py │ │ │ │ ├── 0008_sqlrepeatrecords.py │ │ │ │ ├── 0009_add_domain_to_indexes.py │ │ │ │ ├── 0010_rm_couch_artifacts.py │ │ │ │ ├── 0011_remove_obsolete_entities.py │ │ │ │ ├── 0012_formexpressionrepeater_arcgisformexpressionrepeater.py │ │ │ │ ├── 0013_alter_repeatrecord_state_and_more.py │ │ │ │ ├── 0014_alter_repeater_request_method.py │ │ │ │ ├── 0015_drop_receiverwrapper_couchdb.py │ │ │ │ ├── 0016_repeater_max_workers.py │ │ │ │ ├── 0017_add_indexes.py │ │ │ │ ├── 0018_datasourceupdate.py │ │ │ │ ├── 0019_connectformrepeater.py │ │ │ │ ├── 0020_repeater_extra_backoff_codes.py │ │ │ │ ├── 0021_alter_repeatrecord_state_and_more.py │ │ │ │ ├── 0022_delete_cowin_repeaters.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── optionvalue.py │ │ │ ├── repeater_generators.py │ │ │ ├── signals.py │ │ │ ├── static/ │ │ │ │ └── repeaters/ │ │ │ │ └── js/ │ │ │ │ ├── add_form_repeater.js │ │ │ │ ├── bootstrap3/ │ │ │ │ │ └── repeat_record_report.js │ │ │ │ └── bootstrap5/ │ │ │ │ └── repeat_record_report.js │ │ │ ├── tasks.py │ │ │ ├── templates/ │ │ │ │ └── repeaters/ │ │ │ │ ├── add_form_repeater.html │ │ │ │ ├── bootstrap3/ │ │ │ │ │ └── repeat_record_report.html │ │ │ │ ├── bootstrap5/ │ │ │ │ │ └── repeat_record_report.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── bootstrap3/ │ │ │ │ │ │ └── attempt_history.html │ │ │ │ │ ├── bootstrap5/ │ │ │ │ │ │ └── attempt_history.html │ │ │ │ │ └── repeater_row.html │ │ │ │ └── repeaters.html │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ └── repeaters.py │ │ │ │ ├── test_commcare_submission_response_handling.py │ │ │ │ ├── test_connect_repeater.py │ │ │ │ ├── test_data_registry_case_update_payload_generator.py │ │ │ │ ├── test_data_registry_case_update_repeater.py │ │ │ │ ├── test_dbaccessors.py │ │ │ │ ├── test_display.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_migration_utils.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_optionvalue.py │ │ │ │ ├── test_payload_generators.py │ │ │ │ ├── test_proxy_models.py │ │ │ │ ├── test_refer_case_repeater.py │ │ │ │ ├── test_repeater.py │ │ │ │ ├── test_server_errors.py │ │ │ │ ├── test_tasks.py │ │ │ │ └── test_views.py │ │ │ └── views/ │ │ │ ├── __init__.py │ │ │ ├── repeat_record_display.py │ │ │ ├── repeat_records.py │ │ │ ├── repeaters.py │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ └── test_repeat_records.py │ │ ├── requests.py │ │ ├── serializers.py │ │ ├── static/ │ │ │ └── motech/ │ │ │ └── js/ │ │ │ ├── connection_settings.js │ │ │ └── connection_settings_detail.js │ │ ├── templates/ │ │ │ └── motech/ │ │ │ ├── connection_settings.html │ │ │ ├── connection_settings_detail.html │ │ │ ├── log_detail.html │ │ │ └── logs.html │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_api_settings_migration.py │ │ │ ├── test_auth.py │ │ │ ├── test_finders.py │ │ │ ├── test_forms.py │ │ │ ├── test_models.py │ │ │ ├── test_rate_limiter.py │ │ │ ├── test_repeater_helpers.py │ │ │ ├── test_requests.py │ │ │ ├── test_serializers.py │ │ │ ├── test_simple_post.py │ │ │ ├── test_utils.py │ │ │ └── test_value_source.py │ │ ├── urls.py │ │ ├── utils.py │ │ ├── value_source.py │ │ └── views.py │ ├── pillows/ │ │ ├── README.md │ │ ├── __init__.py │ │ ├── app_submission_tracker.py │ │ ├── application.py │ │ ├── base.py │ │ ├── cacheinvalidate.py │ │ ├── case.py │ │ ├── case_search.py │ │ ├── core.py │ │ ├── domain.py │ │ ├── group.py │ │ ├── groups_to_user.py │ │ ├── ledger.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ ├── print_elastic_mappings.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_utils.py │ │ │ └── utils.py │ │ ├── sms.py │ │ ├── synclog.py │ │ ├── tasks.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_case_search.py │ │ │ └── test_xform_date_formats.py │ │ ├── user.py │ │ ├── utils.py │ │ └── xform.py │ ├── preindex/ │ │ ├── __init__.py │ │ ├── accessors.py │ │ ├── apps.py │ │ ├── couchviews.lock │ │ ├── default_plugin.py │ │ ├── django_migrations.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ ├── fast_index_couch_views.py │ │ │ ├── sync_couch_views.py │ │ │ ├── sync_finish_couchdb_hq.py │ │ │ └── sync_prepare_couchdb_multi.py │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_initial.py │ │ │ ├── 0003_initial.py │ │ │ ├── 0004_initial.py │ │ │ ├── 0005_initial.py │ │ │ ├── 0006_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── preindex_plugins.py │ │ ├── tasks.py │ │ └── tests/ │ │ ├── __init__.py │ │ └── test_django_migrations.py │ ├── privileges.py │ ├── project_limits/ │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── const.py │ │ ├── exceptions.py │ │ ├── gauge.py │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_ratelimitedtwofactorlog.py │ │ │ ├── 0003_pillowlaggaugedefinition.py │ │ │ ├── 0004_systemlimit.py │ │ │ ├── 0005_systemlimit_owneriddefault.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── rate_counter/ │ │ │ ├── __init__.py │ │ │ ├── interfaces.py │ │ │ ├── presets.py │ │ │ └── rate_counter.py │ │ ├── rate_limiter.py │ │ ├── shortcuts.py │ │ └── tests/ │ │ ├── __init__.py │ │ ├── test_dynamic_rate_definition.py │ │ ├── test_gauge.py │ │ ├── test_get_n_users_for_rate_limiting.py │ │ ├── test_rate_counter.py │ │ ├── test_rate_definition.py │ │ ├── test_rate_limiter.py │ │ ├── test_shortcuts.py │ │ └── test_system_limit.py │ ├── reports.py │ ├── sql_accessors/ │ │ ├── __init__.py │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_add_sync_functions.py │ │ │ ├── 0003_get_forms_by_user_id_functions.py │ │ │ ├── 0004_get_modified_since_functions.py │ │ │ ├── 0005_add_fields_to_attachments.py │ │ │ ├── 0006_add_fields_to_case_attachments.py │ │ │ ├── 0007_rename_get_case_attachment_by_name.py │ │ │ ├── 0008_get_case_by_external_id.py │ │ │ ├── 0009_ledger_accessors.py │ │ │ ├── 0010_update_state_type_values.py │ │ │ ├── 0011_get_case_types_for_domain.py │ │ │ ├── 0012_get_case_transactions_by_type.py │ │ │ ├── 0012_soft_deletion.py │ │ │ ├── 0013_merge.py │ │ │ ├── 0014_ledger_transactions.py │ │ │ ├── 0015_get_form_ids_in_domain.py │ │ │ ├── 0015_ledger_transactions_update.py │ │ │ ├── 0016_ledger_values_by_product_ids.py │ │ │ ├── 0017_merge.py │ │ │ ├── 0018_save_ledger_values_rebuild.py │ │ │ ├── 0019_get_case_ids_in_domain_by_owners.py │ │ │ ├── 0020_soft_delete_cases.py │ │ │ ├── 0021_get_ledger_values_for_cases.py │ │ │ ├── 0022_last_modified_form_id.py │ │ │ ├── 0023_update_get_case_form_ids.py │ │ │ ├── 0024_delete_ledgers.py │ │ │ ├── 0024_update_save_ledger_values.py │ │ │ ├── 0025_update_get_ledger_values_for_cases.py │ │ │ ├── 0026_get_all_ledger_values_since.py │ │ │ ├── 0027_audit_fixups.py │ │ │ ├── 0028_rename_get_multiple_forms_attachments.py │ │ │ ├── 0029_get_case_ids_in_domain.py │ │ │ ├── 0030_index_changes.py │ │ │ ├── 0031_remove_get_ledger_values_for_product_ids.py │ │ │ ├── 0032_exclude_deleted_cases.py │ │ │ ├── 0033_remove_location_id_from_ledgers.py │ │ │ ├── 0034_update_reindex_functions.py │ │ │ ├── 0035_add_undelete_functions.py │ │ │ ├── 0036_exclude_deleted.py │ │ │ ├── 0037_delete_ledgers_with_case.py │ │ │ ├── 0038_attachment_bucket.py │ │ │ ├── 0038_save_case_deletion_fields.py │ │ │ ├── 0039_update_reindex_queries.py │ │ │ ├── 0040_fix_case_reindex_query.py │ │ │ ├── 0041_latest_ledger_transactions_fix.py │ │ │ ├── 0042_write_blob_bucket.py │ │ │ ├── 0043_faster_get_reverse_indexed_cases.py │ │ │ ├── 0044_remove_get_case_types_for_domain.py │ │ │ ├── 0045_drop_case_modified_since.py │ │ │ ├── 0046_livequery_sql.py │ │ │ ├── 0047_livequery_sql.py │ │ │ ├── 0048_livequery_sql.py │ │ │ ├── 0049_remove_save_case.py │ │ │ ├── 0050_faster_get_reverse_indexed_cases.py │ │ │ ├── 0050_remove_get_extension_case_ids.py │ │ │ ├── 0051_merge_20170724_1255.py │ │ │ ├── 0052_save_ledgers_fix.py │ │ │ ├── 0053_drop_unused_sql.py │ │ │ ├── 0054_drop_reindexa_accessor_functions.py │ │ │ ├── 0055_set_form_modified_on.py │ │ │ ├── 0056_add_hashlib_functions.py │ │ │ ├── 0057_filter_get_reverse_indexed_cases.py │ │ │ ├── 0058_drop_old_reverse_indexed_fn.py │ │ │ ├── 0059_case_attachment_refactor.py │ │ │ ├── 0060_case_attachment_drops.py │ │ │ ├── 0061_check_transaction_sort_order.py │ │ │ ├── 0062_form_attachments.py │ │ │ ├── 0063_get_ledger_values_for_cases_2.py │ │ │ ├── 0064_remove_get_case_models_functions.py │ │ │ ├── 0065_get_ledger_values_for_cases_3.py │ │ │ ├── 0066_drop_unused_function.py │ │ │ ├── 0067_livequery_sql.py │ │ │ ├── 0067_livequery_sql_include_deleted_indices.py │ │ │ ├── 0068_remove_deleted_state.py │ │ │ ├── 0069_drop_DELETED_references_fn.py │ │ │ └── __init__.py │ │ ├── models.py │ │ └── sql_templates/ │ │ ├── README.md │ │ ├── _template.sql │ │ ├── archive_unarchive_form2.sql │ │ ├── case_has_transactions_since_sync.sql │ │ ├── compare_server_client_case_transaction_order.sql │ │ ├── delete_ledger_transactions_for_form.sql │ │ ├── delete_ledger_values.sql │ │ ├── drop_get_case_ids_modified_with_owner_since.sql │ │ ├── get_all_reverse_indices_1.sql │ │ ├── get_case_attachment_by_name.sql │ │ ├── get_case_by_external_id_1.sql │ │ ├── get_case_by_location_id_1.sql │ │ ├── get_case_ids_in_domain_2.sql │ │ ├── get_case_ids_modified_with_owner_since_1.sql │ │ ├── get_case_indices_reverse_2.sql │ │ ├── get_case_last_modified_dates.sql │ │ ├── get_case_transaction_by_form_id.sql │ │ ├── get_case_transactions_by_type.sql │ │ ├── get_cases_by_id.sql │ │ ├── get_closed_and_deleted_ids.sql │ │ ├── get_form_attachment_by_name.sql │ │ ├── get_form_ids_for_user_2.sql │ │ ├── get_form_ids_in_domain_by_type.sql │ │ ├── get_forms_by_id.sql │ │ ├── get_forms_by_state.sql │ │ ├── get_latest_ledger_transaction.sql │ │ ├── get_ledger_transactions_for_case.sql │ │ ├── get_ledger_value.sql │ │ ├── get_ledger_values_for_cases.sql │ │ ├── get_ledger_values_for_cases_3.sql │ │ ├── get_modified_case_ids.sql │ │ ├── get_multiple_cases_indices.sql │ │ ├── get_multiple_forms_attachments.sql │ │ ├── get_related_indices.sql │ │ ├── get_reverse_indexed_cases_3.sql │ │ ├── hard_delete_cases_2.sql │ │ ├── revoke_restore_case_transactions_for_form.sql │ │ ├── soft_delete_cases.sql │ │ ├── soft_delete_forms_3.sql │ │ ├── soft_undelete_cases.sql │ │ ├── soft_undelete_forms_3.sql │ │ └── update_form_problem_and_state.sql │ ├── sql_db/ │ │ ├── __init__.py │ │ ├── app_config.py │ │ ├── config.py │ │ ├── connections.py │ │ ├── exceptions.py │ │ ├── fields.py │ │ ├── functions.py │ │ ├── jsonops.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ ├── configure_pl_proxy_cluster.py │ │ │ ├── locate_invalid_shard_data.py │ │ │ ├── migrate.py │ │ │ ├── migrate_multi.py │ │ │ ├── print_approximate_doc_distribution.py │ │ │ ├── print_database_shard_data.py │ │ │ └── print_max_id_of_pg_tables.py │ │ ├── migrations.py │ │ ├── models.py │ │ ├── operations.py │ │ ├── routers.py │ │ ├── shard_data_management.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_checks.py │ │ │ ├── test_connections.py │ │ │ ├── test_fields.py │ │ │ ├── test_jsonops.py │ │ │ ├── test_model_partitioning.py │ │ │ ├── test_partition_config.py │ │ │ ├── test_routers.py │ │ │ ├── test_shard_management.py │ │ │ ├── test_utils.py │ │ │ └── utils.py │ │ └── util.py │ ├── sql_proxy_accessors/ │ │ ├── README.md │ │ ├── __init__.py │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_add_sync_functions.py │ │ │ ├── 0003_get_forms_by_user_id_functions.py │ │ │ ├── 0004_get_modified_since_functions.py │ │ │ ├── 0005_rename_get_case_attachment_by_name.py │ │ │ ├── 0006_get_case_by_external_id.py │ │ │ ├── 0007_ledger_accessors.py │ │ │ ├── 0008_get_case_types_for_domain.py │ │ │ ├── 0009_get_transactions_by_type.py │ │ │ ├── 0009_soft_delete.py │ │ │ ├── 0010_merge.py │ │ │ ├── 0011_ledger_transactions.py │ │ │ ├── 0012_get_form_ids_in_domain.py │ │ │ ├── 0012_ledger_transactions_update.py │ │ │ ├── 0013_ledger_values_by_product_ids.py │ │ │ ├── 0014_merge.py │ │ │ ├── 0015_save_ledger_values_rebuild.py │ │ │ ├── 0016_get_case_ids_in_domain_by_owners.py │ │ │ ├── 0017_soft_delete_cases.py │ │ │ ├── 0018_get_ledger_values_for_cases.py │ │ │ ├── 0019_delete_ledgers.py │ │ │ ├── 0020_update_get_ledger_values_for_cases.py │ │ │ ├── 0021_get_all_ledger_values_modified_since.py │ │ │ ├── 0022_audit_fixups.py │ │ │ ├── 0023_rename_get_multiple_forms_attachments.py │ │ │ ├── 0024_get_case_ids_in_domain.py │ │ │ ├── 0025_index_changes.py │ │ │ ├── 0026_remove_get_ledger_values_for_product_ids.py │ │ │ ├── 0027_add_undelete_functions.py │ │ │ ├── 0030_exclude_deleted.py │ │ │ ├── 0031_write_blob_bucket.py │ │ │ ├── 0032_remove_get_cases_by_domain.py │ │ │ ├── 0033_drop_case_modified_since.py │ │ │ ├── 0034_livequery_sql.py │ │ │ ├── 0035_livequery_sql.py │ │ │ ├── 0036_remove_save_case.py │ │ │ ├── 0037_remove_get_extension_case_ids.py │ │ │ ├── 0038_drop_unused_sql.py │ │ │ ├── 0039_filter_get_reverse_indexed_cases.py │ │ │ ├── 0040_drop_old_reverse_indexed_fn.py │ │ │ ├── 0041_case_attachment_refactor.py │ │ │ ├── 0042_case_attachment_drops.py │ │ │ ├── 0043_blobmeta.py │ │ │ ├── 0044_blobmeta_form_attachments.py │ │ │ ├── 0045_form_attachments.py │ │ │ ├── 0046_get_ledger_values_for_cases_2.py │ │ │ ├── 0047_remove_get_case_models_functions.py │ │ │ ├── 0048_get_ledger_values_for_cases_3.py │ │ │ ├── 0049_drop_unused_function.py │ │ │ ├── 0050_remove_deleted_state.py │ │ │ ├── 0051_drop_DELETED_references_fn.py │ │ │ └── __init__.py │ │ ├── models.py │ │ └── sql_templates/ │ │ ├── _template.sql │ │ ├── archive_unarchive_form.sql │ │ ├── case_has_transactions_since_sync.sql │ │ ├── delete_blob_meta.sql │ │ ├── delete_ledger_transactions_for_form.sql │ │ ├── delete_ledger_values.sql │ │ ├── drop_get_case_ids_modified_with_owner_since.sql │ │ ├── get_all_reverse_indices.sql │ │ ├── get_blobmetas.sql │ │ ├── get_case_attachment_by_name.sql │ │ ├── get_case_by_external_id.sql │ │ ├── get_case_by_location_id.sql │ │ ├── get_case_ids_in_domain_2.sql │ │ ├── get_case_ids_modified_with_owner_since.sql │ │ ├── get_case_indices_reverse_1.sql │ │ ├── get_case_last_modified_dates.sql │ │ ├── get_case_transaction_by_form_id.sql │ │ ├── get_case_transactions_by_type.sql │ │ ├── get_cases_by_id.sql │ │ ├── get_closed_and_deleted_ids.sql │ │ ├── get_form_attachment_by_name.sql │ │ ├── get_form_ids_for_user_2.sql │ │ ├── get_form_ids_in_domain_by_type.sql │ │ ├── get_forms_by_id.sql │ │ ├── get_forms_by_state.sql │ │ ├── get_latest_ledger_transaction.sql │ │ ├── get_ledger_transactions_for_case.sql │ │ ├── get_ledger_value.sql │ │ ├── get_ledger_values_for_cases.sql │ │ ├── get_ledger_values_for_cases_3.sql │ │ ├── get_modified_case_ids.sql │ │ ├── get_multiple_cases_indices.sql │ │ ├── get_multiple_forms_attachments.sql │ │ ├── get_related_indices.sql │ │ ├── get_reverse_indexed_cases_3.sql │ │ ├── hard_delete_cases.sql │ │ ├── revoke_restore_case_transactions_for_form.sql │ │ ├── soft_delete_cases.sql │ │ ├── soft_delete_forms_3.sql │ │ ├── soft_undelete_cases.sql │ │ ├── soft_undelete_forms_3.sql │ │ └── update_form_problem_and_state.sql │ ├── sql_proxy_standby_accessors/ │ │ ├── __init__.py │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ └── sql_templates/ │ │ ├── _template.sql │ │ └── get_replication_delay.sql │ ├── tabs/ │ │ ├── __init__.py │ │ ├── config.py │ │ ├── exceptions.py │ │ ├── extension_points.py │ │ ├── tabclasses.py │ │ ├── templates/ │ │ │ └── tabs/ │ │ │ ├── bootstrap3/ │ │ │ │ ├── menu_main.html │ │ │ │ └── menu_submenu.html │ │ │ └── bootstrap5/ │ │ │ ├── menu_main.html │ │ │ └── menu_submenu.html │ │ ├── templatetags/ │ │ │ ├── __init__.py │ │ │ └── menu_tags.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_tabclasses.py │ │ │ └── test_uitab.py │ │ ├── uitab.py │ │ └── utils.py │ ├── tests/ │ │ ├── __init__.py │ │ ├── locks.py │ │ ├── nosecompat.py │ │ ├── pytest_hooks.py │ │ ├── pytest_plugins/ │ │ │ ├── __init__.py │ │ │ ├── dividedwerun.py │ │ │ ├── patches.py │ │ │ ├── redislocks.py │ │ │ ├── reusedb.py │ │ │ ├── timelimit.py │ │ │ └── util.py │ │ ├── test_classcleanup.py │ │ ├── test_dividedwerun.py │ │ ├── test_elastic.py │ │ ├── test_locks.py │ │ ├── test_middleware.py │ │ ├── test_pickle.py │ │ ├── test_reusedb.py │ │ ├── test_timelimit.py │ │ ├── test_toggles.py │ │ ├── tools.py │ │ └── util/ │ │ ├── __init__.py │ │ ├── artifact.py │ │ ├── context.py │ │ ├── htmx.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── test_context.py │ │ │ ├── test_timelimit.py │ │ │ └── test_warnings.py │ │ ├── timelimit.py │ │ ├── warnings.py │ │ └── xml.py │ ├── toggles/ │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ └── list_ff_domains.py │ │ ├── migrations/ │ │ │ ├── 0001_toggle_edit_permission.py │ │ │ ├── 0002_assign_permissions_superusers.py │ │ │ ├── 0003_delete_web_usercase_toggle.py │ │ │ ├── 0004_alter_toggleeditpermission_tag_slug.py │ │ │ ├── 0005_alter_toggleeditpermission_tag_slug.py │ │ │ ├── 0006_alter_toggleeditpermission_tag_slug.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── shortcuts.py │ │ ├── sql_models.py │ │ └── tests.py │ ├── util/ │ │ ├── __init__.py │ │ ├── argparse_types.py │ │ ├── auth.py │ │ ├── bitly.py │ │ ├── bounced_email_manager.py │ │ ├── bounced_email_utils.py │ │ ├── cache_utils.py │ │ ├── celery_utils.py │ │ ├── compression.py │ │ ├── context_managers.py │ │ ├── context_processors.py │ │ ├── couch.py │ │ ├── couch_helpers.py │ │ ├── couchdb_management.py │ │ ├── dates.py │ │ ├── debug.py │ │ ├── decorators.py │ │ ├── django_migrations.py │ │ ├── doc_processor/ │ │ │ ├── __init__.py │ │ │ ├── couch.py │ │ │ ├── interface.py │ │ │ ├── progress.py │ │ │ └── sql.py │ │ ├── download.py │ │ ├── elastic.py │ │ ├── email_event_utils.py │ │ ├── es/ │ │ │ ├── __init__.py │ │ │ ├── elasticsearch.py │ │ │ ├── testing.py │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ └── test_interface.py │ │ ├── exceptions.py │ │ ├── files.py │ │ ├── ghdiff.py │ │ ├── global_request/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ └── middleware.py │ │ ├── hmac_request.py │ │ ├── html_utils.py │ │ ├── htmx_action.py │ │ ├── htmx_debug.py │ │ ├── htmx_gtm.py │ │ ├── io.py │ │ ├── itertools.py │ │ ├── jqueryrmi.py │ │ ├── json.py │ │ ├── jsonattrs.py │ │ ├── log.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ ├── check_bounced_email.py │ │ │ ├── check_couchdb_replication.py │ │ │ ├── create_couchdb_replication.py │ │ │ ├── mark_email_as_bounced.py │ │ │ ├── process_bounced_emails.py │ │ │ ├── revoke_celery_tasks.py │ │ │ ├── show_celery_tasks.py │ │ │ ├── show_celery_workers.py │ │ │ └── unbounce_email.py │ │ ├── markup.py │ │ ├── metrics/ │ │ │ ├── __init__.py │ │ │ ├── const.py │ │ │ ├── datadog.py │ │ │ ├── load_counters.py │ │ │ ├── lockmeter.py │ │ │ ├── metrics.py │ │ │ ├── prometheus.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_lockmeter.py │ │ │ │ ├── test_metrics.py │ │ │ │ ├── test_utils.py │ │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_complaintbouncemeta_permanentbouncemeta_transientbounceemail.py │ │ │ └── __init__.py │ │ ├── mixin.py │ │ ├── models.py │ │ ├── pagination.py │ │ ├── public_only_requests/ │ │ │ ├── __init__.py │ │ │ ├── public_only_requests.py │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ └── test_public_only_session.py │ │ ├── queries.py │ │ ├── quickcache.py │ │ ├── sentry.py │ │ ├── serialization.py │ │ ├── signals.py │ │ ├── soft_assert/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ └── core.py │ │ ├── strings.py │ │ ├── teeout.py │ │ ├── test_utils.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ ├── data/ │ │ │ │ ├── duplicate_columns.xlsx │ │ │ │ ├── email/ │ │ │ │ │ ├── email_delivery_failure.txt │ │ │ │ │ ├── exchange_bounce.txt │ │ │ │ │ ├── forwarded_bounce.txt │ │ │ │ │ ├── out_of_office.txt │ │ │ │ │ ├── scheduled_complaint.json │ │ │ │ │ ├── scheduled_general_bounce.json │ │ │ │ │ ├── scheduled_suppressed_bounce.json │ │ │ │ │ ├── scheduled_transient_bounce.json │ │ │ │ │ ├── send_event.json │ │ │ │ │ ├── sns_bounce_general.txt │ │ │ │ │ ├── sns_bounce_suppressed.txt │ │ │ │ │ ├── sns_bounce_transient.txt │ │ │ │ │ ├── sns_complaint.txt │ │ │ │ │ ├── standard_aws_bounce.txt │ │ │ │ │ └── yahoo_qmail_failure.txt │ │ │ │ ├── formula_sheet.xlsx │ │ │ │ └── not_excel_file.xlsx │ │ │ ├── test_argparse_types.py │ │ │ ├── test_bounced_email_manager.py │ │ │ ├── test_bounced_emails.py │ │ │ ├── test_cache_util.py │ │ │ ├── test_celery_utils.py │ │ │ ├── test_context_processors.py │ │ │ ├── test_couch.py │ │ │ ├── test_couchdb_management.py │ │ │ ├── test_dates.py │ │ │ ├── test_decorators.py │ │ │ ├── test_django_migrations.py │ │ │ ├── test_doc_processor.py │ │ │ ├── test_email_event_utils.py │ │ │ ├── test_excel.py │ │ │ ├── test_files.py │ │ │ ├── test_ghdiff.py │ │ │ ├── test_global_request.py │ │ │ ├── test_html_utils.py │ │ │ ├── test_io.py │ │ │ ├── test_itertools.py │ │ │ ├── test_jqueryrmi.py │ │ │ ├── test_json_error.py │ │ │ ├── test_jsonattrs.py │ │ │ ├── test_jsonobject.py │ │ │ ├── test_log.py │ │ │ ├── test_markup.py │ │ │ ├── test_models.py │ │ │ ├── test_pagination.py │ │ │ ├── test_queries.py │ │ │ ├── test_quickcache.py │ │ │ ├── test_sentry.py │ │ │ ├── test_signals.py │ │ │ ├── test_soft_assert.py │ │ │ ├── test_strings.py │ │ │ ├── test_teeout.py │ │ │ ├── test_timezone_conversions.py │ │ │ ├── test_toggle.py │ │ │ ├── test_utils.py │ │ │ ├── test_validation.py │ │ │ ├── test_view_utils.py │ │ │ └── test_xml.py │ │ ├── timer.py │ │ ├── timezones/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── conversions.py │ │ │ ├── fields.py │ │ │ ├── forms.py │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_utils.py │ │ │ ├── utils.py │ │ │ └── zones.py │ │ ├── translation.py │ │ ├── urlvalidate/ │ │ │ ├── __init__.py │ │ │ ├── ip_resolver.py │ │ │ ├── test/ │ │ │ │ ├── __init__.py │ │ │ │ ├── mockipinfo.py │ │ │ │ ├── test_ip_resolver.py │ │ │ │ └── test_urlsanitize.py │ │ │ └── urlvalidate.py │ │ ├── validation.py │ │ ├── view_utils.py │ │ ├── workbook_json/ │ │ │ ├── __init__.py │ │ │ ├── const.py │ │ │ ├── excel.py │ │ │ ├── excel_importer.py │ │ │ ├── exceptions.py │ │ │ ├── export.py │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ └── test_spreadsheets.py │ │ ├── workbook_reading/ │ │ │ ├── __init__.py │ │ │ ├── adapters/ │ │ │ │ ├── __init__.py │ │ │ │ ├── csv.py │ │ │ │ ├── generic.py │ │ │ │ ├── raw_data.py │ │ │ │ ├── xls.py │ │ │ │ └── xlsx.py │ │ │ ├── datamodels.py │ │ │ ├── exceptions.py │ │ │ └── tests/ │ │ │ ├── __init__.py │ │ │ ├── files/ │ │ │ │ ├── csv/ │ │ │ │ │ ├── broken-utf-8.csv │ │ │ │ │ ├── empty_file.csv │ │ │ │ │ ├── encrypted.csv │ │ │ │ │ ├── mixed.csv │ │ │ │ │ └── types.csv │ │ │ │ ├── xls/ │ │ │ │ │ ├── empty_file.xls │ │ │ │ │ ├── encrypted.xls │ │ │ │ │ └── types.xls │ │ │ │ └── xlsx/ │ │ │ │ ├── empty_file.xlsx │ │ │ │ ├── encrypted.xlsx │ │ │ │ └── types.xlsx │ │ │ ├── test_errors.py │ │ │ ├── test_spreadsheets.py │ │ │ └── utils.py │ │ └── xml_utils.py │ └── warnings.py ├── custom/ │ ├── CONTRIBUTING.rst │ ├── _legacy/ │ │ └── mvp/ │ │ ├── __init__.py │ │ ├── commcare_extensions.py │ │ └── ucr/ │ │ ├── __init__.py │ │ └── reports/ │ │ ├── __init__.py │ │ ├── data_sources/ │ │ │ └── va_datasource.json │ │ ├── deidentified_va_report.json │ │ └── expressions.py │ ├── abt/ │ │ ├── __init__.py │ │ ├── commcare_extensions.py │ │ ├── messaging/ │ │ │ ├── __init__.py │ │ │ └── custom_recipients.py │ │ ├── reports/ │ │ │ ├── __init__.py │ │ │ ├── data_sources/ │ │ │ │ ├── late_pmt.json │ │ │ │ ├── sms_case.json │ │ │ │ ├── supervisory.json │ │ │ │ ├── supervisory_v2.json │ │ │ │ ├── supervisory_v2019.json │ │ │ │ └── supervisory_v2020.json │ │ │ ├── expressions.py │ │ │ ├── filters.py │ │ │ ├── filters_2020.py │ │ │ ├── fixture_utils.py │ │ │ ├── flagspecs.yml │ │ │ ├── flagspecs_uganda.yml │ │ │ ├── flagspecs_v2.yml │ │ │ ├── flagspecs_v2019.yml │ │ │ ├── flagspecs_v2020.yml │ │ │ ├── incident_report.json │ │ │ ├── late_pmt_2020.py │ │ │ ├── progress_report.json │ │ │ ├── sms_indicator_report.json │ │ │ ├── spray_progress_country.json │ │ │ ├── spray_progress_level_1.json │ │ │ ├── spray_progress_level_2.json │ │ │ ├── spray_progress_level_3.json │ │ │ ├── spray_progress_level_4.json │ │ │ ├── supervisory_report.json │ │ │ ├── supervisory_report_v2.json │ │ │ ├── supervisory_report_v2019.json │ │ │ ├── supervisory_report_v2020.json │ │ │ ├── tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_fixture_utils.py │ │ │ │ ├── test_flagspecs.py │ │ │ │ └── test_late_pmt_2020.py │ │ │ └── views.py │ │ └── tests/ │ │ ├── __init__.py │ │ └── test_custom_recipients.py │ ├── api/ │ │ ├── __init__.py │ │ ├── models.py │ │ └── utils.py │ ├── bha/ │ │ ├── __init__.py │ │ ├── commcare_extensions.py │ │ ├── tasks.py │ │ ├── tests/ │ │ │ ├── __init__.py │ │ │ └── test_csql_context.py │ │ └── util.py │ ├── ccqa/ │ │ ├── __init__.py │ │ └── ucr/ │ │ ├── data_sources/ │ │ │ └── patients.json │ │ └── reports/ │ │ └── patients.json │ ├── covid/ │ │ ├── __init__.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── add_assignment_cases.py │ │ │ ├── add_hq_user_id_to_case.py │ │ │ ├── clear_owner_ids.py │ │ │ ├── fetch_deleted_cases.py │ │ │ ├── fetch_form_case_counts.py │ │ │ ├── run_all_management_command.py │ │ │ ├── update_all_activity_complete_date.py │ │ │ ├── update_case_index_relationship.py │ │ │ ├── update_cases.py │ │ │ └── update_owner_ids.py │ │ ├── rules/ │ │ │ ├── custom_actions.py │ │ │ └── custom_criteria.py │ │ └── tests/ │ │ ├── __init__.py │ │ ├── test_custom_rules.py │ │ └── test_management_commands.py │ ├── dfci_swasth/ │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── rules/ │ │ │ └── custom_actions.py │ │ └── tests/ │ │ ├── __init__.py │ │ └── test_custom_actions.py │ ├── echis_reports/ │ │ └── ucr/ │ │ ├── data_sources/ │ │ │ ├── annual_service_delivery_ds_v1.json │ │ │ ├── hew_performance.json │ │ │ ├── hmis_mobile_job_aid.json │ │ │ ├── household_characteristics_data_source.json │ │ │ ├── household_profile_data_source.json │ │ │ ├── household_with_access_to_Latrine_by_type_data_source.json │ │ │ ├── kebele_population_profile_data_source.json │ │ │ ├── leprosy_datasource.json │ │ │ ├── malaria_datasource.json │ │ │ ├── quarterly_service_delivery_ds_v1.json │ │ │ ├── service_delivery_dsV13.json │ │ │ └── tb_datasource.json │ │ └── reports/ │ │ ├── 6_1_Maternal_Health__ANC_BA_FP_.json │ │ ├── 6_2_Child_Health__CH_EPI_.json │ │ ├── 6_3_CDC_Nutrition__EPDS_HCSM.json │ │ ├── 6_4_service_delivery_quarterly_report.json │ │ ├── 6_5_service_delivery_annual_report.json │ │ ├── 7_1_tb_monthly_report.json │ │ ├── 7_2_malaria_weekly_report.json │ │ ├── 7_3_malaria_monthly_report.json │ │ ├── 7_4_leprosy_quarterly_report.json │ │ ├── hew_performance_by_health_post.json │ │ ├── hew_performance_by_hew.json │ │ ├── hew_performance_by_submission_date.json │ │ ├── hew_performance_by_submission_date_all_forms.json │ │ ├── hew_performance_report_focal_person.json │ │ ├── hmis_monthly_mobile_job_4_child_illness_r3.json │ │ ├── hmis_monthly_mobile_job_aid_2_family_planning_r2.json │ │ ├── hmis_monthly_mobile_job_aid_3_immun_growth_r2.json │ │ ├── hmis_monthly_mobile_job_aid_focal_person.json │ │ ├── hmis_monthly_mobile_job_aid_focal_person_family_planning.json │ │ ├── hmis_monthly_mobile_job_aid_focal_person_immun_growth.json │ │ ├── hmis_monthly_mobile_job_aid_r1.2.json │ │ ├── household_characteristics.json │ │ ├── household_profile.json │ │ ├── household_with_access_to_latrine_by_type.json │ │ ├── ivr_weekly_mobile_job_aid.json │ │ └── kebele_population_profile_report.json │ ├── eqa/ │ │ ├── __init__.py │ │ ├── commcare_extensions.py │ │ └── expressions.py │ ├── expired_domains.md │ ├── gcc_sangath/ │ │ ├── __init__.py │ │ ├── const.py │ │ ├── rules/ │ │ │ └── custom_actions.py │ │ └── tests/ │ │ ├── __init__.py │ │ └── test_custom_actions.py │ ├── hki/ │ │ ├── __init__.py │ │ └── management/ │ │ ├── __init__.py │ │ └── commands/ │ │ └── __init__.py │ ├── hmhb/ │ │ ├── __init__.py │ │ └── management/ │ │ ├── __init__.py │ │ └── commands/ │ │ ├── __init__.py │ │ └── repeat_forms_by_external_id.py │ ├── inddex/ │ │ ├── __init__.py │ │ ├── const.py │ │ ├── example_data/ │ │ │ ├── __init__.py │ │ │ ├── conv_factors.csv │ │ │ ├── data.py │ │ │ ├── food_cases.csv │ │ │ ├── food_composition_table.csv │ │ │ ├── food_list.csv │ │ │ ├── foodrecall_cases.csv │ │ │ ├── languages.csv │ │ │ ├── nutrients_lookup.csv │ │ │ └── recipes.csv │ │ ├── filters.py │ │ ├── fixtures.py │ │ ├── food.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ └── populate_inddex_test_domain.py │ │ ├── reports/ │ │ │ ├── __init__.py │ │ │ ├── r1_master_data.py │ │ │ ├── r2a_gaps_summary.py │ │ │ ├── r2b_gaps_detail.py │ │ │ ├── r3_nutrient_intake.py │ │ │ ├── r4_nutrient_stats.py │ │ │ └── utils.py │ │ ├── static/ │ │ │ └── inddex/ │ │ │ └── js/ │ │ │ └── main.js │ │ ├── templates/ │ │ │ └── inddex/ │ │ │ ├── multi_report.html │ │ │ ├── partials/ │ │ │ │ └── report_table.html │ │ │ └── report_base.html │ │ ├── tests/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── data/ │ │ │ │ ├── 1_master.csv │ │ │ │ ├── 2a_conv_factor_gaps_summary.csv │ │ │ │ ├── 2a_fct_gaps_summary.csv │ │ │ │ ├── 2b_gaps_by_item_details.csv │ │ │ │ ├── 2b_gaps_by_item_summary.csv │ │ │ │ ├── 3_aggr_daily_intake_by_rspndnt.csv │ │ │ │ ├── 3_disaggr_intake_data_by_rspndnt.csv │ │ │ │ ├── 4_nutr_intake_summary_stats.csv │ │ │ │ └── data_source.csv │ │ │ ├── test_doctests.py │ │ │ └── test_master_report.py │ │ ├── ucr/ │ │ │ ├── __init__.py │ │ │ └── data_sources/ │ │ │ └── food_consumption_indicators.json │ │ └── ucr_data.py │ ├── mgh_epic/ │ │ ├── __init__.py │ │ ├── sync_epic_appointments.py │ │ └── tasks.py │ ├── nutrition_project/ │ │ ├── __init__.py │ │ ├── commcare_extensions.py │ │ └── ucr/ │ │ ├── data_sources/ │ │ │ ├── death_records_v1.json │ │ │ ├── deliveries_v1.json │ │ │ ├── member_cases_v1.json │ │ │ ├── member_registrations_v1.json │ │ │ ├── nutrition_delivery_children_3_to_6_v1.json │ │ │ ├── pregnancy_registrations_v1.json │ │ │ ├── supplementary_nutrition_hcm_3years_6years.json │ │ │ ├── supplementary_nutrition_hcm_v1.json │ │ │ ├── supplementary_nutrition_thr_6months_3years.json │ │ │ ├── supplementary_nutrition_thr_pw_lw.json │ │ │ ├── supplementary_nutrition_thr_v1.json │ │ │ └── weight_and_height_records_v1.json │ │ ├── reports/ │ │ │ ├── deaths_v1.json │ │ │ ├── deliveries_v1.json │ │ │ ├── delivery_deaths_v1.json │ │ │ ├── growth_monitoring_v1.json │ │ │ ├── hcm_3years_6years_v1.json │ │ │ ├── hcm_report_v1.json │ │ │ ├── member_cases_v1.json │ │ │ ├── member_registrations_v1.json │ │ │ ├── number_of_days_center_open_v1.json │ │ │ ├── pregnancy_registrations_v1.json │ │ │ ├── thr_6months_3years_v1.json │ │ │ ├── thr_lw_v1.json │ │ │ ├── thr_pw_v1.json │ │ │ └── thr_report_v1.json │ │ └── sum_when_templates.py │ ├── onse/ │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── case_property_map.csv │ │ ├── const.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ ├── fetch_onse_data_set_ids.py │ │ │ └── update_onse_facility_cases.py │ │ ├── models.py │ │ ├── tasks.py │ │ └── tests.py │ ├── polio_rdc/ │ │ └── ucr/ │ │ └── data_sources/ │ │ └── users.json │ ├── reports/ │ │ ├── __init__.py │ │ └── mc/ │ │ ├── __init__.py │ │ ├── data_sources/ │ │ │ ├── malaria_consortium.json │ │ │ └── weekly_forms.json │ │ ├── reports/ │ │ │ ├── __init__.py │ │ │ ├── definitions.py │ │ │ ├── fields.py │ │ │ ├── models.py │ │ │ └── sql.py │ │ ├── static/ │ │ │ └── mc/ │ │ │ └── js/ │ │ │ └── main.js │ │ └── templates/ │ │ └── mc/ │ │ ├── base_template.html │ │ └── reports/ │ │ ├── drillable_async.html │ │ ├── hf_weekly.html │ │ └── sectioned_tabular.html │ ├── samveg/ │ │ ├── __init__.py │ │ ├── case_importer/ │ │ │ ├── __init__.py │ │ │ ├── exceptions.py │ │ │ ├── operations.py │ │ │ └── validators.py │ │ ├── commcare_extensions.py │ │ ├── const.py │ │ └── tests/ │ │ ├── __init__.py │ │ └── case_importer/ │ │ ├── __init__.py │ │ ├── data/ │ │ │ ├── missing_call_columns_case_upload.xlsx │ │ │ ├── missing_columns_rch_case_upload.xlsx │ │ │ ├── missing_columns_sncu_case_upload.xlsx │ │ │ ├── missing_values_rch_case_upload.xlsx │ │ │ ├── missing_values_sncu_case_upload.xlsx │ │ │ └── unexpected_sheet_case_upload.xlsx │ │ ├── operations.py │ │ └── validators.py │ ├── ucla/ │ │ ├── __init__.py │ │ ├── api.py │ │ ├── forms.py │ │ ├── models.py │ │ ├── tests.py │ │ ├── urls.py │ │ └── views.py │ └── utils/ │ ├── __init__.py │ └── utils.py ├── deployment/ │ ├── __init__.py │ ├── gunicorn/ │ │ ├── __init__.py │ │ ├── commcarehq_wsgi.py │ │ └── gunicorn_conf.py │ ├── nginx/ │ │ └── cchq_local_nginx.conf │ └── prometheus_server.py ├── dev_settings.py ├── docker/ │ ├── .dockerignore │ ├── Dockerfile │ ├── README.rst │ ├── files/ │ │ ├── Dockerfile.couch │ │ ├── Dockerfile.es.6 │ │ └── elasticsearch_6.yml │ ├── hq-compose-os-default.yml │ ├── hq-compose-os-macos-m1-11.yml │ ├── hq-compose-os-macos-m1-12.yml │ ├── hq-compose-runserver.yml │ ├── hq-compose-services.yml │ ├── hq-compose.yml │ ├── init-hq.sh │ ├── localsettings.py │ ├── min_settings.py │ ├── postgres-upgrade.md │ └── run.sh ├── docs/ │ ├── Makefile │ ├── api/ │ │ ├── application-structure.rst │ │ ├── bulk-upload-cases.rst │ │ ├── bulk-user.rst │ │ ├── cases-v1.rst │ │ ├── cases-v2.rst │ │ ├── det-exports.rst │ │ ├── download-report-data.rst │ │ ├── fixture.rst │ │ ├── form-data.rst │ │ ├── form-submission.rst │ │ ├── index.rst │ │ ├── list-forms.rst │ │ ├── list-groups.rst │ │ ├── list-mobile-workers.rst │ │ ├── list-reports.rst │ │ ├── list-webusers.rst │ │ ├── location-types.rst │ │ ├── locations-v1.rst │ │ ├── locations-v2.rst │ │ ├── messaging-events.rst │ │ ├── mobile-worker.rst │ │ ├── ota-api-restore.rst │ │ ├── send-install-info-sms.rst │ │ ├── sms-user-registration.rst │ │ ├── sso.rst │ │ ├── user-domain-list.rst │ │ ├── user-group.rst │ │ └── webuser.rst │ ├── apps/ │ │ ├── advanced_app_features.rst │ │ ├── builds.rst │ │ ├── multimedia.rst │ │ ├── settings.rst │ │ ├── suite_generation.rst │ │ ├── terminology.rst │ │ └── translations.rst │ ├── caching_and_memoization.rst │ ├── case_search_query_language.rst │ ├── celery.rst │ ├── cep.rst │ ├── change_feeds.rst │ ├── class_views.rst │ ├── commtrack.rst │ ├── conf.py │ ├── couch_design_doc_changes.rst │ ├── couch_to_sql_models.rst │ ├── couchdb.rst │ ├── custom.rst │ ├── databases.rst │ ├── decisions/ │ │ ├── 0001-record-architecture-decisions.md │ │ ├── 0002-keep-static-ucr-configurations-in-memory.md │ │ └── 0003-remove-warehouse-database.md │ ├── documenting.rst │ ├── elasticsearch.rst │ ├── email_monitoring_SES.rst │ ├── es_fake.rst │ ├── es_query.rst │ ├── exports.rst │ ├── extensions.rst │ ├── fhir/ │ │ ├── fhir_api.rst │ │ ├── fhir_import_config.rst │ │ ├── fhir_repeater.rst │ │ └── index.rst │ ├── formplayer.rst │ ├── forms.rst │ ├── forms_and_cases.rst │ ├── index.rst │ ├── integrations/ │ │ └── kyc.rst │ ├── js-guide/ │ │ ├── README.rst │ │ ├── code-organization.rst │ │ ├── code-review.rst │ │ ├── dependencies.rst │ │ ├── external-packages.rst │ │ ├── inheritance.rst │ │ ├── integration-patterns.rst │ │ ├── libraries.rst │ │ ├── linting.rst │ │ ├── security.rst │ │ ├── static-files.rst │ │ └── testing.rst │ ├── locations.rst │ ├── messaging/ │ │ ├── contacts.rst │ │ ├── definitions.rst │ │ ├── inbound_sms.rst │ │ ├── index.rst │ │ ├── keywords.rst │ │ ├── outbound_sms.rst │ │ ├── schedules.rst │ │ └── sms_backends.rst │ ├── metrics.rst │ ├── middleware.rst │ ├── migration_command_pattern.rst │ ├── migrations.rst │ ├── migrations_in_practice.rst │ ├── mocha.rst │ ├── nfs.rst │ ├── openmrs.rst │ ├── overview/ │ │ ├── architecture.rst │ │ └── platform.rst │ ├── pillows.rst │ ├── profiling.rst │ ├── reporting.rst │ ├── restore-logic.rst │ ├── sso/ │ │ ├── adding_idp.rst │ │ ├── architecture.rst │ │ ├── local_setup.rst │ │ └── overview.rst │ ├── test_coverage.rst │ ├── testing.rst │ ├── toggles/ │ │ ├── application_error_report.rst │ │ └── index.rst │ ├── translations.rst │ ├── ucr/ │ │ ├── examples.rst │ │ ├── faq.rst │ │ └── mobile_ucr_v2_migration_guide.rst │ ├── ucr.rst │ ├── ui_helpers.rst │ ├── value_source.rst │ └── web_apps.rst ├── eslint/ │ ├── README.md │ ├── docs/ │ │ └── rules/ │ │ └── no-unblessed-new.md │ ├── lib/ │ │ ├── index.js │ │ └── rules/ │ │ └── no-unblessed-new.js │ ├── package.json │ └── tests/ │ └── lib/ │ └── rules/ │ └── no-unblessed-new.js ├── eslint.config.js ├── fabfile.py ├── get_resource_versions.py ├── git-hooks/ │ ├── install.sh │ ├── post-checkout.sh │ └── pre-commit.sh ├── hqscripts/ │ ├── README.txt │ ├── __init__.py │ ├── management/ │ │ ├── __init__.py │ │ └── commands/ │ │ ├── __init__.py │ │ ├── check_couchdb_auth.py │ │ ├── compilejsi18n.py │ │ ├── createsuperuser.py │ │ ├── list_couchdbs.py │ │ ├── makemessages.py │ │ ├── makemigrations.py │ │ ├── pull_exports.py │ │ └── upload_to_s3.py │ └── models.py ├── local_dev_guide.rst ├── locale/ │ ├── ar/ │ │ └── LC_MESSAGES/ │ │ ├── django.po │ │ └── djangojs.po │ ├── ara/ │ │ └── LC_MESSAGES/ │ │ ├── django.po │ │ └── djangojs.po │ ├── en/ │ │ └── LC_MESSAGES/ │ │ ├── django.po │ │ └── djangojs.po │ ├── es/ │ │ └── LC_MESSAGES/ │ │ ├── django.po │ │ └── djangojs.po │ ├── fr/ │ │ └── LC_MESSAGES/ │ │ ├── django.po │ │ └── djangojs.po │ ├── fra/ │ │ └── LC_MESSAGES/ │ │ ├── django.po │ │ └── djangojs.po │ ├── hi/ │ │ └── LC_MESSAGES/ │ │ ├── django.po │ │ └── djangojs.po │ ├── hin/ │ │ └── LC_MESSAGES/ │ │ ├── django.po │ │ └── djangojs.po │ ├── ita/ │ │ └── LC_MESSAGES/ │ │ ├── django.po │ │ └── djangojs.po │ ├── por/ │ │ └── LC_MESSAGES/ │ │ ├── django.po │ │ └── djangojs.po │ ├── pt/ │ │ └── LC_MESSAGES/ │ │ ├── django.po │ │ └── djangojs.po │ ├── sw/ │ │ └── LC_MESSAGES/ │ │ ├── django.po │ │ └── djangojs.po │ ├── uk/ │ │ └── LC_MESSAGES/ │ │ ├── django.po │ │ └── djangojs.po │ └── ukr/ │ └── LC_MESSAGES/ │ ├── django.po │ └── djangojs.po ├── localsettings.example.py ├── manage.py ├── migrations.lock ├── modernizr-conf.json ├── package.json ├── pyproject.toml ├── requirements/ │ ├── Makefile │ ├── README.md │ └── local.txt.sample ├── scripts/ │ ├── __init__.py │ ├── bash-utils.sh │ ├── ccz.sh │ ├── cloudant/ │ │ ├── README.md │ │ ├── create_databases.py │ │ ├── generate_api_key.py │ │ ├── grant_api_key.py │ │ ├── manage_cloudant.py │ │ └── revoke_api_key.py │ ├── codechecks/ │ │ └── churn.sh │ ├── copy_domain_to_remote.sh │ ├── coverage-js.sh │ ├── datadog-utils.sh │ ├── docker │ ├── get_webhost │ ├── git-good-move │ ├── hammer.sh │ ├── html2txt.sh │ ├── kafka-administer.py │ ├── last_deploy.sh │ ├── make-serializer-pickle-files │ ├── make-translations.sh │ ├── pr-failures.sh │ ├── prettify-changed.sh │ ├── rebuildstaging │ ├── searchcouchviews │ ├── staging.yml │ ├── staticfiles-hammer.sh │ ├── subtree-merge │ ├── supervisor-group-ctl │ ├── test-django-migrations.sh │ ├── test-make-docs.sh │ ├── test-prod-entrypoints.sh │ ├── test-serializer-pickle-files.sh │ ├── tests/ │ │ └── __init__.py │ ├── tmp-disappearing-form-poller.py │ ├── update-code.sh │ ├── update-translations.sh │ ├── vellum-to-hq │ └── yaml_static_strings.py ├── serializer-pickle-files.lock ├── settings.py ├── settingshelper.py ├── submodules/ │ └── vellum/ │ └── README.md ├── testapps/ │ ├── __init__.py │ ├── test_elasticsearch/ │ │ ├── __init__.py │ │ └── tests/ │ │ ├── __init__.py │ │ ├── test_prod_es_indices.py │ │ ├── test_require_elastic.py │ │ ├── test_xform_es.py │ │ └── utils.py │ ├── test_gunicorn/ │ │ ├── __init__.py │ │ └── tests.py │ └── test_pillowtop/ │ ├── __init__.py │ ├── models.py │ ├── tests/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── data/ │ │ │ └── all-pillow-meta.json │ │ ├── test_app_pillow.py │ │ ├── test_case_pillow.py │ │ ├── test_case_search_pillow.py │ │ ├── test_changes.py │ │ ├── test_chunk_pillow.py │ │ ├── test_domain_pillow.py │ │ ├── test_form_pillow.py │ │ ├── test_group_pillow.py │ │ ├── test_grouptouser_pillow.py │ │ ├── test_pillows_cases.py │ │ ├── test_reindexer.py │ │ ├── test_settings.py │ │ ├── test_sms_pillow.py │ │ ├── test_user_pillow.py │ │ └── test_xform_pillow.py │ └── utils.py ├── testsettings.py ├── urls.py ├── uv.lock ├── webpack/ │ ├── appPaths.js │ ├── generateDetails.js │ ├── plugins.js │ ├── utils.js │ ├── vellumUtils.js │ ├── webpack.b3.common.js │ ├── webpack.common.js │ ├── webpack.dev.js │ └── webpack.prod.js └── yarn.lock