Fixed flow steps of v5

This commit is contained in:
SepehrYahyaee
2026-07-29 10:51:42 +03:30
parent 637cbb20d5
commit b0c7a0890c
3 changed files with 54 additions and 23 deletions

View File

@@ -971,7 +971,7 @@ export class ExpertClaimService {
daghi: {
option: part.daghi.option,
...(part.daghi.price && { price: part.daghi.price }),
...(part.daghi.branchId && {
...(part.daghi.branchId && Types.ObjectId.isValid(part.daghi.branchId) && {
branchId: new Types.ObjectId(part.daghi.branchId),
}),
},
@@ -3382,6 +3382,12 @@ export class ExpertClaimService {
const nextCaseStatus = claimCaseStatusAfterExpertReplyV2(processedParts);
let nextClaimStatus = ClaimStatus.APPROVED;
// V5 flow: FileMaker must approve before the owner is asked to sign.
// When no factor upload is needed, skip the owner-sign step entirely here
// and park the claim at WAITING_FOR_FILE_MAKER_APPROVAL. The owner SMS
// and INSURER_REVIEW status are emitted by fileMakerApproveV5 instead.
const isV5Claim = !!(claim as any).requiresFileMakerApproval;
if (needsFactorUpload) {
nextClaimStatus = ClaimStatus.NEEDS_REVISION;
if (mixedFactorAndPrice) {
@@ -3391,6 +3397,10 @@ export class ExpertClaimService {
currentStep = ClaimWorkflowStep.OWNER_UPLOAD_FACTOR_DOCUMENTS;
nextWorkflowStep = ClaimWorkflowStep.EXPERT_COST_EVALUATION;
}
} else if (isV5Claim) {
// V5, no factors: hold at WAITING_FOR_FILE_MAKER_APPROVAL
currentStep = ClaimWorkflowStep.INSURER_REVIEW;
nextWorkflowStep = ClaimWorkflowStep.CLAIM_COMPLETED;
}
const mergedSelectedParts = [...ownerSelectedParts];
@@ -3408,7 +3418,9 @@ export class ExpertClaimService {
}
const updatePayload: Record<string, unknown> = {
status: nextCaseStatus,
status: isV5Claim && !needsFactorUpload
? ClaimCaseStatus.WAITING_FOR_FILE_MAKER_APPROVAL
: nextCaseStatus,
claimStatus: nextClaimStatus,
...(expertAddedParts.length > 0
? { "damage.selectedParts": mergedSelectedParts }
@@ -3464,8 +3476,9 @@ export class ExpertClaimService {
idempotencyKey: `claim:${claimRequestId}:handled:${actor.sub}`,
});
// V5: owner SMS is sent by fileMakerApproveV5 after FileMaker approval.
const ownerPhoneNotify = await this.resolveClaimOwnerPhone(claim);
if (ownerPhoneNotify && !needsFactorUpload) {
if (ownerPhoneNotify && !needsFactorUpload && !isV5Claim) {
const expertLastName =
actor?.fullName?.trim()?.split(/\s+/).pop() || "کارشناس";
await this.smsOrchestrationService.sendSignatureReviewNotice({
@@ -3473,7 +3486,7 @@ export class ExpertClaimService {
fileKind: "claim",
publicId: claim.publicId,
expertLastName,
link: this.smsOrchestrationService.buildClaimLink(String(claim._id), "v1"),
link: this.smsOrchestrationService.buildClaimLink(String(claim._id), "v2"),
});
}