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 { useMainStore } from "@/store";
import vehicleQuestionsMixin from "@/mixins/vehicle-questions-mixin";
import { coverageStatuses } from '../../constants/coverage-statuses';
import { getRegisterClaimResponse, setInsuranceCoverageValues } from '@/helpers/coverage-statement-helper';
export default {
name: 'coverage-statement',
@ -127,13 +127,12 @@ export default {
next((vm) => {
vm.setCmsContent(resultMap.cmsContent);
});
},
async mounted() {
let registerClaimResponse = null;
if (useMainStore().isClaimRegistrationRequired){
registerClaimResponse = await this.getRegisterClaimResponse();
}
this.setInsuranceCoverageValues(registerClaimResponse);
let registerClaimResponse = null;
if (useMainStore().isClaimRegistrationRequired){
registerClaimResponse = await getRegisterClaimResponse();
}
setInsuranceCoverageValues(registerClaimResponse);
},
methods: {
arePagePrerequisitesValid() {
@ -142,48 +141,6 @@ export default {
}
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() {
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 { useMainStore } from '@/store';
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
defineRule("option-required", required(errorMessages.OPTION_REQUIRED));
@ -83,7 +84,17 @@ export default {
this.bailout = true;
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);
}
return this.navigateForward();
@ -145,8 +156,22 @@ export default {
},
VehiclesFromApi() {
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: {
siteHeader,
siteFooter,

View file

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