diff --git a/src/case-expert-report/case-expert-report.builder.spec.ts b/src/case-expert-report/case-expert-report.builder.spec.ts index 94bbb50..544e514 100644 --- a/src/case-expert-report/case-expert-report.builder.spec.ts +++ b/src/case-expert-report/case-expert-report.builder.spec.ts @@ -39,6 +39,8 @@ describe("buildInsurerFileReport", () => { userId: "guilty-user-id", fullName: "مقصر نمونه", phoneNumber: "09120000000", + nationalCodeOfInsurer: "0987654321", + insurerBirthday: 13650115, clientId: "client-guilty", }, statement: { @@ -155,6 +157,13 @@ 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.guiltyOwnerSection, PR.nationalCode)).toBe( + "0987654321", + ); + expect(getFieldValue(report, PR.damagedThirdPartyInsuranceSection, PR.policyNumber)).toBe( "TP-DAMAGED-001", ); diff --git a/src/case-expert-report/case-expert-report.builder.ts b/src/case-expert-report/case-expert-report.builder.ts index 5dfcd04..a65485c 100644 --- a/src/case-expert-report/case-expert-report.builder.ts +++ b/src/case-expert-report/case-expert-report.builder.ts @@ -477,28 +477,48 @@ function buildCarBodyInsuranceFields( ]; } -function buildOwnerSection( - damagedParty: ReportParty | null, - claim?: Record | null, -): InsurerFileReportSection { - const person = damagedParty?.person as ReportRecord | undefined; +function buildPartyOwnerSection( + title: string, + party: ReportParty | null | undefined, + options?: { + claim?: Record | null; + useClaimOwnerFallback?: boolean; + includeSheba?: boolean; + }, +): InsurerFileReportSection | undefined { + const person = party?.person as ReportRecord | undefined; + const claim = options?.claim; const money = claim?.money as | { sheba?: string; nationalCodeOfInsurer?: string } | undefined; const claimOwner = claim?.owner as { fullName?: string } | undefined; - return buildSection(PR.ownerSection, [ - { label: PR.name, value: firstDefined(person?.fullName, claimOwner?.fullName) }, + if (!person && !options?.useClaimOwnerFallback) return undefined; + + return buildSection(title, [ + { + label: PR.name, + value: options?.useClaimOwnerFallback + ? firstDefined(person?.fullName, claimOwner?.fullName) + : firstDefined(person?.fullName), + }, { label: PR.phone, value: asString(person?.phoneNumber) }, { label: PR.nationalCode, - value: firstDefined(person?.nationalCodeOfInsurer, money?.nationalCodeOfInsurer), + value: options?.useClaimOwnerFallback + ? firstDefined(person?.nationalCodeOfInsurer, money?.nationalCodeOfInsurer) + : firstDefined(person?.nationalCodeOfInsurer, person?.nationalCode), }, { label: PR.birthDate, - value: formatBirthDate(person?.insurerBirthday ?? person?.birthday), + value: formatBirthDate( + person?.insurerBirthday ?? person?.birthday ?? person?.driverBirthday, + ), + }, + { + label: PR.sheba, + value: options?.includeSheba ? money?.sheba : undefined, }, - { label: PR.sheba, value: money?.sheba }, ]); } @@ -838,7 +858,14 @@ export function buildInsurerFileReport(file: { const sections = filterEmptySections([ buildCaseTimelineSection(overview, claim), - buildOwnerSection(damagedParty, claim), + buildPartyOwnerSection(PR.ownerSection, damagedParty, { + claim, + useClaimOwnerFallback: true, + includeSheba: true, + }), + includeGuiltySections + ? buildPartyOwnerSection(PR.guiltyOwnerSection, guiltyParty) + : undefined, buildDriverSection(damagedParty, blameContext), buildSection( PR.damagedThirdPartyInsuranceSection, diff --git a/src/case-expert-report/persian-report-labels.ts b/src/case-expert-report/persian-report-labels.ts index 57319ba..e13bf25 100644 --- a/src/case-expert-report/persian-report-labels.ts +++ b/src/case-expert-report/persian-report-labels.ts @@ -4,6 +4,7 @@ export const PR = { requestNo: "شماره درخواست", empty: "-", ownerSection: "مالک خودروی زیان دیده", + guiltyOwnerSection: "مالک خودروی مقصر", driverSection: "راننده خودروی زیان دیده", damagedThirdPartyInsuranceSection: "بیمه شخص ثالث زیان‌دیده", damagedCarBodyInsuranceSection: "بیمه بدنه زیان‌دیده",