From dd91d1fba99da931a7884377f86aff6fd171ee28 Mon Sep 17 00:00:00 2001 From: Michael Ambroselli Date: Tue, 23 Apr 2024 11:42:48 -0400 Subject: [PATCH 1/5] add missing fields to query --- lib/reporting/drop_off_report.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/reporting/drop_off_report.rb b/lib/reporting/drop_off_report.rb index 34ad179b546..b95b59393db 100644 --- a/lib/reporting/drop_off_report.rb +++ b/lib/reporting/drop_off_report.rb @@ -388,6 +388,11 @@ def query name , properties.user_id AS user_id , coalesce(properties.event_properties.success, 0) AS success + , coalesce(properties.event_properties.fraud_review_pending, 0) AS fraud_review_pending + , coalesce(properties.event_properties.gpo_verification_pending, 0) AS gpo_verification_pending + , coalesce(properties.event_properties.in_person_verification_pending, 0) AS in_person_verification_pending + , ispresent(properties.event_properties.deactivation_reason) AS has_other_deactivation_reason + , !fraud_review_pending and !gpo_verification_pending and !in_person_verification_pending and !has_other_deactivation_reason AS identity_verified #{issuers.present? ? '| filter properties.service_provider IN %{issuers}' : ''} | filter name in %{event_names} | limit 10000 @@ -403,9 +408,10 @@ def data end fetch_results.each do |row| - event_users[row['name']] << row['user_id'] - event = row['name'] + user_id = row['user_id'] + event_users[event] << user_id + case event when Events::IDV_FINAL_RESOLUTION if row['identity_verified'] == '1' From 74970e1d256498e574a6fcdbc78bb953b00e42d5 Mon Sep 17 00:00:00 2001 From: Michael Ambroselli Date: Tue, 23 Apr 2024 13:54:05 -0400 Subject: [PATCH 2/5] add test cases --- spec/lib/reporting/drop_off_report_spec.rb | 67 ++++++++++++++++++---- 1 file changed, 55 insertions(+), 12 deletions(-) diff --git a/spec/lib/reporting/drop_off_report_spec.rb b/spec/lib/reporting/drop_off_report_spec.rb index 7486b6544c9..22b8c289630 100644 --- a/spec/lib/reporting/drop_off_report_spec.rb +++ b/spec/lib/reporting/drop_off_report_spec.rb @@ -23,6 +23,7 @@ { 'user_id' => 'user1', 'name' => 'idv_enter_password_visited' }, { 'user_id' => 'user1', 'name' => 'idv_enter_password_submitted' }, { 'user_id' => 'user1', 'name' => 'IdV: personal key submitted' }, + { 'user_id' => 'user1', 'identity_verified'=>'1', 'name' => 'IdV: final resolution'}, # gets through phone finder, then drops { 'user_id' => 'user2', 'name' => 'IdV: doc auth welcome visited' }, @@ -50,6 +51,48 @@ # bails after viewing the user agreement { 'user_id' => 'user5', 'name' => 'IdV: doc auth welcome visited' }, { 'user_id' => 'user5', 'name' => 'IdV: doc auth welcome submitted' }, + + # finishes funnel but has to wait for GPO letter + { 'user_id' => 'user6', 'name' => 'IdV: doc auth welcome visited' }, + { 'user_id' => 'user6', 'name' => 'IdV: doc auth welcome submitted' }, + { 'user_id' => 'user6', 'name' => 'IdV: doc auth image upload vendor submitted' }, + { 'user_id' => 'user6', 'name' => 'IdV: doc auth document_capture visited' }, + { 'user_id' => 'user6', 'name' => 'IdV: doc auth ssn visited' }, + { 'user_id' => 'user6', 'name' => 'IdV: doc auth verify visited' }, + { 'user_id' => 'user6', 'name' => 'IdV: doc auth verify submitted' }, + { 'user_id' => 'user6', 'gpo_verification_pending'=>'1', 'name' => 'IdV: phone of record visited' }, + { 'user_id' => 'user6', 'name' => 'idv_enter_password_visited' }, + { 'user_id' => 'user6', 'name' => 'idv_enter_password_submitted' }, + { 'user_id' => 'user6', 'name' => 'IdV: personal key submitted' }, + { 'user_id' => 'user6', 'identity_verified'=>'0', 'name' => 'IdV: final resolution'}, + + # # finishes funnel but has to wait for IPP + { 'user_id' => 'user7', 'name' => 'IdV: doc auth welcome visited' }, + { 'user_id' => 'user7', 'name' => 'IdV: doc auth welcome submitted' }, + { 'user_id' => 'user7', 'name' => 'IdV: doc auth image upload vendor submitted' }, + { 'user_id' => 'user7', 'name' => 'IdV: doc auth document_capture visited' }, + { 'user_id' => 'user7', 'name' => 'IdV: doc auth ssn visited' }, + { 'user_id' => 'user7', 'name' => 'IdV: doc auth verify visited' }, + { 'user_id' => 'user7', 'in_person_verification_pending'=>'1', 'name' => 'IdV: doc auth verify submitted' }, + { 'user_id' => 'user7', 'name' => 'IdV: phone of record visited' }, + { 'user_id' => 'user7', 'name' => 'idv_enter_password_visited' }, + { 'user_id' => 'user7', 'name' => 'idv_enter_password_submitted' }, + { 'user_id' => 'user7', 'name' => 'IdV: personal key submitted' }, + { 'user_id' => 'user7', 'name' => 'IdV: final resolution'}, + + # finishes funnel but has to wait for fraud review + { 'user_id' => 'user8', 'name' => 'IdV: doc auth welcome visited' }, + { 'user_id' => 'user8', 'name' => 'IdV: doc auth welcome submitted' }, + { 'user_id' => 'user8', 'name' => 'IdV: doc auth image upload vendor submitted' }, + { 'user_id' => 'user8', 'name' => 'IdV: doc auth document_capture visited' }, + { 'user_id' => 'user8', 'name' => 'IdV: doc auth ssn visited' }, + { 'user_id' => 'user8', 'name' => 'IdV: doc auth verify visited' }, + { 'user_id' => 'user8', 'fraud_review_pending'=>'1', 'name' => 'IdV: doc auth verify submitted' }, + { 'user_id' => 'user8', 'name' => 'IdV: phone of record visited' }, + { 'user_id' => 'user8', 'name' => 'idv_enter_password_visited' }, + { 'user_id' => 'user8', 'name' => 'idv_enter_password_submitted' }, + { 'user_id' => 'user8', 'name' => 'IdV: personal key submitted' }, + { 'user_id' => 'user8', 'name' => 'IdV: final resolution'}, ], ) @@ -144,18 +187,18 @@ def expected_tables(strings: false) [ ['Step', 'Unique user count', 'Users lost', 'Dropoff from last step', 'Users left from start'], - ['Welcome (page viewed)'] + string_or_num(strings, 5), - ['User agreement (page viewed)'] + string_or_num(strings, 5, 0, 0.0, 1.0), - ['Capture Document (page viewed)'] + string_or_num(strings, 4, 1, 0.2, 0.8), - ['Document submitted (event)'] + string_or_num(strings, 4, 0, 0.0, 0.8), - ['SSN (page view)'] + string_or_num(strings, 3, 1, 0.25, 0.6), - ['Verify Info (page view)'] + string_or_num(strings, 2, 1, 0.3333333333333333, 0.4), - ['Verify submit (event)'] + string_or_num(strings, 2, 0, 0.0, 0.4), - ['Phone finder (page view)'] + string_or_num(strings, 2, 0, 0.0, 0.4), - ['Encrypt account: enter password (page view)'] + string_or_num(strings, 1, 1, 0.5, 0.2), - ['Personal key input (page view)'] + string_or_num(strings, 1, 0, 0.0, 0.2), - ['Verified (event)'] + string_or_num(strings, 1, 0, 0.0, 0.2), - ['Workflow Complete - Total Pending'] + string_or_num(strings, 0), + ['Welcome (page viewed)'] + string_or_num(strings, 8), + ['User agreement (page viewed)'] + string_or_num(strings, 8, 0, 0.0, 1.0), + ['Capture Document (page viewed)'] + string_or_num(strings, 7, 1, 0.125, 0.875), + ['Document submitted (event)'] + string_or_num(strings, 7, 0, 0.0, 0.875), + ['SSN (page view)'] + string_or_num(strings, 6, 1, 0.14285714285714285, 0.75), + ['Verify Info (page view)'] + string_or_num(strings, 5, 1, 0.16666666666666666, 0.625), + ['Verify submit (event)'] + string_or_num(strings, 5, 0, 0.0, 0.625), + ['Phone finder (page view)'] + string_or_num(strings, 5, 0, 0.0, 0.625), + ['Encrypt account: enter password (page view)'] + string_or_num(strings, 4, 1, 0.2, 0.5), + ['Personal key input (page view)'] + string_or_num(strings, 4, 0, 0.0, 0.5), + ['Verified (event)'] + string_or_num(strings, 4, 0, 0.0, 0.5), + ['Workflow Complete - Total Pending'] + string_or_num(strings, 3), ], ] end From dcc51b9ed672f635749c754f6e1ec544b79ae5c9 Mon Sep 17 00:00:00 2001 From: Michael <107054114+mmagsa@users.noreply.github.com> Date: Tue, 23 Apr 2024 14:07:00 -0400 Subject: [PATCH 3/5] Update spec/lib/reporting/drop_off_report_spec.rb Co-authored-by: Zach Margolis --- spec/lib/reporting/drop_off_report_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/lib/reporting/drop_off_report_spec.rb b/spec/lib/reporting/drop_off_report_spec.rb index 22b8c289630..d425b58e183 100644 --- a/spec/lib/reporting/drop_off_report_spec.rb +++ b/spec/lib/reporting/drop_off_report_spec.rb @@ -191,8 +191,8 @@ def expected_tables(strings: false) ['User agreement (page viewed)'] + string_or_num(strings, 8, 0, 0.0, 1.0), ['Capture Document (page viewed)'] + string_or_num(strings, 7, 1, 0.125, 0.875), ['Document submitted (event)'] + string_or_num(strings, 7, 0, 0.0, 0.875), - ['SSN (page view)'] + string_or_num(strings, 6, 1, 0.14285714285714285, 0.75), - ['Verify Info (page view)'] + string_or_num(strings, 5, 1, 0.16666666666666666, 0.625), + ['SSN (page view)'] + string_or_num(strings, 6, 1, 1.0/7, 0.75), + ['Verify Info (page view)'] + string_or_num(strings, 5, 1, 1.0/6, 0.625), ['Verify submit (event)'] + string_or_num(strings, 5, 0, 0.0, 0.625), ['Phone finder (page view)'] + string_or_num(strings, 5, 0, 0.0, 0.625), ['Encrypt account: enter password (page view)'] + string_or_num(strings, 4, 1, 0.2, 0.5), From 3fdf0afb18b6cd897d865c250e5b8100a1a2d96b Mon Sep 17 00:00:00 2001 From: Michael <107054114+mmagsa@users.noreply.github.com> Date: Tue, 23 Apr 2024 15:12:56 -0400 Subject: [PATCH 4/5] Update spec/lib/reporting/drop_off_report_spec.rb Co-authored-by: Zach Margolis --- spec/lib/reporting/drop_off_report_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/lib/reporting/drop_off_report_spec.rb b/spec/lib/reporting/drop_off_report_spec.rb index d425b58e183..8f2336fe7e7 100644 --- a/spec/lib/reporting/drop_off_report_spec.rb +++ b/spec/lib/reporting/drop_off_report_spec.rb @@ -66,7 +66,7 @@ { 'user_id' => 'user6', 'name' => 'IdV: personal key submitted' }, { 'user_id' => 'user6', 'identity_verified'=>'0', 'name' => 'IdV: final resolution'}, - # # finishes funnel but has to wait for IPP + # finishes funnel but has to wait for IPP { 'user_id' => 'user7', 'name' => 'IdV: doc auth welcome visited' }, { 'user_id' => 'user7', 'name' => 'IdV: doc auth welcome submitted' }, { 'user_id' => 'user7', 'name' => 'IdV: doc auth image upload vendor submitted' }, From 361ff5c17df28e6194cc4bf12fa5274cff6b920e Mon Sep 17 00:00:00 2001 From: Michael Ambroselli Date: Wed, 24 Apr 2024 09:54:33 -0400 Subject: [PATCH 5/5] fix linter issues changelog: Internal, Data Reporting, Fix Drop Off Report --- spec/lib/reporting/drop_off_report_spec.rb | 24 ++++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/spec/lib/reporting/drop_off_report_spec.rb b/spec/lib/reporting/drop_off_report_spec.rb index 8f2336fe7e7..b5e6ad5b62a 100644 --- a/spec/lib/reporting/drop_off_report_spec.rb +++ b/spec/lib/reporting/drop_off_report_spec.rb @@ -23,7 +23,7 @@ { 'user_id' => 'user1', 'name' => 'idv_enter_password_visited' }, { 'user_id' => 'user1', 'name' => 'idv_enter_password_submitted' }, { 'user_id' => 'user1', 'name' => 'IdV: personal key submitted' }, - { 'user_id' => 'user1', 'identity_verified'=>'1', 'name' => 'IdV: final resolution'}, + { 'user_id' => 'user1', 'identity_verified' => '1', 'name' => 'IdV: final resolution' }, # gets through phone finder, then drops { 'user_id' => 'user2', 'name' => 'IdV: doc auth welcome visited' }, @@ -60,11 +60,13 @@ { 'user_id' => 'user6', 'name' => 'IdV: doc auth ssn visited' }, { 'user_id' => 'user6', 'name' => 'IdV: doc auth verify visited' }, { 'user_id' => 'user6', 'name' => 'IdV: doc auth verify submitted' }, - { 'user_id' => 'user6', 'gpo_verification_pending'=>'1', 'name' => 'IdV: phone of record visited' }, + { 'user_id' => 'user6', + 'gpo_verification_pending' => '1', + 'name' => 'IdV: phone of record visited' }, { 'user_id' => 'user6', 'name' => 'idv_enter_password_visited' }, { 'user_id' => 'user6', 'name' => 'idv_enter_password_submitted' }, { 'user_id' => 'user6', 'name' => 'IdV: personal key submitted' }, - { 'user_id' => 'user6', 'identity_verified'=>'0', 'name' => 'IdV: final resolution'}, + { 'user_id' => 'user6', 'identity_verified' => '0', 'name' => 'IdV: final resolution' }, # finishes funnel but has to wait for IPP { 'user_id' => 'user7', 'name' => 'IdV: doc auth welcome visited' }, @@ -73,12 +75,14 @@ { 'user_id' => 'user7', 'name' => 'IdV: doc auth document_capture visited' }, { 'user_id' => 'user7', 'name' => 'IdV: doc auth ssn visited' }, { 'user_id' => 'user7', 'name' => 'IdV: doc auth verify visited' }, - { 'user_id' => 'user7', 'in_person_verification_pending'=>'1', 'name' => 'IdV: doc auth verify submitted' }, + { 'user_id' => 'user7', + 'in_person_verification_pending' => '1', + 'name' => 'IdV: doc auth verify submitted' }, { 'user_id' => 'user7', 'name' => 'IdV: phone of record visited' }, { 'user_id' => 'user7', 'name' => 'idv_enter_password_visited' }, { 'user_id' => 'user7', 'name' => 'idv_enter_password_submitted' }, { 'user_id' => 'user7', 'name' => 'IdV: personal key submitted' }, - { 'user_id' => 'user7', 'name' => 'IdV: final resolution'}, + { 'user_id' => 'user7', 'name' => 'IdV: final resolution' }, # finishes funnel but has to wait for fraud review { 'user_id' => 'user8', 'name' => 'IdV: doc auth welcome visited' }, @@ -87,12 +91,14 @@ { 'user_id' => 'user8', 'name' => 'IdV: doc auth document_capture visited' }, { 'user_id' => 'user8', 'name' => 'IdV: doc auth ssn visited' }, { 'user_id' => 'user8', 'name' => 'IdV: doc auth verify visited' }, - { 'user_id' => 'user8', 'fraud_review_pending'=>'1', 'name' => 'IdV: doc auth verify submitted' }, + { 'user_id' => 'user8', + 'fraud_review_pending' => '1', + 'name' => 'IdV: doc auth verify submitted' }, { 'user_id' => 'user8', 'name' => 'IdV: phone of record visited' }, { 'user_id' => 'user8', 'name' => 'idv_enter_password_visited' }, { 'user_id' => 'user8', 'name' => 'idv_enter_password_submitted' }, { 'user_id' => 'user8', 'name' => 'IdV: personal key submitted' }, - { 'user_id' => 'user8', 'name' => 'IdV: final resolution'}, + { 'user_id' => 'user8', 'name' => 'IdV: final resolution' }, ], ) @@ -191,8 +197,8 @@ def expected_tables(strings: false) ['User agreement (page viewed)'] + string_or_num(strings, 8, 0, 0.0, 1.0), ['Capture Document (page viewed)'] + string_or_num(strings, 7, 1, 0.125, 0.875), ['Document submitted (event)'] + string_or_num(strings, 7, 0, 0.0, 0.875), - ['SSN (page view)'] + string_or_num(strings, 6, 1, 1.0/7, 0.75), - ['Verify Info (page view)'] + string_or_num(strings, 5, 1, 1.0/6, 0.625), + ['SSN (page view)'] + string_or_num(strings, 6, 1, 1.0 / 7, 0.75), + ['Verify Info (page view)'] + string_or_num(strings, 5, 1, 1.0 / 6, 0.625), ['Verify submit (event)'] + string_or_num(strings, 5, 0, 0.0, 0.625), ['Phone finder (page view)'] + string_or_num(strings, 5, 0, 0.0, 0.625), ['Encrypt account: enter password (page view)'] + string_or_num(strings, 4, 1, 0.2, 0.5),