Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ GIT

GIT
remote: https://github.com/ideacrew/aca_entities.git
revision: 5db1c3417d2b5e9d55ad93572f8142b386591006
revision: 4bd1c94653dfc62b6037197a6cb9e06fdb6aa5a3
branch: trunk
specs:
aca_entities (0.10.0)
Expand Down
2 changes: 1 addition & 1 deletion components/benefit_sponsors/Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
GIT
remote: https://github.com/ideacrew/aca_entities.git
revision: b32d8cb6ba1887e406a560eb76564940aac3975a
revision: 4bd1c94653dfc62b6037197a6cb9e06fdb6aa5a3
branch: trunk
specs:
aca_entities (0.10.0)
Expand Down
2 changes: 1 addition & 1 deletion components/financial_assistance/Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
GIT
remote: https://github.com/ideacrew/aca_entities.git
revision: b32d8cb6ba1887e406a560eb76564940aac3975a
revision: 4bd1c94653dfc62b6037197a6cb9e06fdb6aa5a3
branch: trunk
specs:
aca_entities (0.10.0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ class Applicant < Dry::Struct
attribute :issuing_country, Types::String.optional.meta(omittable: true)
attribute :relationship, Types::String.optional.meta(omittable: true)
attribute :immigration_doc_statuses, Types::Array.of(Types::String).meta(omittable: true)
attribute :immigration_information, FinancialAssistance::Entities::ImmigrationInformation.optional.meta(omittable: true)

attribute :addresses, Types::Array.of(FinancialAssistance::Entities::Address)
attribute :emails, Types::Array.of(FinancialAssistance::Entities::Email)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# frozen_string_literal: true


module FinancialAssistance
module Entities
class ImmigrationInformation < Dry::Struct
transform_keys(&:to_sym)

attribute :subject, Types::String.meta(omittable: false)
attribute :alien_number, Types::String.optional.meta(omittable: true)
attribute :i94_number, Types::String.optional.meta(omittable: true)
attribute :visa_number, Types::String.optional.meta(omittable: true)
attribute :passport_number, Types::String.optional.meta(omittable: true)
attribute :sevis_id, Types::String.optional.meta(omittable: true)
attribute :naturalization_number, Types::String.optional.meta(omittable: true)
attribute :receipt_number, Types::String.optional.meta(omittable: true)
attribute :citizenship_number, Types::String.optional.meta(omittable: true)
attribute :card_number, Types::String.optional.meta(omittable: true)
attribute :country_of_citizenship, Types::String.optional.meta(omittable: true)
attribute :expiration_date, Types::Date.optional.meta(omittable: true)
attribute :issuing_country, Types::String.optional.meta(omittable: true)

end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ def applicants(application)
five_year_bar_met: applicant_five_year_bar_met(applicant),
qualified_non_citizen: applicant_qnc_code(applicant),
is_consent_applicant: applicant.is_consent_applicant.present?,
vlp_document: vlp_document(applicant),
**(EnrollRegistry.feature_enabled?(:vlp_upgrade_v37_1_2) ? { immigration_information: build_immigration_information(applicant) } : { vlp_document: vlp_document(applicant) }),
family_member_reference: {family_member_hbx_id: applicant.person_hbx_id.to_s,
first_name: applicant.first_name,
last_name: applicant.last_name,
Expand Down Expand Up @@ -715,22 +715,42 @@ def prior_insurance(applicant)

def vlp_document(applicant)
return if applicant.vlp_subject.nil?
{subject: applicant.vlp_subject,
alien_number: applicant.alien_number,
i94_number: applicant.i94_number,
visa_number: applicant.visa_number,
passport_number: applicant.passport_number,
sevis_id: applicant.sevis_id,
naturalization_number: applicant.naturalization_number,
receipt_number: applicant.receipt_number,
citizenship_number: applicant.citizenship_number,
card_number: applicant.card_number,
country_of_citizenship: applicant.country_of_citizenship,
expiration_date: applicant.expiration_date&.to_datetime,
issuing_country: applicant.issuing_country,
status: nil, # not sure what should be value here
verification_type: nil, #not sure of value.
comment: nil}
{
subject: applicant.vlp_subject,
**common_immigration_keys(applicant),
status: nil, # not sure what should be value here
verification_type: nil, #not sure of value.
comment: nil
}
end

def build_immigration_information(applicant)
return if applicant.immigration_information.nil?
immigration_information = applicant.immigration_information

return if immigration_information.subject.nil?

{
subject: immigration_information.subject,
**common_immigration_keys(immigration_information)
}
end

def common_immigration_keys(object)
{
alien_number: object.alien_number,
i94_number: object.i94_number,
visa_number: object.visa_number,
passport_number: object.passport_number,
sevis_id: object.sevis_id,
naturalization_number: object.naturalization_number,
receipt_number: object.receipt_number,
citizenship_number: object.citizenship_number,
card_number: object.card_number,
country_of_citizenship: object.country_of_citizenship,
expiration_date: object.expiration_date&.to_datetime,
issuing_country: object.issuing_country
}
end

def addresses(applicant)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ def build_applicants(payload, application, family)
applicants_results = sanitized.map do |applicant|
::FinancialAssistance::Operations::Applicant::Build.new.call(params: applicant.merge(application: application))
end

applicants_results.map do |result|
return result if result.failure?
applicant = application.applicants.build
Expand Down Expand Up @@ -248,7 +249,7 @@ def build_applicant_params(context)
phones = valid_applicant_phones(applicant_hash['phones'])
no_ssn = fm_hash&.dig('person', 'person_demographics', 'no_ssn')

{
params = {
# Identity attributes
family_member_id: is_primary ? family.primary_applicant.id : nil,
relationship: fm_hash&.dig('person', 'person_relationships', 0, 'kind'),
Expand Down Expand Up @@ -283,9 +284,6 @@ def build_applicant_params(context)
is_applying_coverage: applicant_hash['is_applying_coverage'],
is_consent_applicant: applicant_hash['is_consent_applicant'],

# VLP attributes
**extract_vlp_attributes(applicant_hash),

# Tax attributes
**extract_tax_attributes(applicant_hash),

Expand Down Expand Up @@ -354,6 +352,12 @@ def build_applicant_params(context)
# Transfer info
transfer_referral_reason: applicant_hash['transfer_referral_reason']
}

if EnrollRegistry.feature_enabled?(:vlp_upgrade_v37_1_2)
applicant_hash['vlp_subject'].present? ? params.merge!(immigration_information: extract_immigration_information_attributes(applicant_hash)) : params
else
params.merge!(**extract_vlp_attributes(applicant_hash))
end
end

# Helper methods to extract attribute groups
Expand Down Expand Up @@ -400,6 +404,19 @@ def extract_citizenship_attributes(citizenship_info)
def extract_vlp_attributes(applicant_hash)
{
vlp_subject: applicant_hash['vlp_subject'],
**common_immigration_keys(applicant_hash)
}
end

def extract_immigration_information_attributes(applicant_hash)
{
subject: applicant_hash['vlp_subject'],
**common_immigration_keys(applicant_hash)
}
end

def common_immigration_keys(applicant_hash)
{
alien_number: applicant_hash['alien_number'],
i94_number: applicant_hash['i94_number'],
visa_number: applicant_hash['visa_number'],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ class ApplicantContract < Dry::Validation::Contract
optional(:issuing_country).maybe(:string)
optional(:relationship).maybe(:string)

optional(:immigration_information).maybe(:hash)

optional(:no_ssn).maybe(:string)
required(:citizen_status).maybe(:string)
required(:is_consumer_role).filled(:bool)
Expand All @@ -74,6 +76,13 @@ class ApplicantContract < Dry::Validation::Contract
optional(:transfer_referral_reason).maybe(:string)
end

rule(:immigration_information) do
if key? && value
result = ::FinancialAssistance::Validators::ImmigrationInformationContract.new.call(value)
key.failure(text: "invalid document", error: result.errors.to_h) if result&.failure?
end
end

rule(:addresses).each do
if key? && value
if value.is_a?(Hash)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# frozen_string_literal: true

module FinancialAssistance
module Validators
# Validations for ImmigrationInformation
class ImmigrationInformationContract < Dry::Validation::Contract

params do
optional(:subject).maybe(:string)
optional(:alien_number).maybe(:string, size?: 9)
optional(:i94_number).maybe(:string, size?: 11)
optional(:visa_number).maybe(:string, size?: 8..12)
optional(:passport_number).maybe(:string, size?: 6..12)
optional(:sevis_id).maybe(:string, size?: 10)
optional(:naturalization_number).maybe(:string, size?: 6..12)
optional(:receipt_number).maybe(:string, size?: 13)
optional(:citizenship_number).maybe(:string, size?: 6..12)
optional(:card_number).maybe(:string, size?: 13)
optional(:country_of_citizenship).maybe(:string)
optional(:expiration_date).maybe(:date)
optional(:issuing_country).maybe(:string)
end
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,30 @@
allow(benefit_sponsorship).to receive(:current_benefit_period).and_return(benefit_coverage_period)
end

describe 'immigration_information' do
let(:immigration_info) { applicant.build_immigration_information(subject: 'I-551 (Permanent Resident Card)', alien_number: 'A99999999', expiration_date: Date.today) }
before do
allow(EnrollRegistry).to receive(:feature_enabled?).with(:vlp_upgrade_v37_1_2).and_return(true)
immigration_info
applicant.save
update_benchmark_premiums
end

it 'should build immigration_information' do
result = subject.call(application).success
valid_payload = ::AcaEntities::MagiMedicaid::Contracts::ApplicationContract.new.call(result)
valid_entity = ::AcaEntities::MagiMedicaid::Application.new(valid_payload.to_h)

application_hash = valid_entity.to_h
result_applicant = application_hash[:applicants].first
result_immigration_info = result_applicant[:immigration_information]
expect(result_immigration_info).to be_present
expect(result_immigration_info[:subject]).to eq 'I-551 (Permanent Resident Card)'
expect(result_immigration_info[:alien_number]).to eq 'A99999999'
expect(result_immigration_info[:expiration_date]).to eq Date.today
end
end

describe 'When Application in draft state is passed' do
let(:result) do
update_benchmark_premiums
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,66 @@
end
end
end

context 'when feature is enabled vlp_upgrade_v37_1_2' do
before do
allow(EnrollRegistry).to receive(:feature_enabled?).with(:vlp_upgrade_v37_1_2).and_return(true)
record = serializer.parse(xml)
@transformed = transformer.transform(record.to_hash(identifier: true))

@result = subject.call(@transformed)
end

it 'should set the transferred_at field' do
app = FinancialAssistance::Application.find(@result.value!)
expect(app.transferred_at).not_to eq nil
end

it "persists only primary family_members" do
family = Family.all.first
expect(family.family_members.count).to eq(1)
end

it 'should persist the person name' do
app = FinancialAssistance::Application.find(@result.value!)
@transformed.deep_symbolize_keys!
expect(app.applicants.first.first_name).to eq(@transformed[:family][:family_members][0][:person][:person_name][:first_name])
expect(app.applicants.first.last_name).to eq(@transformed[:family][:family_members][0][:person][:person_name][:last_name])
expect(app.applicants.first.middle_name).to eq(@transformed[:family][:family_members][0][:person][:person_name][:middle_name])
end

context "vlp documents/immigration information" do
before do
@category_code = @transformed["family"]["family_members"].first["person"]["consumer_role"]["vlp_documents"].first["subject"]
@naturalization_number = @transformed["family"]["family_members"].first["person"]["consumer_role"]["vlp_documents"].first["naturalization_number"]
@alien_number = @transformed["family"]["family_members"].first["person"]["consumer_role"]["vlp_documents"].first["alien_number"]
end

it "should populate vlp documents on the consumer role" do
person = Person.first
consumer_role = person.consumer_role
active_vlp_doc = consumer_role.vlp_documents.last
expect(consumer_role.active_vlp_document_id).to eq active_vlp_doc.id
expect(active_vlp_doc.subject).to eq(@category_code)
expect(active_vlp_doc.naturalization_number).to eq(@naturalization_number)
expect(active_vlp_doc.alien_number).to eq(@alien_number)
end

it "should populate vlp documents on the applicant" do
applicant = FinancialAssistance::Application.first.applicants.first
expect(applicant.vlp_subject).not_to eq(@category_code)
expect(applicant.alien_number).not_to eq(@alien_number)
expect(applicant.naturalization_number).not_to eq(@naturalization_number)
end

it "should populate immigration information on the applicant" do
applicant = FinancialAssistance::Application.first.applicants.first
expect(applicant.immigration_information.subject).to eq(@category_code)
expect(applicant.immigration_information.alien_number).to eq(@alien_number)
expect(applicant.immigration_information.naturalization_number).to eq(@naturalization_number)
end
end
end
end

context 'Incarceration status' do
Expand Down
2 changes: 1 addition & 1 deletion components/sponsored_benefits/Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
GIT
remote: https://github.com/ideacrew/aca_entities.git
revision: b32d8cb6ba1887e406a560eb76564940aac3975a
revision: 4bd1c94653dfc62b6037197a6cb9e06fdb6aa5a3
branch: trunk
specs:
aca_entities (0.10.0)
Expand Down
Loading