updated the fucking mf fanavaran

This commit is contained in:
2026-09-07 16:33:15 +03:30
parent 395e3dbe63
commit b9bffdccc1
5 changed files with 423 additions and 114 deletions

View File

@@ -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 = {