Coverage report: 89%

Files Functions Classes

coverage.py v7.17.0, created at 2026-11-04 14:06 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
apps/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/accounts/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/accounts/admin.py (no function)   100% 31 0 0   100% 0 0   100%
apps/accounts/admin_api.py _user   75% 4 1 0   50% 2 1   67%
apps/accounts/admin_api.py _resolve_role   100% 4 0 0   100% 2 0   100%
apps/accounts/admin_api.py _resolve_org_unit   67% 6 2 0   50% 4 2   60%
apps/accounts/admin_api.py _role_bindings   100% 2 0 0   100% 0 0   100%
apps/accounts/admin_api.py _user_detail   100% 1 0 0   100% 0 0   100%
apps/accounts/admin_api.py me   100% 4 0 0   100% 0 0   100%
apps/accounts/admin_api.py list_org_units   100% 1 0 0   100% 0 0   100%
apps/accounts/admin_api.py create_org_unit   75% 4 1 0   50% 2 1   67%
apps/accounts/admin_api.py list_roles   100% 5 0 0   100% 2 0   100%
apps/accounts/admin_api.py list_permissions   0% 1 1 0   100% 0 0   0%
apps/accounts/admin_api.py role_matrix   100% 2 0 0   100% 0 0   100%
apps/accounts/admin_api.py _get_company   100% 4 0 0   100% 2 0   100%
apps/accounts/admin_api.py _company_out   100% 1 0 0   100% 0 0   100%
apps/accounts/admin_api.py org_info   100% 7 0 0   100% 2 0   100%
apps/accounts/admin_api.py update_company   100% 8 0 0   100% 4 0   100%
apps/accounts/admin_api.py _pos_config_out   100% 9 0 0   100% 0 0   100%
apps/accounts/admin_api.py _lead_form_config_out   100% 2 0 0   100% 0 0   100%
apps/accounts/admin_api.py _agent_config_out   100% 2 0 0   100% 0 0   100%
apps/accounts/admin_api.py _non_delegated_config_out   100% 2 0 0   100% 0 0   100%
apps/accounts/admin_api.py field_configs   100% 1 0 0   100% 0 0   100%
apps/accounts/admin_api.py get_pos_config   100% 1 0 0   100% 0 0   100%
apps/accounts/admin_api.py update_pos_config   100% 7 0 0   100% 2 0   100%
apps/accounts/admin_api.py get_lead_form_config   100% 1 0 0   100% 0 0   100%
apps/accounts/admin_api.py update_lead_form_config   100% 7 0 0   100% 2 0   100%
apps/accounts/admin_api.py get_agent_config   100% 1 0 0   100% 0 0   100%
apps/accounts/admin_api.py update_agent_config   100% 7 0 0   100% 2 0   100%
apps/accounts/admin_api.py get_non_delegated_config   100% 1 0 0   100% 0 0   100%
apps/accounts/admin_api.py update_non_delegated_config   100% 7 0 0   100% 2 0   100%
apps/accounts/admin_api.py list_api_clients   100% 2 0 0   100% 0 0   100%
apps/accounts/admin_api.py create_api_client   100% 5 0 0   100% 0 0   100%
apps/accounts/admin_api.py list_compliance_states   100% 1 0 0   100% 0 0   100%
apps/accounts/admin_api.py validate_compliance   89% 9 1 0   67% 6 2   80%
apps/accounts/admin_api.py get_billing   88% 8 1 0   50% 2 1   80%
apps/accounts/admin_api.py get_provision_example   100% 1 0 0   100% 0 0   100%
apps/accounts/admin_api.py preview_provision   75% 4 1 0   50% 2 1   67%
apps/accounts/admin_api.py apply_provision   91% 44 4 0   65% 26 9   81%
apps/accounts/admin_api.py list_users   0% 4 4 0   0% 2 0   0%
apps/accounts/admin_api.py invite_user   92% 26 2 0   67% 6 2   88%
apps/accounts/admin_api.py set_user_active   100% 4 0 0   100% 0 0   100%
apps/accounts/admin_api.py get_user   0% 1 1 0   100% 0 0   0%
apps/accounts/admin_api.py assign_role   92% 12 1 0   67% 6 2   83%
apps/accounts/admin_api.py remove_role   80% 5 1 0   50% 2 1   71%
apps/accounts/admin_api.py replace_roles   100% 10 0 0   83% 6 1   94%
apps/accounts/admin_api.py list_licenses   0% 1 1 0   100% 0 0   0%
apps/accounts/admin_api.py add_license   75% 4 1 0   50% 2 1   67%
apps/accounts/admin_api.py remove_license   0% 5 5 0   0% 2 0   0%
apps/accounts/admin_api.py (no function)   100% 102 0 0   100% 0 0   100%
apps/accounts/admin_schemas.py (no function)   100% 271 0 0   100% 0 0   100%
apps/accounts/apps.py (no function)   100% 4 0 0   100% 0 0   100%
apps/accounts/auth.py StaffPrincipal.has   100% 1 0 0   100% 0 0   100%
apps/accounts/auth.py ServicePrincipal.has_scope   100% 1 0 0   100% 0 0   100%
apps/accounts/auth.py effective_permissions   100% 3 0 0   100% 0 0   100%
apps/accounts/auth.py build_staff_principal   100% 4 0 0   100% 0 0   100%
apps/accounts/auth.py build_borrower_principal   100% 2 0 0   100% 0 0   100%
apps/accounts/auth.py DevVerifier.verify_staff   100% 4 0 0   100% 2 0   100%
apps/accounts/auth.py DevVerifier.verify_borrower   100% 7 0 0   100% 4 0   100%
apps/accounts/auth.py DevVerifier.verify_service   100% 6 0 0   100% 4 0   100%
apps/accounts/auth.py mint_local_token   100% 6 0 0   100% 2 0   100%
apps/accounts/auth.py mint_borrower_token   100% 4 0 0   100% 0 0   100%
apps/accounts/auth.py _decode_local_token   100% 5 0 0   100% 0 0   100%
apps/accounts/auth.py LocalVerifier.verify_staff   92% 13 1 0   88% 8 1   90%
apps/accounts/auth.py LocalVerifier.verify_borrower   91% 11 1 0   83% 6 1   88%
apps/accounts/auth.py LocalVerifier.verify_service   0% 1 1 0   100% 0 0   0%
apps/accounts/auth.py sync_user_roles_from_cognito   100% 6 0 0   75% 4 1   90%
apps/accounts/auth.py assign_user_branch   100% 3 0 0   100% 0 0   100%
apps/accounts/auth.py CognitoVerifier.__init__   100% 6 0 0   100% 0 0   100%
apps/accounts/auth.py CognitoVerifier._claims   100% 17 0 0   67% 6 2   91%
apps/accounts/auth.py CognitoVerifier.verify_staff   82% 34 6 0   75% 20 5   80%
apps/accounts/auth.py CognitoVerifier.verify_borrower   75% 12 3 0   62% 8 3   70%
apps/accounts/auth.py CognitoVerifier.verify_service   100% 8 0 0   100% 4 0   100%
apps/accounts/auth.py get_verifier   70% 10 3 0   62% 8 1   67%
apps/accounts/auth.py StaffAuth.__init__   100% 2 0 0   100% 0 0   100%
apps/accounts/auth.py StaffAuth.authenticate   100% 7 0 0   100% 4 0   100%
apps/accounts/auth.py BorrowerAuth.authenticate   80% 5 1 0   50% 2 1   71%
apps/accounts/auth.py requires   100% 1 0 0   100% 0 0   100%
apps/accounts/auth.py borrower   0% 1 1 0   100% 0 0   0%
apps/accounts/auth.py PortalAuth.authenticate   100% 13 0 0   100% 6 0   100%
apps/accounts/auth.py portal   100% 1 0 0   100% 0 0   100%
apps/accounts/auth.py borrower_loan   100% 7 0 0   100% 2 0   100%
apps/accounts/auth.py ServiceAuth.__init__   0% 2 2 0   100% 0 0   0%
apps/accounts/auth.py ServiceAuth.authenticate   0% 8 8 0   0% 4 0   0%
apps/accounts/auth.py requires_service   0% 1 1 0   100% 0 0   0%
apps/accounts/auth.py staff_loan_queryset   100% 7 0 0   100% 4 0   100%
apps/accounts/auth.py ensure_staff_scope   100% 4 0 0   75% 4 1   88%
apps/accounts/auth.py (no function)   100% 80 0 0   100% 0 0   100%
apps/accounts/directory_api.py _visible_users   100% 4 0 0   100% 2 0   100%
apps/accounts/directory_api.py list_loan_officers   100% 6 0 0   100% 2 0   100%
apps/accounts/directory_api.py list_staff   100% 6 0 0   100% 2 0   100%
apps/accounts/directory_api.py (no function)   100% 10 0 0   100% 0 0   100%
apps/accounts/directory_schemas.py (no function)   100% 9 0 0   100% 0 0   100%
apps/accounts/local_auth_api.py _role_name   100% 2 0 0   100% 0 0   100%
apps/accounts/local_auth_api.py _session_user   100% 1 0 0   100% 0 0   100%
apps/accounts/local_auth_api.py login   100% 9 0 0   100% 6 0   100%
apps/accounts/local_auth_api.py logout   100% 1 0 0   100% 0 0   100%
apps/accounts/local_auth_api.py _profile   100% 1 0 0   100% 0 0   100%
apps/accounts/local_auth_api.py _is_borrower   100% 1 0 0   100% 0 0   100%
apps/accounts/local_auth_api.py me   100% 3 0 0   100% 2 0   100%
apps/accounts/local_auth_api.py update_profile   79% 24 5 0   62% 16 2   72%
apps/accounts/local_auth_api.py change_password   100% 11 0 0   100% 6 0   100%
apps/accounts/local_auth_api.py forgot_password   100% 7 0 0   100% 2 0   100%
apps/accounts/local_auth_api.py act_as_candidates   100% 3 0 0   100% 2 0   100%
apps/accounts/local_auth_api.py act_as   100% 7 0 0   100% 4 0   100%
apps/accounts/local_auth_api.py (no function)   100% 32 0 0   100% 0 0   100%
apps/accounts/local_auth_schemas.py (no function)   100% 47 0 0   100% 0 0   100%
apps/accounts/management/commands/seed_dev_demo.py Command.handle   91% 68 6 0   100% 16 0   93%
apps/accounts/management/commands/seed_dev_demo.py (no function)   100% 16 0 0   100% 0 0   100%
apps/accounts/management/commands/seed_rbac.py Command.handle   100% 16 0 0   100% 6 0   100%
apps/accounts/management/commands/seed_rbac.py (no function)   100% 9 0 0   100% 0 0   100%
apps/accounts/models.py OrgUnit.__str__   0% 1 1 0   100% 0 0   0%
apps/accounts/models.py UserManager._create_user   86% 7 1 0   50% 2 1   78%
apps/accounts/models.py UserManager.create_user   100% 3 0 0   100% 0 0   100%
apps/accounts/models.py UserManager.create_superuser   0% 7 7 0   0% 4 0   0%
apps/accounts/models.py User.__str__   0% 1 1 0   100% 0 0   0%
apps/accounts/models.py Permission.__str__   0% 1 1 0   100% 0 0   0%
apps/accounts/models.py Role.__str__   0% 1 1 0   100% 0 0   0%
apps/accounts/models.py License.__str__   0% 1 1 0   100% 0 0   0%
apps/accounts/models.py Company.__str__   0% 1 1 0   100% 0 0   0%
apps/accounts/models.py (no function)   100% 102 0 0   100% 0 0   100%
apps/accounts/setup_api.py get_setup_status   100% 4 0 0   100% 0 0   100%
apps/accounts/setup_api.py run_setup   74% 58 15 0   62% 24 9   71%
apps/accounts/setup_api.py (no function)   100% 13 0 0   100% 0 0   100%
apps/accounts/setup_schemas.py (no function)   100% 39 0 0   100% 0 0   100%
apps/accounts/tireless_api.py get_tireless_context   100% 18 0 0   75% 8 2   92%
apps/accounts/tireless_api.py (no function)   100% 17 0 0   100% 0 0   100%
apps/application_1003/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/application_1003/admin.py (no function)   100% 29 0 0   100% 2 0   100%
apps/application_1003/api.py _scoped_loan   80% 5 1 0   50% 2 1   71%
apps/application_1003/api.py _item   75% 4 1 0   50% 2 1   67%
apps/application_1003/api.py _normalize_fks   100% 3 0 0   100% 4 0   100%
apps/application_1003/api.py _register_crud   100% 13 0 0   100% 0 0   100%
apps/application_1003/api.py _register_crud.list_view   100% 2 0 0   100% 0 0   100%
apps/application_1003/api.py _register_crud.create_view   89% 19 2 0   83% 12 2   87%
apps/application_1003/api.py _register_crud.update_view   79% 14 3 0   75% 4 1   78%
apps/application_1003/api.py _register_crud.delete_view   100% 3 0 0   100% 0 0   100%
apps/application_1003/api.py qualification   100% 11 0 0   100% 0 0   100%
apps/application_1003/api.py _borrower   75% 4 1 0   50% 2 1   67%
apps/application_1003/api.py list_residences   100% 2 0 0   100% 0 0   100%
apps/application_1003/api.py create_residence   100% 5 0 0   100% 0 0   100%
apps/application_1003/api.py update_residence   0% 8 8 0   0% 4 0   0%
apps/application_1003/api.py delete_residence   0% 6 6 0   0% 2 0   0%
apps/application_1003/api.py get_declaration   100% 3 0 0   100% 0 0   100%
apps/application_1003/api.py update_declaration   100% 6 0 0   100% 2 0   100%
apps/application_1003/api.py get_demographics   0% 3 3 0   100% 0 0   0%
apps/application_1003/api.py update_demographics   100% 6 0 0   100% 2 0   100%
apps/application_1003/api.py get_subject_property   33% 3 2 0   100% 0 0   33%
apps/application_1003/api.py update_subject_property   85% 13 2 0   100% 4 0   88%
apps/application_1003/api.py (no function)   100% 48 0 0   100% 0 0   100%
apps/application_1003/apps.py (no function)   100% 4 0 0   100% 0 0   100%
apps/application_1003/models.py Borrower.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py Employer.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py Income.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py Asset.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py RealEstate.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py Liability.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py HousingExpense.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py Declaration.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py Demographics.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py Residence.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py DownPaymentSource.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py GiftGrant.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py LoanIdentifier.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py SubjectProperty.__str__   0% 1 1 0   100% 0 0   0%
apps/application_1003/models.py sync_employer_income   100% 15 0 0   83% 12 2   93%
apps/application_1003/models.py clean_employer_income   100% 1 0 0   100% 0 0   100%
apps/application_1003/models.py (no function)   100% 260 0 0   100% 0 0   100%
apps/application_1003/schemas.py _clean_phone   83% 6 1 0   75% 4 1   80%
apps/application_1003/schemas.py _clean_state   83% 6 1 0   75% 4 1   80%
apps/application_1003/schemas.py _clean_zip   83% 6 1 0   75% 4 1   80%
apps/application_1003/schemas.py _clean_city   75% 8 2 0   67% 6 2   71%
apps/application_1003/schemas.py _clean_county   75% 8 2 0   67% 6 2   71%
apps/application_1003/schemas.py _clean_address_line   75% 8 2 0   67% 6 2   71%
apps/application_1003/schemas.py _clean_non_negative   83% 6 1 0   67% 6 2   75%
apps/application_1003/schemas.py EmployerIn.validate_name   83% 6 1 0   75% 4 1   80%
apps/application_1003/schemas.py EmployerIn.validate_position   0% 6 6 0   0% 4 0   0%
apps/application_1003/schemas.py EmployerIn.validate_phone   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py EmployerIn.validate_state_code   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py EmployerIn.validate_postal_code   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py EmployerIn.validate_address   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py EmployerIn.validate_city   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py EmployerIn.validate_monthly_income   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py EmployerIn.validate_years   100% 4 0 0   75% 4 1   88%
apps/application_1003/schemas.py EmployerIn.validate_ownership   100% 4 0 0   75% 4 1   88%
apps/application_1003/schemas.py EmployerPatch.validate_name   0% 8 8 0   0% 6 0   0%
apps/application_1003/schemas.py EmployerPatch.validate_position   0% 6 6 0   0% 4 0   0%
apps/application_1003/schemas.py EmployerPatch.validate_phone   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py EmployerPatch.validate_state_code   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py EmployerPatch.validate_postal_code   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py EmployerPatch.validate_address   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py EmployerPatch.validate_city   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py EmployerPatch.validate_monthly_income   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py EmployerPatch.validate_years   0% 4 4 0   0% 4 0   0%
apps/application_1003/schemas.py EmployerPatch.validate_ownership   0% 4 4 0   0% 4 0   0%
apps/application_1003/schemas.py IncomeIn.validate_amounts   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py IncomePatch.validate_amounts   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py AssetIn.validate_amounts   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py AssetPatch.validate_amounts   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py RealEstateIn.validate_amounts   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py RealEstateIn.validate_address   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py RealEstateIn.validate_city   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py RealEstateIn.validate_state   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py RealEstateIn.validate_zip   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py RealEstatePatch.validate_amounts   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py RealEstatePatch.validate_address   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py RealEstatePatch.validate_city   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py RealEstatePatch.validate_state   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py RealEstatePatch.validate_zip   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py LiabilityIn.validate_amounts   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py LiabilityPatch.validate_amounts   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py HousingExpenseIn.validate_payment   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py HousingExpensePatch.validate_payment   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py ResidenceIn.validate_address   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py ResidenceIn.validate_city   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py ResidenceIn.validate_county   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py ResidenceIn.validate_state   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py ResidenceIn.validate_zip   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py ResidenceIn.validate_rent   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py ResidenceIn.validate_duration   67% 3 1 0   50% 2 1   60%
apps/application_1003/schemas.py ResidencePatch.validate_address   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py ResidencePatch.validate_city   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py ResidencePatch.validate_county   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py ResidencePatch.validate_state   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py ResidencePatch.validate_zip   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py ResidencePatch.validate_rent   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py ResidencePatch.validate_duration   0% 3 3 0   0% 2 0   0%
apps/application_1003/schemas.py SubjectPropertyPatch.validate_address_line   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py SubjectPropertyPatch.validate_city   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py SubjectPropertyPatch.validate_county   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py SubjectPropertyPatch.validate_state   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py SubjectPropertyPatch.validate_financed_unit_count   67% 3 1 0   50% 2 1   60%
apps/application_1003/schemas.py SubjectPropertyPatch.validate_year_built   0% 3 3 0   0% 2 0   0%
apps/application_1003/schemas.py SubjectPropertyPatch.validate_postal_code   67% 3 1 0   50% 2 1   60%
apps/application_1003/schemas.py SubjectPropertyPatch.validate_property_amounts   100% 1 0 0   100% 0 0   100%
apps/application_1003/schemas.py SubjectPropertyPatch.validate_hoa_dues   0% 1 1 0   100% 0 0   0%
apps/application_1003/schemas.py (no function)   100% 378 0 0   100% 0 0   100%
apps/borrower_portal/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/borrower_portal/account_flows.py current_account   75% 4 1 0   50% 2 1   67%
apps/borrower_portal/account_flows.py me   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/account_flows.py update_profile   100% 25 0 0   80% 10 2   94%
apps/borrower_portal/account_flows.py change_password   100% 8 0 0   100% 4 0   100%
apps/borrower_portal/account_flows.py (no function)   100% 11 0 0   100% 0 0   100%
apps/borrower_portal/api.py register   86% 14 2 0   100% 4 0   89%
apps/borrower_portal/api.py send_reset_link   100% 8 0 0   100% 2 0   100%
apps/borrower_portal/api.py send_staff_reset_link   100% 14 0 0   100% 2 0   100%
apps/borrower_portal/api.py _usable_token   100% 10 0 0   100% 6 0   100%
apps/borrower_portal/api.py reset_password   100% 17 0 0   100% 10 0   100%
apps/borrower_portal/api.py request_otp   100% 7 0 0   100% 2 0   100%
apps/borrower_portal/api.py verify_otp   100% 8 0 0   100% 2 0   100%
apps/borrower_portal/api.py (no function)   100% 26 0 0   100% 0 0   100%
apps/borrower_portal/apps.py (no function)   100% 4 0 0   100% 0 0   100%
apps/borrower_portal/invite_api.py _scoped_loan   80% 5 1 0   50% 2 1   71%
apps/borrower_portal/invite_api.py _temporary_password   100% 5 0 0   50% 2 1   86%
apps/borrower_portal/invite_api.py invite_borrower   100% 27 0 0   100% 10 0   100%
apps/borrower_portal/invite_api.py borrower_pos_status   100% 12 0 0   100% 4 0   100%
apps/borrower_portal/invite_api.py (no function)   100% 26 0 0   100% 0 0   100%
apps/borrower_portal/models.py BorrowerAccount.__str__   0% 1 1 0   100% 0 0   0%
apps/borrower_portal/models.py BorrowerAccount.save   100% 2 0 0   100% 0 0   100%
apps/borrower_portal/models.py BorrowerAccount.set_password   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/models.py BorrowerAccount.check_password   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/models.py (no function)   100% 64 0 0   100% 0 0   100%
apps/borrower_portal/ports.py AddressLookup.search   100% 0 0 0   100% 0 0   100%
apps/borrower_portal/ports.py SampleAddressLookup.search   0% 7 7 0   0% 4 0   0%
apps/borrower_portal/ports.py get_address_lookup   0% 1 1 0   100% 0 0   0%
apps/borrower_portal/ports.py (no function)   100% 8 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py _num   67% 3 1 0   50% 2 1   60%
apps/borrower_portal/pos_api.py _amount   100% 3 0 0   100% 2 0   100%
apps/borrower_portal/pos_api.py _primary   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py _state   100% 2 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py _transaction_out   100% 5 0 0   100% 2 0   100%
apps/borrower_portal/pos_api.py _advisor   75% 4 1 0   50% 2 1   67%
apps/borrower_portal/pos_api.py _me_borrower   100% 3 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py _clean   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py _borrower_block   100% 12 0 0   88% 8 1   95%
apps/borrower_portal/pos_api.py _snapshot   91% 11 1 0   50% 2 1   85%
apps/borrower_portal/pos_api.py _pos_my   100% 4 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py _require_loan   100% 4 0 0   100% 2 0   100%
apps/borrower_portal/pos_api.py _fail   100% 3 0 0   100% 2 0   100%
apps/borrower_portal/pos_api.py pos_my   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py _pick_loan_officer   64% 25 9 0   38% 16 4   54%
apps/borrower_portal/pos_api.py start_application   100% 19 0 0   83% 6 1   96%
apps/borrower_portal/pos_api.py _may_edit   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py _resolve_target   100% 8 0 0   100% 6 0   100%
apps/borrower_portal/pos_api.py _current_for_validation   100% 3 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py _dec   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py _text   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py _write_declarations   89% 9 1 0   83% 6 1   87%
apps/borrower_portal/pos_api.py _write_demographics   100% 9 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py _apply_step   95% 75 4 0   79% 48 10   89%
apps/borrower_portal/pos_api.py save_step   100% 7 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py _authorize_item   0% 2 2 0   0% 2 0   0%
apps/borrower_portal/pos_api.py delete_step_item   38% 29 18 0   17% 18 3   30%
apps/borrower_portal/pos_api.py submit   95% 20 1 0   80% 10 2   90%
apps/borrower_portal/pos_api.py pos_config   100% 2 0 0   100% 0 0   100%
apps/borrower_portal/pos_api.py geocode   0% 3 3 0   0% 2 0   0%
apps/borrower_portal/pos_api.py (no function)   100% 62 0 0   100% 0 0   100%
apps/borrower_portal/schemas.py (no function)   100% 124 0 0   100% 0 0   100%
apps/borrower_portal/services.py account_for_principal   78% 9 2 0   67% 6 2   73%
apps/borrower_portal/services.py borrower_user   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/services.py borrower_session   100% 10 0 0   100% 2 0   100%
apps/borrower_portal/services.py find_borrower_for_login   100% 7 0 0   100% 4 0   100%
apps/borrower_portal/services.py hash_token   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/services.py new_link_token   100% 2 0 0   100% 0 0   100%
apps/borrower_portal/services.py issue_auth_token   100% 12 0 0   100% 2 0   100%
apps/borrower_portal/services.py company_name   100% 3 0 0   100% 0 0   100%
apps/borrower_portal/services.py portal_url   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/services.py send_borrower_message   57% 7 3 0   50% 2 1   56%
apps/borrower_portal/services.py (no function)   100% 18 0 0   100% 0 0   100%
apps/borrower_portal/upload_api.py record_document   93% 15 1 0   70% 10 3   84%
apps/borrower_portal/upload_api.py _need_out   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/upload_api.py _scoped_loan   80% 5 1 0   50% 2 1   71%
apps/borrower_portal/upload_api.py _invite_out   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/upload_api.py _upload_invite_email   100% 3 0 0   100% 0 0   100%
apps/borrower_portal/upload_api.py create_upload_invite   100% 11 0 0   100% 2 0   100%
apps/borrower_portal/upload_api.py list_upload_invites   100% 2 0 0   100% 0 0   100%
apps/borrower_portal/upload_api.py revoke_upload_invite   86% 7 1 0   50% 2 1   78%
apps/borrower_portal/upload_api.py _live_invite   100% 4 0 0   100% 2 0   100%
apps/borrower_portal/upload_api.py open_upload_link   100% 9 0 0   50% 2 1   91%
apps/borrower_portal/upload_api.py upload_through_link   100% 5 0 0   100% 0 0   100%
apps/borrower_portal/upload_api.py _require_loan   75% 4 1 0   50% 2 1   67%
apps/borrower_portal/upload_api.py my_needs   75% 4 1 0   50% 2 1   67%
apps/borrower_portal/upload_api.py _document_out   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/upload_api.py my_documents   75% 4 1 0   50% 2 1   67%
apps/borrower_portal/upload_api.py add_my_document   100% 2 0 0   100% 0 0   100%
apps/borrower_portal/upload_api.py _my_recipients   100% 2 0 0   100% 0 0   100%
apps/borrower_portal/upload_api.py _disclosure_out   100% 2 0 0   100% 0 0   100%
apps/borrower_portal/upload_api.py my_disclosures   100% 1 0 0   100% 0 0   100%
apps/borrower_portal/upload_api.py sign_my_disclosure   100% 19 0 0   75% 8 2   93%
apps/borrower_portal/upload_api.py (no function)   100% 55 0 0   100% 0 0   100%
apps/client_needs/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/client_needs/admin.py (no function)   100% 10 0 0   100% 0 0   100%
apps/client_needs/api.py _get_classification   75% 4 1 0   50% 2 1   67%
apps/client_needs/api.py list_document_classifications   100% 1 0 0   100% 0 0   100%
apps/client_needs/api.py create_document_classification   75% 4 1 0   50% 2 1   67%
apps/client_needs/api.py update_document_classification   0% 5 5 0   0% 2 0   0%
apps/client_needs/api.py delete_document_classification   100% 6 0 0   100% 2 0   100%
apps/client_needs/api.py _scoped_loan   80% 5 1 0   50% 2 1   71%
apps/client_needs/api.py list_documents   100% 2 0 0   100% 0 0   100%
apps/client_needs/api.py create_document   100% 5 0 0   100% 2 0   100%
apps/client_needs/api.py update_document   69% 13 4 0   38% 8 3   57%
apps/client_needs/api.py delete_document   83% 6 1 0   50% 2 1   75%
apps/client_needs/api.py list_needs   100% 2 0 0   100% 0 0   100%
apps/client_needs/api.py create_need   100% 10 0 0   75% 4 1   93%
apps/client_needs/api.py fulfill_need   78% 9 2 0   50% 4 2   69%
apps/client_needs/api.py generate_needs   100% 3 0 0   100% 0 0   100%
apps/client_needs/api.py (no function)   100% 36 0 0   100% 0 0   100%
apps/client_needs/apps.py (no function)   100% 4 0 0   100% 0 0   100%
apps/client_needs/management/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/client_needs/management/commands/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/client_needs/management/commands/seed_document_classifications.py Command.handle   100% 3 0 0   100% 2 0   100%
apps/client_needs/management/commands/seed_document_classifications.py (no function)   100% 8 0 0   100% 0 0   100%
apps/client_needs/models.py DocumentClassification.__str__   0% 1 1 0   100% 0 0   0%
apps/client_needs/models.py Document.__str__   0% 1 1 0   100% 0 0   0%
apps/client_needs/models.py ClientNeed.__str__   0% 1 1 0   100% 0 0   0%
apps/client_needs/models.py ClientNeed.fulfill_with   100% 3 0 0   100% 0 0   100%
apps/client_needs/models.py (no function)   100% 42 0 0   100% 0 0   100%
apps/client_needs/schemas.py ClientNeedOut.resolve_borrower_ids   100% 1 0 0   100% 0 0   100%
apps/client_needs/schemas.py ClientNeedCreate.validate_name   100% 4 0 0   100% 2 0   100%
apps/client_needs/schemas.py ClientNeedCreate.validate_type   100% 4 0 0   100% 2 0   100%
apps/client_needs/schemas.py (no function)   100% 52 0 0   100% 0 0   100%
apps/client_needs/services.py generate_standard_needs   95% 19 1 0   88% 8 1   93%
apps/client_needs/services.py (no function)   100% 4 0 0   100% 0 0   100%
apps/communications/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/communications/api.py _render_text   100% 4 0 0   100% 0 0   100%
apps/communications/api.py _render_text.replacer   60% 5 2 0   50% 2 1   57%
apps/communications/api.py _get_loan_values   83% 6 1 0   50% 2 1   75%
apps/communications/api.py _seed_templates_if_empty   100% 3 0 0   100% 4 0   100%
apps/communications/api.py list_communications   0% 9 9 0   0% 6 0   0%
apps/communications/api.py get_communication   0% 5 5 0   0% 2 0   0%
apps/communications/api.py send_communication   66% 32 11 0   36% 22 8   54%
apps/communications/api.py record_comm_event   82% 11 2 0   50% 4 2   73%
apps/communications/api.py get_comm_stats   100% 17 0 0   50% 2 1   95%
apps/communications/api.py get_merge_fields   0% 1 1 0   100% 0 0   0%
apps/communications/api.py list_templates   100% 5 0 0   100% 2 0   100%
apps/communications/api.py create_template   100% 3 0 0   100% 0 0   100%
apps/communications/api.py update_template   0% 7 7 0   0% 4 0   0%
apps/communications/api.py delete_template   86% 7 1 0   75% 4 1   82%
apps/communications/api.py preview_template   90% 10 1 0   50% 4 2   79%
apps/communications/api.py list_automations   100% 2 0 0   100% 0 0   100%
apps/communications/api.py set_automation_toggle   83% 6 1 0   50% 2 1   75%
apps/communications/api.py (no function)   100% 44 0 0   100% 0 0   100%
apps/communications/apps.py (no function)   100% 4 0 0   100% 0 0   100%
apps/communications/delivery.py EmailSender.send   100% 0 0 1   100% 0 0   100%
apps/communications/delivery.py SimulatedEmailSender.send   100% 1 0 0   100% 0 0   100%
apps/communications/delivery.py SendGridEmailSender.__init__   100% 3 0 0   100% 0 0   100%
apps/communications/delivery.py SendGridEmailSender.send   79% 14 3 0   50% 2 1   75%
apps/communications/delivery.py get_email_sender   100% 3 0 0   100% 2 0   100%
apps/communications/delivery.py deliver_email   100% 21 0 0   100% 4 0   100%
apps/communications/delivery.py (no function)   100% 24 0 4   100% 0 0   100%
apps/communications/email_content.py _inline_html   100% 3 0 0   100% 0 0   100%
apps/communications/email_content.py Paragraph.as_text   100% 1 0 0   100% 0 0   100%
apps/communications/email_content.py Paragraph.html   100% 1 0 0   100% 0 0   100%
apps/communications/email_content.py Action.as_text   100% 1 0 0   100% 0 0   100%
apps/communications/email_content.py Action.lead_html   100% 1 0 0   100% 0 0   100%
apps/communications/email_content.py Details.as_text   100% 1 0 0   100% 0 0   100%
apps/communications/email_content.py Code.as_text   100% 1 0 0   100% 0 0   100%
apps/communications/email_content.py Note.as_text   100% 1 0 0   100% 0 0   100%
apps/communications/email_content.py Note.html   100% 1 0 0   100% 0 0   100%
apps/communications/email_content.py EmailContent.of   100% 1 0 0   100% 0 0   100%
apps/communications/email_content.py EmailContent.from_text   100% 2 0 0   100% 0 0   100%
apps/communications/email_content.py EmailContent.to_text   100% 1 0 0   100% 0 0   100%
apps/communications/email_content.py EmailContent.preheader   80% 5 1 0   50% 4 2   67%
apps/communications/email_content.py company_brand   100% 9 0 0   100% 0 0   100%
apps/communications/email_content.py render_html   100% 2 0 0   100% 0 0   100%
apps/communications/email_content.py (no function)   100% 59 0 0   100% 0 0   100%
apps/communications/emails.py password_reset   100% 1 0 0   100% 0 0   100%
apps/communications/emails.py sign_in_code   100% 1 0 0   100% 0 0   100%
apps/communications/emails.py borrower_invite   100% 1 0 0   100% 0 0   100%
apps/communications/emails.py staff_invite   100% 1 0 0   100% 0 0   100%
apps/communications/emails.py upload_request   100% 1 0 0   100% 0 0   100%
apps/communications/emails.py (no function)   100% 9 0 0   100% 0 0   100%
apps/communications/management/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/communications/management/commands/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/communications/management/commands/preview_emails.py Command.add_arguments   0% 1 1 0   100% 0 0   0%
apps/communications/management/commands/preview_emails.py Command.handle   0% 11 11 0   0% 2 0   0%
apps/communications/management/commands/preview_emails.py (no function)   0% 10 10 0   100% 0 0   0%
apps/communications/models.py MessageTemplate.__str__   0% 1 1 0   100% 0 0   0%
apps/communications/models.py Communication.__str__   0% 1 1 0   100% 0 0   0%
apps/communications/models.py CommunicationEvent.__str__   0% 1 1 0   100% 0 0   0%
apps/communications/models.py (no function)   100% 48 0 0   100% 0 0   100%
apps/communications/schemas.py CommunicationOut.resolve_loan_guid   100% 1 0 0   100% 0 0   100%
apps/communications/schemas.py CommunicationOut.resolve_loan_number   100% 1 0 0   100% 0 0   100%
apps/communications/schemas.py CommunicationOut.resolve_template_id   100% 1 0 0   100% 0 0   100%
apps/communications/schemas.py (no function)   100% 86 0 0   100% 0 0   100%
apps/communications/seed_data.py (no function)   100% 2 0 0   100% 0 0   100%
apps/communications/status.py advance_status   80% 5 1 0   75% 4 1   78%
apps/communications/status.py (no function)   100% 4 0 0   100% 0 0   100%
apps/communications/webhooks.py _verify   86% 14 2 0   100% 4 0   89%
apps/communications/webhooks.py _find_communication   100% 10 0 0   100% 6 0   100%
apps/communications/webhooks.py record_sendgrid_event   100% 21 0 0   83% 12 2   94%
apps/communications/webhooks.py sendgrid_events   67% 15 5 0   67% 6 2   67%
apps/communications/webhooks.py (no function)   100% 18 0 0   100% 0 0   100%
apps/core_los/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/core_los/api.py _get_loan   100% 4 0 0   100% 2 0   100%
apps/core_los/api.py _apply_recalc   100% 7 0 0   50% 2 1   89%
apps/core_los/api.py _transaction   100% 4 0 0   100% 0 0   100%
apps/core_los/api.py _detail   100% 2 0 0   100% 0 0   100%
apps/core_los/api.py _snapshot   100% 2 0 0   100% 0 0   100%
apps/core_los/api.py list_loans   100% 2 0 0   100% 0 0   100%
apps/core_los/api.py _loan_officer_input   100% 2 0 0   100% 0 0   100%
apps/core_los/api.py _build_loan   91% 11 1 0   75% 4 1   87%
apps/core_los/api.py create_loan   100% 2 0 0   100% 0 0   100%
apps/core_los/api.py get_loan   100% 3 0 0   100% 0 0   100%
apps/core_los/api.py update_loan   89% 27 3 0   92% 12 1   90%
apps/core_los/api.py _team_member   100% 3 0 0   100% 2 0   100%
apps/core_los/api.py _agent_out   67% 3 1 0   50% 2 1   60%
apps/core_los/api.py _team_detail   100% 1 0 0   100% 0 0   100%
apps/core_los/api.py get_team   100% 4 0 0   100% 0 0   100%
apps/core_los/api.py update_team   96% 26 1 0   94% 16 1   95%
apps/core_los/api.py update_transaction   100% 9 0 0   100% 2 0   100%
apps/core_los/api.py list_borrowers   100% 3 0 0   100% 0 0   100%
apps/core_los/api.py add_borrower   100% 4 0 0   100% 0 0   100%
apps/core_los/api.py _coerce_required_text_nulls   78% 9 2 0   83% 6 1   80%
apps/core_los/api.py update_borrower   97% 36 1 0   96% 24 1   97%
apps/core_los/api.py _active_rate_lock   86% 7 1 0   50% 2 1   78%
apps/core_los/api.py get_loan_summary   93% 14 1 0   67% 6 2   85%
apps/core_los/api.py _compliance_issue   91% 11 1 0   88% 8 1   89%
apps/core_los/api.py get_loan_compliance   100% 5 0 0   100% 0 0   100%
apps/core_los/api.py issue_preapproval   100% 5 0 0   100% 2 0   100%
apps/core_los/api.py get_loan_activity   100% 9 0 0   100% 2 0   100%
apps/core_los/api.py _mcr_line   100% 4 0 0   100% 0 0   100%
apps/core_los/api.py get_mcr_line   100% 3 0 0   100% 0 0   100%
apps/core_los/api.py set_mcr_exclude   100% 5 0 0   100% 0 0   100%
apps/core_los/api.py (no function)   100% 74 0 0   100% 0 0   100%
apps/core_los/apps.py (no function)   100% 4 0 0   100% 0 0   100%
apps/core_los/contacts_api.py list_business_contacts   100% 1 0 0   100% 0 0   100%
apps/core_los/contacts_api.py create_business_contact   75% 4 1 0   50% 2 1   67%
apps/core_los/contacts_api.py delete_business_contact   100% 4 0 0   100% 2 0   100%
apps/core_los/contacts_api.py borrower_directory   100% 3 0 0   100% 0 0   100%
apps/core_los/contacts_api.py (no function)   100% 15 0 0   100% 0 0   100%
apps/core_los/custom_fields_api.py _key_of   100% 2 0 0   100% 0 0   100%
apps/core_los/custom_fields_api.py _scoped_loan   75% 4 1 0   50% 2 1   67%
apps/core_los/custom_fields_api.py list_custom_fields   100% 1 0 0   100% 0 0   100%
apps/core_los/custom_fields_api.py create_custom_field   73% 11 3 0   50% 6 3   65%
apps/core_los/custom_fields_api.py update_custom_field   0% 16 16 0   0% 12 0   0%
apps/core_los/custom_fields_api.py delete_custom_field   80% 5 1 0   50% 2 1   71%
apps/core_los/custom_fields_api.py list_custom_trackers   0% 1 1 0   100% 0 0   0%
apps/core_los/custom_fields_api.py create_custom_tracker   78% 9 2 0   50% 4 2   69%
apps/core_los/custom_fields_api.py delete_custom_tracker   0% 5 5 0   0% 2 0   0%
apps/core_los/custom_fields_api.py get_loan_custom_fields   100% 3 0 0   100% 0 0   100%
apps/core_los/custom_fields_api.py save_loan_custom_fields   100% 5 0 0   100% 0 0   100%
apps/core_los/custom_fields_api.py get_status_dates   80% 5 1 0   50% 2 1   71%
apps/core_los/custom_fields_api.py add_custom_tracker   73% 11 3 0   50% 6 3   65%
apps/core_los/custom_fields_api.py (no function)   100% 75 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py _with_primary_borrower   100% 1 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py _safe_key_dates   100% 4 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py _loan_ref   100% 2 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py _next_occurrence   80% 10 2 0   100% 2 0   83%
apps/core_los/dashboard_api.py _kpis   100% 5 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py _by_pipeline   100% 1 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py _rate_lock_watchlists   100% 9 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py _rate_lock_watchlists._lock_row   100% 1 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py _rate_alerts   100% 2 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py _funded_ytd   76% 17 4 0   60% 10 2   70%
apps/core_los/dashboard_api.py _lender_spread   100% 2 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py _upcoming_events   89% 28 3 0   78% 18 4   85%
apps/core_los/dashboard_api.py _recent_loans   100% 2 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py _tracker_counts   100% 3 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py _conditions_pending   100% 1 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py _needs_pending   100% 1 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py get_dashboard   100% 6 0 0   100% 0 0   100%
apps/core_los/dashboard_api.py (no function)   100% 40 0 0   100% 0 0   100%
apps/core_los/dashboard_schemas.py (no function)   100% 66 0 0   100% 0 0   100%
apps/core_los/leads_api.py list_leads   0% 1 1 0   100% 0 0   0%
apps/core_los/leads_api.py lead_stats   100% 1 0 0   100% 0 0   100%
apps/core_los/leads_api.py create_lead   75% 4 1 0   50% 2 1   67%
apps/core_los/leads_api.py delete_lead   100% 4 0 0   100% 2 0   100%
apps/core_los/leads_api.py convert_lead   83% 12 2 0   67% 6 2   78%
apps/core_los/leads_api.py (no function)   100% 17 0 0   100% 0 0   100%
apps/core_los/leads_search_api.py search_leads   100% 9 0 0   100% 4 0   100%
apps/core_los/leads_search_api.py (no function)   100% 13 0 0   100% 0 0   100%
apps/core_los/management/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/core_los/management/commands/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/core_los/management/commands/export_openapi.py Command.handle   0% 1 1 0   100% 0 0   0%
apps/core_los/management/commands/export_openapi.py (no function)   0% 6 6 0   100% 0 0   0%
apps/core_los/management/commands/seed_reports.py Command.handle   100% 3 0 0   100% 2 0   100%
apps/core_los/management/commands/seed_reports.py (no function)   100% 8 0 0   100% 0 0   100%
apps/core_los/models.py Loan.__str__   0% 1 1 0   100% 0 0   0%
apps/core_los/models.py LoanTransaction.__str__   0% 1 1 0   100% 0 0   0%
apps/core_los/models.py SavedView.__str__   0% 1 1 0   100% 0 0   0%
apps/core_los/models.py BusinessContact.__str__   0% 1 1 0   100% 0 0   0%
apps/core_los/models.py LoanNumberSequence.__str__   0% 1 1 0   100% 0 0   0%
apps/core_los/models.py next_loan_number   100% 5 0 0   100% 0 0   100%
apps/core_los/models.py LoanStageHistory.__str__   0% 1 1 0   100% 0 0   0%
apps/core_los/models.py PreApproval.__str__   0% 1 1 0   100% 0 0   0%
apps/core_los/models.py Lead.__str__   0% 1 1 0   100% 0 0   0%
apps/core_los/models.py CustomReport.__str__   0% 1 1 0   100% 0 0   0%
apps/core_los/models.py CustomFieldDefinition.__str__   0% 1 1 0   100% 0 0   0%
apps/core_los/models.py LoanCustomFieldValues.__str__   0% 1 1 0   100% 0 0   0%
apps/core_los/models.py CustomTrackerDefinition.__str__   0% 1 1 0   100% 0 0   0%
apps/core_los/models.py (no function)   100% 155 0 0   100% 0 0   100%
apps/core_los/public_api.py PartnerAuth.authenticate   29% 7 5 0   17% 6 1   23%
apps/core_los/public_api.py _resolve_default_org   75% 4 1 0   50% 2 1   67%
apps/core_los/public_api.py request_token   81% 16 3 0   62% 8 1   75%
apps/core_los/public_api.py list_partner_loans   100% 15 0 0   100% 2 0   100%
apps/core_los/public_api.py create_partner_loan   75% 16 4 0   50% 6 3   68%
apps/core_los/public_api.py (no function)   100% 24 0 0   100% 0 0   100%
apps/core_los/public_schemas.py (no function)   100% 37 0 0   100% 0 0   100%
apps/core_los/report_builder_api.py _report_rows   87% 15 2 0   70% 10 3   80%
apps/core_los/report_builder_api.py _to_domain_def   100% 1 0 0   100% 0 0   100%
apps/core_los/report_builder_api.py _report_def_from_model   100% 1 0 0   100% 0 0   100%
apps/core_los/report_builder_api.py _validated_def   100% 5 0 0   100% 2 0   100%
apps/core_los/report_builder_api.py _get_report   75% 4 1 0   50% 2 1   67%
apps/core_los/report_builder_api.py _report_sort_key   100% 1 0 0   100% 0 0   100%
apps/core_los/report_builder_api.py report_fields   100% 1 0 0   100% 0 0   100%
apps/core_los/report_builder_api.py list_custom_reports   100% 1 0 0   100% 0 0   100%
apps/core_los/report_builder_api.py create_custom_report   100% 3 0 0   100% 0 0   100%
apps/core_los/report_builder_api.py run_custom_report   100% 3 0 0   100% 0 0   100%
apps/core_los/report_builder_api.py update_custom_report   100% 10 0 0   100% 0 0   100%
apps/core_los/report_builder_api.py delete_custom_report   100% 5 0 0   100% 2 0   100%
apps/core_los/report_builder_api.py custom_report_csv   100% 5 0 0   100% 0 0   100%
apps/core_los/report_builder_api.py (no function)   100% 35 0 0   100% 0 0   100%
apps/core_los/report_builder_schemas.py (no function)   100% 45 0 0   100% 0 0   100%
apps/core_los/reports_api.py _pass_through_fees   100% 2 0 0   100% 0 0   100%
apps/core_los/reports_api.py _is_locked   100% 5 0 0   100% 0 0   100%
apps/core_los/reports_api.py _active_loans   100% 2 0 0   100% 0 0   100%
apps/core_los/reports_api.py pipeline_report   100% 11 0 0   100% 2 0   100%
apps/core_los/reports_api.py revenue_report   100% 6 0 0   100% 0 0   100%
apps/core_los/reports_api.py revenue_report.volume   100% 5 0 0   100% 2 0   100%
apps/core_los/reports_api.py call_report   96% 25 1 0   90% 10 1   94%
apps/core_los/reports_api.py (no function)   100% 22 0 0   100% 0 0   100%
apps/core_los/reports_schemas.py (no function)   100% 33 0 0   100% 0 0   100%
apps/core_los/saved_views_api.py list_saved_views   100% 3 0 0   100% 0 0   100%
apps/core_los/saved_views_api.py create_saved_view   100% 2 0 0   100% 0 0   100%
apps/core_los/saved_views_api.py delete_saved_view   100% 4 0 0   100% 2 0   100%
apps/core_los/saved_views_api.py (no function)   100% 14 0 0   100% 0 0   100%
apps/core_los/schemas.py _safe_transaction   50% 4 2 0   100% 0 0   50%
apps/core_los/schemas.py _safe_rate_lock   100% 4 0 0   100% 0 0   100%
apps/core_los/schemas.py _current_residence   100% 1 0 0   100% 0 0   100%
apps/core_los/schemas.py BorrowerOut.resolve_ssn   86% 7 1 0   75% 4 1   82%
apps/core_los/schemas.py BorrowerOut.resolve_current_address_line   100% 2 0 0   100% 0 0   100%
apps/core_los/schemas.py BorrowerOut.resolve_current_city   100% 2 0 0   100% 0 0   100%
apps/core_los/schemas.py BorrowerOut.resolve_current_state_code   100% 2 0 0   100% 0 0   100%
apps/core_los/schemas.py BorrowerOut.resolve_current_postal_code   100% 2 0 0   100% 0 0   100%
apps/core_los/schemas.py BorrowerOut.resolve_current_residency_basis   100% 4 0 0   100% 2 0   100%
apps/core_los/schemas.py BorrowerOut.resolve_years_at_current_address   100% 4 0 0   100% 2 0   100%
apps/core_los/schemas.py PipelineRowOut.resolve_borrower_name   100% 2 0 0   100% 0 0   100%
apps/core_los/schemas.py PipelineRowOut.resolve_loan_amount   100% 2 0 0   100% 0 0   100%
apps/core_los/schemas.py PipelineRowOut.resolve_ltv_percent   100% 4 0 0   100% 2 0   100%
apps/core_los/schemas.py PipelineRowOut.resolve_note_rate_percent   100% 2 0 0   100% 0 0   100%
apps/core_los/schemas.py PipelineRowOut.resolve_product_name   100% 2 0 0   100% 0 0   100%
apps/core_los/schemas.py PipelineRowOut.resolve_lender_name   100% 2 0 0   100% 0 0   100%
apps/core_los/schemas.py PipelineRowOut.resolve_lock_status   100% 3 0 0   100% 0 0   100%
apps/core_los/schemas.py PipelineRowOut.resolve_open_task_count   100% 1 0 0   100% 0 0   100%
apps/core_los/schemas.py LoanHeaderPatch.validate_state_code   0% 6 6 0   0% 4 0   0%
apps/core_los/schemas.py TransactionPatch.validate_amounts   67% 6 2 0   50% 6 3   58%
apps/core_los/schemas.py TransactionPatch.validate_rate   75% 4 1 0   50% 4 2   62%
apps/core_los/schemas.py TransactionPatch.validate_term   67% 3 1 0   50% 2 1   60%
apps/core_los/schemas.py BorrowerCreate.validate_names   67% 6 2 0   50% 4 2   60%
apps/core_los/schemas.py BorrowerCreate.validate_email   75% 4 1 0   50% 2 1   67%
apps/core_los/schemas.py BorrowerCreate.validate_phone   0% 6 6 0   0% 4 0   0%
apps/core_los/schemas.py BorrowerPatch.validate_email   83% 6 1 0   75% 4 1   80%
apps/core_los/schemas.py BorrowerPatch.validate_phone   100% 6 0 0   100% 4 0   100%
apps/core_los/schemas.py BorrowerPatch.validate_state_code   83% 6 1 0   75% 4 1   80%
apps/core_los/schemas.py BorrowerPatch.validate_postal_code   83% 6 1 0   75% 4 1   80%
apps/core_los/schemas.py BorrowerPatch.validate_ssn   62% 8 3 0   50% 6 3   57%
apps/core_los/schemas.py BusinessContactCreate.validate_name   75% 4 1 0   50% 2 1   67%
apps/core_los/schemas.py BusinessContactCreate.validate_email   67% 6 2 0   50% 4 2   60%
apps/core_los/schemas.py BusinessContactCreate.validate_phone   67% 6 2 0   50% 4 2   60%
apps/core_los/schemas.py LeadOut.resolve_converted_loan_guid   100% 1 0 0   100% 0 0   100%
apps/core_los/schemas.py LeadOut.resolve_converted_loan_number   100% 1 0 0   100% 0 0   100%
apps/core_los/schemas.py NewLeadInput.validate_names   75% 4 1 0   50% 2 1   67%
apps/core_los/schemas.py NewLeadInput.validate_email   83% 6 1 0   75% 4 1   80%
apps/core_los/schemas.py NewLeadInput.validate_phone   83% 6 1 0   75% 4 1   80%
apps/core_los/schemas.py NewLeadInput.validate_est_loan_amount   0% 6 6 0   0% 6 0   0%
apps/core_los/schemas.py (no function)   100% 349 0 0   100% 0 0   100%
apps/disclosures/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/disclosures/admin.py (no function)   100% 8 0 0   100% 0 0   100%
apps/disclosures/api.py _scoped_loan   80% 5 1 0   50% 2 1   71%
apps/disclosures/api.py _scoped_disclosure   75% 4 1 0   50% 2 1   67%
apps/disclosures/api.py _check_order   100% 3 0 0   100% 2 0   100%
apps/disclosures/api.py list_disclosures   100% 2 0 0   100% 0 0   100%
apps/disclosures/api.py audit_disclosure   100% 5 0 0   100% 0 0   100%
apps/disclosures/api.py generate_disclosure   100% 10 0 0   100% 2 0   100%
apps/disclosures/api.py send_disclosure   95% 21 1 0   70% 10 3   87%
apps/disclosures/api.py sign_recipient   94% 18 1 0   67% 6 2   88%
apps/disclosures/api.py change_of_circumstance   100% 13 0 0   100% 4 0   100%
apps/disclosures/api.py (no function)   100% 36 0 0   100% 0 0   100%
apps/disclosures/apps.py (no function)   100% 4 0 0   100% 0 0   100%
apps/disclosures/models.py Disclosure.__str__   0% 1 1 0   100% 0 0   0%
apps/disclosures/models.py DisclosureRecipient.__str__   0% 1 1 0   100% 0 0   0%
apps/disclosures/models.py (no function)   100% 27 0 0   100% 0 0   100%
apps/disclosures/providers.py DocMagicProvider.audit   100% 0 0 1   100% 0 0   100%
apps/disclosures/providers.py DocMagicProvider.generate   100% 0 0 1   100% 0 0   100%
apps/disclosures/providers.py DevDocMagicProvider.audit   82% 11 2 0   83% 6 1   82%
apps/disclosures/providers.py DevDocMagicProvider.generate   100% 1 0 0   100% 0 0   100%
apps/disclosures/providers.py RealDocMagicProvider.audit   0% 1 1 0   100% 0 0   0%
apps/disclosures/providers.py RealDocMagicProvider.generate   0% 1 1 0   100% 0 0   0%
apps/disclosures/providers.py get_docmagic_provider   100% 5 0 0   100% 2 0   100%
apps/disclosures/providers.py (no function)   100% 17 0 2   100% 0 0   100%
apps/disclosures/schemas.py (no function)   100% 37 0 0   100% 0 0   100%
apps/disclosures/services.py loan_is_disclosed   100% 1 0 0   100% 0 0   100%
apps/disclosures/services.py (no function)   100% 3 0 0   100% 0 0   100%
apps/fees_trid/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/fees_trid/api.py _scoped_loan   80% 5 1 0   50% 2 1   71%
apps/fees_trid/api.py _txn   50% 4 2 0   100% 0 0   50%
apps/fees_trid/api.py list_fees   100% 2 0 0   100% 0 0   100%
apps/fees_trid/api.py set_fees   100% 4 0 0   100% 2 0   100%
apps/fees_trid/api.py add_fee   80% 5 1 0   50% 2 1   71%
apps/fees_trid/api.py fee_summary   100% 15 0 0   100% 4 0   100%
apps/fees_trid/api.py fee_tolerance   100% 4 0 0   100% 0 0   100%
apps/fees_trid/api.py fee_qm   100% 10 0 0   100% 2 0   100%
apps/fees_trid/api.py delete_fee   75% 8 2 0   50% 4 2   67%
apps/fees_trid/api.py (no function)   100% 32 0 0   100% 0 0   100%
apps/fees_trid/apps.py (no function)   100% 4 0 0   100% 0 0   100%
apps/fees_trid/models.py Fee.__str__   0% 1 1 0   100% 0 0   0%
apps/fees_trid/models.py Fee.description   100% 1 0 0   100% 0 0   100%
apps/fees_trid/models.py Fee.effective_tolerance_bucket   100% 1 0 0   100% 0 0   100%
apps/fees_trid/models.py Fee.save   100% 3 0 0   100% 2 0   100%
apps/fees_trid/models.py (no function)   100% 30 0 0   100% 0 0   100%
apps/fees_trid/schemas.py FeeIn.validate_name   83% 6 1 0   75% 4 1   80%
apps/fees_trid/schemas.py FeeIn.validate_total_amt   80% 5 1 0   75% 4 1   78%
apps/fees_trid/schemas.py FeeIn.validate_section   100% 4 0 0   100% 2 0   100%
apps/fees_trid/schemas.py (no function)   100% 63 0 0   100% 0 0   100%
apps/fees_trid/services.py replace_fees   88% 8 1 0   75% 4 1   83%
apps/fees_trid/services.py (no function)   100% 9 0 0   100% 0 0   100%
apps/integrations/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/integrations/admin.py (no function)   100% 16 0 0   100% 0 0   100%
apps/integrations/admin_api.py _require   100% 2 0 0   100% 2 0   100%
apps/integrations/admin_api.py _perm_for_provider   75% 4 1 0   50% 2 1   67%
apps/integrations/admin_api.py _org_out   100% 1 0 0   100% 0 0   100%
apps/integrations/admin_api.py _cred_out   100% 1 0 0   100% 0 0   100%
apps/integrations/admin_api.py catalog   100% 1 0 0   100% 0 0   100%
apps/integrations/admin_api.py list_org_integrations   83% 6 1 0   50% 4 2   70%
apps/integrations/admin_api.py upsert_org_integration   83% 12 2 0   50% 6 3   72%
apps/integrations/admin_api.py delete_org_integration   0% 6 6 0   0% 2 0   0%
apps/integrations/admin_api.py list_my_credentials   100% 1 0 0   100% 0 0   100%
apps/integrations/admin_api.py upsert_my_credential   78% 9 2 0   50% 6 3   67%
apps/integrations/admin_api.py delete_my_credential   0% 5 5 0   0% 2 0   0%
apps/integrations/admin_api.py list_user_credentials   0% 3 3 0   0% 2 0   0%
apps/integrations/admin_api.py list_lenders   75% 4 1 0   50% 2 1   67%
apps/integrations/admin_api.py create_lender   80% 5 1 0   50% 2 1   71%
apps/integrations/admin_api.py update_lender   0% 7 7 0   0% 4 0   0%
apps/integrations/admin_api.py delete_lender   0% 5 5 0   0% 2 0   0%
apps/integrations/admin_api.py (no function)   100% 40 0 0   100% 0 0   100%
apps/integrations/apps.py (no function)   100% 4 0 0   100% 0 0   100%
apps/integrations/catalog.py get_provider   100% 1 0 0   100% 0 0   100%
apps/integrations/catalog.py providers_by_category   100% 1 0 0   100% 0 0   100%
apps/integrations/catalog.py (no function)   100% 13 0 0   100% 0 0   100%
apps/integrations/encryption.py _fernet   100% 5 0 0   50% 2 1   86%
apps/integrations/encryption.py encrypt_secret   100% 1 0 0   100% 0 0   100%
apps/integrations/encryption.py decrypt_secret   57% 7 3 0   100% 2 0   67%
apps/integrations/encryption.py (no function)   100% 10 0 0   100% 0 0   100%
apps/integrations/models.py OrgIntegration.__str__   0% 1 1 0   100% 0 0   0%
apps/integrations/models.py UserCredential.__str__   0% 1 1 0   100% 0 0   0%
apps/integrations/models.py Lender.__str__   0% 1 1 0   100% 0 0   0%
apps/integrations/models.py (no function)   100% 41 0 0   100% 0 0   100%
apps/integrations/resolver.py resolve_credentials   93% 14 1 0   80% 10 2   88%
apps/integrations/resolver.py (no function)   100% 14 0 0   100% 0 0   100%
apps/integrations/schemas.py (no function)   100% 57 0 0   100% 0 0   100%
apps/integrations/settings_api.py _mask_secret   60% 5 2 0   50% 4 2   56%
apps/integrations/settings_api.py _resolve_org   36% 11 7 0   25% 8 2   32%
apps/integrations/settings_api.py list_providers   100% 1 0 0   100% 0 0   100%
apps/integrations/settings_api.py get_credentials   89% 28 3 0   72% 18 5   83%
apps/integrations/settings_api.py save_credentials   78% 45 10 0   64% 28 8   73%
apps/integrations/settings_api.py (no function)   100% 34 0 0   100% 0 0   100%
apps/integrations/settings_schemas.py (no function)   100% 12 0 0   100% 0 0   100%
apps/mismo/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/mismo/api.py _scoped_loan   80% 5 1 0   50% 2 1   71%
apps/mismo/api.py _build_readiness_ctx   100% 2 0 0   100% 0 0   100%
apps/mismo/api.py _readiness_payload   100% 1 0 0   100% 0 0   100%
apps/mismo/api.py mismo_readiness   100% 2 0 0   100% 0 0   100%
apps/mismo/api.py mismo_export   100% 9 0 0   100% 2 0   100%
apps/mismo/api.py (no function)   100% 18 0 0   100% 0 0   100%
apps/mismo/apps.py (no function)   100% 4 0 0   100% 0 0   100%
apps/mismo/generator.py _el   100% 4 0 0   100% 2 0   100%
apps/mismo/generator.py _sub   100% 4 0 0   100% 2 0   100%
apps/mismo/generator.py _address   100% 11 0 0   100% 2 0   100%
apps/mismo/generator.py _declaration_el   88% 32 4 0   50% 6 1   82%
apps/mismo/generator.py _government_monitoring_el   90% 20 2 0   75% 8 2   86%
apps/mismo/generator.py _residences_el   100% 16 0 0   100% 6 0   100%
apps/mismo/generator.py build_party   100% 34 0 0   100% 6 0   100%
apps/mismo/generator.py build_collateral   72% 36 10 0   70% 10 3   72%
apps/mismo/generator.py build_assets   100% 13 0 0   100% 4 0   100%
apps/mismo/generator.py build_liabilities   100% 14 0 0   100% 4 0   100%
apps/mismo/generator.py build_down_payments   100% 10 0 0   100% 4 0   100%
apps/mismo/generator.py build_gifts_or_grants   100% 12 0 0   100% 4 0   100%
apps/mismo/generator.py build_loan   100% 26 0 0   100% 4 0   100%
apps/mismo/generator.py build_mismo_deal   100% 52 0 0   89% 18 2   97%
apps/mismo/generator.py generate_mismo_xml   100% 3 0 0   100% 0 0   100%
apps/mismo/generator.py (no function)   100% 23 0 0   100% 0 0   100%
apps/mismo/schemas.py (no function)   100% 7 0 0   100% 0 0   100%
apps/pricing_ppe/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/pricing_ppe/api.py _scoped_loan   80% 5 1 0   50% 2 1   71%
apps/pricing_ppe/api.py _txn   50% 4 2 0   100% 0 0   50%
apps/pricing_ppe/api.py representative_fico   100% 5 0 0   100% 2 0   100%
apps/pricing_ppe/api.py _active_products   100% 1 0 0   100% 0 0   100%
apps/pricing_ppe/api.py _build_scenario   88% 17 2 0   75% 8 2   84%
apps/pricing_ppe/api.py pricing_products   100% 3 0 0   100% 0 0   100%
apps/pricing_ppe/api.py pricing_quote   100% 4 0 0   100% 0 0   100%
apps/pricing_ppe/api.py get_lock   100% 5 0 0   100% 0 0   100%
apps/pricing_ppe/api.py create_lock   93% 14 1 0   75% 4 1   89%
apps/pricing_ppe/api.py get_lock_alias   0% 1 1 0   100% 0 0   0%
apps/pricing_ppe/api.py create_lock_alias   0% 1 1 0   100% 0 0   0%
apps/pricing_ppe/api.py (no function)   100% 32 0 0   100% 0 0   100%
apps/pricing_ppe/apps.py (no function)   100% 4 0 0   100% 0 0   100%
apps/pricing_ppe/management/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/pricing_ppe/management/commands/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/pricing_ppe/management/commands/seed_rate_products.py Command.handle   100% 5 0 0   100% 2 0   100%
apps/pricing_ppe/management/commands/seed_rate_products.py (no function)   100% 8 0 0   100% 0 0   100%
apps/pricing_ppe/models.py RateProduct.__str__   0% 1 1 0   100% 0 0   0%
apps/pricing_ppe/models.py RateProduct.to_domain   100% 1 0 0   100% 0 0   100%
apps/pricing_ppe/models.py RateLock.__str__   0% 1 1 0   100% 0 0   0%
apps/pricing_ppe/models.py (no function)   100% 46 0 0   100% 0 0   100%
apps/pricing_ppe/schemas.py RateLockOut.resolve_rate   100% 1 0 0   100% 0 0   100%
apps/pricing_ppe/schemas.py RateLockOut.resolve_product_id   100% 1 0 0   100% 0 0   100%
apps/pricing_ppe/schemas.py (no function)   100% 94 0 0   100% 0 0   100%
apps/underwriting/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/underwriting/admin.py (no function)   100% 17 0 0   100% 0 0   100%
apps/underwriting/api.py _scoped_loan   80% 5 1 0   50% 2 1   71%
apps/underwriting/api.py _order_payload   100% 4 0 0   100% 0 0   100%
apps/underwriting/api.py order_credit   100% 18 0 0   83% 6 1   96%
apps/underwriting/api.py list_credit_orders   100% 2 0 0   100% 0 0   100%
apps/underwriting/api.py list_credit_scores   100% 2 0 0   100% 0 0   100%
apps/underwriting/api.py import_liabilities   0% 3 3 0   100% 0 0   0%
apps/underwriting/api.py (no function)   100% 21 0 0   100% 0 0   100%
apps/underwriting/apps.py (no function)   100% 4 0 0   100% 0 0   100%
apps/underwriting/aus_api.py _scoped_loan   80% 5 1 0   50% 2 1   71%
apps/underwriting/aus_api.py _txn   50% 4 2 0   100% 0 0   50%
apps/underwriting/aus_api.py _build_ctx   100% 5 0 0   100% 0 0   100%
apps/underwriting/aus_api.py _ratios   100% 9 0 0   100% 0 0   100%
apps/underwriting/aus_api.py _eligibility_payload   100% 1 0 0   100% 0 0   100%
apps/underwriting/aus_api.py aus_check   100% 2 0 0   100% 0 0   100%
apps/underwriting/aus_api.py _run   100% 9 0 0   100% 2 0   100%
apps/underwriting/aus_api.py run_du   100% 1 0 0   100% 0 0   100%
apps/underwriting/aus_api.py run_lpa   100% 1 0 0   100% 0 0   100%
apps/underwriting/aus_api.py aus_results   100% 5 0 0   100% 0 0   100%
apps/underwriting/aus_api.py aus_compare   0% 1 1 0   100% 0 0   0%
apps/underwriting/aus_api.py (no function)   100% 31 0 0   100% 0 0   100%
apps/underwriting/condition_api.py _scoped_loan   80% 5 1 0   50% 2 1   71%
apps/underwriting/condition_api.py _scoped_condition   75% 4 1 0   50% 2 1   67%
apps/underwriting/condition_api.py _coerce_required_text_nulls   78% 9 2 0   67% 6 2   73%
apps/underwriting/condition_api.py list_conditions   0% 2 2 0   100% 0 0   0%
apps/underwriting/condition_api.py create_condition   100% 3 0 0   100% 0 0   100%
apps/underwriting/condition_api.py update_condition   100% 14 0 0   100% 8 0   100%
apps/underwriting/condition_api.py transition_condition_status   100% 8 0 0   100% 2 0   100%
apps/underwriting/condition_api.py (no function)   100% 24 0 0   100% 0 0   100%
apps/underwriting/models.py CreditOrder.__str__   0% 1 1 0   100% 0 0   0%
apps/underwriting/models.py CreditScore.__str__   0% 1 1 0   100% 0 0   0%
apps/underwriting/models.py AusRun.__str__   0% 1 1 0   100% 0 0   0%
apps/underwriting/models.py Condition.__str__   0% 1 1 0   100% 0 0   0%
apps/underwriting/models.py (no function)   100% 64 0 0   100% 0 0   100%
apps/underwriting/providers.py CreditProvider.order   100% 0 0 1   100% 0 0   100%
apps/underwriting/providers.py DevCreditProvider.order   100% 10 0 0   100% 2 0   100%
apps/underwriting/providers.py MeridianLinkProvider.order   0% 1 1 0   100% 0 0   0%
apps/underwriting/providers.py get_credit_provider   100% 5 0 0   100% 2 0   100%
apps/underwriting/providers.py AusEngineProvider.run   100% 0 0 1   100% 0 0   100%
apps/underwriting/providers.py DevAusEngine.run   62% 8 3 0   25% 4 1   50%
apps/underwriting/providers.py AgencyAusEngine.run   0% 1 1 0   100% 0 0   0%
apps/underwriting/providers.py get_aus_engine   80% 5 1 0   50% 2 1   71%
apps/underwriting/providers.py (no function)   100% 45 0 4   100% 0 0   100%
apps/underwriting/schemas.py CreditScoreOut.resolve_borrower_id   100% 1 0 0   100% 0 0   100%
apps/underwriting/schemas.py CreditScoreOut.resolve_borrower_name   75% 4 1 0   50% 2 1   67%
apps/underwriting/schemas.py ConditionOut.resolve_document_ids   100% 1 0 0   100% 0 0   100%
apps/underwriting/schemas.py ConditionCreate.validate_name   67% 6 2 0   50% 4 2   60%
apps/underwriting/schemas.py ConditionPatch.validate_name   0% 8 8 0   0% 6 0   0%
apps/underwriting/schemas.py (no function)   100% 72 0 0   100% 0 0   100%
apps/workflow/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
apps/workflow/api.py _scoped_loan   80% 5 1 0   50% 2 1   71%
apps/workflow/api.py sync_tracker_mirror   79% 19 4 0   88% 8 1   81%
apps/workflow/api.py list_trackers   100% 5 0 0   100% 2 0   100%
apps/workflow/api.py update_tracker   83% 18 3 0   71% 14 4   78%
apps/workflow/api.py get_key_dates   100% 3 0 0   100% 0 0   100%
apps/workflow/api.py update_key_dates   69% 13 4 0   50% 8 2   62%
apps/workflow/api.py list_tasks   100% 2 0 0   100% 0 0   100%
apps/workflow/api.py create_task   100% 3 0 0   100% 0 0   100%
apps/workflow/api.py task_from_template   83% 6 1 0   50% 2 1   75%
apps/workflow/api.py update_task   79% 14 3 0   50% 8 4   68%
apps/workflow/api.py evaluate_loan_rules   100% 13 0 0   75% 4 1   94%
apps/workflow/api.py list_templates   100% 1 0 0   100% 0 0   100%
apps/workflow/api.py create_template   100% 1 0 0   100% 0 0   100%
apps/workflow/api.py delete_template   100% 5 0 0   100% 2 0   100%
apps/workflow/api.py list_rules   0% 1 1 0   100% 0 0   0%
apps/workflow/api.py create_rule   100% 1 0 0   100% 0 0   100%
apps/workflow/api.py (no function)   100% 50 0 0   100% 0 0   100%
apps/workflow/apps.py (no function)   100% 4 0 0   100% 0 0   100%
apps/workflow/models.py LoanTracker.__str__   0% 1 1 0   100% 0 0   0%
apps/workflow/models.py LoanTracker.complete   100% 3 0 0   100% 0 0   100%
apps/workflow/models.py KeyDates.__str__   0% 1 1 0   100% 0 0   0%
apps/workflow/models.py LoanTask.__str__   0% 2 2 0   100% 0 0   0%
apps/workflow/models.py LoanTask.complete   100% 10 0 0   75% 4 1   93%
apps/workflow/models.py TaskTemplate.__str__   0% 1 1 0   100% 0 0   0%
apps/workflow/models.py TaskTemplate.apply   100% 7 0 0   50% 2 1   89%
apps/workflow/models.py AutomationRule.__str__   0% 1 1 0   100% 0 0   0%
apps/workflow/models.py AutomationRule.to_domain   65% 17 6 0   42% 12 1   55%
apps/workflow/models.py seed_trackers   100% 3 0 0   100% 0 0   100%
apps/workflow/models.py (no function)   100% 97 0 3   100% 0 0   100%
apps/workflow/ports.py TirelessTrackerPort.fetch_overview   100% 0 0 1   100% 0 0   100%
apps/workflow/ports.py NoopTirelessTrackerPort.fetch_overview   100% 1 0 0   100% 0 0   100%
apps/workflow/ports.py get_tracker_port   100% 4 0 2   100% 2 0   100%
apps/workflow/ports.py (no function)   100% 12 0 2   100% 0 0   100%
apps/workflow/rules_api.py _to_rule_out   100% 1 0 0   100% 0 0   100%
apps/workflow/rules_api.py _seed_rules_if_empty   100% 5 0 0   100% 4 0   100%
apps/workflow/rules_api.py list_rules   100% 2 0 0   100% 0 0   100%
apps/workflow/rules_api.py create_rule   71% 24 7 0   50% 14 7   63%
apps/workflow/rules_api.py update_rule   83% 12 2 0   50% 8 4   70%
apps/workflow/rules_api.py delete_rule   88% 8 1 0   75% 4 1   83%
apps/workflow/rules_api.py (no function)   100% 37 0 0   100% 0 0   100%
apps/workflow/schemas.py TaskCreate.validate_title   67% 6 2 0   50% 4 2   60%
apps/workflow/schemas.py TaskPatch.validate_title   0% 8 8 0   0% 6 0   0%
apps/workflow/schemas.py (no function)   100% 117 0 0   100% 0 0   100%
apps/workflow/tasks_hub_api.py _task_status   100% 5 0 0   100% 4 0   100%
apps/workflow/tasks_hub_api.py _task_row   100% 3 0 0   100% 0 0   100%
apps/workflow/tasks_hub_api.py list_all_tasks   100% 4 0 0   100% 0 0   100%
apps/workflow/tasks_hub_api.py (no function)   100% 12 0 0   100% 0 0   100%
config/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
config/api.py _domain_error_handler   100% 1 0 0   100% 0 0   100%
config/api.py _ninja_validation_error_handler   100% 10 0 0   100% 2 0   100%
config/api.py _django_validation_error_handler   0% 11 11 0   0% 10 0   0%
config/api.py _data_error_handler   0% 2 2 0   100% 0 0   0%
config/api.py _integrity_error_handler   0% 2 2 0   100% 0 0   0%
config/api.py _database_error_handler   0% 3 3 0   100% 0 0   0%
config/api.py _http_404_handler   0% 1 1 0   100% 0 0   0%
config/api.py _object_does_not_exist_handler   0% 1 1 0   100% 0 0   0%
config/api.py _permission_denied_handler   0% 1 1 0   100% 0 0   0%
config/api.py _unhandled_exception_handler   100% 2 0 0   100% 0 0   100%
config/api.py health   0% 1 1 0   100% 0 0   0%
config/api.py (no function)   100% 122 0 0   100% 0 0   100%
config/settings/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
config/settings/base.py (no function)   100% 50 0 0   100% 0 0   100%
config/settings/local.py (no function)   100% 4 0 0   100% 0 0   100%
config/settings/production.py (no function)   0% 13 13 0   100% 0 0   0%
config/urls.py (no function)   100% 4 0 0   100% 0 0   100%
domain/__init__.py (no function)   100% 7 0 0   100% 0 0   100%
domain/aus.py check_aus_eligibility   91% 35 3 0   90% 30 3   91%
domain/aus.py check_aus_eligibility.blocks   100% 1 0 0   100% 0 0   100%
domain/aus.py assert_aus_ready   100% 5 0 0   100% 2 0   100%
domain/aus.py (no function)   100% 41 0 0   100% 0 0   100%
domain/calc.py _d   80% 5 1 0   75% 4 1   78%
domain/calc.py round2   100% 1 0 0   100% 0 0   100%
domain/calc.py monthly_pi   100% 9 0 0   100% 4 0   100%
domain/calc.py ltv   100% 4 0 0   100% 2 0   100%
domain/calc.py cltv   100% 1 0 0   100% 0 0   100%
domain/calc.py hcltv   100% 1 0 0   100% 0 0   100%
domain/calc.py piti   100% 5 0 0   100% 0 0   100%
domain/calc.py dti   100% 5 0 0   100% 2 0   100%
domain/calc.py down_payment   100% 1 0 0   100% 0 0   100%
domain/calc.py TransactionInput.__post_init__   67% 3 1 0   75% 4 1   71%
domain/calc.py recalc_transaction   100% 6 0 0   100% 0 0   100%
domain/calc.py (no function)   100% 43 0 0   100% 0 0   100%
domain/conditions.py can_transition_condition   100% 1 0 0   100% 0 0   100%
domain/conditions.py assert_condition_transition   100% 5 0 0   100% 4 0   100%
domain/conditions.py (no function)   100% 7 0 0   100% 0 0   100%
domain/disclosures.py _is_at_or_after   67% 6 2 0   100% 0 0   67%
domain/disclosures.py _get_field   67% 3 1 0   50% 2 1   60%
domain/disclosures.py can_generate_package   94% 16 1 0   93% 14 1   93%
domain/disclosures.py (no function)   100% 8 0 0   100% 0 0   100%
domain/enums.py stage_choices   100% 1 0 0   100% 0 0   100%
domain/enums.py purpose_choices   100% 1 0 0   100% 0 0   100%
domain/enums.py occupancy_choices   100% 1 0 0   100% 0 0   100%
domain/enums.py fee_section_choices   100% 1 0 0   100% 0 0   100%
domain/enums.py tolerance_bucket_choices   100% 1 0 0   100% 0 0   100%
domain/enums.py paid_by_choices   100% 1 0 0   100% 0 0   100%
domain/enums.py paid_to_choices   100% 1 0 0   100% 0 0   100%
domain/enums.py comp_type_choices   100% 1 0 0   100% 0 0   100%
domain/enums.py pricing_channel_choices   0% 1 1 0   100% 0 0   0%
domain/enums.py rate_type_choices   0% 1 1 0   100% 0 0   0%
domain/enums.py pricing_goal_choices   0% 1 1 0   100% 0 0   0%
domain/enums.py tracker_status_choices   100% 1 0 0   100% 0 0   100%
domain/enums.py is_member   100% 1 0 0   100% 0 0   100%
domain/enums.py enum_choices   100% 1 0 0   100% 0 0   100%
domain/enums.py (no function)   100% 248 0 0   100% 0 0   100%
domain/fees.py _d   80% 5 1 0   75% 4 1   78%
domain/fees.py round2   100% 1 0 0   100% 0 0   100%
domain/fees.py _get_field   88% 8 1 0   88% 8 1   88%
domain/fees.py bucket_of   73% 11 3 0   75% 4 1   73%
domain/fees.py compute_tolerance_cure   100% 17 0 0   100% 6 0   100%
domain/fees.py compute_tolerance_cure._sum_bucket   100% 10 0 0   100% 6 0   100%
domain/fees.py QmResult.pass_status   100% 1 0 0   100% 0 0   100%
domain/fees.py QmResult.__getattr__   0% 3 3 0   0% 2 0   0%
domain/fees.py QmResult.__getitem__   67% 3 1 0   50% 2 1   60%
domain/fees.py qm_points_and_fees_test   100% 30 0 0   100% 12 0   100%
domain/fees.py (no function)   100% 61 0 0   100% 0 0   100%
domain/field_configs.py get_field_configs   100% 1 0 0   100% 0 0   100%
domain/field_configs.py (no function)   100% 6 0 0   100% 0 0   100%
domain/lifecycle.py can_transition   100% 1 0 0   100% 0 0   100%
domain/lifecycle.py valid_next_stages   100% 1 0 0   100% 0 0   100%
domain/lifecycle.py assert_transition   100% 8 0 0   100% 6 0   100%
domain/lifecycle.py (no function)   100% 9 0 0   100% 0 0   100%
domain/mismo_readiness.py check_mismo_readiness   100% 16 0 0   100% 14 0   100%
domain/mismo_readiness.py (no function)   100% 24 0 0   100% 0 0   100%
domain/pos.py digits   100% 1 0 0   100% 0 0   100%
domain/pos.py blank   100% 1 0 0   100% 0 0   100%
domain/pos.py is_email   100% 1 0 0   100% 0 0   100%
domain/pos.py is_us_phone   100% 1 0 0   100% 0 0   100%
domain/pos.py is_strong_password   100% 1 0 0   100% 0 0   100%
domain/pos.py _is_number   100% 1 0 0   100% 0 0   100%
domain/pos.py _is_positive   100% 1 0 0   100% 0 0   100%
domain/pos.py age_on   75% 4 1 0   50% 2 1   67%
domain/pos.py first_error   100% 3 0 0   100% 2 0   100%
domain/pos.py _require_text   83% 6 1 0   83% 6 1   83%
domain/pos.py _require_amount   67% 6 2 0   67% 6 2   67%
domain/pos.py _optional_amount   100% 5 0 0   100% 6 0   100%
domain/pos.py validate_register   100% 7 0 0   100% 4 0   100%
domain/pos.py validate_profile   86% 7 1 0   75% 4 1   82%
domain/pos.py validate_new_password   100% 5 0 0   100% 4 0   100%
domain/pos.py validate_start   91% 11 1 0   88% 8 1   89%
domain/pos.py _validate_answers   100% 3 0 0   100% 2 0   100%
domain/pos.py validate_step   90% 100 10 0   87% 82 11   88%
domain/pos.py _parse_date   83% 6 1 0   50% 2 1   75%
domain/pos.py _borrowers_of   60% 5 2 0   50% 2 1   57%
domain/pos.py _common_step_done   90% 10 1 0   88% 8 1   89%
domain/pos.py _borrower_step_done   93% 14 1 0   92% 12 1   92%
domain/pos.py steps_of   100% 9 0 0   100% 6 0   100%
domain/pos.py percent_complete   100% 2 0 0   100% 0 0   100%
domain/pos.py percent_complete_of   88% 8 1 0   75% 4 1   83%
domain/pos.py is_masked_ssn   100% 1 0 0   100% 0 0   100%
domain/pos.py mask_ssn   100% 3 0 0   100% 2 0   100%
domain/pos.py (no function)   100% 58 0 0   100% 0 0   100%
domain/pricing.py _d   80% 5 1 0   75% 4 1   78%
domain/pricing.py round2   100% 1 0 0   100% 0 0   100%
domain/pricing.py round3   100% 1 0 0   100% 0 0   100%
domain/pricing.py RateProductInput.__post_init__   100% 5 0 0   100% 0 0   100%
domain/pricing.py PricingScenario.__post_init__   100% 6 0 0   100% 0 0   100%
domain/pricing.py ClosingCostBreakdown.lender_fees   0% 1 1 0   100% 0 0   0%
domain/pricing.py ClosingCostBreakdown.title   0% 1 1 0   100% 0 0   0%
domain/pricing.py ClosingCostBreakdown.prepaids   0% 1 1 0   100% 0 0   0%
domain/pricing.py approximate_apr   94% 18 1 0   83% 6 1   92%
domain/pricing.py approximate_apr.pv   67% 3 1 0   50% 2 1   60%
domain/pricing.py price_adjustments   95% 20 1 0   94% 16 1   94%
domain/pricing.py price_scenario   100% 38 0 0   100% 10 0   100%
domain/pricing.py to_pricing_result   100% 3 0 0   100% 0 0   100%
domain/pricing.py price_manual   100% 3 0 0   100% 0 0   100%
domain/pricing.py recommend   89% 9 1 0   50% 2 1   82%
domain/pricing.py recommend.score   57% 14 6 0   58% 12 3   58%
domain/pricing.py (no function)   100% 121 0 0   100% 0 0   100%
domain/provisioning.py _get_val   80% 5 1 0   75% 4 1   78%
domain/provisioning.py validate_client_config   75% 61 15 0   64% 42 15   71%
domain/provisioning.py summarize_plan   92% 25 2 0   70% 10 3   86%
domain/provisioning.py (no function)   100% 12 0 0   100% 0 0   100%
domain/qualification.py total_monthly_income   100% 1 0 0   100% 0 0   100%
domain/qualification.py total_monthly_debt   100% 1 0 0   100% 0 0   100%
domain/qualification.py proposed_housing_expense   100% 4 0 0   100% 2 0   100%
domain/qualification.py qualify   100% 5 0 0   100% 0 0   100%
domain/qualification.py (no function)   100% 29 0 0   100% 0 0   100%
domain/rbac.py permission_meta   100% 1 0 0   100% 0 0   100%
domain/rbac.py has_permission   100% 2 0 0   100% 0 0   100%
domain/rbac.py (no function)   100% 12 0 0   100% 0 0   100%
domain/report_builder.py validate_report_def   100% 17 0 0   94% 16 1   97%
domain/report_builder.py filter_matches   82% 17 3 0   79% 14 3   81%
domain/report_builder.py _nums   100% 1 0 0   100% 0 0   100%
domain/report_builder.py metric_value   92% 13 1 0   92% 12 1   92%
domain/report_builder.py _column   100% 2 0 0   100% 0 0   100%
domain/report_builder.py _metric_column   100% 2 0 0   100% 0 0   100%
domain/report_builder.py run_report   75% 20 5 0   83% 6 1   77%
domain/report_builder.py run_report.sort_key   0% 4 4 0   0% 2 0   0%
domain/report_builder.py _csv_escape   100% 4 0 0   100% 2 0   100%
domain/report_builder.py to_csv   100% 6 0 0   100% 4 0   100%
domain/report_builder.py (no function)   100% 52 0 0   100% 0 0   100%
domain/reports.py is_active_loan   100% 1 0 0   100% 0 0   100%
domain/reports.py broker_compensation   100% 1 0 0   100% 0 0   100%
domain/reports.py quarter_of   100% 1 0 0   100% 0 0   100%
domain/reports.py (no function)   100% 9 0 0   100% 0 0   100%
domain/result.py ok   100% 1 0 0   100% 0 0   100%
domain/result.py err   100% 1 0 0   100% 0 0   100%
domain/result.py all_   0% 4 4 0   0% 2 0   0%
domain/result.py http_status_for   100% 10 0 0   100% 8 0   100%
domain/result.py to_envelope   100% 1 0 0   100% 0 0   100%
domain/result.py format_db_error   50% 12 6 0   40% 10 2   45%
domain/result.py DomainError.__init__   100% 3 0 0   100% 0 0   100%
domain/result.py (no function)   100% 24 0 0   100% 0 0   100%
domain/rules.py RuleOutcome.ok   100% 1 0 0   100% 0 0   100%
domain/rules.py _get_path   56% 9 4 0   50% 8 2   53%
domain/rules.py condition_holds   67% 9 3 0   50% 6 1   60%
domain/rules.py evaluate_rules   88% 17 2 0   88% 16 2   88%
domain/rules.py (no function)   100% 47 0 0   100% 0 0   100%
domain/state_compliance.py _build_state_rules   100% 8 0 0   100% 2 0   100%
domain/state_compliance.py get_state_rule   67% 3 1 0   50% 2 1   60%
domain/state_compliance.py validate_state_compliance   76% 25 6 0   56% 18 6   67%
domain/state_compliance.py (no function)   100% 16 0 0   100% 0 0   100%
domain/trackers.py fresh_trackers   100% 1 0 0   100% 0 0   100%
domain/trackers.py (no function)   100% 17 0 0   100% 0 0   100%
domain/validation.py validate_licensing   100% 6 0 0   100% 4 0   100%
domain/validation.py validate_loan_header   92% 13 1 0   90% 10 1   91%
domain/validation.py validate_create_loan   100% 20 0 0   100% 16 0   100%
domain/validation.py _get_path   83% 6 1 0   75% 4 1   80%
domain/validation.py validate_stage_required_fields   100% 10 0 0   100% 4 0   100%
domain/validation.py validate_borrower_delete   100% 3 0 0   100% 2 0   100%
domain/validation.py (no function)   100% 36 0 0   100% 0 0   100%
Total     92% 10858 863 23   72% 2180 410   89%

No items found using the specified filter.