18F/identity-idp

View on GitHub
app/services/doc_auth/lexis_nexis/doc_pii_reader.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module DocAuth
  module LexisNexis
    module DocPiiReader
      PII_EXCLUDES = %w[
        Age
        DocSize
        DOB_Day
        DOB_Month
        DOB_Year
        ExpirationDate_Day
        ExpirationDate_Month
        ExpirationDate_Year
        FullName
        Portrait
        Sex
      ].freeze

      private

      # @return [Pii::StateId, nil]
      def read_pii(true_id_product)
        id_auth_field_data = true_id_product&.dig(:IDAUTH_FIELD_DATA)
        return nil unless id_auth_field_data.present?

        state_id_type_slug = id_auth_field_data['Fields_DocumentClassName']
        state_id_type = DocAuth::Response::ID_TYPE_SLUGS[state_id_type_slug]

        Pii::StateId.new(
          first_name: id_auth_field_data['Fields_FirstName'],
          last_name: id_auth_field_data['Fields_Surname'],
          middle_name: id_auth_field_data['Fields_MiddleName'],
          address1: id_auth_field_data['Fields_AddressLine1'],
          address2: id_auth_field_data['Fields_AddressLine2'],
          city: id_auth_field_data['Fields_City'],
          state: id_auth_field_data['Fields_State'],
          zipcode: id_auth_field_data['Fields_PostalCode'],
          dob: parse_date(
            year: id_auth_field_data['Fields_DOB_Year'],
            month: id_auth_field_data['Fields_DOB_Month'],
            day: id_auth_field_data['Fields_DOB_Day'],
          ),
          state_id_expiration: parse_date(
            year: id_auth_field_data['Fields_ExpirationDate_Year'],
            month: id_auth_field_data['Fields_ExpirationDate_Month'],
            day: id_auth_field_data['Fields_xpirationDate_Day'], # this is NOT a typo
          ),
          state_id_issued: parse_date(
            year: id_auth_field_data['Fields_IssueDate_Year'],
            month: id_auth_field_data['Fields_IssueDate_Month'],
            day: id_auth_field_data['Fields_IssueDate_Day'],
          ),
          state_id_jurisdiction: id_auth_field_data['Fields_IssuingStateCode'],
          state_id_number: id_auth_field_data['Fields_DocumentNumber'],
          state_id_type: state_id_type,
          issuing_country_code: id_auth_field_data['Fields_CountryCode'],
        )
      end

      def parse_date(year:, month:, day:)
        Date.new(year.to_i, month.to_i, day.to_i).to_s if year.to_i.positive?
      rescue ArgumentError
        message = {
          event: 'Failure to parse TrueID date',
        }.to_json
        Rails.logger.info(message)
        nil
      end
    end
  end
end