Merge pull request 'Fixed car body inquiry' (#294) from s.yahyaee/yara724-api:main into main

Reviewed-on: Yara724/api#294
This commit is contained in:
2026-09-07 13:09:13 +03:30
2 changed files with 53 additions and 0 deletions

View File

@@ -135,6 +135,45 @@ describe("LookupsService.findLastProcessedCarPolicy", () => {
expect(lookup.inquiryByVin).not.toHaveBeenCalled(); expect(lookup.inquiryByVin).not.toHaveBeenCalled();
}); });
it("rejects an expired car-body policy instead of treating it as active coverage", async () => {
const lookup = {
myPolicies: jest.fn().mockResolvedValue([
{
PolicyId: 44,
InsuranceLineId: 4,
BeginDate: "1400/01/01",
EndDate: "1401/01/01",
},
]),
inquiryByVin: jest.fn(),
bodyPolicyById: jest.fn().mockResolvedValue({
PolicyId: 44,
VehicleId: 8,
BeginDate: "1400/01/01",
EndDate: "1401/01/01",
}),
vehicleById: jest.fn().mockResolvedValue({
Id: 8,
PlaqueLeftNo: "12",
PlaqueMiddleCodeId: 2,
PlaqueRightNo: "345",
PlaqueSerial: "67",
}),
getRemoteLookup: jest.fn().mockResolvedValue([]),
customerById: jest.fn().mockResolvedValue(null),
};
await expect(
createService(lookup).findLastProcessedCarPolicy("car-body", {
nationalCode: "0012345678",
plaqueLeft: "12",
plaqueLetter: "ب",
plaqueRight: "345",
plaqueSerial: "67",
}),
).rejects.toBeInstanceOf(NotFoundException);
});
it("accepts the policy when VIN inquiry VehicleId matches and GEN.15 VIN is empty", async () => { it("accepts the policy when VIN inquiry VehicleId matches and GEN.15 VIN is empty", async () => {
const lookup = { const lookup = {
myPolicies: jest.fn().mockResolvedValue([ myPolicies: jest.fn().mockResolvedValue([

View File

@@ -20,6 +20,7 @@ import {
filterPoliciesByLine, filterPoliciesByLine,
insuranceLineIdForProduct, insuranceLineIdForProduct,
insuranceLineLabel, insuranceLineLabel,
isPolicyActiveOn,
parseFanavaranId, parseFanavaranId,
parseLastCarPolicyInput, parseLastCarPolicyInput,
pickVehicleId, pickVehicleId,
@@ -30,6 +31,7 @@ import {
type FanavaranCarPolicyProduct, type FanavaranCarPolicyProduct,
type HydratedFanavaranCarPolicy, type HydratedFanavaranCarPolicy,
} from "./fanavaran-last-car-policy"; } from "./fanavaran-last-car-policy";
import { gregorianDateInIran } from "src/helpers/iran-datetime";
type TejaratAccidentReasonRow = { type TejaratAccidentReasonRow = {
id: number; id: number;
@@ -357,6 +359,18 @@ export class LookupsService {
); );
} }
// A CAR_BODY case is payable only with current hull coverage. The generic
// selector may intentionally return the latest expired policy for history;
// that fallback is not valid for a new CAR_BODY case.
if (
product === "car-body" &&
!isPolicyActiveOn(selected, gregorianDateInIran(new Date()))
) {
throw new NotFoundException(
"No active Fanavaran car-body policy was found for this car.",
);
}
return { return {
product, product,
insuranceLine: insuranceLineLabel(insuranceLineId), insuranceLine: insuranceLineLabel(insuranceLineId),