Skip to content

Commit

Permalink
PBP 95481 ZSF VA Email Notification (#19022)
Browse files Browse the repository at this point in the history
  • Loading branch information
wayne-weibel authored Nov 1, 2024
1 parent 1673a37 commit b97a189
Show file tree
Hide file tree
Showing 15 changed files with 475 additions and 90 deletions.
2 changes: 2 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -1007,6 +1007,7 @@ lib/vic @department-of-veterans-affairs/octo-identity
lib/virtual_regional_office @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group
lib/vre @department-of-veterans-affairs/benefits-non-disability @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group
lib/res @department-of-veterans-affairs/benefits-non-disability @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group
lib/va_notify @department-of-veterans-affairs/pension-and-burials @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group
lib/webhooks @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group
lib/zero_silent_failures @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group
modules/accredited_representatives @department-of-veterans-affairs/accredited-representation-management
Expand Down Expand Up @@ -1503,6 +1504,7 @@ spec/lib/string_helpers_spec.rb @department-of-veterans-affairs/va-api-engineers
spec/lib/tasks/support/schema_camelizer_spec.rb @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group
spec/lib/token_validation @department-of-veterans-affairs/lighthouse-dash @department-of-veterans-affairs/lighthouse-banana-peels @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group
spec/lib/user_profile_attribute_service_spec.rb @department-of-veterans-affairs/vfs-authenticated-experience-backend @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group
spec/lib/va_notify @department-of-veterans-affairs/pension-and-burials @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group
spec/lib/va_profile @department-of-veterans-affairs/vfs-authenticated-experience-backend @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group
spec/lib/vbs @department-of-veterans-affairs/vsa-debt-resolution @department-of-veterans-affairs/backend-review-group
spec/lib/vetext @department-of-veterans-affairs/mobile-api-team
Expand Down
30 changes: 30 additions & 0 deletions app/models/saved_claim.rb
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,36 @@ def business_line
''
end

def email
nil
end

##
# insert notifcation after VANotify email send
#
# @see ClaimVANotification
#
def insert_notification(email_template_id)
claim_va_notifications.create!(
form_type: form_id,
email_sent: true,
email_template_id: email_template_id
)
end

##
# Find notifcation by args*
#
# @param email_template_id
# @see ClaimVANotification
#
def va_notification?(email_template_id)
claim_va_notifications.find_by(
form_type: form_id,
email_template_id: email_template_id
)
end

private

def attachment_keys
Expand Down
38 changes: 15 additions & 23 deletions app/models/saved_claim/burial.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,35 +62,27 @@ def business_line
'NCA'
end

def send_confirmation_email
return if parsed_form['claimantEmail'].blank?

facility_name, street_address, city_state_zip = regional_office
first_name = parsed_form.dig('veteranFullName', 'first')
last_initial = "#{parsed_form.dig('veteranFullName', 'last')&.first}."

VANotify::EmailJob.perform_async(
parsed_form['claimantEmail'],
Settings.vanotify.services.va_gov.template_id.burial_claim_confirmation_email_template_id,
{
'form_name' => 'Burial Benefit Claim (Form 21P-530)',
'confirmation_number' => guid,
'deceased_veteran_first_name_last_initial' => "#{first_name} #{last_initial}",
'benefits_claimed' => benefits_claimed,
'facility_name' => facility_name,
'street_address' => street_address,
'city_state_zip' => city_state_zip,
'first_name' => parsed_form.dig('claimantFullName', 'first')&.upcase.presence,
'date_submitted' => Time.zone.today.strftime('%B %d, %Y')
}
)
##
# utility function to retrieve claimant first name from form
#
# @return [String] the claimant first name
#
def veteran_first_name
parsed_form.dig('veteranFullName', 'first')
end

def veteran_last_name
parsed_form.dig('veteranFullName', 'last')
end

def claimaint_first_name
parsed_form.dig('claimantFullName', 'first')
end

def benefits_claimed
claimed = []
claimed << 'Burial Allowance' if parsed_form['burialAllowance']
claimed << 'Plot Allowance' if parsed_form['plotAllowance']
claimed << 'Transportation' if parsed_form['transportation']
" - #{claimed.join(" \n - ")}"
end
end
3 changes: 3 additions & 0 deletions app/sidekiq/lighthouse/submit_benefits_intake_claim.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
require 'benefits_intake_service/service'
require 'simple_forms_api_submission/metadata_validator'
require 'pdf_info'
require 'va_notify/notification_email/burial'

module Lighthouse
class SubmitBenefitsIntakeClaim
Expand Down Expand Up @@ -184,6 +185,8 @@ def check_zipcode(address)

def send_confirmation_email
@claim.respond_to?(:send_confirmation_email) && @claim.send_confirmation_email

Burials::NotificationEmail.new(@claim).deliver(:confirmation) if %w[21P-530V2 21P-530].include?(@claim&.form_id)
rescue => e
Rails.logger.warn('Lighthouse::SubmitBenefitsIntakeClaim send_confirmation_email failed',
generate_log_details(e))
Expand Down
23 changes: 21 additions & 2 deletions config/settings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1273,11 +1273,9 @@ vanotify:
api_key: fake_secret
template_id:
appoint_a_representative_confirmation_email: appoint_a_representative_confirmation_email_template_id
burial_claim_confirmation_email_template_id: burial_claim_confirmation_email_template_id
ch31_vbms_form_confirmation_email: ch31_vbms_fake_template_id
ch31_central_mail_form_confirmation_email: ch31_central_mail_fake_template_id
career_counseling_confirmation_email: career_counseling_confirmation_email_template_id
form527ez_confirmation_email: form527ez_confirmation_email_template_id
preneeds_burial_form_email: preneeds_burial_form_email_template_id
contact_info_change: fake_template_id
form0994_confirmation_email: form0994_confirmation_email_template_id
Expand Down Expand Up @@ -1388,6 +1386,27 @@ vanotify:
template_id:
form1010_ez_failure_email: fake_template_id
form1010_ezr_failure_email: fake_template_id
# https://support.atlassian.com/bitbucket-cloud/docs/yaml-anchors/
21p_527ez: &vanotify_services_pension
api_key: fake_secret
email:
confirmation:
template_id: form527ez_confirmation_email_template_id
flipper_id: false
error: null
received: null
pensions: *vanotify_services_pension
21p_530ez: &vanotify_services_burial
api_key: fake_secret
email:
confirmation:
template_id: burial_claim_confirmation_email_template_id
flipper_id: false
error: null
received: null
burials: *vanotify_services_burial
21p_530: *vanotify_services_burial
21p_530v2: *vanotify_services_burial
mock: false
links:
connected_applications: https://www.va.gov/profile/connected-applications
Expand Down
72 changes: 72 additions & 0 deletions lib/va_notify/notification_email.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# frozen_string_literal: true

# Library for VA Notify
module VANotify
# module functions for sending a VaNotify notification email
module NotificationEmail
# statsd metric prefix
STATSD = 'api.va_notify.notification_email'

# notification type constants
module Type
# confirmation
CONFIRMATION = :confirmation
# error
ERROR = :error
# received
RECEIVED = :received
end

# error indicating failure to send email
class FailureToSend < StandardError; end

module_function

# monitor send failure
#
# @param error_message [String] the error message to be logged
# @param tags [Array<String>] array of tags for StatsD; ["tag_name:tag_value", ...]
# @param context [Hash] additional information to send with the log
def monitor_send_failure(error_message, tags:, context: nil)
metric = "#{VANotify::NotificationEmail::STATSD}.send_failure"
payload = {
statsd: metric,
error_message:,
context:
}

StatsD.increment(metric, tags:)
Rails.logger.error('VANotify::NotificationEmail send failure!', **payload)
end

# monitor attempting a duplicate notification for the same item
#
# @param tags [Array<String>] array of tags for StatsD; ["tag_name:tag_value", ...]
# @param context [Hash] additional information to send with the log
def monitor_duplicate_attempt(tags:, context: nil)
metric = "#{VANotify::NotificationEmail::STATSD}.duplicate_attempt"
payload = {
statsd: metric,
context:
}

StatsD.increment(metric, tags:)
Rails.logger.warn('VANotify::NotificationEmail duplicate attempt', **payload)
end

# monitor delivery successful
#
# @param tags [Array<String>] array of tags for StatsD; ["tag_name:tag_value", ...]
# @param context [Hash] additional information to send with the log
def monitor_deliver_success(tags:, context: nil)
metric = "#{VANotify::NotificationEmail::STATSD}.deliver_success"
payload = {
statsd: metric,
context:
}

StatsD.increment(metric, tags:)
Rails.logger.info('VANotify::NotificationEmail deliver success!', **payload)
end
end
end
37 changes: 37 additions & 0 deletions lib/va_notify/notification_email/burial.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# frozen_string_literal: true

require 'va_notify/notification_email/saved_claim'

# Form 21P-530EZ
module Burials
# @see VANotify::NotificationEmail::SavedClaim
class NotificationEmail < ::VANotify::NotificationEmail::SavedClaim
# @see VANotify::NotificationEmail::SavedClaim#new
def initialize(saved_claim)
super(saved_claim, service_name: 'burials')
end

private

# @see VANotify::NotificationEmail::SavedClaim#personalization
def personalization
default = super

facility_name, street_address, city_state_zip = claim.regional_office
veteran_name = "#{claim.veteran_first_name} #{claim.veteran_last_name&.first}"
benefits_claimed = " - #{claim.benefits_claimed.join(" \n - ")}"

burials = {
'form_name' => 'Burial Benefit Claim (Form 21P-530)',
'deceased_veteran_first_name_last_initial' => veteran_name,
'benefits_claimed' => benefits_claimed,
'facility_name' => facility_name,
'street_address' => street_address,
'city_state_zip' => city_state_zip,
'first_name' => claim.claimaint_first_name&.upcase
}

default.merge(burials)
end
end
end
Loading

0 comments on commit b97a189

Please sign in to comment.