forked from Yara724/api
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>
223 lines
6.6 KiB
TypeScript
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}`;
|
|
}
|