Skip to content

Commit

Permalink
Submit VA Form 21-0538 to Central Mail (#7049)
Browse files Browse the repository at this point in the history
* send 21-0538 to central mail

* updating json schema changes

* updating pdf

* updating specs

* updating pdf

* updating specs

* linting

* updating specs

* testing

* updating pdf specs

* updating specs

* updating specs

* testing

* adding fields needed for central mail

* updating specs

* updating specs

* linting

* linting

* kicking github

* adding spec

* updating specs
  • Loading branch information
kathleencrawford authored Jun 14, 2021
1 parent 90311b7 commit e9d168d
Show file tree
Hide file tree
Showing 12 changed files with 273 additions and 183 deletions.
22 changes: 20 additions & 2 deletions app/controllers/v0/dependents_verifications_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,33 @@ def index
end

def create
dependency_verification_service.update_diaries if params[:update_diaries] == 'true'
return if filtered_params[:form][:update_diaries] == 'false'

head :ok
claim = SavedClaim::DependencyVerificationClaim.new(form: filtered_params[:form].to_json)
claim.add_claimant_info(current_user) if current_user&.loa3?

unless claim.save
StatsD.increment('api.dependency_verification_claim.failure')
Raven.tags_context(team: 'vfs-ebenefits') # tag sentry logs with team name
raise Common::Exceptions::ValidationErrors, claim
end

claim.send_to_central_mail! if current_user&.loa3?

Rails.logger.info "ClaimID=#{claim.confirmation_number} Form=#{claim.class::FORM}"
clear_saved_form(claim.form_id)

render(json: claim)
end

private

def dependency_verification_service
@dependent_service ||= BGS::DependencyVerificationService.new(current_user)
end

def filtered_params
params.require(:dependency_verification_claim)
end
end
end
47 changes: 47 additions & 0 deletions app/models/saved_claim/dependency_verification_claim.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# frozen_string_literal: true

class SavedClaim::DependencyVerificationClaim < CentralMailClaim
include SentryLogging
FORM = '21-0538'

def regional_office
[]
end

def send_to_central_mail!
form_copy = parsed_form

form_copy['veteranSocialSecurityNumber'] = parsed_form.dig('dependencyVerification', 'veteranInformation', 'ssn')
form_copy['veteranFullName'] = parsed_form.dig('dependencyVerification', 'veteranInformation', 'fullName')
form_copy['veteranAddress'] = ''

update(form: form_copy.to_json)

log_message_to_sentry(guid, :warn, { attachment_id: guid }, { team: 'vfs-ebenefits' })
process_attachments!
end

def add_claimant_info(user)
updated_form = parsed_form

updated_form.merge!(
{
'dependencyVerification' => {
'updateDiaries' => true,
'veteranInformation' => {
'fullName' => {
'first' => user.first_name,
'middleInitial' => user.middle_name,
'last' => user.last_name
},
'ssn' => user.ssn,
'dateOfBirth' => user.birth_date,
'email' => user.email
}
}
}
).except!('update_diaries')

update(form: updated_form.to_json)
end
end
23 changes: 0 additions & 23 deletions app/services/bgs/dependency_verification_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,31 +19,8 @@ def read_diaries
report_error(e)
end

def update_diaries
diaries = read_diaries[:diaries]
updated_diaries = updated_diaries(diaries)

option_hash = {
award_type: 'CPL',
beneficiary_id: @user.participant_id,
participant_id: @user.participant_id
}

@service.diaries.update_diaries(option_hash, updated_diaries)
end

private

def updated_diaries(diaries)
diaries.map do |diary|
if diary[:diary_reason_type] == '24' && diary[:diary_lc_status_type] == 'PEND'
diary.merge!(diary_due_date: (Time.current + 1.year).iso8601)
end

diary
end
end

def empty_response(diaries)
{
dependency_decs: [diaries.dig(:dependency_decs, :dependency_dec)],
Expand Down
192 changes: 97 additions & 95 deletions lib/pdf_fill/forms/va210538.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,101 +8,103 @@ class Va210538 < FormBase
ITERATOR = PdfFill::HashConverter::ITERATOR

KEY = {
'veteranInformation' => {
'fullName' => {
'first' => {
key: 'Veterans_First_Name[0]',
limit: 12,
question_num: 1,
question_suffix: 'A',
question_text: 'VETERAN\'S NAME'
},
'middleInitial' => {
key: 'form1[0].#subform[0].Middle_Initial1[0]',
limit: 1,
question_num: 1,
question_suffix: 'B',
question_text: 'VETERAN\'S NAME'
'dependencyVerification' => {
'veteranInformation' => {
'fullName' => {
'first' => {
key: 'Veterans_First_Name[0]',
limit: 12,
question_num: 1,
question_suffix: 'A',
question_text: 'VETERAN\'S NAME'
},
'middleInitial' => {
key: 'form1[0].#subform[0].Middle_Initial1[0]',
limit: 1,
question_num: 1,
question_suffix: 'B',
question_text: 'VETERAN\'S NAME'
},
'last' => {
key: 'form1[0].#subform[0].Last_Name[0]',
limit: 18,
question_num: 1,
question_suffix: 'C',
question_text: 'VETERAN\'S NAME'
}
}, # end fullName
'ssn' => {
'first' => {
key: 'form1[0].#subform[0].Social_Security_Number_FirstThreeNumbers[0]',
limit: 3,
question_num: 2,
question_suffix: 'A',
question_text: 'SOCIAL SECURITY NUMBER'
},
'second' => {
key: 'form1[0].#subform[0].Social_Security_Number_SecondTwoNumbers[0]',
limit: 2,
question_num: 2,
question_suffix: 'B',
question_text: 'SOCIAL SECURITY NUMBER'
},
'third' => {
key: 'form1[0].#subform[0].Social_Security_Number_LastFourNumbers[0]',
limit: 4,
question_num: 2,
question_suffix: 'C',
question_text: 'SOCIAL SECURITY NUMBER'
}
},
'last' => {
key: 'form1[0].#subform[0].Last_Name[0]',
limit: 18,
question_num: 1,
question_suffix: 'C',
question_text: 'VETERAN\'S NAME'
}
}, # end fullName
'ssn' => {
'first' => {
key: 'form1[0].#subform[0].Social_Security_Number_FirstThreeNumbers[0]',
limit: 3,
question_num: 2,
'VAFileNumber' => {
key: 'form1[0].#subform[0].VA_File_Number[0]',
limit: 9,
question_num: 3,
question_suffix: 'A',
question_text: 'SOCIAL SECURITY NUMBER'
question_text: 'VA FILE NUMBER'
},
'second' => {
key: 'form1[0].#subform[0].Social_Security_Number_SecondTwoNumbers[0]',
limit: 2,
question_num: 2,
question_suffix: 'B',
question_text: 'SOCIAL SECURITY NUMBER'
},
'third' => {
key: 'form1[0].#subform[0].Social_Security_Number_LastFourNumbers[0]',
limit: 4,
question_num: 2,
question_suffix: 'C',
question_text: 'SOCIAL SECURITY NUMBER'
'dateOfBirth' => {
'month' => {
key: 'form1[0].#subform[0].DOB_Month[0]',
limit: 2,
question_num: 4,
question_suffix: 'A',
question_text: 'DATE OF BIRTH'
},
'day' => {
key: 'form1[0].#subform[0].DOB_Day[0]',
limit: 2,
question_num: 4,
question_suffix: 'B',
question_text: 'DATE OF BIRTH'
},
'year' => {
key: 'form1[0].#subform[0].DOB_Year[0]',
limit: 4,
question_num: 4,
question_suffix: 'C',
question_text: 'DATE OF BIRTH'
}
}
}, # end veteran_information
'email1' => {
key: 'form1[0].#subform[0].E-Mail_Address[0]',
limit: 18,
question_num: 7,
question_suffix: 'A',
question_text: 'E-MAIL ADDRESS OF CLAIMANT'
},
'VAFileNumber' => {
key: 'form1[0].#subform[0].VA_File_Number[0]',
limit: 9,
question_num: 3,
'email2' => {
key: 'form1[0].#subform[0].E-Mail_Address[1]',
limit: 18,
question_num: 7,
question_suffix: 'A',
question_text: 'VA FILE NUMBER'
question_text: 'E-MAIL ADDRESS OF CLAIMANT'
},
'dateOfBirth' => {
'month' => {
key: 'form1[0].#subform[0].DOB_Month[0]',
limit: 2,
question_num: 4,
question_suffix: 'A',
question_text: 'DATE OF BIRTH'
},
'day' => {
key: 'form1[0].#subform[0].DOB_Day[0]',
limit: 2,
question_num: 4,
question_suffix: 'B',
question_text: 'DATE OF BIRTH'
},
'year' => {
key: 'form1[0].#subform[0].DOB_Year[0]',
limit: 4,
question_num: 4,
question_suffix: 'C',
question_text: 'DATE OF BIRTH'
}
'updateDiaries' => {
'update_diaries_yes' => { key: 'form1[0].#subform[0].YES_CHECKBOX1[0]' },
'update_diaries_no' => { key: 'form1[0].#subform[0].NO_CHECKBOX1[0]' }
}
}, # end veteran_information
'email1' => {
key: 'form1[0].#subform[0].E-Mail_Address[0]',
limit: 18,
question_num: 7,
question_suffix: 'A',
question_text: 'E-MAIL ADDRESS OF CLAIMANT'
},
'email2' => {
key: 'form1[0].#subform[0].E-Mail_Address[1]',
limit: 18,
question_num: 7,
question_suffix: 'A',
question_text: 'E-MAIL ADDRESS OF CLAIMANT'
},
'updateDiaries' => {
'update_diaries_yes' => { key: 'form1[0].#subform[0].YES_CHECKBOX1[0]' },
'update_diaries_no' => { key: 'form1[0].#subform[0].NO_CHECKBOX1[0]' }
},
'signature' => {
key: 'signature'
Expand All @@ -123,14 +125,14 @@ class Va210538 < FormBase
def merge_fields(_options = {})
merge_veteran_helpers

expand_signature(@form_data['veteranInformation']['fullName'])
expand_signature(@form_data['dependencyVerification']['veteranInformation']['fullName'])
@form_data['dateSigned'] = split_date(@form_data['signatureDate'])

@form_data
end

def merge_veteran_helpers
veteran_information = @form_data['veteranInformation']
veteran_information = @form_data['dependencyVerification']['veteranInformation']
# extract middle initial
veteran_information['fullName'] = extract_middle_i(veteran_information, 'fullName')

Expand All @@ -144,22 +146,22 @@ def merge_veteran_helpers
# extract email address
extract_email

update_diaries = @form_data['updateDiaries']
@form_data['updateDiaries'] = {
update_diaries = @form_data['dependencyVerification']['updateDiaries']
@form_data['dependencyVerification']['updateDiaries'] = {
'update_diaries_yes' => select_checkbox(update_diaries),
'update_diaries_no' => select_checkbox(!update_diaries)
}
end

def extract_email
email_address = @form_data['emailAddress']
email_address = @form_data['dependencyVerification']['veteranInformation']['email']
return if email_address.blank?

if email_address.length > 17 && email_address.length < 37
@form_data['email1'] = email_address[0..17]
@form_data['email2'] = email_address[18..]
@form_data['dependencyVerification']['email1'] = email_address[0..17]
@form_data['dependencyVerification']['email2'] = email_address[18..]
else
@form_data['email1'] = email_address
@form_data['dependencyVerification']['email1'] = email_address
end
end
end
Expand Down
17 changes: 12 additions & 5 deletions spec/controllers/v0/dependents_verifications_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,20 @@
end

describe 'POST create' do
it 'fires the #update_diaries call' do
depenency_verification_service = double('dep_verification')
context 'logged in loa3 user' do
it 'validates successfully' do
form_params = { dependency_verification_claim: { form: { update_diaries: true } } }

expect(depenency_verification_service).to receive(:update_diaries)
expect(BGS::DependencyVerificationService).to receive(:new) { depenency_verification_service }
post(:create, params: form_params)
expect(response.code).to eq('200')
end
end

post(:create, params: { update_diaries: true })
context 'with update set to false' do
it 'returns no content' do
post(:create, params: { dependency_verification_claim: { form: { update_diaries: false } } })
expect(response.code).to eq('204')
end
end
end
end
Loading

0 comments on commit e9d168d

Please sign in to comment.