Adding deductible setting logic

This commit is contained in:
brydon1 2023-06-21 16:14:49 -04:00
parent b16fe6656e
commit 577cc05695
5 changed files with 104 additions and 66 deletions

View file

@ -0,0 +1,9 @@
const endorsementOptions = {
EDUCATOR: "Educator",
OEM_APPROVED: "OEM Approved",
FULL_GLASS: "Full Glass Coverage",
PARKING_GUARD: "Parking Guard",
REPAIR_WAIVED: "Repair Waived"
};
export { endorsementOptions };

View file

@ -0,0 +1,37 @@
import { useMainStore } from '@/store';
import { coverageStatuses } from '@/constants/coverage-statuses';
// TODO description
export async function getRegisterClaimResponse() {
try {
const registerClaimResponse = await useMainStore().registerClaim();
const promiseResultMap = [
{
resultKey: 'registerClaimResponse',
promise: registerClaimResponse
},
];
const resultMap = await settleAllPromises(promiseResultMap);
return resultMap.registerClaimResponse;
}
catch(responseError) {
return {
error: {
status: responseError.status
}
}
}
}
// Deductible/ITAC, No Comp, and Not Verified
// Still need No Comp, ITAC, and Deductible
export function setInsuranceCoverageValues(registerClaimResponse) {
const registerClaimFailed = registerClaimResponse.error;
if (useMainStore().isClaimRegistrationRequired) {
useMainStore().payment.insuranceCoverage.isVerified = !registerClaimFailed;
useMainStore().payment.insuranceCoverage.coverageStatus = registerClaimFailed
? coverageStatuses.PENDING
: coverageStatuses.VERIFIED;
}
}

View file

