diff --git a/src/helpers/client-mappers/Client900040Coverage.js b/src/helpers/client-mappers/Client900040Coverage.js new file mode 100644 index 00000000..37481ff7 --- /dev/null +++ b/src/helpers/client-mappers/Client900040Coverage.js @@ -0,0 +1,10 @@ +import coverageType from "@/constants/coverage-type"; + +// USAA coverage overrides +export function updateClaimRegistrationPayload(payload, order) { + const isITAC = order.insuranceCoverage?.coverageType === coverageType.ITAC; + payload.additionalInfo = { + offeredItac: isITAC.toString(), + qualifiedForItac: isITAC.toString() + }; +} \ No newline at end of file diff --git a/src/helpers/coverage-helper.js b/src/helpers/coverage-helper.js new file mode 100644 index 00000000..1c3a8431 --- /dev/null +++ b/src/helpers/coverage-helper.js @@ -0,0 +1,16 @@ +export async function updateClientSpecificFieldsForClaimRegistration(payload, order) { + const parentAccountNumber = order.parentAccountNumber; + if (!parentAccountNumber) { return; } + + let clientMapper; + try { + clientMapper = await import(`@/helpers/client-mappers/Client${parentAccountNumber}Coverage.js`); + } catch (error) { + // No client-specific mapper found; proceed with the default payload. + return; + } + + if (typeof clientMapper.updateClaimRegistrationPayload === 'function') { + await clientMapper.updateClaimRegistrationPayload(payload, order); + } +} \ No newline at end of file diff --git a/src/helpers/coverage-helper.spec.js b/src/helpers/coverage-helper.spec.js new file mode 100644 index 00000000..46481325 --- /dev/null +++ b/src/helpers/coverage-helper.spec.js @@ -0,0 +1,60 @@ +import { updateClientSpecificFieldsForClaimRegistration } from '@/helpers/coverage-helper'; +import coverageType from '@/constants/coverage-type'; + +let mockStore; + +jest.mock('@/store', () => ({ + useMainStore: jest.fn(() => mockStore) +})); + +describe('coverage-helper.js', () => { + describe('updateClientSpecificFieldsForClaimRegistration', () => { + beforeEach(() => { + mockStore = { + order: { + parentAccountNumber: null, + insuranceCoverage: { + coverageType: coverageType.NONE + } + } + }; + + jest.clearAllMocks(); + }); + describe.each([ + [900040, true], + [900040, false], + ['900040', true], + ['900040', false] + ])('custom claim registration for client 900040', (parentAccountNumber, isITAC) => { + test(`Sets additionalInfo fields when parent account is ${parentAccountNumber} and isITAC is ${isITAC}`, async () => { + // Arrange + const payload = {}; + mockStore.order.parentAccountNumber = parentAccountNumber; + mockStore.order.insuranceCoverage.coverageType = isITAC ? coverageType.ITAC : coverageType.Deductible; + + // Act + await updateClientSpecificFieldsForClaimRegistration(payload, mockStore.order); + + // Assert + expect(payload.additionalInfo).toEqual({ + offeredItac: isITAC.toString(), + qualifiedForItac: isITAC.toString() + }); + }); + }); + + test('Does not set additionalInfo when parent account is not 900040', async () => { + // Arrange + const payload = {}; + mockStore.order.parentAccountNumber = 123456; + mockStore.order.insuranceCoverage.coverageType = coverageType.ITAC; + + // Act + await updateClientSpecificFieldsForClaimRegistration(payload, mockStore.order); + + // Assert + expect(payload.additionalInfo).toBeUndefined(); + }); + }); +}); diff --git a/src/mixins/analytics-mixin.js b/src/mixins/analytics-mixin.js index 0da2a43d..afa79a6a 100644 --- a/src/mixins/analytics-mixin.js +++ b/src/mixins/analytics-mixin.js @@ -578,6 +578,7 @@ export default { sessionData.userAgent = navigator.userAgent; sessionData.bailoutCodeValue = bailoutCombinedString; + sessionData.vinRequired = order?.vehicle?.vinRequired ?? false; store.logIssSessionData(sessionData); }, diff --git a/src/store/index.js b/src/store/index.js index 675618a2..72c443ba 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -28,6 +28,7 @@ import { getDateForSavedSessionTimeout } from '@/helpers/session-helper'; import { isMobileDevice } from '@/helpers/useragent-helper'; import issPageValues from '@/router/router-constants/issPage-values'; import { getNonFalseValuesOfPropertyInArrayOfObjects, sortArrayOfObjectsByPropertyValue } from '@/helpers/object-helper'; +import { updateClientSpecificFieldsForClaimRegistration } from '@/helpers/coverage-helper'; const storeId = 'main'; @@ -713,6 +714,7 @@ export const useMainStore = defineStore({ if (this.issConfig.useMemberNumber) { payload.memberNumber = this.order.policy.policyNumber; } + await updateClientSpecificFieldsForClaimRegistration(payload, this.order); const response = await globalMethods.callHttpClient({ method: endpoints.RegisterClaim.method, endpoint: endpoints.RegisterClaim.url, @@ -2832,6 +2834,7 @@ export const useMainStore = defineStore({ userAgent, cashPriceSubTotal, bailoutCodeValue, + vinRequired, } ) { var payload = { @@ -2884,6 +2887,7 @@ export const useMainStore = defineStore({ cashPriceSubTotal: cashPriceSubTotal, billToAccountNumber: billToAccountNumber, bailoutCode: bailoutCodeValue, + vinRequired: vinRequired, }; return globalMethods.callHttpClient({