import { canReuseCachedFanavaranVehicleIds, collectPartyVinCandidates, fanavaranIdOrConfigDefault, fanavaranPayloadMatchesDamagedIdentity, fanavaranVehicleMatchesDamagedIdentity, filterPoliciesByLine, applyFanavaranManualPayloadOverrides, resolveDamageCasePlaqueLookupIds, insuranceLineLabel, parseLastCarPolicyInput, pickFanavaranPlaqueLookupFields, pickFanavaranVehicleFromInquiry, pickVehicleId, pickVinFromPartyVehicle, plaqueLetterFromMiddleCode, plaqueMatchesVehicle, selectFanavaranVehicleForDamageCase, selectLastAmongCarMatches, toAppPlaque, vehicleMatchesCar, } from "./fanavaran-last-car-policy"; describe("fanavaran last car policy", () => { const today = "2026-09-05"; it("parses national code and prefers VIN when both identifiers are sent", () => { const parsed = parseLastCarPolicyInput({ nationalCode: "۰۰۱۲۳۴۵۶۷۸", vin: " irnkaek4150012345 ", plaqueLeft: "12", plaqueLetter: "ب", plaqueRight: "345", plaqueSerial: "67", }); expect(parsed).toEqual({ nationalCode: "0012345678", vin: "IRNKAEK4150012345", plaque: { left: "12", letter: "ب", right: "345", serial: "67" }, }); }); it("rejects a partial plaque when VIN is missing", () => { const parsed = parseLastCarPolicyInput({ nationalCode: "0012345678", plaqueLeft: "12", plaqueLetter: "ب", }); expect(parsed).toEqual({ error: "plaque requires all four parts: plaqueLeft, plaqueLetter, plaqueRight, plaqueSerial", }); }); it("maps insurance line ids to CAR_BODY and THIRD_PARTY", () => { expect(insuranceLineLabel(4)).toBe("CAR_BODY"); expect(insuranceLineLabel(5)).toBe("THIRD_PARTY"); }); it("converts PlaqueMiddleCodeId 5 to د and builds app plaque parts", () => { expect(plaqueLetterFromMiddleCode(5)).toBe("د"); expect( toAppPlaque({ PlaqueLeftNo: "29", PlaqueMiddleCodeId: 5, PlaqueRightNo: "782", PlaqueSerial: "60", }), ).toEqual({ leftTwoDigits: "29", serialLetter: "د", threeDigits: "782", rightTwoDigits: "60", }); }); it("keeps only the requested insurance line", () => { const rows = filterPoliciesByLine( [ { PolicyId: 1, InsuranceLineId: 5, EndDate: "1405/01/01" }, { PolicyId: 2, InsuranceLineId: 4, EndDate: "1405/01/01" }, { PolicyId: 3, EndDate: "1405/01/01" }, ], 5, ); expect(rows.map((row) => row.PolicyId)).toEqual([1, 3]); }); it("reads VehicleId from a one-item inquiry-by-vin array", () => { expect(pickVehicleId([{ Id: 4118289, VIN: "NAAR03HFFRDE07024" }])).toBe( 4118289, ); }); it("picks the inquiry row matching policy VehicleId and VIN from the party", () => { const inquired = [ { Id: 1, UsedId: 1, VehicleKindId: 10 }, { Id: 3379978, UsedId: 84, VehicleKindId: 5950, VIN: "NAS451100P4934023", }, ]; expect(pickFanavaranVehicleFromInquiry(inquired, 3379978)).toEqual( inquired[1], ); expect( pickVinFromPartyVehicle({ vehicle: { vin: "nas451100p4934023" }, }), ).toBe("NAS451100P4934023"); expect( pickVinFromPartyVehicle({ vehicle: { inquiry: { mapped: { VIN: "NAS451100P4934023" } }, }, }), ).toBe("NAS451100P4934023"); }); it("does not let chassis stored on vehicle.vin beat the inquiry VIN", () => { const party = { vehicle: { vin: "NAAN01CA9BK493683", inquiry: { mapped: { VIN: "IRFC901V119493683", ChassisNo: "NAAN01CA9BK493683", }, }, }, }; expect(pickVinFromPartyVehicle(party)).toBe("IRFC901V119493683"); expect(collectPartyVinCandidates(party)).toEqual([ "IRFC901V119493683", "NAAN01CA9BK493683", ]); }); it("prefers the VIN-inquiry row that already has PlaqueKindId", () => { expect( pickFanavaranVehicleFromInquiry([ { Id: 1, VIN: "IRFC901V119493683" }, { Id: 2, VIN: "IRFC901V119493683", PlaqueKindId: 15, PlaqueSampleId: 24 }, ]), ).toEqual({ Id: 2, VIN: "IRFC901V119493683", PlaqueKindId: 15, PlaqueSampleId: 24, }); }); it("reads plaque kind and sample from VIN inquiry for the lookup filter", () => { expect( pickFanavaranPlaqueLookupFields({ PlaqueKindId: 15, PlaqueSampleId: 24, PlaqueCityId: null, PlaqueLeftNo: "62", PlaqueMiddleCodeId: 14, PlaqueRightNo: "278", PlaqueSerial: "50", PlaqueNo: "278و62", }), ).toEqual({ kindId: 15, sampleId: 24, cityId: null, leftNo: "62", middleCodeId: 14, rightNo: "278", serial: "50", plaqueNo: "278و62", }); }); it("uses tenant config default when the API id is missing", () => { expect(fanavaranIdOrConfigDefault(15, 8)).toBe(15); expect(fanavaranIdOrConfigDefault(null, 8)).toBe(8); expect(fanavaranIdOrConfigDefault(0, 10)).toBe(10); }); it("matches VIN against ChassisNo when VIN is empty", () => { expect( vehicleMatchesCar( { VIN: null, ChassisNo: "NAAR03HFFRDE07024" }, { vin: "NAAR03HFFRDE07024" }, ), ).toBe(true); }); it("matches by VIN-inquiry VehicleId when GEN.15 VIN is empty", () => { expect( vehicleMatchesCar( { Id: 4118289, VIN: null, ChassisNo: "RDE07024" }, { vin: "NAAR03HFFRDE07024" }, 4118289, ), ).toBe(true); }); it("matches VIN trim and case-insensitively", () => { expect( vehicleMatchesCar( { VIN: " irnKAEK4150012345 " }, { vin: "IRNKAEK4150012345" }, ), ).toBe(true); }); it("matches plaque by all four parts including letter code", () => { expect( plaqueMatchesVehicle( { left: "12", letter: "ب", right: "345", serial: "67" }, { PlaqueLeftNo: "12", PlaqueMiddleCodeId: 2, PlaqueRightNo: "345", PlaqueSerial: "67", }, ), ).toBe(true); }); it("lets VIN win when both VIN and plaque are sent", () => { expect( vehicleMatchesCar( { VIN: "IRNKAEK4150012345", PlaqueLeftNo: "99", PlaqueMiddleCodeId: 1, PlaqueRightNo: "111", PlaqueSerial: "22", }, { vin: "IRNKAEK4150012345", plaque: { left: "12", letter: "ب", right: "345", serial: "67" }, }, ), ).toBe(true); }); it("does not match plaque when any part differs", () => { expect( plaqueMatchesVehicle( { left: "12", letter: "ب", right: "345", serial: "67" }, { PlaqueLeftNo: "12", PlaqueMiddleCodeId: 2, PlaqueRightNo: "345", PlaqueSerial: "68", }, ), ).toBe(false); }); it("picks the active renewal with the newest BeginDate", () => { const selected = selectLastAmongCarMatches( [ { policyId: 10, beginDate: "1404/06/01", endDate: "1405/06/01", policy: {}, vehicle: null, }, { policyId: 20, beginDate: "1405/06/02", endDate: "1406/06/01", policy: {}, vehicle: null, }, { policyId: 30, beginDate: "1403/01/01", endDate: "1404/01/01", policy: {}, vehicle: null, }, ], today, ); expect(selected?.policyId).toBe(20); }); it("falls back to the latest EndDate when no match is active", () => { const selected = selectLastAmongCarMatches( [ { policyId: 10, beginDate: "1402/01/01", endDate: "1403/01/01", policy: {}, vehicle: null, }, { policyId: 20, beginDate: "1403/01/01", endDate: "1404/06/01", policy: {}, vehicle: null, }, ], today, ); expect(selected?.policyId).toBe(20); }); it("returns null when there are no matches", () => { expect(selectLastAmongCarMatches([], today)).toBeNull(); }); const damagedIdentity = { vin: "IRPC941V2BD798656", chassis: "NAS431100E5798656", plaque: { left: "59", letter: "ی", right: "419", serial: "78" }, policyCINumber: "16040446424", }; const culpritVehicle = { Id: 475449, VIN: "IRFC891V7D2301065", ChassisNo: "NAAP41FD5BJ301065", VehicleKindId: 6953, VersionNo: 3, PlaqueKindId: 8, PlaqueSampleId: 10, PlaqueLeftNo: "56", PlaqueMiddleCodeId: 5, PlaqueRightNo: "394", PlaqueSerial: "66", PlaqueNo: "394د56", }; it("does not treat the culprit vehicle as the damaged car", () => { expect( fanavaranVehicleMatchesDamagedIdentity(culpritVehicle, damagedIdentity), ).toBe(false); expect( selectFanavaranVehicleForDamageCase( [ culpritVehicle, { Id: 9, VIN: "OTHER", PlaqueKindId: 15, PlaqueSampleId: 24 }, ], damagedIdentity, ), ).toBeNull(); }); it("ignores a PlaqueKindId 15 row that does not share VIN or plate", () => { expect( selectFanavaranVehicleForDamageCase( [ { Id: 1, VIN: "IRPC941V2BD798656" }, { Id: 2, VIN: "IRFC901V119493683", PlaqueKindId: 15, PlaqueSampleId: 24, PlaqueLeftNo: "62", PlaqueMiddleCodeId: 14, PlaqueRightNo: "278", PlaqueSerial: "50", }, ], damagedIdentity, ), ).toEqual({ Id: 1, VIN: "IRPC941V2BD798656" }); }); it("requires plate agreement when the inquiry row has plaque parts", () => { expect( selectFanavaranVehicleForDamageCase( [ { Id: 1, VIN: "IRPC941V2BD798656", PlaqueKindId: 15, PlaqueLeftNo: "56", PlaqueMiddleCodeId: 5, PlaqueRightNo: "394", PlaqueSerial: "66", }, ], damagedIdentity, ), ).toBeNull(); }); it("picks the newest matching version of the damaged VIN and plate", () => { expect( selectFanavaranVehicleForDamageCase( [ { Id: 10, VIN: "IRPC941V2BD798656", ChassisNo: "NAS431100E5798656", VersionNo: 1, PlaqueKindId: 15, PlaqueSampleId: 24, PlaqueLeftNo: "59", PlaqueMiddleCodeId: 16, PlaqueRightNo: "419", PlaqueSerial: "78", }, { Id: 10, VIN: "IRPC941V2BD798656", ChassisNo: "NAS431100E5798656", VersionNo: 3, PlaqueKindId: 8, PlaqueSampleId: 10, PlaqueLeftNo: "59", PlaqueMiddleCodeId: 16, PlaqueRightNo: "419", PlaqueSerial: "78", }, ], damagedIdentity, )?.PlaqueKindId, ).toBe(8); }); it("rejects cached payload ids from a different VIN, plate, or CI number", () => { expect( fanavaranPayloadMatchesDamagedIdentity( { VIN: "IRFC891V7D2301065", ChassisNo: "NAAP41FD5BJ301065", PolicyCINumber: "16018466143", PlaqueKindId: 8, PlaqueLeftNo: "56", PlaqueMiddleCodeId: 5, PlaqueRightNo: "394", PlaqueSerial: "66", }, damagedIdentity, ), ).toBe(false); expect(canReuseCachedFanavaranVehicleIds("config-default")).toBe(false); expect(canReuseCachedFanavaranVehicleIds("vehicle-inquiry")).toBe(true); expect(canReuseCachedFanavaranVehicleIds(undefined)).toBe(false); }); it("accepts cache only when VIN, plate, and CI number all agree", () => { expect( fanavaranPayloadMatchesDamagedIdentity( { VIN: "IRPC941V2BD798656", ChassisNo: "NAS431100E5798656", PolicyCINumber: "16040446424", PlaqueLeftNo: "59", PlaqueMiddleCodeId: 16, PlaqueRightNo: "419", PlaqueSerial: "78", PlaqueKindId: 8, }, damagedIdentity, ), ).toBe(true); }); it("uses national plaque 8/10 when the damaged VIN is unknown to Fanavaran", () => { expect(resolveDamageCasePlaqueLookupIds(null)).toEqual({ kindId: 8, sampleId: 10, source: "national-plate-default", }); }); it("keeps live PlaqueKindId 8 when Swagger body still has stale 15", () => { expect( applyFanavaranManualPayloadOverrides( { PlaqueKindId: 8, PlaqueSampleId: 10, VehicleKindId: 6704, AccidentVehicleUsedId: 1, Desc: "سپر جلو", }, { PlaqueKindId: 15, PlaqueSampleId: 24, Desc: "سپر جلو (edited)", }, ["Desc", "EstimateAmount", "LicenceNo"], ), ).toEqual({ PlaqueKindId: 8, PlaqueSampleId: 10, VehicleKindId: 6704, AccidentVehicleUsedId: 1, Desc: "سپر جلو (edited)", }); }); });