diff --git a/app/controllers/v0/dependents_applications_controller.rb b/app/controllers/v0/dependents_applications_controller.rb index 9361eb910410..dd3a498fa023 100644 --- a/app/controllers/v0/dependents_applications_controller.rb +++ b/app/controllers/v0/dependents_applications_controller.rb @@ -46,7 +46,6 @@ def create # rubocop:disable Metrics/MethodLength if claim_info[:proc_state] == 'MANUAL_VAGOV' && claim_info[:participant_id].present? user_data = DependentsBenefits::UserData.new(current_user, claim.parsed_form) claim.add_veteran_info(JSON.parse(user_data.get_user_json)) - claim.add_signature_date submission = submit_via_forms_api(claim, claim_info[:claim_label], claim_info[:participant_id]) @@ -88,8 +87,7 @@ def create # rubocop:disable Metrics/MethodLength def submit_via_forms_api(claim, claim_label, participant_id) digital_forms_api_submission_service ||= DigitalFormsApi::Service::Submissions.new - payload = claim.parsed_form.deep_dup - payload = claim.deep_camelize_keys(payload.merge(payload.delete('dependents_application'))) + payload = claim.fdf_submission_payload metadata = { sourceRequestId: claim.guid, formId: claim.claim_form_type, diff --git a/modules/dependents_benefits/app/controllers/dependents_benefits/v0/claims_controller.rb b/modules/dependents_benefits/app/controllers/dependents_benefits/v0/claims_controller.rb index 7acdab1d3fc9..c1c83b69673a 100644 --- a/modules/dependents_benefits/app/controllers/dependents_benefits/v0/claims_controller.rb +++ b/modules/dependents_benefits/app/controllers/dependents_benefits/v0/claims_controller.rb @@ -71,7 +71,6 @@ def create # rubocop:disable Metrics/MethodLength claim_info = claim.get_claim_information(current_user) if claim_info[:proc_state] == 'MANUAL_VAGOV' && claim_info[:participant_id].present? claim.add_veteran_info(JSON.parse(user_data.get_user_json)) - claim.add_signature_date submission = submit_via_forms_api(claim, claim_info[:claim_label], claim_info[:participant_id]) @@ -114,8 +113,7 @@ def create # rubocop:disable Metrics/MethodLength def submit_via_forms_api(claim, claim_label, participant_id) digital_forms_api_submission_service ||= DigitalFormsApi::Service::Submissions.new - payload = claim.parsed_form.deep_dup - payload = claim.deep_camelize_keys(payload.merge(payload.delete('dependents_application'))) + payload = claim.fdf_submission_payload metadata = { sourceRequestId: claim.guid, formId: claim.claim_form_type, diff --git a/modules/dependents_benefits/lib/dependents_benefits/claim_behavior.rb b/modules/dependents_benefits/lib/dependents_benefits/claim_behavior.rb index 46f86b4a5e6b..0b90bddb5072 100644 --- a/modules/dependents_benefits/lib/dependents_benefits/claim_behavior.rb +++ b/modules/dependents_benefits/lib/dependents_benefits/claim_behavior.rb @@ -40,6 +40,17 @@ def parent_claim_id child_of_groups&.last&.parent_claim_id end + # Format the claim data for submission to fdf + # TODO: refactor so this is no longer needed after FDF pilot; future + def fdf_submission_payload + add_signature_date + payload = parsed_form.deep_dup + dependents_app = payload.delete('dependents_application') || {} + + payload = payload.deep_merge(dependents_app) # combine nested hashes + deep_camelize_keys(payload) # convert snake_case to camelCase + end + private # Returns a memoized instance of the DependentsBenefits monitor diff --git a/modules/dependents_benefits/spec/factories/dependents_benefits/dependents_claim.rb b/modules/dependents_benefits/spec/factories/dependents_benefits/dependents_claim.rb index 814b6be17d63..74a36bd3f3c0 100644 --- a/modules/dependents_benefits/spec/factories/dependents_benefits/dependents_claim.rb +++ b/modules/dependents_benefits/spec/factories/dependents_benefits/dependents_claim.rb @@ -21,6 +21,16 @@ 'report674' => true }, 'dependents_application' => { + 'veteran_information' => { + 'birth_date' => '1980-01-01', + 'full_name' => { + 'first' => 'Mark', + 'last' => 'Webb' + }, + 'ssn' => '000000000', + 'ssn_last_four' => '5309', + 'va_file_last_four' => '5309' + }, 'veteran_contact_information' => { 'phone_number' => '1112223333', 'international_phone_number' => '1234567890123', @@ -158,6 +168,16 @@ report_child18_or_older_is_not_attending_school: true }, dependents_application: { + veteran_information: { + birth_date: '1980-01-01', + full_name: { + first: 'Mark', + last: 'Webb' + }, + ssn: '000000000', + ssn_last_four: '5309', + va_file_last_four: '5309' + }, household_income: true, 'view:completed_child_stopped_attending_school': false, 'view:completed_married_child': false, diff --git a/modules/dependents_benefits/spec/lib/dependents_benefits/claim_behavior_spec.rb b/modules/dependents_benefits/spec/lib/dependents_benefits/claim_behavior_spec.rb index bb71300bd54c..bd4c8a09267d 100644 --- a/modules/dependents_benefits/spec/lib/dependents_benefits/claim_behavior_spec.rb +++ b/modules/dependents_benefits/spec/lib/dependents_benefits/claim_behavior_spec.rb @@ -163,6 +163,35 @@ end end + describe '#fdf_submission_payload' do + it 'returns expected format for FDF' do + claim.update(created_at: Time.new(2026, 3, 1).utc) + + full_name = { 'first' => 'Roy', 'middle' => 'G', 'last' => 'Biv' } + veteran_information = { 'veteran_information' => { + 'full_name' => full_name, + 'common_name' => 'Roy', + 'va_profile_email' => 'va@gov', + 'email' => 'foo@bar.com', + 'participant_id' => 'TEST', + 'ssn' => '123456789', + 'va_file_number' => 'FOOBAR', + 'birth_date' => '1776-07-04', + 'uuid' => SecureRandom.uuid, + 'icn' => 'SOMETHING' + } }.to_json + claim.add_veteran_info(JSON.parse(veteran_information)) + + payload = claim.fdf_submission_payload + + expect(payload).not_to include('dependents_application') + expect(payload).not_to include('dependentsApplication') + expect(payload).to include('signatureDate') + expect(payload.dig('veteranInformation', 'vaFileNumber')).to eq('FOOBAR') + expect(payload.dig('veteranInformation', 'fullName', 'last')).to eq('Webb') # retain what was submitted + end + end + describe 'validation behavior' do context 'when the form matches the schema' do let(:valid_combined_form) { build(:dependents_claim_combined_form) }