forked from Yara724/api
Complete inquiry participant flow coverage
This commit is contained in:
@@ -70,6 +70,26 @@ describe("buildInsurerFileReport", () => {
|
||||
},
|
||||
{
|
||||
role: "SECOND",
|
||||
participants: [
|
||||
{
|
||||
participantId: "DRIVER",
|
||||
fullName: "راننده نمونه",
|
||||
nationalCode: "0012345678",
|
||||
birthday: "1370/01/01",
|
||||
licenseNumber: "LIC-1",
|
||||
},
|
||||
{
|
||||
participantId: "VEHICLE_OWNER",
|
||||
fullName: "زیان دیده نمونه",
|
||||
nationalCode: "1234567890",
|
||||
birthday: "1370/01/01",
|
||||
},
|
||||
],
|
||||
participantRoles: {
|
||||
driver: "DRIVER",
|
||||
vehicleOwner: "VEHICLE_OWNER",
|
||||
thirdPartyPolicyholder: "VEHICLE_OWNER",
|
||||
},
|
||||
person: {
|
||||
userId: "damaged-user-id",
|
||||
fullName: "زیان دیده نمونه",
|
||||
@@ -165,61 +185,89 @@ describe("buildInsurerFileReport", () => {
|
||||
},
|
||||
});
|
||||
|
||||
expect(getFieldValue(report, PR.ownerSection, PR.name)).toBe("زیان دیده نمونه");
|
||||
expect(getFieldValue(report, PR.guiltyOwnerSection, PR.name)).toBe("مقصر نمونه");
|
||||
expect(getFieldValue(report, PR.guiltyOwnerSection, PR.phone)).toBe("09120000000");
|
||||
expect(getFieldValue(report, PR.ownerSection, PR.name)).toBe(
|
||||
"زیان دیده نمونه",
|
||||
);
|
||||
expect(
|
||||
getFieldValue(report, PR.damagedParticipantsSection, PR.driverRole),
|
||||
).toContain("راننده نمونه");
|
||||
expect(
|
||||
getFieldValue(
|
||||
report,
|
||||
PR.damagedParticipantsSection,
|
||||
PR.thirdPartyPolicyholderRole,
|
||||
),
|
||||
).toContain("1234567890");
|
||||
expect(getFieldValue(report, PR.guiltyOwnerSection, PR.name)).toBe(
|
||||
"مقصر نمونه",
|
||||
);
|
||||
expect(getFieldValue(report, PR.guiltyOwnerSection, PR.phone)).toBe(
|
||||
"09120000000",
|
||||
);
|
||||
expect(getFieldValue(report, PR.guiltyOwnerSection, PR.nationalCode)).toBe(
|
||||
"0987654321",
|
||||
);
|
||||
|
||||
expect(getFieldValue(report, PR.damagedThirdPartyInsuranceSection, PR.policyNumber)).toBe(
|
||||
"TP-DAMAGED-001",
|
||||
);
|
||||
expect(getFieldValue(report, PR.guiltyThirdPartyInsuranceSection, PR.policyNumber)).toBe(
|
||||
"TP-GUILTY-001",
|
||||
);
|
||||
expect(getFieldValue(report, PR.damagedCarBodyInsuranceSection, PR.policyNumber)).toBe(
|
||||
"CB-DAMAGED-001",
|
||||
);
|
||||
expect(getFieldValue(report, PR.guiltyCarBodyInsuranceSection, PR.policyNumber)).toBe(
|
||||
"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),
|
||||
getFieldValue(
|
||||
report,
|
||||
PR.damagedThirdPartyInsuranceSection,
|
||||
PR.policyNumber,
|
||||
),
|
||||
).toBe("TP-DAMAGED-001");
|
||||
expect(
|
||||
getFieldValue(
|
||||
report,
|
||||
PR.guiltyThirdPartyInsuranceSection,
|
||||
PR.policyNumber,
|
||||
),
|
||||
).toBe("TP-GUILTY-001");
|
||||
expect(
|
||||
getFieldValue(report, PR.damagedCarBodyInsuranceSection, PR.policyNumber),
|
||||
).toBe("CB-DAMAGED-001");
|
||||
expect(
|
||||
getFieldValue(report, PR.guiltyCarBodyInsuranceSection, PR.policyNumber),
|
||||
).toBe("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.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",
|
||||
);
|
||||
expect(
|
||||
getFieldValue(report, PR.fanavaranSection, PR.fanavaranClaimNo),
|
||||
).toBe("111");
|
||||
expect(
|
||||
getFieldValue(report, PR.fanavaranSection, PR.fanavaranExpertiseId),
|
||||
).toBe("444");
|
||||
expect(getFieldValue(report, PR.fanavaranSection, PR.fanavaranPolicyId)).toBe(
|
||||
"555",
|
||||
);
|
||||
expect(
|
||||
getFieldValue(report, PR.fanavaranSection, PR.fanavaranPolicyId),
|
||||
).toBe("555");
|
||||
|
||||
expect(getFieldValue(report, PR.timelineSection, PR.fileRegisteredAt)).toBe(
|
||||
"1405/05/19 13:23",
|
||||
@@ -228,15 +276,15 @@ describe("buildInsurerFileReport", () => {
|
||||
getFieldValue(report, PR.timelineSection, PR.evaluationRegisteredAt),
|
||||
).toBe("1405/05/19 16:00");
|
||||
|
||||
expect(getFieldValue(report, PR.evaluationSection, PR.evaluationResult)).toBe(
|
||||
"تأیید شده",
|
||||
);
|
||||
expect(getFieldValue(report, PR.evaluationSection, PR.evaluationExpert)).toBe(
|
||||
"کارشناس خسارت نمونه",
|
||||
);
|
||||
expect(getFieldValue(report, PR.evaluationSection, PR.evaluationResponse)).toBe(
|
||||
"نیاز به تعویض سپر جلو",
|
||||
);
|
||||
expect(
|
||||
getFieldValue(report, PR.evaluationSection, PR.evaluationResult),
|
||||
).toBe("تأیید شده");
|
||||
expect(
|
||||
getFieldValue(report, PR.evaluationSection, PR.evaluationExpert),
|
||||
).toBe("کارشناس خسارت نمونه");
|
||||
expect(
|
||||
getFieldValue(report, PR.evaluationSection, PR.evaluationResponse),
|
||||
).toBe("نیاز به تعویض سپر جلو");
|
||||
expect(getFieldValue(report, "قیمت قطعات", "قطعه ۱ / نام قطعه")).toBe(
|
||||
"سپر جلو",
|
||||
);
|
||||
@@ -345,9 +393,9 @@ describe("buildInsurerFileReport", () => {
|
||||
});
|
||||
|
||||
const fields = report.sections.flatMap((section) => section.fields);
|
||||
expect(fields.find((field) => field.label === "خودرو / خودرو نو")?.value).toBe(
|
||||
"بله",
|
||||
);
|
||||
expect(
|
||||
fields.find((field) => field.label === "خودرو / خودرو نو")?.value,
|
||||
).toBe("بله");
|
||||
expect(fields.some((field) => field.value === "خیر")).toBe(true);
|
||||
expect(fields.some((field) => field.value === "true")).toBe(false);
|
||||
expect(fields.some((field) => field.value === "false")).toBe(false);
|
||||
@@ -372,10 +420,12 @@ describe("buildInsurerFileReport", () => {
|
||||
});
|
||||
|
||||
const fields = report.sections.flatMap((section) => section.fields);
|
||||
expect(fields.some((field) => String(field.value).includes("ESG"))).toBe(false);
|
||||
expect(fields.some((field) => String(field.value).includes("TEJARAT"))).toBe(
|
||||
expect(fields.some((field) => String(field.value).includes("ESG"))).toBe(
|
||||
false,
|
||||
);
|
||||
expect(
|
||||
fields.some((field) => String(field.value).includes("TEJARAT")),
|
||||
).toBe(false);
|
||||
expect(fields.some((field) => field.label.includes("منبع"))).toBe(false);
|
||||
});
|
||||
|
||||
|
||||
@@ -36,6 +36,8 @@ type ReportParty = ReportRecord & {
|
||||
vehicle?: ReportRecord;
|
||||
statement?: ReportRecord;
|
||||
location?: { lat?: number; lon?: number };
|
||||
participants?: ReportRecord[];
|
||||
participantRoles?: ReportRecord;
|
||||
};
|
||||
|
||||
function asString(value: unknown): string | undefined {
|
||||
@@ -66,7 +68,8 @@ function formatBirthDate(value: unknown): string | undefined {
|
||||
|
||||
function formatDateTime(value: unknown): string | undefined {
|
||||
if (value === undefined || value === null || value === "") return undefined;
|
||||
const date = value instanceof Date ? value : new Date(value as string | number);
|
||||
const date =
|
||||
value instanceof Date ? value : new Date(value as string | number);
|
||||
if (Number.isNaN(date.getTime())) return asString(value);
|
||||
const [d, t] = toJalaliDateAndTime(date);
|
||||
return `${d} ${t}`;
|
||||
@@ -126,13 +129,13 @@ function flattenObject(
|
||||
|
||||
if (Array.isArray(obj)) {
|
||||
const value = normalizeListValue(obj);
|
||||
return value
|
||||
? [{ label: persianFieldPath(prefix || "items"), value }]
|
||||
: [];
|
||||
return value ? [{ label: persianFieldPath(prefix || "items"), value }] : [];
|
||||
}
|
||||
|
||||
if (typeof obj !== "object") {
|
||||
return [{ label: persianFieldPath(prefix || "value"), value: asString(obj) }];
|
||||
return [
|
||||
{ label: persianFieldPath(prefix || "value"), value: asString(obj) },
|
||||
];
|
||||
}
|
||||
|
||||
const rows: InsurerFileReportField[] = [];
|
||||
@@ -160,7 +163,9 @@ function flattenObject(
|
||||
return rows;
|
||||
}
|
||||
|
||||
function dedupeFields(fields: InsurerFileReportField[]): InsurerFileReportField[] {
|
||||
function dedupeFields(
|
||||
fields: InsurerFileReportField[],
|
||||
): InsurerFileReportField[] {
|
||||
const seen = new Set<string>();
|
||||
const out: InsurerFileReportField[] = [];
|
||||
|
||||
@@ -180,7 +185,8 @@ function filterEmptySections(
|
||||
sections: Array<InsurerFileReportSection | undefined>,
|
||||
): InsurerFileReportSection[] {
|
||||
return sections.filter(
|
||||
(section): section is InsurerFileReportSection => !!section && section.fields.length > 0,
|
||||
(section): section is InsurerFileReportSection =>
|
||||
!!section && section.fields.length > 0,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -204,7 +210,9 @@ function expertNameFromSnapshot(snapshot?: {
|
||||
lastName?: string;
|
||||
}): string | undefined {
|
||||
if (!snapshot) return undefined;
|
||||
const name = [snapshot.firstName, snapshot.lastName].filter(Boolean).join(" ");
|
||||
const name = [snapshot.firstName, snapshot.lastName]
|
||||
.filter(Boolean)
|
||||
.join(" ");
|
||||
return name || undefined;
|
||||
}
|
||||
|
||||
@@ -214,9 +222,8 @@ function collectExpertNames(
|
||||
): string | undefined {
|
||||
const names = new Set<string>();
|
||||
|
||||
const blameDecision = (
|
||||
blame?.expert as Record<string, unknown> | undefined
|
||||
)?.decision as Record<string, unknown> | undefined;
|
||||
const blameDecision = (blame?.expert as Record<string, unknown> | undefined)
|
||||
?.decision as Record<string, unknown> | undefined;
|
||||
const blameExpert = expertNameFromSnapshot(
|
||||
blameDecision?.expertProfileSnapshot as
|
||||
| { firstName?: string; lastName?: string }
|
||||
@@ -280,13 +287,16 @@ function resolveReportBlameContext(
|
||||
(claim?.blameFileContext as Record<string, unknown> | undefined)
|
||||
?.blameRequestType ??
|
||||
(snapshot.accident as Record<string, unknown> | undefined)?.type,
|
||||
blameStatus: (claim?.blameFileContext as Record<string, unknown> | undefined)
|
||||
?.blameStatus,
|
||||
blameStatus: (
|
||||
claim?.blameFileContext as Record<string, unknown> | undefined
|
||||
)?.blameStatus,
|
||||
parties: snapshot.parties,
|
||||
};
|
||||
}
|
||||
|
||||
function getPartyRole(party: ReportParty | null | undefined): string | undefined {
|
||||
function getPartyRole(
|
||||
party: ReportParty | null | undefined,
|
||||
): string | undefined {
|
||||
const role = party?.role;
|
||||
return typeof role === "string" ? role : undefined;
|
||||
}
|
||||
@@ -318,7 +328,8 @@ function sameParty(
|
||||
second: ReportParty | null | undefined,
|
||||
): boolean {
|
||||
if (!first || !second) return false;
|
||||
const firstUserId = first.person?.userId != null ? String(first.person.userId) : "";
|
||||
const firstUserId =
|
||||
first.person?.userId != null ? String(first.person.userId) : "";
|
||||
const secondUserId =
|
||||
second.person?.userId != null ? String(second.person.userId) : "";
|
||||
if (firstUserId && secondUserId) return firstUserId === secondUserId;
|
||||
@@ -330,7 +341,9 @@ function resolveEvaluationReply(
|
||||
): Record<string, unknown> | undefined {
|
||||
const evaluation = claim?.evaluation as Record<string, unknown> | undefined;
|
||||
return (
|
||||
(evaluation?.damageExpertReplyFinal as Record<string, unknown> | undefined) ??
|
||||
(evaluation?.damageExpertReplyFinal as
|
||||
| Record<string, unknown>
|
||||
| undefined) ??
|
||||
(evaluation?.damageExpertReply as Record<string, unknown> | undefined)
|
||||
);
|
||||
}
|
||||
@@ -375,10 +388,18 @@ function buildThirdPartyInsuranceFields(
|
||||
const role = getPartyRole(party);
|
||||
const direct = (party?.insurance ?? {}) as Record<string, unknown>;
|
||||
const blameInquiry = pickInquiryReportPayload(
|
||||
inquiryRoleData(blame?.inquiries as Record<string, unknown> | undefined, "thirdParty", role),
|
||||
inquiryRoleData(
|
||||
blame?.inquiries as Record<string, unknown> | undefined,
|
||||
"thirdParty",
|
||||
role,
|
||||
),
|
||||
);
|
||||
const claimInquiry = pickInquiryReportPayload(
|
||||
inquiryRoleData(claim?.inquiries as Record<string, unknown> | undefined, "thirdParty", role),
|
||||
inquiryRoleData(
|
||||
claim?.inquiries as Record<string, unknown> | undefined,
|
||||
"thirdParty",
|
||||
role,
|
||||
),
|
||||
);
|
||||
|
||||
return [
|
||||
@@ -462,12 +483,23 @@ function buildCarBodyInsuranceFields(
|
||||
party?.insurance?.carBody ??
|
||||
{}) as Record<string, unknown>;
|
||||
const blameInquiry = pickInquiryReportPayload(
|
||||
inquiryRoleData(blame?.inquiries as Record<string, unknown> | undefined, "carBody", role),
|
||||
inquiryRoleData(
|
||||
blame?.inquiries as Record<string, unknown> | undefined,
|
||||
"carBody",
|
||||
role,
|
||||
),
|
||||
);
|
||||
const claimInquiry = pickInquiryReportPayload(
|
||||
inquiryRoleData(claim?.inquiries as Record<string, unknown> | undefined, "carBody", role),
|
||||
inquiryRoleData(
|
||||
claim?.inquiries as Record<string, unknown> | undefined,
|
||||
"carBody",
|
||||
role,
|
||||
),
|
||||
);
|
||||
const legacy = (blame?.carBodyInsuranceDetail ?? {}) as Record<string, unknown>;
|
||||
const legacy = (blame?.carBodyInsuranceDetail ?? {}) as Record<
|
||||
string,
|
||||
unknown
|
||||
>;
|
||||
|
||||
return [
|
||||
{
|
||||
@@ -556,7 +588,10 @@ function buildPartyOwnerSection(
|
||||
{
|
||||
label: PR.nationalCode,
|
||||
value: options?.useClaimOwnerFallback
|
||||
? firstDefined(person?.nationalCodeOfInsurer, money?.nationalCodeOfInsurer)
|
||||
? firstDefined(
|
||||
person?.nationalCodeOfInsurer,
|
||||
money?.nationalCodeOfInsurer,
|
||||
)
|
||||
: firstDefined(person?.nationalCodeOfInsurer, person?.nationalCode),
|
||||
},
|
||||
{
|
||||
@@ -572,9 +607,55 @@ function buildPartyOwnerSection(
|
||||
]);
|
||||
}
|
||||
|
||||
function licenseFieldsFromInquiry(
|
||||
inquiry?: Record<string, unknown>,
|
||||
): { licenseType?: string; licenseDate?: string } {
|
||||
function buildParticipantRolesSection(
|
||||
title: string,
|
||||
party: ReportParty | null | undefined,
|
||||
): InsurerFileReportSection | undefined {
|
||||
const participants = Array.isArray(party?.participants)
|
||||
? party.participants
|
||||
: [];
|
||||
const assignments = party?.participantRoles;
|
||||
if (!assignments || participants.length === 0) return undefined;
|
||||
|
||||
const roleLabels: Record<string, string> = {
|
||||
driver: PR.driverRole,
|
||||
vehicleOwner: PR.vehicleOwnerRole,
|
||||
thirdPartyPolicyholder: PR.thirdPartyPolicyholderRole,
|
||||
carBodyPolicyholder: PR.carBodyPolicyholderRole,
|
||||
};
|
||||
const fields = Object.entries(assignments).map(([role, participantId]) => {
|
||||
const participant = participants.find(
|
||||
(candidate) => String(candidate.participantId) === String(participantId),
|
||||
);
|
||||
const value = participant?.unknown
|
||||
? PR.unknown
|
||||
: [
|
||||
asString(participant?.fullName),
|
||||
participant?.nationalCode
|
||||
? `${PR.nationalCode}: ${asString(participant.nationalCode)}`
|
||||
: undefined,
|
||||
participant?.birthday
|
||||
? `${PR.birthDate}: ${formatBirthDate(participant.birthday)}`
|
||||
: undefined,
|
||||
participant?.licenseNumber
|
||||
? `${PR.licenseNumber}: ${asString(participant.licenseNumber)}`
|
||||
: undefined,
|
||||
]
|
||||
.filter(Boolean)
|
||||
.join("، ");
|
||||
return {
|
||||
label: roleLabels[role] ?? persianFieldPath(role),
|
||||
value: value || PR.empty,
|
||||
};
|
||||
});
|
||||
|
||||
return buildSection(title, fields, false);
|
||||
}
|
||||
|
||||
function licenseFieldsFromInquiry(inquiry?: Record<string, unknown>): {
|
||||
licenseType?: string;
|
||||
licenseDate?: string;
|
||||
} {
|
||||
if (!inquiry) return {};
|
||||
return {
|
||||
licenseType: firstDefined(
|
||||
@@ -700,7 +781,9 @@ function buildCaseTimelineSection(
|
||||
},
|
||||
{
|
||||
label: PR.evaluationRegisteredAt,
|
||||
value: formatDateTime(resolveEvaluationSubmittedAt(claim, evaluationReply)),
|
||||
value: formatDateTime(
|
||||
resolveEvaluationSubmittedAt(claim, evaluationReply),
|
||||
),
|
||||
},
|
||||
]);
|
||||
}
|
||||
@@ -709,10 +792,14 @@ function buildFanavaranCodesSection(
|
||||
claim?: Record<string, unknown> | null,
|
||||
): InsurerFileReportSection | undefined {
|
||||
if (!claim) return undefined;
|
||||
const sync = (claim.fanavaranSync as Record<string, unknown> | undefined) ?? {};
|
||||
const baseClaim = (sync.baseClaim as Record<string, unknown> | undefined) ?? {};
|
||||
const damageCase = (sync.damageCase as Record<string, unknown> | undefined) ?? {};
|
||||
const expertise = (sync.expertise as Record<string, unknown> | undefined) ?? {};
|
||||
const sync =
|
||||
(claim.fanavaranSync as Record<string, unknown> | undefined) ?? {};
|
||||
const baseClaim =
|
||||
(sync.baseClaim as Record<string, unknown> | undefined) ?? {};
|
||||
const damageCase =
|
||||
(sync.damageCase as Record<string, unknown> | undefined) ?? {};
|
||||
const expertise =
|
||||
(sync.expertise as Record<string, unknown> | undefined) ?? {};
|
||||
|
||||
return buildSection(PR.fanavaranSection, [
|
||||
{
|
||||
@@ -725,7 +812,11 @@ function buildFanavaranCodesSection(
|
||||
},
|
||||
{
|
||||
label: PR.fanavaranDamageCaseId,
|
||||
value: firstDefined(claim.dmgCaseId, damageCase.dmgCaseId, expertise.dmgCaseId),
|
||||
value: firstDefined(
|
||||
claim.dmgCaseId,
|
||||
damageCase.dmgCaseId,
|
||||
expertise.dmgCaseId,
|
||||
),
|
||||
},
|
||||
{
|
||||
label: PR.fanavaranExpertiseId,
|
||||
@@ -824,10 +915,19 @@ function buildEvaluationPartsSection(
|
||||
const prefix = `${PR.part} ${PERSIAN_NUMBER_FORMATTER.format(index + 1)}`;
|
||||
return [
|
||||
{ label: `${prefix} / ${PR.partName}`, value: evaluationPartName(part) },
|
||||
{ label: `${prefix} / ${PR.damageType}`, value: asString(part.typeOfDamage) },
|
||||
{
|
||||
label: `${prefix} / ${PR.damageType}`,
|
||||
value: asString(part.typeOfDamage),
|
||||
},
|
||||
{ label: `${prefix} / ${PR.partPrice}`, value: formatToman(part.price) },
|
||||
{ label: `${prefix} / ${PR.repairSalary}`, value: formatToman(part.salary) },
|
||||
{ label: `${prefix} / ${PR.totalPayment}`, value: formatToman(part.totalPayment) },
|
||||
{
|
||||
label: `${prefix} / ${PR.repairSalary}`,
|
||||
value: formatToman(part.salary),
|
||||
},
|
||||
{
|
||||
label: `${prefix} / ${PR.totalPayment}`,
|
||||
value: formatToman(part.totalPayment),
|
||||
},
|
||||
{
|
||||
label: `${prefix} / ${PR.factorNeeded}`,
|
||||
value:
|
||||
@@ -835,7 +935,10 @@ function buildEvaluationPartsSection(
|
||||
? persianStatus(part.factorNeeded)
|
||||
: undefined,
|
||||
},
|
||||
{ label: `${prefix} / ${PR.daghi}`, value: evaluationDaghiValue(part.daghi) },
|
||||
{
|
||||
label: `${prefix} / ${PR.daghi}`,
|
||||
value: evaluationDaghiValue(part.daghi),
|
||||
},
|
||||
];
|
||||
});
|
||||
|
||||
@@ -852,10 +955,11 @@ function buildAccidentReportSection(
|
||||
const snapshotAccident = (
|
||||
claim?.snapshot as { accident?: Record<string, unknown> } | undefined
|
||||
)?.accident;
|
||||
const blameDecision = (
|
||||
blame?.expert as Record<string, unknown> | undefined
|
||||
)?.decision as Record<string, unknown> | undefined;
|
||||
const decisionFields = blameDecision?.fields as Record<string, unknown> | undefined;
|
||||
const blameDecision = (blame?.expert as Record<string, unknown> | undefined)
|
||||
?.decision as Record<string, unknown> | undefined;
|
||||
const decisionFields = blameDecision?.fields as
|
||||
| Record<string, unknown>
|
||||
| undefined;
|
||||
|
||||
return buildSection(PR.accidentSection, [
|
||||
{
|
||||
@@ -868,7 +972,8 @@ function buildAccidentReportSection(
|
||||
},
|
||||
{
|
||||
label: PR.accidentTime,
|
||||
value: asString(statement?.accidentTime) ?? asString(snapshotAccident?.time),
|
||||
value:
|
||||
asString(statement?.accidentTime) ?? asString(snapshotAccident?.time),
|
||||
},
|
||||
{
|
||||
label: PR.experts,
|
||||
@@ -914,7 +1019,8 @@ function buildAccidentReportSection(
|
||||
{
|
||||
label: PR.accidentWay,
|
||||
value: asString(
|
||||
(decisionFields?.accidentWay as { label?: string } | undefined)?.label ??
|
||||
(decisionFields?.accidentWay as { label?: string } | undefined)
|
||||
?.label ??
|
||||
(
|
||||
snapshotAccident?.classification as {
|
||||
accidentWay?: { label?: string };
|
||||
@@ -925,7 +1031,8 @@ function buildAccidentReportSection(
|
||||
{
|
||||
label: PR.accidentReason,
|
||||
value: asString(
|
||||
(decisionFields?.accidentReason as { label?: string } | undefined)?.label ??
|
||||
(decisionFields?.accidentReason as { label?: string } | undefined)
|
||||
?.label ??
|
||||
(
|
||||
snapshotAccident?.classification as {
|
||||
accidentReason?: { label?: string };
|
||||
@@ -936,7 +1043,8 @@ function buildAccidentReportSection(
|
||||
{
|
||||
label: PR.accidentType,
|
||||
value: asString(
|
||||
(decisionFields?.accidentType as { label?: string } | undefined)?.label ??
|
||||
(decisionFields?.accidentType as { label?: string } | undefined)
|
||||
?.label ??
|
||||
(
|
||||
snapshotAccident?.classification as {
|
||||
accidentType?: { label?: string };
|
||||
@@ -968,12 +1076,17 @@ export function buildInsurerFileReport(file: {
|
||||
: null;
|
||||
const isCarBody =
|
||||
String((blameContext?.type as string | undefined) ?? "") === "CAR_BODY";
|
||||
const includeGuiltySections = !!guiltyParty && !(isCarBody && sameParty(damagedParty, guiltyParty));
|
||||
const includeGuiltySections =
|
||||
!!guiltyParty && !(isCarBody && sameParty(damagedParty, guiltyParty));
|
||||
|
||||
const claimVehicle = claim?.vehicle as Record<string, unknown> | undefined;
|
||||
|
||||
const sections = filterEmptySections([
|
||||
buildCaseTimelineSection(overview, claim),
|
||||
buildParticipantRolesSection(PR.damagedParticipantsSection, damagedParty),
|
||||
includeGuiltySections
|
||||
? buildParticipantRolesSection(PR.guiltyParticipantsSection, guiltyParty)
|
||||
: undefined,
|
||||
buildPartyOwnerSection(PR.ownerSection, damagedParty, {
|
||||
claim,
|
||||
useClaimOwnerFallback: true,
|
||||
@@ -1003,7 +1116,11 @@ export function buildInsurerFileReport(file: {
|
||||
buildCarBodyInsuranceFields(guiltyParty, blameContext, claim),
|
||||
)
|
||||
: undefined,
|
||||
buildPartyVehicleSection(PR.damagedVehicleSection, damagedParty, claimVehicle),
|
||||
buildPartyVehicleSection(
|
||||
PR.damagedVehicleSection,
|
||||
damagedParty,
|
||||
claimVehicle,
|
||||
),
|
||||
includeGuiltySections
|
||||
? buildPartyVehicleSection(PR.guiltyVehicleSection, guiltyParty)
|
||||
: undefined,
|
||||
|
||||
@@ -5,6 +5,8 @@ export const PR = {
|
||||
empty: "-",
|
||||
ownerSection: "مالک خودروی زیان دیده",
|
||||
guiltyOwnerSection: "مالک خودروی مقصر",
|
||||
damagedParticipantsSection: "اشخاص و نقشهای خودروی زیاندیده",
|
||||
guiltyParticipantsSection: "اشخاص و نقشهای خودروی مقصر",
|
||||
driverSection: "راننده خودروی زیان دیده",
|
||||
damagedThirdPartyInsuranceSection: "بیمه شخص ثالث زیاندیده",
|
||||
damagedCarBodyInsuranceSection: "بیمه بدنه زیاندیده",
|
||||
@@ -61,6 +63,11 @@ export const PR = {
|
||||
claimsDamage: "ادعای خسارت",
|
||||
acceptsExpertOpinion: "پذیرش نظر کارشناس",
|
||||
partyRole: "نقش طرف",
|
||||
driverRole: "راننده",
|
||||
vehicleOwnerRole: "مالک وسیله نقلیه",
|
||||
thirdPartyPolicyholderRole: "بیمهگذار شخص ثالث",
|
||||
carBodyPolicyholderRole: "بیمهگذار بدنه",
|
||||
unknown: "نامشخص",
|
||||
data: "اطلاعات",
|
||||
date: "تاریخ",
|
||||
time: "زمان",
|
||||
|
||||
Reference in New Issue
Block a user