import { ClaimCaseStatus } from "src/Types&Enums/claim-request-management/claim-case-status.enum"; import { ClaimStatus } from "src/Types&Enums/claim-request-management/claimStatus.enum"; import { ClaimWorkflowStep } from "src/Types&Enums/claim-request-management/claim-workflow-steps.enum"; export interface ClaimPricingPartLite { factorNeeded?: boolean; partId?: string; } export function getActiveV2ExpertReply(claim: { evaluation?: Record }): { replyKey: "damageExpertReplyFinal" | "damageExpertReply"; reply: Record; parts: ClaimPricingPartLite[]; } | null { const fin = claim.evaluation?.damageExpertReplyFinal as | { parts?: ClaimPricingPartLite[]; submittedAt?: Date } | undefined; const ini = claim.evaluation?.damageExpertReply as | { parts?: ClaimPricingPartLite[]; submittedAt?: Date } | undefined; if (fin?.submittedAt && fin?.parts?.length) { return { replyKey: "damageExpertReplyFinal", reply: fin as Record, parts: fin.parts }; } if (ini?.submittedAt && ini?.parts?.length) { return { replyKey: "damageExpertReply", reply: ini as Record, parts: ini.parts }; } return null; } export function classifyV2ExpertPricingParts(parts: ClaimPricingPartLite[]) { const factorNeeded = parts.filter((p) => p.factorNeeded === true); const priced = parts.filter((p) => p.factorNeeded !== true); return { pricedPartsCount: priced.length, factorNeededPartsCount: factorNeeded.length, mixedFactorAndPrice: factorNeeded.length > 0 && priced.length > 0, allFactorLines: factorNeeded.length > 0 && priced.length === 0, noFactors: factorNeeded.length === 0, }; } export function claimIsV2ExpertFactorUploadStep(claim: { workflow?: { currentStep?: string } }) { return claim.workflow?.currentStep === ClaimWorkflowStep.OWNER_UPLOAD_FACTOR_DOCUMENTS; } export function claimIsV2PendingFactorExpertValidation(claim: { status?: ClaimCaseStatus; claimStatus?: ClaimStatus; workflow?: { currentStep?: string }; }) { return ( claim.status === ClaimCaseStatus.WAITING_FOR_INSURER_APPROVAL && claim.claimStatus === ClaimStatus.UNDER_REVIEW && claim.workflow?.currentStep === ClaimWorkflowStep.EXPERT_COST_EVALUATION ); } export function objectionDisallowedDueToOutstandingFactorWorkflow(claim: { workflow?: { currentStep?: string }; }) { const step = claim.workflow?.currentStep; return ( step === ClaimWorkflowStep.OWNER_UPLOAD_FACTOR_DOCUMENTS || step === ClaimWorkflowStep.EXPERT_COST_EVALUATION ); }