diff --git a/lib/evss/disability_compensation_form/form0781.rb b/lib/evss/disability_compensation_form/form0781.rb index d74a1c5c462..b116d6e5169 100644 --- a/lib/evss/disability_compensation_form/form0781.rb +++ b/lib/evss/disability_compensation_form/form0781.rb @@ -55,13 +55,11 @@ def create_form(incidents) def create_form_v2 prepare_veteran_info.merge({ 'events' => @form_content['events'], - 'workBehaviors' => @form_content['workBehaviors'], - 'healthBehaviors' => @form_content['healthBehaviors'], - 'otherBehaviors' => @form_content['otherBehaviors'], + 'behaviors' => aggregate_behaviors, 'behaviorsDetails' => @form_content['behaviorsDetails'], - 'evidence' => @form_content['evidence'], - 'traumaTreatment' => @form_content['traumaTreatment'], - 'treatmentProviders' => @form_content['treatmentProviders'], + 'evidence' => aggregate_supporting_evidence, + 'treatmentNoneCheckbox' => @form_content['treatmentNoneCheckbox'], + 'treatmentProviders' => aggregate_treatment_providers, 'treatmentProvidersDetails' => @form_content['treatmentProvidersDetails'], 'optionIndicator' => @form_content['optionIndicator'], 'additionalInformation' => @form_content['additionalInformation'] @@ -81,6 +79,36 @@ def prepare_veteran_info } end + def aggregate_behaviors + (@form_content['workBehaviors'] || {}) + .merge(@form_content['healthBehaviors'] || {}) + .merge(@form_content['otherBehaviors'] || {}) + .select { |_key, value| value } + end + + def aggregate_supporting_evidence + evidence = {} + + evidence.merge!(@form_content['supportingEvidenceReports'] || {}) + evidence.merge!(@form_content['supportingEvidenceRecords'] || {}) + evidence.merge!(@form_content['supportingEvidenceWitness'] || {}) + evidence.merge!(@form_content['supportingEvidenceOther'] || {}) + evidence.merge!('none' => @form_content['supportingEvidenceNoneCheckbox']&.[]('none') || false) + + if @form_content['supportingEvidenceUnlisted'].present? + evidence['other'] = true + evidence['otherDetails'] = @form_content['supportingEvidenceUnlisted'] + end + + evidence.select { |_key, value| value } + end + + def aggregate_treatment_providers + (@form_content['treatmentReceivedVaProvider'] || {}) + .merge(@form_content['treatmentReceivedNonVaProvider'] || {}) + .select { |_key, value| value } + end + def split_incidents(incidents) return nil if incidents.blank? diff --git a/lib/pdf_fill/forms/va210781v2.rb b/lib/pdf_fill/forms/va210781v2.rb index 841db7cde23..2a78b71d7b5 100644 --- a/lib/pdf_fill/forms/va210781v2.rb +++ b/lib/pdf_fill/forms/va210781v2.rb @@ -164,7 +164,7 @@ class Va210781v2 < FormBase question_suffix: 'A' } }, - 'workBehaviors' => { # question_num: 10A + 'behaviors' => { # question_num: 10A 'reassignment' => { key: 'F[0].#subform[3].Request_For_A_Change_In_Occupational_Series_Or_Duty_Assignment[0]' }, @@ -173,9 +173,7 @@ class Va210781v2 < FormBase }, 'performance' => { key: 'F[0].#subform[3].Changes_In_Performance_Or_Performance_Evaluations[0]' - } - }, - 'healthBehaviors' => { # question_num: 10A + }, 'consultations' => { key: 'F[0].#subform[3].Increased_Decreased_Visits_To_A_Healthcare_Professional_Counselor_Or_Treatment_Facility[0]' }, @@ -199,9 +197,7 @@ class Va210781v2 < FormBase }, 'screenings' => { key: 'F[0].#subform[4].Tests_For_Sexually_Transmitted_Infections[0]' - } - }, - 'otherBehaviors' => { # question_num: 10A + }, 'socialEconomic' => { key: 'F[0].#subform[4].Economic_Or_Social_Behavioral_Changes[0]' }, @@ -459,7 +455,7 @@ class Va210781v2 < FormBase } }, 'evidence' => { # question_num: 12 - 'crisisCenter' => { + 'crisis' => { key: 'F[0].#subform[4].A_Rape_Crisis_Center_Or_Center_For_Domestic_Abuse[0]' }, 'counseling' => { @@ -474,16 +470,16 @@ class Va210781v2 < FormBase 'police' => { key: 'F[0].#subform[4].Civilian_Police_Reports[0]' }, - 'medical' => { + 'physicians' => { key: 'F[0].#subform[4].Medical_Reports_From_Civilian_Physicians_Or_Caregivers_Who_Treated_You_Immediately_Following_The_Incident_Or_Sometime_Later[0]' }, 'clergy' => { key: 'F[0].#subform[4].A_Chaplain_Or_Clergy[0]' }, - 'peers' => { + 'service' => { key: 'F[0].#subform[4].Fellow_Service_Members[0]' }, - 'journal' => { + 'personal' => { key: 'F[0].#subform[4].Personal_Diaries_Or_Journals[0]' }, 'none' => { @@ -511,22 +507,22 @@ class Va210781v2 < FormBase key: 'F[0].#subform[4].Treatment_No[0]' }, 'treatmentProviders' => { # question_num: 13B - 'privateCare' => { + 'nonVa' => { key: 'F[0].#subform[4].Private_Healthcare_Provider[0]' }, - 'vetCenter' => { + 'vaCenters' => { key: 'F[0].#subform[4].VA_Vet_Center[0]' }, - 'communityCare' => { + 'vaPaid' => { key: 'F[0].#subform[4].Community_Care_Paid_For_By_VA[0]' }, - 'vamc' => { + 'medicalCenter' => { key: 'F[0].#subform[4].VA_Medical_Center_And_Community_Based_Outpatient_Clinics[0]' }, - 'cboc' => { + 'communityOutpatient' => { key: 'F[0].#subform[4].VA_Medical_Center_And_Community_Based_Outpatient_Clinics[0]' }, - 'mtf' => { + 'dod' => { key: 'F[0].#subform[4].Department_Of_Defense_Military_Treatment_Facilities[0]' } }, @@ -629,7 +625,7 @@ class Va210781v2 < FormBase }, { label: 'Section III: Additional Information Associated with the In-service Traumatic Event(s)', - top_level_keys: %w[workBehaviors healthBehaviors otherBehaviors behaviorsDetails reportsDetails evidence] + top_level_keys: %w[behaviors behaviorsDetails reportsDetails evidence] }, { label: 'Section IV: Treatment Information', @@ -690,11 +686,13 @@ def sanitize_phone(phone) end def set_treatment_selection - treated = @form_data['traumaTreatment'] - return if treated.nil? + treated = (@form_data['treatmentProviders'] || {}).any? + not_treated = @form_data['treatmentNoneCheckbox']&.[]('none') || false + + return if !treated && !not_treated @form_data['treatment'] = treated ? 0 : 1 - @form_data['noTreatment'] = treated ? 0 : 1 + @form_data['noTreatment'] = not_treated ? 1 : 0 end def process_reports diff --git a/spec/fixtures/pdf_fill/21-0781V2/kitchen_sink.json b/spec/fixtures/pdf_fill/21-0781V2/kitchen_sink.json index 991058dcf90..ca85613354c 100644 --- a/spec/fixtures/pdf_fill/21-0781V2/kitchen_sink.json +++ b/spec/fixtures/pdf_fill/21-0781V2/kitchen_sink.json @@ -44,25 +44,15 @@ "unlistedReport": "incident report" } ], - "workBehaviors": { + "behaviors": { "reassignment": true, - "absences": false, - "performance": true - }, - "healthBehaviors": { + "performance": true, "consultations": false, "episodes": true, - "medications": false, "selfMedication": true, - "substances": false, "appetite": true, - "pregnancy": false, - "screenings": true - }, - "otherBehaviors": { - "socialEconomic": false, + "screenings": true, "relationships": true, - "misconduct": false, "unlisted": true }, "behaviorsDetails": { @@ -89,16 +79,14 @@ "other": true, "otherDetails": "photographic evidence" }, - "traumaTreatment": false, - "treatmentProviders": { - "privateCare": true, - "vetCenter": false, - "communityCare": false, - "vamc": true, - "cboc": false, - "mtf": true, + "treatmentNoneCheckbox": { "none": false }, + "treatmentProviders": { + "nonVa": true, + "medicalCenter": true, + "dod": true + }, "treatmentProvidersDetails": [ { "facilityInfo": "Walter Reed, Bethesda, MD", diff --git a/spec/fixtures/pdf_fill/21-0781V2/kitchen_sink.pdf b/spec/fixtures/pdf_fill/21-0781V2/kitchen_sink.pdf index dce9f33628a..91112023aee 100644 Binary files a/spec/fixtures/pdf_fill/21-0781V2/kitchen_sink.pdf and b/spec/fixtures/pdf_fill/21-0781V2/kitchen_sink.pdf differ diff --git a/spec/fixtures/pdf_fill/21-0781V2/merge_fields.json b/spec/fixtures/pdf_fill/21-0781V2/merge_fields.json index 03d0613050f..b883726d1b7 100644 --- a/spec/fixtures/pdf_fill/21-0781V2/merge_fields.json +++ b/spec/fixtures/pdf_fill/21-0781V2/merge_fields.json @@ -65,25 +65,15 @@ } } ], - "workBehaviors": { + "behaviors": { "reassignment": true, - "absences": false, - "performance": true - }, - "healthBehaviors": { + "performance": true, "consultations": false, "episodes": true, - "medications": false, "selfMedication": true, - "substances": false, "appetite": true, - "pregnancy": false, - "screenings": true - }, - "otherBehaviors": { - "socialEconomic": false, + "screenings": true, "relationships": true, - "misconduct": false, "unlisted": true }, "behaviorsDetails": { @@ -110,16 +100,14 @@ "other": true, "otherDetails": "photographic evidence" }, - "traumaTreatment": false, - "treatmentProviders": { - "privateCare": true, - "vetCenter": false, - "communityCare": false, - "vamc": true, - "cboc": false, - "mtf": true, + "treatmentNoneCheckbox": { "none": false }, + "treatmentProviders": { + "nonVa": true, + "medicalCenter": true, + "dod": true + }, "treatmentProvidersDetails": [ { "facilityInfo": "Walter Reed, Bethesda, MD", @@ -168,8 +156,8 @@ "second": "45", "third": "6789" }, - "treatment": 1, - "noTreatment": 1, + "treatment": 0, + "noTreatment": 0, "reportsDetails": { "police": "SVI, Dallas, TX, USA", "other": "incident report" diff --git a/spec/fixtures/pdf_fill/21-0781V2/overflow.json b/spec/fixtures/pdf_fill/21-0781V2/overflow.json index adf7edce9ae..39febed1e0e 100644 --- a/spec/fixtures/pdf_fill/21-0781V2/overflow.json +++ b/spec/fixtures/pdf_fill/21-0781V2/overflow.json @@ -63,25 +63,14 @@ "timing": "Summer of '69" } ], - "workBehaviors": { + "behaviors": { "reassignment": true, - "absences": false, - "performance": true - }, - "healthBehaviors": { - "consultations": false, + "performance": true, "episodes": true, - "medications": false, "selfMedication": true, - "substances": false, "appetite": true, - "pregnancy": false, - "screenings": true - }, - "otherBehaviors": { - "socialEconomic": false, + "screenings": true, "relationships": true, - "misconduct": false, "unlisted": true }, "behaviorsDetails": { @@ -95,29 +84,27 @@ "unlisted": "Lorem ipsum dolor sit amet." }, "evidence": { - "crisisCenter": true, + "crisis": true, "counseling": true, "family": true, "faculty": true, "police": true, - "medical": true, + "physicians": true, "clergy": true, - "peers": true, - "journal": true, + "service": true, + "personal": true, "none": true, "other": true, "otherDetails": "photographic evidence" }, - "traumaTreatment": false, - "treatmentProviders": { - "privateCare": true, - "vetCenter": false, - "communityCare": false, - "vamc": true, - "cboc": false, - "mtf": true, + "treatmentNoneCheckbox": { "none": false }, + "treatmentProviders": { + "nonVa": true, + "medicalCenter": true, + "dod": true + }, "treatmentProvidersDetails": [ { "facilityInfo": "Walter Reed, Bethesda, MD", diff --git a/spec/fixtures/pdf_fill/21-0781V2/overflow.pdf b/spec/fixtures/pdf_fill/21-0781V2/overflow.pdf index e7171c8e583..721ad59c47e 100644 Binary files a/spec/fixtures/pdf_fill/21-0781V2/overflow.pdf and b/spec/fixtures/pdf_fill/21-0781V2/overflow.pdf differ diff --git a/spec/lib/evss/disability_compensation_form/form0781_spec.rb b/spec/lib/evss/disability_compensation_form/form0781_spec.rb index 407dff36e54..dc613879bf4 100644 --- a/spec/lib/evss/disability_compensation_form/form0781_spec.rb +++ b/spec/lib/evss/disability_compensation_form/form0781_spec.rb @@ -192,4 +192,60 @@ end end end + + describe 'when using form v2' do + describe '#aggregate_behaviors' do + context 'when all behavior categories have values' do + it 'merges all behaviors and removes falsy values' do + expect(subject_v2.send(:aggregate_behaviors)).to eq( + { + 'reassignment' => true, + 'performance' => true, + 'consultations' => true, + 'episodes' => true, + 'selfMedication' => true, + 'substances' => true, + 'appetite' => true, + 'screenings' => true, + 'relationships' => true, + 'unlisted' => true + } + ) + end + end + end + + describe '#aggregate_supporting_evidence' do + context 'when supportingEvidenceUnlisted is present' do + it 'adds other and otherDetails' do + expect(subject_v2.send(:aggregate_supporting_evidence)).to eq( + { + 'police' => true, + 'medical' => true, + 'counseling' => true, + 'family' => true, + 'service' => true, + 'personal' => true, + 'other' => true, + 'otherDetails' => 'Lorem ipsum dolor sit amet.' + } + ) + end + end + end + + describe '#aggregate_treatment_providers' do + context 'when treatment providers have values' do + it 'merges treatment providers and removes falsy values' do + expect(subject_v2.send(:aggregate_treatment_providers)).to eq( + { + 'medicalCenter' => true, + 'dod' => true, + 'nonVa' => true + } + ) + end + end + end + end end diff --git a/spec/lib/pdf_fill/forms/va210781v2_spec.rb b/spec/lib/pdf_fill/forms/va210781v2_spec.rb index 5e3fd33fb12..8ba2862f4d6 100644 --- a/spec/lib/pdf_fill/forms/va210781v2_spec.rb +++ b/spec/lib/pdf_fill/forms/va210781v2_spec.rb @@ -44,7 +44,6 @@ def class_form_data 'veteranFullName' => { 'first' => 'Foo', 'last' => 'Bar' } } end - let(:new_form_class) { described_class.new(form_data) } it 'expands the Signature and Signature Date correctly' do new_form_class.expand_signature(form_data['veteranFullName'], form_data['signatureDate']) @@ -62,6 +61,65 @@ def class_form_data end end + describe '#set_treatment_selection' do + context 'when treatment providers are present' do + it 'sets treatment to 0 and noTreatment to 0' do + form_data = {} + new_form_class.instance_variable_set(:@form_data, form_data) + + treatment_data = { 'medicalCenter' => true, 'nonVa' => true, 'vaPaid' => true } + new_form_class.instance_variable_set(:@form_data, { 'treatmentProviders' => treatment_data }) + + new_form_class.send(:set_treatment_selection) + + expected_data = { + 'treatmentProviders' => treatment_data, + 'treatment' => 0, + 'noTreatment' => 0 + } + + expect(new_form_class.instance_variable_get(:@form_data)).to eq(expected_data) + end + end + + context 'when no treatment providers but treatmentNoneCheckbox is true' do + it 'sets treatment to 1 and noTreatment to 1' do + form_data = {} + new_form_class.instance_variable_set(:@form_data, form_data) + + new_form_class.instance_variable_set(:@form_data, + { 'treatmentProviders' => {}, + 'treatmentNoneCheckbox' => { 'none' => true } }) + + new_form_class.send(:set_treatment_selection) + + expected_data = { + 'treatmentProviders' => {}, + 'treatmentNoneCheckbox' => { 'none' => true }, + 'treatment' => 1, + 'noTreatment' => 1 + } + + expect(new_form_class.instance_variable_get(:@form_data)).to eq(expected_data) + end + end + + context 'when no treatment providers' do + it 'does not set treatment or noTreatment' do + form_data = {} + new_form_class.instance_variable_set(:@form_data, form_data) + + new_form_class.instance_variable_set(:@form_data, { 'treatmentProviders' => {} }) + + new_form_class.send(:set_treatment_selection) + + expected_data = { 'treatmentProviders' => {} } + + expect(new_form_class.instance_variable_get(:@form_data)).to eq(expected_data) + end + end + end + describe '#process_reports' do context 'when no events data are provided' do it 'does nothing and leaves the data unchanged' do diff --git a/spec/support/disability_compensation_form/all_claims_with_0781v2_fe_submission.json b/spec/support/disability_compensation_form/all_claims_with_0781v2_fe_submission.json index 5bccedcf64b..9abb12801d0 100644 --- a/spec/support/disability_compensation_form/all_claims_with_0781v2_fe_submission.json +++ b/spec/support/disability_compensation_form/all_claims_with_0781v2_fe_submission.json @@ -201,22 +201,34 @@ "relationships": "Lorem ipsum dolor sit amet.", "unlisted": "Lorem ipsum dolor sit amet." }, - "evidence": { - "counseling": true, - "family": true, - "police": true, + "supportingEvidenceReports": { + "police": true + }, + "supportingEvidenceRecords": { "medical": true, - "peers": true, - "journal": true, - "other": true, - "otherDetails": "Lorem ipsum dolor sit amet." + "counseling": true + }, + "supportingEvidenceWitness": { + "family": true, + "service": true + }, + "supportingEvidenceOther": { + "personal": true + }, + "supportingEvidenceNoneCheckbox": { + "none": false + }, + "supportingEvidenceUnlisted": "Lorem ipsum dolor sit amet.", + "treatmentNoneCheckbox": { + "none": true + }, + "treatmentReceivedVaProvider": { + "vaPaid": false, + "medicalCenter": true, + "dod": true }, - "traumaTreatment": true, - "treatmentProviders": { - "privateCare": true, - "communityCare": false, - "vamc": true, - "mtf": true + "treatmentReceivedNonVaProvider": { + "nonVa": true }, "treatmentProvidersDetails": [ { diff --git a/spec/support/disability_compensation_form/form_0781v2.json b/spec/support/disability_compensation_form/form_0781v2.json index 43032c93b20..3817d466e73 100644 --- a/spec/support/disability_compensation_form/form_0781v2.json +++ b/spec/support/disability_compensation_form/form_0781v2.json @@ -50,19 +50,15 @@ "timing": "2004" } ], - "workBehaviors": { + "behaviors": { "reassignment": true, - "performance": true - }, - "healthBehaviors": { + "performance": true, "consultations": true, "episodes": true, "selfMedication": true, "substances": true, "appetite": true, - "screenings": true - }, - "otherBehaviors": { + "screenings": true, "relationships": true, "unlisted": true }, @@ -77,21 +73,22 @@ "unlisted": "Lorem ipsum dolor sit amet." }, "evidence": { - "counseling": true, - "family": true, "police": true, "medical": true, - "peers": true, - "journal": true, + "counseling": true, + "family": true, + "service": true, + "personal": true, "other": true, "otherDetails": "Lorem ipsum dolor sit amet." }, - "traumaTreatment": true, + "treatmentNoneCheckbox": { + "none": true + }, "treatmentProviders": { - "privateCare": true, - "communityCare": false, - "vamc": true, - "mtf": true + "nonVa": true, + "medicalCenter": true, + "dod": true }, "treatmentProvidersDetails": [ { diff --git a/spec/support/disability_compensation_form/submissions/with_0781v2.json b/spec/support/disability_compensation_form/submissions/with_0781v2.json index a471754eb68..1dd8840bfd1 100644 --- a/spec/support/disability_compensation_form/submissions/with_0781v2.json +++ b/spec/support/disability_compensation_form/submissions/with_0781v2.json @@ -385,22 +385,34 @@ "relationships": "Lorem ipsum dolor sit amet.", "unlisted": "Lorem ipsum dolor sit amet." }, - "evidence": { - "counseling": true, - "family": true, - "police": true, + "supportingEvidenceReports": { + "police": true + }, + "supportingEvidenceRecords": { "medical": true, - "peers": true, - "journal": true, - "other": true, - "otherDetails": "Lorem ipsum dolor sit amet." + "counseling": true + }, + "supportingEvidenceWitness": { + "family": true, + "service": true + }, + "supportingEvidenceOther": { + "personal": true + }, + "supportingEvidenceNoneCheckbox": { + "none": false + }, + "supportingEvidenceUnlisted": "Lorem ipsum dolor sit amet.", + "treatmentNoneCheckbox": { + "none": false + }, + "treatmentReceivedVaProvider": { + "vaPaid": false, + "medicalCenter": true, + "dod": true }, - "traumaTreatment": true, - "treatmentProviders": { - "privateCare": true, - "communityCare": false, - "vamc": true, - "mtf": true + "treatmentReceivedNonVaProvider": { + "nonVa": true }, "treatmentProvidersDetails": [ {