Additional schedule page prereqs refactor

This commit is contained in:
Matt Sykes 2026-03-09 12:40:19 -04:00
parent e138dfe508
commit 3b950302ff
3 changed files with 143 additions and 112 deletions

View file

@ -1,7 +1,7 @@
import { debugLog } from "@/helpers/debug-log-helper.js";
import { AppointmentTypeStrings } from "@/constants/schedule-constants";
import { coverageStatus } from "@/constants/insurance";
import store from "@/store";
import { applicationConfig } from "@/constants/application-config";
export function logPagePrereqsStart(source, preReqResult) {
// prettier-ignore
@ -87,19 +87,31 @@ export function hasServiceLocationInfo(order, logQueue = null) {
}
export function hasInsuranceInfo(order, logQueue = null) {
const isInsurance = order.payment.isInsurance;
const insuranceCoverageStatus = store.getters.payment?.insuranceCoverage?.coverageStatus;
const currentDeductible = store.getters.policy?.currentDeductible;
const isInsurance = order.payment?.isInsurance;
const insuranceCoverageStatus = order.payment?.insuranceCoverage?.coverageStatus;
const currentDeductible = order.policy?.currentDeductible;
const parentAccountNumber = order.payment?.parentAccountNumber;
const policyNumber = order.policy?.policyNumber;
let result = false;
if (isInsurance !== null) {
if (
insuranceCoverageStatus === coverageStatus.VERIFIED &&
!(currentDeductible === 0 || currentDeductible > 0)
) {
result = false; // if coverageStatus is verified there must be a valid deductible also
if (isInsurance === false) {
result = true; // Cash selected - no need for policy number or parent account
} else {
result = true;
const parentAccountNotCash =
parentAccountNumber !== applicationConfig.CASH_PARENT_ACCOUNT_NUMBER;
const hasPolicyNumber = !!policyNumber;
if (!parentAccountNotCash || !hasPolicyNumber) {
result = false;
} else if (
insuranceCoverageStatus === coverageStatus.VERIFIED &&
!(currentDeductible === 0 || currentDeductible > 0)
) {
result = false; // if coverageStatus is verified there must be a valid deductible also
} else {
result = true;
}
}
}
@ -107,6 +119,10 @@ export function hasInsuranceInfo(order, logQueue = null) {
// prettier-ignore
{
debugLog("hasInsuranceInfo:", result, !result);
if (isInsurance === true) {
debugLog("hasInsuranceInfo parentAccountNumber:", parentAccountNumber, !result);
debugLog("hasInsuranceInfo policyNumber:", policyNumber, !result);
}
if (insuranceCoverageStatus === coverageStatus.VERIFIED) {
debugLog("hasInsuranceInfo coverageStatus:", insuranceCoverageStatus, !result);
debugLog("hasInsuranceInfo currentDeductible:", currentDeductible, !result);

View file

@ -1,5 +1,4 @@
import * as pagePrereqsHelper from "@/helpers/page-prerequisites-helper";
import store from "@/store";
import { AppointmentTypeStrings } from "@/constants/schedule-constants";
import { coverageStatus } from "@/constants/insurance";
@ -293,25 +292,6 @@ describe("page-prerequisites-helper.js", () => {
});
describe("hasInsuranceInfo", () => {
const baseOrder = {
payment: {
isInsurance: false,
},
};
beforeEach(() => {
store.getters = {
payment: {
insuranceCoverage: {
coverageStatus: null,
},
},
policy: {
currentDeductible: 100,
},
};
});
test("returns false when isInsurance is null", () => {
const order = { payment: { isInsurance: null } };
@ -320,19 +300,43 @@ describe("page-prerequisites-helper.js", () => {
expect(result).toBe(false);
});
test("returns true when isInsurance is false and coverage is not verified", () => {
// Arrange
store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.PENDING;
test("returns true when isInsurance is false (cash selected)", () => {
const order = {
payment: {
isInsurance: false,
insuranceCoverage: { coverageStatus: coverageStatus.PENDING },
},
};
const result = pagePrereqsHelper.hasInsuranceInfo(baseOrder);
const result = pagePrereqsHelper.hasInsuranceInfo(order);
expect(result).toBe(true);
});
test("returns true when isInsurance is true and coverage is not verified", () => {
const order = {
payment: {
isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.PENDING },
parentAccountNumber: 999999,
},
policy: { policyNumber: "POL123" },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order);
expect(result).toBe(true);
});
test("returns true when isInsurance is true and coverage is verified with valid deductible", () => {
const order = { payment: { isInsurance: true } };
store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED;
store.getters.policy.currentDeductible = 100;
const order = {
payment: {
isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED },
parentAccountNumber: 999999,
},
policy: { policyNumber: "POL123", currentDeductible: 100 },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order);
@ -340,19 +344,59 @@ describe("page-prerequisites-helper.js", () => {
});
test("returns true when coverage is verified and deductible is 0", () => {
const order = { payment: { isInsurance: true } };
store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED;
store.getters.policy.currentDeductible = 0;
const order = {
payment: {
isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED },
parentAccountNumber: 999999,
},
policy: { policyNumber: "POL123", currentDeductible: 0 },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order);
expect(result).toBe(true);
});
test("returns false when isInsurance is true but parentAccountNumber is CASH_PARENT_ACCOUNT_NUMBER", () => {
const order = {
payment: {
isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.PENDING },
parentAccountNumber: 167132,
},
policy: { policyNumber: "POL123" },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order);
expect(result).toBe(false);
});
test("returns false when isInsurance is true but policyNumber is missing", () => {
const order = {
payment: {
isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.PENDING },
parentAccountNumber: 999999,
},
policy: { policyNumber: null },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order);
expect(result).toBe(false);
});
test("returns false when coverage is verified but deductible is null", () => {
const order = { payment: { isInsurance: true } };
store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED;
store.getters.policy.currentDeductible = null;
const order = {
payment: {
isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED },
parentAccountNumber: 999999,
},
policy: { policyNumber: "POL123", currentDeductible: null },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order);
@ -360,9 +404,14 @@ describe("page-prerequisites-helper.js", () => {
});
test("returns false when coverage is verified but deductible is undefined", () => {
const order = { payment: { isInsurance: true } };
store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED;
store.getters.policy.currentDeductible = undefined;
const order = {
payment: {
isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED },
parentAccountNumber: 999999,
},
policy: { policyNumber: "POL123", currentDeductible: undefined },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order);
@ -370,9 +419,14 @@ describe("page-prerequisites-helper.js", () => {
});
test("returns false when coverage is verified but deductible is negative", () => {
const order = { payment: { isInsurance: true } };
store.getters.payment.insuranceCoverage.coverageStatus = coverageStatus.VERIFIED;
store.getters.policy.currentDeductible = -1;
const order = {
payment: {
isInsurance: true,
insuranceCoverage: { coverageStatus: coverageStatus.VERIFIED },
parentAccountNumber: 999999,
},
policy: { policyNumber: "POL123", currentDeductible: -1 },
};
const result = pagePrereqsHelper.hasInsuranceInfo(order);

View file

@ -261,6 +261,12 @@ import { getAmountDue, getPricingByDayPartWithPrice } from "@/helpers/pricing-he
import { getItemsWithoutRecalParts } from "@/helpers/recal-helper";
import { deepClone } from "@/helpers/object-helper";
import { debugLog } from "@/helpers/debug-log-helper";
import {
flushPagePrereqsLogs,
hasServiceZipInfo,
hasGlassPartsOrRepairInfo,
hasInsuranceInfo,
} from "@/helpers/page-prerequisites-helper.js";
import {
getSessionKeyValue,
getUserIdValue,
@ -981,76 +987,31 @@ export default {
methods: {
splitCopyOnCMSPlaceHolder,
arePagePrerequisitesValid() {
const paymentInfo = store.getters.payment.isInsurance !== null;
const damageInfo =
store.getters.order.damage.isRepair ||
(store.getters.order.lineItems?.glassParts != null &&
store.getters.order.lineItems.glassParts.length > 0);
const parentAccountNumberInfo =
store.getters.payment.parentAccountNumber !==
applicationConfig.CASH_PARENT_ACCOUNT_NUMBER;
const policyNumberInfo = store.getters.order.policy.policyNumber;
const zipCodeInfo = store.getters.order.serviceLocation.zipCode;
const supportingItemsInfo = store.getters.lineItems.supportingItems;
const order = store.getters.order;
const logQueue = [];
const serviceZip = hasServiceZipInfo(order, logQueue);
const glassPartsOrRepair = hasGlassPartsOrRepairInfo(order, logQueue);
const insuranceInfo = hasInsuranceInfo(order, logQueue);
// insurance drops the recycle fee on replace orders so it won't be in supportingItems
const insurancePreReqResult =
parentAccountNumberInfo &&
policyNumberInfo &&
zipCodeInfo &&
paymentInfo &&
damageInfo;
const cashPreReqResult =
supportingItemsInfo && zipCodeInfo && paymentInfo && damageInfo;
const supportingItemsInfo = store.getters.lineItems?.supportingItems;
const supportingItemsPreReqs = order.payment?.isInsurance
? true
: !!supportingItemsInfo;
const outputDebugLog = (preReqResult) => {
// prettier-ignore
debugLog("--- schedule.vue pagePrereqs start ---", null, !preReqResult);
debugLog(
"store.getters.payment.isInsurance:",
store.getters.payment?.isInsurance,
!preReqResult
);
debugLog(
"store.getters.order.damage.isRepair:",
store.getters.order.damage?.isRepair,
!preReqResult
);
debugLog(
"store.getters.order.lineItems.glassParts:",
store.getters.order.lineItems?.glassParts,
!preReqResult
);
debugLog(
"store.getters.payment.parentAccountNumber:",
store.getters.payment.parentAccountNumber,
!preReqResult
);
debugLog(
"store.getters.order.policy.policyNumber:",
store.getters.order.policy.policyNumber,
!preReqResult
);
debugLog(
"store.getters.order.serviceLocation.zipCode:",
store.getters.order.serviceLocation.zipCode,
!preReqResult
);
const preReqResult = serviceZip && insuranceInfo && glassPartsOrRepair && supportingItemsPreReqs;
logQueue.push(() => {
debugLog(
"store.getters.lineItems.supportingItems:",
store.getters.lineItems.supportingItems,
!preReqResult
store.getters.lineItems?.supportingItems,
!supportingItemsPreReqs
);
debugLog("--- schedule.vue pagePrereqs end ---", null, !preReqResult);
};
});
if (store.getters.payment.isInsurance) {
outputDebugLog(insurancePreReqResult);
return insurancePreReqResult;
} else {
outputDebugLog(cashPreReqResult);
return cashPreReqResult;
}
flushPagePrereqsLogs("schedule.vue", preReqResult, logQueue);
return preReqResult;
},
setDataOnLoad(zipCodeData, serviceabilityDetails, mobileFeePart, shopProviderData) {