import { buildInsurerFileReport } from "./case-expert-report.builder"; import { PR } from "./persian-report-labels"; import { toJalaliDateAndTime } from "../helpers/date-jalali"; describe("buildInsurerFileReport", () => { const getFieldValue = ( report: ReturnType, sectionTitle: string, fieldLabel: string, ) => { const section = report.sections.find((item) => item.title === sectionTitle); expect(section).toBeDefined(); const field = section?.fields.find((item) => item.label === fieldLabel); expect(field).toBeDefined(); return field?.value; }; it("separates insurance blocks and exposes Fanavaran/timeline/evaluation data", () => { const fileCreatedAt = new Date("2026-08-10T09:53:23.588Z"); const evaluationSubmittedAt = new Date("2026-08-10T12:30:45.000Z"); const [fileDate, fileTime] = toJalaliDateAndTime(fileCreatedAt); const [evaluationDate, evaluationTime] = toJalaliDateAndTime(evaluationSubmittedAt); const report = buildInsurerFileReport({ overview: { publicId: "A00010", requestNo: "REQ-10", createdAt: fileCreatedAt, }, blame: { type: "THIRD_PARTY", blameStatus: "AGREED", createdAt: fileCreatedAt, parties: [ { role: "FIRST", person: { userId: "guilty-user-id", fullName: "مقصر نمونه", phoneNumber: "09120000000", nationalCodeOfInsurer: "0987654321", insurerBirthday: 13650115, clientId: "client-guilty", }, 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: "بیمه ثالث مقصر", startDate: "1405/01/01", endDate: "1406/01/01", financialCeiling: "900000000", carBodyInsurance: { policyNumber: "CB-GUILTY-001", insurerCompany: "بیمه بدنه مقصر", startDate: "1405/02/01", endDate: "1406/02/01", }, }, }, { role: "SECOND", person: { userId: "damaged-user-id", fullName: "زیان دیده نمونه", phoneNumber: "09121111111", nationalCodeOfInsurer: "1234567890", clientId: "client-damaged", insurerBirthday: 13700101, }, statement: { claimsDamage: true, acceptsExpertOpinion: false, description: "توضیحات زیان‌دیده", accidentDate: "2026-08-10", accidentTime: "13:23", }, insurance: { policyNumber: "TP-DAMAGED-001", company: "بیمه ثالث زیان‌دیده", startDate: "1405/03/01", endDate: "1406/03/01", financialCeiling: "700000000", carBodyInsurance: { policyNumber: "CB-DAMAGED-001", insurerCompany: "بیمه بدنه زیان‌دیده", startDate: "1405/04/01", endDate: "1406/04/01", coverages: ["سرقت", "آتش‌سوزی"], }, }, vehicle: { carName: "207", carModel: "1402", plate: { leftDigits: 12, centerAlphabet: "ب", centerDigits: 345, ir: 11, }, }, }, ], expert: { decision: { guiltyPartyId: "guilty-user-id", description: "مقصر شناخته شد", fields: { accidentWay: { label: "از جلو" }, accidentReason: { label: "عدم رعایت فاصله" }, accidentType: { label: "برخورد" }, }, }, }, }, claim: { claimStatus: "APPROVED", claimNo: 111, claimId: 222, dmgCaseId: 333, expertiseId: 444, owner: { fullName: "زیان دیده نمونه" }, vehicle: { carName: "207", carModel: "1402", carType: "sedan", }, fanavaranSync: { baseClaim: { policyId: 555, driverId: 666, vehicleKindId: 777, insuranceCorpId: 888, }, }, evaluation: { damageExpertReplyFinal: { submittedAt: evaluationSubmittedAt, description: "نیاز به تعویض سپر جلو", actorDetail: { actorName: "کارشناس خسارت نمونه" }, }, }, }, }); 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", ); 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.acceptsExpertOpinion), ).toBe("بله"); 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.timelineSection, PR.fileRegisteredAt)).toBe( `${fileDate} ${fileTime}`, ); expect( getFieldValue(report, PR.timelineSection, PR.evaluationRegisteredAt), ).toBe(`${evaluationDate} ${evaluationTime}`); expect(getFieldValue(report, PR.evaluationSection, PR.evaluationResult)).toBe( "تأیید شده", ); expect(getFieldValue(report, PR.evaluationSection, PR.evaluationExpert)).toBe( "کارشناس خسارت نمونه", ); expect(getFieldValue(report, PR.evaluationSection, PR.evaluationResponse)).toBe( "نیاز به تعویض سپر جلو", ); }); });