forked from Yara724/api
updated the fucking mf fanavaran
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import {
|
||||
collectPartyVinCandidates,
|
||||
filterPoliciesByLine,
|
||||
insuranceLineLabel,
|
||||
parseLastCarPolicyInput,
|
||||
@@ -114,6 +115,39 @@ describe("fanavaran last car policy", () => {
|
||||
).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({
|
||||
|
||||
@@ -243,6 +243,12 @@ export function pickFanavaranVehicleFromInquiry(
|
||||
const match = inquired.find((row) => pickVehicleId(row) === vehicleId);
|
||||
if (match) return asObjectRecord(match);
|
||||
}
|
||||
const withPlaqueKind = inquired.find(
|
||||
(row) =>
|
||||
parseFanavaranId(asObjectRecord(row)?.PlaqueKindId) != null ||
|
||||
parseFanavaranId(asObjectRecord(row)?.plaqueKindId) != null,
|
||||
);
|
||||
if (withPlaqueKind) return asObjectRecord(withPlaqueKind);
|
||||
return asObjectRecord(inquired[0]);
|
||||
}
|
||||
return asObjectRecord(inquired);
|
||||
@@ -251,15 +257,51 @@ export function pickFanavaranVehicleFromInquiry(
|
||||
export function pickVinFromPartyVehicle(party: {
|
||||
vehicle?: { vin?: unknown; inquiry?: unknown };
|
||||
} | null | undefined): string | null {
|
||||
const direct = normalizeVin(party?.vehicle?.vin);
|
||||
if (direct) return direct;
|
||||
return collectPartyVinCandidates(party)[0] ?? null;
|
||||
}
|
||||
|
||||
const inquiry = party?.vehicle?.inquiry;
|
||||
const nested = asObjectRecord(inquiry);
|
||||
const mapped = pickVehicleVin(asObjectRecord(nested?.mapped));
|
||||
if (mapped) return mapped;
|
||||
const raw = pickVehicleVin(asObjectRecord(nested?.raw ?? inquiry));
|
||||
return raw || null;
|
||||
/**
|
||||
* VIN first (mapped/raw VIN fields), then party.vehicle.vin, then chassis.
|
||||
* Damaged cars often store chassis on `vehicle.vin` which must not win over the real VIN.
|
||||
*/
|
||||
export function collectPartyVinCandidates(party: {
|
||||
vehicle?: { vin?: unknown; inquiry?: unknown };
|
||||
} | null | undefined): string[] {
|
||||
const inquiry = asObjectRecord(party?.vehicle?.inquiry);
|
||||
const mapped = asObjectRecord(inquiry?.mapped);
|
||||
const rawData = asObjectRecord(
|
||||
asObjectRecord(inquiry?.raw)?.data ?? inquiry?.raw ?? inquiry,
|
||||
);
|
||||
const values = [
|
||||
mapped?.VIN,
|
||||
mapped?.Vin,
|
||||
mapped?.vin,
|
||||
mapped?.VinNumberField,
|
||||
rawData?.VIN,
|
||||
rawData?.Vin,
|
||||
rawData?.vin,
|
||||
rawData?.VinNumberField,
|
||||
party?.vehicle?.vin,
|
||||
mapped?.ChassisNo,
|
||||
mapped?.chassisNo,
|
||||
mapped?.ShsNum,
|
||||
mapped?.shsNam,
|
||||
mapped?.ChassisNumberField,
|
||||
rawData?.ChassisNo,
|
||||
rawData?.chassisNo,
|
||||
rawData?.ShsNum,
|
||||
rawData?.shsNam,
|
||||
rawData?.ChassisNumberField,
|
||||
];
|
||||
const unique: string[] = [];
|
||||
const seen = new Set<string>();
|
||||
for (const value of values) {
|
||||
const vin = normalizeVin(value);
|
||||
if (!vin || seen.has(vin)) continue;
|
||||
seen.add(vin);
|
||||
unique.push(vin);
|
||||
}
|
||||
return unique;
|
||||
}
|
||||
|
||||
export type FanavaranPlaqueLookupFields = {
|
||||
|
||||
Reference in New Issue
Block a user