From d8f313af35edea026053c2f50adffaee4b4e46ed Mon Sep 17 00:00:00 2001 From: Eileen McFarland <80347702+eileen-nava@users.noreply.github.com> Date: Thu, 24 Oct 2024 13:29:12 -0400 Subject: [PATCH 1/5] begin removing same_address_as_id from analytics --- .../concerns/idv/verify_info_concern.rb | 3 +- app/controllers/concerns/idv_step_concern.rb | 9 +----- app/services/analytics_events.rb | 30 ------------------- app/services/idv/flows/in_person_flow.rb | 8 +---- .../idv/in_person/address_controller_spec.rb | 3 -- .../idv/in_person/ssn_controller_spec.rb | 4 --- .../idv/in_person/state_id_controller_spec.rb | 1 - .../in_person/verify_info_controller_spec.rb | 2 -- 8 files changed, 3 insertions(+), 57 deletions(-) diff --git a/app/controllers/concerns/idv/verify_info_concern.rb b/app/controllers/concerns/idv/verify_info_concern.rb index 1108da94480..ed4f715bed9 100644 --- a/app/controllers/concerns/idv/verify_info_concern.rb +++ b/app/controllers/concerns/idv/verify_info_concern.rb @@ -195,11 +195,10 @@ def async_state_done(current_async_state) [:proofing_results, :context, :stages, :resolution, :errors, :ssn], [:proofing_results, :context, :stages, :residential_address, :errors, :ssn], [:proofing_results, :context, :stages, :threatmetrix, :response_body, :first_name], - [:same_address_as_id], [:proofing_results, :context, :stages, :state_id, :state_id_jurisdiction], [:proofing_results, :biographical_info, :identity_doc_address_state], [:proofing_results, :biographical_info, :state_id_jurisdiction], - [:proofing_results, :biographical_info, :same_address_as_id], + [:proofing_results, :biographical_info], ], }, ) diff --git a/app/controllers/concerns/idv_step_concern.rb b/app/controllers/concerns/idv_step_concern.rb index ed417070ca7..36aef0fbe0b 100644 --- a/app/controllers/concerns/idv_step_concern.rb +++ b/app/controllers/concerns/idv_step_concern.rb @@ -78,18 +78,11 @@ def confirm_hybrid_handoff_needed private def extra_analytics_properties - extra = { + { pii_like_keypaths: [ - [:same_address_as_id], [:proofing_results, :context, :stages, :state_id, :state_id_jurisdiction], ], } - - unless flow_session.dig(:pii_from_user, :same_address_as_id).nil? - extra[:same_address_as_id] = - flow_session[:pii_from_user][:same_address_as_id].to_s == 'true' - end - extra end def letter_recently_enqueued? diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb index c0f90702f37..913d48cbac3 100644 --- a/app/services/analytics_events.rb +++ b/app/services/analytics_events.rb @@ -1481,7 +1481,6 @@ def idv_doc_auth_link_sent_visited( # @param [String] step Current IdV step # @param [String] analytics_id Current IdV flow identifier # @param ["hybrid","standard"] flow_path Document capture user flow - # @param [Boolean] same_address_as_id # @param [Boolean] skip_hybrid_handoff Whether skipped hybrid handoff A/B test is active # @param [Boolean] opted_in_to_in_person_proofing User opted into in person proofing # @param [Number] previous_ssn_edit_distance The edit distance to the previous submitted SSN @@ -1491,7 +1490,6 @@ def idv_doc_auth_redo_ssn_submitted( flow_path:, opted_in_to_in_person_proofing: nil, skip_hybrid_handoff: nil, - same_address_as_id: nil, previous_ssn_edit_distance: nil, **extra ) @@ -1502,7 +1500,6 @@ def idv_doc_auth_redo_ssn_submitted( flow_path:, opted_in_to_in_person_proofing:, skip_hybrid_handoff:, - same_address_as_id:, previous_ssn_edit_distance:, **extra, ) @@ -1542,7 +1539,6 @@ def idv_doc_auth_socure_webhook_received( # @param ["hybrid","standard"] flow_path Document capture user flow # @param [String] acuant_sdk_upgrade_ab_test_bucket A/B test bucket for Acuant document capture # @param [Boolean] skip_hybrid_handoff Whether skipped hybrid handoff A/B test is active - # @param [Boolean] same_address_as_id # @param [Boolean] opted_in_to_in_person_proofing User opted into in person proofing # @param [Number] previous_ssn_edit_distance The edit distance to the previous submitted SSN def idv_doc_auth_ssn_submitted( @@ -1555,7 +1551,6 @@ def idv_doc_auth_ssn_submitted( error_details: nil, acuant_sdk_upgrade_ab_test_bucket: nil, skip_hybrid_handoff: nil, - same_address_as_id: nil, previous_ssn_edit_distance: nil, **extra ) @@ -1570,7 +1565,6 @@ def idv_doc_auth_ssn_submitted( acuant_sdk_upgrade_ab_test_bucket:, flow_path:, opted_in_to_in_person_proofing:, - same_address_as_id:, previous_ssn_edit_distance:, **extra, ) @@ -1583,7 +1577,6 @@ def idv_doc_auth_ssn_submitted( # @param ["hybrid","standard"] flow_path Document capture user flow # @param [String] acuant_sdk_upgrade_ab_test_bucket A/B test bucket for Acuant document capture # @param [Boolean] skip_hybrid_handoff Whether skipped hybrid handoff A/B test is active - # @param [Boolean] same_address_as_id # @param [Boolean] opted_in_to_in_person_proofing User opted into in person proofing # @param [Number] previous_ssn_edit_distance The edit distance to the previous submitted SSN def idv_doc_auth_ssn_visited( @@ -1593,7 +1586,6 @@ def idv_doc_auth_ssn_visited( opted_in_to_in_person_proofing: nil, acuant_sdk_upgrade_ab_test_bucket: nil, skip_hybrid_handoff: nil, - same_address_as_id: nil, previous_ssn_edit_distance: nil, **extra ) @@ -1605,7 +1597,6 @@ def idv_doc_auth_ssn_visited( acuant_sdk_upgrade_ab_test_bucket:, flow_path:, opted_in_to_in_person_proofing:, - same_address_as_id:, previous_ssn_edit_distance:, **extra, ) @@ -1892,7 +1883,6 @@ def idv_doc_auth_verify_polling_wait_visited(**extra) # @param flow_path [String] "hybrid" for hybrid handoff, "standard" otherwise # @param lexisnexis_instant_verify_workflow_ab_test_bucket [String] A/B test bucket for Lexis Nexis InstantVerify workflow testing # @param opted_in_to_in_person_proofing [Boolean] Whether this user explicitly opted into in-person proofing - # @param [Boolean] same_address_as_id # @param proofing_results [Hash] # @option proofing_results [String,nil] exception If an exception occurred during any phase of proofing its message is provided here # @option proofing_results [Boolean] timed_out true if any vendor API calls timed out during proofing @@ -1964,7 +1954,6 @@ def idv_doc_auth_verify_proofing_results( ssn_is_unique: nil, step: nil, success: nil, - same_address_as_id: nil, previous_ssn_edit_distance: nil, **extra ) @@ -1984,7 +1973,6 @@ def idv_doc_auth_verify_proofing_results( ssn_is_unique:, step:, success:, - same_address_as_id:, previous_ssn_edit_distance:, **extra, ) @@ -1998,7 +1986,6 @@ def idv_doc_auth_verify_proofing_results( # @param ["hybrid","standard"] flow_path Document capture user flow # @param [String] acuant_sdk_upgrade_ab_test_bucket A/B test bucket for Acuant document capture # @param [Boolean] skip_hybrid_handoff Whether skipped hybrid handoff A/B test is active - # @param [Boolean] same_address_as_id # @param [Boolean] opted_in_to_in_person_proofing User opted into in person proofing def idv_doc_auth_verify_submitted( step:, @@ -2007,7 +1994,6 @@ def idv_doc_auth_verify_submitted( opted_in_to_in_person_proofing: nil, acuant_sdk_upgrade_ab_test_bucket: nil, skip_hybrid_handoff: nil, - same_address_as_id: nil, **extra ) track_event( @@ -2018,7 +2004,6 @@ def idv_doc_auth_verify_submitted( acuant_sdk_upgrade_ab_test_bucket:, flow_path:, opted_in_to_in_person_proofing:, - same_address_as_id:, **extra, ) end @@ -2030,7 +2015,6 @@ def idv_doc_auth_verify_submitted( # @param ["hybrid","standard"] flow_path Document capture user flow # @param [String] acuant_sdk_upgrade_ab_test_bucket A/B test bucket for Acuant document capture # @param [Boolean] skip_hybrid_handoff Whether skipped hybrid handoff A/B test is active - # @param [Boolean] same_address_as_id # @param [Boolean] opted_in_to_in_person_proofing User opted into in person proofing def idv_doc_auth_verify_visited( step:, @@ -2039,7 +2023,6 @@ def idv_doc_auth_verify_visited( opted_in_to_in_person_proofing: nil, acuant_sdk_upgrade_ab_test_bucket: nil, skip_hybrid_handoff: nil, - same_address_as_id: nil, **extra ) track_event( @@ -2050,7 +2033,6 @@ def idv_doc_auth_verify_visited( acuant_sdk_upgrade_ab_test_bucket:, flow_path:, opted_in_to_in_person_proofing:, - same_address_as_id:, **extra, ) end @@ -2761,7 +2743,6 @@ def idv_in_person_prepare_visited(flow_path:, opted_in_to_in_person_proofing:, * # @param [String] step # @param [String] analytics_id # @param [Boolean] skip_hybrid_handoff Whether skipped hybrid handoff A/B test is active - # @param [Boolean] same_address_as_id # @param [Boolean] opted_in_to_in_person_proofing User opted into in person proofing # address page visited def idv_in_person_proofing_address_visited( @@ -2770,7 +2751,6 @@ def idv_in_person_proofing_address_visited( analytics_id:, opted_in_to_in_person_proofing: nil, skip_hybrid_handoff: nil, - same_address_as_id: nil, **extra ) track_event( @@ -2780,7 +2760,6 @@ def idv_in_person_proofing_address_visited( analytics_id:, opted_in_to_in_person_proofing:, skip_hybrid_handoff:, - same_address_as_id:, **extra, ) end @@ -2861,7 +2840,6 @@ def idv_in_person_proofing_nontransliterable_characters_submitted( # @param [String] step Current IdV step # @param [String] analytics_id Current IdV flow identifier # @param [Boolean] skip_hybrid_handoff Whether skipped hybrid handoff A/B test is active - # @param [Boolean, nil] same_address_as_id # @param [String] current_address_zip_code ZIP code of given address # @param [Boolean] opted_in_to_in_person_proofing User opted into in person proofing def idv_in_person_proofing_residential_address_submitted( @@ -2874,7 +2852,6 @@ def idv_in_person_proofing_residential_address_submitted( opted_in_to_in_person_proofing: nil, error_details: nil, skip_hybrid_handoff: nil, - same_address_as_id: nil, **extra ) track_event( @@ -2888,7 +2865,6 @@ def idv_in_person_proofing_residential_address_submitted( opted_in_to_in_person_proofing:, error_details:, skip_hybrid_handoff:, - same_address_as_id:, **extra, ) end @@ -2899,7 +2875,6 @@ def idv_in_person_proofing_residential_address_submitted( # @param [Boolean] success Whether form validation was successful # @param [Hash] errors Errors resulting from form validation # @param [Hash] error_details Details for errors that occurred in unsuccessful submission - # @param [Boolean, nil] same_address_as_id # @param [Boolean] opted_in_to_in_person_proofing User opted into in person proofing # @param [String] birth_year Birth year from document # @param [String] document_zip_code ZIP code from document @@ -2915,7 +2890,6 @@ def idv_in_person_proofing_state_id_submitted( document_zip_code:, skip_hybrid_handoff: nil, error_details: nil, - same_address_as_id: nil, opted_in_to_in_person_proofing: nil, **extra ) @@ -2930,7 +2904,6 @@ def idv_in_person_proofing_state_id_submitted( birth_year:, document_zip_code:, skip_hybrid_handoff:, - same_address_as_id:, opted_in_to_in_person_proofing:, **extra, ) @@ -2940,7 +2913,6 @@ def idv_in_person_proofing_state_id_submitted( # @param [String] step # @param [String] analytics_id # @param [Boolean] opted_in_to_in_person_proofing User opted into in person proofing - # @param [Boolean] same_address_as_id # @param [Boolean] skip_hybrid_handoff Whether skipped hybrid handoff A/B test is active # State id page visited def idv_in_person_proofing_state_id_visited( @@ -2949,7 +2921,6 @@ def idv_in_person_proofing_state_id_visited( analytics_id: nil, opted_in_to_in_person_proofing: nil, skip_hybrid_handoff: nil, - same_address_as_id: nil, **extra ) track_event( @@ -2959,7 +2930,6 @@ def idv_in_person_proofing_state_id_visited( analytics_id:, opted_in_to_in_person_proofing:, skip_hybrid_handoff:, - same_address_as_id:, **extra, ) end diff --git a/app/services/idv/flows/in_person_flow.rb b/app/services/idv/flows/in_person_flow.rb index 1c393f4465f..3343481770d 100644 --- a/app/services/idv/flows/in_person_flow.rb +++ b/app/services/idv/flows/in_person_flow.rb @@ -36,17 +36,11 @@ def self.session_idv(session) end def extra_analytics_properties - extra = { + { pii_like_keypaths: [ - [:same_address_as_id], [:proofing_results, :context, :stages, :state_id, :state_id_jurisdiction], ], } - unless @flow_session[:pii_from_user]&.[](:same_address_as_id).nil? - extra[:same_address_as_id] = - @flow_session[:pii_from_user][:same_address_as_id].to_s == 'true' - end - extra end end end diff --git a/spec/controllers/idv/in_person/address_controller_spec.rb b/spec/controllers/idv/in_person/address_controller_spec.rb index 1701eb459d9..5341ce95ec6 100644 --- a/spec/controllers/idv/in_person/address_controller_spec.rb +++ b/spec/controllers/idv/in_person/address_controller_spec.rb @@ -59,7 +59,6 @@ analytics_id: 'In Person Proofing', flow_path: 'standard', step: 'address', - same_address_as_id: false, } end @@ -124,7 +123,6 @@ analytics_id: 'In Person Proofing', flow_path: 'standard', step: 'address', - same_address_as_id: false, current_address_zip_code: '59010', } end @@ -206,7 +204,6 @@ analytics_id: 'In Person Proofing', flow_path: 'standard', step: 'address', - same_address_as_id: false, current_address_zip_code: '59010', } end diff --git a/spec/controllers/idv/in_person/ssn_controller_spec.rb b/spec/controllers/idv/in_person/ssn_controller_spec.rb index 45eba00e5e2..4e363c1972c 100644 --- a/spec/controllers/idv/in_person/ssn_controller_spec.rb +++ b/spec/controllers/idv/in_person/ssn_controller_spec.rb @@ -42,7 +42,6 @@ analytics_id: 'In Person Proofing', flow_path: 'standard', step: 'ssn', - same_address_as_id: true, } end @@ -112,7 +111,6 @@ step: 'ssn', success: true, errors: {}, - same_address_as_id: true, } end @@ -150,7 +148,6 @@ step: 'ssn', success: true, previous_ssn_edit_distance: 6, - same_address_as_id: true, errors: {}, } end @@ -178,7 +175,6 @@ ssn: ['Enter a nine-digit Social Security number'], }, error_details: { ssn: { invalid: true } }, - same_address_as_id: true, } end diff --git a/spec/controllers/idv/in_person/state_id_controller_spec.rb b/spec/controllers/idv/in_person/state_id_controller_spec.rb index 5fa3770ebcb..731f64212f9 100644 --- a/spec/controllers/idv/in_person/state_id_controller_spec.rb +++ b/spec/controllers/idv/in_person/state_id_controller_spec.rb @@ -146,7 +146,6 @@ analytics_id: 'In Person Proofing', flow_path: 'standard', step: 'state_id', - same_address_as_id: true, birth_year: dob[:year], document_zip_code: identity_doc_zipcode&.slice(0, 5), } diff --git a/spec/controllers/idv/in_person/verify_info_controller_spec.rb b/spec/controllers/idv/in_person/verify_info_controller_spec.rb index c422007bce7..4a6dbda956b 100644 --- a/spec/controllers/idv/in_person/verify_info_controller_spec.rb +++ b/spec/controllers/idv/in_person/verify_info_controller_spec.rb @@ -73,7 +73,6 @@ analytics_id: 'In Person Proofing', flow_path: 'standard', step: 'verify', - same_address_as_id: true, }, ) end @@ -136,7 +135,6 @@ analytics_id: 'In Person Proofing', flow_path: 'standard', step: 'verify', - same_address_as_id: true, }, ), ) From ba7cb26e28bfad5522d3c6f83ea8f0a3442db4ec Mon Sep 17 00:00:00 2001 From: Eileen McFarland <80347702+eileen-nava@users.noreply.github.com> Date: Thu, 24 Oct 2024 16:43:51 -0400 Subject: [PATCH 2/5] remove same_address_as_id from extra_analytics created in verify_info_concern --- app/controllers/concerns/idv/verify_info_concern.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/concerns/idv/verify_info_concern.rb b/app/controllers/concerns/idv/verify_info_concern.rb index ed4f715bed9..aec7bd53525 100644 --- a/app/controllers/concerns/idv/verify_info_concern.rb +++ b/app/controllers/concerns/idv/verify_info_concern.rb @@ -287,6 +287,7 @@ def idv_result_to_form_response( end end + result[:biographical_info]&.delete(:same_address_as_id) FormResponse.new( success: result[:success], errors: result[:errors], From b2a45f38f1f342649544d77a43df759c1bd3f9b2 Mon Sep 17 00:00:00 2001 From: Eileen McFarland <80347702+eileen-nava@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:10:22 -0400 Subject: [PATCH 3/5] update analytics feature specs to match new expectations --- spec/features/idv/analytics_spec.rb | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/spec/features/idv/analytics_spec.rb b/spec/features/idv/analytics_spec.rb index bc72841df9b..7505f8b7717 100644 --- a/spec/features/idv/analytics_spec.rb +++ b/spec/features/idv/analytics_spec.rb @@ -117,7 +117,6 @@ }, biographical_info: { identity_doc_address_state: nil, - same_address_as_id: nil, state: 'MT', state_id_jurisdiction: 'ND', state_id_number: '#############', @@ -160,7 +159,6 @@ }, biographical_info: { identity_doc_address_state: 'ND', - same_address_as_id: 'false', state: 'MT', state_id_jurisdiction: 'ND', state_id_number: '#############', @@ -561,25 +559,25 @@ step: 'state_id', flow_path: 'standard', analytics_id: 'In Person Proofing' }, 'IdV: in person proofing state_id submitted' => { - success: true, flow_path: 'standard', step: 'state_id', analytics_id: 'In Person Proofing', errors: {}, same_address_as_id: false, birth_year: '1938', document_zip_code: '12345' + success: true, flow_path: 'standard', step: 'state_id', analytics_id: 'In Person Proofing', errors: {}, birth_year: '1938', document_zip_code: '12345' }, 'IdV: in person proofing address visited' => { - step: 'address', flow_path: 'standard', analytics_id: 'In Person Proofing', same_address_as_id: false + step: 'address', flow_path: 'standard', analytics_id: 'In Person Proofing' }, 'IdV: in person proofing residential address submitted' => { - success: true, step: 'address', flow_path: 'standard', analytics_id: 'In Person Proofing', errors: {}, same_address_as_id: false, current_address_zip_code: '59010' + success: true, step: 'address', flow_path: 'standard', analytics_id: 'In Person Proofing', errors: {}, current_address_zip_code: '59010' }, 'IdV: doc auth ssn visited' => { - analytics_id: 'In Person Proofing', step: 'ssn', flow_path: 'standard', same_address_as_id: false + analytics_id: 'In Person Proofing', step: 'ssn', flow_path: 'standard' }, 'IdV: doc auth ssn submitted' => { - analytics_id: 'In Person Proofing', success: true, step: 'ssn', flow_path: 'standard', errors: {}, same_address_as_id: false + analytics_id: 'In Person Proofing', success: true, step: 'ssn', flow_path: 'standard', errors: {} }, 'IdV: doc auth verify visited' => { - analytics_id: 'In Person Proofing', step: 'verify', flow_path: 'standard', same_address_as_id: false + analytics_id: 'In Person Proofing', step: 'verify', flow_path: 'standard' }, 'IdV: doc auth verify submitted' => { - analytics_id: 'In Person Proofing', step: 'verify', flow_path: 'standard', same_address_as_id: false + analytics_id: 'In Person Proofing', step: 'verify', flow_path: 'standard' }, idv_threatmetrix_response_body: ( if threatmetrix_response_body.present? @@ -587,7 +585,7 @@ end ), 'IdV: doc auth verify proofing results' => { - success: true, errors: {}, flow_path: 'standard', address_edited: false, address_line2_present: false, analytics_id: 'In Person Proofing', step: 'verify', same_address_as_id: false, + success: true, errors: {}, flow_path: 'standard', address_edited: false, address_line2_present: false, analytics_id: 'In Person Proofing', step: 'verify', proofing_results: in_person_path_proofing_results }, 'IdV: phone confirmation form' => { From e5dd6e61f97d56b8f5896944cb69da82245c15af Mon Sep 17 00:00:00 2001 From: Eileen McFarland <80347702+eileen-nava@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:13:24 -0400 Subject: [PATCH 4/5] Changelog: Internal, In-person Proofing, remove same_address_as_id from analytics From 20958feaaa04088efa62646cd5b043f3f911c3fb Mon Sep 17 00:00:00 2001 From: Eileen McFarland <80347702+eileen-nava@users.noreply.github.com> Date: Fri, 25 Oct 2024 13:12:14 -0400 Subject: [PATCH 5/5] modify idv_result_to_form_response to avoid mutating result --- app/controllers/concerns/idv/verify_info_concern.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/controllers/concerns/idv/verify_info_concern.rb b/app/controllers/concerns/idv/verify_info_concern.rb index aec7bd53525..efceb72bc06 100644 --- a/app/controllers/concerns/idv/verify_info_concern.rb +++ b/app/controllers/concerns/idv/verify_info_concern.rb @@ -287,11 +287,15 @@ def idv_result_to_form_response( end end - result[:biographical_info]&.delete(:same_address_as_id) FormResponse.new( success: result[:success], errors: result[:errors], - extra: extra.merge(proofing_results: result.except(:errors, :success)), + extra: extra.merge( + proofing_results: { + **result.except(:errors, :success), + biographical_info: result[:biographical_info]&.except(:same_address_as_id), + }, + ), ) end