Files
yara724api/src/fanavaran/fanavaran-lookup.config.ts
s.hajizadeh fc1c117b93 Map Fanavaran people and licences by party role; allow unlisted base-info lookups.
Resolve driver, owner, and policyholder from participants when they differ, prefer real licence / driverLicenseDate over dummies, and fall back unknown /lookups/fanavaran/{name} to car/base-info/{name} (including vehicle-groups).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-26 16:57:30 +03:30

223 lines
6.6 KiB
TypeScript

import type { FanavaranClientKey } from "src/core/config/fanavaran-client.config";
export const FANAVARAN_LOOKUP_BASE_URL =
"https://apimanager.iraneit.com/BimeApiManager/api/BimeApi/v2.0";
export interface FanavaranRemoteLookupDefinition {
name: string;
url: string;
cacheFile: string;
}
/** Fanavaran API lookups synced per client (Parsian fetches on first call). */
export const FANAVARAN_REMOTE_LOOKUPS: FanavaranRemoteLookupDefinition[] = [
{
name: "accident-causes",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/base-info/accident-causes`,
cacheFile: "accident-causes.json",
},
{
name: "vehicle-hull-accident-types",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/base-info/vehicle-hull-accident-types`,
cacheFile: "vehicle-hull-accident-types.json",
},
{
name: "vehicle-hull-accident-culprit-type",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/code-list/vehicle-hull-accident-culprit-type`,
cacheFile: "vehicle-hull-accident-culprit-type.json",
},
{
name: "detection-accident-culprits",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/base-info/detection-accident-culprits`,
cacheFile: "detection-accident-culprits.json",
},
{
name: "vehicle-hull-dmg-kind",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/code-list/vehicle-hull-dmg-kind`,
cacheFile: "vehicle-hull-dmg-kind.json",
},
{
name: "vehicle-hull-dmg-cost-kinds",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/base-info/vehicle-hull-dmg-cost-kinds`,
cacheFile: "vehicle-hull-dmg-cost-kinds.json",
},
{
name: "accident-report-type",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/code-list/accident-report-type`,
cacheFile: "accident-report-type.json",
},
{
name: "vehicle-use-types",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/base-info/vehicle-use-types`,
cacheFile: "vehicle-use-types.json",
},
{
name: "dmg-pay-method",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/code-list/dmg-pay-method`,
cacheFile: "dmg-pay-method.json",
},
{
name: "driving-licence-types",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/base-info/driving-licence-types`,
cacheFile: "driving-licence-types.json",
},
{
name: "accident-culprit-type",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/code-list/accident-culprit-type`,
cacheFile: "accident-culprit-type.json",
},
{
name: "inspection-place",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/code-list/inspection-place`,
cacheFile: "inspection-place.json",
},
{
name: "drop-amount-status",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/code-list/drop-amount-status`,
cacheFile: "drop-amount-status.json",
},
{
name: "car-components",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/base-info/car-components`,
cacheFile: "car-components.json",
},
{
name: "accident-level",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/code-list/accident-level`,
cacheFile: "accident-level.json",
},
{
name: "expert-status",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/code-list/expert-status`,
cacheFile: "expert-status.json",
},
{
name: "vehicle-kinds",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/base-info/vehicle-kinds`,
cacheFile: "vehicle-kinds.json",
},
{
name: "person-role",
url: `${FANAVARAN_LOOKUP_BASE_URL}/common/code-list/person-role`,
cacheFile: "person-role.json",
},
{
name: "insurance-corp",
url: `${FANAVARAN_LOOKUP_BASE_URL}/common/code-list/insurance-corp`,
cacheFile: "insurance-corp.json",
},
{
name: "file-types",
url: `${FANAVARAN_LOOKUP_BASE_URL}/common/base-info/file-types`,
cacheFile: "file-types.json",
},
// NEW LOOKUPS ADDED
{
name: "cities",
url: `${FANAVARAN_LOOKUP_BASE_URL}/common/base-info/cities`,
cacheFile: "cities.json",
},
{
name: "dmg-case-type",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/code-list/dmg-case-type`,
cacheFile: "dmg-case-type.json",
},
{
name: "dmg-history-status",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/code-list/dmg-case-history-status`,
cacheFile: "dmg-history-status.json",
},
{
name: "provinces",
url: `${FANAVARAN_LOOKUP_BASE_URL}/common/base-info/Provinces`,
cacheFile: "provinces.json",
},
{
name: "used-place",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/code-list/used-place`,
cacheFile: "used-place.json",
},
{
name: "dmg-business-line",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/code-list/dmg-business-line`,
cacheFile: "dmg-business-line.json",
},
{
name: "gender",
url: `${FANAVARAN_LOOKUP_BASE_URL}/common/code-list/gender`,
cacheFile: "gender.json",
},
{
name: "marital-status",
url: `${FANAVARAN_LOOKUP_BASE_URL}/common/code-list/marital-status`,
cacheFile: "marital-status.json",
},
{
name: "ans",
url: `${FANAVARAN_LOOKUP_BASE_URL}/common/code-list/ans`,
cacheFile: "ans.json",
},
{
name: "countries",
url: `${FANAVARAN_LOOKUP_BASE_URL}/common/base-info/countries`,
cacheFile: "countries.json",
},
{
name: "person-kind",
url: `${FANAVARAN_LOOKUP_BASE_URL}/common/code-list/person-kind`,
cacheFile: "person-kind.json",
},
{
name: "cii-validation-status",
url: `${FANAVARAN_LOOKUP_BASE_URL}/common/code-list/cii-validation-status`,
cacheFile: "cii-validation-status.json",
},
{
name: "vehicle-groups",
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/base-info/vehicle-groups`,
cacheFile: "vehicle-groups.json",
},
];
/** Safe Fanavaran lookup slug: lowercase segments separated by hyphens. */
const FANAVARAN_LOOKUP_NAME_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
/**
* Resolve a remote lookup definition.
* Known names use the catalogue; unknown slugs fall back to
* `car/base-info/{lookupName}` so `/lookups/fanavaran/{name}` works without
* a dedicated route or config entry (e.g. vehicle-groups).
*/
export function resolveFanavaranRemoteLookup(
name: string,
): FanavaranRemoteLookupDefinition | null {
const configured = FANAVARAN_REMOTE_LOOKUPS.find((item) => item.name === name);
if (configured) {
return configured;
}
if (!FANAVARAN_LOOKUP_NAME_PATTERN.test(name)) {
return null;
}
return {
name,
url: `${FANAVARAN_LOOKUP_BASE_URL}/car/base-info/${name}`,
cacheFile: `${name}.json`,
};
}
export const TEJARAT_STATIC_ACCIDENT_FILES = {
accidentReason: "ACCIDENT_REASON.json",
accidentWay: "ACCIDENT_WAY.json",
accidentType: "ACCIDENT_TYPE.json",
} as const;
export function fanavaranLookupCacheDir(clientKey: FanavaranClientKey): string {
return `${process.cwd()}/files/fanavaran-lookups/${clientKey}`;
}
export function tejaratStaticAccidentFilePath(fileName: string): string {
return `${process.cwd()}/src/static/${fileName}`;
}