forked from Yara724/api
Use FileMaker and FileReviewer Fanavaran expert ids on V4/V5 flows.
Block file create and review when the matching third-party or car-body code is missing, and override GEN.03/GEN.06 ClaimExpertId from those profiles instead of tenant defaults. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
90
src/fanavaran/fanavaran-file-role-expert-ids.ts
Normal file
90
src/fanavaran/fanavaran-file-role-expert-ids.ts
Normal file
@@ -0,0 +1,90 @@
|
||||
import { BadRequestException } from "@nestjs/common";
|
||||
import { BlameRequestType } from "src/Types&Enums/blame-request-management/blameRequestType.enum";
|
||||
import { parseFanavaranId } from "src/lookups/fanavaran-last-car-policy";
|
||||
|
||||
export type FileMakerFanavaranExpertCodes = {
|
||||
ThirdPartyClaimExpertId?: string;
|
||||
CarBodyClaimExpertId?: string;
|
||||
};
|
||||
|
||||
export type FileReviewerFanavaranExpertCodes = {
|
||||
ThirdPartyExpertiseClaim?: string;
|
||||
CarBodyExpertiseClaim?: string;
|
||||
};
|
||||
|
||||
export function parseFanavaranExpertId(raw?: string | null): number | null {
|
||||
if (raw == null) return null;
|
||||
const trimmed = String(raw).trim();
|
||||
if (!trimmed) return null;
|
||||
return parseFanavaranId(trimmed) ?? parseFanavaranId(Number(trimmed));
|
||||
}
|
||||
|
||||
export function fileMakerStageOneExpertCode(
|
||||
fileMaker: FileMakerFanavaranExpertCodes,
|
||||
blameType: BlameRequestType,
|
||||
): string | undefined {
|
||||
return blameType === BlameRequestType.CAR_BODY
|
||||
? fileMaker.CarBodyClaimExpertId
|
||||
: fileMaker.ThirdPartyClaimExpertId;
|
||||
}
|
||||
|
||||
export function fileReviewerExpertiseExpertCode(
|
||||
fileReviewer: FileReviewerFanavaranExpertCodes,
|
||||
blameType: BlameRequestType,
|
||||
): string | undefined {
|
||||
return blameType === BlameRequestType.CAR_BODY
|
||||
? fileReviewer.CarBodyExpertiseClaim
|
||||
: fileReviewer.ThirdPartyExpertiseClaim;
|
||||
}
|
||||
|
||||
function blameTypeLabel(blameType: BlameRequestType): string {
|
||||
return blameType === BlameRequestType.CAR_BODY
|
||||
? "car body (بدنه)"
|
||||
: "third party (ثالث)";
|
||||
}
|
||||
|
||||
export function assertFileMakerCanCreateBlameType(
|
||||
fileMaker: FileMakerFanavaranExpertCodes,
|
||||
blameType: BlameRequestType,
|
||||
): void {
|
||||
const raw = fileMakerStageOneExpertCode(fileMaker, blameType);
|
||||
if (parseFanavaranExpertId(raw) != null) {
|
||||
return;
|
||||
}
|
||||
throw new BadRequestException({
|
||||
code: "FILE_MAKER_FANAVARAN_EXPERT_CODE_MISSING",
|
||||
message: `Your FileMaker profile has no Fanavaran stage-1 claim expert id for ${blameTypeLabel(blameType)} files. You cannot create this file type.`,
|
||||
});
|
||||
}
|
||||
|
||||
export function assertFileReviewerCanReviewBlameType(
|
||||
fileReviewer: FileReviewerFanavaranExpertCodes,
|
||||
blameType: BlameRequestType,
|
||||
): void {
|
||||
const raw = fileReviewerExpertiseExpertCode(fileReviewer, blameType);
|
||||
if (parseFanavaranExpertId(raw) != null) {
|
||||
return;
|
||||
}
|
||||
throw new BadRequestException({
|
||||
code: "FILE_REVIEWER_FANAVARAN_EXPERT_CODE_MISSING",
|
||||
message: `Your FileReviewer profile has no Fanavaran expertise claim expert id for ${blameTypeLabel(blameType)} files. You cannot review this file type.`,
|
||||
});
|
||||
}
|
||||
|
||||
export function resolveFileMakerStageOneExpertId(
|
||||
fileMaker: FileMakerFanavaranExpertCodes,
|
||||
blameType: BlameRequestType,
|
||||
): number | null {
|
||||
return parseFanavaranExpertId(
|
||||
fileMakerStageOneExpertCode(fileMaker, blameType),
|
||||
);
|
||||
}
|
||||
|
||||
export function resolveFileReviewerExpertiseExpertId(
|
||||
fileReviewer: FileReviewerFanavaranExpertCodes,
|
||||
blameType: BlameRequestType,
|
||||
): number | null {
|
||||
return parseFanavaranExpertId(
|
||||
fileReviewerExpertiseExpertCode(fileReviewer, blameType),
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user