diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c56393b5338..f4690c185c8 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -191,6 +191,8 @@ app/mailers/views/veteran_readiness_employment_cmp.html.erb @department-of-veter app/mailers/views/veteran_readiness_employment.html.erb @department-of-veterans-affairs/Benefits-Team-1 @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group app/models/account_login_stat.rb @department-of-veterans-affairs/octo-identity app/models/account.rb @department-of-veterans-affairs/octo-identity +app/models/accredited_individual.rb @department-of-veterans-affairs/accredited-representation-management @department-of-veterans-affairs/backend-review-group @department-of-veterans-affairs/benefits-accredited-rep-facing +app/models/accredited_organization.rb @department-of-veterans-affairs/accredited-representation-management @department-of-veterans-affairs/backend-review-group @department-of-veterans-affairs/benefits-accredited-rep-facing app/models/adapters/payment_history_adapter.rb @department-of-veterans-affairs/vfs-authenticated-experience-backend @department-of-veterans-affairs/backend-review-group @department-of-veterans-affairs/va-api-engineers app/models/appeal_submission.rb @department-of-veterans-affairs/Benefits-Team-1 @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group app/models/appeal_submission_upload.rb @department-of-veterans-affairs/Benefits-Team-1 @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group @@ -667,6 +669,7 @@ config/form_profile_mappings/0873.yml @department-of-veterans-affairs/vfs-virtua config/form_profile_mappings/1010ez.yml @department-of-veterans-affairs/vfs-10-10 @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group config/form_profile_mappings/10-10EZR.yml @department-of-veterans-affairs/vfs-10-10 @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group config/form_profile_mappings/10182.yml @department-of-veterans-affairs/Benefits-Team-1 @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group +config/form_profile_mappings/10-7959F-1.yml @department-of-veterans-affairs/champva-engineering @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group config/form_profile_mappings/20-0995.yml @department-of-veterans-affairs/Benefits-Team-1 @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group config/form_profile_mappings/20-0996.yml @department-of-veterans-affairs/Benefits-Team-1 @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group config/form_profile_mappings/21-526EZ.yml @department-of-veterans-affairs/Disability-Experience @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group @@ -791,6 +794,7 @@ docs/setup/codespaces.md @department-of-veterans-affairs/backend-review-group @d docs/setup/va_forms.md @department-of-veterans-affairs/platform-va-product-forms @department-of-veterans-affairs/backend-review-group @department-of-veterans-affairs/va-api-engineers docs/setup/virtual_machine_access.md @department-of-veterans-affairs/backend-review-group @department-of-veterans-affairs/va-api-engineers .github @department-of-veterans-affairs/backend-review-group +lib/accredited_representation/constants.rb @department-of-veterans-affairs/accredited-representation-management @department-of-veterans-affairs/backend-review-group @department-of-veterans-affairs/benefits-accredited-rep-facing lib/aes_256_cbc_encryptor.rb @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group lib/apps @department-of-veterans-affairs/vfs-facilities-frontend @department-of-veterans-affairs/lighthouse-pivot lib/bb @department-of-veterans-affairs/vfs-vaos @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group @@ -1076,6 +1080,8 @@ spec/factories/686c/form_686c_674.rb @department-of-veterans-affairs/benefits-de spec/factories/686c/spouse.rb @department-of-veterans-affairs/benefits-dependents-management @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group spec/factories/686c/step_child_lives_with_veteran.rb @department-of-veterans-affairs/benefits-dependents-management @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group spec/factories/accounts.rb @department-of-veterans-affairs/octo-identity +spec/factories/accredited_individuals.rb @department-of-veterans-affairs/accredited-representation-management @department-of-veterans-affairs/backend-review-group @department-of-veterans-affairs/benefits-accredited-rep-facing +spec/factories/accredited_organizations.rb @department-of-veterans-affairs/accredited-representation-management @department-of-veterans-affairs/backend-review-group @department-of-veterans-affairs/benefits-accredited-rep-facing spec/factories/appeal_submissions.rb @department-of-veterans-affairs/vfs-authenticated-experience-backend @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group spec/factories/appeal_submission_uploads.rb @department-of-veterans-affairs/vfs-authenticated-experience-backend @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group spec/factories/ask.rb @department-of-veterans-affairs/Benefits-Team-1 @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group @@ -1439,6 +1445,8 @@ spec/mailers/transactional_email_mailer_spec.rb @department-of-veterans-affairs/ spec/mailers/veteran_readiness_employment_mailer_spec.rb @department-of-veterans-affairs/Benefits-Team-1 @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group spec/middleware @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group spec/models/account_spec.rb @department-of-veterans-affairs/octo-identity +spec/models/accredited_individual_spec.rb @department-of-veterans-affairs/accredited-representation-management @department-of-veterans-affairs/backend-review-group @department-of-veterans-affairs/benefits-accredited-rep-facing +spec/models/accredited_organization_spec.rb @department-of-veterans-affairs/accredited-representation-management @department-of-veterans-affairs/backend-review-group @department-of-veterans-affairs/benefits-accredited-rep-facing spec/models/async_transaction/base_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/models/async_transaction/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/models/async_transaction/vet360 @department-of-veterans-affairs/vfs-authenticated-experience-backend @department-of-veterans-affairs/va-api-engineers @department-of-veterans-affairs/backend-review-group diff --git a/Dockerfile b/Dockerfile index 92323fabfa6..920735a82e2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,9 @@ -FROM ruby:3.2.3-slim-bullseye AS rubyimg +FROM ruby:3.2.3-slim-bookworm as rubyimg + +# XXX: using stretch here for pdftk dep, which is not availible after +# stretch (or in alpine) and is switched automatically to pdftk-java in buster +# https://github.com/department-of-veterans-affairs/va.gov-team/issues/3032 + FROM rubyimg AS modules WORKDIR /tmp diff --git a/Gemfile b/Gemfile index a2181798caf..de030b10c38 100644 --- a/Gemfile +++ b/Gemfile @@ -58,7 +58,7 @@ gem 'carrierwave-aws' gem 'clamav-client', require: 'clamav/client' gem 'combine_pdf' gem 'config' -gem 'connect_vbms', git: 'https://github.com/department-of-veterans-affairs/connect_vbms.git', branch: 'master', require: 'vbms' +gem 'connect_vbms', git: 'https://github.com/adhocteam/connect_vbms', tag: 'v2.0.0.rc', require: 'vbms' gem 'date_validator' gem 'ddtrace' gem 'dogstatsd-ruby', '5.6.1' diff --git a/Gemfile.lock b/Gemfile.lock index 08fe7a29247..2a2c4e97298 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,3 +1,17 @@ +GIT + remote: https://github.com/adhocteam/connect_vbms + revision: 6e5dc751afaf0da9c7cbc10c94b909f114f3a156 + tag: v2.0.0.rc + specs: + connect_vbms (2.0.0.rc) + httpclient (~> 2.8.0) + httpi (~> 2.4) + mail + nokogiri (>= 1.8.4) + nori + xmldsig (~> 0.3.1) + xmlenc + GIT remote: https://github.com/department-of-veterans-affairs/apivore revision: f8ccd476f6c5301f5ebe4e2dd5b30ff0e567ffc1 @@ -30,20 +44,6 @@ GIT nokogiri (>= 1.13.6) savon (= 2.12) -GIT - remote: https://github.com/department-of-veterans-affairs/connect_vbms.git - revision: 1834cf61310001c82e2e96d665518407c3bce947 - branch: master - specs: - connect_vbms (1.4.0) - httpclient (~> 2.8.0) - httpi (~> 2.4) - mail - nokogiri (>= 1.8.4) - nori - xmldsig (~> 0.3.1) - xmlenc - GIT remote: https://github.com/department-of-veterans-affairs/fhir_client.git revision: 52e0197dcb1f940a1f0b28bfa983699f0c199696 @@ -317,7 +317,7 @@ GEM content_disposition (1.0.0) cork (0.3.0) colored2 (~> 3.1) - coverband (6.1.0) + coverband (6.1.1) redis (>= 3.0) crack (1.0.0) bigdecimal @@ -666,7 +666,8 @@ GEM nokogiri (1.16.4) mini_portile2 (~> 2.8.2) racc (~> 1.4) - nori (2.6.0) + nori (2.7.0) + bigdecimal notiffany (0.1.3) nenv (~> 0.1) shellany (~> 0.0) @@ -695,7 +696,7 @@ GEM os (1.1.4) ox (2.14.18) parallel (1.24.0) - parallel_tests (4.6.1) + parallel_tests (4.7.0) parallel parser (3.3.0.5) ast (~> 2.4.1) @@ -893,7 +894,7 @@ GEM rswag-ui (2.13.0) actionpack (>= 3.1, < 7.2) railties (>= 3.1, < 7.2) - rubocop (1.63.2) + rubocop (1.63.3) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) diff --git a/app/controllers/v0/terms_of_use_agreements_controller.rb b/app/controllers/v0/terms_of_use_agreements_controller.rb index dcdc7012ee5..0a188bc5315 100644 --- a/app/controllers/v0/terms_of_use_agreements_controller.rb +++ b/app/controllers/v0/terms_of_use_agreements_controller.rb @@ -11,49 +11,79 @@ class TermsOfUseAgreementsController < ApplicationController before_action :terms_authenticate def latest - terms_of_use_agreement = get_terms_of_use_agreements_for_version(params[:version]).last - render_success(terms_of_use_agreement, :ok) + terms_of_use_agreement = find_latest_agreement_by_version(params[:version]) + render_success(action: 'latest', body: { terms_of_use_agreement: }) end def accept - terms_of_use_agreement = TermsOfUse::Acceptor.new(user_account: current_user.user_account, - common_name: current_user.common_name, - version: params[:version]).perform! - recache_user - render_success(terms_of_use_agreement, :created) + terms_of_use_agreement = acceptor.perform! + recache_user unless terms_code_temporary_auth? + render_success(action: 'accept', body: { terms_of_use_agreement: }, status: :created) rescue TermsOfUse::Errors::AcceptorError => e - render_error(e.message) + render_error(action: 'accept', message: e.message) + end + + def accept_and_provision + terms_of_use_agreement = acceptor(async: false).perform! + if terms_of_use_agreement.accepted? && provisioner.perform + create_cerner_cookie + recache_user unless terms_code_temporary_auth? + render_success(action: 'accept_and_provision', body: { terms_of_use_agreement:, provisioned: true }, + status: :created) + else + render_error(action: 'accept_and_provision', message: 'Failed to accept and provision') + end + rescue TermsOfUse::Errors::AcceptorError => e + render_error(action: 'accept_and_provision', message: e.message) end def decline - terms_of_use_agreement = TermsOfUse::Decliner.new(user_account: current_user.user_account, - common_name: current_user.common_name, - version: params[:version]).perform! - recache_user - render_success(terms_of_use_agreement, :created) + terms_of_use_agreement = decliner.perform! + recache_user unless terms_code_temporary_auth? + render_success(action: 'decline', body: { terms_of_use_agreement: }, status: :created) rescue TermsOfUse::Errors::DeclinerError => e - render_error(e.message) + render_error(action: 'decline', message: e.message) end def update_provisioning - provisioner = TermsOfUse::Provisioner.new(icn: current_user.icn, - first_name: current_user.first_name, - last_name: current_user.last_name, - mpi_gcids: current_user.mpi_gcids) if provisioner.perform create_cerner_cookie - Rails.logger.info('[TermsOfUseAgreementsController] update_provisioning success', { icn: current_user.icn }) - render json: { provisioned: true }, status: :ok + render_success(action: 'update_provisioning', body: { provisioned: true }, status: :ok) else - Rails.logger.error('[TermsOfUseAgreementsController] update_provisioning error', { icn: current_user.icn }) - render_error('Failed to provision') + render_error(action: 'update_provisioning', message: 'Failed to provision') end rescue TermsOfUse::Errors::ProvisionerError => e - render_error(e.message) + render_error(action: 'update_provisioning', message: e.message) end private + def acceptor(async: true) + TermsOfUse::Acceptor.new( + user_account: @user_account, + common_name:, + version: params[:version], + async: + ) + end + + def decliner + TermsOfUse::Decliner.new( + user_account: @user_account, + common_name:, + version: params[:version] + ) + end + + def provisioner + TermsOfUse::Provisioner.new( + icn: @user_account.icn, + first_name: mpi_profile.given_names.first, + last_name: mpi_profile.family_name, + mpi_gcids: mpi_profile.full_mvi_ids + ) + end + def recache_user current_user.needs_accepted_terms_of_use = current_user.user_account&.needs_accepted_terms_of_use? current_user.save @@ -68,29 +98,53 @@ def create_cerner_cookie } end - def get_terms_of_use_agreements_for_version(version) - current_user.user_account.terms_of_use_agreements.where(agreement_version: version) + def find_latest_agreement_by_version(version) + @user_account.terms_of_use_agreements.where(agreement_version: version).last end def authenticate_one_time_terms_code terms_code_container = SignIn::TermsCodeContainer.find(params[:terms_code]) - @current_user = User.find(terms_code_container.user_uuid) + return unless terms_code_container + + @user_account = UserAccount.find(terms_code_container.user_account_uuid) ensure terms_code_container&.destroy end + def authenticate_current_user + load_user(skip_terms_check: true) + return unless current_user + + @user_account = current_user.user_account + end + + def terms_code_temporary_auth? + params[:terms_code].present? + end + def terms_authenticate - params[:terms_code].present? ? authenticate_one_time_terms_code : load_user(skip_terms_check: true) + terms_code_temporary_auth? ? authenticate_one_time_terms_code : authenticate_current_user + + raise Common::Exceptions::Unauthorized unless @user_account + end + + def mpi_profile + @mpi_profile ||= MPI::Service.new.find_profile_by_identifier(identifier: @user_account.icn, + identifier_type: MPI::Constants::ICN)&.profile + end - raise Common::Exceptions::Unauthorized unless @current_user + def common_name + "#{mpi_profile.given_names.first} #{mpi_profile.family_name}" end - def render_success(terms_of_use_agreement, status) - render json: { terms_of_use_agreement: }, status: + def render_success(action:, body:, status: :ok) + Rails.logger.info("[TermsOfUseAgreementsController] #{action} success", { icn: @user_account.icn }) + render json: body, status: end - def render_error(message) - render json: { error: message }, status: :unprocessable_entity + def render_error(action:, message:, status: :unprocessable_entity) + Rails.logger.error("[TermsOfUseAgreementsController] #{action} error: #{message}", { icn: @user_account.icn }) + render json: { error: message }, status: end end end diff --git a/app/models/accredited_individual.rb b/app/models/accredited_individual.rb new file mode 100644 index 00000000000..1f9b3b69afd --- /dev/null +++ b/app/models/accredited_individual.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require 'accredited_representation/constants' + +class AccreditedIndividual < ApplicationRecord + # rubocop:disable Rails/HasAndBelongsToMany + has_and_belongs_to_many :accredited_organizations, + class: 'AccreditedOrganization', + join_table: 'accredited_individuals_accredited_organizations' + + # rubocop:enable Rails/HasAndBelongsToMany + + validates :ogc_id, :registration_number, :individual_type, presence: true + validates :poa_code, length: { is: 3 }, allow_blank: true + validates :individual_type, uniqueness: { scope: :registration_number } + + enum individual_type: { + 'attorney' => 'attorney', + 'claims_agent' => 'claims_agent', + 'representative' => 'representative' + } + + # Find all [AccreditedIndividuals] that are located within a distance of a specific location + # @param long [Float] longitude of the location of interest + # @param lat [Float] latitude of the location of interest + # @param max_distance [Float] the maximum search distance in meters + # + # @return [AccreditedIndividual::ActiveRecord_Relation] an ActiveRecord_Relation of + # all individuals matching the search criteria + def self.find_within_max_distance(long, lat, max_distance = AccreditedRepresentation::Constants::DEFAULT_MAX_DISTANCE) + query = 'ST_DWithin(ST_SetSRID(ST_MakePoint(:long, :lat), 4326)::geography, location, :max_distance)' + params = { long:, lat:, max_distance: } + + where(query, params) + end + + # return all poa_codes associated with the individual + # + # @return [Array] + def poa_codes + ([poa_code] + accredited_organizations.pluck(:poa_code)).compact + end +end diff --git a/app/models/accredited_organization.rb b/app/models/accredited_organization.rb new file mode 100644 index 00000000000..d532d9c9cbb --- /dev/null +++ b/app/models/accredited_organization.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +require 'accredited_representation/constants' + +class AccreditedOrganization < ApplicationRecord + # rubocop:disable Rails/HasAndBelongsToMany + has_and_belongs_to_many :accredited_individuals, + class: 'AccreditedIndividual', + join_table: 'accredited_individuals_accredited_organizations' + # rubocop:enable Rails/HasAndBelongsToMany + + validates :ogc_id, :poa_code, presence: true + validates :poa_code, length: { is: 3 } + validates :poa_code, uniqueness: true + + # + # Find all [AccreditedOrganizations] that are located within a distance of a specific location + # @param long [Float] longitude of the location of interest + # @param lat [Float] latitude of the location of interest + # @param max_distance [Float] the maximum search distance in meters + # + # @return [AccreditedOrganization::ActiveRecord_Relation] an ActiveRecord_Relation of + # all organizations matching the search criteria + def self.find_within_max_distance(long, lat, max_distance = AccreditedRepresentation::Constants::DEFAULT_MAX_DISTANCE) + query = 'ST_DWithin(ST_SetSRID(ST_MakePoint(:long, :lat), 4326)::geography, location, :max_distance)' + params = { long:, lat:, max_distance: } + + where(query, params) + end + + # return all registration_numbers associated with the individual + # + # @return [Array] + def registration_numbers + accredited_individuals.pluck(:registration_number) + end +end diff --git a/app/models/concerns/form526_claim_fast_tracking_concern.rb b/app/models/concerns/form526_claim_fast_tracking_concern.rb index d09d1793f8d..90e6032c238 100644 --- a/app/models/concerns/form526_claim_fast_tracking_concern.rb +++ b/app/models/concerns/form526_claim_fast_tracking_concern.rb @@ -13,7 +13,7 @@ module Form526ClaimFastTrackingConcern MAX_CFI_STATSD_KEY_PREFIX = 'api.max_cfi' EP_MERGE_STATSD_KEY_PREFIX = 'worker.ep_merge' - EP_MERGE_BASE_CODES = %w[010 110 020 030 040].freeze + EP_MERGE_BASE_CODES = %w[010 110 020].freeze EP_MERGE_SPECIAL_ISSUE = 'EMP' OPEN_STATUSES = [ 'CLAIM RECEIVED', @@ -23,6 +23,8 @@ module Form526ClaimFastTrackingConcern 'CLAIM_RECEIVED', 'INITIAL_REVIEW' ].freeze + CLAIM_REVIEW_BASE_CODES = %w[030 040].freeze + CLAIM_REVIEW_TYPES = %w[higherLevelReview supplementalClaim].freeze def send_rrd_alert_email(subject, message, error = nil, to = Settings.rrd.alerts.recipients) RrdAlertMailer.build(self, subject, message, error, to).deliver_now @@ -133,11 +135,13 @@ def prepare_for_ep_merge! date = Date.strptime(pending_eps.first['date'], '%m/%d/%Y') days_ago = (Time.zone.today - date).round feature_enabled = Flipper.enabled?(:disability_526_ep_merge_api, User.find(user_uuid)) + open_claim_review = open_claim_review? Rails.logger.info( 'EP Merge open EP eligibility', - { id:, feature_enabled:, pending_ep_age: days_ago, pending_ep_status: pending_eps.first['status'] } + { id:, feature_enabled:, open_claim_review:, + pending_ep_age: days_ago, pending_ep_status: pending_eps.first['status'] } ) - if feature_enabled + if feature_enabled && !open_claim_review save_metadata(ep_merge_pending_claim_id: pending_eps.first['id']) add_ep_merge_special_issue! end @@ -271,6 +275,29 @@ def open_claims end end + # Check both Benefits Claim service and Caseflow Appeals status APIs for open 030 or 040 + # Offramps EP 400 Merge process if any are found, or if anything fails + def open_claim_review? + open_claim_review = open_claims.any? do |claim| + CLAIM_REVIEW_BASE_CODES.include?(claim['base_end_product_code']) && OPEN_STATUSES.include?(claim['status']) + end + if open_claim_review + StatsD.increment("#{EP_MERGE_STATSD_KEY_PREFIX}.open_claim_review") + return true + end + + ssn = User.find(user_uuid)&.ssn + ssn ||= auth_headers['va_eauth_pnid'] if auth_headers['va_eauth_pnidtype'] == 'SSN' + decision_reviews = Caseflow::Service.new.get_appeals(OpenStruct.new({ ssn: })).body['data'] + StatsD.increment("#{EP_MERGE_STATSD_KEY_PREFIX}.caseflow_api_called") + decision_reviews.any? do |review| + CLAIM_REVIEW_TYPES.include?(review['type']) && review['attributes']['active'] + end + rescue => e + Rails.logger.error('EP Merge failed open claim review check', backtrace: e.backtrace) + true + end + # fetch, memoize, and return all of the veteran's rated disabilities from EVSS def all_rated_disabilities settings = Settings.lighthouse.veteran_verification.form526 diff --git a/app/models/form526_submission.rb b/app/models/form526_submission.rb index a16f90192a8..86f24ed8151 100644 --- a/app/models/form526_submission.rb +++ b/app/models/form526_submission.rb @@ -18,7 +18,8 @@ class Form526Submission < ApplicationRecord state :unprocessed, initial: true state :delivered_to_primary, :failed_primary_delivery, :rejected_by_primary, :delivered_to_backup, :failed_backup_delivery, :rejected_by_backup, - :in_remediation, :finalized_as_successful, :unprocessable + :in_remediation, :finalized_as_successful, :unprocessable, + :processed_in_batch_remediation, :ignorable_duplicate # - a submission has been delivered to our happy path # - requires polling to finalize @@ -62,7 +63,6 @@ class Form526Submission < ApplicationRecord transitions to: :in_remediation end - # TODO: add this transition when we add 526 completion polling # - The only state that means we no longer own completion of this submission # - There is nothing more to do. E.G. # - VBMS has accepted and returned the applicable status to us via @@ -78,6 +78,33 @@ class Form526Submission < ApplicationRecord event :mark_as_unprocessable do transitions to: :unprocessable end + + # A special state to indicate this was part of our remediation 'batching' + # process in 2023. These were handled manually and are distinct from `in_remediation` + # in that they were not tracked at the time of remediation, but rather later in + # the 2024 526 State audit. + # + # This state is useful to us at the time of creation, but may be something + # to flatten to a simple `finalized_as_successful` in the future. + event :process_in_batch_remediation do + transitions to: :processed_in_batch_remediation + end + + # A special state to indicate this was part of our remediation 'batching' + # process in 2023. These submissions may have been processed or not, but + # we don't care because they have an earlier, successful duplicate. + # + # Duplicates are identified by comparing form_json, using this script: + # https://github.com/department-of-veterans-affairs/va.gov-team-sensitive/blob/master/teams/benefits/scripts/526/submission_deduper.rb + # The result of this script can be evaluated by a qualified stakeholder to make + # a judgement call on whether or not a submission is a 'perfect' duplicate. + # + # IF a submission is found to be an exact duplicate of another + # AND its duplicate was previously submitted / remediated successfully + # THEN we can ignore it as a duplicate + event :ignore_as_duplicate do + transitions to: :ignorable_duplicate + end end wrap_with_logging(:start_evss_submission_job, diff --git a/app/models/form_profile.rb b/app/models/form_profile.rb index bfd47678896..5743ba9e9f3 100644 --- a/app/models/form_profile.rb +++ b/app/models/form_profile.rb @@ -101,7 +101,8 @@ class FormProfile vre_readiness: ['28-1900'], coe: ['26-1880'], adapted_housing: ['26-4555'], - intent_to_file: ['21-0966'] + intent_to_file: ['21-0966'], + ivc_champva: ['10-7959F-1'] }.freeze FORM_ID_TO_CLASS = { @@ -138,7 +139,8 @@ class FormProfile '22-1990EZ' => ::FormProfiles::VA1990ez, '26-1880' => ::FormProfiles::VA261880, '26-4555' => ::FormProfiles::VA264555, - '21-0966' => ::FormProfiles::VA210966 + '21-0966' => ::FormProfiles::VA210966, + '10-7959F-1' => ::FormProfiles::VA107959f1 }.freeze APT_REGEX = /\S\s+((apt|apartment|unit|ste|suite).+)/i @@ -272,9 +274,10 @@ def vets360_contact_info_hash def initialize_contact_information opt = {} opt.merge!(vets360_contact_info_hash) if vet360_contact_info + Rails.logger.info("User Vet360 Contact Info, Address? #{opt[:address].present?} + Email? #{opt[:email].present?}, Phone? #{opt[:home_phone].present?}") opt[:address] ||= user_address_hash - opt[:email] ||= extract_pciu_data(:pciu_email) if opt[:home_phone].nil? opt[:home_phone] = pciu_primary_phone @@ -293,6 +296,8 @@ def vet360_contact_info @vet360_contact_info_retrieved = true if VAProfile::Configuration::SETTINGS.prefill && user.vet360_id.present? @vet360_contact_info = VAProfileRedis::ContactInformation.for_user(user) + else + Rails.logger.info('Vet360 Contact Info Null') end @vet360_contact_info end diff --git a/app/models/form_profiles/va_107959f1.rb b/app/models/form_profiles/va_107959f1.rb new file mode 100644 index 00000000000..407f42714c6 --- /dev/null +++ b/app/models/form_profiles/va_107959f1.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class FormProfiles::VA107959f1 < FormProfile + FORM_ID = '10-7959F-1' + + def metadata + { + version: 0, + prefill: true, + returnUrl: '/review-and-submit' + } + end +end diff --git a/app/models/sign_in/terms_code_container.rb b/app/models/sign_in/terms_code_container.rb index 5e033b23d55..fe1d2a962ea 100644 --- a/app/models/sign_in/terms_code_container.rb +++ b/app/models/sign_in/terms_code_container.rb @@ -7,8 +7,8 @@ class TermsCodeContainer < Common::RedisStore redis_key :code attribute :code, String - attribute :user_uuid, String + attribute :user_account_uuid, String - validates(:code, :user_uuid, presence: true) + validates(:code, :user_account_uuid, presence: true) end end diff --git a/app/services/sign_in/user_code_map_creator.rb b/app/services/sign_in/user_code_map_creator.rb index 5e4dd7c20f2..95b8b69e3f3 100644 --- a/app/services/sign_in/user_code_map_creator.rb +++ b/app/services/sign_in/user_code_map_creator.rb @@ -42,11 +42,11 @@ def create_credential_email end def create_user_acceptable_verified_credential - Login::UserAcceptableVerifiedCredentialUpdater.new(user_account: user_verification.user_account).perform + Login::UserAcceptableVerifiedCredentialUpdater.new(user_account:).perform end def create_terms_code_container - TermsCodeContainer.new(code: terms_code, user_uuid:).save! + TermsCodeContainer.new(code: terms_code, user_account_uuid: user_account.id).save! end def create_code_container @@ -79,6 +79,10 @@ def user_verification @user_verification ||= Login::UserVerifier.new(user_verifier_object).perform end + def user_account + @user_account ||= user_verification.user_account + end + def sign_in @sign_in ||= { service_name: state_payload.type, @@ -98,7 +102,7 @@ def access_token_attributes end def needs_accepted_terms_of_use? - client_config.va_terms_enforced? && user_verification.user_account.needs_accepted_terms_of_use? + client_config.va_terms_enforced? && user_account.needs_accepted_terms_of_use? end def client_config diff --git a/app/services/terms_of_use/acceptor.rb b/app/services/terms_of_use/acceptor.rb index b4a6974f0d5..dfdc80706cc 100644 --- a/app/services/terms_of_use/acceptor.rb +++ b/app/services/terms_of_use/acceptor.rb @@ -6,14 +6,15 @@ module TermsOfUse class Acceptor include ActiveModel::Validations - attr_reader :user_account, :icn, :common_name, :version + attr_reader :user_account, :icn, :common_name, :version, :async validates :user_account, :icn, :common_name, :version, presence: true - def initialize(user_account:, common_name:, version:) + def initialize(user_account:, common_name:, version:, async: true) @user_account = user_account @common_name = common_name @version = version + @async = async @icn = user_account&.icn validate! @@ -22,13 +23,16 @@ def initialize(user_account:, common_name:, version:) end def perform! - terms_of_use_agreement.accepted! - update_sign_up_service + if async + asynchronous_update + else + synchronous_update + end Logger.new(terms_of_use_agreement:).perform terms_of_use_agreement - rescue ActiveRecord::RecordInvalid => e + rescue ActiveRecord::RecordInvalid, StandardError => e log_and_raise_acceptor_error(e) end @@ -38,10 +42,16 @@ def terms_of_use_agreement @terms_of_use_agreement ||= user_account.terms_of_use_agreements.new(agreement_version: version) end - def update_sign_up_service + def asynchronous_update + terms_of_use_agreement.accepted! SignUpServiceUpdaterJob.perform_async(attr_package_key) end + def synchronous_update + terms_of_use_agreement.accepted! + SignUpServiceUpdaterJob.new.perform(attr_package_key) + end + def log_and_raise_acceptor_error(error) Rails.logger.error("[TermsOfUse] [Acceptor] Error: #{error.message}", { user_account_id: user_account&.id }) raise Errors::AcceptorError, error.message diff --git a/app/sidekiq/benefits_intake_status_job.rb b/app/sidekiq/benefits_intake_status_job.rb index a87aa196401..f6b3a7d12da 100644 --- a/app/sidekiq/benefits_intake_status_job.rb +++ b/app/sidekiq/benefits_intake_status_job.rb @@ -36,11 +36,13 @@ def handle_response(response, pending_form_submissions) end.form_type if submission.dig('attributes', 'status') == 'error' || submission.dig('attributes', 'status') == 'expired' - log_result('failure', form_id) - handle_failure(submission) + form_submission_attempt = handle_failure(submission) + time_to_transition = (Time.zone.now - form_submission_attempt.created_at).truncate + log_result('failure', form_id, time_to_transition) elsif submission.dig('attributes', 'status') == 'vbms' - log_result('success', form_id) - handle_success(submission) + form_submission_attempt = handle_success(submission) + time_to_transition = (Time.zone.now - form_submission_attempt.created_at).truncate + log_result('success', form_id, time_to_transition) else log_result('pending', form_id) end @@ -59,6 +61,7 @@ def handle_failure(submission) .order(created_at: :asc) .last form_submission_attempt.fail! + form_submission_attempt end def handle_success(submission) @@ -69,6 +72,7 @@ def handle_success(submission) .order(created_at: :asc) .last form_submission_attempt.vbms! + form_submission_attempt end def batch_process(pending_form_submissions) @@ -86,9 +90,9 @@ def batch_process(pending_form_submissions) [total_handled, false] end - def log_result(result, form_id) + def log_result(result, form_id, time_to_transition = nil) StatsD.increment("#{STATS_KEY}.#{form_id}.#{result}") StatsD.increment("#{STATS_KEY}.all_forms.#{result}") - Rails.logger.info('BenefitsIntakeStatusJob', result:, form_id:) + Rails.logger.info('BenefitsIntakeStatusJob', result:, form_id:, time_to_transition:) end end diff --git a/app/sidekiq/education_form/templates/1995.erb b/app/sidekiq/education_form/templates/1995.erb index 78f99e3717a..471cd52fe3f 100644 --- a/app/sidekiq/education_form/templates/1995.erb +++ b/app/sidekiq/education_form/templates/1995.erb @@ -139,6 +139,8 @@ Middle name of Parent, Guardian or Custodian: <%= @applicant.minorQuestions.guar Last name of Parent, Guardian or Custodian: <%= @applicant.minorQuestions.guardianLastName %> +Suffix of Parent, Guardian or Custodian: <%= @applicant.minorQuestions.guardianSuffix %> + Address of Parent, Guardian or Custodian: Country: <%= @applicant.minorQuestions.guardianAddress.country %> Street: <%= @applicant.minorQuestions.guardianAddress.street %> diff --git a/app/sidekiq/va_notify_dd_email_job.rb b/app/sidekiq/va_notify_dd_email_job.rb index 1f8a81c0697..60c2d2aac16 100644 --- a/app/sidekiq/va_notify_dd_email_job.rb +++ b/app/sidekiq/va_notify_dd_email_job.rb @@ -41,7 +41,7 @@ def perform(email, dd_type = nil) def template_type(dd_type) return 'direct_deposit_edu' if dd_type&.to_sym == :ch33 - return 'direct_deposit_comp_pen' if dd_type&.to_sym == :comp_pen + return 'direct_deposit_comp_pen' if %i[comp_pen comp_and_pen].include? dd_type&.to_sym 'direct_deposit' end diff --git a/config/features.yml b/config/features.yml index c2936cd5d1d..79b167cdef5 100644 --- a/config/features.yml +++ b/config/features.yml @@ -730,6 +730,9 @@ features: actor_type: user description: Enables/disables refill-related content for Medications on VA.gov enable_in_development: true + mhv_landing_page_enable_va_gov_health_tools_links: + actor_type: user + description: Enables VA.gov Health Tools links (Appts, SM, Rx, Records) on MHV-on-VA.gov Landing Page mhv_to_logingov_account_transition: actor_type: cookie_id description: Enables/disables MHV to Login.gov account transfer experience (Identity) @@ -757,10 +760,6 @@ features: actor_type: user description: Logs decision letter info on both claims and decision letter endpoint enable_in_development: true - mobile_sm_session_policy: - actor_type: user - description: changes secure messaging policy to use sm sessions endpoint for authorization - enable_in_development: true mobile_v1_lighthouse_facilities: actor_type: user description: change mobile lighthouse facility calls to use new v1 endpoint diff --git a/config/form_profile_mappings/10-7959F-1.yml b/config/form_profile_mappings/10-7959F-1.yml new file mode 100644 index 00000000000..f9846dcb65e --- /dev/null +++ b/config/form_profile_mappings/10-7959F-1.yml @@ -0,0 +1,22 @@ + +veteran: + date_of_birth: [identity_information, date_of_birth] + full_name: [identity_information, full_name] + first: [identity_information, first] + middle: [identity_information, middle] + last: [identity_information, last] +physical_address: + country: [contact_information, country] + street: [contact_information, street] + city: [contact_information, city] + state: [contact_information, state] + postal_code: [contact_information, postal_code] +mailing_address: + country: [contact_information, country] + street: [contact_information, street] + city: [contact_information, city] + state: [contact_information, state] + postal_code: [contact_information, postal_code] +ssn: [identity_information, ssn] +phone_number: [contact_information, us_phone] +email_address: [contact_information, email] \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index db2ba446c87..60b9d17e74d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -370,6 +370,7 @@ get 'terms_of_use_agreements/:version/latest', to: 'terms_of_use_agreements#latest' post 'terms_of_use_agreements/:version/accept', to: 'terms_of_use_agreements#accept' + post 'terms_of_use_agreements/:version/accept_and_provision', to: 'terms_of_use_agreements#accept_and_provision' post 'terms_of_use_agreements/:version/decline', to: 'terms_of_use_agreements#decline' put 'terms_of_use_agreements/update_provisioning', to: 'terms_of_use_agreements#update_provisioning' diff --git a/config/settings.yml b/config/settings.yml index 2683862707d..e3f5af2d20c 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -411,6 +411,9 @@ adapted_housing: intent_to_file: prefill: true +ivc_champva: + prefill: true + # Settings for Expiry Scanner expiry_scanner: slack: diff --git a/db/seeds/development.rb b/db/seeds/development.rb index aa5195e17ac..ff1ff19c11b 100644 --- a/db/seeds/development.rb +++ b/db/seeds/development.rb @@ -123,7 +123,9 @@ access_token_duration: SignIn::Constants::AccessToken::VALIDITY_LENGTH_SHORT_MINUTES, access_token_attributes: %w[first_name last_name email], refresh_token_duration: SignIn::Constants::RefreshToken::VALIDITY_LENGTH_SHORT_MINUTES, - logout_redirect_uri: 'http://localhost:3001/representatives') + logout_redirect_uri: 'http://localhost:3001/representatives', + credential_service_providers: [SignIn::Constants::Auth::IDME, SignIn::Constants::Auth::LOGINGOV], + service_levels: [SignIn::Constants::Auth::LOA3, SignIn::Constants::Auth::IAL2]) # Create Service Account Config for BTSSS btsss = SignIn::ServiceAccountConfig.find_or_initialize_by(service_account_id: 'bbb5830ecebdef04556e9c430e374972') diff --git a/lib/accredited_representation/constants.rb b/lib/accredited_representation/constants.rb new file mode 100644 index 00000000000..6543901a366 --- /dev/null +++ b/lib/accredited_representation/constants.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module AccreditedRepresentation + module Constants + METERS_PER_MILE = 1609.344 + DEFAULT_MAX_MILES = 50 + DEFAULT_MAX_DISTANCE = DEFAULT_MAX_MILES * METERS_PER_MILE + end +end diff --git a/lib/lighthouse/benefits_claims/configuration.rb b/lib/lighthouse/benefits_claims/configuration.rb index 394611f02d8..72e714d2f80 100644 --- a/lib/lighthouse/benefits_claims/configuration.rb +++ b/lib/lighthouse/benefits_claims/configuration.rb @@ -13,7 +13,7 @@ module BenefitsClaims class Configuration < Common::Client::Configuration::REST self.read_timeout = Settings.lighthouse.benefits_claims.timeout || 20 - API_SCOPES = %w[system/claim.read system/claim.write].freeze + API_SCOPES = %w[system/claim.read system/claim.write system/526-pdf.override].freeze CLAIMS_PATH = 'services/claims/v2/veterans' TOKEN_PATH = 'oauth2/claims/system/v1/token' diff --git a/lib/lighthouse/benefits_claims/service.rb b/lib/lighthouse/benefits_claims/service.rb index 46f200a43ea..57a8f83f54b 100644 --- a/lib/lighthouse/benefits_claims/service.rb +++ b/lib/lighthouse/benefits_claims/service.rb @@ -102,7 +102,8 @@ def create_intent_to_file(type, claimant_ssn, lighthouse_client_id = nil, lighth handle_error(e, lighthouse_client_id, endpoint) end - # submit form526 to Lighthouse API endpoint: /services/claims/v2/veterans/{veteranId}/526 + # submit form526 to Lighthouse API endpoint: /services/claims/v2/veterans/{veteranId}/526 or + # /services/claims/v2/veterans/{veteranId}/526/generatePdf # @param [hash || Requests::Form526] body: a hash representing the form526 # attributes in the Lighthouse request schema # @param [string] lighthouse_client_id: the lighthouse_client_id requested from Lighthouse @@ -111,28 +112,31 @@ def create_intent_to_file(type, claimant_ssn, lighthouse_client_id = nil, lighth # @option options [hash] :body_only only return the body from the request # @option options [string] :aud_claim_url option to override the aud_claim_url for LH Veteran Verification APIs # @option options [hash] :auth_params a hash to send in auth params to create the access token + # @option options [hash] :generate_pdf call the generatePdf endpoint to receive the 526 pdf def submit526(body, lighthouse_client_id = nil, lighthouse_rsa_key_path = nil, options = {}) - endpoint = 'benefits_claims/form/526' + endpoint = '{icn}/526' path = "#{@icn}/526" + if options[:generate_pdf].present? + path += '/generatePDF/minimum-validations' + endpoint += '/generatePDF/minimum-validations' + end + # if we're coming straight from the transformation service without # making this a jsonapi request body first ({data: {type:, attributes}}), # this will put it in the correct format for transmission - body = { - data: { - type: 'form/526', - attributes: body - } - }.as_json.deep_transform_keys { |k| k.camelize(:lower) } + body = build_request_body(body) # Inflection settings force 'current_va_employee' to render as 'currentVAEmployee' in the above camelize() call # Since Lighthouse needs 'currentVaEmployee', the following workaround renames it. fix_current_va_employee(body) + json_body = remove_unicode_characters(body) + response = config.post( path, - body, + json_body, lighthouse_client_id, lighthouse_rsa_key_path, options ) @@ -143,6 +147,26 @@ def submit526(body, lighthouse_client_id = nil, lighthouse_rsa_key_path = nil, o private + def build_request_body(body) + { + data: { + type: 'form/526', + attributes: body + } + }.as_json.deep_transform_keys { |k| k.camelize(:lower) } + end + + # this gsubbing is to fix an issue where the service that generates the 526PDF was failing due to + # unicoded carriage returns: + # i.e.: \n was throwing: "U+000A ('controlLF') is not available in the font Helvetica, encoding: WinAnsiEncoding" + def remove_unicode_characters(body) + body.to_json + .gsub('\\n', ' ') + .gsub('\\r', ' ') + .gsub('\\\\n', ' ') + .gsub('\\\\r', ' ') + end + def fix_current_va_employee(body) if body.dig('data', 'attributes', 'veteranIdentification')&.select do |field| field['currentVAEmployee'] diff --git a/lib/pdf_fill/forms/va21p530v2.rb b/lib/pdf_fill/forms/va21p530v2.rb index f3ab58cdec1..2dd78c06b2b 100644 --- a/lib/pdf_fill/forms/va21p530v2.rb +++ b/lib/pdf_fill/forms/va21p530v2.rb @@ -619,6 +619,14 @@ def expand_cemetery_location @form_data['stateCemeteryOrTribalTrustZip'] = cemetery_location['zip'] if cemetery_location['zip'].present? end + def expand_tribal_land_location + cemetery_location = @form_data['tribalLandLocation'] + return if cemetery_location.blank? + + @form_data['stateCemeteryOrTribalTrustName'] = cemetery_location['name'] if cemetery_location['name'].present? + @form_data['stateCemeteryOrTribalTrustZip'] = cemetery_location['zip'] if cemetery_location['zip'].present? + end + # VA file number can be up to 10 digits long; An optional leading 'c' or 'C' followed by # 7-9 digits. The file number field on the 4142 form has space for 9 characters so trim the # potential leading 'c' to ensure the file number will fit into the form without overflow. @@ -654,7 +662,7 @@ def expand_confirmation_question def expand_location_question cemetery_location = @form_data['cemetaryLocationQuestion'] @form_data['cemetaryLocationQuestionCemetery'] = select_checkbox(cemetery_location == 'cemetery') - @form_data['cemetaryLocationQuestionTribal'] = select_checkbox(cemetery_location == 'tribal') + @form_data['cemetaryLocationQuestionTribal'] = select_checkbox(cemetery_location == 'tribalLand') @form_data['cemetaryLocationQuestionNone'] = select_checkbox(cemetery_location == 'none') end @@ -718,6 +726,7 @@ def merge_fields(_options = {}) end expand_cemetery_location + expand_tribal_land_location # special case: the UI only has a 'yes' checkbox, so the PDF 'noTransportation' checkbox can never be true. @form_data['hasTransportation'] = @form_data['transportation'] == true ? 'YES' : nil diff --git a/lib/periodic_jobs.rb b/lib/periodic_jobs.rb index f56bef279c0..2af35e74c3a 100644 --- a/lib/periodic_jobs.rb +++ b/lib/periodic_jobs.rb @@ -14,12 +14,12 @@ # Update NoticeOfDisagreement statuses with their Central Mail status mgr.register('15 * * * *', 'AppealsApi::SupplementalClaimUploadStatusBatch') # Update SupplementalClaim statuses with their Central Mail status - mgr.register('45 0 * * *', 'AppealsApi::HigherLevelReviewCleanUpWeekOldPii') - # Remove PII of HigherLevelReviews that have 1) reached one of the 'completed' statuses and 2) are a week old - mgr.register('45 0 * * *', 'AppealsApi::NoticeOfDisagreementCleanUpWeekOldPii') - # Remove PII of NoticeOfDisagreements that have 1) reached one of the 'completed' statuses and 2) are a week old + mgr.register('45 0 * * *', 'AppealsApi::HigherLevelReviewCleanUpPii') + # Remove PII of HigherLevelReviews after they have been successfully processed by the VA + mgr.register('45 0 * * *', 'AppealsApi::NoticeOfDisagreementCleanUpPii') + # Remove PII of NoticeOfDisagreements after they have been successfully processed by the VA mgr.register('45 0 * * *', 'AppealsApi::SupplementalClaimCleanUpPii') - # Remove PII of SupplementalClaims that have 1) reached one of the 'completed' statuses and 2) are a week old + # Remove PII of SupplementalClaims after they have been successfully processed by the VA mgr.register('30 * * * *', 'AppealsApi::EvidenceSubmissionBackup') # Ensures that appeal evidence received "late" (after the appeal has reached "success") is submitted to Central Mail mgr.register('0 23 * * 1-5', 'AppealsApi::DecisionReviewReportDaily') diff --git a/modules/appeals_api/app/sidekiq/appeals_api/higher_level_review_clean_up_week_old_pii.rb b/modules/appeals_api/app/sidekiq/appeals_api/higher_level_review_clean_up_pii.rb similarity index 91% rename from modules/appeals_api/app/sidekiq/appeals_api/higher_level_review_clean_up_week_old_pii.rb rename to modules/appeals_api/app/sidekiq/appeals_api/higher_level_review_clean_up_pii.rb index 04ce5cf0f2d..502f4881d6e 100644 --- a/modules/appeals_api/app/sidekiq/appeals_api/higher_level_review_clean_up_week_old_pii.rb +++ b/modules/appeals_api/app/sidekiq/appeals_api/higher_level_review_clean_up_pii.rb @@ -3,7 +3,7 @@ require 'sidekiq' module AppealsApi - class HigherLevelReviewCleanUpWeekOldPii + class HigherLevelReviewCleanUpPii include Sidekiq::Job # Only retry for ~8 hours since the job is run daily sidekiq_options retry: 11, unique_for: 8.hours diff --git a/modules/appeals_api/app/sidekiq/appeals_api/notice_of_disagreement_clean_up_week_old_pii.rb b/modules/appeals_api/app/sidekiq/appeals_api/notice_of_disagreement_clean_up_pii.rb similarity index 90% rename from modules/appeals_api/app/sidekiq/appeals_api/notice_of_disagreement_clean_up_week_old_pii.rb rename to modules/appeals_api/app/sidekiq/appeals_api/notice_of_disagreement_clean_up_pii.rb index 8f0458572f1..3897f42bccb 100644 --- a/modules/appeals_api/app/sidekiq/appeals_api/notice_of_disagreement_clean_up_week_old_pii.rb +++ b/modules/appeals_api/app/sidekiq/appeals_api/notice_of_disagreement_clean_up_pii.rb @@ -3,7 +3,7 @@ require 'sidekiq' module AppealsApi - class NoticeOfDisagreementCleanUpWeekOldPii + class NoticeOfDisagreementCleanUpPii include Sidekiq::Job # Only retry for ~8 hours since the job is run daily sidekiq_options retry: 11, unique_for: 8.hours diff --git a/modules/appeals_api/spec/sidekiq/higher_level_review_clean_up_week_old_pii_spec.rb b/modules/appeals_api/spec/sidekiq/higher_level_review_clean_up_pii_spec.rb similarity index 92% rename from modules/appeals_api/spec/sidekiq/higher_level_review_clean_up_week_old_pii_spec.rb rename to modules/appeals_api/spec/sidekiq/higher_level_review_clean_up_pii_spec.rb index 2b2259ab44f..aa05d501df2 100644 --- a/modules/appeals_api/spec/sidekiq/higher_level_review_clean_up_week_old_pii_spec.rb +++ b/modules/appeals_api/spec/sidekiq/higher_level_review_clean_up_pii_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -describe AppealsApi::HigherLevelReviewCleanUpWeekOldPii, type: :job do +describe AppealsApi::HigherLevelReviewCleanUpPii, type: :job do let(:service) { instance_double(AppealsApi::RemovePii) } describe '#perform' do diff --git a/modules/appeals_api/spec/sidekiq/notice_of_disagreement_clean_up_week_old_pii_spec.rb b/modules/appeals_api/spec/sidekiq/notice_of_disagreement_clean_up_pii_spec.rb similarity index 91% rename from modules/appeals_api/spec/sidekiq/notice_of_disagreement_clean_up_week_old_pii_spec.rb rename to modules/appeals_api/spec/sidekiq/notice_of_disagreement_clean_up_pii_spec.rb index 7869a012c71..03c8db2de30 100644 --- a/modules/appeals_api/spec/sidekiq/notice_of_disagreement_clean_up_week_old_pii_spec.rb +++ b/modules/appeals_api/spec/sidekiq/notice_of_disagreement_clean_up_pii_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -describe AppealsApi::NoticeOfDisagreementCleanUpWeekOldPii, type: :job do +describe AppealsApi::NoticeOfDisagreementCleanUpPii, type: :job do let(:service) { instance_double(AppealsApi::RemovePii) } describe '#perform' do diff --git a/modules/ask_va_api/app/controllers/ask_va_api/v0/inquiries_controller.rb b/modules/ask_va_api/app/controllers/ask_va_api/v0/inquiries_controller.rb index ac0b4e30505..9cc82b5a60e 100644 --- a/modules/ask_va_api/app/controllers/ask_va_api/v0/inquiries_controller.rb +++ b/modules/ask_va_api/app/controllers/ask_va_api/v0/inquiries_controller.rb @@ -26,12 +26,13 @@ def test_create end def create - render json: { message: 'success' }, status: :created + response = Inquiries::Creator.new(icn: current_user.icn).call(payload: inquiry_params) + render json: response.to_json, status: :created end def unauth_create - response = Inquiries::Creator.new(icn: nil).call(params: inquiry_params) - render json: { message: response }, status: :created + response = Inquiries::Creator.new(icn: nil).call(payload: inquiry_params) + render json: response.to_json, status: :created end def upload_attachment @@ -61,10 +62,6 @@ def create_reply private - def inquiry_params - params.permit(:first_name, :last_name).to_h - end - def get_inquiry_by_id inq = retriever.fetch_by_id(id: params[:id]) @inquiry = Result.new(payload: Inquiries::Serializer.new(inq).serializable_hash, status: :ok) @@ -98,6 +95,64 @@ def retriever @retriever ||= Inquiries::Retriever.new(icn: current_user.icn, user_mock_data: params[:mock], entity_class:) end + def inquiry_params + params.permit( + *base_parameters, + *dependant_parameters, + *submitter_parameters, + *veteran_parameters, + SchoolObj: school_parameters + ).to_h + end + + def base_parameters + %i[ + AreYouTheDependent AttachmentPresent BranchOfService City ContactMethod Country + DaytimePhone EmailAddress EmailConfirmation FirstName Gender InquiryAbout + InquiryCategory InquirySource InquirySubtopic InquirySummary InquiryTopic + InquiryType IsVAEmployee IsVeteran IsVeteranAnEmployee IsVeteranDeceased + LevelOfAuthentication MedicalCenter MiddleName PreferredName Pronouns + StreetAddress2 SupervisorFlag VaEmployeeTimeStamp ZipCode Suffix + ] + end + + def dependant_parameters + %i[ + DependantCity DependantCountry DependantDayTimePhone DependantDOB + DependantEmail DependantFirstName DependantGender DependantLastName + DependantMiddleName DependantProvince DependantRelationship DependantSSN + DependantState DependantStreetAddress DependantZipCode + ] + end + + def submitter_parameters + %i[ + Submitter SubmitterDependent SubmitterDOB SubmitterGender SubmitterProvince + SubmitterSSN SubmitterState SubmitterStateOfResidency SubmitterStateOfSchool + SubmitterStateProperty SubmitterStreetAddress SubmitterVetCenter + SubmitterZipCodeOfResidency SubmitterQuestion SubmittersDodIdEdipiNumber + ] + end + + def veteran_parameters + %i[ + VeteranCity VeteranClaimNumber VeteranCountry VeteranDateOfDeath + VeteranDOB VeteranDodIdEdipiNumber VeteranEmail VeteranEmailConfirmation + VeteranEnrolled VeteranFirstName VeteranICN VeteranLastName VeteranMiddleName + VeteranPhone VeteranPreferedName VeteranPronouns VeteranProvince + VeteranRelationship VeteranServiceEndDate VeteranServiceNumber + VeteranServiceStartDate VeteranSSN VeteransState VeteranStreetAddress + VeteranSuffix VeteranSuiteAptOther VeteranZipCode WhoWasTheirCounselor + YourLastName VeteranDodIdEdipiNumber + ] + end + + def school_parameters + %i[ + City InstitutionName RegionalOffice SchoolFacilityCode StateAbbreviation + ] + end + Result = Struct.new(:payload, :status, keyword_init: true) class InvalidAttachmentError < StandardError; end end diff --git a/modules/ask_va_api/app/lib/ask_va_api/inquiries/creator.rb b/modules/ask_va_api/app/lib/ask_va_api/inquiries/creator.rb index bd6c591a68b..5accb20ee13 100644 --- a/modules/ask_va_api/app/lib/ask_va_api/inquiries/creator.rb +++ b/modules/ask_va_api/app/lib/ask_va_api/inquiries/creator.rb @@ -2,6 +2,8 @@ module AskVAApi module Inquiries + class InquiriesCreatorError < StandardError; end + class Creator ENDPOINT = 'inquiries/new' attr_reader :icn, :service @@ -11,9 +13,8 @@ def initialize(icn:, service: nil) @service = service || default_service end - def call(params:) - post_data(payload: { params: }) - { message: 'Inquiry has been created', status: :ok } + def call(payload:) + post_data(payload:) rescue => e ErrorHandler.handle_service_error(e) end @@ -25,7 +26,16 @@ def default_service end def post_data(payload: {}) - service.call(endpoint: ENDPOINT, method: :post, payload:) + response = service.call(endpoint: ENDPOINT, method: :put, payload:) + handle_response_data(response) + end + + def handle_response_data(response) + if response[:Data].nil? + raise InquiriesCreatorError, response[:Message] + else + response[:Data] + end end end end diff --git a/modules/ask_va_api/spec/app/lib/ask_va_api/inquiries/creator_spec.rb b/modules/ask_va_api/spec/app/lib/ask_va_api/inquiries/creator_spec.rb index 5da5f38e0c2..91029a32a3d 100644 --- a/modules/ask_va_api/spec/app/lib/ask_va_api/inquiries/creator_spec.rb +++ b/modules/ask_va_api/spec/app/lib/ask_va_api/inquiries/creator_spec.rb @@ -6,51 +6,46 @@ let(:icn) { '123456' } let(:service) { instance_double(Crm::Service) } let(:creator) { described_class.new(icn:, service:) } - let(:params) { { first_name: 'Fake', last_name: 'Smith' } } + let(:payload) { { FirstName: 'Fake', YourLastName: 'Smith' } } let(:endpoint) { AskVAApi::Inquiries::Creator::ENDPOINT } before do allow_any_instance_of(Crm::CrmToken).to receive(:call).and_return('token') end - describe '#initialize' do - context 'when service is provided' do - it 'uses the provided service' do - expect(creator.service).to eq(service) - end - end - - context 'when service is not provided' do - let(:creator) { described_class.new(icn:) } - - it 'sets a default service' do - expect(creator.service).to be_a(Crm::Service) - end - end - end - describe '#call' do context 'when the API call is successful' do before do - allow(service).to receive(:call).with(endpoint:, method: :post, - payload: { params: }).and_return({ message: 'Inquiry has been created', - status: :ok }) + allow(service).to receive(:call).with(endpoint:, method: :put, + payload:).and_return({ + Data: { + InquiryNumber: '530d56a8-affd-ee11' \ + '-a1fe-001dd8094ff1' + }, + Message: '', + ExceptionOccurred: false, + ExceptionMessage: '', + MessageId: 'b8ebd8e7-3bbf-49c5' \ + '-aff0-99503e50ee27' + }) end it 'posts data to the service and returns the response' do - expect(creator.call(params:)).to eq({ message: 'Inquiry has been created', status: :ok }) + expect(creator.call(payload:)).to eq({ InquiryNumber: '530d56a8-affd-ee11-a1fe-001dd8094ff1' }) end end context 'when the API call fails' do before do - allow(service).to receive(:call).and_raise(StandardError) - allow(ErrorHandler).to receive(:handle_service_error) + allow(service).to receive(:call).and_return({ Data: nil, + Message: 'Data Validation: missing InquiryCategory', + ExceptionOccurred: true, + ExceptionMessage: 'Data Validation: missing InquiryCategory', + MessageId: '13bc59ea-c90a-4d48-8979-fe71e0f7ddeb' }) end - it 'rescues the error and calls ErrorHandler' do - expect { creator.call(params:) }.not_to raise_error - expect(ErrorHandler).to have_received(:handle_service_error).with(instance_of(StandardError)) + it 'raise InquiriesCreatorError' do + expect { creator.call(payload:) }.to raise_error(ErrorHandler::ServiceError) end end end diff --git a/modules/ask_va_api/spec/requests/v0/inquiries_spec.rb b/modules/ask_va_api/spec/requests/v0/inquiries_spec.rb index 3e1bf2ffd11..3d0a6216ddc 100644 --- a/modules/ask_va_api/spec/requests/v0/inquiries_spec.rb +++ b/modules/ask_va_api/spec/requests/v0/inquiries_spec.rb @@ -100,19 +100,6 @@ end end - describe 'POST #test_create' do - before do - allow_any_instance_of(Crm::Service).to receive(:call).and_return({ message: 'success' }) - post '/ask_va_api/v0/test_create', - params: { 'reply' => 'test', 'endpoint' => 'inquiries/id/reply/new' }, - as: :json - end - - it 'response with 200' do - expect(response).to have_http_status(:ok) - end - end - describe 'GET #show' do let(:expected_response) do { 'data' => @@ -254,78 +241,6 @@ end end - describe 'POST #unauth_create' do - let(:params) { { first_name: 'Fake', last_name: 'Smith' } } - let(:endpoint) { AskVAApi::Inquiries::Creator::ENDPOINT } - - before do - allow_any_instance_of(Crm::Service).to receive(:call).with(endpoint:, method: :post, - payload: { params: }).and_return('success') - post inquiry_path, params: - end - - it { expect(response).to have_http_status(:created) } - end - - describe 'POST #upload_attachment' do - let(:file_path) { 'modules/ask_va_api/config/locales/get_inquiries_mock_data.json' } - let(:base64_encoded_file) { Base64.strict_encode64(File.read(file_path)) } - let(:params) { { attachment: "data:image/png;base64,#{base64_encoded_file}", inquiry_id: '12345' } } - - context 'when the file is valid' do - it 'returns an ok status' do - post('/ask_va_api/v0/upload_attachment', params:) - expect(response).to have_http_status(:ok) - expect(json_response[:message]).to eq('Attachment has been received') - end - end - - context 'when no file is attached' do - it 'returns a bad request status' do - post '/ask_va_api/v0/upload_attachment', params: { inquiry_id: '12345' } - expect(response).to have_http_status(:bad_request) - expect(json_response[:message]).to eq('No file attached') - end - end - - context 'when the file size exceeds the limit' do - let(:large_file) { double('File', size: 30.megabytes, content_type: 'application/pdf') } - let(:large_base64_encoded_file) { Base64.strict_encode64('a' * large_file.size) } - let(:large_file_params) do - { attachment: "data:application/pdf;base64,#{large_base64_encoded_file}", inquiry_id: '12345' } - end - - before do - allow(File).to receive(:read).and_return('a' * large_file.size) - post '/ask_va_api/v0/upload_attachment', params: large_file_params - end - - it 'returns an unprocessable entity status' do - expect(response).to have_http_status(:unprocessable_entity) - expect(json_response[:message]).to eq('File size exceeds the allowed limit') - end - end - - # Helper method to parse JSON response - def json_response - JSON.parse(response.body, symbolize_names: true) - end - end - - describe 'POST #create' do - let(:params) { { first_name: 'Fake', last_name: 'Smith' } } - let(:endpoint) { AskVAApi::Inquiries::Creator::ENDPOINT } - - before do - allow_any_instance_of(Crm::Service).to receive(:call).with(endpoint:, method: :post, - payload: { params: }).and_return('success') - sign_in(authorized_user) - post '/ask_va_api/v0/inquiries/auth', params: - end - - it { expect(response).to have_http_status(:created) } - end - describe 'GET #download_attachment' do let(:id) { '1' } @@ -416,6 +331,158 @@ def json_response end end + describe 'POST #create' do + let(:payload) { { FirstName: 'Fake', YourLastName: 'Smith' } } + let(:endpoint) { AskVAApi::Inquiries::Creator::ENDPOINT } + + context 'when successful' do + before do + allow_any_instance_of(Crm::Service).to receive(:call) + .with(endpoint:, method: :put, + payload:).and_return({ + Data: { + Id: '530d56a8-affd-ee11-a1fe-001dd8094ff1' + }, + Message: '', + ExceptionOccurred: false, + ExceptionMessage: '', + MessageId: 'b8ebd8e7-3bbf-49c5-aff0-99503e50ee27' + }) + sign_in(authorized_user) + post '/ask_va_api/v0/inquiries/auth', params: payload + end + + it { expect(response).to have_http_status(:created) } + end + + context 'when crm api fail' do + context 'when the API call fails' do + before do + allow_any_instance_of(Crm::Service).to receive(:call) + .with(endpoint:, method: :put, + payload:).and_return({ Data: nil, + Message: 'Data Validation: missing InquiryCategory', + ExceptionOccurred: true, + ExceptionMessage: 'Data Validation: missing InquiryCategory', + MessageId: '13bc59ea-c90a-4d48-8979-fe71e0f7ddeb' }) + sign_in(authorized_user) + post '/ask_va_api/v0/inquiries/auth', params: payload + end + + it 'raise InquiriesCreatorError' do + expect(response).to have_http_status(:unprocessable_entity) + end + + it_behaves_like 'common error handling', :unprocessable_entity, 'service_error', + 'AskVAApi::Inquiries::InquiriesCreatorError: Data Validation: missing InquiryCategory' + end + end + end + + describe 'POST #unauth_create' do + let(:payload) { { FirstName: 'Fake', YourLastName: 'Smith' } } + let(:endpoint) { AskVAApi::Inquiries::Creator::ENDPOINT } + + context 'when successful' do + before do + allow_any_instance_of(Crm::Service).to receive(:call) + .with(endpoint:, method: :put, + payload:).and_return({ + Data: { + Id: '530d56a8-affd-ee11-a1fe-001dd8094ff1' + }, + Message: '', + ExceptionOccurred: false, + ExceptionMessage: '', + MessageId: 'b8ebd8e7-3bbf-49c5-aff0-99503e50ee27' + }) + post inquiry_path, params: payload + end + + it { expect(response).to have_http_status(:created) } + end + + context 'when crm api fail' do + context 'when the API call fails' do + before do + allow_any_instance_of(Crm::Service).to receive(:call) + .with(endpoint:, method: :put, + payload:).and_return({ Data: nil, + Message: 'Data Validation: missing InquiryCategory', + ExceptionOccurred: true, + ExceptionMessage: 'Data Validation: missing InquiryCategory', + MessageId: '13bc59ea-c90a-4d48-8979-fe71e0f7ddeb' }) + post '/ask_va_api/v0/inquiries', params: payload + end + + it 'raise InquiriesCreatorError' do + expect(response).to have_http_status(:unprocessable_entity) + end + + it_behaves_like 'common error handling', :unprocessable_entity, 'service_error', + 'AskVAApi::Inquiries::InquiriesCreatorError: Data Validation: missing InquiryCategory' + end + end + end + + describe 'POST #upload_attachment' do + let(:file_path) { 'modules/ask_va_api/config/locales/get_inquiries_mock_data.json' } + let(:base64_encoded_file) { Base64.strict_encode64(File.read(file_path)) } + let(:params) { { attachment: "data:image/png;base64,#{base64_encoded_file}", inquiry_id: '12345' } } + + context 'when the file is valid' do + it 'returns an ok status' do + post('/ask_va_api/v0/upload_attachment', params:) + expect(response).to have_http_status(:ok) + expect(json_response[:message]).to eq('Attachment has been received') + end + end + + context 'when no file is attached' do + it 'returns a bad request status' do + post '/ask_va_api/v0/upload_attachment', params: { inquiry_id: '12345' } + expect(response).to have_http_status(:bad_request) + expect(json_response[:message]).to eq('No file attached') + end + end + + context 'when the file size exceeds the limit' do + let(:large_file) { double('File', size: 30.megabytes, content_type: 'application/pdf') } + let(:large_base64_encoded_file) { Base64.strict_encode64('a' * large_file.size) } + let(:large_file_params) do + { attachment: "data:application/pdf;base64,#{large_base64_encoded_file}", inquiry_id: '12345' } + end + + before do + allow(File).to receive(:read).and_return('a' * large_file.size) + post '/ask_va_api/v0/upload_attachment', params: large_file_params + end + + it 'returns an unprocessable entity status' do + expect(response).to have_http_status(:unprocessable_entity) + expect(json_response[:message]).to eq('File size exceeds the allowed limit') + end + end + + # Helper method to parse JSON response + def json_response + JSON.parse(response.body, symbolize_names: true) + end + end + + describe 'POST #test_create' do + before do + allow_any_instance_of(Crm::Service).to receive(:call).and_return({ message: 'success' }) + post '/ask_va_api/v0/test_create', + params: { 'reply' => 'test', 'endpoint' => 'inquiries/id/reply/new' }, + as: :json + end + + it 'response with 200' do + expect(response).to have_http_status(:ok) + end + end + describe 'POST #create_reply' do let(:payload) { { 'reply' => 'this is my reply' } } diff --git a/modules/check_in/app/serializers/check_in/facilities/facilities_data_serializer.rb b/modules/check_in/app/serializers/check_in/facilities/facilities_data_serializer.rb new file mode 100644 index 00000000000..6566d04578f --- /dev/null +++ b/modules/check_in/app/serializers/check_in/facilities/facilities_data_serializer.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module CheckIn + module Facilities + class FacilitiesDataSerializer + include JSONAPI::Serializer + + set_id(&:id) + + attribute :name, :type, :classification, :timezone, :phone, :physicalAddress + end + end +end diff --git a/modules/check_in/app/services/check_in/vaos/base_service.rb b/modules/check_in/app/services/check_in/vaos/base_service.rb index 8cf947ab968..8a906d04d98 100644 --- a/modules/check_in/app/services/check_in/vaos/base_service.rb +++ b/modules/check_in/app/services/check_in/vaos/base_service.rb @@ -9,13 +9,25 @@ class BaseService < Common::Client::Base include SentryLogging include Common::Client::Concerns::Monitoring - attr_reader :patient_icn, :token_service + attr_reader :check_in_session, :patient_icn STATSD_KEY_PREFIX = 'api.check_in.vaos' - def initialize(patient_icn:) - @patient_icn = patient_icn - @token_service = CheckIn::Map::TokenService.build({ patient_icn: }) + ## + # Builds a Service instance + # + # @param opts [Hash] options to create the object + # + # @return [Service] an instance of this class + # + def self.build(opts = {}) + new(opts) + end + + def initialize(opts) + @check_in_session = opts[:check_in_session] + @patient_icn = ::V2::Lorota::RedisClient.build.icn(uuid: check_in_session.uuid) + super() end @@ -35,6 +47,10 @@ def headers } end + def token_service + @token_service ||= Map::TokenService.build(patient_icn:) + end + def referrer if Settings.hostname.ends_with?('.gov') "https://#{Settings.hostname}".gsub('vets', 'va') diff --git a/modules/check_in/spec/serializers/check_in/facilities/facilities_data_serializer_spec.rb b/modules/check_in/spec/serializers/check_in/facilities/facilities_data_serializer_spec.rb new file mode 100644 index 00000000000..8dd6b7968a5 --- /dev/null +++ b/modules/check_in/spec/serializers/check_in/facilities/facilities_data_serializer_spec.rb @@ -0,0 +1,144 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe CheckIn::Facilities::FacilitiesDataSerializer do + subject { described_class } + + let(:facilities_data) do + { + id: '442', + facilitiesApiId: 'vha_442', + vistaSite: '442', + vastParent: '442', + type: 'va_health_facility', + name: 'Cheyenne VA Medical Center', + classification: 'VA Medical Center (VAMC)', + timezone: { + timeZoneId: 'America/Denver' + }, + lat: 41.148026, + long: -104.786255, + website: 'https://www.va.gov/cheyenne-health-care/locations/cheyenne-va-medical-center/', + phone: { + main: '307-778-7550', + fax: '307-778-7381', + pharmacy: '866-420-6337', + afterHours: '307-778-7550', + patientAdvocate: '307-778-7550 x7573', + mentalHealthClinic: '307-778-7349', + enrollmentCoordinator: '307-778-7550 x7579' + }, + mailingAddress: { + type: 'postal', + line: [nil, nil, nil] + }, + physicalAddress: { + type: 'physical', + line: ['2360 East Pershing Boulevard', nil, nil], + city: 'Cheyenne', + state: 'WY', + postalCode: '82001-5356' + }, + mobile: false, + healthService: %w[Audiology Cardiology CaregiverSupport Covid19Vaccine DentalServices Dermatology EmergencyCare + Gastroenterology Gynecology MentalHealthCare Nutrition Ophthalmology Optometry Orthopedics + Podiatry PrimaryCare Urology WomensHealth], + operatingStatus: { + code: 'NORMAL' + }, + visn: '19' + } + end + + describe '#serializable_hash' do + context 'when all the necessary fields exist' do + let(:serialized_hash_response) do + { + data: { + id: '442', + type: :facilities_data, + attributes: { + type: 'va_health_facility', + name: 'Cheyenne VA Medical Center', + classification: 'VA Medical Center (VAMC)', + timezone: { + timeZoneId: 'America/Denver' + }, + phone: { + main: '307-778-7550', + fax: '307-778-7381', + pharmacy: '866-420-6337', + afterHours: '307-778-7550', + patientAdvocate: '307-778-7550 x7573', + mentalHealthClinic: '307-778-7349', + enrollmentCoordinator: '307-778-7550 x7579' + }, + physicalAddress: { + type: 'physical', + line: ['2360 East Pershing Boulevard', nil, nil], + city: 'Cheyenne', + state: 'WY', + postalCode: '82001-5356' + } + } + } + } + end + + it 'returns a serialized hash' do + facilities_struct = OpenStruct.new(facilities_data) + facilities_serializer = CheckIn::Facilities::FacilitiesDataSerializer.new(facilities_struct) + + expect(facilities_serializer.serializable_hash).to eq(serialized_hash_response) + end + end + + context 'when name does not exist' do + let(:facilities_data_without_name) do + facilities_data.except!(:name) + facilities_data + end + + let(:serialized_hash_response) do + { + data: { + id: '442', + type: :facilities_data, + attributes: { + name: nil, + type: 'va_health_facility', + classification: 'VA Medical Center (VAMC)', + timezone: { + timeZoneId: 'America/Denver' + }, + phone: { + main: '307-778-7550', + fax: '307-778-7381', + pharmacy: '866-420-6337', + afterHours: '307-778-7550', + patientAdvocate: '307-778-7550 x7573', + mentalHealthClinic: '307-778-7349', + enrollmentCoordinator: '307-778-7550 x7579' + }, + physicalAddress: { + type: 'physical', + line: ['2360 East Pershing Boulevard', nil, nil], + city: 'Cheyenne', + state: 'WY', + postalCode: '82001-5356' + } + } + } + } + end + + it 'returns a serialized hash with nil in name field' do + facilities_struct = OpenStruct.new(facilities_data_without_name) + facilities_serializer = CheckIn::Facilities::FacilitiesDataSerializer.new(facilities_struct) + + expect(facilities_serializer.serializable_hash).to eq(serialized_hash_response) + end + end + end +end diff --git a/modules/check_in/spec/services/check_in/map/token_service_spec.rb b/modules/check_in/spec/services/check_in/map/token_service_spec.rb index a87429a51f1..a03e1e7b073 100644 --- a/modules/check_in/spec/services/check_in/map/token_service_spec.rb +++ b/modules/check_in/spec/services/check_in/map/token_service_spec.rb @@ -3,14 +3,10 @@ require 'rails_helper' describe CheckIn::Map::TokenService do - subject { described_class } + subject { described_class.build(opts) } let(:patient_icn) { '123' } - let(:opts) do - { - patient_icn: - } - end + let(:opts) { { patient_icn: } } let(:memory_store) { ActiveSupport::Cache.lookup_store(:memory_store) } before do @@ -21,13 +17,13 @@ describe '.build' do it 'returns an instance of Service' do - expect(subject.build(opts)).to be_an_instance_of(described_class) + expect(subject).to be_an_instance_of(described_class) end end describe '#initialize' do it 'has a redis client' do - expect(subject.build(opts).redis_client).to be_a(CheckIn::Map::RedisClient) + expect(subject.redis_client).to be_a(CheckIn::Map::RedisClient) end end @@ -41,7 +37,7 @@ end it 'returns token from redis' do - expect(subject.build(opts).token).to eq(access_token) + expect(subject.token).to eq(access_token) end end @@ -51,8 +47,11 @@ .and_return({ access_token:, expiration: }) end - it 'returns token by calling client' do - expect(subject.build(opts).token).to eq(access_token) + it 'returns token by calling client and saves it in redis' do + redis_client = subject.redis_client + expect(redis_client).to receive(:save_token) + + expect(subject.token).to eq(access_token) end end end diff --git a/modules/check_in/spec/services/check_in/vaos/appointment_service_spec.rb b/modules/check_in/spec/services/check_in/vaos/appointment_service_spec.rb index ca71d3cb05c..37adf918027 100644 --- a/modules/check_in/spec/services/check_in/vaos/appointment_service_spec.rb +++ b/modules/check_in/spec/services/check_in/vaos/appointment_service_spec.rb @@ -3,17 +3,17 @@ require 'rails_helper' describe CheckIn::VAOS::AppointmentService do - subject { described_class.new(patient_icn:) } + subject { described_class } + let(:uuid) { 'd602d9eb-9a31-484f-9637-13ab0b507e0d' } + let(:check_in_session) { CheckIn::V2::Session.build(data: { uuid: }) } let(:patient_icn) { '123' } let(:token) { 'test_token' } let(:request_id) { SecureRandom.uuid } - describe '#initialize' do - it 'returns an instance of service' do - service_obj = subject - expect(service_obj).to be_an_instance_of(CheckIn::VAOS::AppointmentService) - expect(service_obj.token_service).to be_an_instance_of(CheckIn::Map::TokenService) + describe '.build' do + it 'returns an instance of Service' do + expect(subject.build(check_in_session:)).to be_an_instance_of(described_class) end end @@ -42,21 +42,27 @@ let(:faraday_response) { double('Faraday::Response') } let(:faraday_env) { double('Faraday::Env', status: 200, body: appointments_response.to_json) } + before do + allow_any_instance_of(V2::Lorota::RedisClient).to receive(:icn).with(uuid:) + .and_return(patient_icn) + allow_any_instance_of(CheckIn::Map::TokenService).to receive(:token) + .and_return(token) + end + context 'when vaos returns successful response' do before do - allow_any_instance_of(CheckIn::Map::TokenService).to receive(:token) - .and_return(token) - allow_any_instance_of(Faraday::Connection).to receive(:get).with('/vaos/v1/patients/123/appointments', - { start: start_date, end: end_date, - statuses: }) - .and_return(faraday_response) + allow_any_instance_of(Faraday::Connection).to receive(:get) + .with("/vaos/v1/patients/#{patient_icn}/appointments", + { start: start_date, end: end_date, statuses: }) + .and_return(faraday_response) allow(faraday_response).to receive(:env).and_return(faraday_env) end it 'returns appointments' do - response = subject.get_appointments(DateTime.parse(start_date).in_time_zone, - DateTime.parse(end_date).in_time_zone, - statuses) + svc = subject.build(check_in_session:) + response = svc.get_appointments(DateTime.parse(start_date).in_time_zone, + DateTime.parse(end_date).in_time_zone, + statuses) expect(response).to eq(appointments_response) end end @@ -66,8 +72,6 @@ let(:exception) { Common::Exceptions::BackendServiceException.new(nil, {}, resp.status, resp.body) } before do - allow_any_instance_of(CheckIn::Map::TokenService).to receive(:token) - .and_return(token) allow_any_instance_of(Faraday::Connection).to receive(:get).with('/vaos/v1/patients/123/appointments', { start: start_date, end: end_date, statuses: }) @@ -75,10 +79,11 @@ end it 'throws exception' do + svc = subject.build(check_in_session:) expect do - subject.get_appointments(DateTime.parse(start_date).in_time_zone, - DateTime.parse(end_date).in_time_zone, - statuses) + svc.get_appointments(DateTime.parse(start_date).in_time_zone, + DateTime.parse(end_date).in_time_zone, + statuses) end.to(raise_error do |error| expect(error).to be_a(Common::Exceptions::BackendServiceException) end) diff --git a/modules/check_in/spec/services/check_in/vaos/base_service_spec.rb b/modules/check_in/spec/services/check_in/vaos/base_service_spec.rb index f523aab9fc6..e7733b82363 100644 --- a/modules/check_in/spec/services/check_in/vaos/base_service_spec.rb +++ b/modules/check_in/spec/services/check_in/vaos/base_service_spec.rb @@ -3,12 +3,35 @@ require 'rails_helper' describe CheckIn::VAOS::BaseService do - subject { described_class.new(patient_icn:) } + subject { described_class.build(check_in_session:) } + let(:uuid) { 'd602d9eb-9a31-484f-9637-13ab0b507e0d' } + let(:check_in_session) { CheckIn::V2::Session.build(data: { uuid: }) } let(:patient_icn) { '123' } let(:token) { 'test_token' } let(:request_id) { SecureRandom.uuid } + describe '.build' do + it 'returns an instance of Service' do + expect(subject).to be_an_instance_of(described_class) + end + end + + describe '#initialize' do + before do + allow_any_instance_of(V2::Lorota::RedisClient).to receive(:icn).with(uuid:) + .and_return(patient_icn) + end + + it 'has a check_in_session object' do + expect(subject.check_in_session).to be_a(CheckIn::V2::Session) + end + + it 'has a patient icn' do + expect(subject.patient_icn).to eq(patient_icn) + end + end + describe '#config' do it 'returns an instance of Configuration' do expect(subject.config).to be_an_instance_of(CheckIn::VAOS::Configuration) @@ -17,8 +40,9 @@ describe '#headers' do before do - allow_any_instance_of(CheckIn::Map::TokenService).to receive(:token).and_return(token) RequestStore.store['request_id'] = request_id + + allow_any_instance_of(CheckIn::Map::TokenService).to receive(:token).and_return(token) end it 'returns correct headers' do diff --git a/modules/claims_api/app/controllers/claims_api/v2/veterans/disability_compensation_controller.rb b/modules/claims_api/app/controllers/claims_api/v2/veterans/disability_compensation_controller.rb index db0f1a684c7..3e43af7308d 100644 --- a/modules/claims_api/app/controllers/claims_api/v2/veterans/disability_compensation_controller.rb +++ b/modules/claims_api/app/controllers/claims_api/v2/veterans/disability_compensation_controller.rb @@ -108,6 +108,10 @@ def generate_pdf # rubocop:disable Metrics/MethodLength end end + def synchronous + render json: {} + end + private def generate_pdf_mapper_service(form_data, pdf_data_wrapper, auth_headers, middle_initial, created_at) diff --git a/modules/claims_api/app/sidekiq/claims_api/claim_uploader.rb b/modules/claims_api/app/sidekiq/claims_api/claim_uploader.rb index bc6bb6cacc0..e0a87d2c5eb 100644 --- a/modules/claims_api/app/sidekiq/claims_api/claim_uploader.rb +++ b/modules/claims_api/app/sidekiq/claims_api/claim_uploader.rb @@ -7,7 +7,7 @@ module ClaimsApi class ClaimUploader < ClaimsApi::ServiceBase sidekiq_options retry: true, unique_until: :success - def perform(uuid) + def perform(uuid) # rubocop:disable Metrics/MethodLength claim_object = ClaimsApi::SupportingDocument.find_by(id: uuid) || ClaimsApi::AutoEstablishedClaim.find_by(id: uuid) @@ -21,11 +21,12 @@ def perform(uuid) else auth_headers = auto_claim.auth_headers uploader = claim_object.uploader - uploader.retrieve_from_store!(claim_object.file_data['filename']) + original_filename = claim_object.file_data['filename'] + uploader.retrieve_from_store!(original_filename) file_body = uploader.read ClaimsApi::Logger.log('lighthouse_claim_uploader', claim_id: auto_claim.id, attachment_id: uuid) if Flipper.enabled? :claims_claim_uploader_use_bd - bd_upload_body(auto_claim:, file_body:, doc_type:) + bd_upload_body(auto_claim:, file_body:, doc_type:, original_filename:) else EVSS::DocumentsService.new(auth_headers).upload(file_body, claim_upload_document(claim_object)) end @@ -34,19 +35,19 @@ def perform(uuid) private - def bd_upload_body(auto_claim:, file_body:, doc_type:) + def bd_upload_body(auto_claim:, file_body:, doc_type:, original_filename:) fh = Tempfile.new(['pdf_path', '.pdf'], binmode: true) begin fh.write(file_body) fh.close - claim_bd_upload_document(auto_claim, doc_type, fh.path) + claim_bd_upload_document(auto_claim, doc_type, fh.path, original_filename) ensure fh.unlink end end - def claim_bd_upload_document(claim, doc_type, pdf_path) # rubocop:disable Metrics/MethodLength - ClaimsApi::BD.new.upload(claim:, doc_type:, pdf_path:) + def claim_bd_upload_document(claim, doc_type, pdf_path, original_filename) # rubocop:disable Metrics/MethodLength + ClaimsApi::BD.new.upload(claim:, doc_type:, pdf_path:, original_filename:) # Temporary errors (returning HTML, connection timeout), retry call rescue Faraday::ParsingError, Faraday::TimeoutError => e message = get_error_message(e) diff --git a/modules/claims_api/app/swagger/claims_api/v2/dev/swagger.json b/modules/claims_api/app/swagger/claims_api/v2/dev/swagger.json index 7094044200c..694ef3f86cd 100644 --- a/modules/claims_api/app/swagger/claims_api/v2/dev/swagger.json +++ b/modules/claims_api/app/swagger/claims_api/v2/dev/swagger.json @@ -967,7 +967,7 @@ "lighthouseId": null, "maxEstClaimDate": null, "minEstClaimDate": null, - "status": "COMPLETE", + "status": "CANCELED", "submitterApplicationCode": "EBN", "submitterRoleCode": "VET", "supportingDocuments": [ @@ -1625,6 +1625,7 @@ "serviceNumber": { "type": "string", "description": "Service identification number", + "maxLength": 1000, "nullable": true }, "veteranNumber": { @@ -1645,6 +1646,7 @@ "type": "string", "description": "Veteran's international phone number.", "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -1687,6 +1689,7 @@ "description": "City for the Veteran's current mailing address.", "type": "string", "pattern": "^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -1698,6 +1701,7 @@ "country": { "description": "Country for the Veteran's current mailing address. Must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -1783,6 +1787,7 @@ "description": "City for the Veteran's new address.", "type": "string", "pattern": "^$|^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -1794,6 +1799,7 @@ "country": { "description": "Country for the Veteran's new address. Value must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -1913,6 +1919,7 @@ "description": "International phone of point of contact.", "type": "string", "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -1947,12 +1954,14 @@ "type": "string", "nullable": true, "description": "Approximate begin date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" }, "endDate": { "type": "string", "nullable": true, "description": "Approximate end date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" } } @@ -1978,6 +1987,7 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Other location(s) where Veteran served." }, "serviceDates": { @@ -2031,6 +2041,7 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Exposure to asbestos." }, "exposureDates": { @@ -2069,12 +2080,14 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Hazard the Veteran was exposed to." }, "exposureLocation": { "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Location where the exposure happened." }, "exposureDates": { @@ -2126,6 +2139,7 @@ "type": "string", "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": [ "Agent Orange", "radiation", @@ -2136,6 +2150,7 @@ "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury. If the disabilityActionType is 'NEW', the serviceRelevance is required.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "approximateDate": { @@ -2198,6 +2213,7 @@ "type": "string", "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": [ "Agent Orange", "radiation", @@ -2208,6 +2224,7 @@ "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "disabilityActionType": { @@ -2340,6 +2357,7 @@ "serviceBranch": { "description": "Branch of service during period. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", + "maxLength": 1000, "example": "Air Force" }, "serviceComponent": { @@ -2419,10 +2437,12 @@ "unitName": { "type": "string", "nullable": true, + "maxLength": 1000, "pattern": "^$|([a-zA-Z0-9\\-'.,# ][a-zA-Z0-9\\-'.,# ]?)*$" }, "unitAddress": { "type": "string", + "maxLength": 1000, "pattern": "^$|^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", "nullable": true }, @@ -2532,6 +2552,7 @@ "futureMilitaryRetiredPayExplanation": { "description": "Explains why future pay will be received.", "type": "string", + "maxLength": 1000, "example": "Will be retiring soon.", "nullable": true }, @@ -2543,6 +2564,7 @@ "branchOfService": { "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", + "maxLength": 1000, "nullable": true, "example": "Air Force" }, @@ -2598,6 +2620,7 @@ "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Air Force" }, "preTaxAmountReceived": { @@ -2885,6 +2908,7 @@ "serviceNumber": { "type": "string", "description": "Service identification number", + "maxLength": 1000, "nullable": true }, "veteranNumber": { @@ -2905,6 +2929,7 @@ "type": "string", "description": "Veteran's international phone number.", "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -2947,6 +2972,7 @@ "description": "City for the Veteran's current mailing address.", "type": "string", "pattern": "^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -2958,6 +2984,7 @@ "country": { "description": "Country for the Veteran's current mailing address. Must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -3043,6 +3070,7 @@ "description": "City for the Veteran's new address.", "type": "string", "pattern": "^$|^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -3054,6 +3082,7 @@ "country": { "description": "Country for the Veteran's new address. Value must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -3173,6 +3202,7 @@ "description": "International phone of point of contact.", "type": "string", "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -3207,12 +3237,14 @@ "type": "string", "nullable": true, "description": "Approximate begin date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" }, "endDate": { "type": "string", "nullable": true, "description": "Approximate end date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" } } @@ -3238,6 +3270,7 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Other location(s) where Veteran served." }, "serviceDates": { @@ -3291,6 +3324,7 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Exposure to asbestos." }, "exposureDates": { @@ -3329,12 +3363,14 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Hazard the Veteran was exposed to." }, "exposureLocation": { "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Location where the exposure happened." }, "exposureDates": { @@ -3386,6 +3422,7 @@ "type": "string", "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": [ "Agent Orange", "radiation", @@ -3396,6 +3433,7 @@ "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury. If the disabilityActionType is 'NEW', the serviceRelevance is required.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "approximateDate": { @@ -3458,6 +3496,7 @@ "type": "string", "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": [ "Agent Orange", "radiation", @@ -3468,6 +3507,7 @@ "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "disabilityActionType": { @@ -3600,6 +3640,7 @@ "serviceBranch": { "description": "Branch of service during period. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", + "maxLength": 1000, "example": "Air Force" }, "serviceComponent": { @@ -3679,10 +3720,12 @@ "unitName": { "type": "string", "nullable": true, + "maxLength": 1000, "pattern": "^$|([a-zA-Z0-9\\-'.,# ][a-zA-Z0-9\\-'.,# ]?)*$" }, "unitAddress": { "type": "string", + "maxLength": 1000, "pattern": "^$|^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", "nullable": true }, @@ -3792,6 +3835,7 @@ "futureMilitaryRetiredPayExplanation": { "description": "Explains why future pay will be received.", "type": "string", + "maxLength": 1000, "example": "Will be retiring soon.", "nullable": true }, @@ -3803,6 +3847,7 @@ "branchOfService": { "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", + "maxLength": 1000, "nullable": true, "example": "Air Force" }, @@ -3858,6 +3903,7 @@ "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Air Force" }, "preTaxAmountReceived": { @@ -4690,6 +4736,7 @@ "serviceNumber": { "type": "string", "description": "Service identification number", + "maxLength": 1000, "nullable": true }, "veteranNumber": { @@ -4710,6 +4757,7 @@ "type": "string", "description": "Veteran's international phone number.", "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -4752,6 +4800,7 @@ "description": "City for the Veteran's current mailing address.", "type": "string", "pattern": "^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -4763,6 +4812,7 @@ "country": { "description": "Country for the Veteran's current mailing address. Must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -4848,6 +4898,7 @@ "description": "City for the Veteran's new address.", "type": "string", "pattern": "^$|^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -4859,6 +4910,7 @@ "country": { "description": "Country for the Veteran's new address. Value must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -4978,6 +5030,7 @@ "description": "International phone of point of contact.", "type": "string", "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -5012,12 +5065,14 @@ "type": "string", "nullable": true, "description": "Approximate begin date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" }, "endDate": { "type": "string", "nullable": true, "description": "Approximate end date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" } } @@ -5043,6 +5098,7 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Other location(s) where Veteran served." }, "serviceDates": { @@ -5096,6 +5152,7 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Exposure to asbestos." }, "exposureDates": { @@ -5134,12 +5191,14 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Hazard the Veteran was exposed to." }, "exposureLocation": { "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Location where the exposure happened." }, "exposureDates": { @@ -5191,6 +5250,7 @@ "type": "string", "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": [ "Agent Orange", "radiation", @@ -5201,6 +5261,7 @@ "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury. If the disabilityActionType is 'NEW', the serviceRelevance is required.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "approximateDate": { @@ -5263,6 +5324,7 @@ "type": "string", "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": [ "Agent Orange", "radiation", @@ -5273,6 +5335,7 @@ "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "disabilityActionType": { @@ -5405,6 +5468,7 @@ "serviceBranch": { "description": "Branch of service during period. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", + "maxLength": 1000, "example": "Air Force" }, "serviceComponent": { @@ -5484,10 +5548,12 @@ "unitName": { "type": "string", "nullable": true, + "maxLength": 1000, "pattern": "^$|([a-zA-Z0-9\\-'.,# ][a-zA-Z0-9\\-'.,# ]?)*$" }, "unitAddress": { "type": "string", + "maxLength": 1000, "pattern": "^$|^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", "nullable": true }, @@ -5597,6 +5663,7 @@ "futureMilitaryRetiredPayExplanation": { "description": "Explains why future pay will be received.", "type": "string", + "maxLength": 1000, "example": "Will be retiring soon.", "nullable": true }, @@ -5608,6 +5675,7 @@ "branchOfService": { "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", + "maxLength": 1000, "nullable": true, "example": "Air Force" }, @@ -5663,6 +5731,7 @@ "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Air Force" }, "preTaxAmountReceived": { @@ -6003,7 +6072,7 @@ "application/json": { "example": { "data": { - "id": "cf532e4e-e89e-4f9c-aebd-ce8361336a41", + "id": "bcf33b41-f27f-429c-b860-f2b71567d87e", "type": "forms/526", "attributes": { "veteran": { @@ -8087,8 +8156,8 @@ "id": "1", "type": "intent_to_file", "attributes": { - "creationDate": "2024-03-26", - "expirationDate": "2025-03-26", + "creationDate": "2024-04-23", + "expirationDate": "2025-04-23", "type": "compensation", "status": "active" } @@ -8807,7 +8876,7 @@ "status": "422", "detail": "Could not retrieve Power of Attorney due to multiple representatives with code: A1Q", "source": { - "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/base_controller.rb:112:in `representative'" + "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/base_controller.rb:130:in `representative'" } } ] @@ -8906,7 +8975,7 @@ "application/json": { "example": { "data": { - "id": "29b16b36-3108-411f-9f5f-2c1c2e147ea3", + "id": "48a79d49-eccd-4a89-adb8-e2c91ed3fab5", "type": "individual", "attributes": { "code": "083", @@ -9108,7 +9177,7 @@ "status": "404", "detail": "Could not find an Accredited Representative with registration number: 67890 and poa code: 083", "source": { - "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/individual_controller.rb:35:in `validate_individual_poa_code!'" + "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/base_controller.rb:70:in `validate_registration_number!'" } } ] @@ -9602,7 +9671,7 @@ "application/json": { "example": { "data": { - "id": "a7114d11-8ffd-4545-ad99-d70e74991e11", + "id": "7610ed19-baac-46fe-8ba5-5aa3e64a92ff", "type": "organization", "attributes": { "code": "083", @@ -9812,7 +9881,7 @@ "status": "404", "detail": "Could not find an Accredited Representative with registration number: 67890 and poa code: 083", "source": { - "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/organization_controller.rb:35:in `validate_org_poa_code!'" + "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/base_controller.rb:70:in `validate_registration_number!'" } } ] @@ -10431,7 +10500,7 @@ "status": "404", "detail": "Could not find an Accredited Representative with registration number: 67890 and poa code: 083", "source": { - "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/individual_controller.rb:35:in `validate_individual_poa_code!'" + "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/base_controller.rb:70:in `validate_registration_number!'" } } ] @@ -11126,7 +11195,7 @@ "status": "404", "detail": "Could not find an Accredited Representative with registration number: 67890 and poa code: 083", "source": { - "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/organization_controller.rb:35:in `validate_org_poa_code!'" + "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/base_controller.rb:70:in `validate_registration_number!'" } } ] @@ -11562,11 +11631,11 @@ "application/json": { "example": { "data": { - "id": "7b0c58e1-4bf7-413c-a3ab-c8f6b95208b0", + "id": "09a36719-ad88-46b9-97d1-80a746ef9e81", "type": "claimsApiPowerOfAttorneys", "attributes": { "status": "submitted", - "dateRequestAccepted": "2024-03-26", + "dateRequestAccepted": "2024-04-23", "representative": { "serviceOrganization": { "poaCode": "074" @@ -11802,4 +11871,4 @@ } } ] -} +} \ No newline at end of file diff --git a/modules/claims_api/app/swagger/claims_api/v2/production/swagger.json b/modules/claims_api/app/swagger/claims_api/v2/production/swagger.json index 64add52afd5..83308517114 100644 --- a/modules/claims_api/app/swagger/claims_api/v2/production/swagger.json +++ b/modules/claims_api/app/swagger/claims_api/v2/production/swagger.json @@ -684,7 +684,7 @@ "lighthouseId": null, "maxEstClaimDate": null, "minEstClaimDate": null, - "status": "COMPLETE", + "status": "CANCELED", "submitterApplicationCode": "EBN", "submitterRoleCode": "VET", "supportingDocuments": [ @@ -1342,6 +1342,7 @@ "serviceNumber": { "type": "string", "description": "Service identification number", + "maxLength": 1000, "nullable": true }, "veteranNumber": { @@ -1362,6 +1363,7 @@ "type": "string", "description": "Veteran's international phone number.", "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -1404,6 +1406,7 @@ "description": "City for the Veteran's current mailing address.", "type": "string", "pattern": "^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -1415,6 +1418,7 @@ "country": { "description": "Country for the Veteran's current mailing address. Must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -1500,6 +1504,7 @@ "description": "City for the Veteran's new address.", "type": "string", "pattern": "^$|^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -1511,6 +1516,7 @@ "country": { "description": "Country for the Veteran's new address. Value must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -1630,6 +1636,7 @@ "description": "International phone of point of contact.", "type": "string", "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -1664,12 +1671,14 @@ "type": "string", "nullable": true, "description": "Approximate begin date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" }, "endDate": { "type": "string", "nullable": true, "description": "Approximate end date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" } } @@ -1695,6 +1704,7 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Other location(s) where Veteran served." }, "serviceDates": { @@ -1748,6 +1758,7 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Exposure to asbestos." }, "exposureDates": { @@ -1786,12 +1797,14 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Hazard the Veteran was exposed to." }, "exposureLocation": { "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Location where the exposure happened." }, "exposureDates": { @@ -1843,6 +1856,7 @@ "type": "string", "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": [ "Agent Orange", "radiation", @@ -1853,6 +1867,7 @@ "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury. If the disabilityActionType is 'NEW', the serviceRelevance is required.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "approximateDate": { @@ -1915,6 +1930,7 @@ "type": "string", "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": [ "Agent Orange", "radiation", @@ -1925,6 +1941,7 @@ "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "disabilityActionType": { @@ -2057,6 +2074,7 @@ "serviceBranch": { "description": "Branch of service during period. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", + "maxLength": 1000, "example": "Air Force" }, "serviceComponent": { @@ -2136,10 +2154,12 @@ "unitName": { "type": "string", "nullable": true, + "maxLength": 1000, "pattern": "^$|([a-zA-Z0-9\\-'.,# ][a-zA-Z0-9\\-'.,# ]?)*$" }, "unitAddress": { "type": "string", + "maxLength": 1000, "pattern": "^$|^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", "nullable": true }, @@ -2249,6 +2269,7 @@ "futureMilitaryRetiredPayExplanation": { "description": "Explains why future pay will be received.", "type": "string", + "maxLength": 1000, "example": "Will be retiring soon.", "nullable": true }, @@ -2260,6 +2281,7 @@ "branchOfService": { "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", + "maxLength": 1000, "nullable": true, "example": "Air Force" }, @@ -2315,6 +2337,7 @@ "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Air Force" }, "preTaxAmountReceived": { @@ -2602,6 +2625,7 @@ "serviceNumber": { "type": "string", "description": "Service identification number", + "maxLength": 1000, "nullable": true }, "veteranNumber": { @@ -2622,6 +2646,7 @@ "type": "string", "description": "Veteran's international phone number.", "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -2664,6 +2689,7 @@ "description": "City for the Veteran's current mailing address.", "type": "string", "pattern": "^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -2675,6 +2701,7 @@ "country": { "description": "Country for the Veteran's current mailing address. Must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -2760,6 +2787,7 @@ "description": "City for the Veteran's new address.", "type": "string", "pattern": "^$|^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -2771,6 +2799,7 @@ "country": { "description": "Country for the Veteran's new address. Value must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -2890,6 +2919,7 @@ "description": "International phone of point of contact.", "type": "string", "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -2924,12 +2954,14 @@ "type": "string", "nullable": true, "description": "Approximate begin date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" }, "endDate": { "type": "string", "nullable": true, "description": "Approximate end date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" } } @@ -2955,6 +2987,7 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Other location(s) where Veteran served." }, "serviceDates": { @@ -3008,6 +3041,7 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Exposure to asbestos." }, "exposureDates": { @@ -3046,12 +3080,14 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Hazard the Veteran was exposed to." }, "exposureLocation": { "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Location where the exposure happened." }, "exposureDates": { @@ -3103,6 +3139,7 @@ "type": "string", "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": [ "Agent Orange", "radiation", @@ -3113,6 +3150,7 @@ "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury. If the disabilityActionType is 'NEW', the serviceRelevance is required.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "approximateDate": { @@ -3175,6 +3213,7 @@ "type": "string", "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": [ "Agent Orange", "radiation", @@ -3185,6 +3224,7 @@ "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "disabilityActionType": { @@ -3317,6 +3357,7 @@ "serviceBranch": { "description": "Branch of service during period. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", + "maxLength": 1000, "example": "Air Force" }, "serviceComponent": { @@ -3396,10 +3437,12 @@ "unitName": { "type": "string", "nullable": true, + "maxLength": 1000, "pattern": "^$|([a-zA-Z0-9\\-'.,# ][a-zA-Z0-9\\-'.,# ]?)*$" }, "unitAddress": { "type": "string", + "maxLength": 1000, "pattern": "^$|^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", "nullable": true }, @@ -3509,6 +3552,7 @@ "futureMilitaryRetiredPayExplanation": { "description": "Explains why future pay will be received.", "type": "string", + "maxLength": 1000, "example": "Will be retiring soon.", "nullable": true }, @@ -3520,6 +3564,7 @@ "branchOfService": { "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", + "maxLength": 1000, "nullable": true, "example": "Air Force" }, @@ -3575,6 +3620,7 @@ "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Air Force" }, "preTaxAmountReceived": { @@ -4407,6 +4453,7 @@ "serviceNumber": { "type": "string", "description": "Service identification number", + "maxLength": 1000, "nullable": true }, "veteranNumber": { @@ -4427,6 +4474,7 @@ "type": "string", "description": "Veteran's international phone number.", "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -4469,6 +4517,7 @@ "description": "City for the Veteran's current mailing address.", "type": "string", "pattern": "^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -4480,6 +4529,7 @@ "country": { "description": "Country for the Veteran's current mailing address. Must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -4565,6 +4615,7 @@ "description": "City for the Veteran's new address.", "type": "string", "pattern": "^$|^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -4576,6 +4627,7 @@ "country": { "description": "Country for the Veteran's new address. Value must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -4695,6 +4747,7 @@ "description": "International phone of point of contact.", "type": "string", "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -4729,12 +4782,14 @@ "type": "string", "nullable": true, "description": "Approximate begin date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" }, "endDate": { "type": "string", "nullable": true, "description": "Approximate end date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" } } @@ -4760,6 +4815,7 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Other location(s) where Veteran served." }, "serviceDates": { @@ -4813,6 +4869,7 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Exposure to asbestos." }, "exposureDates": { @@ -4851,12 +4908,14 @@ "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Hazard the Veteran was exposed to." }, "exposureLocation": { "type": "string", "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Location where the exposure happened." }, "exposureDates": { @@ -4908,6 +4967,7 @@ "type": "string", "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": [ "Agent Orange", "radiation", @@ -4918,6 +4978,7 @@ "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury. If the disabilityActionType is 'NEW', the serviceRelevance is required.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "approximateDate": { @@ -4980,6 +5041,7 @@ "type": "string", "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": [ "Agent Orange", "radiation", @@ -4990,6 +5052,7 @@ "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "disabilityActionType": { @@ -5122,6 +5185,7 @@ "serviceBranch": { "description": "Branch of service during period. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", + "maxLength": 1000, "example": "Air Force" }, "serviceComponent": { @@ -5201,10 +5265,12 @@ "unitName": { "type": "string", "nullable": true, + "maxLength": 1000, "pattern": "^$|([a-zA-Z0-9\\-'.,# ][a-zA-Z0-9\\-'.,# ]?)*$" }, "unitAddress": { "type": "string", + "maxLength": 1000, "pattern": "^$|^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", "nullable": true }, @@ -5314,6 +5380,7 @@ "futureMilitaryRetiredPayExplanation": { "description": "Explains why future pay will be received.", "type": "string", + "maxLength": 1000, "example": "Will be retiring soon.", "nullable": true }, @@ -5325,6 +5392,7 @@ "branchOfService": { "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", + "maxLength": 1000, "nullable": true, "example": "Air Force" }, @@ -5380,6 +5448,7 @@ "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", "nullable": true, + "maxLength": 1000, "example": "Air Force" }, "preTaxAmountReceived": { @@ -5720,7 +5789,7 @@ "application/json": { "example": { "data": { - "id": "8b3c6607-078b-419b-8549-726da40193df", + "id": "cfe5b467-a176-4987-80a9-4350ba73f350", "type": "forms/526", "attributes": { "veteran": { @@ -7804,8 +7873,8 @@ "id": "1", "type": "intent_to_file", "attributes": { - "creationDate": "2024-03-26", - "expirationDate": "2025-03-26", + "creationDate": "2024-04-23", + "expirationDate": "2025-04-23", "type": "compensation", "status": "active" } @@ -8524,7 +8593,7 @@ "status": "422", "detail": "Could not retrieve Power of Attorney due to multiple representatives with code: A1Q", "source": { - "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/base_controller.rb:112:in `representative'" + "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/base_controller.rb:130:in `representative'" } } ] @@ -8623,7 +8692,7 @@ "application/json": { "example": { "data": { - "id": "9a9b6db5-abfc-45f3-ab60-785e3fb052ed", + "id": "74658dd8-0176-4bd4-ac22-beedcef627df", "type": "individual", "attributes": { "code": "083", @@ -8825,7 +8894,7 @@ "status": "404", "detail": "Could not find an Accredited Representative with registration number: 67890 and poa code: 083", "source": { - "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/individual_controller.rb:35:in `validate_individual_poa_code!'" + "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/base_controller.rb:70:in `validate_registration_number!'" } } ] @@ -9319,7 +9388,7 @@ "application/json": { "example": { "data": { - "id": "618d9ba4-44cf-490a-bd56-8012b59b30e7", + "id": "f8eefcaa-020f-473e-9382-11dbd36f32ff", "type": "organization", "attributes": { "code": "083", @@ -9529,7 +9598,7 @@ "status": "404", "detail": "Could not find an Accredited Representative with registration number: 67890 and poa code: 083", "source": { - "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/organization_controller.rb:35:in `validate_org_poa_code!'" + "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/base_controller.rb:70:in `validate_registration_number!'" } } ] @@ -10148,7 +10217,7 @@ "status": "404", "detail": "Could not find an Accredited Representative with registration number: 67890 and poa code: 083", "source": { - "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/individual_controller.rb:35:in `validate_individual_poa_code!'" + "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/base_controller.rb:70:in `validate_registration_number!'" } } ] @@ -10843,7 +10912,7 @@ "status": "404", "detail": "Could not find an Accredited Representative with registration number: 67890 and poa code: 083", "source": { - "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/organization_controller.rb:35:in `validate_org_poa_code!'" + "pointer": "/modules/claims_api/app/controllers/claims_api/v2/veterans/power_of_attorney/base_controller.rb:70:in `validate_registration_number!'" } } ] @@ -11279,11 +11348,11 @@ "application/json": { "example": { "data": { - "id": "5d78a9f2-fffb-4867-a621-6ddee5bd5e58", + "id": "c08567c4-6f1d-49bb-8416-01b91642b301", "type": "claimsApiPowerOfAttorneys", "attributes": { "status": "submitted", - "dateRequestAccepted": "2024-03-26", + "dateRequestAccepted": "2024-04-23", "representative": { "serviceOrganization": { "poaCode": "074" @@ -11519,4 +11588,4 @@ } } ] -} +} \ No newline at end of file diff --git a/modules/claims_api/config/routes.rb b/modules/claims_api/config/routes.rb index 6f96c6ad271..3c6f5099d3b 100644 --- a/modules/claims_api/config/routes.rb +++ b/modules/claims_api/config/routes.rb @@ -50,7 +50,7 @@ post '/:veteranId/2122a/validate', to: 'individual#validate' post '/:veteranId/2122a', to: 'individual#submit' get '/:veteranId/power-of-attorney/:id', to: 'base#status' - post '/:veteranId/power-of-attorney/request-representative', to: 'base#request_representative' + post '/:veteranId/power-of-attorney-request', to: 'base#request_representative' end ## 0966 Forms get '/:veteranId/intent-to-file/:type', to: 'intent_to_file#type' @@ -61,6 +61,7 @@ post '/:veteranId/526/validate', to: 'disability_compensation#validate' post '/:veteranId/526/:id/attachments', to: 'disability_compensation#attachments' post '/:veteranId/526/generatePDF/minimum-validations', to: 'disability_compensation#generate_pdf' + post '/:veteranId/526/synchronous', to: 'disability_compensation#synchronous' end resources :power_of_attorney_requests, path: 'power-of-attorney-requests', only: [:index] diff --git a/modules/claims_api/config/schemas/v2/526.json b/modules/claims_api/config/schemas/v2/526.json index c498373a404..fe5cc33d1bc 100644 --- a/modules/claims_api/config/schemas/v2/526.json +++ b/modules/claims_api/config/schemas/v2/526.json @@ -27,6 +27,7 @@ "serviceNumber": { "type": ["null", "string"], "description": "Service identification number", + "maxLength": 1000, "nullable": true }, "veteranNumber": { @@ -47,6 +48,7 @@ "type": ["string", "null"], "description": "Veteran's international phone number.", "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -89,6 +91,7 @@ "description": "City for the Veteran's current mailing address.", "type": "string", "pattern": "^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -100,6 +103,7 @@ "country": { "description": "Country for the Veteran's current mailing address. Must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -182,6 +186,7 @@ "description": "City for the Veteran's new address.", "type": "string", "pattern": "^$|^([-a-zA-Z0-9'.#]([-a-zA-Z0-9'.# ])?)+$", + "maxLength": 1000, "example": "Portland" }, "state": { @@ -193,6 +198,7 @@ "country": { "description": "Country for the Veteran's new address. Value must match the values returned by the /countries endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current).", "type": "string", + "maxLength": 1000, "example": "USA" }, "zipFirstFive": { @@ -314,6 +320,7 @@ "description": "International phone of point of contact.", "type": ["string", "null"], "example": "+44 20 1234 5678", + "maxLength": 1000, "nullable": true } } @@ -345,12 +352,14 @@ "type": ["string", "null"], "nullable": true, "description": "Approximate begin date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" }, "endDate": { "type": ["string", "null"], "nullable": true, "description": "Approximate end date for serving in Gulf War hazard location.", + "pattern": "^(?:19|20)[0-9][0-9]$|^(?:19|20)[0-9][0-9]-(0[1-9]|1[0-2])$", "example": "2018-06 or 2018" } } @@ -373,6 +382,7 @@ "type": ["string", "null"], "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Other location(s) where Veteran served." }, "serviceDates": { @@ -427,6 +437,7 @@ "type": ["string", "null"], "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 5000, "description": "Exposure to asbestos." }, "exposureDates": { @@ -465,12 +476,14 @@ "type": ["string", "null"], "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Hazard the Veteran was exposed to." }, "exposureLocation": { "type": ["string", "null"], "nullable": true, "pattern": "^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", + "maxLength": 1000, "description": "Location where the exposure happened." }, "exposureDates": { @@ -519,12 +532,14 @@ "type": ["string", "null"], "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": ["Agent Orange", "radiation", "burn pits"] }, "serviceRelevance": { "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury. If the disabilityActionType is 'NEW', the serviceRelevance is required.", "type": ["string", "null"], "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "approximateDate": { @@ -583,12 +598,14 @@ "type": ["string", "null"], "description": "What caused the disability?", "nullable": true, + "maxLength": 1000, "examples": ["Agent Orange", "radiation", "burn pits"] }, "serviceRelevance": { "description": "Explanation of how the disability(ies) relates to the in-service event/exposure/injury.", "type": ["string", "null"], "nullable": true, + "maxLength": 1000, "example": "Heavy equipment operator in service." }, "disabilityActionType": { @@ -705,6 +722,7 @@ "serviceBranch": { "description": "Branch of service during period. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": "string", + "maxLength": 1000, "example": "Air Force" }, "serviceComponent": { @@ -774,10 +792,12 @@ "unitName": { "type": ["string", "null"], "nullable": true, + "maxLength": 1000, "pattern": "^$|([a-zA-Z0-9\\-'.,# ][a-zA-Z0-9\\-'.,# ]?)*$" }, "unitAddress": { "type": ["string", "null"], + "maxLength": 1000, "pattern": "^$|^([-a-zA-Z0-9'.,&#]([-a-zA-Z0-9'.,&# ])?)+$", "nullable": true }, @@ -878,6 +898,7 @@ "futureMilitaryRetiredPayExplanation": { "description": "Explains why future pay will be received.", "type": ["string", "null"], + "maxLength": 1000, "example": "Will be retiring soon.", "nullable": true }, @@ -889,6 +910,7 @@ "branchOfService": { "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": ["string", "null"], + "maxLength": 1000, "nullable": true, "example": "Air Force" }, @@ -942,6 +964,7 @@ "description": "Branch of service. The /service-branches endpoint on the [Benefits Reference Data API](https://developer.va.gov/explore/benefits/docs/benefits_reference_data?version=current) may be used to retrieve list of possible service branches.", "type": ["string", "null"], "nullable": true, + "maxLength": 1000, "example": "Air Force" }, "preTaxAmountReceived": { diff --git a/modules/claims_api/lib/bd/bd.rb b/modules/claims_api/lib/bd/bd.rb index a435e1bf067..dc72ecb6625 100644 --- a/modules/claims_api/lib/bd/bd.rb +++ b/modules/claims_api/lib/bd/bd.rb @@ -33,7 +33,7 @@ def search(claim_id, file_number) # Upload document of mapped claim # # @return success or failure - def upload(claim:, pdf_path:, doc_type: 'L122', file_number: nil) + def upload(claim:, pdf_path:, doc_type: 'L122', file_number: nil, original_filename: nil) unless File.exist? pdf_path ClaimsApi::Logger.log('benefits_documents', detail: "Error uploading doc to BD: #{pdf_path} doesn't exist", claim_id: claim&.id) @@ -41,7 +41,7 @@ def upload(claim:, pdf_path:, doc_type: 'L122', file_number: nil) end @multipart = true - body = generate_upload_body(claim:, doc_type:, pdf_path:, file_number:) + body = generate_upload_body(claim:, doc_type:, pdf_path:, file_number:, original_filename:) res = client.post('documents', body)&.body&.deep_symbolize_keys request_id = res&.dig(:data, :requestId) ClaimsApi::Logger.log( @@ -62,10 +62,11 @@ def upload(claim:, pdf_path:, doc_type: 'L122', file_number: nil) # Generate form body to upload a document # # @return {parameters, file} - def generate_upload_body(claim:, doc_type:, pdf_path:, file_number: nil) + def generate_upload_body(claim:, doc_type:, pdf_path:, file_number: nil, original_filename: nil) payload = {} veteran_name = "#{claim.auth_headers['va_eauth_firstName']}_#{claim.auth_headers['va_eauth_lastName']}" - file_name = "526EZ_#{veteran_name}_#{claim.evss_id}.pdf" + file_name = generate_file_name(doc_type:, veteran_name:, claim_id: claim.evss_id, original_filename:) + data = { data: { systemName: 'VA.gov', @@ -83,6 +84,25 @@ def generate_upload_body(claim:, doc_type:, pdf_path:, file_number: nil) payload end + def generate_file_name(doc_type:, veteran_name:, claim_id:, original_filename:) + if doc_type == 'L122' + "#{veteran_name}_#{claim_id}_526EZ.pdf" + else + filename = get_original_supporting_doc_file_name(original_filename) + "#{veteran_name}_#{claim_id}_#{filename}.pdf" + end + end + + ## + # DisabilityCompensationDocuments method create_unique_filename adds a random 11 digit + # hex string to the original filename, so we remove that to yield the user-submitted + # filename to use as part of the filename uploaded to the BD service. + def get_original_supporting_doc_file_name(original_filename) + file_extension = File.extname(original_filename) + base_filename = File.basename(original_filename, file_extension) + base_filename[0...-12] + end + ## # Configure Faraday base class (and do auth) # diff --git a/modules/claims_api/lib/bgs_service/veteran_representative_service.rb b/modules/claims_api/lib/bgs_service/veteran_representative_service.rb new file mode 100644 index 00000000000..7b798d89e24 --- /dev/null +++ b/modules/claims_api/lib/bgs_service/veteran_representative_service.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require_relative 'veteran_representative_service/read_all_veteran_representatives' + +module ClaimsApi + class VeteranRepresentativeService < ClaimsApi::LocalBGS + private + + def make_request(**args) + super( + endpoint: 'VDC/VeteranRepresentativeService', + namespaces: { 'ns0' => '/data' }, + transform_response: false, + **args + ) + end + end +end diff --git a/modules/claims_api/lib/bgs_service/veteran_representative_service/read_all_veteran_representatives.rb b/modules/claims_api/lib/bgs_service/veteran_representative_service/read_all_veteran_representatives.rb new file mode 100644 index 00000000000..b9de1f6f373 --- /dev/null +++ b/modules/claims_api/lib/bgs_service/veteran_representative_service/read_all_veteran_representatives.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +module ClaimsApi + class VeteranRepresentativeService < ClaimsApi::LocalBGS + # type_code: form type (I.E. 21-22 vs 21-22A) + # ptcpnt_id: participant ID + def read_all_veteran_representatives(type_code:, ptcpnt_id:) + validate! type_code, ptcpnt_id + + body = Nokogiri::XML::DocumentFragment.parse <<~EOXML + + #{ptcpnt_id} + #{type_code} + + EOXML + ret = make_request(action: 'readAllVeteranRepresentatives', body:) + &.dig('VeteranRepresentativeReturnList') || [] + [ret].flatten + end + + def validate_read_all_veteran_representatives(type_code:, ptcpnt_id:) + validate! type_code, ptcpnt_id + rescue + false + end + + private + + def validate!(type_code, ptcpnt_id) + errors = [] + errors << 'type_code is required' if type_code.nil? + errors << 'ptcpnt_id must be 1-15 digits and > 0' if ptcpnt_id.length > 15 || ptcpnt_id.to_i < 1 + + raise ArgumentError, "Errors: #{errors.join(', ')}" if errors.any? + end + end +end diff --git a/modules/claims_api/spec/fixtures/test_client.p12 b/modules/claims_api/spec/fixtures/test_client.p12 index 48fde3d8efa..b0e862698e9 100644 Binary files a/modules/claims_api/spec/fixtures/test_client.p12 and b/modules/claims_api/spec/fixtures/test_client.p12 differ diff --git a/modules/claims_api/spec/lib/claims_api/bd_spec.rb b/modules/claims_api/spec/lib/claims_api/bd_spec.rb index 67b2cb70d8c..33fa48aaf72 100644 --- a/modules/claims_api/spec/lib/claims_api/bd_spec.rb +++ b/modules/claims_api/spec/lib/claims_api/bd_spec.rb @@ -24,7 +24,8 @@ end it 'uploads an attachment to BD' do - result = subject.send(:generate_upload_body, claim:, doc_type: 'L023', pdf_path:) + result = subject.send(:generate_upload_body, claim:, doc_type: 'L023', original_filename: '21-526EZ.pdf', + pdf_path:) js = JSON.parse(result[:parameters].read) expect(js['data']['docType']).to eq 'L023' end diff --git a/modules/claims_api/spec/lib/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives_spec.rb b/modules/claims_api/spec/lib/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives_spec.rb new file mode 100644 index 00000000000..cdbabb597e4 --- /dev/null +++ b/modules/claims_api/spec/lib/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives_spec.rb @@ -0,0 +1,130 @@ +# frozen_string_literal: true + +require 'rails_helper' +require 'bgs_service/veteran_representative_service' +require Rails.root.join('modules', 'claims_api', 'spec', 'support', 'bgs_client_helpers.rb') + +metadata = { + bgs: { + service: 'veteran_representative_service', + operation: 'read_all_veteran_representatives' + }, + run_at: '2024-04-17T23:10:31+00:00' +} + +describe ClaimsApi::VeteranRepresentativeService, metadata do + describe '#read_all_veteran_representatives' do + subject do + service = described_class.new(**header_params) + service.read_all_veteran_representatives(**params) + end + + describe 'with valid external uid and key' do + let(:header_params) do + { + external_uid: 'xUid', + external_key: 'xKey' + } + end + + describe 'with no params' do + let(:params) { {} } + + it 'raises ArgumentError' do + use_bgs_cassette('no_params') do + expect { subject }.to raise_error(ArgumentError) + end + end + end + + describe 'with no type_code param' do + let(:params) { { ptcpnt_id: '123456' } } + + it 'raises ArgumentError' do + expect { subject }.to raise_error(ArgumentError) + end + end + + describe 'with invalid ptcpnt_id param' do + let(:params) do + { + type_code: '21-22', + ptcpnt_id: '0' + } + end + + it 'raises ArgumentError' do + expect { subject }.to raise_error(ArgumentError) + end + end + + describe 'with no ptcpnt_id param' do + let(:params) { { type_code: '21-22' } } + + it 'raises ArgumentError' do + expect { subject }.to raise_error(ArgumentError) + end + end + + describe 'with valid individual params' do + let(:params) do + { + type_code: '21-22A', + ptcpnt_id: '600043201' + } + end + + it 'returns poa requests' do + use_bgs_cassette('valid_individual') do + expect(subject.size).to eq(4) + end + end + end + + describe 'with valid org params' do + let(:params) do + { + type_code: '21-22', + ptcpnt_id: '600043201' + } + end + + it 'returns poa requests' do + use_bgs_cassette('valid_org') do + expect(subject.size).to eq(6) + end + end + end + + describe 'with a single response' do + let(:params) do + { + type_code: '21-22', + ptcpnt_id: '600043201' + } + end + + it 'handles object vs array' do + use_bgs_cassette('valid_org_single') do + expect(subject.size).to eq(1) + end + end + end + + describe 'with an empty response' do + let(:params) do + { + type_code: '21-22', + ptcpnt_id: '1' + } + end + + it 'returns an empty array' do + use_bgs_cassette('empty_response') do + expect(subject.size).to eq(0) + end + end + end + end + end +end diff --git a/modules/claims_api/spec/requests/v2/veterans/disability_compensation_request_spec.rb b/modules/claims_api/spec/requests/v2/veterans/disability_compensation_request_spec.rb index 6a8fa664169..6574c3f44ca 100644 --- a/modules/claims_api/spec/requests/v2/veterans/disability_compensation_request_spec.rb +++ b/modules/claims_api/spec/requests/v2/veterans/disability_compensation_request_spec.rb @@ -3946,4 +3946,19 @@ end end end + + describe 'POST #synchronous' do + let(:veteran_id) { '1012832025V743496' } + let(:synchronous_path) { "/services/claims/v2/veterans/#{veteran_id}/526/synchronous" } + + context 'when the endpoint is hit' do + it 'returns an empty test object' do + mock_ccg(scopes) do |auth_header| + post synchronous_path, params: {}.to_json, headers: auth_header + + expect(JSON.parse(response.body)).to eq({}) + end + end + end + end end diff --git a/modules/claims_api/spec/requests/v2/veterans/power_of_attorney_request_spec.rb b/modules/claims_api/spec/requests/v2/veterans/power_of_attorney_request_spec.rb index 186e5f5ee5b..6aaf02c61a1 100644 --- a/modules/claims_api/spec/requests/v2/veterans/power_of_attorney_request_spec.rb +++ b/modules/claims_api/spec/requests/v2/veterans/power_of_attorney_request_spec.rb @@ -8,7 +8,7 @@ RSpec.describe 'Power Of Attorney', type: :request do let(:veteran_id) { '1013062086V794840' } let(:get_poa_path) { "/services/claims/v2/veterans/#{veteran_id}/power-of-attorney" } - let(:request_rep_path) { "/services/claims/v2/veterans/#{veteran_id}/power-of-attorney/request-representative" } + let(:request_rep_path) { "/services/claims/v2/veterans/#{veteran_id}/power-of-attorney-request" } let(:scopes) { %w[system/claim.write system/claim.read] } let(:invalid_post_scopes) { %w[system/claim.read] } let(:individual_poa_code) { 'A1H' } diff --git a/modules/claims_api/spec/sidekiq/claim_uploader_spec.rb b/modules/claims_api/spec/sidekiq/claim_uploader_spec.rb index 099cfb01737..0c2b94d2ef9 100644 --- a/modules/claims_api/spec/sidekiq/claim_uploader_spec.rb +++ b/modules/claims_api/spec/sidekiq/claim_uploader_spec.rb @@ -56,6 +56,8 @@ claim end + let(:original_filename) { 'extras' } + it 'submits successfully' do expect do subject.perform_async(supporting_document.id) @@ -134,7 +136,7 @@ allow(Tempfile).to receive(:new).and_return tf allow(Flipper).to receive(:enabled?).with(:claims_claim_uploader_use_bd).and_return true - args = { claim: auto_claim, doc_type: 'L122', pdf_path: tf.path } + args = { claim: auto_claim, doc_type: 'L122', original_filename: 'extras.pdf', pdf_path: tf.path } expect_any_instance_of(ClaimsApi::BD).to receive(:upload).with(args).and_return true subject.new.perform(auto_claim.id) end @@ -144,7 +146,8 @@ allow(Tempfile).to receive(:new).and_return tf allow(Flipper).to receive(:enabled?).with(:claims_claim_uploader_use_bd).and_return true - args = { claim: supporting_document.auto_established_claim, doc_type: 'L023', pdf_path: tf.path } + args = { claim: supporting_document.auto_established_claim, doc_type: 'L023', + original_filename: 'extras.pdf', pdf_path: tf.path } expect_any_instance_of(ClaimsApi::BD).to receive(:upload).with(args).and_return true subject.new.perform(supporting_document.id) end @@ -161,7 +164,8 @@ text: 'Error calling external service to upload claim document.' } ] } - args = { claim: supporting_document.auto_established_claim, doc_type: 'L023', pdf_path: tf.path } + args = { claim: supporting_document.auto_established_claim, doc_type: 'L023', + original_filename: 'extras.pdf', pdf_path: tf.path } allow_any_instance_of(ClaimsApi::BD).to( receive(:upload).with(args).and_raise(Common::Exceptions::BackendServiceException.new( '', {}, 500, body diff --git a/modules/debts_api/app/controllers/debts_api/v0/financial_status_reports_controller.rb b/modules/debts_api/app/controllers/debts_api/v0/financial_status_reports_controller.rb index 76ec33c8869..1cff11148e6 100644 --- a/modules/debts_api/app/controllers/debts_api/v0/financial_status_reports_controller.rb +++ b/modules/debts_api/app/controllers/debts_api/v0/financial_status_reports_controller.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'debts_api/v0/financial_status_report_service' +require 'debts_api/v0/fsr_rehydration_service' module DebtsApi module V0 @@ -23,6 +24,27 @@ def download_pdf ) end + def submissions + submissions = DebtsApi::V0::Form5655Submission.where(user_uuid: current_user.uuid) + render json: { 'submissions' => submissions.map { |sub| { 'id' => sub.id } } } + end + + def rehydrate + submission_id = params[:submission_id] + + DebtsApi::V0::FsrRehydrationService.attempt_rehydration(user_uuid: current_user.uuid, submission_id:) + + render json: { result: 'FSR rehydrated' } + rescue ActiveRecord::RecordNotFound + render json: { error: "Form5655Submission record #{submission_id} not found." }, status: :not_found + rescue DebtsApi::V0::FsrRehydrationService::UserDoesNotOwnsubmission + render json: { error: "User #{current_user.uuid} does not own submission #{submission_id}" }, + status: :unauthorized + rescue DebtsApi::V0::FsrRehydrationService::NoInProgressFormDataStored + render json: { error: "Form5655Submission record #{submission_id} missing InProgressForm data", + status: :not_found } + end + private def render_not_found diff --git a/modules/debts_api/app/models/debts_api/v0/form5655_submission.rb b/modules/debts_api/app/models/debts_api/v0/form5655_submission.rb index 9451214c3a3..8d9452efc34 100644 --- a/modules/debts_api/app/models/debts_api/v0/form5655_submission.rb +++ b/modules/debts_api/app/models/debts_api/v0/form5655_submission.rb @@ -96,5 +96,38 @@ def register_success def streamlined? public_metadata.dig('streamlined', 'value') == true end + + def upsert_in_progress_form + form = InProgressForm.find_or_initialize_by(form_id: '5655', user_uuid:) + form.user_account = user_account_from_uuid(user_uuid) + form.real_user_uuid = user_uuid + + form.update!(form_data: ipf_data, metadata: fresh_metadata) + end + + def fresh_metadata + { + 'return_url' => '/review-and-submit', + 'submission' => { + 'status' => false, + 'error_message' => false, + 'id' => false, + 'timestamp' => false, + 'has_attempted_submit' => false + }, + 'saved_at' => Time.now.to_i, + 'created_at' => Time.now.to_i, + 'expiresAt' => (DateTime.now + 60).to_time.to_i, + 'lastUpdated' => Time.now.to_i, + 'inProgressFormId' => '5655' + } + end + + def user_account_from_uuid(user_uuid) + UserVerification.where(idme_uuid: user_uuid) + .or(UserVerification.where(logingov_uuid: user_uuid)) + .or(UserVerification.where(backing_idme_uuid: user_uuid)) + .last&.user_account + end end end diff --git a/modules/debts_api/config/routes.rb b/modules/debts_api/config/routes.rb index 6b3ab5c1b7a..5fbb494ba96 100644 --- a/modules/debts_api/config/routes.rb +++ b/modules/debts_api/config/routes.rb @@ -5,9 +5,12 @@ resources :financial_status_reports, only: %i[create] do collection do get :download_pdf + get :submissions end end + get 'financial_status_reports/rehydrate_submission/:submission_id', to: 'financial_status_reports#rehydrate' + post 'calculate_total_assets', to: 'financial_status_reports_calculations#total_assets' post 'calculate_monthly_expenses', to: 'financial_status_reports_calculations#monthly_expenses' post 'calculate_all_expenses', to: 'financial_status_reports_calculations#all_expenses' diff --git a/modules/debts_api/lib/debts_api/v0/fsr_rehydration_service.rb b/modules/debts_api/lib/debts_api/v0/fsr_rehydration_service.rb new file mode 100644 index 00000000000..c66130b30b5 --- /dev/null +++ b/modules/debts_api/lib/debts_api/v0/fsr_rehydration_service.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +module DebtsApi + class V0::FsrRehydrationService + include SentryLogging + + class UserDoesNotOwnsubmission < StandardError; end + class NoInProgressFormDataStored < StandardError; end + + def self.attempt_rehydration(user_uuid:, submission_id:) + submission = DebtsApi::V0::Form5655Submission.find(submission_id) + + raise NoInProgressFormDataStored unless submission.ipf_data + raise UserDoesNotOwnsubmission unless submission.user_uuid == user_uuid + + submission.upsert_in_progress_form + end + end +end diff --git a/modules/debts_api/spec/models/debt_api/v0/form5655_submission_spec.rb b/modules/debts_api/spec/models/debt_api/v0/form5655_submission_spec.rb index c9ef1655198..12984d5e70d 100644 --- a/modules/debts_api/spec/models/debt_api/v0/form5655_submission_spec.rb +++ b/modules/debts_api/spec/models/debt_api/v0/form5655_submission_spec.rb @@ -39,6 +39,42 @@ end end + describe '.upsert_in_progress_form' do + let(:user) { create(:form5655_submission) } + let(:form5655_submission) { create(:debts_api_form5655_submission, user_uuid: 'b2fab2b56af045e1a9e2394347af91ef') } + let(:in_progress_form) { create(:in_progress_5655_form, user_uuid: 'b2fab2b5-6af0-45e1-a9e2-394347af91ef') } + + context 'without a related InProgressForm' do + it 'updates the related form' do + in_progress_form.destroy! + form = InProgressForm.find_by(form_id: '5655', user_uuid: form5655_submission.user_uuid) + expect(form).to be_nil + + data = '{"its":"me"}' + form5655_submission.ipf_data = data + form5655_submission.upsert_in_progress_form + form = InProgressForm.find_by(form_id: '5655', user_uuid: form5655_submission.user_uuid) + expect(form&.form_data).to eq(data) + end + end + + context 'with a related InProgressForm' do + it 'updates the related form' do + data = '{"its":"me"}' + form5655_submission + in_progress_form + form = InProgressForm.find_by(form_id: '5655', user_uuid: form5655_submission.user_uuid) + expect(form).to be_present + expect(form&.form_data).not_to eq(data) + + form5655_submission.ipf_data = data + form5655_submission.upsert_in_progress_form + form = InProgressForm.find_by(form_id: '5655', user_uuid: form5655_submission.user_uuid) + expect(form&.form_data).to eq(data) + end + end + end + describe '.submit_to_vba' do let(:form5655_submission) { create(:debts_api_form5655_submission) } let(:guy) { create(:form5655_submission) } diff --git a/modules/debts_api/spec/request/debts_api/v0/financial_status_reports_controller_spec.rb b/modules/debts_api/spec/request/debts_api/v0/financial_status_reports_controller_spec.rb index 63be330783b..35f7955f963 100644 --- a/modules/debts_api/spec/request/debts_api/v0/financial_status_reports_controller_spec.rb +++ b/modules/debts_api/spec/request/debts_api/v0/financial_status_reports_controller_spec.rb @@ -59,4 +59,39 @@ def mock_pdf_fill expect(response.body).to eq(content) end end + + describe '#rehydrate' do + context 'on a nonexistent submission' do + it 'renders a 404' do + get '/debts_api/v0/financial_status_reports/rehydrate_submission/1' + expect(response).to have_http_status(:not_found) + end + end + + context 'on a submission you don\'t own' do + let(:form5655_submission) { create(:debts_api_form5655_submission) } + + it 'renders a 404' do + form5655_submission + form5655_submission.update!(user_uuid: 'nottherightguy', ipf_data: '{"its":"me"}') + get "/debts_api/v0/financial_status_reports/rehydrate_submission/#{form5655_submission.id}" + expect(response.code).to eq('401') + body = "{\"error\":\"User #{user.uuid} does not own submission #{form5655_submission.id}\"}" + expect(response.body).to eq(body) + end + end + + context 'on a submission you do own' do + let(:form5655_submission) do + create(:debts_api_form5655_submission, user_uuid: 'b2fab2b56af045e1a9e2394347af91ef') + end + + it 'rehydrates In Progress Form' do + form5655_submission + form5655_submission.update!(user_uuid: user.uuid, ipf_data: '{"its":"me"}') + get "/debts_api/v0/financial_status_reports/rehydrate_submission/#{form5655_submission.id}" + expect(response.code).to eq('200') + end + end + end end diff --git a/modules/ivc_champva/app/controllers/ivc_champva/v1/uploads_controller.rb b/modules/ivc_champva/app/controllers/ivc_champva/v1/uploads_controller.rb index a5a359ab603..b8c706a61df 100644 --- a/modules/ivc_champva/app/controllers/ivc_champva/v1/uploads_controller.rb +++ b/modules/ivc_champva/app/controllers/ivc_champva/v1/uploads_controller.rb @@ -29,7 +29,7 @@ def submit end def submit_supporting_documents - if %w[10-10D 10-7959F-2].include?(params[:form_id]) + if %w[10-10D 10-7959C 10-7959F-2].include?(params[:form_id]) attachment = PersistentAttachments::MilitaryRecords.new(form_id: params[:form_id]) attachment.file = params['file'] raise Common::Exceptions::ValidationErrors, attachment unless attachment.valid? diff --git a/modules/ivc_champva/lib/tasks/forms.rake b/modules/ivc_champva/lib/tasks/forms.rake index c70f17e175d..d8b827c7dd9 100644 --- a/modules/ivc_champva/lib/tasks/forms.rake +++ b/modules/ivc_champva/lib/tasks/forms.rake @@ -1,7 +1,7 @@ # frozen_string_literal: true -PDFTK_HOMEBREW_PATH = '/opt/homebrew/bin/pdftk' -PDFTK_LOCAL_PATH = '/usr/local/bin/pdftk' +PDFTK_HOMEBREW_PATH = '/opt/homebrew/bin/pdftk' unless defined?(PDFTK_HOMEBREW_PATH) +PDFTK_LOCAL_PATH = '/usr/local/bin/pdftk' unless defined?(PDFTK_LOCAL_PATH) MODELS_PATH = 'modules/ivc_champva/app/models/ivc_champva' MAPPINGS_PATH = 'modules/ivc_champva/app/form_mappings' diff --git a/modules/mobile/app/controllers/mobile/messaging_controller.rb b/modules/mobile/app/controllers/mobile/messaging_controller.rb index 3d6487d4cb3..baab31da4e4 100644 --- a/modules/mobile/app/controllers/mobile/messaging_controller.rb +++ b/modules/mobile/app/controllers/mobile/messaging_controller.rb @@ -47,11 +47,7 @@ def pagination_params private def mhv_messaging_authorized? - if Flipper.enabled?(:mobile_sm_session_policy, current_user) - current_user.authorize(:mhv_messaging, :mobile_access?) - else - current_user.authorize(:legacy_mhv_messaging, :access?) - end + current_user.authorize(:mhv_messaging, :mobile_access?) end end end diff --git a/modules/mobile/app/controllers/mobile/v0/payment_information_controller.rb b/modules/mobile/app/controllers/mobile/v0/payment_information_controller.rb index 643c9fffb8f..15d3c347b81 100644 --- a/modules/mobile/app/controllers/mobile/v0/payment_information_controller.rb +++ b/modules/mobile/app/controllers/mobile/v0/payment_information_controller.rb @@ -104,7 +104,7 @@ def validate_pay_info end def send_lighthouse_confirmation_email - VANotifyDdEmailJob.send_to_emails(@current_user.all_emails) + VANotifyDdEmailJob.send_to_emails(@current_user.all_emails, 'comp_and_pen') end end end diff --git a/modules/mobile/app/models/mobile/v0/user_accessible_services.rb b/modules/mobile/app/models/mobile/v0/user_accessible_services.rb index 4758b59fd43..0ec0dee301e 100644 --- a/modules/mobile/app/models/mobile/v0/user_accessible_services.rb +++ b/modules/mobile/app/models/mobile/v0/user_accessible_services.rb @@ -37,8 +37,7 @@ def service_auth_map preferredName: access?(demographics: :access_update?) && access?(mpi: :queryable?), prescriptions: access?(mhv_prescriptions: :access?), scheduleAppointments: access?(schedule_appointment: :access?), - secureMessaging: flagged_access?(:mobile_sm_session_policy, { mhv_messaging: :mobile_access? }, - { legacy_mhv_messaging: :access? }), + secureMessaging: access?(mhv_messaging: :mobile_access?), userProfileUpdate: access?(vet360: :access?) } end diff --git a/modules/mobile/spec/models/user_accessible_services_spec.rb b/modules/mobile/spec/models/user_accessible_services_spec.rb index b2c5f378246..c93a7fc8598 100644 --- a/modules/mobile/spec/models/user_accessible_services_spec.rb +++ b/modules/mobile/spec/models/user_accessible_services_spec.rb @@ -397,39 +397,16 @@ before { Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) } after { Timecop.return } - context 'when using old authorization policy' do - before { Flipper.disable(:mobile_sm_session_policy) } - - context 'when user does not have mhv_messaging access' do - it 'is false' do - expect(user_services.service_auth_map[:secureMessaging]).to be(false) - end - end - - context 'when user does have mhv_messaging access' do - let(:user) { build(:user, :mhv) } - - it 'is true' do - expect(user_services.service_auth_map[:secureMessaging]).to be_truthy - end + context 'when user does not have mhv_messaging access' do + it 'is false' do + expect(user_services.service_auth_map[:secureMessaging]).to be(false) end end - context 'when using new session authorization policy' do - before { Flipper.enable_actor(:mobile_sm_session_policy, user) } - after { Flipper.disable(:mobile_sm_session_policy) } - - context 'when user does not have mhv_messaging access' do - it 'is false' do - expect(user_services.service_auth_map[:secureMessaging]).to be(false) - end - end - - context 'when user does have mhv_messaging access' do - it 'is true' do - VCR.use_cassette('sm_client/session') do - expect(user_services.service_auth_map[:secureMessaging]).to be_truthy - end + context 'when user does have mhv_messaging access' do + it 'is true' do + VCR.use_cassette('sm_client/session') do + expect(user_services.service_auth_map[:secureMessaging]).to be_truthy end end end diff --git a/modules/mobile/spec/request/appointments_create_request_spec.rb b/modules/mobile/spec/request/appointments_create_request_spec.rb index e3fa7cb4a6d..17051edd055 100644 --- a/modules/mobile/spec/request/appointments_create_request_spec.rb +++ b/modules/mobile/spec/request/appointments_create_request_spec.rb @@ -61,70 +61,188 @@ end context 'when feature flag is on and user has access' do - it 'returns created' do - VCR.use_cassette('mobile/appointments/post_appointments_va_booked_200_JACQUELINE_M', - match_requests_on: %i[method uri]) do - VCR.use_cassette('mobile/appointments/VAOS_v2/get_facilities_200', match_requests_on: %i[method uri]) do - post '/mobile/v0/appointment', params: {}, headers: sis_headers - expect(response).to have_http_status(:created) + context 'using VAOS' do + before do + Flipper.disable(:va_online_scheduling_use_vpg) + Flipper.disable(:va_online_scheduling_enable_OH_requests) + end + + it 'returns created' do + VCR.use_cassette('mobile/appointments/post_appointments_va_booked_200_JACQUELINE_M', + match_requests_on: %i[method uri]) do + VCR.use_cassette('mobile/appointments/VAOS_v2/get_facilities_200', match_requests_on: %i[method uri]) do + post '/mobile/v0/appointment', params: {}, headers: sis_headers + expect(response).to have_http_status(:created) + end + end + end + end + + context 'using VPG' do + before do + Flipper.enable(:va_online_scheduling_use_vpg) + Flipper.enable(:va_online_scheduling_enable_OH_requests) + end + + it 'returns created' do + VCR.use_cassette('mobile/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg', + match_requests_on: %i[method uri]) do + VCR.use_cassette('mobile/appointments/VAOS_v2/get_facilities_200', match_requests_on: %i[method uri]) do + post '/mobile/v0/appointment', params: {}, headers: sis_headers + expect(response).to have_http_status(:created) + end end end end end end - it 'clears the cache' do - expect(Mobile::V0::Appointment).to receive(:clear_cache).once + context 'using VAOS' do + before do + Flipper.disable(:va_online_scheduling_use_vpg) + Flipper.disable(:va_online_scheduling_enable_OH_requests) + end - VCR.use_cassette('mobile/appointments/post_appointments_va_proposed_clinic_200', - match_requests_on: %i[method uri]) do - post '/mobile/v0/appointment', params: va_proposed_request_body, headers: sis_headers + it 'clears the cache' do + expect(Mobile::V0::Appointment).to receive(:clear_cache).once + + VCR.use_cassette('mobile/appointments/post_appointments_va_proposed_clinic_200', + match_requests_on: %i[method uri]) do + post '/mobile/v0/appointment', params: va_proposed_request_body, headers: sis_headers + end + end + + it 'returns a descriptive 400 error when given invalid params' do + VCR.use_cassette('mobile/appointments/post_appointments_400', match_requests_on: %i[method uri]) do + post '/mobile/v0/appointment', params: {}, headers: sis_headers + expect(response).to have_http_status(:bad_request) + expect(JSON.parse(response.body)['errors'][0]['status']).to eq('400') + expect(JSON.parse(response.body)['errors'][0]['detail']).to eq( + 'the patientIcn must match the ICN in the request URI' + ) + end end end - it 'returns a descriptive 400 error when given invalid params' do - VCR.use_cassette('mobile/appointments/post_appointments_400', match_requests_on: %i[method uri]) do - post '/mobile/v0/appointment', params: {}, headers: sis_headers - expect(response).to have_http_status(:bad_request) - expect(JSON.parse(response.body)['errors'][0]['status']).to eq('400') - expect(JSON.parse(response.body)['errors'][0]['detail']).to eq( - 'the patientIcn must match the ICN in the request URI' - ) + context 'using VPG' do + before do + Flipper.enable(:va_online_scheduling_use_vpg) + Flipper.enable(:va_online_scheduling_enable_OH_requests) + end + + it 'clears the cache' do + expect(Mobile::V0::Appointment).to receive(:clear_cache).once + + VCR.use_cassette('mobile/appointments/post_appointments_va_proposed_clinic_200_vpg', + match_requests_on: %i[method uri]) do + post '/mobile/v0/appointment', params: va_proposed_request_body, headers: sis_headers + end + end + + it 'returns a descriptive 400 error when given invalid params' do + VCR.use_cassette('mobile/appointments/post_appointments_400_vpg', match_requests_on: %i[method uri]) do + post '/mobile/v0/appointment', params: {}, headers: sis_headers + expect(response).to have_http_status(:bad_request) + expect(JSON.parse(response.body)['errors'][0]['status']).to eq('400') + expect(JSON.parse(response.body)['errors'][0]['detail']).to eq( + 'the patientIcn must match the ICN in the request URI' + ) + end end end context 'for CC facility' do - it 'creates the cc appointment' do - VCR.use_cassette('mobile/appointments/post_appointments_cc_200_2222022', match_requests_on: %i[method uri]) do - VCR.use_cassette('mobile/appointments/VAOS_v2/get_facilities_200', match_requests_on: %i[method uri]) do - post '/mobile/v0/appointment', params: community_cares_request_body, headers: sis_headers - expect(response).to have_http_status(:created) - expect(json_body_for(response)).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + context 'for VAOS' do + before do + Flipper.disable(:va_online_scheduling_use_vpg) + Flipper.disable(:va_online_scheduling_enable_OH_requests) + end + + it 'creates the cc appointment' do + VCR.use_cassette('mobile/appointments/post_appointments_cc_200_2222022', match_requests_on: %i[method uri]) do + VCR.use_cassette('mobile/appointments/VAOS_v2/get_facilities_200', match_requests_on: %i[method uri]) do + post '/mobile/v0/appointment', params: community_cares_request_body, headers: sis_headers + expect(response).to have_http_status(:created) + expect(json_body_for(response)).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + end + end + end + end + + context 'for VPG' do + before do + Flipper.enable(:va_online_scheduling_use_vpg) + Flipper.enable(:va_online_scheduling_enable_OH_requests) + end + + it 'creates the cc appointment' do + VCR.use_cassette('mobile/appointments/post_appointments_cc_200_2222022_vpg', + match_requests_on: %i[method uri]) do + VCR.use_cassette('mobile/appointments/VAOS_v2/get_facilities_200', match_requests_on: %i[method uri]) do + post '/mobile/v0/appointment', params: community_cares_request_body, headers: sis_headers + expect(response).to have_http_status(:created) + expect(json_body_for(response)).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + end end end end end context 'for va facility' do - it 'creates the va appointment - proposed' do - VCR.use_cassette('mobile/appointments/post_appointments_va_proposed_clinic_200', - match_requests_on: %i[method uri]) do - post '/mobile/v0/appointment', params: {}, headers: sis_headers + context 'using VAOS' do + before do + Flipper.disable(:va_online_scheduling_use_vpg) + Flipper.disable(:va_online_scheduling_enable_OH_requests) + end + + it 'creates the va appointment - proposed' do + VCR.use_cassette('mobile/appointments/post_appointments_va_proposed_clinic_200', + match_requests_on: %i[method uri]) do + post '/mobile/v0/appointment', params: {}, headers: sis_headers - expect(response).to have_http_status(:created) - expect(json_body_for(response)).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + expect(response).to have_http_status(:created) + expect(json_body_for(response)).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + end + end + + it 'creates the va appointment - booked' do + VCR.use_cassette('mobile/appointments/post_appointments_va_booked_200_JACQUELINE_M', + match_requests_on: %i[method uri]) do + VCR.use_cassette('mobile/appointments/VAOS_v2/get_facilities_200', match_requests_on: %i[method uri]) do + post '/mobile/v0/appointment', params: {}, headers: sis_headers + expect(response).to have_http_status(:created) + expect(json_body_for(response)).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + end + end end end - it 'creates the va appointment - booked' do - VCR.use_cassette('mobile/appointments/post_appointments_va_booked_200_JACQUELINE_M', - match_requests_on: %i[method uri]) do - VCR.use_cassette('mobile/appointments/VAOS_v2/get_facilities_200', match_requests_on: %i[method uri]) do + context 'using VPG' do + before do + Flipper.enable(:va_online_scheduling_use_vpg) + Flipper.enable(:va_online_scheduling_enable_OH_requests) + end + + it 'creates the va appointment - proposed' do + VCR.use_cassette('mobile/appointments/post_appointments_va_proposed_clinic_200_vpg', + match_requests_on: %i[method uri]) do post '/mobile/v0/appointment', params: {}, headers: sis_headers + expect(response).to have_http_status(:created) expect(json_body_for(response)).to match_camelized_schema('vaos/v2/appointment', { strict: false }) end end + + it 'creates the va appointment - booked' do + VCR.use_cassette('mobile/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg', + match_requests_on: %i[method uri]) do + VCR.use_cassette('mobile/appointments/VAOS_v2/get_facilities_200', match_requests_on: %i[method uri]) do + post '/mobile/v0/appointment', params: {}, headers: sis_headers + expect(response).to have_http_status(:created) + expect(json_body_for(response)).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + end + end + end end end end diff --git a/modules/mobile/spec/request/attachments_request_spec.rb b/modules/mobile/spec/request/attachments_request_spec.rb index 0202cfbc2e6..7e0acd579b5 100644 --- a/modules/mobile/spec/request/attachments_request_spec.rb +++ b/modules/mobile/spec/request/attachments_request_spec.rb @@ -10,12 +10,10 @@ let(:message_id) { 573_302 } before do - Flipper.enable_actor(:mobile_sm_session_policy, user) Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) end after do - Flipper.disable(:mobile_sm_session_policy) Timecop.return end diff --git a/modules/mobile/spec/request/folders_request_spec.rb b/modules/mobile/spec/request/folders_request_spec.rb index b0baecbf642..c495184dc2b 100644 --- a/modules/mobile/spec/request/folders_request_spec.rb +++ b/modules/mobile/spec/request/folders_request_spec.rb @@ -10,12 +10,10 @@ let(:inbox_id) { 0 } before do - Flipper.enable_actor(:mobile_sm_session_policy, user) Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) end after do - Flipper.disable(:mobile_sm_session_policy) Timecop.return end diff --git a/modules/mobile/spec/request/message_drafts_request_spec.rb b/modules/mobile/spec/request/message_drafts_request_spec.rb index d5ad53f5049..835da8ba96e 100644 --- a/modules/mobile/spec/request/message_drafts_request_spec.rb +++ b/modules/mobile/spec/request/message_drafts_request_spec.rb @@ -15,12 +15,10 @@ let(:draft_signature_only) { attributes_for(:message, body: '\n\n\n\nSignature\nExample', subject: 'Subject 1') } before do - Flipper.enable_actor(:mobile_sm_session_policy, user) Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) end after do - Flipper.disable(:mobile_sm_session_policy) Timecop.return end diff --git a/modules/mobile/spec/request/messages_request_spec.rb b/modules/mobile/spec/request/messages_request_spec.rb index c40a89d2be3..3c1aadb7a48 100644 --- a/modules/mobile/spec/request/messages_request_spec.rb +++ b/modules/mobile/spec/request/messages_request_spec.rb @@ -12,246 +12,215 @@ before { Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) } after do - Flipper.disable(:mobile_sm_session_policy) Timecop.return end - context 'when using old authorization policy' do - before { Flipper.disable(:mobile_sm_session_policy) } + context 'when user does not have access' do + let!(:user) { sis_user(:mhv, mhv_correlation_id: nil) } - context 'when user does not have access' do - let!(:user) { sis_user(:mhv, mhv_account_type: 'Free') } + it 'returns forbidden' do + get '/mobile/v0/messaging/health/messages/categories', headers: sis_headers - it 'returns forbidden' do - get '/mobile/v0/messaging/health/messages/categories', headers: sis_headers - - expect(response).to have_http_status(:forbidden) - end + expect(response).to have_http_status(:forbidden) end + end - it 'responds to GET messages/categories' do - VCR.use_cassette('sm_client/session') do - VCR.use_cassette('sm_client/messages/gets_message_categories') do - get '/mobile/v0/messaging/health/messages/categories', headers: sis_headers - end + context 'when not authorized' do + it 'responds with 403 error' do + VCR.use_cassette('mobile/messages/session_error') do + get '/mobile/v0/messaging/health/messages/categories', headers: sis_headers end - - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_camelized_response_schema('category') + expect(response).not_to be_successful + expect(response).to have_http_status(:forbidden) end end - context 'when using new session authorization policy' do - before { Flipper.enable_actor(:mobile_sm_session_policy, user) } - - context 'when user does not have access' do - let!(:user) { sis_user(:mhv, mhv_correlation_id: nil) } - - it 'returns forbidden' do - get '/mobile/v0/messaging/health/messages/categories', headers: sis_headers + context 'when authorized' do + before do + VCR.insert_cassette('sm_client/session') + end - expect(response).to have_http_status(:forbidden) - end + after do + VCR.eject_cassette end - context 'when not authorized' do - it 'responds with 403 error' do - VCR.use_cassette('mobile/messages/session_error') do + context 'with authorization to use service' do + it 'responds to GET messages/categories' do + VCR.use_cassette('sm_client/messages/gets_message_categories') do get '/mobile/v0/messaging/health/messages/categories', headers: sis_headers end - expect(response).not_to be_successful - expect(response).to have_http_status(:forbidden) - end - end - context 'when authorized' do - before do - VCR.insert_cassette('sm_client/session') + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_camelized_response_schema('category') end - after do - VCR.eject_cassette - end - - context 'with authorization to use service' do - it 'responds to GET messages/categories' do - VCR.use_cassette('sm_client/messages/gets_message_categories') do - get '/mobile/v0/messaging/health/messages/categories', headers: sis_headers + it 'responds to GET #show' do + VCR.use_cassette('sm_client/messages/gets_a_message_with_id') do + VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_triage_team_recipients') do + get "/mobile/v0/messaging/health/messages/#{message_id}", headers: sis_headers end - - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(response).to match_camelized_response_schema('category') end - it 'responds to GET #show' do - VCR.use_cassette('sm_client/messages/gets_a_message_with_id') do - VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_triage_team_recipients') do - get "/mobile/v0/messaging/health/messages/#{message_id}", headers: sis_headers - end - end + expect(response).to be_successful + expect(response.body).to be_a(String) + response_hash = JSON.parse(response.body) + response_hash.delete('meta') + response.body = response_hash.to_json + expect(response).to match_camelized_response_schema('message') + link = response.parsed_body.dig('data', 'links', 'self') + expect(link).to eq('http://www.example.com/mobile/v0/messaging/health/messages/573059') + end - expect(response).to be_successful - expect(response.body).to be_a(String) - response_hash = JSON.parse(response.body) - response_hash.delete('meta') - response.body = response_hash.to_json - expect(response).to match_camelized_response_schema('message') - link = response.parsed_body.dig('data', 'links', 'self') - expect(link).to eq('http://www.example.com/mobile/v0/messaging/health/messages/573059') + it 'generates mobile-specific metadata links' do + VCR.use_cassette('sm_client/messages/gets_a_message_with_id') do + VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_triage_team_recipients') do + get "/mobile/v0/messaging/health/messages/#{message_id}", headers: sis_headers + end end - it 'generates mobile-specific metadata links' do - VCR.use_cassette('sm_client/messages/gets_a_message_with_id') do - VCR.use_cassette('sm_client/triage_teams/gets_a_collection_of_triage_team_recipients') do - get "/mobile/v0/messaging/health/messages/#{message_id}", headers: sis_headers - end - end + result = JSON.parse(response.body) + expect(result['data']['links']['self']).to match(%r{/mobile/v0}) + expect(result['meta']['userInTriageTeam?']).to eq(false) + end - result = JSON.parse(response.body) - expect(result['data']['links']['self']).to match(%r{/mobile/v0}) - expect(result['meta']['userInTriageTeam?']).to eq(false) + it 'returns message signature preferences' do + VCR.use_cassette('sm_client/messages/gets_message_signature') do + get '/mobile/v0/messaging/health/messages/signature', headers: sis_headers end - it 'returns message signature preferences' do - VCR.use_cassette('sm_client/messages/gets_message_signature') do + result = JSON.parse(response.body) + expect(result['data']['attributes']['signatureName']).to eq('test-api Name') + expect(result['data']['attributes']['includeSignature']).to eq(true) + expect(result['data']['attributes']['signatureTitle']).to eq('test-api title') + end + + context 'when signature prefs are empty' do + it 'returns empty message signature preferences' do + VCR.use_cassette('sm_client/messages/gets_empty_message_signature') do get '/mobile/v0/messaging/health/messages/signature', headers: sis_headers end result = JSON.parse(response.body) - expect(result['data']['attributes']['signatureName']).to eq('test-api Name') - expect(result['data']['attributes']['includeSignature']).to eq(true) - expect(result['data']['attributes']['signatureTitle']).to eq('test-api title') + expect(result['data']['attributes']['signatureName']).to eq(nil) + expect(result['data']['attributes']['includeSignature']).to eq(false) + expect(result['data']['attributes']['signatureTitle']).to eq(nil) end + end - context 'when signature prefs are empty' do - it 'returns empty message signature preferences' do - VCR.use_cassette('sm_client/messages/gets_empty_message_signature') do - get '/mobile/v0/messaging/health/messages/signature', headers: sis_headers + describe 'POST create' do + let(:attachment_type) { 'image/jpg' } + let(:uploads) do + [ + Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file1.jpg', attachment_type), + Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file2.jpg', attachment_type), + Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file3.jpg', attachment_type), + Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file4.jpg', attachment_type) + ] + end + let(:message_params) { attributes_for(:message, subject: 'CI Run', body: 'Continuous Integration') } + let(:params) { message_params.slice(:subject, :category, :recipient_id, :body) } + let(:params_with_attachments) { { message: params }.merge(uploads:) } + + context 'message' do + it 'without attachments' do + VCR.use_cassette('sm_client/messages/creates/a_new_message_without_attachments') do + post '/mobile/v0/messaging/health/messages', headers: sis_headers, params: { message: params } end - result = JSON.parse(response.body) - expect(result['data']['attributes']['signatureName']).to eq(nil) - expect(result['data']['attributes']['includeSignature']).to eq(false) - expect(result['data']['attributes']['signatureTitle']).to eq(nil) + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') + expect(response).to match_camelized_response_schema('message') end - end - describe 'POST create' do - let(:attachment_type) { 'image/jpg' } - let(:uploads) do - [ - Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file1.jpg', attachment_type), - Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file2.jpg', attachment_type), - Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file3.jpg', attachment_type), - Rack::Test::UploadedFile.new('spec/fixtures/files/sm_file4.jpg', attachment_type) - ] - end - let(:message_params) { attributes_for(:message, subject: 'CI Run', body: 'Continuous Integration') } - let(:params) { message_params.slice(:subject, :category, :recipient_id, :body) } - let(:params_with_attachments) { { message: params }.merge(uploads:) } - - context 'message' do - it 'without attachments' do - VCR.use_cassette('sm_client/messages/creates/a_new_message_without_attachments') do - post '/mobile/v0/messaging/health/messages', headers: sis_headers, params: { message: params } - end - - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') - expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') - expect(response).to match_camelized_response_schema('message') + it 'with attachments' do + VCR.use_cassette('sm_client/messages/creates/a_new_message_with_4_attachments') do + post '/mobile/v0/messaging/health/messages', headers: sis_headers, params: params_with_attachments end - it 'with attachments' do - VCR.use_cassette('sm_client/messages/creates/a_new_message_with_4_attachments') do - post '/mobile/v0/messaging/health/messages', headers: sis_headers, params: params_with_attachments - end - - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') - expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') - expect(response).to match_camelized_response_schema('message_with_attachment') - link = response.parsed_body.dig('data', 'links', 'self') - expect(link).to eq('http://www.example.com/mobile/v0/messaging/health/messages/674852') - end + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') + expect(response).to match_camelized_response_schema('message_with_attachment') + link = response.parsed_body.dig('data', 'links', 'self') + expect(link).to eq('http://www.example.com/mobile/v0/messaging/health/messages/674852') end + end - context 'reply' do - let(:reply_message_id) { 674_838 } - - it 'without attachments' do - VCR.use_cassette('sm_client/messages/creates/a_reply_without_attachments') do - post "/mobile/v0/messaging/health/messages/#{reply_message_id}/reply", - headers: sis_headers, params: { message: params } - end + context 'reply' do + let(:reply_message_id) { 674_838 } - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') - expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') - expect(response).to match_camelized_response_schema('message') + it 'without attachments' do + VCR.use_cassette('sm_client/messages/creates/a_reply_without_attachments') do + post "/mobile/v0/messaging/health/messages/#{reply_message_id}/reply", + headers: sis_headers, params: { message: params } end - it 'with attachments' do - VCR.use_cassette('sm_client/messages/creates/a_reply_with_4_attachments') do - post "/mobile/v0/messaging/health/messages/#{reply_message_id}/reply", - headers: sis_headers, params: params_with_attachments - end - - expect(response).to be_successful - expect(response.body).to be_a(String) - expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') - expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') - expect(JSON.parse(response.body)['included'][0]['attributes']['attachment_size']).to be_positive.or be_nil - expect(response).to match_camelized_response_schema('message_with_attachment') - end + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') + expect(response).to match_camelized_response_schema('message') end - end - describe '#thread' do - let(:thread_id) { 573_059 } - - it 'responds to GET #thread' do - VCR.use_cassette('mobile/messages/v0_gets_a_message_thread') do - get "/mobile/v0/messaging/health/messages/#{thread_id}/thread", headers: sis_headers + it 'with attachments' do + VCR.use_cassette('sm_client/messages/creates/a_reply_with_4_attachments') do + post "/mobile/v0/messaging/health/messages/#{reply_message_id}/reply", + headers: sis_headers, params: params_with_attachments end expect(response).to be_successful expect(response.body).to be_a(String) - expect(response).to match_camelized_response_schema('messages_thread') - expect(response.parsed_body.dig('meta', 'messageCounts', 'read')).to eq(1) - expect(response.parsed_body.dig('meta', 'messageCounts', 'unread')).to eq(1) + expect(JSON.parse(response.body)['data']['attributes']['subject']).to eq('CI Run') + expect(JSON.parse(response.body)['data']['attributes']['body']).to eq('Continuous Integration') + expect(JSON.parse(response.body)['included'][0]['attributes']['attachment_size']).to be_positive.or be_nil + expect(response).to match_camelized_response_schema('message_with_attachment') end end + end - describe '#destroy' do - let(:message_id) { 573_052 } - - it 'responds to DELETE' do - VCR.use_cassette('sm_client/messages/deletes_the_message_with_id') do - delete "/mobile/v0/messaging/health/messages/#{message_id}", headers: sis_headers - end + describe '#thread' do + let(:thread_id) { 573_059 } - expect(response).to be_successful - expect(response).to have_http_status(:no_content) + it 'responds to GET #thread' do + VCR.use_cassette('mobile/messages/v0_gets_a_message_thread') do + get "/mobile/v0/messaging/health/messages/#{thread_id}/thread", headers: sis_headers end + + expect(response).to be_successful + expect(response.body).to be_a(String) + expect(response).to match_camelized_response_schema('messages_thread') + expect(response.parsed_body.dig('meta', 'messageCounts', 'read')).to eq(1) + expect(response.parsed_body.dig('meta', 'messageCounts', 'unread')).to eq(1) end + end - describe '#move' do - let(:message_id) { 573_052 } + describe '#destroy' do + let(:message_id) { 573_052 } - it 'responds to PATCH messages/move' do - VCR.use_cassette('sm_client/messages/moves_a_message_with_id') do - patch "/mobile/v0/messaging/health/messages/#{message_id}/move?folder_id=0", headers: sis_headers - end + it 'responds to DELETE' do + VCR.use_cassette('sm_client/messages/deletes_the_message_with_id') do + delete "/mobile/v0/messaging/health/messages/#{message_id}", headers: sis_headers + end - expect(response).to be_successful - expect(response).to have_http_status(:no_content) + expect(response).to be_successful + expect(response).to have_http_status(:no_content) + end + end + + describe '#move' do + let(:message_id) { 573_052 } + + it 'responds to PATCH messages/move' do + VCR.use_cassette('sm_client/messages/moves_a_message_with_id') do + patch "/mobile/v0/messaging/health/messages/#{message_id}/move?folder_id=0", headers: sis_headers end + + expect(response).to be_successful + expect(response).to have_http_status(:no_content) end end end diff --git a/modules/mobile/spec/request/payment_information_request_spec.rb b/modules/mobile/spec/request/payment_information_request_spec.rb index f412bbd7b9d..25035d4ed34 100644 --- a/modules/mobile/spec/request/payment_information_request_spec.rb +++ b/modules/mobile/spec/request/payment_information_request_spec.rb @@ -199,7 +199,7 @@ it 'calls VA Notify background job to send an email' do user.all_emails.each do |email| - expect(VANotifyDdEmailJob).to receive(:perform_async).with(email, nil) + expect(VANotifyDdEmailJob).to receive(:perform_async).with(email, 'comp_and_pen') end subject diff --git a/modules/mobile/spec/request/threads_request_spec.rb b/modules/mobile/spec/request/threads_request_spec.rb index 813dcf09c84..94a208322f6 100644 --- a/modules/mobile/spec/request/threads_request_spec.rb +++ b/modules/mobile/spec/request/threads_request_spec.rb @@ -10,12 +10,10 @@ let(:inbox_id) { 0 } before do - Flipper.enable_actor(:mobile_sm_session_policy, user) Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) end after do - Flipper.disable(:mobile_sm_session_policy) Timecop.return end diff --git a/modules/mobile/spec/request/triage_teams_request_spec.rb b/modules/mobile/spec/request/triage_teams_request_spec.rb index 51439cf3e70..b71817765ad 100644 --- a/modules/mobile/spec/request/triage_teams_request_spec.rb +++ b/modules/mobile/spec/request/triage_teams_request_spec.rb @@ -9,12 +9,10 @@ let!(:user) { sis_user(:mhv, mhv_correlation_id: '123', mhv_account_type: 'Premium') } before do - Flipper.enable_actor(:mobile_sm_session_policy, user) Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) end after do - Flipper.disable(:mobile_sm_session_policy) Timecop.return end diff --git a/modules/mobile/spec/request/v1/messages_request_spec.rb b/modules/mobile/spec/request/v1/messages_request_spec.rb index f17249e5228..bdcb2e5aad7 100644 --- a/modules/mobile/spec/request/v1/messages_request_spec.rb +++ b/modules/mobile/spec/request/v1/messages_request_spec.rb @@ -7,12 +7,10 @@ let!(:user) { sis_user(:mhv, :api_auth, mhv_correlation_id: '123', mhv_account_type: 'Premium') } before do - Flipper.enable_actor(:mobile_sm_session_policy, user) Timecop.freeze(Time.zone.parse('2017-05-01T19:25:00Z')) end after do - Flipper.disable(:mobile_sm_session_policy) Timecop.return end diff --git a/modules/simple_forms_api/app/models/simple_forms_api/vba_20_10207.rb b/modules/simple_forms_api/app/models/simple_forms_api/vba_20_10207.rb index c0b5c505672..85446b97de0 100644 --- a/modules/simple_forms_api/app/models/simple_forms_api/vba_20_10207.rb +++ b/modules/simple_forms_api/app/models/simple_forms_api/vba_20_10207.rb @@ -3,6 +3,7 @@ module SimpleFormsApi class VBA2010207 include Virtus.model(nullify_blank: true) + STATS_KEY = 'api.simple_forms_api.20_10207' attribute :data @@ -97,7 +98,11 @@ def submission_date_stamps [] end - def track_user_identity(confirmation_number); end + def track_user_identity(confirmation_number) + identity = "#{data['preparer_type']} #{data['third_party_type']}" + StatsD.increment("#{STATS_KEY}.#{identity}") + Rails.logger.info('Simple forms api - 20-10207 submission user identity', identity:, confirmation_number:) + end private diff --git a/modules/simple_forms_api/lib/tasks/forms.rake b/modules/simple_forms_api/lib/tasks/forms.rake index 650532edc2f..9004382cea9 100644 --- a/modules/simple_forms_api/lib/tasks/forms.rake +++ b/modules/simple_forms_api/lib/tasks/forms.rake @@ -1,7 +1,7 @@ # frozen_string_literal: true -PDFTK_HOMEBREW_PATH = '/opt/homebrew/bin/pdftk' -PDFTK_LOCAL_PATH = '/usr/local/bin/pdftk' +PDFTK_HOMEBREW_PATH = '/opt/homebrew/bin/pdftk' unless defined?(PDFTK_HOMEBREW_PATH) +PDFTK_LOCAL_PATH = '/usr/local/bin/pdftk' unless defined?(PDFTK_LOCAL_PATH) SIMPLE_FORMS_API_MODELS_PATH = 'modules/simple_forms_api/app/models/simple_forms_api' SIMPLE_FORMS_API_MAPPINGS_PATH = 'modules/simple_forms_api/app/form_mappings' diff --git a/modules/simple_forms_api/spec/fixtures/form_json/vha_10_10d.json b/modules/simple_forms_api/spec/fixtures/form_json/vha_10_10d.json deleted file mode 100644 index 5a81f0a6e50..00000000000 --- a/modules/simple_forms_api/spec/fixtures/form_json/vha_10_10d.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "form_number": "10-10D", - "veteran": { - "date_of_birth": "1987-02-02", - "date_of_marriage": "2005-04-06", - "is_deceased": true, - "date_of_death": "2021-01-08", - "is_active_service_death": true, - "address": { - "country": "USA", - "street": "1 First Ln", - "city": "Place", - "state": "AL", - "postal_code": "12345" - }, - "full_name": { - "first": "Veteran", - "middle": "B", - "last": "Surname" - }, - "ssn_or_tin": "222554444", - "va_claim_number": "123456789", - "phone_number": "9876543213" - }, - "applicants": [ - { - "address": { - "country": "USA", - "street": "2 Second St", - "city": "Town", - "state": "LA", - "postal_code": "16542" - }, - "full_name": { - "first": "Applicant", - "middle": "C", - "last": "Onceler" - }, - "ssn_or_tin": "123456644", - "gender": "F", - "email": "email@address.com", - "phone_number": "6543219877", - "date_of_birth": "1978-03-04", - "is_enrolled_in_medicare": true, - "has_other_health_insurance": true, - "vet_relationship": "Relative - Other" - }, - { - "address": { - "country": "USA", - "street": "3 Third Ave", - "city": "Ville", - "state": "AR", - "postal_code": "65478" - }, - "full_name": { - "first": "Appy", - "middle": "D", - "last": "Twos" - }, - "ssn_or_tin": "123664444", - "gender": "M", - "email": "mailme@domain.com", - "phone_number": "2345698777", - "date_of_birth": "1985-03-10", - "is_enrolled_in_medicare": true, - "has_other_health_insurance": true, - "vet_relationship": "Relative - Other" - }, - { - "address": { - "country": "USA", - "street": "4 Third Ave", - "city": "Mark", - "state": "AR", - "postal_code": "65478" - }, - "full_name": { - "first": "Homer", - "middle": "D", - "last": "Simpson" - }, - "ssn_or_tin": "123664444", - "gender": "M", - "email": "mailme@homer.com", - "phone_number": "2345698777", - "date_of_birth": "1985-03-10", - "is_enrolled_in_medicare": true, - "has_other_health_insurance": true, - "vet_relationship": "Relative - Other" - } - ], - "certification": { - "lastName": "Joe", - "firstName": "GI", - "middleInitial": "Canceled", - "streetAddress": "Hasbro", - "city": "Burbank", - "postal_code": "90041", - "state": "CA", - "relationship": "Agent", - "date": "2021-01-08", - "phone_number": "2345698777" - }, - "statement_of_truth_signature": "GI Joe" -} diff --git a/modules/simple_forms_api/spec/fixtures/form_json/vha_10_7959c-min.json b/modules/simple_forms_api/spec/fixtures/form_json/vha_10_7959c-min.json deleted file mode 100644 index 6fcc0c5343b..00000000000 --- a/modules/simple_forms_api/spec/fixtures/form_json/vha_10_7959c-min.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "form_number": "10-7959C", - "applicants": { - "address": { - "country": "USA", - "street": "2 Second St", - "city": "Town", - "state": "LA", - "postal_code": "16542" - }, - "full_name": { - "first": "Applicant", - "middle": "C", - "last": "Onceler" - }, - "ssn_or_tin": "123456644", - "home_phone": "6543219877", - "is_new_address": false, - "male_or_female": "female" - }, - - "part_a": { - "has_part_a": true, - "part_a_effective_date": "2010-05-05", - "part_a_carrier": "United Health" - }, - "other_health_insurance1": { - "name_of_health_insurance": "Blue Cross", - "date_health_insurance": "2010-02-02", - "terminate_date_health_insurance": "2012-09-09" - } -} diff --git a/modules/simple_forms_api/spec/fixtures/form_json/vha_10_7959c.json b/modules/simple_forms_api/spec/fixtures/form_json/vha_10_7959c.json deleted file mode 100644 index c5b194959ec..00000000000 --- a/modules/simple_forms_api/spec/fixtures/form_json/vha_10_7959c.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "form_number": "10-7959C", - "applicants": { - "address": { - "country": "USA", - "street": "2 Second St", - "city": "Town", - "state": "LA", - "postal_code": "16542" - }, - "full_name": { - "first": "Applicant", - "middle": "C", - "last": "Onceler" - }, - "ssn_or_tin": "123456644", - "home_phone": "6543219877" - }, - - "is_new_address": "T", - "male_or_female": "M", - - "part_a": { - "has_part_a": "T", - "part_a_effective_date": "2010-05-05", - "part_a_carrier": "United Health" - }, - "part_b": { - "has_part_b": "F", - "part_b_effective_date": "2010-05-05", - "part_d_carrier": "United Health" - }, - "part_d": { - "has_part_d": "F", - "part_b_effective_date": "2010-05-05", - "part_d_carrier": "United Health" - }, - "has_pharmacy_benefits": "F", - "has_medicare_advantage": "F", - "has_other_health_insurance": "F", - - "other_health_insurance1": { - "name_of_health_insurance": "Blue Cross", - "date_health_insurance": "2010-02-02", - "terminate_date_health_insurance": "2012-09-09", - "does_insurance": "F", - "does_prescription": "F", - "does_explain": "F", - "is_hmo": true, - "is_ppo": false, - "is_medicaid": false, - "is_rx_discount": false, - "is_medigap": false, - "is_medigap_type": "A", - "is_other_type": false, - "comments": "many stuff to say. Mary had a little lamb. Gingerbread man ate my muffins" - }, - - "other_health_insurance2": { - "name_of_health_insurance": "Aetna", - "date_health_insurance": "2010-02-02", - "terminate_date_health_insurance": "2012-09-09", - "does_insurance": "F", - "does_prescription": "F", - "does_explain": "F", - "is_hmo": true, - "is_ppo": false, - "is_medicaid": false, - "is_rx_discount": false, - "is_medigap": false, - "is_medigap_type": "A", - "is_other_type": false, - "comments": "Row row row your boat gently down the stream. Oh McDonald had a farm eee yaaa" - } -} diff --git a/modules/simple_forms_api/spec/fixtures/form_json/vha_10_7959f_1.json b/modules/simple_forms_api/spec/fixtures/form_json/vha_10_7959f_1.json deleted file mode 100644 index b7e43026ac2..00000000000 --- a/modules/simple_forms_api/spec/fixtures/form_json/vha_10_7959f_1.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "form_number": "10-7959F-1", - "veteran": { - "date_of_birth": "02/02/1987", - "full_name": { - "first": "Veteran", - "middle": "B", - "last": "Surname" - }, - "physical_address": { - "country": "USA", - "street": "1 Physical Ln", - "city": "Place", - "state": "AL", - "postal_code": "12345" - }, - "mailing_address": { - "country": "USA", - "street": "1 Mail Ln", - "city": "Place", - "state": "PA", - "postal_code": "12345" - }, - "ssn": "222554444", - "va_claim_number": "123456789", - "phone_number": "9876543213", - "email_address": "veteran@mail.com" - }, - "statement_of_truth_signature": "Veteran B Surname", - "current_date": "01/01/2024" -} \ No newline at end of file diff --git a/modules/simple_forms_api/spec/fixtures/form_json/vha_10_7959f_2.json b/modules/simple_forms_api/spec/fixtures/form_json/vha_10_7959f_2.json deleted file mode 100644 index 308f182b3cc..00000000000 --- a/modules/simple_forms_api/spec/fixtures/form_json/vha_10_7959f_2.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "form_number": "10-7959F-2", - "veteran": { - "date_of_birth": "02/02/1987", - "full_name": { - "first": "Veteran", - "middle": "B", - "last": "Surname" - }, - "physical_address": { - "country": "USA", - "street": "1 Physical Ln", - "city": "Place", - "state": "AL", - "postal_code": "12345" - }, - "mailing_address": { - "country": "USA", - "street": "1 Mail Ln", - "city": "Place", - "state": "PA", - "postal_code": "12345" - }, - "ssn": "222554444", - "va_claim_number": "123456789", - "phone_number": "9876543213", - "email_address": "veteran@mail.com" - }, - "statement_of_truth_signature": "Veteran B Surname", - "payment_to_be_sent_type": "Veteran", - "current_date": "01/01/2024" -} \ No newline at end of file diff --git a/modules/simple_forms_api/spec/fixtures/test_file/test_file.pdf b/modules/simple_forms_api/spec/fixtures/test_file/test_file.pdf deleted file mode 100644 index c72e23f5a84..00000000000 Binary files a/modules/simple_forms_api/spec/fixtures/test_file/test_file.pdf and /dev/null differ diff --git a/modules/vaos/app/services/vaos/v2/appointments_service.rb b/modules/vaos/app/services/vaos/v2/appointments_service.rb index 633dc571978..d9bd6d153b3 100644 --- a/modules/vaos/app/services/vaos/v2/appointments_service.rb +++ b/modules/vaos/app/services/vaos/v2/appointments_service.rb @@ -15,10 +15,12 @@ class AppointmentsService < VAOS::SessionService FACILITY_ERROR_MSG = 'Error fetching facility details' AVS_ERROR_MESSAGE = 'Error retrieving AVS link' AVS_APPT_TEST_ID = '192308' + MANILA_PHILIPPINES_FACILITY_ID = '358' AVS_FLIPPER = :va_online_scheduling_after_visit_summary ORACLE_HEALTH_CANCELLATIONS = :va_online_scheduling_enable_OH_cancellations APPOINTMENTS_USE_VPG = :va_online_scheduling_use_vpg + APPOINTMENTS_ENABLE_OH_REQUESTS = :va_online_scheduling_enable_OH_requests # rubocop:disable Metrics/MethodLength def get_appointments(start_date, end_date, statuses = nil, pagination_params = {}) @@ -92,7 +94,12 @@ def post_appointment(request_object_body) params = VAOS::V2::AppointmentForm.new(user, request_object_body).params.with_indifferent_access params.compact_blank! with_monitoring do - response = perform(:post, appointments_base_path, params, headers) + response = if Flipper.enabled?(APPOINTMENTS_USE_VPG, user) && + Flipper.enabled?(APPOINTMENTS_ENABLE_OH_REQUESTS) + perform(:post, "/vpg/v1/patients/#{user.icn}/appointments", params, headers) + else + perform(:post, appointments_base_path, params, headers) + end convert_appointment_time(response.body) OpenStruct.new(response.body) rescue Common::Exceptions::BackendServiceException => e @@ -405,15 +412,36 @@ def convert_appointment_time(appt) if !appt[:start].nil? facility_timezone = get_facility_timezone_memoized(appt[:location_id]) appt[:local_start_time] = convert_utc_to_local_time(appt[:start], facility_timezone) + + if appt[:location_id] == MANILA_PHILIPPINES_FACILITY_ID + log_timezone_info(appt[:location_id], facility_timezone, appt[:start], appt[:local_start_time]) + end + elsif !appt.dig(:requested_periods, 0, :start).nil? appt[:requested_periods].each do |period| facility_timezone = get_facility_timezone_memoized(appt[:location_id]) period[:local_start_time] = convert_utc_to_local_time(period[:start], facility_timezone) + + if appt[:location_id] == MANILA_PHILIPPINES_FACILITY_ID + log_timezone_info(appt[:location_id], facility_timezone, period[:start], period[:local_start_time]) + end end end appt end + def log_timezone_info(appt_location_id, facility_timezone, appt_start_time_utc, appt_start_time_local) + Rails.logger.info( + "Timezone info for Manila Philippines location_id #{appt_location_id}", + { + location_id: appt_location_id, + facility_timezone:, + appt_start_time_utc:, + appt_start_time_local: + }.to_json + ) + end + # Returns a local [DateTime] object converted from UTC using the facility's timezone offset. # We'd like to perform this change only on the appointment responses to offer a consistently # formatted local time to our consumers while not changing how we pass DateTimes to upstream services. diff --git a/modules/vaos/spec/request/v2/appointments_request_spec.rb b/modules/vaos/spec/request/v2/appointments_request_spec.rb index 82c3133f02e..ccab586e6bd 100644 --- a/modules/vaos/spec/request/v2/appointments_request_spec.rb +++ b/modules/vaos/spec/request/v2/appointments_request_spec.rb @@ -95,91 +95,196 @@ context 'with jacqueline morgan' do let(:current_user) { build(:user, :jac) } - describe 'CREATE cc appointment' do - let(:community_cares_request_body) do - FactoryBot.build(:appointment_form_v2, :community_cares, user: current_user).attributes + context 'with VAOS' do + before do + Flipper.disable(:va_online_scheduling_use_vpg) + Flipper.disable(:va_online_scheduling_enable_OH_requests) end - let(:community_cares_request_body2) do - FactoryBot.build(:appointment_form_v2, :community_cares2, user: current_user).attributes - end + describe 'CREATE cc appointment' do + let(:community_cares_request_body) do + FactoryBot.build(:appointment_form_v2, :community_cares, user: current_user).attributes + end + + let(:community_cares_request_body2) do + FactoryBot.build(:appointment_form_v2, :community_cares2, user: current_user).attributes + end - it 'creates the cc appointment' do - VCR.use_cassette('vaos/v2/appointments/post_appointments_cc_200_with_provider', - match_requests_on: %i[method path query]) do - VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + it 'creates the cc appointment' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_cc_200_with_provider', match_requests_on: %i[method path query]) do - allow_any_instance_of(VAOS::V2::MobilePPMSService).to \ - receive(:get_provider_with_cache).with('1174506877').and_return(provider_response3) - post '/vaos/v2/appointments', params: community_cares_request_body2, headers: inflection_header + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + allow_any_instance_of(VAOS::V2::MobilePPMSService).to \ + receive(:get_provider_with_cache).with('1174506877').and_return(provider_response3) + post '/vaos/v2/appointments', params: community_cares_request_body2, headers: inflection_header - expect(response).to have_http_status(:created) - json_body = json_body_for(response) - expect(json_body.dig('attributes', 'preferredProviderName')).to eq('BRIANT G MOYLES') - expect(json_body.dig('attributes', 'requestedPeriods', 0, 'localStartTime')) - .to eq('2023-01-17T00:00:00.000-07:00') - expect(json_body).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + expect(response).to have_http_status(:created) + json_body = json_body_for(response) + expect(json_body.dig('attributes', 'preferredProviderName')).to eq('BRIANT G MOYLES') + expect(json_body.dig('attributes', 'requestedPeriods', 0, 'localStartTime')) + .to eq('2023-01-17T00:00:00.000-07:00') + expect(json_body).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + end + end + end + + it 'returns a 400 error' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_400', match_requests_on: %i[method path query]) do + post '/vaos/v2/appointments', params: community_cares_request_body + expect(response).to have_http_status(:bad_request) + expect(JSON.parse(response.body)['errors'][0]['status']).to eq('400') + expect(JSON.parse(response.body)['errors'][0]['detail']).to eq( + 'the patientIcn must match the ICN in the request URI' + ) end end end - it 'returns a 400 error' do - VCR.use_cassette('vaos/v2/appointments/post_appointments_400', match_requests_on: %i[method path query]) do - post '/vaos/v2/appointments', params: community_cares_request_body - expect(response).to have_http_status(:bad_request) - expect(JSON.parse(response.body)['errors'][0]['status']).to eq('400') - expect(JSON.parse(response.body)['errors'][0]['detail']).to eq( - 'the patientIcn must match the ICN in the request URI' - ) + describe 'CREATE va appointment' do + let(:va_booked_request_body) do + FactoryBot.build(:appointment_form_v2, :va_booked, user: current_user).attributes + end + + let(:va_proposed_request_body) do + FactoryBot.build(:appointment_form_v2, :va_proposed_clinic, user: current_user).attributes + end + + it 'creates the va appointment - proposed' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_va_proposed_clinic_200', + match_requests_on: %i[method path query]) do + post '/vaos/v2/appointments', params: va_proposed_request_body, headers: inflection_header + expect(response).to have_http_status(:created) + expect(json_body_for(response)).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + end + end + + it 'creates the va appointment - booked' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M', + match_requests_on: %i[method path query]) do + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + post '/vaos/v2/appointments', params: va_booked_request_body, headers: inflection_header + expect(response).to have_http_status(:created) + json_body = json_body_for(response) + expect(json_body).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + expect(json_body['attributes']['localStartTime']).to eq('2022-11-30T13:45:00.000-07:00') + end + end + end + + it 'creates the va appointment and logs appointment details when there is a PAP COMPLIANCE comment' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_va_booked_200_and_log_facility', + match_requests_on: %i[method path query]) do + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + allow(Rails.logger).to receive(:info).at_least(:once) + post '/vaos/v2/appointments', params: va_booked_request_body, headers: inflection_header + expect(response).to have_http_status(:created) + json_body = json_body_for(response) + expect(json_body).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + expect(Rails.logger).to have_received(:info).with('Details for PAP COMPLIANCE/TELE appointment', + any_args).at_least(:once) + expect(json_body['attributes']['localStartTime']).to eq('2022-11-30T13:45:00.000-07:00') + end + end end end end - describe 'CREATE va appointment' do - let(:va_booked_request_body) do - FactoryBot.build(:appointment_form_v2, :va_booked, user: current_user).attributes + context 'using VPG' do + before do + Flipper.enable(:va_online_scheduling_use_vpg) + Flipper.enable(:va_online_scheduling_enable_OH_requests) end - let(:va_proposed_request_body) do - FactoryBot.build(:appointment_form_v2, :va_proposed_clinic, user: current_user).attributes - end + describe 'CREATE cc appointment' do + let(:community_cares_request_body) do + FactoryBot.build(:appointment_form_v2, :community_cares, user: current_user).attributes + end - it 'creates the va appointment - proposed' do - VCR.use_cassette('vaos/v2/appointments/post_appointments_va_proposed_clinic_200', - match_requests_on: %i[method path query]) do - post '/vaos/v2/appointments', params: va_proposed_request_body, headers: inflection_header - expect(response).to have_http_status(:created) - expect(json_body_for(response)).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + let(:community_cares_request_body2) do + FactoryBot.build(:appointment_form_v2, :community_cares2, user: current_user).attributes end - end - it 'creates the va appointment - booked' do - VCR.use_cassette('vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M', - match_requests_on: %i[method path query]) do - VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + it 'creates the cc appointment' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_cc_200_with_provider_vpg', match_requests_on: %i[method path query]) do - post '/vaos/v2/appointments', params: va_booked_request_body, headers: inflection_header - expect(response).to have_http_status(:created) - json_body = json_body_for(response) - expect(json_body).to match_camelized_schema('vaos/v2/appointment', { strict: false }) - expect(json_body['attributes']['localStartTime']).to eq('2022-11-30T13:45:00.000-07:00') + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + allow_any_instance_of(VAOS::V2::MobilePPMSService).to \ + receive(:get_provider_with_cache).with('1174506877').and_return(provider_response3) + post '/vaos/v2/appointments', params: community_cares_request_body2, headers: inflection_header + + expect(response).to have_http_status(:created) + json_body = json_body_for(response) + expect(json_body.dig('attributes', 'preferredProviderName')).to eq('BRIANT G MOYLES') + expect(json_body.dig('attributes', 'requestedPeriods', 0, 'localStartTime')) + .to eq('2023-01-17T00:00:00.000-07:00') + expect(json_body).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + end + end + end + + it 'returns a 400 error' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_400_vpg', + match_requests_on: %i[method path query]) do + post '/vaos/v2/appointments', params: community_cares_request_body + expect(response).to have_http_status(:bad_request) + expect(JSON.parse(response.body)['errors'][0]['status']).to eq('400') + expect(JSON.parse(response.body)['errors'][0]['detail']).to eq( + 'the patientIcn must match the ICN in the request URI' + ) end end end - it 'creates the va appointment and logs appointment details when there is a PAP COMPLIANCE comment' do - VCR.use_cassette('vaos/v2/appointments/post_appointments_va_booked_200_and_log_facility', - match_requests_on: %i[method path query]) do - VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + describe 'CREATE va appointment' do + let(:va_booked_request_body) do + FactoryBot.build(:appointment_form_v2, :va_booked, user: current_user).attributes + end + + let(:va_proposed_request_body) do + FactoryBot.build(:appointment_form_v2, :va_proposed_clinic, user: current_user).attributes + end + + it 'creates the va appointment - proposed' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_va_proposed_clinic_200_vpg', match_requests_on: %i[method path query]) do - allow(Rails.logger).to receive(:info).at_least(:once) - post '/vaos/v2/appointments', params: va_booked_request_body, headers: inflection_header + post '/vaos/v2/appointments', params: va_proposed_request_body, headers: inflection_header expect(response).to have_http_status(:created) - json_body = json_body_for(response) - expect(json_body).to match_camelized_schema('vaos/v2/appointment', { strict: false }) - expect(Rails.logger).to have_received(:info).with('Details for PAP COMPLIANCE/TELE appointment', - any_args).at_least(:once) - expect(json_body['attributes']['localStartTime']).to eq('2022-11-30T13:45:00.000-07:00') + expect(json_body_for(response)).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + end + end + + it 'creates the va appointment - booked' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg', + match_requests_on: %i[method path query]) do + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + post '/vaos/v2/appointments', params: va_booked_request_body, headers: inflection_header + expect(response).to have_http_status(:created) + json_body = json_body_for(response) + expect(json_body).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + expect(json_body['attributes']['localStartTime']).to eq('2022-11-30T13:45:00.000-07:00') + end + end + end + + it 'creates the va appointment and logs appointment details when there is a PAP COMPLIANCE comment' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_va_booked_200_and_log_facility_vpg', + match_requests_on: %i[method path query]) do + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + allow(Rails.logger).to receive(:info).at_least(:once) + post '/vaos/v2/appointments', params: va_booked_request_body, headers: inflection_header + expect(response).to have_http_status(:created) + json_body = json_body_for(response) + expect(json_body).to match_camelized_schema('vaos/v2/appointment', { strict: false }) + expect(Rails.logger).to have_received(:info).with('Details for PAP COMPLIANCE/TELE appointment', + any_args).at_least(:once) + expect(json_body['attributes']['localStartTime']).to eq('2022-11-30T13:45:00.000-07:00') + end end end end diff --git a/modules/vaos/spec/services/v2/appointment_service_spec.rb b/modules/vaos/spec/services/v2/appointment_service_spec.rb index 005d829f7cd..88c2486408c 100644 --- a/modules/vaos/spec/services/v2/appointment_service_spec.rb +++ b/modules/vaos/spec/services/v2/appointment_service_spec.rb @@ -67,89 +67,193 @@ FactoryBot.build(:appointment_form_v2, :community_cares, user:).attributes end - context 'when va appointment create request is valid' do - # appointment created using the Jacqueline Morgan user + context 'using VAOS' do + before do + Flipper.disable(:va_online_scheduling_use_vpg) + Flipper.disable(:va_online_scheduling_enable_OH_requests) + end - it 'returns the created appointment - va - booked' do - VCR.use_cassette('vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M', - match_requests_on: %i[method path query]) do - VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + context 'when va appointment create request is valid' do + # appointment created using the Jacqueline Morgan user + + it 'returns the created appointment - va - booked' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M', match_requests_on: %i[method path query]) do - allow(Rails.logger).to receive(:info).at_least(:once) - response = subject.post_appointment(va_booked_request_body) - expect(response[:id]).to be_a(String) - expect(response[:local_start_time]) - .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + allow(Rails.logger).to receive(:info).at_least(:once) + response = subject.post_appointment(va_booked_request_body) + expect(response[:id]).to be_a(String) + expect(response[:local_start_time]) + .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + end + end + end + + it 'returns the created appointment and logs data' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data', + match_requests_on: %i[method path query]) do + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + response = subject.post_appointment(va_booked_request_body) + expect(response[:id]).to be_a(String) + expect(response[:local_start_time]) + .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + end + end + end + + it 'returns the created appointment-va-proposed-clinic' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_va_proposed_clinic_200', + match_requests_on: %i[method path query]) do + response = subject.post_appointment(va_proposed_clinic_request_body) + expect(response[:id]).to eq('70065') end end end - it 'returns the created appointment and logs data' do - VCR.use_cassette('vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data', - match_requests_on: %i[method path query]) do - VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + context 'when cc appointment create request is valid' do + it 'returns the created appointment - cc - proposed' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_cc_200_2222022', match_requests_on: %i[method path query]) do - response = subject.post_appointment(va_booked_request_body) - expect(response[:id]).to be_a(String) - expect(response[:local_start_time]) - .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + response = subject.post_appointment(community_cares_request_body) + expect(response[:id]).to be_a(String) + expect(response.dig(:requested_periods, 0, :local_start_time)) + .to eq(DateTime.parse('2021-06-15T06:00:00-06:00')) + end end end end - it 'returns the created appointment-va-proposed-clinic' do - VCR.use_cassette('vaos/v2/appointments/post_appointments_va_proposed_clinic_200', - match_requests_on: %i[method path query]) do - response = subject.post_appointment(va_proposed_clinic_request_body) - expect(response[:id]).to eq('70065') + context 'when the patientIcn is missing' do + it 'raises a backend exception' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_400', match_requests_on: %i[method path query]) do + expect { subject.post_appointment(community_cares_request_body) }.to raise_error( + Common::Exceptions::BackendServiceException + ) + end + end + end + + context 'when the patientIcn is missing on a direct scheduling submission' do + it 'raises a backend exception and logs error details' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_400', match_requests_on: %i[method path query]) do + allow(Rails.logger).to receive(:warn).at_least(:once) + expect { subject.post_appointment(va_booked_request_body) }.to raise_error( + Common::Exceptions::BackendServiceException + ) + expect(Rails.logger).to have_received(:warn).with('Direct schedule submission error', + any_args).at_least(:once) + end + end + end + + context 'when the upstream server returns a 500' do + it 'raises a backend exception' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_500', match_requests_on: %i[method path query]) do + expect { subject.post_appointment(community_cares_request_body) }.to raise_error( + Common::Exceptions::BackendServiceException + ) + end end end end - context 'when cc appointment create request is valid' do - it 'returns the created appointment - cc - proposed' do - VCR.use_cassette('vaos/v2/appointments/post_appointments_cc_200_2222022', - match_requests_on: %i[method path query]) do - VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + context 'using VPG' do + before do + Flipper.enable(:va_online_scheduling_use_vpg) + Flipper.enable(:va_online_scheduling_enable_OH_requests) + end + + context 'when va appointment create request is valid' do + # appointment created using the Jacqueline Morgan user + + it 'returns the created appointment - va - booked' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg', + match_requests_on: %i[method path query]) do + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + allow(Rails.logger).to receive(:info).at_least(:once) + response = subject.post_appointment(va_booked_request_body) + expect(response[:id]).to be_a(String) + expect(response[:local_start_time]) + .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + end + end + end + + it 'returns the created appointment and logs data' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data_vpg', match_requests_on: %i[method path query]) do - response = subject.post_appointment(community_cares_request_body) - expect(response[:id]).to be_a(String) - expect(response.dig(:requested_periods, 0, :local_start_time)) - .to eq(DateTime.parse('2021-06-15T06:00:00-06:00')) + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + response = subject.post_appointment(va_booked_request_body) + expect(response[:id]).to be_a(String) + expect(response[:local_start_time]) + .to eq(DateTime.parse('2022-11-30T13:45:00-07:00')) + end + end + end + + it 'returns the created appointment-va-proposed-clinic' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_va_proposed_clinic_200_vpg', + match_requests_on: %i[method path query]) do + response = subject.post_appointment(va_proposed_clinic_request_body) + expect(response[:id]).to eq('70065') end end end - end - context 'when the patientIcn is missing' do - it 'raises a backend exception' do - VCR.use_cassette('vaos/v2/appointments/post_appointments_400', match_requests_on: %i[method path query]) do - expect { subject.post_appointment(community_cares_request_body) }.to raise_error( - Common::Exceptions::BackendServiceException - ) + context 'when cc appointment create request is valid' do + it 'returns the created appointment - cc - proposed' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_cc_200_2222022_vpg', + match_requests_on: %i[method path query]) do + VCR.use_cassette('vaos/v2/mobile_facility_service/get_facility_200', + match_requests_on: %i[method path query]) do + response = subject.post_appointment(community_cares_request_body) + expect(response[:id]).to be_a(String) + expect(response.dig(:requested_periods, 0, :local_start_time)) + .to eq(DateTime.parse('2021-06-15T06:00:00-06:00')) + end + end end end - end - context 'when the patientIcn is missing on a direct scheduling submission' do - it 'raises a backend exception and logs error details' do - VCR.use_cassette('vaos/v2/appointments/post_appointments_400', match_requests_on: %i[method path query]) do - allow(Rails.logger).to receive(:warn).at_least(:once) - expect { subject.post_appointment(va_booked_request_body) }.to raise_error( - Common::Exceptions::BackendServiceException - ) - expect(Rails.logger).to have_received(:warn).with('Direct schedule submission error', - any_args).at_least(:once) + context 'when the patientIcn is missing' do + it 'raises a backend exception' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_400_vpg', + match_requests_on: %i[method path query]) do + expect { subject.post_appointment(community_cares_request_body) }.to raise_error( + Common::Exceptions::BackendServiceException + ) + end end end - end - context 'when the upstream server returns a 500' do - it 'raises a backend exception' do - VCR.use_cassette('vaos/v2/appointments/post_appointments_500', match_requests_on: %i[method path query]) do - expect { subject.post_appointment(community_cares_request_body) }.to raise_error( - Common::Exceptions::BackendServiceException - ) + context 'when the patientIcn is missing on a direct scheduling submission' do + it 'raises a backend exception and logs error details' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_400_vpg', + match_requests_on: %i[method path query]) do + allow(Rails.logger).to receive(:warn).at_least(:once) + expect { subject.post_appointment(va_booked_request_body) }.to raise_error( + Common::Exceptions::BackendServiceException + ) + expect(Rails.logger).to have_received(:warn).with('Direct schedule submission error', + any_args).at_least(:once) + end + end + end + + context 'when the upstream server returns a 500' do + it 'raises a backend exception' do + VCR.use_cassette('vaos/v2/appointments/post_appointments_500_vpg', + match_requests_on: %i[method path query]) do + expect { subject.post_appointment(community_cares_request_body) }.to raise_error( + Common::Exceptions::BackendServiceException + ) + end end end end @@ -519,6 +623,68 @@ end end + describe '#convert_appointment_time' do + let(:manila_appt) do + { + id: '12345', + location_id: '358', + start: '2024-12-20T00:00:00Z' + } + end + + let(:manila_appt_req) do + { + id: '12345', + location_id: '358', + requested_periods: [{ start: '2024-12-20T00:00:00Z', end: '2024-12-20T11:59:59.999Z' }] + } + end + + context 'when appt location id is 358' do + it 'logs the appt location id, timezone info, utc/local times of appt' do + allow_any_instance_of(VAOS::V2::AppointmentsService) + .to receive(:get_facility_timezone_memoized) + .and_return('Asia/Manila') + allow(Rails.logger).to receive(:info) + + subject.send(:convert_appointment_time, manila_appt) + expect(Rails.logger).to have_received(:info).with('Timezone info for Manila Philippines location_id 358', + { + location_id: '358', + facility_timezone: 'Asia/Manila', + appt_start_time_utc: '2024-12-20T00:00:00Z', + appt_start_time_local: subject.send( + :convert_utc_to_local_time, + manila_appt[:start], + 'Asia/Manila' + ) + }.to_json) + end + + it 'logs the appt location id, timezone info, utc/local times of appt request' do + allow_any_instance_of(VAOS::V2::AppointmentsService) + .to receive(:get_facility_timezone_memoized) + .and_return('Asia/Manila') + allow(Rails.logger).to receive(:info) + + subject.send(:convert_appointment_time, manila_appt_req) + expect(Rails.logger).to have_received(:info).with('Timezone info for Manila Philippines location_id 358', + { + location_id: '358', + facility_timezone: 'Asia/Manila', + appt_start_time_utc: '2024-12-20T00:00:00Z', + appt_start_time_local: subject.send( + :convert_utc_to_local_time, manila_appt_req.dig( + :requested_periods, + 0, + :start + ), 'Asia/Manila' + ) + }.to_json) + end + end + end + describe '#convert_utc_to_local_time' do let(:start_datetime) { '2021-09-02T14:00:00Z'.to_datetime } diff --git a/spec/controllers/v0/terms_of_use_agreements_controller_spec.rb b/spec/controllers/v0/terms_of_use_agreements_controller_spec.rb index d88c3412429..bcd5245818f 100644 --- a/spec/controllers/v0/terms_of_use_agreements_controller_spec.rb +++ b/spec/controllers/v0/terms_of_use_agreements_controller_spec.rb @@ -4,10 +4,24 @@ RSpec.describe V0::TermsOfUseAgreementsController, type: :controller do let(:user) { create(:user) } - let(:user_account) { create(:user_account) } + let(:user_account) { create(:user_account, icn:) } + let(:icn) { user.icn } + let(:first_name) { user.first_name } + let(:last_name) { user.last_name } let!(:user_verification) { create(:user_verification, user_account:, idme_uuid: user.uuid) } let(:agreement_version) { 'v1' } let(:terms_code) { nil } + let(:find_profile_response) { create(:find_profile_response, profile: mpi_profile) } + let(:mpi_profile) do + build(:mpi_profile, + icn:, + given_names: [first_name], + family_name: last_name) + end + + before do + allow_any_instance_of(MPI::Service).to receive(:find_profile_by_identifier).and_return(find_profile_response) + end describe 'GET #latest' do subject { get :latest, params: { version: agreement_version, terms_code: } } @@ -60,7 +74,9 @@ context 'when user is authenticated with a one time terms code' do let(:terms_code) { SecureRandom.hex } - let!(:terms_code_container) { create(:terms_code_container, code: terms_code, user_uuid: user.uuid) } + let!(:terms_code_container) do + create(:terms_code_container, code: terms_code, user_account_uuid: user_account.id) + end it_behaves_like 'authenticated get latest agreement' end @@ -116,17 +132,6 @@ end end - context 'when the user does not have a common_name' do - let(:user) { create(:user, first_name: nil, middle_name: nil, last_name: nil, suffix: nil) } - let(:expected_error) { 'Validation failed: Common name can\'t be blank' } - - it 'returns an unprocessable_entity' do - subject - expect(response).to have_http_status(:unprocessable_entity) - expect(JSON.parse(response.body)['error']).to eq(expected_error) - end - end - context 'when the agreement acceptance fails' do before do allow_any_instance_of(TermsOfUseAgreement).to receive(:accepted!).and_raise(ActiveRecord::RecordInvalid) @@ -158,7 +163,9 @@ context 'when user is authenticated with a one time terms code' do let(:terms_code) { SecureRandom.hex } - let!(:terms_code_container) { create(:terms_code_container, code: terms_code, user_uuid: user.uuid) } + let!(:terms_code_container) do + create(:terms_code_container, code: terms_code, user_account_uuid: user_account.id) + end it_behaves_like 'authenticated agreements acceptance' end @@ -214,17 +221,6 @@ end end - context 'when the user does not have a common_name' do - let(:user) { create(:user, first_name: nil, middle_name: nil, last_name: nil, suffix: nil) } - let(:expected_error) { 'Validation failed: Common name can\'t be blank' } - - it 'returns an unprocessable_entity' do - subject - expect(response).to have_http_status(:unprocessable_entity) - expect(JSON.parse(response.body)['error']).to eq(expected_error) - end - end - context 'when the agreement declination fails' do before do allow_any_instance_of(TermsOfUseAgreement).to receive(:declined!).and_raise(ActiveRecord::RecordInvalid) @@ -256,7 +252,9 @@ context 'when user is authenticated with a one time terms code' do let(:terms_code) { SecureRandom.hex } - let!(:terms_code_container) { create(:terms_code_container, code: terms_code, user_uuid: user.uuid) } + let!(:terms_code_container) do + create(:terms_code_container, code: terms_code, user_account_uuid: user_account.id) + end it_behaves_like 'authenticated agreements decline' end @@ -279,82 +277,179 @@ end end - describe 'PUT #update_provisioning' do - subject { put :update_provisioning } + describe 'POST #accept_and_provision' do + subject { post :accept_and_provision, params: { version: agreement_version, terms_code: } } + + shared_examples 'successful acceptance and provisioning' do + let(:expected_status) { :created } + let(:expected_cookie) { 'CERNER_CONSENT=ACCEPTED' } + let(:expected_cookie_domain) { '.va.gov' } + let(:expected_cookie_path) { '/' } + let(:expected_cookie_expiration) { 2.minutes.from_now } + let(:expected_log) { '[TermsOfUseAgreementsController] accept_and_provision success' } + + before do + allow(Rails.logger).to receive(:info) + end + + it 'returns created status and sets the cerner cookie' do + subject + expect(response).to have_http_status(expected_status) + expect(cookies['CERNER_CONSENT']).to eq('ACCEPTED') + expect(response.headers['Set-Cookie']).to include(expected_cookie) + expect(response.headers['Set-Cookie']).to include("domain=#{expected_cookie_domain}") + expect(response.headers['Set-Cookie']).to include("path=#{expected_cookie_path}") + expect(response.headers['Set-Cookie']).to include("expires=#{expected_cookie_expiration.httpdate}") + end + + it 'logs the expected log' do + subject + expect(Rails.logger).to have_received(:info).with(expected_log, { icn: }) + end + end + + shared_examples 'unsuccessful acceptance and provisioning' do + let(:expected_status) { :unprocessable_entity } + let(:expected_log) do + '[TermsOfUseAgreementsController] accept_and_provision error: TermsOfUse::Errors::AcceptorError' + end + + before do + allow(Rails.logger).to receive(:error) + end + + it 'does not create a terms of use agreement' do + expect { subject }.not_to change(TermsOfUseAgreement, :count) + end + + it 'returns unprocessable_entity status and does not set the cookie' do + subject + expect(response).to have_http_status(expected_status) + expect(cookies['CERNER_CONSENT']).to be_nil + expect(response.headers['Set-Cookie']).to be_nil + end + + it 'logs the expected log' do + subject + expect(Rails.logger).to have_received(:error).with(expected_log, { icn: user.icn }) + end + end context 'when user is authenticated with a session token' do let(:mpi_profile) { build(:mpi_profile) } let(:user) { build(:user, :loa3, mpi_profile:) } - let(:provisioned) { true } - let(:provisioner) { instance_double(TermsOfUse::Provisioner, perform: provisioned) } + let(:terms_of_use_agreement) { build(:terms_of_use_agreement, response: 'accepted') } + let(:acceptor) { instance_double(TermsOfUse::Acceptor, perform!: terms_of_use_agreement) } + let(:provisioner) { instance_double(TermsOfUse::Provisioner, perform: true) } before do Timecop.freeze(Time.zone.now.floor) sign_in(user) + allow(TermsOfUse::Acceptor).to receive(:new).and_return(acceptor) allow(TermsOfUse::Provisioner).to receive(:new).and_return(provisioner) end after { Timecop.return } - context 'when the provisioning is successful' do - let(:expected_cookie) { 'CERNER_CONSENT=ACCEPTED' } - let(:expected_cookie_domain) { '.va.gov' } - let(:expected_cookie_path) { '/' } - let(:expected_cookie_expiration) { 2.minutes.from_now } - let(:expected_log) { '[TermsOfUseAgreementsController] update_provisioning success' } + context 'when the acceptance and provisioning is successful' do + it_behaves_like 'successful acceptance and provisioning' + end + context 'when the acceptance and provisioning is not successful' do before do - allow(Rails.logger).to receive(:info) + allow(acceptor).to receive(:perform!).and_raise(TermsOfUse::Errors::AcceptorError) end - it 'returns ok status and sets the cerner cookie' do - subject - expect(response).to have_http_status(:ok) - expect(cookies['CERNER_CONSENT']).to eq('ACCEPTED') - expect(response.headers['Set-Cookie']).to include(expected_cookie) - expect(response.headers['Set-Cookie']).to include("domain=#{expected_cookie_domain}") - expect(response.headers['Set-Cookie']).to include("path=#{expected_cookie_path}") - expect(response.headers['Set-Cookie']).to include("expires=#{expected_cookie_expiration.httpdate}") - end + it_behaves_like 'unsuccessful acceptance and provisioning' + end + end + end - it 'logs the expected log' do - subject - expect(Rails.logger).to have_received(:info).with(expected_log, { icn: user.icn }) - end + describe 'PUT #update_provisioning' do + subject { put :update_provisioning } + + shared_examples 'successful provisioning' do + let(:expected_cookie) { 'CERNER_CONSENT=ACCEPTED' } + let(:expected_cookie_domain) { '.va.gov' } + let(:expected_cookie_path) { '/' } + let(:expected_cookie_expiration) { 2.minutes.from_now } + let(:expected_log) { '[TermsOfUseAgreementsController] update_provisioning success' } + + before do + allow(Rails.logger).to receive(:info) end - context 'when the provisioning is not successful' do - let(:provisioned) { false } - let(:expected_log) { '[TermsOfUseAgreementsController] update_provisioning error' } + it 'returns ok status and sets the cerner cookie' do + subject + expect(response).to have_http_status(:ok) + expect(cookies['CERNER_CONSENT']).to eq('ACCEPTED') + expect(response.headers['Set-Cookie']).to include(expected_cookie) + expect(response.headers['Set-Cookie']).to include("domain=#{expected_cookie_domain}") + expect(response.headers['Set-Cookie']).to include("path=#{expected_cookie_path}") + expect(response.headers['Set-Cookie']).to include("expires=#{expected_cookie_expiration.httpdate}") + end - before do - allow(Rails.logger).to receive(:error) - end + it 'logs the expected log' do + subject + expect(Rails.logger).to have_received(:info).with(expected_log, { icn: user.icn }) + end + end - it 'returns unprocessable_entity status and does not set the cookie' do - subject - expect(response).to have_http_status(:unprocessable_entity) - expect(cookies['CERNER_CONSENT']).to be_nil - expect(response.headers['Set-Cookie']).to be_nil - end + shared_examples 'unsuccessful provisioning' do + before do + allow(Rails.logger).to receive(:error) + end - it 'logs the expected log' do - subject - expect(Rails.logger).to have_received(:error).with(expected_log, { icn: user.icn }) - end + it 'returns unprocessable_entity status and does not set the cookie' do + subject + expect(response).to have_http_status(expected_status) + expect(cookies['CERNER_CONSENT']).to be_nil + expect(response.headers['Set-Cookie']).to be_nil + end + + it 'logs the expected log' do + subject + expect(Rails.logger).to have_received(:error).with(expected_log, { icn: user.icn }) + end + end + + context 'when user is authenticated with a session token' do + let(:mpi_profile) { build(:mpi_profile) } + let(:user) { build(:user, :loa3, mpi_profile:) } + let(:provisioned) { true } + let(:provisioner) { instance_double(TermsOfUse::Provisioner, perform: provisioned) } + + before do + Timecop.freeze(Time.zone.now.floor) + sign_in(user) + allow(TermsOfUse::Provisioner).to receive(:new).and_return(provisioner) + end + + after { Timecop.return } + + context 'when the provisioning is successful' do + it_behaves_like 'successful provisioning' + end + + context 'when the provisioning is not successful' do + let(:expected_status) { :unprocessable_entity } + let(:provisioned) { false } + let(:expected_log) { '[TermsOfUseAgreementsController] update_provisioning error: Failed to provision' } + + it_behaves_like 'unsuccessful provisioning' end context 'when the provisioning raises an error' do + let(:expected_status) { :unprocessable_entity } + let(:expected_log) do + '[TermsOfUseAgreementsController] update_provisioning error: TermsOfUse::Errors::ProvisionerError' + end + before do allow(provisioner).to receive(:perform).and_raise(TermsOfUse::Errors::ProvisionerError) end - it 'returns unprocessable_entity status and does not set the cookie' do - subject - expect(response).to have_http_status(:unprocessable_entity) - expect(cookies['CERNER_CONSENT']).to be_nil - expect(response.headers['Set-Cookie']).to be_nil - end + it_behaves_like 'unsuccessful provisioning' end end end diff --git a/spec/factories/accredited_individuals.rb b/spec/factories/accredited_individuals.rb new file mode 100644 index 00000000000..19ed9247e16 --- /dev/null +++ b/spec/factories/accredited_individuals.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :accredited_individual do + transient do + org_count { 1 } + end + + ogc_id { SecureRandom.uuid } + registration_number { Faker::Alphanumeric.alphanumeric(number: 5, min_numeric: 5) } + individual_type { 'representative' } + first_name { Faker::Name.first_name } + last_name { Faker::Name.last_name } + full_name { "#{first_name} #{last_name}" } + + trait :with_organizations do + after(:create) do |individual, evaluator| + create_list(:accredited_organization, evaluator.org_count, accredited_individuals: [individual]) + + individual.reload + end + end + + trait :attorney do + poa_code { Faker::Alphanumeric.alphanumeric(number: 3).upcase } + individual_type { 'attorney' } + end + + trait :claims_agent do + poa_code { Faker::Alphanumeric.alphanumeric(number: 3).upcase } + individual_type { 'claims_agent' } + end + end +end diff --git a/spec/factories/accredited_organizations.rb b/spec/factories/accredited_organizations.rb new file mode 100644 index 00000000000..73cbf239240 --- /dev/null +++ b/spec/factories/accredited_organizations.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :accredited_organization do + transient do + rep_count { 1 } + end + + ogc_id { SecureRandom.uuid } + poa_code { Faker::Alphanumeric.alphanumeric(number: 3).upcase } + name { Faker::Company.name } + + trait :with_representatives do + after(:create) do |organization, evaluator| + create_list(:accredited_individual, evaluator.rep_count, accredited_organizations: [organization]) + + organization.reload + end + end + end +end diff --git a/spec/factories/sign_in/terms_code_containers.rb b/spec/factories/sign_in/terms_code_containers.rb index 6215f8a9a4c..c391cf23c42 100644 --- a/spec/factories/sign_in/terms_code_containers.rb +++ b/spec/factories/sign_in/terms_code_containers.rb @@ -3,6 +3,6 @@ FactoryBot.define do factory :terms_code_container, class: 'SignIn::TermsCodeContainer' do code { SecureRandom.hex } - user_uuid { SecureRandom.uuid } + user_account_uuid { create(:user_account).id } end end diff --git a/spec/fixtures/education_benefits_claims/1995/ch30_guardian_graduated_sponsor.json b/spec/fixtures/education_benefits_claims/1995/ch30_guardian_graduated_sponsor.json index d7a705c734b..b682ac22c96 100644 --- a/spec/fixtures/education_benefits_claims/1995/ch30_guardian_graduated_sponsor.json +++ b/spec/fixtures/education_benefits_claims/1995/ch30_guardian_graduated_sponsor.json @@ -35,6 +35,7 @@ "guardianFirstName":"Richard", "guardianMiddleName":"D", "guardianLastName":"Van Dyke", + "guardianSuffix":"Jr.", "guardianAddress":{ "street":"456 oak blvd", "street2":"apt 88", diff --git a/spec/fixtures/education_benefits_claims/1995/ch30_guardian_graduated_sponsor.spl b/spec/fixtures/education_benefits_claims/1995/ch30_guardian_graduated_sponsor.spl index 179ad95507a..0d267bc05af 100644 --- a/spec/fixtures/education_benefits_claims/1995/ch30_guardian_graduated_sponsor.spl +++ b/spec/fixtures/education_benefits_claims/1995/ch30_guardian_graduated_sponsor.spl @@ -87,6 +87,8 @@ Middle name of Parent, Guardian or Custodian: D Last name of Parent, Guardian or Custodian: Van Dyke +Suffix of Parent, Guardian or Custodian: Jr. + Address of Parent, Guardian or Custodian: Country: USA Street: 456 oak blvd diff --git a/spec/fixtures/education_benefits_claims/1995/ch30_guardian_not_graduated.spl b/spec/fixtures/education_benefits_claims/1995/ch30_guardian_not_graduated.spl index 3282cb24760..aba47288f60 100644 --- a/spec/fixtures/education_benefits_claims/1995/ch30_guardian_not_graduated.spl +++ b/spec/fixtures/education_benefits_claims/1995/ch30_guardian_not_graduated.spl @@ -76,6 +76,8 @@ Middle name of Parent, Guardian or Custodian: D Last name of Parent, Guardian or Custodian: Van Dyke +Suffix of Parent, Guardian or Custodian: + Address of Parent, Guardian or Custodian: Country: USA Street: 456 oak blvd diff --git a/spec/lib/lighthouse/benefits_claims/service_spec.rb b/spec/lib/lighthouse/benefits_claims/service_spec.rb index d5ecd4fe022..05d1fe2e084 100644 --- a/spec/lib/lighthouse/benefits_claims/service_spec.rb +++ b/spec/lib/lighthouse/benefits_claims/service_spec.rb @@ -113,6 +113,15 @@ expect(response.claim_id).to eq(1_234_567_890) end end + + context 'when given the option to use generate pdf' do + it 'calls the generate pdf endpoint' do + VCR.use_cassette('lighthouse/benefits_claims/submit526/200_response_generate_pdf') do + raw_response = @service.submit526({}, '', '', { generate_pdf: true }) + expect(raw_response.body).to eq('No example available') + end + end + end end end end diff --git a/spec/models/accredited_individual_spec.rb b/spec/models/accredited_individual_spec.rb new file mode 100644 index 00000000000..13a7a15cb0f --- /dev/null +++ b/spec/models/accredited_individual_spec.rb @@ -0,0 +1,125 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AccreditedIndividual, type: :model do + describe 'validations' do + subject { build(:accredited_individual) } + + it { expect(subject).to validate_presence_of(:ogc_id) } + it { expect(subject).to validate_presence_of(:registration_number) } + it { expect(subject).to validate_presence_of(:individual_type) } + it { expect(subject).to validate_length_of(:poa_code).is_equal_to(3).allow_blank } + + it { + expect(subject).to validate_uniqueness_of(:individual_type) + .scoped_to(:registration_number) + .ignoring_case_sensitivity + } + + it { + expect(subject).to define_enum_for(:individual_type) + .with_values({ + 'attorney' => 'attorney', + 'claims_agent' => 'claims_agent', + 'representative' => 'representative' + }) + .backed_by_column_of_type(:string) + } + end + + describe '.find_within_max_distance' do + # ~6 miles from Washington, D.C. + let!(:ai1) do + create(:accredited_individual, registration_number: '12300', long: -77.050552, lat: 38.820450, + location: 'POINT(-77.050552 38.820450)') + end + + # ~35 miles from Washington, D.C. + let!(:ai2) do + create(:accredited_individual, registration_number: '23400', long: -76.609383, lat: 39.299236, + location: 'POINT(-76.609383 39.299236)') + end + + # ~47 miles from Washington, D.C. + let!(:ai3) do + create(:accredited_individual, registration_number: '34500', long: -77.466316, lat: 38.309875, + location: 'POINT(-77.466316 38.309875)') + end + + # ~57 miles from Washington, D.C. + let!(:ai4) do + create(:accredited_individual, registration_number: '45600', long: -76.3483, lat: 39.5359, + location: 'POINT(-76.3483 39.5359)') + end + + context 'when there are individuals within the max search distance' do + it 'returns all individuals located within the default max distance' do + # check within 50 miles of Washington, D.C. + results = described_class.find_within_max_distance(-77.0369, 38.9072) + + expect(results.pluck(:id)).to match_array([ai1.id, ai2.id, ai3.id]) + end + + it 'returns all individuals located within the specified max distance' do + # check within 40 miles of Washington, D.C. + results = described_class.find_within_max_distance(-77.0369, 38.9072, 64_373.8) + + expect(results.pluck(:id)).to match_array([ai1.id, ai2.id]) + end + end + + context 'when there are no individuals within the max search distance' do + it 'returns an empty array' do + # check within 1 mile of Washington, D.C. + results = described_class.find_within_max_distance(-77.0369, 38.9072, 1609.344) + + expect(results).to eq([]) + end + end + end + + describe '#poa_codes' do + context 'when the individual has no poa code' do + let(:individual) { create(:accredited_individual) } + + context 'when the individual has no accredited_organization associations' do + it 'returns an empty array' do + expect(individual.poa_codes).to eq([]) + end + end + + context 'when the individual has accredited_organization associations' do + let(:org1) { create(:accredited_organization, poa_code: 'ABC') } + let(:org2) { create(:accredited_organization, poa_code: 'DEF') } + + it 'returns an array of the associated accredited_organizations poa_codes' do + individual.accredited_organizations.push(org1, org2) + + expect(individual.reload.poa_codes).to match_array(%w[ABC DEF]) + end + end + end + + context 'when the individual has a poa code' do + let(:individual) { create(:accredited_individual, individual_type: 'attorney', poa_code: 'A12') } + + context 'when the individual has no accredited_organization associations' do + it 'returns an array of only the individual poa_code' do + expect(individual.poa_codes).to eq(['A12']) + end + end + + context 'when the individual has accredited_organization associations' do + let(:org1) { create(:accredited_organization, poa_code: 'ABC') } + let(:org2) { create(:accredited_organization, poa_code: 'DEF') } + + it 'returns an array of all associated poa_codes' do + individual.accredited_organizations.push(org1, org2) + + expect(individual.reload.poa_codes).to match_array(%w[ABC DEF A12]) + end + end + end + end +end diff --git a/spec/models/accredited_organization_spec.rb b/spec/models/accredited_organization_spec.rb new file mode 100644 index 00000000000..eeec3dc02dd --- /dev/null +++ b/spec/models/accredited_organization_spec.rb @@ -0,0 +1,86 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AccreditedOrganization, type: :model do + describe 'validations' do + subject { build(:accredited_organization) } + + it { expect(subject).to validate_presence_of(:ogc_id) } + it { expect(subject).to validate_presence_of(:poa_code) } + it { expect(subject).to validate_length_of(:poa_code).is_equal_to(3) } + it { expect(subject).to validate_uniqueness_of(:poa_code) } + end + + describe '.find_within_max_distance' do + # ~6 miles from Washington, D.C. + let!(:ai1) do + create(:accredited_organization, poa_code: '123', long: -77.050552, lat: 38.820450, + location: 'POINT(-77.050552 38.820450)') + end + + # ~35 miles from Washington, D.C. + let!(:ai2) do + create(:accredited_organization, poa_code: '234', long: -76.609383, lat: 39.299236, + location: 'POINT(-76.609383 39.299236)') + end + + # ~47 miles from Washington, D.C. + let!(:ai3) do + create(:accredited_organization, poa_code: '345', long: -77.466316, lat: 38.309875, + location: 'POINT(-77.466316 38.309875)') + end + + # ~57 miles from Washington, D.C. + let!(:ai4) do + create(:accredited_organization, poa_code: '456', long: -76.3483, lat: 39.5359, + location: 'POINT(-76.3483 39.5359)') + end + + context 'when there are organizations within the max search distance' do + it 'returns all organizations located within the default max distance' do + # check within 50 miles of Washington, D.C. + results = described_class.find_within_max_distance(-77.0369, 38.9072) + + expect(results.pluck(:id)).to match_array([ai1.id, ai2.id, ai3.id]) + end + + it 'returns all organizations located within the specified max distance' do + # check within 40 miles of Washington, D.C. + results = described_class.find_within_max_distance(-77.0369, 38.9072, 64_373.8) + + expect(results.pluck(:id)).to match_array([ai1.id, ai2.id]) + end + end + + context 'when there are no organizations within the max search distance' do + it 'returns an empty array' do + # check within 1 mile of Washington, D.C. + results = described_class.find_within_max_distance(-77.0369, 38.9072, 1609.344) + + expect(results).to eq([]) + end + end + end + + describe '#registration_numbers' do + let(:organization) { create(:accredited_organization) } + + context 'when the organization has no accredited_individual associations' do + it 'returns an empty array' do + expect(organization.registration_numbers).to eq([]) + end + end + + context 'when the organization has accredited_individual associations' do + let(:ind1) { create(:accredited_individual, registration_number: '12300') } + let(:ind2) { create(:accredited_individual, registration_number: '45600') } + + it 'returns an array of all associated registration_numbers' do + organization.accredited_individuals.push(ind1, ind2) + + expect(organization.reload.registration_numbers).to match_array(%w[12300 45600]) + end + end + end +end diff --git a/spec/models/form526_submission_spec.rb b/spec/models/form526_submission_spec.rb index 5084dd9724f..ee207a30ffe 100644 --- a/spec/models/form526_submission_spec.rb +++ b/spec/models/form526_submission_spec.rb @@ -103,6 +103,10 @@ .to(:unprocessable).on_event(:mark_as_unprocessable) expect(submission).to transition_from(:unprocessed) .to(:in_remediation).on_event(:begin_remediation) + expect(submission).to transition_from(:unprocessed) + .to(:processed_in_batch_remediation).on_event(:process_in_batch_remediation) + expect(submission).to transition_from(:unprocessed) + .to(:ignorable_duplicate).on_event(:ignore_as_duplicate) end end diff --git a/spec/models/sign_in/terms_code_container_spec.rb b/spec/models/sign_in/terms_code_container_spec.rb index ef4b6c2b591..052195fa04b 100644 --- a/spec/models/sign_in/terms_code_container_spec.rb +++ b/spec/models/sign_in/terms_code_container_spec.rb @@ -3,10 +3,10 @@ require 'rails_helper' RSpec.describe SignIn::TermsCodeContainer, type: :model do - let(:terms_code_container) { create(:terms_code_container, user_uuid:, code:) } + let(:terms_code_container) { create(:terms_code_container, user_account_uuid:, code:) } let(:code) { SecureRandom.hex } - let(:user_uuid) { SecureRandom.uuid } + let(:user_account_uuid) { SecureRandom.uuid } describe 'validations' do describe '#code' do @@ -23,11 +23,11 @@ end end - describe '#user_uuid' do - subject { terms_code_container.user_uuid } + describe '#user_account_uuid' do + subject { terms_code_container.user_account_uuid } - context 'when user_uuid is nil' do - let(:user_uuid) { nil } + context 'when user_account_uuid is nil' do + let(:user_account_uuid) { nil } let(:expected_error) { Common::Exceptions::ValidationErrors } let(:expected_error_message) { 'Validation error' } diff --git a/spec/services/sign_in/user_code_map_creator_spec.rb b/spec/services/sign_in/user_code_map_creator_spec.rb index c88571a3805..42a948d447c 100644 --- a/spec/services/sign_in/user_code_map_creator_spec.rb +++ b/spec/services/sign_in/user_code_map_creator_spec.rb @@ -77,14 +77,16 @@ context 'if client config enforced terms is set to va terms' do let(:enforced_terms) { SignIn::Constants::Auth::VA_TERMS } + let(:user_account_uuid) { user_verification.user_account.id } context 'and user needs accepted terms of use' do it 'sets terms_code on returned user code map' do expect(subject.terms_code).not_to eq(nil) end - it 'creates a terms code container associated with terms code' do - expect(SignIn::TermsCodeContainer.find(subject.terms_code)).not_to eq(nil) + it 'creates a terms code container associated with terms code and with expected user attributes' do + terms_code_container = SignIn::TermsCodeContainer.find(subject.terms_code) + expect(terms_code_container.user_account_uuid).to eq(user_account_uuid) end end diff --git a/spec/services/terms_of_use/acceptor_spec.rb b/spec/services/terms_of_use/acceptor_spec.rb index 227ec505791..678454bfa59 100644 --- a/spec/services/terms_of_use/acceptor_spec.rb +++ b/spec/services/terms_of_use/acceptor_spec.rb @@ -74,22 +74,59 @@ Digest::SHA256.hexdigest({ icn:, signature_name: common_name, version: }.to_json) end - before do - allow(TermsOfUse::SignUpServiceUpdaterJob).to receive(:perform_async) - end + context 'when async is true' do + before do + allow(TermsOfUse::SignUpServiceUpdaterJob).to receive(:perform_async) + end - it 'creates a new terms of use agreement with the given version' do - expect { acceptor.perform! }.to change { user_account.terms_of_use_agreements.count }.by(1) - expect(user_account.terms_of_use_agreements.last.agreement_version).to eq(version) - end + it 'creates a new terms of use agreement with the given version' do + expect { acceptor.perform! }.to change { user_account.terms_of_use_agreements.count }.by(1) + expect(user_account.terms_of_use_agreements.last.agreement_version).to eq(version) + end + + it 'marks the terms of use agreement as accepted' do + expect(acceptor.perform!).to be_accepted + end - it 'marks the terms of use agreement as accepted' do - expect(acceptor.perform!).to be_accepted + it 'enqueues the SignUpServiceUpdaterJob with expected parameters' do + acceptor.perform! + expect(TermsOfUse::SignUpServiceUpdaterJob).to have_received(:perform_async).with(expected_attr_key) + end end - it 'enqueues the SignUpServiceUpdaterJob with expected parameters' do - acceptor.perform! - expect(TermsOfUse::SignUpServiceUpdaterJob).to have_received(:perform_async).with(expected_attr_key) + context 'when async is false' do + subject(:acceptor) { described_class.new(user_account:, common_name:, version:, async: false) } + + let(:sign_up_service_updater_job) { instance_double(TermsOfUse::SignUpServiceUpdaterJob, perform: nil) } + + before do + allow(TermsOfUse::SignUpServiceUpdaterJob).to receive(:new).and_return(sign_up_service_updater_job) + allow(sign_up_service_updater_job).to receive(:perform).with(expected_attr_key) + end + + it 'calls the SignUpServiceUpdaterJob with expected parameters' do + acceptor.perform! + expect(sign_up_service_updater_job).to have_received(:perform).with(expected_attr_key) + end + + it 'creates a new terms of use agreement with the given version' do + expect { acceptor.perform! }.to change { user_account.terms_of_use_agreements.count }.by(1) + expect(user_account.terms_of_use_agreements.last.agreement_version).to eq(version) + end + + it 'marks the terms of use agreement as accepted' do + expect(acceptor.perform!).to be_accepted + end + + context 'when the SignUpServiceUpdaterJob raises an error' do + before do + allow(TermsOfUse::SignUpServiceUpdaterJob).to receive(:new).and_raise(StandardError) + end + + it 'raises an AcceptorError' do + expect { acceptor.perform! }.to raise_error(TermsOfUse::Errors::AcceptorError) + end + end end end end diff --git a/spec/sidekiq/evss/disability_compensation_form/submit_form526_all_claim_spec.rb b/spec/sidekiq/evss/disability_compensation_form/submit_form526_all_claim_spec.rb index 8b5068aada2..1fa60273a7d 100644 --- a/spec/sidekiq/evss/disability_compensation_form/submit_form526_all_claim_spec.rb +++ b/spec/sidekiq/evss/disability_compensation_form/submit_form526_all_claim_spec.rb @@ -34,6 +34,7 @@ saved_claim_id: saved_claim.id) end let(:open_claims_cassette) { 'evss/claims/claims_without_open_compensation_claims' } + let(:caseflow_cassette) { 'caseflow/appeals' } let(:rated_disabilities_cassette) { 'evss/disability_compensation_form/rated_disabilities' } let(:submit_form_cassette) { 'evss/disability_compensation_form/submit_form_v2' } let(:lh_upload) { 'lighthouse/benefits_intake/200_lighthouse_intake_upload_location' } @@ -41,7 +42,8 @@ let(:lh_intake_upload) { 'lighthouse/benefits_intake/200_lighthouse_intake_upload' } let(:lh_submission) { 'lighthouse/benefits_claims/submit526/200_response' } let(:cassettes) do - [open_claims_cassette, rated_disabilities_cassette, submit_form_cassette, lh_upload, evss_get_pdf, + [open_claims_cassette, caseflow_cassette, rated_disabilities_cassette, + submit_form_cassette, lh_upload, evss_get_pdf, lh_intake_upload, lh_submission] end let(:backup_klass) { Sidekiq::Form526BackupSubmissionProcess::Submit } @@ -151,7 +153,8 @@ def expect_retryable_error(error_class) expect(Rails.logger).to have_received(:info).with('EP Merge total open EPs', id: submission.id, count: 1) expect(Rails.logger).to have_received(:info).with( 'EP Merge open EP eligibility', - { id: submission.id, feature_enabled: true, pending_ep_age: 365, pending_ep_status: 'UNDER REVIEW' } + { id: submission.id, feature_enabled: true, open_claim_review: false, + pending_ep_age: 365, pending_ep_status: 'UNDER REVIEW' } ) end @@ -186,6 +189,32 @@ def expect_retryable_error(error_class) end end + context 'when an EP 030 or 040 is included in the list of open claims' do + let(:open_claims_cassette) { 'evss/claims/claims_with_open_040' } + + it 'does not save any claim ID for EP400 merge' do + subject.perform_async(submission.id) + VCR.use_cassette('virtual_regional_office/contention_classification') do + described_class.drain + end + submission.reload + expect(submission.read_metadata(:ep_merge_pending_claim_id)).to be_nil + end + end + + context 'when Caseflow appeals status API returns an open claim review' do + let(:caseflow_cassette) { 'caseflow/appeals_with_hlr_only' } + + it 'does not save any claim ID for EP400 merge' do + subject.perform_async(submission.id) + VCR.use_cassette('virtual_regional_office/contention_classification') do + described_class.drain + end + submission.reload + expect(submission.read_metadata(:ep_merge_pending_claim_id)).to be_nil + end + end + context 'when EP400 merge API call is disabled' do before { Flipper.disable(:disability_526_ep_merge_api) } diff --git a/spec/sidekiq/va_notify_dd_email_job_spec.rb b/spec/sidekiq/va_notify_dd_email_job_spec.rb index 406ee454aa7..2735728bbc4 100644 --- a/spec/sidekiq/va_notify_dd_email_job_spec.rb +++ b/spec/sidekiq/va_notify_dd_email_job_spec.rb @@ -64,6 +64,19 @@ end end + context 'with a dd type of comp_and_pen' do + it 'sends a confirmation email using the comp and pen template' do + allow(VaNotify::Service).to receive(:new) + .with(Settings.vanotify.services.va_gov.api_key).and_return(notification_client) + + expect(notification_client).to receive(:send_email).with( + email_address: email, template_id: 'comp_pen_template_id' + ) + + described_class.new.perform(email, 'comp_and_pen') + end + end + context 'without a dd type' do it 'sends a confirmation email using the direct_deposit template' do allow(VaNotify::Service).to receive(:new) @@ -122,15 +135,27 @@ end end - context 'when dd_type is comp_pen' do + context 'when dd_type is unknown' do it 'returns the direct_deposit template' do + expect(job.template_type('fake')).to eq('direct_deposit') + end + end + + context 'when dd_type is comp_pen' do + it 'returns the direct_deposit_comp_pen template' do expect(job.template_type('comp_pen')).to eq('direct_deposit_comp_pen') end end + context 'when dd_type is comp_and_pen' do + it 'returns the direct_deposit_comp_pen template' do + expect(job.template_type('comp_and_pen')).to eq('direct_deposit_comp_pen') + end + end + context 'when dd_type is edu' do - it 'returns the direct_deposit template' do - expect(job.template_type('edu')).to eq('direct_deposit') + it 'returns the direct_deposit_edu template' do + expect(job.template_type('ch33')).to eq('direct_deposit_edu') end end end diff --git a/spec/support/vcr_cassettes/caseflow/appeals_with_hlr_only.yml b/spec/support/vcr_cassettes/caseflow/appeals_with_hlr_only.yml new file mode 100644 index 00000000000..a855a572b0e --- /dev/null +++ b/spec/support/vcr_cassettes/caseflow/appeals_with_hlr_only.yml @@ -0,0 +1,58 @@ +--- +http_interactions: +- request: + method: get + uri: https://dsva-appeals-certification-dev-1895622301.us-gov-west-1.elb.amazonaws.com/api/v2/appeals + body: + encoding: US-ASCII + string: '' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Ssn: + - '120495723' + Authorization: + - Token token=PUBLICDEMO123 + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Cache-Control: + - max-age=0, private, must-revalidate + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 19 Jan 2018 17:26:32 GMT + Etag: + - W/"ab470b0240e45ddd9bd220cdea147828" + Server: + - nginx/1.12.1 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Request-Id: + - 89ccfeb0-097a-4b26-9bdf-6570dd6f1c87 + X-Runtime: + - '0.012297' + X-Xss-Protection: + - 1; mode=block + Content-Length: + - '3241' + Connection: + - keep-alive + body: + encoding: UTF-8 + string: '{"data":[{"id":"HLR2423","type":"higherLevelReview","attributes":{"appealIds":["HLR2423"],"updated":"2024-04-11T10:19:54-04:00","incompleteHistory":false,"active":true,"description":"7 compensation issues","location":"aoj","aoj":"vba","programArea":"compensation","status":{"type":"hlr_received","details":{}},"alerts":[],"issues":[{"active":true,"lastAction":null,"date":null,"description":"Compensation issue","diagnosticCode":null},{"active":true,"lastAction":null,"date":null,"description":"Compensation issue","diagnosticCode":null},{"active":true,"lastAction":null,"date":null,"description":"Compensation issue","diagnosticCode":null},{"active":true,"lastAction":null,"date":null,"description":"Compensation issue","diagnosticCode":null},{"active":true,"lastAction":null,"date":null,"description":"Compensation issue","diagnosticCode":null},{"active":true,"lastAction":null,"date":null,"description":"Compensation issue","diagnosticCode":null},{"active":true,"lastAction":null,"date":null,"description":"Compensation issue","diagnosticCode":null}],"events":[{"type":"hlr_request","date":"2020-05-01"}],"evidence":[]}}]}' + http_version: + recorded_at: Wed, 08 Jan 2018 14:44:00 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/support/vcr_cassettes/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives/empty_response.yml b/spec/support/vcr_cassettes/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives/empty_response.yml new file mode 100644 index 00000000000..275cdc2443c --- /dev/null +++ b/spec/support/vcr_cassettes/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives/empty_response.yml @@ -0,0 +1,106 @@ +--- +http_interactions: +- request: + method: get + uri: "/VDC/VeteranRepresentativeService?WSDL" + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Faraday v2.9.0 + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Date: + - Thu, 18 Apr 2024 15:56:40 GMT + Server: + - Apache + X-Frame-Options: + - SAMEORIGIN + Transfer-Encoding: + - chunked + Content-Type: + - text/xml;charset=utf-8 + Strict-Transport-Security: + - max-age=16000000; includeSubDomains; preload; + body: + encoding: UTF-8 + string: |- + + recorded_at: Wed, 17 Apr 2024 23:10:31 GMT +- request: + method: post + uri: "/VDC/VeteranRepresentativeService" + body: + encoding: UTF-8 + string: | + + + + + + VAgovAPI + + + 127.0.0.1 + 281 + VAgovAPI + xUid + xKey + + + + + + + 1 + 21-22 + + + + + headers: + User-Agent: + - Faraday v2.9.0 + Content-Type: + - text/xml;charset=UTF-8 + Host: + - ".vba.va.gov" + Soapaction: + - '"readAllVeteranRepresentatives"' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Date: + - Thu, 18 Apr 2024 15:56:41 GMT + Server: + - Apache + X-Frame-Options: + - SAMEORIGIN + Transfer-Encoding: + - chunked + Content-Type: + - text/xml; charset=utf-8 + Strict-Transport-Security: + - max-age=16000000; includeSubDomains; preload; + body: + encoding: UTF-8 + string: + recorded_at: Wed, 17 Apr 2024 23:10:31 GMT +recorded_with: VCR 6.2.0 diff --git a/spec/support/vcr_cassettes/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives/valid_individual.yml b/spec/support/vcr_cassettes/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives/valid_individual.yml new file mode 100644 index 00000000000..86a4e7c7dee --- /dev/null +++ b/spec/support/vcr_cassettes/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives/valid_individual.yml @@ -0,0 +1,314 @@ +--- +http_interactions: +- request: + method: get + uri: "/VDC/VeteranRepresentativeService?WSDL" + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Faraday v2.9.0 + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Date: + - Wed, 17 Apr 2024 23:51:34 GMT + Server: + - Apache + X-Frame-Options: + - SAMEORIGIN + Transfer-Encoding: + - chunked + Content-Type: + - text/xml;charset=utf-8 + Strict-Transport-Security: + - max-age=16000000; includeSubDomains; preload; + body: + encoding: UTF-8 + string: |- + + recorded_at: Wed, 17 Apr 2024 23:10:31 GMT +- request: + method: post + uri: "/VDC/VeteranRepresentativeService" + body: + encoding: UTF-8 + string: | + + + + + + VAgovAPI + + + 127.0.0.1 + 281 + VAgovAPI + xUid + xKey + + + + + + + + 600043201 + 21-22A + + + + + headers: + User-Agent: + - Faraday v2.9.0 + Content-Type: + - text/xml;charset=UTF-8 + Host: + - ".vba.va.gov" + Soapaction: + - '"readAllVeteranRepresentatives"' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Date: + - Wed, 17 Apr 2024 23:51:34 GMT + Server: + - Apache + X-Frame-Options: + - SAMEORIGIN + Transfer-Encoding: + - chunked + Content-Type: + - text/xml; charset=utf-8 + Strict-Transport-Security: + - max-age=16000000; includeSubDomains; preload; + body: + encoding: UTF-8 + string: |- + + + + + + + M. + Karl Hawkins, LLC + 75 W. Lockwood Avenue + Suite + 222 + true + Webster + Groves + + 21-22A + + false + false + false + false + MARVIN + K HAWKINS + + 3149615010 + 1QE + 63119 + 69189 + Hawkins + Marvin + Marvin + Hawkins + + Attorney + true + Other + + MO + 2016-12-14T12:24:07-06:00 + Complete + 111939 + + + + + + + Obsolete + TAMARA + ELLIS + E + 796130115 + 796130115 + + + 1413 + Laurens Road + + + true + Greenville + + 21-22A + + false + false + false + false + Frank + Dana III + + 8642420700 + 1UW + 29607 + 69193 + Dana + III + Frank + Frank + Dana III + + Attorney + true + Other + + SC + 2016-12-14T15:22:59-06:00 + Complete + 111947 + + + + + + + Obsolete + TAMARA + ELLIS + E + 796130115 + 796130115 + + + Maser Amundson, + PA + 6601 Lyndale Avenue South + Suite + 320 + true + Minneapolis + + 21-22A + + false + false + false + false + KRIS + LORRAINE MASER + + 9529254147 + 1ZM + 55423 + 69218 + Maser + + Kris + Kris + Maser + + Attorney + true + Other + + MN + 2016-12-16T12:53:19-06:00 + Complete + 111978 + + + + + + + Obsolete + TAMARA + ELLIS + E + 796130115 + 796130115 + + + Metzinger Associates + 3838 + Watt Avenue + Suite D-400 + true + Sacramento + + 21-22A + + false + false + false + false + RONALD + M. METZINGER + + 9165141097 + 2FO + 95821 + 69230 + Metzinger + Ronald + Ronald + Metzinger + + Attorney + true + Other + + CA + 2016-12-16T14:53:25-06:00 + Complete + 112002 + + + + + + + Obsolete + TAMARA + ELLIS + E + 796130115 + 796130115 + + + + + recorded_at: Wed, 17 Apr 2024 23:10:31 GMT +recorded_with: VCR 6.2.0 diff --git a/spec/support/vcr_cassettes/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives/valid_org.yml b/spec/support/vcr_cassettes/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives/valid_org.yml new file mode 100644 index 00000000000..2efdf1df92f --- /dev/null +++ b/spec/support/vcr_cassettes/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives/valid_org.yml @@ -0,0 +1,402 @@ +--- +http_interactions: +- request: + method: get + uri: "/VDC/VeteranRepresentativeService?WSDL" + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Faraday v2.9.0 + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Date: + - Wed, 17 Apr 2024 23:51:32 GMT + Server: + - Apache + X-Frame-Options: + - SAMEORIGIN + Transfer-Encoding: + - chunked + Content-Type: + - text/xml;charset=utf-8 + Strict-Transport-Security: + - max-age=16000000; includeSubDomains; preload; + body: + encoding: UTF-8 + string: |- + + recorded_at: Wed, 17 Apr 2024 23:10:31 GMT +- request: + method: post + uri: "/VDC/VeteranRepresentativeService" + body: + encoding: UTF-8 + string: | + + + + + + VAgovAPI + + + 127.0.0.1 + 281 + VAgovAPI + xUid + xKey + + + + + + + + 600043201 + 21-22 + + + + + headers: + User-Agent: + - Faraday v2.9.0 + Content-Type: + - text/xml;charset=UTF-8 + Host: + - ".vba.va.gov" + Soapaction: + - '"readAllVeteranRepresentatives"' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Date: + - Wed, 17 Apr 2024 23:51:33 GMT + Server: + - Apache + X-Frame-Options: + - SAMEORIGIN + Transfer-Encoding: + - chunked + Content-Type: + - text/xml; charset=utf-8 + Strict-Transport-Security: + - max-age=16000000; includeSubDomains; preload; + body: + encoding: UTF-8 + string: |- + + + + + + + + + + true + Washington + + + 21-22 + + false + false + false + false + AMERICAN + LEGION + + + 074 + 20006 + 38284 + + + + + + true + + + DC + 2014-10-29T13:39:36-05:00 + Complete + 67681 + + + + + + + Obsolete + TAMARA + ELLIS + E + 796130115 + 796130115 + + + 1 + Federal Drive Rm 191 Whipple Fed. + + + true + Fort + Snelling + + 21-22 + + false + false + false + false + AMERICAN + LEGION + + + 074 + 55111 + 38584 + + + + + + true + + + MD + 2014-10-30T09:59:07-05:00 + Complete + 68211 + + + + + + + Obsolete + TAMARA + ELLIS + E + 796130115 + 796130115 + + + c/o + Bill Nichole State Veterans Hom + + + false + Alexander + City + + 21-22 + + false + false + false + false + AMERICAN + LEGION + + + 074 + 35010 + 38701 + + + + + + true + + + AL + 2014-10-31T08:46:53-05:00 + Complete + 68433 + + + + + + + Obsolete + TAMARA + ELLIS + E + 796130115 + 796130115 + + + + + + true + Montgomery + + 21-22 + + false + false + false + false + DISABLED + AMERICAN VETERANS + + 3342133365 + 083 + 36109 + 38703 + + + + + + true + + + AL + 2014-10-31T09:12:14-05:00 + Complete + 68437 + + + + + + + Obsolete + TAMARA + ELLIS + E + 796130115 + 796130115 + + + + + + true + Ft. + Myers + + 21-22 + + false + false + false + false + DISABLED + AMERICAN VETERANS + + 2395338381 + 083 + 33901 + 52450 + + + + + Recognized + Veterans Service Organization + true + + + FL + 2015-08-12T08:41:59-05:00 + Complete + 86849 + STROUD,BEATRICE + 2015-08-12T08:48:36-05:00 + + + + + + Accepted + TAMARA + ELLIS + E + 796130115 + 796130115 + + + 315 + W. Main Street, Suite 525 + + + true + Tavares + + 21-22 + + false + false + false + false + AMERICAN + LEGION + + 3527426585 + 074 + 32778 + 76529 + + + + + Recognized + Veterans Service Organization + true + + + FL + 2017-10-17T10:02:33-05:00 + Complete + 124369 + BROWN,ANTONIO + 2017-10-17T10:04:05-05:00 + + + + + + Accepted + TAMARA + ELLIS + E + 796130115 + 796130115 + + + + + recorded_at: Wed, 17 Apr 2024 23:10:31 GMT +recorded_with: VCR 6.2.0 diff --git a/spec/support/vcr_cassettes/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives/valid_org_single.yml b/spec/support/vcr_cassettes/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives/valid_org_single.yml new file mode 100644 index 00000000000..02f4e065183 --- /dev/null +++ b/spec/support/vcr_cassettes/claims_api/bgs/veteran_representative_service/read_all_veteran_representatives/valid_org_single.yml @@ -0,0 +1,167 @@ +--- +http_interactions: +- request: + method: get + uri: "/VDC/VeteranRepresentativeService?WSDL" + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Faraday v2.9.0 + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Date: + - Wed, 17 Apr 2024 23:51:32 GMT + Server: + - Apache + X-Frame-Options: + - SAMEORIGIN + Transfer-Encoding: + - chunked + Content-Type: + - text/xml;charset=utf-8 + Strict-Transport-Security: + - max-age=16000000; includeSubDomains; preload; + body: + encoding: UTF-8 + string: |- + + recorded_at: Wed, 17 Apr 2024 23:10:31 GMT +- request: + method: post + uri: "/VDC/VeteranRepresentativeService" + body: + encoding: UTF-8 + string: | + + + + + + VAgovAPI + + + 127.0.0.1 + 281 + VAgovAPI + xUid + xKey + + + + + + + + 600043201 + 21-22 + + + + + headers: + User-Agent: + - Faraday v2.9.0 + Content-Type: + - text/xml;charset=UTF-8 + Host: + - ".vba.va.gov" + Soapaction: + - '"readAllVeteranRepresentatives"' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Date: + - Wed, 17 Apr 2024 23:51:33 GMT + Server: + - Apache + X-Frame-Options: + - SAMEORIGIN + Transfer-Encoding: + - chunked + Content-Type: + - text/xml; charset=utf-8 + Strict-Transport-Security: + - max-age=16000000; includeSubDomains; preload; + body: + encoding: UTF-8 + string: |- + + + + + + + + + + true + Washington + + + 21-22 + + false + false + false + false + AMERICAN + LEGION + + + 074 + 20006 + 38284 + + + + + + true + + + DC + 2014-10-29T13:39:36-05:00 + Complete + 67681 + + + + + + + Obsolete + TAMARA + ELLIS + E + 796130115 + 796130115 + + + + + recorded_at: Wed, 17 Apr 2024 23:10:31 GMT +recorded_with: VCR 6.2.0 diff --git a/spec/support/vcr_cassettes/evss/claims/claims_with_open_040.yml b/spec/support/vcr_cassettes/evss/claims/claims_with_open_040.yml new file mode 100644 index 00000000000..c56e0f1dbb7 --- /dev/null +++ b/spec/support/vcr_cassettes/evss/claims/claims_with_open_040.yml @@ -0,0 +1,6443 @@ +--- +http_interactions: +- request: + method: get + uri: "/wss-claims-services-web-3.6/rest/vbaClaimStatusService/getClaims" + body: + encoding: UTF-8 + string: '' + headers: + User-Agent: + - Faraday v0.9.2 + Accept: + - "*/*" + Accept-Encoding: + - gzip,deflate + Date: + - Tue, 12 Dec 2017 03:09:06 GMT + Va-Eauth-Csid: + - DSLogon + Va-Eauth-Authenticationmethod: + - DSLogon + Va-Eauth-Pnidtype: + - SSN + Va-Eauth-Assurancelevel: + - '3' + Va-Eauth-Firstname: + - WESLEY + Va-Eauth-Lastname: + - FORD + Va-Eauth-Issueinstant: + - '2017-12-07T00:55:09Z' + Va-Eauth-Dodedipnid: + - '1007697216' + Va-Eauth-Birlsfilenumber: + - '796043735' + Va-Eauth-Pid: + - '600061742' + Va-Eauth-Pnid: + - '796043735' + Va-Eauth-Birthdate: + - '1986-05-06T00:00:00+00:00' + Va-Eauth-Authorization: + - '{"authorizationResponse":{"status":"VETERAN","idType":"SSN","id":"796043735","edi":"1007697216","firstName":"WESLEY","lastName":"FORD","birthDate":"1986-05-06T00:00:00+00:00"}}' + Va-Eauth-Authenticationauthority: + - 'eauth' + Va-Eauth-Service-Transaction-Id: + - <%= transaction_id %> + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 12 Dec 2017 03:09:06 GMT + Server: + - Apache + Content-Type: + - application/json + X-Wily-Servlet: + - Encrypt1 hR/KG2GOR16aRfvv3/q1AW0eXDaeERIVopFkOCXDj8aBMFJ3Yx6n3JU460kEeiDI+f7tx96uM7rd6Q66kG1F301pdCrOJfMsJBfCUXtpBBUC10v84zvjZZhZrTuMJwibXwrFyA6VYWhxQ0aj5bSLXKVvNWBYquJXTZ8L8ia/vdk= + X-Wily-Info: + - Clear guid=48B282EB0AE153E03B6B6CF4AF6C463C + Via: + - 1.1 pint.ebenefits.va.gov:444 + Vary: + - Accept-Encoding,User-Agent + Content-Encoding: + - gzip + X-Ua-Compatible: + - IE=Edge + Transfer-Encoding: + - chunked + body: + encoding: UTF-8 + string: |- + { + "allIntentToFiles" : [ { + "associatedBenefitClaimId" : 600033692, + "corpParticpantId" : 600061742, + "expirationDate" : 1470413758000, + "intentToFileID" : 6416, + "receivedDate" : 1438791358000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1470929322000, + "intentToFileID" : 6550, + "receivedDate" : 1439306922000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600061090, + "corpParticpantId" : 600061742, + "expirationDate" : 1476291193000, + "intentToFileID" : 7717, + "receivedDate" : 1444668793000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1478552516000, + "intentToFileID" : 8099, + "receivedDate" : 1446930116000, + "source" : "SEP", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1478792937000, + "intentToFileID" : 8121, + "receivedDate" : 1447170537000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600061496, + "corpParticpantId" : 600061742, + "expirationDate" : 1479419546000, + "intentToFileID" : 8268, + "receivedDate" : 1447797146000, + "source" : "SEP", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600065439, + "corpParticpantId" : 600061742, + "expirationDate" : 1481205798000, + "intentToFileID" : 9828, + "receivedDate" : 1449583398000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1481212800000, + "intentToFileID" : 10027, + "receivedDate" : 1449590400000, + "source" : "CENTMAIL", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1483124419000, + "intentToFileID" : 10479, + "receivedDate" : 1451502019000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1483125351000, + "intentToFileID" : 10480, + "receivedDate" : 1451502951000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600068090, + "corpParticpantId" : 600061742, + "expirationDate" : 1484418765000, + "intentToFileID" : 10775, + "receivedDate" : 1452796365000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1485699409000, + "intentToFileID" : 11404, + "receivedDate" : 1454077009000, + "source" : "SEP", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1486402782000, + "intentToFileID" : 11764, + "receivedDate" : 1454780382000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600076005, + "corpParticpantId" : 600061742, + "expirationDate" : 1492199559000, + "intentToFileID" : 14121, + "receivedDate" : 1460663559000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1494085403000, + "intentToFileID" : 14563, + "receivedDate" : 1462549403000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1494086040000, + "intentToFileID" : 14564, + "receivedDate" : 1462550040000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600076302, + "corpParticpantId" : 600061742, + "expirationDate" : 1494940243000, + "intentToFileID" : 14823, + "receivedDate" : 1463404243000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1494940595000, + "intentToFileID" : 14824, + "receivedDate" : 1463404595000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1494941054000, + "intentToFileID" : 14825, + "receivedDate" : 1463405054000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1494942037000, + "intentToFileID" : 14827, + "receivedDate" : 1463406037000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1494942375000, + "intentToFileID" : 14828, + "receivedDate" : 1463406375000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600076303, + "corpParticpantId" : 600061742, + "expirationDate" : 1495131109000, + "intentToFileID" : 14884, + "receivedDate" : 1463595109000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600076303, + "corpParticpantId" : 600061742, + "expirationDate" : 1496951630000, + "intentToFileID" : 15437, + "receivedDate" : 1465415630000, + "source" : "SEP", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600076303, + "corpParticpantId" : 600061742, + "expirationDate" : 1497372248000, + "intentToFileID" : 15529, + "receivedDate" : 1465836248000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600078460, + "corpParticpantId" : 600061742, + "expirationDate" : 1498311747000, + "intentToFileID" : 15765, + "receivedDate" : 1466775747000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600079853, + "corpParticpantId" : 600061742, + "expirationDate" : 1498841691000, + "intentToFileID" : 15828, + "receivedDate" : 1467305691000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1500388616000, + "intentToFileID" : 16106, + "receivedDate" : 1468852616000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1500733173000, + "intentToFileID" : 16173, + "receivedDate" : 1469197173000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1500744717000, + "intentToFileID" : 16184, + "receivedDate" : 1469208717000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1500745120000, + "intentToFileID" : 16185, + "receivedDate" : 1469209120000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1500745294000, + "intentToFileID" : 16186, + "receivedDate" : 1469209294000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1500745486000, + "intentToFileID" : 16187, + "receivedDate" : 1469209486000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600080385, + "corpParticpantId" : 600061742, + "expirationDate" : 1501182458000, + "intentToFileID" : 16248, + "receivedDate" : 1469646458000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1501183851000, + "intentToFileID" : 16251, + "receivedDate" : 1469647851000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1501184077000, + "intentToFileID" : 16252, + "receivedDate" : 1469648077000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1501269339000, + "intentToFileID" : 16270, + "receivedDate" : 1469733339000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1501613032000, + "intentToFileID" : 16308, + "receivedDate" : 1470077032000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1501614287000, + "intentToFileID" : 16309, + "receivedDate" : 1470078287000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1501615139000, + "intentToFileID" : 16310, + "receivedDate" : 1470079139000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600085418, + "corpParticpantId" : 600061742, + "expirationDate" : 1501691029000, + "intentToFileID" : 16318, + "receivedDate" : 1470155029000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1501692300000, + "intentToFileID" : 16319, + "receivedDate" : 1470156300000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1501701137000, + "intentToFileID" : 16325, + "receivedDate" : 1470165137000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1501951989000, + "intentToFileID" : 16383, + "receivedDate" : 1470415989000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1504016374000, + "intentToFileID" : 17825, + "receivedDate" : 1472480374000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1504029430000, + "intentToFileID" : 17863, + "receivedDate" : 1472493430000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1504397676000, + "intentToFileID" : 18083, + "receivedDate" : 1472861676000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1504714382000, + "intentToFileID" : 18106, + "receivedDate" : 1473178382000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1504717852000, + "intentToFileID" : 18107, + "receivedDate" : 1473181852000, + "source" : "SEP", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1504718883000, + "intentToFileID" : 18108, + "receivedDate" : 1473182883000, + "source" : "SEP", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1504723172000, + "intentToFileID" : 18110, + "receivedDate" : 1473187172000, + "source" : "SEP", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600087175, + "corpParticpantId" : 600061742, + "expirationDate" : 1507232074000, + "intentToFileID" : 18612, + "receivedDate" : 1475696074000, + "source" : "SEP", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1507256837000, + "intentToFileID" : 18628, + "receivedDate" : 1475720837000, + "source" : "SEP", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600089426, + "corpParticpantId" : 600061742, + "expirationDate" : 1508007746000, + "intentToFileID" : 18775, + "receivedDate" : 1476471746000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1508519042000, + "intentToFileID" : 18865, + "receivedDate" : 1476983042000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1508865800000, + "intentToFileID" : 18929, + "receivedDate" : 1477329800000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1509024079000, + "intentToFileID" : 19085, + "receivedDate" : 1477488079000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1509203568000, + "intentToFileID" : 19287, + "receivedDate" : 1477667568000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1509543559000, + "intentToFileID" : 19330, + "receivedDate" : 1478007559000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1509548690000, + "intentToFileID" : 19333, + "receivedDate" : 1478012690000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1509559563000, + "intentToFileID" : 19343, + "receivedDate" : 1478023563000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1511459476000, + "intentToFileID" : 19795, + "receivedDate" : 1479923476000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1512139325000, + "intentToFileID" : 19885, + "receivedDate" : 1480603325000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1512503671000, + "intentToFileID" : 20014, + "receivedDate" : 1480967671000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1514407975000, + "intentToFileID" : 20271, + "receivedDate" : 1482871975000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1515597551000, + "intentToFileID" : 20390, + "receivedDate" : 1484061551000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1515609646000, + "intentToFileID" : 20396, + "receivedDate" : 1484073646000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1515686400000, + "intentToFileID" : 20425, + "receivedDate" : 1484150400000, + "source" : "CENTMAIL", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1515765376000, + "intentToFileID" : 20465, + "receivedDate" : 1484229376000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1515854729000, + "intentToFileID" : 20505, + "receivedDate" : 1484318729000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1515860538000, + "intentToFileID" : 20529, + "receivedDate" : 1484324538000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1516293905000, + "intentToFileID" : 20617, + "receivedDate" : 1484757905000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1516373965000, + "intentToFileID" : 20644, + "receivedDate" : 1484837965000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1516742672000, + "intentToFileID" : 20785, + "receivedDate" : 1485206672000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1516998234000, + "intentToFileID" : 20879, + "receivedDate" : 1485462234000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1517488824000, + "intentToFileID" : 21031, + "receivedDate" : 1485952824000, + "source" : "SEP", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1517660556000, + "intentToFileID" : 21125, + "receivedDate" : 1486124556000, + "source" : "SEP", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1517684688000, + "intentToFileID" : 21142, + "receivedDate" : 1486148688000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1517920381000, + "intentToFileID" : 21183, + "receivedDate" : 1486384381000, + "source" : "SEP", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1517931278000, + "intentToFileID" : 21191, + "receivedDate" : 1486395278000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1518005286000, + "intentToFileID" : 21229, + "receivedDate" : 1486469286000, + "source" : "SEP", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600094535, + "corpParticpantId" : 600061742, + "expirationDate" : 1518294572000, + "intentToFileID" : 21390, + "receivedDate" : 1486758572000, + "source" : "SEP", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600095637, + "corpParticpantId" : 600061742, + "expirationDate" : 1519325679000, + "intentToFileID" : 21684, + "receivedDate" : 1487789679000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600095790, + "corpParticpantId" : 600061742, + "expirationDate" : 1519421433000, + "intentToFileID" : 21738, + "receivedDate" : 1487885433000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600095836, + "corpParticpantId" : 600061742, + "expirationDate" : 1519485163000, + "intentToFileID" : 21749, + "receivedDate" : 1487949163000, + "source" : "SEP", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1519485664000, + "intentToFileID" : 21750, + "receivedDate" : 1487949664000, + "source" : "SEP", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600096206, + "corpParticpantId" : 600061742, + "expirationDate" : 1519914705000, + "intentToFileID" : 21824, + "receivedDate" : 1488378705000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1519914962000, + "intentToFileID" : 21825, + "receivedDate" : 1488378962000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1519915192000, + "intentToFileID" : 21826, + "receivedDate" : 1488379192000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600096209, + "corpParticpantId" : 600061742, + "expirationDate" : 1520093716000, + "intentToFileID" : 21889, + "receivedDate" : 1488557716000, + "source" : "SEP", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600096209, + "corpParticpantId" : 600061742, + "expirationDate" : 1520533663000, + "intentToFileID" : 22008, + "receivedDate" : 1488997663000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1520539914000, + "intentToFileID" : 22029, + "receivedDate" : 1489003914000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1520539934000, + "intentToFileID" : 22030, + "receivedDate" : 1489003934000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600096209, + "corpParticpantId" : 600061742, + "expirationDate" : 1520716743000, + "intentToFileID" : 22144, + "receivedDate" : 1489180743000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600096209, + "corpParticpantId" : 600061742, + "expirationDate" : 1520970201000, + "intentToFileID" : 22175, + "receivedDate" : 1489434201000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600096209, + "corpParticpantId" : 600061742, + "expirationDate" : 1521719440000, + "intentToFileID" : 22360, + "receivedDate" : 1490183440000, + "source" : "SEP", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1521737599000, + "intentToFileID" : 22374, + "receivedDate" : 1490201599000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1521741168000, + "intentToFileID" : 22383, + "receivedDate" : 1490205168000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600096209, + "corpParticpantId" : 600061742, + "expirationDate" : 1521826355000, + "intentToFileID" : 22432, + "receivedDate" : 1490290355000, + "source" : "SEP", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600098264, + "corpParticpantId" : 600061742, + "expirationDate" : 1521889842000, + "intentToFileID" : 22457, + "receivedDate" : 1490353842000, + "source" : "SEP", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600098379, + "corpParticpantId" : 600061742, + "expirationDate" : 1522156451000, + "intentToFileID" : 22525, + "receivedDate" : 1490620451000, + "source" : "SEP", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600100383, + "corpParticpantId" : 600061742, + "expirationDate" : 1524683751000, + "intentToFileID" : 23017, + "receivedDate" : 1493147751000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1524687677000, + "intentToFileID" : 23020, + "receivedDate" : 1493151677000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600101152, + "corpParticpantId" : 600061742, + "expirationDate" : 1524765476000, + "intentToFileID" : 23025, + "receivedDate" : 1493229476000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1525460931000, + "intentToFileID" : 23325, + "receivedDate" : 1493924931000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600101174, + "corpParticpantId" : 600061742, + "expirationDate" : 1525521676000, + "intentToFileID" : 23333, + "receivedDate" : 1493985676000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600101472, + "corpParticpantId" : 600061742, + "expirationDate" : 1525784288000, + "intentToFileID" : 23392, + "receivedDate" : 1494248288000, + "source" : "SEP", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600101876, + "corpParticpantId" : 600061742, + "expirationDate" : 1525954884000, + "intentToFileID" : 23469, + "receivedDate" : 1494418884000, + "source" : "SEP", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600103598, + "corpParticpantId" : 600061742, + "expirationDate" : 1526482960000, + "intentToFileID" : 23600, + "receivedDate" : 1494946960000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1527864969000, + "intentToFileID" : 24011, + "receivedDate" : 1496328969000, + "source" : "SEP", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1527869776000, + "intentToFileID" : 24018, + "receivedDate" : 1496333776000, + "source" : "SEP", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600104193, + "corpParticpantId" : 600061742, + "expirationDate" : 1528824217000, + "intentToFileID" : 24197, + "receivedDate" : 1497288217000, + "source" : "SEP", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1528829103000, + "intentToFileID" : 24203, + "receivedDate" : 1497293103000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600114692, + "corpParticpantId" : 600061742, + "expirationDate" : 1529422088000, + "intentToFileID" : 24720, + "receivedDate" : 1497886088000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1529699739000, + "intentToFileID" : 24897, + "receivedDate" : 1498163739000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1538141970000, + "intentToFileID" : 26876, + "receivedDate" : 1506605970000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 600118851, + "corpParticpantId" : 600061742, + "expirationDate" : 1542469096000, + "intentToFileID" : 58663, + "receivedDate" : 1510933096000, + "source" : "EBN", + "status" : "CLAIM_RECEIVED", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1544283726000, + "intentToFileID" : 128174, + "receivedDate" : 1512747726000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1544286368000, + "intentToFileID" : 128177, + "receivedDate" : 1512750368000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + }, { + "associatedBenefitClaimId" : 0, + "corpParticpantId" : 600061742, + "expirationDate" : 1544288132000, + "intentToFileID" : 128178, + "receivedDate" : 1512752132000, + "source" : "EBN", + "status" : "DUPLICATE", + "type" : "COMPENSATION", + "vetParticipantId" : 0 + } ], + "anyHistoricalClaimsConsolidatable" : true, + "historicalClaims" : [ { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "09/20/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "09/20/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "09/20/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "07/06/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600106271", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimCompleteDate" : "06/21/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/21/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/21/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "06/21/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600105156", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "06/21/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/21/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/21/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "06/12/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600104193", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "06/21/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/21/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/21/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "06/12/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "401", + "id" : "600104203", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "06/21/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/21/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/21/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "06/01/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "020", + "id" : "600103598", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "05/30/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/30/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/30/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/26/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600103286", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "05/24/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/24/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/24/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/18/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "134", + "id" : "600102451", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "05/24/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/24/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/24/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/18/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "136", + "id" : "600102462", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "05/24/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/24/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/24/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/11/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "403", + "id" : "600101876", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "05/24/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/24/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/24/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/09/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "132", + "id" : "600101474", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "05/24/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/24/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/24/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/09/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "402", + "id" : "600101472", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "05/24/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/24/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/24/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/08/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "131", + "id" : "600101317", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "05/24/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/24/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/24/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/05/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "401", + "id" : "600101174", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "05/24/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/24/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/24/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/04/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600101157", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "05/24/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/24/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/24/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/04/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600101152", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "04/25/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "406", + "id" : "600100387", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "04/25/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "405", + "id" : "600100383", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "04/21/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "137", + "id" : "600100167", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "04/21/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "138", + "id" : "600100211", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/29/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "136", + "id" : "600098749", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/27/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "404", + "id" : "600098427", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/27/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "134", + "id" : "600098385", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/27/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "403", + "id" : "600098379", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/24/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "402", + "id" : "600098264", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/24/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "132", + "id" : "600098265", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/23/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "401", + "id" : "600098196", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400PREDSCHRG", + "claimCompleteDate" : "03/16/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/16/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "03/16/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/23/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600096903", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/23/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "402", + "id" : "600096536", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/23/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "131", + "id" : "600098198", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/23/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "403", + "id" : "600096209", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/22/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600098039", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "05/24/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/24/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/24/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/22/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "026", + "id" : "600097940", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130SCHEBNREJ", + "claimCompleteDate" : "05/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "05/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/22/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600097942", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "03/20/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/20/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "03/20/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/17/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "020", + "id" : "600097658", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "03/20/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/20/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "03/20/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/17/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600097664", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400PREDSCHRG", + "claimCompleteDate" : "03/16/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/16/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "03/16/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/13/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "401", + "id" : "600096907", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "405", + "id" : "600096582", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "404", + "id" : "600096581", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "138", + "id" : "600096580", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "137", + "id" : "600096575", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "03/16/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/16/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "03/16/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "020", + "id" : "600096585", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "131", + "id" : "600096552", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "134", + "id" : "600096572", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "132", + "id" : "600096558", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "407", + "id" : "600096584", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "406", + "id" : "600096583", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "136", + "id" : "600096573", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/02/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600096458", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "03/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "03/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/01/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "402", + "id" : "600096206", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/24/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "401", + "id" : "600095836", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/23/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600095790", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "03/03/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "03/03/2017" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "03/03/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/22/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "026", + "id" : "600095637", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "02/10/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/10/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/10/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/10/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600094535", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "02/10/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/10/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/10/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/10/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600094530", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "02/10/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/10/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/10/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/07/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "026", + "id" : "600093885", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimCompleteDate" : "02/06/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/06/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/06/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/06/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "132", + "id" : "600093738", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "02/06/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/06/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/06/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/06/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600093737", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimCompleteDate" : "02/06/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/06/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/06/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "131", + "id" : "600093592", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "02/06/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/06/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/06/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "026", + "id" : "600093590", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimCompleteDate" : "02/06/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/06/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/06/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/03/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600093588", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/01/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "409", + "id" : "600093389", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/01/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "137", + "id" : "600093388", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "01/26/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "407", + "id" : "600092932", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "01/12/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "405", + "id" : "600092017", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "01/10/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "404", + "id" : "600091902", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "01/10/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "403", + "id" : "600091895", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "01/10/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "402", + "id" : "600091888", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "12/05/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "136", + "id" : "600090465", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "12/01/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "401", + "id" : "600090382", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "12/01/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "134", + "id" : "600090386", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "11/23/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600090030", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "11/16/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "133", + "id" : "600089423", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "11/16/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "026", + "id" : "600089426", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "11/04/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "131", + "id" : "600088767", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "11/04/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "132", + "id" : "600088775", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "Yes", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130SCHEBNREJ", + "claimCompleteDate" : "02/01/2017", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/01/2017" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/01/2017", + "consolidatedTrackedItemsList" : [ ], + "date" : "11/01/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600088464", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "10/27/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/27/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/27/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "10/07/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600087263", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "10/27/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/27/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/27/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "10/05/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600087180", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "10/27/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/27/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/27/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "10/05/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "026", + "id" : "600087175", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "10/03/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/03/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/03/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "09/06/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "405", + "id" : "600085457", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "10/03/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/03/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/03/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "09/06/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "404", + "id" : "600085451", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "10/03/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/03/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/03/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "09/06/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "403", + "id" : "600085449", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "10/03/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/03/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/03/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "09/06/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "402", + "id" : "600085447", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "10/03/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/03/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/03/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "09/02/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "401", + "id" : "600085419", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "10/03/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/03/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/03/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "09/02/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600085418", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130SCHEBNREJ", + "claimCompleteDate" : "10/03/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/03/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/03/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "09/02/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "134", + "id" : "600085417", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "10/03/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/03/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/03/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "09/02/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "133", + "id" : "600085416", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "10/03/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/03/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/03/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "09/02/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "131", + "id" : "600085403", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130SCHEBNREJ", + "claimCompleteDate" : "10/03/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/03/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/03/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "09/02/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "132", + "id" : "600085415", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "10/03/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/03/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/03/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "08/31/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600085093", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "08/02/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "139", + "id" : "600080422", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "08/01/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "403", + "id" : "600080385", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "07/29/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "138", + "id" : "600080311", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "07/29/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "137", + "id" : "600080285", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "07/28/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "136", + "id" : "600080221", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "07/28/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "132", + "id" : "600080175", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "07/28/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "133", + "id" : "600080199", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "07/28/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "134", + "id" : "600080218", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "07/22/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "401", + "id" : "600079853", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "07/22/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "402", + "id" : "600079874", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "06/24/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600078460", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "06/16/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "131", + "id" : "600078108", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "110", + "benefitClaimTypeCode" : "110EPDLS8", + "claimCompleteDate" : "06/07/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/07/2016" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "06/07/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "06/16/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "Yes", + "endProductCode" : "110", + "id" : "600076303", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "06/15/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600078102", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "08/08/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/08/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "06/13/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "020", + "id" : "600077984", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "06/09/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/09/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/09/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "06/04/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "131", + "id" : "600077401", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "06/09/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/09/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/09/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/26/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600077034", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "06/09/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/09/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/09/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/16/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "403", + "id" : "600076305", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "06/09/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/09/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/09/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/16/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "404", + "id" : "600076306", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "06/09/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/09/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/09/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/16/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "405", + "id" : "600076308", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "06/09/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/09/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/09/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/16/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "401", + "id" : "600076302", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020NEW", + "claimCompleteDate" : "10/03/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "10/03/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "10/03/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/09/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "020", + "id" : "600081564", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "06/09/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/09/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/09/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/06/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "026", + "id" : "600076005", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "06/09/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/09/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/09/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/06/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600076006", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "04/14/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/14/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "04/14/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/08/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "402", + "id" : "600068140", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "04/14/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/14/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "04/14/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/06/2016", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "401", + "id" : "600068090", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "04/14/2016", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/14/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "04/14/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "12/30/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600065440", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "04/14/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/14/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "04/14/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "12/30/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "026", + "id" : "600065439", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "04/14/2016", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/14/2016" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "04/14/2016", + "consolidatedTrackedItemsList" : [ ], + "date" : "12/02/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600063228", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "11/18/2015", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "11/18/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "11/18/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "11/17/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600061496", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "SEP", + "submitterRoleCode" : "VSOREP", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "11/18/2015", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "11/18/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "11/18/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "11/10/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "026", + "id" : "600061090", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "11/18/2015", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "11/18/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "11/18/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "09/16/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600057762", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "08/20/2015", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/20/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/20/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "08/20/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "026", + "id" : "600033692", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "08/08/2015", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/08/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/04/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "07/17/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "026", + "id" : "600031758", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPEBNAJRE", + "claimCompleteDate" : "08/04/2015", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "08/04/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "08/04/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "07/02/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600031399", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Dependency", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400EPDSUPP", + "claimCompleteDate" : "04/27/2015", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/27/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "04/27/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "06/02/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600025461", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "04/27/2015", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/27/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "04/27/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "04/23/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "401", + "id" : "600025648", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "04/27/2015", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/27/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "04/27/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "04/21/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "020", + "id" : "600025459", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "04/16/2015", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/16/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "04/16/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/31/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "402", + "id" : "600024537", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "04/16/2015", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/16/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "04/16/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/31/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "403", + "id" : "600024542", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "04/16/2015", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/16/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "04/16/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/12/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "401", + "id" : "600023099", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimCompleteDate" : "04/16/2015", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/16/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "04/16/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/12/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600023098", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimCompleteDate" : "04/16/2015", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/16/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "04/16/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "03/06/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "020", + "id" : "600022635", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "930", + "benefitClaimTypeCode" : "930RC", + "claimCompleteDate" : "06/03/2015", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/03/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/03/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "02/01/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "931", + "id" : "600028956", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020EPDSUPP", + "claimCompleteDate" : "02/24/2015", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "02/24/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "02/24/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "01/01/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "020", + "id" : "600016061", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "930", + "benefitClaimTypeCode" : "930RCPMC", + "claimCompleteDate" : "06/03/2015", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "06/03/2015" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "06/03/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "01/01/2015", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "930", + "id" : "600028955", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Administrative Review", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020EPDSUPP", + "claimCompleteDate" : "07/30/2014", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "07/30/2014" + }, + "claimStatus" : "CAN", + "claimTrackedItems" : { + }, + "closeDate" : "07/30/2014", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/22/2014", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "020", + "id" : "278715", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "110", + "benefitClaimTypeCode" : "110EPDLS8", + "claimCompleteDate" : "05/22/2014", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "05/22/2014" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "05/22/2014", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/21/2014", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "110", + "id" : "278512", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020NEWBDD", + "claimCompleteDate" : "01/29/2015", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "01/29/2015" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "01/29/2015", + "consolidatedTrackedItemsList" : [ ], + "date" : "05/01/2014", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "021", + "id" : "600020671", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "110", + "benefitClaimTypeCode" : "110INITLESS8", + "claimCompleteDate" : "04/07/2014", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "04/07/2014" + }, + "claimStatus" : "CLR", + "claimTrackedItems" : { + }, + "closeDate" : "04/07/2014", + "consolidatedTrackedItemsList" : [ ], + "date" : "04/29/2014", + "dbqList" : [ ], + "decisionNotificationSent" : "Yes", + "developmentLetterSent" : "No", + "endProductCode" : "110", + "id" : "275507", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "COMPLETE", + "statusChanged" : false, + "statusType" : "Compensation", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + } ], + "openClaims" : [ { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "400", + "benefitClaimTypeCode" : "400SUPP", + "claimConsolidatable" : true, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "12/08/2017" + }, + "claimStatus" : "PEND", + "claimTrackedItems" : { + }, + "consolidatedTrackedItemsList" : [ ], + "date" : "12/08/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "400", + "id" : "600118851", + "latestEvidenceRecdDate" : "06/06/2016", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "UNDER REVIEW", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "130", + "benefitClaimTypeCode" : "130DPNEBNADJ", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "09/28/2017" + }, + "claimStatus" : "PEND", + "claimTrackedItems" : { + }, + "consolidatedTrackedItemsList" : [ ], + "date" : "09/28/2017", + "dbqList" : [ ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "130", + "id" : "600114693", + "latestEvidenceRecdDate" : "06/06/2016", + "maxEstClaimDate" : "04/08/2018", + "minEstClaimDate" : "02/04/2018", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "CLAIM RECEIVED", + "statusChanged" : false, + "statusType" : "Dependency", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appealPossible" : "No", + "attentionNeeded" : "No", + "baseEndProductCode" : "020", + "benefitClaimTypeCode" : "020SUPP", + "claimConsolidatable" : false, + "claimPhaseDates" : { + "currentPhaseBack" : false, + "everPhaseBack" : false, + "phaseChangeDate" : "09/28/2017" + }, + "claimStatus" : "PEND", + "claimTrackedItems" : { + }, + "consolidatedTrackedItemsList" : [ ], + "date" : "09/28/2017", + "dbqList" : [ { + "dbqAdditionalDocumentationNeeded" : "N", + "dbqFormNumber" : "21-0960C-8", + "dbqFormTitle" : "Headaches (Including Migraine Headaches) ", + "dbqUrl" : "http://www.vba.va.gov/pubs/forms/VBA-21-0960C-8-ARE.pdf", + "diagnosticCode" : "8100", + "disabilityName" : "Migraine", + "id" : 600114692 + } ], + "decisionNotificationSent" : "No", + "developmentLetterSent" : "No", + "endProductCode" : "020", + "id" : "600114692", + "latestEvidenceRecdDate" : "06/06/2016", + "maxEstClaimDate" : "03/10/2018", + "minEstClaimDate" : "12/22/2017", + "newEvidenceReceived" : false, + "pastEstClaimDate" : false, + "pastEvidenceDueDate" : false, + "pastPhaseEstDate" : false, + "programType" : "CPL", + "status" : "UNDER REVIEW", + "statusChanged" : false, + "statusType" : "Compensation", + "submitterApplicationCode" : "EBN", + "submitterRoleCode" : "VET", + "vbaDocumentList" : [ ], + "waiver5103Submitted" : false + }, { + "appeal_possible":"No", + "attention_needed":"No", + "base_end_product_code":"040", + "benefit_claim_type_code": + "040AMADOR", + "claim_consolidatable":false, + "claim_phase_dates": { + "current_phase_back":false, + "ever_phase_back":false, + "phase_change_date":"02/22/2024" + }, + "claim_status":"PEND", + "claim_tracked_items":{}, + "consolidated_tracked_items_list":[], + "date":"02/12/2024", + "dbq_list":[], + "decision_notification_sent":"No", + "development_letter_sent":"Yes", + "end_product_code":"040", + "id":"105211571", + "latest_evidence_recd_date":"04/09/2024", + "max_est_claim_date":"11/10/2024", + "min_est_claim_date":"07/05/2024", + "new_evidence_received":true, + "past_est_claim_date":false, + "past_evidence_due_date":false, + "past_phase_est_date":false, + "program_type":"CPL", + "status":"GATHERING OF EVIDENCE", + "status_changed":false, + "status_type":"Appeal", + "submitter_application_code":"VBMS", + "submitter_role_code":"VBA", + "vba_document_list":[], + "waiver5103_submitted":false, + "wwd":[], + "wwr":[], + "wwsnfy":[] + } ] + } + http_version: + recorded_at: Tue, 12 Dec 2017 03:09:16 GMT +recorded_with: VCR 3.0.3 diff --git a/spec/support/vcr_cassettes/lighthouse/benefits_claims/submit526/200_response_generate_pdf.yml b/spec/support/vcr_cassettes/lighthouse/benefits_claims/submit526/200_response_generate_pdf.yml new file mode 100644 index 00000000000..19741d9cff9 --- /dev/null +++ b/spec/support/vcr_cassettes/lighthouse/benefits_claims/submit526/200_response_generate_pdf.yml @@ -0,0 +1,85 @@ +--- +http_interactions: +- request: + method: post + uri: https://sandbox-api.va.gov/services/claims/v2/veterans/123498767V234859/526/generatePDF/minimum-validations + body: + encoding: US-ASCII + string: '' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Authorization: + - Bearer blahblahblah + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 28 Feb 2023 21:02:39 GMT + Content-Type: + - text/html; charset=utf-8 + Connection: + - keep-alive + X-Ratelimit-Remaining-Minute: + - '59' + X-Ratelimit-Limit-Minute: + - '60' + Ratelimit-Remaining: + - '59' + Ratelimit-Limit: + - '60' + Ratelimit-Reset: + - '25' + Etag: + - W/"6571c42e57529000188d704a3cd1f46a" + Referrer-Policy: + - strict-origin-when-cross-origin + Vary: + - Origin + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Frame-Options: + - SAMEORIGIN + X-Git-Sha: + - b20885293917fd081d24899644d2718d2ab4ccf9 + X-Github-Repository: + - https://github.com/department-of-veterans-affairs/vets-api + X-Permitted-Cross-Domain-Policies: + - none + X-Request-Id: + - d687047e-5004-43c1-babb-c2f52f2fda40 + X-Runtime: + - '3.569014' + X-Xss-Protection: + - 1; mode=block + Access-Control-Allow-Origin: + - "*" + X-Kong-Upstream-Latency: + - '3573' + X-Kong-Proxy-Latency: + - '24' + Via: + - kong/3.0.2 + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Cache-Control: + - no-cache, no-store + Pragma: + - no-cache + Transfer-Encoding: + - chunked + body: + encoding: ASCII-8BIT + string: 'No example available' + recorded_at: Tue, 28 Feb 2023 21:02:39 GMT +recorded_with: VCR 6.1.0 diff --git a/spec/support/vcr_cassettes/mobile/appointments/post_appointments_400_vpg.yml b/spec/support/vcr_cassettes/mobile/appointments/post_appointments_400_vpg.yml new file mode 100644 index 00000000000..e92a2c8dd28 --- /dev/null +++ b/spec/support/vcr_cassettes/mobile/appointments/post_appointments_400_vpg.yml @@ -0,0 +1,57 @@ +--- +http_interactions: +- request: + method: post + uri: https://veteran.apps.va.gov/vpg/v1/patients/1012846043V576341/appointments + body: + encoding: UTF-8 + string: '{"kind":"cc","status":"proposed","locationId":"983","reason":"Testing","slot":{},"contact":{"telecom":[{"type":"phone","value":"2125688889"},{"type":"email","value":"judymorisooooooooooooon@gmail.com"}]},"serviceType":"CCPOD","requestedPeriods":[{"start":"2021-06-15T12:00:00.000+00:00","end":"2021-06-15T23:59:00.000+00:00"}]}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Referer: + - https://review-instance.va.gov + X-Vamf-Jwt: + - eyJhbGciOiJSUzUxMiJ9.eyJhdXRoZW50aWNhdGVkIjp0cnVlLCJsYXN0TmFtZSI6Ik1vcnJpc29uIiwic3ViIjoiMTAxMjg0NTMzMVYxNTMwNDMiLCJhdXRoZW50aWNhdGlvbkF1dGhvcml0eSI6Imdvdi52YS52YW9zIiwiZ2VuZGVyIjoiRkVNQUxFIiwiaXNzIjoiZ292LnZhLnZhbWYudXNlcnNlcnZpY2UudjIiLCJ2YW1mLmF1dGgucmVzb3VyY2VzIjpbIl4uKihcLyk_c2l0ZVtzXT9cLyhkZm4tKT85ODRcL3BhdGllbnRbc10_XC81NTIxNjEwNTBcL2FwcG9pbnRtZW50cyhcLy4qKT8kIiwiXi4qKFwvKT9zaXRlW3NdP1wvKGRmbi0pPzk4M1wvcGF0aWVudFtzXT9cLzcyMTY2OTFcL2FwcG9pbnRtZW50cyhcLy4qKT8kIiwiXi4qKFwvKT9wYXRpZW50W3NdP1wvKElDTlwvKT8xMDEyODQ1MzMxVjE1MzA0MyhcLy4qKT8kIl0sInNzbiI6Ijc5NjA2MTk3NiIsInNzdCI6MTYyMjc1NTAxNCwicGF0aWVudCI6eyJmaXJzdE5hbWUiOiJKdWR5IiwibGFzdE5hbWUiOiJNb3JyaXNvbiIsImdlbmRlciI6IkZFTUFMRSIsImljbiI6IjEwMTI4NDUzMzFWMTUzMDQzIiwiZG9iIjoiMTk1My0wNC0wMSIsImRhdGVPZkJpcnRoIjoiMTk1My0wNC0wMSIsInNzbiI6Ijc5NjA2MTk3NiJ9LCJ2YW1mLmF1dGgucm9sZXMiOlsidmV0ZXJhbiJdLCJyaWdodE9mQWNjZXNzQWNjZXB0ZWQiOnRydWUsImV4cCI6MTYyMjc1NTkxNCwianRpIjoiYjkzOGI5YTQtMDAwMC00MzRiLWI1MDgtNjAzOWQxMjVjZDRjIiwiaWRUeXBlIjoiSUNOIiwiZGF0ZU9mQmlydGgiOiIxOTUzMDQwMSIsInZlcnNpb24iOjIuNSwiZWRpcGlkIjoiMTI1OTg5Nzk3OCIsInZpc3RhSWRzIjpbeyJwYXRpZW50SWQiOiI1NTIxNjEwNTAiLCJzaXRlSWQiOiI5ODQifSx7InBhdGllbnRJZCI6IjcyMTY2OTEiLCJzaXRlSWQiOiI5ODMifV0sImZpcnN0TmFtZSI6Ikp1ZHkiLCJzdGFmZkRpc2NsYWltZXJBY2NlcHRlZCI6dHJ1ZSwibmJmIjoxNjIyNzU0ODM0LCJkb2IiOiIxOTUzMDQwMSIsImxvYSI6Mn0.xSPU-3nDiisLD0sFtoYIreyaRfOmPUF_GvqRHqj-T9Sxy0bU6JFiU7YBFeAQv0TFpLg6_-oqBbxw4y6fFvyDrkTEHz5o9FHYfxCJKk1Bf-FPp99b6rEIP0PHTh-ewPVpiVfXxAbHUc12Bxjfw0q1-LhBI8qWVsdIapQ-aEaM5UsHLM9DGU2CsUfd_ifOwMfZT6j_HMkZySHe5cUOtOuYfxk4dX2sR7PrMshvOBj3xeAbkrKCOvio-bwvvWwjHS6csR21Mcuaqlwdixzw7UUgcWn1UpmjDxYNwT6gS8G5nAk8Gjwkn0OcH_z0bL212DSIQTd-GmgQs9ORSubgWGETxQ + X-Request-Id: + - '' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 400 + message: Bad Request + headers: + Date: + - Thu, 03 Jun 2021 21:16:55 GMT + Content-Type: + - application/json + Content-Length: + - '66' + Server: + - openresty + X-Vamf-Version: + - 1.6.0 + B3: + - c9b88ad736b44fcd-9506797b4f25487c-1 + Access-Control-Allow-Headers: + - x-vamf-jwt + X-Vamf-Build: + - 36e545f + X-Vamf-Timestamp: + - '2021-05-29T19:44:21+0000' + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET,OPTIONS + Access-Control-Max-Age: + - '3600' + body: + encoding: UTF-8 + string: '{"message":"the patientIcn must match the ICN in the request URI"}' + recorded_at: Thu, 03 Jun 2021 21:16:55 GMT +recorded_with: VCR 6.0.0 diff --git a/spec/support/vcr_cassettes/mobile/appointments/post_appointments_cc_200_2222022_vpg.yml b/spec/support/vcr_cassettes/mobile/appointments/post_appointments_cc_200_2222022_vpg.yml new file mode 100644 index 00000000000..82e686a9ff4 --- /dev/null +++ b/spec/support/vcr_cassettes/mobile/appointments/post_appointments_cc_200_2222022_vpg.yml @@ -0,0 +1,62 @@ +--- +http_interactions: +- request: + method: post + uri: https://veteran.apps.va.gov/vpg/v1/patients/1012846043V576341/appointments + body: + encoding: UTF-8 + string: '{"kind":"cc","status":"proposed","locationId":"983","contact":{"telecom":[{"type":"phone","value":"2125688887"},{"type":"email","value":"judymorisooooooooooooon@gmail.com"}]},"serviceType":"podiatry","requestedPeriods":[{"start":"2021-06-15T12:00:00.000+00:00","end":"2021-06-15T23:59:00.000+00:00"}],"preferredLanguage":"English","practitioners":[{"identifier":[{"system":"http://hl7.org/fhir/sid/us-npi","value":"1407938061"}],"address":{"type":"postal","line":["38143 + Martha Ave"],"city":"Fremont","state":"CA","postalCode":"94536","country":"USA","text":"test"}}],"preferredTimesForPhoneCall":["Morning"],"preferredLocation":{"city":"Helena","state":"MT"},"comment":"test","patientIcn":"1012846043V576341"}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Referer: + - https://review-instance.va.gov + X-Vamf-Jwt: + - eyJhbGciOiJSUzUxMiJ9.eyJhdXRoZW50aWNhdGVkIjp0cnVlLCJsYXN0TmFtZSI6Ik1vcmdhbiIsInN1YiI6IjEwMTI4NDYwNDNWNTc2MzQxIiwiYXV0aGVudGljYXRpb25BdXRob3JpdHkiOiJnb3YudmEudmFvcyIsImdlbmRlciI6IkZFTUFMRSIsImlzcyI6Imdvdi52YS52YW1mLnVzZXJzZXJ2aWNlLnYyIiwidmFtZi5hdXRoLnJlc291cmNlcyI6WyJeLiooXC8pP3BhdGllbnRbc10_XC8oSUNOXC8pPzEwMTI4NDYwNDNWNTc2MzQxKFwvLiopPyQiLCJeLiooXC8pP3NpdGVbc10_XC8oZGZuLSk_OTgzXC9wYXRpZW50W3NdP1wvNzIxNjY4NVwvYXBwb2ludG1lbnRzKFwvLiopPyQiLCJeLiooXC8pP3NpdGVbc10_XC8oZGZuLSk_NjY4XC9wYXRpZW50W3NdP1wvMTYxNzM3XC9hcHBvaW50bWVudHMoXC8uKik_JCIsIl4uKihcLyk_c2l0ZVtzXT9cLyhkZm4tKT85ODRcL3BhdGllbnRbc10_XC81NTIxNjEwNDRcL2FwcG9pbnRtZW50cyhcLy4qKT8kIl0sInNzbiI6Ijc5NjA2MTk3NiIsInNzdCI6MTY0NTU2NjM0MiwicGF0aWVudCI6eyJmaXJzdE5hbWUiOiJKYWNxdWVsaW5lIiwibGFzdE5hbWUiOiJNb3JnYW4iLCJnZW5kZXIiOiJGRU1BTEUiLCJpY24iOiIxMDEyODQ2MDQzVjU3NjM0MSIsImRvYiI6IjE5NjItMDItMDciLCJkYXRlT2ZCaXJ0aCI6IjE5NjItMDItMDciLCJzc24iOiI3OTYwNjE5NzYifSwidmFtZi5hdXRoLnJvbGVzIjpbInZldGVyYW4iXSwicmlnaHRPZkFjY2Vzc0FjY2VwdGVkIjp0cnVlLCJleHAiOjE2NDU1NjcyNDIsImp0aSI6IjIxOTQ3ZjdhLWFiMTQtNDE1ZC1iMzMxLWJmM2QwNjRlNGYwNCIsImlkVHlwZSI6IklDTiIsImRhdGVPZkJpcnRoIjoiMTk2MjAyMDciLCJ2ZXJzaW9uIjoyLjYsImVkaXBpZCI6IjEwMTM1OTk3MzAiLCJ2aXN0YUlkcyI6W3sicGF0aWVudElkIjoiNzIxNjY4NSIsInNpdGVJZCI6Ijk4MyJ9LHsicGF0aWVudElkIjoiMTYxNzM3Iiwic2l0ZUlkIjoiNjY4In0seyJwYXRpZW50SWQiOiI1NTIxNjEwNDQiLCJzaXRlSWQiOiI5ODQifV0sImZpcnN0TmFtZSI6IkphY3F1ZWxpbmUiLCJzdGFmZkRpc2NsYWltZXJBY2NlcHRlZCI6dHJ1ZSwibmJmIjoxNjQ1NTY2MTYyLCJkb2IiOiIxOTYyMDIwNyIsImxvYSI6Mn0.IW4TZPQoTEogVsfkeBRVEtIia6MlNu0vCAs1SwjhBaloG4caS2TvA9KlNag2861NDmt4BmneamTgHVgZ_uS0foYJKb4OXSZOEu1Pguly_sb3FxtYqvvMX4wTQQDPaZc43XqqgEG6RE_8lzreTI0iIDO1ZVfMDrUYu4uc02ZBXFPIeOsZbBZ-p3EQCG9n5Ebp02BggQqvcq0lfVDCmLlJtPt1ouFuTngGsjyMW6n_9lUvpO3sPC3M-N4F4MJ2doI43jIzSDHcb5l9br7Q4p56_h8aULnOovWAx8T7jf1ysSxLDRoXFZJHCxmqIzHZgajmKabUwZBDz96QBHdMQPasOQ + X-Request-Id: + - '' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 22 Feb 2022 21:46:03 GMT + Content-Type: + - application/json + Content-Length: + - '614' + Server: + - openresty + X-Vamf-Version: + - 1.15.2 + B3: + - 38613f08883e2d8959f5b199aae93593-a0127fd9ebf0ac76-0 + Access-Control-Allow-Headers: + - x-vamf-jwt + X-Vamf-Build: + - c9a85ac + X-Vamf-Timestamp: + - '2022-01-28T19:18:54+0000' + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET,OPTIONS + Access-Control-Max-Age: + - '3600' + X-Envoy-Upstream-Service-Time: + - '21106' + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: '{"id":"81063","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/hsrm/id","value":"11992"}],"kind":"cc","status":"proposed","serviceType":"podiatry","patientIcn":"1012846043V576341","locationId":"983","created":"2022-02-22T21:46:00Z","requestedPeriods":[{"start":"2021-06-15T12:00:00Z"}],"contact":{"telecom":[{"type":"phone","value":"2125688887"},{"type":"email","value":"judymorisooooooooooooon@gmail.com"}]},"preferredLocation":{"city":"Helena","state":"MT"},"cancellationReason":{"code":"other"},"comment":"test","preferredLanguage":"English","cancellable":true,"extension":{"ccLocation":{"address":{}}}}' + recorded_at: Tue, 22 Feb 2022 21:46:03 GMT +recorded_with: VCR 6.0.0 diff --git a/spec/support/vcr_cassettes/mobile/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg.yml b/spec/support/vcr_cassettes/mobile/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg.yml new file mode 100644 index 00000000000..dfa709876eb --- /dev/null +++ b/spec/support/vcr_cassettes/mobile/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg.yml @@ -0,0 +1,61 @@ +--- +http_interactions: +- request: + method: post + uri: https://veteran.apps.va.gov/vpg/v1/patients/1012846043V576341/appointments + body: + encoding: UTF-8 + string: '{"kind":"clinic","status":"booked","locationId":"983","clinic":"1020","slot":{"id":"3230323230323032313530303A323032323032303231363030"},"extension":{"desiredDate":"2022-02-15T23:59:00.000+00:00"},"patientIcn":"1012846043V576341"}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Referer: + - https://review-instance.va.gov + X-Vamf-Jwt: + - eyJhbGciOiJSUzUxMiJ9.eyJhdXRoZW50aWNhdGVkIjp0cnVlLCJsYXN0TmFtZSI6Ik1vcmdhbiIsInN1YiI6IjEwMTI4NDYwNDNWNTc2MzQxIiwiYXV0aGVudGljYXRpb25BdXRob3JpdHkiOiJnb3YudmEudmFvcyIsImdlbmRlciI6IkZFTUFMRSIsImlzcyI6Imdvdi52YS52YW1mLnVzZXJzZXJ2aWNlLnYyIiwidmFtZi5hdXRoLnJlc291cmNlcyI6WyJeLiooXC8pP3BhdGllbnRbc10_XC8oSUNOXC8pPzEwMTI4NDYwNDNWNTc2MzQxKFwvLiopPyQiLCJeLiooXC8pP3NpdGVbc10_XC8oZGZuLSk_OTgzXC9wYXRpZW50W3NdP1wvNzIxNjY4NVwvYXBwb2ludG1lbnRzKFwvLiopPyQiLCJeLiooXC8pP3NpdGVbc10_XC8oZGZuLSk_NjY4XC9wYXRpZW50W3NdP1wvMTYxNzM3XC9hcHBvaW50bWVudHMoXC8uKik_JCIsIl4uKihcLyk_c2l0ZVtzXT9cLyhkZm4tKT85ODRcL3BhdGllbnRbc10_XC81NTIxNjEwNDRcL2FwcG9pbnRtZW50cyhcLy4qKT8kIl0sInNzbiI6Ijc5NjA2MTk3NiIsInNzdCI6MTY0MjA5NDg5NiwicGF0aWVudCI6eyJmaXJzdE5hbWUiOiJKYWNxdWVsaW5lIiwibGFzdE5hbWUiOiJNb3JnYW4iLCJnZW5kZXIiOiJGRU1BTEUiLCJpY24iOiIxMDEyODQ2MDQzVjU3NjM0MSIsImRvYiI6IjE5NjItMDItMDciLCJkYXRlT2ZCaXJ0aCI6IjE5NjItMDItMDciLCJzc24iOiI3OTYwNjE5NzYifSwidmFtZi5hdXRoLnJvbGVzIjpbInZldGVyYW4iXSwicmlnaHRPZkFjY2Vzc0FjY2VwdGVkIjp0cnVlLCJleHAiOjE2NDIwOTU3OTYsImp0aSI6IjVhNzBkYzFkLTk0ODctNDNjMi1hOGRjLTIzMGM2M2NjMjlhOSIsImlkVHlwZSI6IklDTiIsImRhdGVPZkJpcnRoIjoiMTk2MjAyMDciLCJ2ZXJzaW9uIjoyLjYsImVkaXBpZCI6IjEwMTM1OTk3MzAiLCJ2aXN0YUlkcyI6W3sicGF0aWVudElkIjoiNzIxNjY4NSIsInNpdGVJZCI6Ijk4MyJ9LHsicGF0aWVudElkIjoiMTYxNzM3Iiwic2l0ZUlkIjoiNjY4In0seyJwYXRpZW50SWQiOiI1NTIxNjEwNDQiLCJzaXRlSWQiOiI5ODQifV0sImZpcnN0TmFtZSI6IkphY3F1ZWxpbmUiLCJzdGFmZkRpc2NsYWltZXJBY2NlcHRlZCI6dHJ1ZSwibmJmIjoxNjQyMDk0NzE2LCJkb2IiOiIxOTYyMDIwNyIsImxvYSI6Mn0.DRk59j3zEVLOAD0o0atwGoJ00NHIrTYYjkKAUtj5yVVG2YokKHvu4yj5BmFKanYTMrAgcemsda8fVf0TfcERKJxfdUHs6vIShSXTT-nVgsAEqn5bx-FQlkZEz1BMziNVysaup3GhjC1QJ0LHhj0Ag2V_eI9GOH2lNpoBe6GYTJMqmUnhJ6ww4dFcuN2S00lGDeCB1062r1vOlfIZmanth34XE7FoZWTLYsUtCVyr41lKhOltK7h0uv6Re7pzdD0jwgsaJTN8JMXdZV5uovY-lrkIW57-un3gppMv87CONWU8WJhbBomzOqp8ZQSflWPYYtLzys3CLDWwAeBdHMsSlA + X-Request-Id: + - '' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Date: + - Thu, 13 Jan 2022 17:28:18 GMT + Content-Type: + - application/json + Content-Length: + - '591' + Server: + - openresty + X-Vamf-Version: + - 1.15.1 + B3: + - d33a494ebf22f01633105719d10f767a-8b75ad6c09bf9590-0 + Access-Control-Allow-Headers: + - x-vamf-jwt + X-Vamf-Build: + - e815ffd + X-Vamf-Timestamp: + - '2022-01-12T20:37:53+0000' + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET,OPTIONS + Access-Control-Max-Age: + - '3600' + X-Envoy-Upstream-Service-Time: + - '1772' + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: '{"id":"72149","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/vista/983/appointment/id","value":"1020;20220202.080000"}],"kind":"clinic","status":"booked","serviceType":"audiology","reasonCode":{"text":"9"},"patientIcn":"1012846043V576341","locationId":"983","clinic":"1020","start":"2022-02-02T15:00:00Z","end":"2022-02-02T16:00:00Z","minutesDuration":60,"slot":{"id":"3230323230323032313530303A323032323032303231363030","start":"2022-02-02T15:00:00Z","end":"2022-02-02T16:00:00Z"},"cancellationReason":{"code":"other"},"cancellable":true,"extension":{"ccLocation":{"address":{}}}}' + recorded_at: Thu, 13 Jan 2022 17:28:18 GMT +recorded_with: VCR 6.0.0 diff --git a/spec/support/vcr_cassettes/mobile/appointments/post_appointments_va_proposed_clinic_200_vpg.yml b/spec/support/vcr_cassettes/mobile/appointments/post_appointments_va_proposed_clinic_200_vpg.yml new file mode 100644 index 00000000000..b9c8489af1c --- /dev/null +++ b/spec/support/vcr_cassettes/mobile/appointments/post_appointments_va_proposed_clinic_200_vpg.yml @@ -0,0 +1,62 @@ +--- +http_interactions: +- request: + method: post + uri: https://veteran.apps.va.gov/vpg/v1/patients/1012846043V576341/appointments + body: + encoding: UTF-8 + string: '{"kind":"clinic","status":"proposed","locationId":"983","contact":{"telecom":[{"type":"phone","value":"2125688889"},{"type":"email","value":"judymorisooooooooooooon@gmail.com"}]},"serviceType":"audiology","requestedPeriods":[{"end":null,"2022-01-04T11:59:00Z":null},{"start":null,"2022-01-04T00:00:00Z":null}],"reasonCode":{"codeing":[{"code":"Routine + Follow-up"}],"text":"text"},"comment":"Follow-up/Routine: testing","patientIcn":"1012846043V576341"}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Referer: + - https://review-instance.va.gov + X-Vamf-Jwt: + - stubbed_token + X-Request-Id: + - '' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 14 Dec 2021 23:30:04 GMT + Content-Type: + - application/json + Content-Length: + - '522' + Server: + - openresty + X-Vamf-Version: + - 1.14.1 + B3: + - b7e8fa4c5ccbed081a8afd6fe5bc0a4f-cb586bfe1c6c819a-0 + Access-Control-Allow-Headers: + - x-vamf-jwt + X-Vamf-Build: + - 20a82ca + X-Vamf-Timestamp: + - '2021-11-26T16:29:10+0000' + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET,OPTIONS + Access-Control-Max-Age: + - '3600' + X-Envoy-Upstream-Service-Time: + - '10356' + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: '{"id":"70065","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/ars/id","value":"8a4890c47da65e2b017dbb481aeb0001"}],"kind":"clinic","status":"proposed","serviceType":"audiology","reasonCode":{"text":"text"},"patientIcn":"1012846043V576341","locationId":"983","created":"2021-12-14T16:30:04Z","contact":{"telecom":[{"type":"email","value":"judymorisooooooooooooon@gmail.com"},{"type":"phone","value":"2125688889"}]},"cancellationReason":{"code":"other"},"cancellable":true,"extension":{"ccLocation":{"address":{}}}}' + recorded_at: Tue, 14 Dec 2021 23:30:04 GMT +recorded_with: VCR 6.0.0 diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_400_vpg.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_400_vpg.yml new file mode 100644 index 00000000000..a327a649205 --- /dev/null +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_400_vpg.yml @@ -0,0 +1,57 @@ +--- +http_interactions: +- request: + method: post + uri: https://veteran.apps.va.gov/vpg/v1/patients/1012846043V576341/appointments + body: + encoding: UTF-8 + string: '{"kind":"cc","status":"proposed","locationId":"983","reason":"Testing","slot":{},"contact":{"telecom":[{"type":"phone","value":"2125688889"},{"type":"email","value":"judymorisooooooooooooon@gmail.com"}]},"serviceType":"CCPOD","requestedPeriods":[{"start":"2021-06-15T12:00:00.000+00:00","end":"2021-06-15T23:59:00.000+00:00"}]}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Referer: + - https://review-instance.va.gov + X-Vamf-Jwt: + - stubbed_token + X-Request-Id: + - '' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 400 + message: Bad Request + headers: + Date: + - Thu, 03 Jun 2021 21:16:55 GMT + Content-Type: + - application/json + Content-Length: + - '66' + Server: + - openresty + X-Vamf-Version: + - 1.6.0 + B3: + - c9b88ad736b44fcd-9506797b4f25487c-1 + Access-Control-Allow-Headers: + - x-vamf-jwt + X-Vamf-Build: + - 36e545f + X-Vamf-Timestamp: + - '2021-05-29T19:44:21+0000' + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET,OPTIONS + Access-Control-Max-Age: + - '3600' + body: + encoding: UTF-8 + string: '{"message":"the patientIcn must match the ICN in the request URI"}' + recorded_at: Thu, 03 Jun 2021 21:16:55 GMT +recorded_with: VCR 6.0.0 diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_500_vpg.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_500_vpg.yml new file mode 100644 index 00000000000..4e33f37a6d5 --- /dev/null +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_500_vpg.yml @@ -0,0 +1,51 @@ +--- +http_interactions: + - request: + method: post + uri: https://veteran.apps.va.gov/vpg/v1/patients/1012846043V576341/appointments + body: + encoding: UTF-8 + string: + '{"kind":"clinic","status":"proposed","locationId":"983","clinic":"308","reason":"reason","slot":{"id":"A1","start":"2020-01-31T00:00:00.000+00:00","end":"2020-01-31T00:00:00.000+00:00"},"contact":{"telecom":[{"type":"email","value":"person@example.com"},{"type":"phone","value":"2125551212"}]},"serviceType":"primary + care","requestedPeriods":[{"start":"2020-01-31T00:00:00.000+00:00","end":"2020-01-31T21:00:00.000+00:00"},{"start":"2020-03-31T00:00:00.000+00:00","end":"2020-03-31T21:00:00.000+00:00"}]}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Referer: + - https://review-instance.va.gov + X-Vamf-Jwt: + - stubbed_token + X-Request-Id: + - "" + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 500 + message: Internal Server Error + headers: + Date: + - Mon, 10 May 2021 17:59:32 GMT + Content-Type: + - text/html + Content-Length: + - "982" + Connection: + - keep-alive + Etag: + - '"5fa5087d-3d6"' + Set-Cookie: + - TS016f4012=stubbed_cookie; + Max-Age=900; Path=/ + - vamfjwtv3=stubbed_token; + path=/; SameSite=Lax; HttpOnly + - vamftimeoutv1=1620670472; SameSite=Lax; path=/ + body: + encoding: UTF-8 + string: "need to record vcr cassette" + recorded_at: Mon, 10 May 2021 17:59:32 GMT +recorded_with: VCR 6.0.0 diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_cc_200_2222022_vpg.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_cc_200_2222022_vpg.yml new file mode 100644 index 00000000000..d8ba07ac553 --- /dev/null +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_cc_200_2222022_vpg.yml @@ -0,0 +1,62 @@ +--- +http_interactions: +- request: + method: post + uri: https://veteran.apps.va.gov/vpg/v1/patients/1012846043V576341/appointments + body: + encoding: UTF-8 + string: '{"kind":"cc","status":"proposed","locationId":"983","contact":{"telecom":[{"type":"phone","value":"2125688887"},{"type":"email","value":"judymorisooooooooooooon@gmail.com"}]},"serviceType":"podiatry","requestedPeriods":[{"start":"2021-06-15T12:00:00.000+00:00","end":"2021-06-15T23:59:00.000+00:00"}],"preferredLanguage":"English","practitioners":[{"identifier":[{"system":"http://hl7.org/fhir/sid/us-npi","value":"1407938061"}],"address":{"type":"postal","line":["38143 + Martha Ave"],"city":"Fremont","state":"CA","postalCode":"94536","country":"USA","text":"test"}}],"preferredTimesForPhoneCall":["Morning"],"preferredLocation":{"city":"Helena","state":"MT"},"comment":"test","patientIcn":"1012846043V576341"}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Referer: + - https://review-instance.va.gov + X-Vamf-Jwt: + - stubbed_token + X-Request-Id: + - '' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 22 Feb 2022 21:46:03 GMT + Content-Type: + - application/json + Content-Length: + - '614' + Server: + - openresty + X-Vamf-Version: + - 1.15.2 + B3: + - 38613f08883e2d8959f5b199aae93593-a0127fd9ebf0ac76-0 + Access-Control-Allow-Headers: + - x-vamf-jwt + X-Vamf-Build: + - c9a85ac + X-Vamf-Timestamp: + - '2022-01-28T19:18:54+0000' + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET,OPTIONS + Access-Control-Max-Age: + - '3600' + X-Envoy-Upstream-Service-Time: + - '21106' + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: '{"id":"81063","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/hsrm/id","value":"11992"}],"kind":"cc","status":"proposed","serviceType":"podiatry","patientIcn":"1012846043V576341","locationId":"983","created":"2022-02-22T21:46:00Z","requestedPeriods":[{"start":"2021-06-15T12:00:00Z"}],"contact":{"telecom":[{"type":"phone","value":"2125688887"},{"type":"email","value":"judymorisooooooooooooon@gmail.com"}]},"preferredLocation":{"city":"Helena","state":"MT"},"cancellationReason":{"code":"other"},"comment":"test","preferredLanguage":"English","cancellable":true,"extension":{"ccLocation":{"address":{}}}}' + recorded_at: Tue, 22 Feb 2022 21:46:03 GMT +recorded_with: VCR 6.0.0 diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_cc_200_with_provider_vpg.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_cc_200_with_provider_vpg.yml new file mode 100644 index 00000000000..af116ef926f --- /dev/null +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_cc_200_with_provider_vpg.yml @@ -0,0 +1,61 @@ +--- +http_interactions: +- request: + method: post + uri: https://veteran.apps.va.gov/vpg/v1/patients/1012846043V576341/appointments + body: + encoding: UTF-8 + string: '{"kind":"cc","status":"proposed","locationId":"983","serviceType":"podiatry","reasonCode":{"text":"string"},"contact":{"telecom":[{"type":"phone","value":"2762740095"},{"type":"email","value":"jacqueline.morgan@id.me"}]},"requestedPeriods":[{"start":"2023-01-17T07:00:00Z","end":"2023-01-17T18:59:00Z"}],"preferredTimesForPhoneCall":["Morning"],"preferredLanguage":"English","preferredLocation":{"city":"Palm Bay","state":"FL"},"practitioners":[{"identifier":[{"system":"http://hl7.org/fhir/sid/us-npi","value":"1174506877"}],"address":{"line":["590 MALABAR RD SE STE 5"],"city":"PALM BAY","state":"FL","postalCode":"32907-3108"}}]}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Referer: + - https://review-instance.va.gov + X-Vamf-Jwt: + - stubbed_token + X-Request-Id: + - '' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 22 Feb 2022 21:46:03 GMT + Content-Type: + - application/json + Content-Length: + - '614' + Server: + - openresty + X-Vamf-Version: + - 1.15.2 + B3: + - 38613f08883e2d8959f5b199aae93593-a0127fd9ebf0ac76-0 + Access-Control-Allow-Headers: + - x-vamf-jwt + X-Vamf-Build: + - c9a85ac + X-Vamf-Timestamp: + - '2022-01-28T19:18:54+0000' + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET,OPTIONS + Access-Control-Max-Age: + - '3600' + X-Envoy-Upstream-Service-Time: + - '21106' + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: '{"id":"153432","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/hsrm/id","value":"13413"}],"kind":"cc","status":"proposed","serviceType":"podiatry","serviceTypes":[{"text":"podiatry"}],"patientIcn":"1012846043V576341","locationId":"983","practitioners":[{"identifier":[{"system":"http://hl7.org/fhir/sid/us-npi","value":"1174506877"}],"address":{"type":"physical","line":["590 MALABAR RD SE STE 5"],"city":"PALM BAY","state":"FL","postalCode":"32907-3108","text":"590 MALABAR RD SE STE 5,PALM BAY,FL,32907-3108"}}],"created":"2023-01-12T21:40:00Z","requestedPeriods":[{"start":"2023-01-17T07:00:00Z"}],"contact":{"telecom":[{"type":"phone","value":"2762740095"},{"type":"email","value":"jacqueline.morgan@id.me"}]},"preferredTimesForPhoneCall":["Morning"],"preferredLocation":{"city":"Palm Bay","state":"FL"},"preferredLanguage":"English","cancellable":true,"extension":{"ccLocation":{"address":{}},"ccRequestedCancellation":false,"hsrmTaskId":"13413"},"location":{"id":"983","type":"appointments","attributes":{"id":"983","vistaSite":"983","vastParent":"983","type":"va_facilities","name":"Cheyenne VA Medical Center","classification":"VA Medical Center (VAMC)","timezone":{"timeZoneId":"America/Denver"},"lat":39.744507,"long":-104.830956,"website":"https://www.denver.va.gov/locations/directions.asp","phone":{"main":"307-778-7550","fax":"307-778-7381","pharmacy":"866-420-6337","afterHours":"307-778-7550","patientAdvocate":"307-778-7550 x7517","mentalHealthClinic":"307-778-7349","enrollmentCoordinator":"307-778-7550 x7579"},"physicalAddress":{"type":"physical","line":["2360 East Pershing Boulevard"],"city":"Cheyenne","state":"WY","postalCode":"82001-5356"},"mobile":false,"healthService":["Audiology","Cardiology","DentalServices","EmergencyCare","Gastroenterology","Gynecology","MentalHealthCare","Nutrition","Ophthalmology","Optometry","Orthopedics","Podiatry","PrimaryCare","SpecialtyCare","UrgentCare","Urology","WomensHealth"],"operatingStatus":{"code":"NORMAL"}}}}' + recorded_at: Tue, 22 Feb 2022 21:46:03 GMT +recorded_with: VCR 6.0.0 diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg.yml new file mode 100644 index 00000000000..a2aceee3340 --- /dev/null +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_JACQUELINE_M_vpg.yml @@ -0,0 +1,64 @@ +--- +http_interactions: +- request: + method: post + uri: https://veteran.apps.va.gov/vpg/v1/patients/1012846043V576341/appointments + body: + encoding: UTF-8 + string: '{"kind":"clinic","status":"booked","locationId":"983","clinic":"999","slot":{"id":"3230323231313330323034353A323032323131333032313030"},"reasonCode":{"text":"testing","coding":[{"code":"Routine + Follow-up"}]},"extension":{"desiredDate":"2022-11-29T17:00:00-07:00"},"patientIcn":"1012846043V576341"}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Referer: + - https://review-instance.va.gov + X-Vamf-Jwt: + - stubbed_token + X-Request-Id: + - 6abdafd2-d7e8-40e2-9485-aeadad4fde5f + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Date: + - Thu, 20 Oct 2022 22:21:59 GMT + Content-Type: + - application/json + Content-Length: + - '616' + Server: + - openresty + X-Vamf-Version: + - 1.23.1 + B3: + - 9386e780c6e24ce819013350157327bc-3637f2cce7a14a9d-0 + Access-Control-Allow-Headers: + - x-vamf-jwt + X-Vamf-Build: + - 31af686 + X-Vamf-Timestamp: + - '2022-10-20T16:55:11+0000' + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET,OPTIONS + Access-Control-Max-Age: + - '3600' + X-Envoy-Upstream-Service-Time: + - '1454' + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: '{"id":"139064","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/vista/983/appointment/id","value":"999;20221130.134500"}],"kind":"clinic","status":"booked","serviceType":"optometry","serviceCategory":[{"coding":[{"system":"http://www.va.gov/Terminology/VistADefinedTerms/409_1","code":"REGULAR","display":"REGULAR"}],"text":"REGULAR"}],"reasonCode":{"text":"Routine + Follow-up: testing"},"patientIcn":"1012846043V576341","locationId":"983","clinic":"999","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z","minutesDuration":15,"slot":{"id":"3230323231313330323034353A323032323131333032313030","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z"},"comment":"Routine + Follow-up: testing","cancellable":true,"extension":{"ccLocation":{"address":{}}}}' + recorded_at: Thu, 20 Oct 2022 22:21:59 GMT +recorded_with: VCR 6.1.0 diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_log_facility_vpg.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_log_facility_vpg.yml new file mode 100644 index 00000000000..1dd245ccdaf --- /dev/null +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_log_facility_vpg.yml @@ -0,0 +1,62 @@ +--- +http_interactions: +- request: + method: post + uri: https://veteran.apps.va.gov/vpg/v1/patients/1012846043V576341/appointments + body: + encoding: UTF-8 + string: '{"kind":"clinic","status":"booked","locationId":"983","clinic":"999","slot":{"id":"3230323231313330323034353A323032323131333032313030"},"reasonCode":{"text":"testing","coding":[{"code":"Routine + Follow-up"}]},"extension":{"desiredDate":"2022-11-29T17:00:00-07:00"},"patientIcn":"1012846043V576341"}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Referer: + - https://review-instance.va.gov + X-Vamf-Jwt: + - stubbed_token + X-Request-Id: + - 6abdafd2-d7e8-40e2-9485-aeadad4fde5f + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Date: + - Thu, 20 Oct 2022 22:21:59 GMT + Content-Type: + - application/json + Content-Length: + - '616' + Server: + - openresty + X-Vamf-Version: + - 1.23.1 + B3: + - 9386e780c6e24ce819013350157327bc-3637f2cce7a14a9d-0 + Access-Control-Allow-Headers: + - x-vamf-jwt + X-Vamf-Build: + - 31af686 + X-Vamf-Timestamp: + - '2022-10-20T16:55:11+0000' + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET,OPTIONS + Access-Control-Max-Age: + - '3600' + X-Envoy-Upstream-Service-Time: + - '1454' + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: '{"id":"139064","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/vista/983/appointment/id","value":"999;20221130.134500"}],"kind":"clinic","status":"booked","serviceType":"optometry","serviceCategory":[{"coding":[{"system":"http://www.va.gov/Terminology/VistADefinedTerms/409_1","code":"REGULAR","display":"REGULAR"}],"text":"REGULAR"}],"reasonCode":{"text":"PAP COMPLIANCE/TELE"},"patientIcn":"1012846043V576341","locationId":"983","clinic":"999","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z","minutesDuration":15,"slot":{"id":"3230323231313330323034353A323032323131333032313030","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z"},"comment":"PAP COMPLIANCE/TELE PID","cancellable":true,"extension":{"ccLocation":{"address":{}}}}' + recorded_at: Thu, 20 Oct 2022 22:21:59 GMT +recorded_with: VCR 6.1.0 diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data_vpg.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data_vpg.yml new file mode 100644 index 00000000000..05edca11a2a --- /dev/null +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_booked_200_and_logs_data_vpg.yml @@ -0,0 +1,62 @@ +--- +http_interactions: +- request: + method: post + uri: https://veteran.apps.va.gov/vpg/v1/patients/1012846043V576341/appointments + body: + encoding: UTF-8 + string: '{"kind":"clinic","status":"booked","locationId":"983","clinic":"999","slot":{"id":"3230323231313330323034353A323032323131333032313030"},"reasonCode":{"text":"testing","coding":[{"code":"Routine + Follow-up"}]},"extension":{"desiredDate":"2022-11-29T17:00:00-07:00"},"patientIcn":"1012846043V576341"}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Referer: + - https://review-instance.va.gov + X-Vamf-Jwt: + - stubbed_token + X-Request-Id: + - 6abdafd2-d7e8-40e2-9485-aeadad4fde5f + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Date: + - Thu, 20 Oct 2022 22:21:59 GMT + Content-Type: + - application/json + Content-Length: + - '616' + Server: + - openresty + X-Vamf-Version: + - 1.23.1 + B3: + - 9386e780c6e24ce819013350157327bc-3637f2cce7a14a9d-0 + Access-Control-Allow-Headers: + - x-vamf-jwt + X-Vamf-Build: + - 31af686 + X-Vamf-Timestamp: + - '2022-10-20T16:55:11+0000' + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET,OPTIONS + Access-Control-Max-Age: + - '3600' + X-Envoy-Upstream-Service-Time: + - '1454' + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: '{"id":"139064","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/vista/983/appointment/id","value":"999;20221130.134500"}],"kind":"clinic","status":"booked","serviceType":"optometry","serviceTypes":[{"coding":[{"system":"http://veteran.apps.va.gov/terminologies/fhir/CodeSystem/vats-service-type","code":"optometry"}]}],"serviceCategory":[{"coding":[{"system":"http://www.va.gov/Terminology/VistADefinedTerms/409_1","code":"REGULAR","display":"REGULAR"}],"text":"REGULAR"}],"reasonCode":{"text":"Routine Follow-up: testing"},"patientIcn":"1012846043V576341","locationId":"983","clinic":"999","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z","minutesDuration":15,"slot":{"id":"3230323231313330323034353A323032323131333032313030","start":"2022-11-30T20:45:00Z","end":"2022-11-30T21:00:00Z"},"comment":"Routine Follow-up: testing","cancellable":true, "telehealth":{"url":"https://pexip.mapsandbox.net/vvc-app/?join=1&media=1&escalate=1&conference=VAC000420576@pexip.mapsandbox.net&pin=955191&aid=d9824ec6-1cd2-4875-b8d1-1775c4322572#","atlas":{"siteCode":"VFW-VA-20151-05","confirmationCode":"788926","address":{"streetAddress":"14850 Conference Center Dr","city":"Chantilly","state":"VA","zipCode":"20151","country":"USA","latitutde":38.87426,"longitude":-77.46,"additionalDetails":""}},"group":false,"vvsKind":"ADHOC"}, "extension":{"ccLocation":{"address":{}}}}' + recorded_at: Thu, 20 Oct 2022 22:21:59 GMT +recorded_with: VCR 6.1.0 diff --git a/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_proposed_clinic_200_vpg.yml b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_proposed_clinic_200_vpg.yml new file mode 100644 index 00000000000..b9c8489af1c --- /dev/null +++ b/spec/support/vcr_cassettes/vaos/v2/appointments/post_appointments_va_proposed_clinic_200_vpg.yml @@ -0,0 +1,62 @@ +--- +http_interactions: +- request: + method: post + uri: https://veteran.apps.va.gov/vpg/v1/patients/1012846043V576341/appointments + body: + encoding: UTF-8 + string: '{"kind":"clinic","status":"proposed","locationId":"983","contact":{"telecom":[{"type":"phone","value":"2125688889"},{"type":"email","value":"judymorisooooooooooooon@gmail.com"}]},"serviceType":"audiology","requestedPeriods":[{"end":null,"2022-01-04T11:59:00Z":null},{"start":null,"2022-01-04T00:00:00Z":null}],"reasonCode":{"codeing":[{"code":"Routine + Follow-up"}],"text":"text"},"comment":"Follow-up/Routine: testing","patientIcn":"1012846043V576341"}' + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - Vets.gov Agent + Referer: + - https://review-instance.va.gov + X-Vamf-Jwt: + - stubbed_token + X-Request-Id: + - '' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 14 Dec 2021 23:30:04 GMT + Content-Type: + - application/json + Content-Length: + - '522' + Server: + - openresty + X-Vamf-Version: + - 1.14.1 + B3: + - b7e8fa4c5ccbed081a8afd6fe5bc0a4f-cb586bfe1c6c819a-0 + Access-Control-Allow-Headers: + - x-vamf-jwt + X-Vamf-Build: + - 20a82ca + X-Vamf-Timestamp: + - '2021-11-26T16:29:10+0000' + Access-Control-Allow-Origin: + - "*" + Access-Control-Allow-Methods: + - GET,OPTIONS + Access-Control-Max-Age: + - '3600' + X-Envoy-Upstream-Service-Time: + - '10356' + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: '{"id":"70065","identifier":[{"system":"http://med.va.gov/fhir/urn/vaos/ars/id","value":"8a4890c47da65e2b017dbb481aeb0001"}],"kind":"clinic","status":"proposed","serviceType":"audiology","reasonCode":{"text":"text"},"patientIcn":"1012846043V576341","locationId":"983","created":"2021-12-14T16:30:04Z","contact":{"telecom":[{"type":"email","value":"judymorisooooooooooooon@gmail.com"},{"type":"phone","value":"2125688889"}]},"cancellationReason":{"code":"other"},"cancellable":true,"extension":{"ccLocation":{"address":{}}}}' + recorded_at: Tue, 14 Dec 2021 23:30:04 GMT +recorded_with: VCR 6.0.0