Added new data for YARA-1241

This commit is contained in:
SepehrYahyaee
2026-08-26 15:57:09 +03:30
parent 5203c07154
commit 226b63aefb
3 changed files with 144 additions and 10 deletions

View File

@@ -41,7 +41,21 @@ describe("buildInsurerFileReport", () => {
phoneNumber: "09120000000",
clientId: "client-guilty",
},
statement: { admitsGuilt: true },
statement: {
admitsGuilt: true,
acceptsExpertOpinion: true,
description: "توضیحات مقصر",
},
vehicle: {
carName: "206",
carModel: "1401",
plate: {
leftDigits: 98,
centerAlphabet: "ج",
centerDigits: 765,
ir: 22,
},
},
insurance: {
policyNumber: "TP-GUILTY-001",
company: "بیمه ثالث مقصر",
@@ -68,6 +82,7 @@ describe("buildInsurerFileReport", () => {
},
statement: {
claimsDamage: true,
acceptsExpertOpinion: false,
description: "توضیحات زیان‌دیده",
accidentDate: "2026-08-10",
accidentTime: "13:23",
@@ -153,6 +168,32 @@ describe("buildInsurerFileReport", () => {
"CB-GUILTY-001",
);
expect(getFieldValue(report, PR.damagedVehicleSection, "خودرو / نام خودرو")).toBe(
"207",
);
expect(getFieldValue(report, PR.guiltyVehicleSection, "خودرو / نام خودرو")).toBe(
"206",
);
expect(getFieldValue(report, PR.damagedStatementSection, PR.partyDescription)).toBe(
"توضیحات زیان‌دیده",
);
expect(getFieldValue(report, PR.damagedStatementSection, PR.claimsDamage)).toBe(
"بله",
);
expect(
getFieldValue(report, PR.damagedStatementSection, PR.acceptsExpertOpinion),
).toBe("خیر");
expect(getFieldValue(report, PR.guiltyStatementSection, PR.partyDescription)).toBe(
"توضیحات مقصر",
);
expect(getFieldValue(report, PR.guiltyStatementSection, PR.admitsGuilt)).toBe(
"بله",
);
expect(
getFieldValue(report, PR.guiltyStatementSection, PR.acceptsExpertOpinion),
).toBe("بله");
expect(getFieldValue(report, PR.fanavaranSection, PR.fanavaranClaimNo)).toBe(
"111",
);

View File

@@ -258,6 +258,28 @@ function getPartyRole(party: ReportParty | null | undefined): string | undefined
return typeof role === "string" ? role : undefined;
}
function partyKindLabel(
party: ReportParty | null | undefined,
damagedParty: ReportParty | null,
guiltyParty: ReportParty | null,
): string | undefined {
if (sameParty(party, damagedParty)) return "damaged";
if (sameParty(party, guiltyParty)) return "guilty";
return undefined;
}
function partyRoleLabel(role: string | undefined): string | undefined {
if (!role) return undefined;
if (role === PartyRole.FIRST) return "طرف اول";
if (role === PartyRole.SECOND) return "طرف دوم";
return role;
}
function statementBoolean(value: unknown): string | undefined {
if (typeof value !== "boolean") return undefined;
return persianStatus(value);
}
function sameParty(
first: ReportParty | null | undefined,
second: ReportParty | null | undefined,
@@ -536,16 +558,60 @@ function buildDriverSection(
]);
}
function buildVehicleSection(
damagedParty: ReportParty | null,
claim?: Record<string, unknown> | null,
): InsurerFileReportSection {
const partyVehicle = damagedParty?.vehicle;
const claimVehicle = claim?.vehicle as Record<string, unknown> | undefined;
function buildPartyVehicleSection(
title: string,
party: ReportParty | null | undefined,
claimVehicle?: Record<string, unknown>,
): InsurerFileReportSection | undefined {
if (!party && !claimVehicle) return undefined;
return buildSection(PR.vehicleSection, [
return buildSection(title, [
...flattenObject(claimVehicle, "claim.vehicle"),
...flattenObject(partyVehicle, "party.vehicle"),
...flattenObject(party?.vehicle, "party.vehicle"),
]);
}
function buildPartyStatementSection(
title: string,
party: ReportParty | null | undefined,
damagedParty: ReportParty | null,
guiltyParty: ReportParty | null,
): InsurerFileReportSection | undefined {
if (!party) return undefined;
const statement = (party.statement ?? {}) as ReportRecord;
const kind = partyKindLabel(party, damagedParty, guiltyParty);
return buildSection(title, [
{
label: PR.partyRole,
value: partyRoleLabel(getPartyRole(party)),
},
{
label: PR.name,
value: firstDefined(party.person?.fullName),
},
{
label: PR.admitsGuilt,
value:
kind === "damaged"
? undefined
: statementBoolean(statement.admitsGuilt),
},
{
label: PR.claimsDamage,
value:
kind === "guilty"
? undefined
: statementBoolean(statement.claimsDamage),
},
{
label: PR.acceptsExpertOpinion,
value: statementBoolean(statement.acceptsExpertOpinion),
},
{
label: PR.partyDescription,
value: asString(statement.description),
},
]);
}
@@ -768,6 +834,8 @@ export function buildInsurerFileReport(file: {
String((blameContext?.type as string | undefined) ?? "") === "CAR_BODY";
const includeGuiltySections = !!guiltyParty && !(isCarBody && sameParty(damagedParty, guiltyParty));
const claimVehicle = claim?.vehicle as Record<string, unknown> | undefined;
const sections = filterEmptySections([
buildCaseTimelineSection(overview, claim),
buildOwnerSection(damagedParty, claim),
@@ -792,7 +860,24 @@ export function buildInsurerFileReport(file: {
buildCarBodyInsuranceFields(guiltyParty, blameContext, claim),
)
: undefined,
buildVehicleSection(damagedParty, claim),
buildPartyVehicleSection(PR.damagedVehicleSection, damagedParty, claimVehicle),
includeGuiltySections
? buildPartyVehicleSection(PR.guiltyVehicleSection, guiltyParty)
: undefined,
buildPartyStatementSection(
PR.damagedStatementSection,
damagedParty,
damagedParty,
guiltyParty,
),
includeGuiltySections
? buildPartyStatementSection(
PR.guiltyStatementSection,
guiltyParty,
damagedParty,
guiltyParty,
)
: undefined,
buildFanavaranCodesSection(claim),
buildEvaluationSection(claim),
buildAccidentReportSection(blameContext, claim, damagedParty),

View File

@@ -9,7 +9,11 @@ export const PR = {
damagedCarBodyInsuranceSection: "بیمه بدنه زیان‌دیده",
guiltyThirdPartyInsuranceSection: "بیمه شخص ثالث مقصر",
guiltyCarBodyInsuranceSection: "بیمه بدنه مقصر",
damagedVehicleSection: "اطلاعات خودروی زیان‌دیده",
guiltyVehicleSection: "اطلاعات خودروی مقصر",
vehicleSection: "اطلاعات خودرو",
damagedStatementSection: "اظهارات و اقرار زیان‌دیده",
guiltyStatementSection: "اظهارات و اقرار مقصر",
timelineSection: "زمان‌بندی پرونده",
fanavaranSection: "کدهای فناوران",
evaluationSection: "نتیجه ارزیابی",
@@ -43,6 +47,10 @@ export const PR = {
evaluationExpert: "کارشناس ارزیاب",
evaluationSubmittedAt: "تاریخ و ساعت ثبت ارزیابی",
evaluationResponse: "پاسخ / توضیحات کارشناس",
admitsGuilt: "اقرار به تقصیر",
claimsDamage: "ادعای خسارت",
acceptsExpertOpinion: "پذیرش نظر کارشناس",
partyRole: "نقش طرف",
data: "اطلاعات",
date: "تاریخ",
time: "زمان",