@ -58,7 +58,7 @@ import { settleAllPromises } from '@/helpers/layout-helper';
import { getDamageString } from '@/helpers/damage-helper.js'; import { getDamageString } from '@/helpers/damage-helper.js';
import { useMainStore } from "@/store"; import { useMainStore } from "@/store";
import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin"; import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin";
import { coverageStatuses } from '../../constants/coverage-statuses'; import { getRegisterClaimResponse, setInsuranceCoverageValues } from '@/helpers/coverage-statement-helper';
export default { export default {
name: 'coverage-statement', name: 'coverage-statement',
@ -127,13 +127,12 @@ export default {
next((vm) => { next((vm) => {
vm.setCmsContent(resultMap.cmsContent); vm.setCmsContent(resultMap.cmsContent);
}); });
},
async mounted() { let registerClaimResponse = null;
let registerClaimResponse = null; if (useMainStore().isClaimRegistrationRequired){
if (useMainStore().isClaimRegistrationRequired){ registerClaimResponse = await getRegisterClaimResponse();
registerClaimResponse = await this.getRegisterClaimResponse(); }
} setInsuranceCoverageValues(registerClaimResponse);
this.setInsuranceCoverageValues(registerClaimResponse);
}, },
methods: { methods: {
arePagePrerequisitesValid() { arePagePrerequisitesValid() {
@ -143,48 +142,6 @@ export default {
return false; return false;
}, },
async getRegisterClaimResponse() {
try {
registerClaimResponse = await useMainStore().registerClaim();
const promiseResultMap = [
{
resultKey: 'registerClaimResponse',
promise: registerClaimResponse
},
];
const resultMap = await settleAllPromises(promiseResultMap);
return resultMap.registerClaimResponse;
}
catch(responseError) {
return {
error: {
status: responseError.status
}
}
}
},
// TODO wait for confirmation from Jeremy
setInsuranceCoverageValues(registerClaimResponse) {
// null => claim reg not required
// success => verified
// failed => not verified
const registerClaimFailed = registerClaimResponse.error;
if (useMainStore().isClaimRegistrationRequired) {
useMainStore().payment.insuranceCoverage.isVerified = !registerClaimFailed;
useMainStore().payment.insuranceCoverage.coverageStatus = registerClaimFailed
? coverageStatuses.PENDING
: coverageStatuses.VERIFIED; // TODO include no comp case as well
}
else { // TODO confirm
useMainStore().payment.insuranceCoverage.isVerified = true;
// What about no comp???
useMainStore().payment.insuranceCoverage.coverageStatus = coverageStatuses.VERIFIED;
}
},
async forwardButtonAction() { async forwardButtonAction() {
return this.navigateForward(); return this.navigateForward();
}, },

View file

@ -41,7 +41,8 @@ import BaseFormMixin from '@/mixins/base-form-mixin.js';
import { issPageValues } from "@/router/router-constants/issPage-values"; import { issPageValues } from "@/router/router-constants/issPage-values";
import { useMainStore } from '@/store'; import { useMainStore } from '@/store';
import { errorMessages } from "@/constants/error-messages"; import { errorMessages } from "@/constants/error-messages";
import {vehicleSelectionOptions} from "@/constants/vehicle-selection-options"; import { vehicleSelectionOptions } from "@/constants/vehicle-selection-options";
import { endorsementOptions } from '../../constants/endorsement-options';
// DEFINE VALIDATION RULES // DEFINE VALIDATION RULES
defineRule("option-required", required(errorMessages.OPTION_REQUIRED)); defineRule("option-required", required(errorMessages.OPTION_REQUIRED));
@ -83,7 +84,17 @@ export default {
this.bailout = true; this.bailout = true;
return this.navigateForward(); return this.navigateForward();
} }
this.vehicleFromLookup = Object.assign(vehicleLookupResponse.data, { vin: this.selectedVehicleVin });
this.vehicleFromLookup = Object.assign(vehicleLookupResponse.data, {
vin: this.selectedVehicleVin,
noCoverage: this.noCoverageForSelectedVehicle,
deductible: this.deductibleForSelectedVehicle,
repairWaived: this.repairWaivedForSelectedVehicle
});
// Update that verified
// If they go backwards select vehicle => forward => one deductible => back to vehicle selection => forward again => right info
// backwards => vehicle unverified => clear coverage info
// keep this in mind
this.mainStore.updateVehicle(this.vehicleFromLookup); this.mainStore.updateVehicle(this.vehicleFromLookup);
} }
return this.navigateForward(); return this.navigateForward();
@ -146,6 +157,20 @@ export default {
VehiclesFromApi() { VehiclesFromApi() {
return useMainStore().pageData(issPageValues.POLICY_VEHICLES); return useMainStore().pageData(issPageValues.POLICY_VEHICLES);
}, },
noCoverageForSelectedVehicle() {
const vehicle = this.VehiclesFromApi.find((vehicle) => { return vehicle.vin == this.selectedVehicleVin; });
return vehicle.coverages.length == 0;
},
deductibleForSelectedVehicle() {
const vehicle = this.VehiclesFromApi.find((vehicle) => { return vehicle.vin == this.selectedVehicleVin; });
return vehicle?.coverages?.length == 0 ?? true
? 0
: vehicle.coverages[0].deductible;
},
repairWaivedForSelectedVehicle() {
const vehicle = this.VehiclesFromApi.find((vehicle) => { return vehicle.vin == this.selectedVehicleVin; });
return vehicle.endorsements?.includes(endorsementOptions.REPAIR_WAIVED) ?? false;
}
}, },
components: { components: {
siteHeader, siteHeader,

View file

@ -50,11 +50,13 @@ const getDefaultState = () => {
damageState: null, damageState: null,
damageCity: null, damageCity: null,
isDamageGlassOnly: null, isDamageGlassOnly: null,
// TODO set these in code noCoverage: null,
deductable: { deductible: {
repair: null, // numerical value; how much customer owes on deductable in repair case // if repair waived, then 0, otherwise same as other
replace: null // numerical value; how much customer owes on deductible in replace case repair: null, // numerical value; how much customer owes on deductible in repair case
} replace: null // numerical value; how much customer owes on deductible in replace case,
},
endorsement: [] // List of endorsement_options
}, },
customer: { customer: {
address: { address: {
@ -396,11 +398,10 @@ export const useMainStore = defineStore({
}, },
lossInfo: { lossInfo: {
dateOfLoss: this.order.policy.dateOfLoss, dateOfLoss: this.order.policy.dateOfLoss,
// TODO set from store or assume based on user info?
location: { location: {
city: "Somersworth", city: this.order.policy.damageCity,
state: "NH", state: this.order.policy.damageState,
country: "US" country: "US" // TODO set from store
}, },
vehicle: { vehicle: {
year: this.order.vehicle.year.toString(), year: this.order.vehicle.year.toString(),
@ -409,7 +410,6 @@ export const useMainStore = defineStore({
vin: this.order.vehicle.vin vin: this.order.vehicle.vin
}, },
}, },
// TODO is damage cause sufficient?
damageDescription: this.order.policy.damageCause damageDescription: this.order.policy.damageCause
} }
}); });
@ -665,7 +665,7 @@ export const useMainStore = defineStore({
} }
}); });
}, },
// TODO when is this called?
setVehicle() { setVehicle() {
return globalMethods return globalMethods
.callHttpClient({ .callHttpClient({
@ -750,6 +750,7 @@ export const useMainStore = defineStore({
this.order.lineItems.vaps = partsData; this.order.lineItems.vaps = partsData;
}, },
// TODO Where all will this be called and could it be an issue?
updateVehicle(vehicle) { updateVehicle(vehicle) {
// Assuming that the method caller pass all the properties. // Assuming that the method caller pass all the properties.
// otherwise need to check for undefined for every property. // otherwise need to check for undefined for every property.
@ -765,6 +766,12 @@ export const useMainStore = defineStore({
this.order.vehicle.imageVifNumber = vehicle.imageVifNumber; this.order.vehicle.imageVifNumber = vehicle.imageVifNumber;
this.order.vehicle.imageColor = vehicle.imageVifColor; this.order.vehicle.imageColor = vehicle.imageVifColor;
this.order.policy.noCoverage = vehicle.noCoverage;
this.order.policy.deductible.replace = vehicle.deductible;
this.order.policy.deductible.repair = vehicle?.repairWaived ?? false
? 0
: vehicle.deductible;
this.resetSupportingItemsState(); this.resetSupportingItemsState();
this.resetVapsState(); this.resetVapsState();
}, },
@ -913,7 +920,7 @@ export const useMainStore = defineStore({
this.applicationUser.pageData[pageData.page] = pageData.data; this.applicationUser.pageData[pageData.page] = pageData.data;
}, },
updatePolicyData(welcomePageModel) updatePolicyData(welcomePageModel)
{ { // TODO add to this?
this.order.policy.policyNumber = welcomePageModel?.policyNumber; this.order.policy.policyNumber = welcomePageModel?.policyNumber;
this.order.policy.policyZipCode = welcomePageModel?.policyZipCode; this.order.policy.policyZipCode = welcomePageModel?.policyZipCode;
this.order.policy.dateOfLoss = welcomePageModel?.dateOfLoss; this.order.policy.dateOfLoss = welcomePageModel?.dateOfLoss;
@ -923,6 +930,9 @@ export const useMainStore = defineStore({
this.order.policy.isDamageGlassOnly = welcomePageModel?.isDamageGlassOnly; this.order.policy.isDamageGlassOnly = welcomePageModel?.isDamageGlassOnly;
this.order.customer.phoneNumber = welcomePageModel?.phoneNumber; this.order.customer.phoneNumber = welcomePageModel?.phoneNumber;
this.order.customer.emailAddress = welcomePageModel?.email; this.order.customer.emailAddress = welcomePageModel?.email;
if (!this.issConfig.isClaimRegistrationRequired){
this.order.insuranceCoverage.isVerified = true;
}
}, },
updatePolicyHolderDetails(customerQuestions) updatePolicyHolderDetails(customerQuestions)
{ {