forked from Yara724/api
fanavaran stages matching data is double checked and more controlled +
This commit is contained in:
227
src/claim-request-management/fanavaran-claim-product.ts
Normal file
227
src/claim-request-management/fanavaran-claim-product.ts
Normal file
@@ -0,0 +1,227 @@
|
||||
import { BlameRequestType } from "src/Types&Enums/blame-request-management/blameRequestType.enum";
|
||||
import { PartyRole } from "src/request-management/entities/schema/partyRole.enum";
|
||||
import {
|
||||
FANAVARAN_CAR_BODY_LINE_ID,
|
||||
FANAVARAN_THIRD_PARTY_LINE_ID,
|
||||
asObjectRecord,
|
||||
parseFanavaranId,
|
||||
type FanavaranCarPolicyProduct,
|
||||
} from "src/lookups/fanavaran-last-car-policy";
|
||||
|
||||
export type FanavaranClaimProduct = FanavaranCarPolicyProduct;
|
||||
|
||||
const FANAVARAN_CLAIMS_HOST =
|
||||
"https://apimanager.iraneit.com/BimeApiManager/api/BimeApi/v2.0/car";
|
||||
|
||||
export function fanavaranClaimProductFromBlameType(
|
||||
type?: string | null,
|
||||
): FanavaranClaimProduct {
|
||||
return type === BlameRequestType.CAR_BODY || type === "CAR_BODY"
|
||||
? "car-body"
|
||||
: "third-party";
|
||||
}
|
||||
|
||||
export function isFanavaranSubmitSupportedBlameType(
|
||||
type?: string | null,
|
||||
): boolean {
|
||||
return (
|
||||
type === BlameRequestType.THIRD_PARTY ||
|
||||
type === "THIRD_PARTY" ||
|
||||
type === BlameRequestType.CAR_BODY ||
|
||||
type === "CAR_BODY"
|
||||
);
|
||||
}
|
||||
|
||||
export function fanavaranClaimsResourcePath(
|
||||
product: FanavaranClaimProduct,
|
||||
): string {
|
||||
return product === "car-body"
|
||||
? "vehicle-hull-claims"
|
||||
: "third-party-car-financial-claims";
|
||||
}
|
||||
|
||||
export function fanavaranClaimsBaseUrl(
|
||||
product: FanavaranClaimProduct,
|
||||
): string {
|
||||
return `${FANAVARAN_CLAIMS_HOST}/${fanavaranClaimsResourcePath(product)}`;
|
||||
}
|
||||
|
||||
export function fanavaranInsuranceLineIdForProduct(
|
||||
product: FanavaranClaimProduct,
|
||||
): number {
|
||||
return product === "car-body"
|
||||
? FANAVARAN_CAR_BODY_LINE_ID
|
||||
: FANAVARAN_THIRD_PARTY_LINE_ID;
|
||||
}
|
||||
|
||||
type BlamePartyForCarBodyPolicy = {
|
||||
role?: string;
|
||||
person?: { nationalCodeOfInsurer?: unknown };
|
||||
insurance?: {
|
||||
carBodyInsurance?: {
|
||||
policyId?: unknown;
|
||||
ownerNationalCode?: unknown;
|
||||
insurerNationalCode?: unknown;
|
||||
policyNumber?: unknown;
|
||||
chassisNumber?: unknown;
|
||||
motorNumber?: unknown;
|
||||
vin?: unknown;
|
||||
startDate?: unknown;
|
||||
endDate?: unknown;
|
||||
};
|
||||
};
|
||||
vehicle?: {
|
||||
inquiry?: {
|
||||
mapped?: Record<string, unknown>;
|
||||
raw?: Record<string, unknown> | { data?: Record<string, unknown> };
|
||||
carBody?: {
|
||||
mapped?: Record<string, unknown>;
|
||||
raw?: Record<string, unknown> & {
|
||||
policyId?: unknown;
|
||||
policy?: Record<string, unknown>;
|
||||
vehicle?: Record<string, unknown>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
function firstCarBodyParty(
|
||||
blame?: { parties?: BlamePartyForCarBodyPolicy[] } | null,
|
||||
): BlamePartyForCarBodyPolicy | null {
|
||||
const parties = blame?.parties ?? [];
|
||||
return (
|
||||
parties.find((party) => party?.role === PartyRole.FIRST) ??
|
||||
parties[0] ??
|
||||
null
|
||||
);
|
||||
}
|
||||
|
||||
function nonEmptyText(value: unknown): string | null {
|
||||
if (value == null) return null;
|
||||
const text = String(value).trim();
|
||||
return text ? text : null;
|
||||
}
|
||||
|
||||
export function pickStoredCarBodyPolicyId(
|
||||
blame?: { parties?: BlamePartyForCarBodyPolicy[] } | null,
|
||||
): number | null {
|
||||
const party = firstCarBodyParty(blame);
|
||||
const carBody = party?.vehicle?.inquiry?.carBody;
|
||||
const raw = asObjectRecord(carBody?.raw) ?? {};
|
||||
const mapped = asObjectRecord(carBody?.mapped) ?? {};
|
||||
const rawPolicy = asObjectRecord(raw.policy);
|
||||
return parseFanavaranId(
|
||||
party?.insurance?.carBodyInsurance?.policyId ??
|
||||
mapped.policyId ??
|
||||
raw.policyId ??
|
||||
rawPolicy?.PolicyId,
|
||||
);
|
||||
}
|
||||
|
||||
export function pickCarBodyPolicyNationalCode(
|
||||
blame?: { parties?: BlamePartyForCarBodyPolicy[] } | null,
|
||||
): string | null {
|
||||
const party = firstCarBodyParty(blame);
|
||||
return (
|
||||
nonEmptyText(party?.person?.nationalCodeOfInsurer) ??
|
||||
nonEmptyText(party?.insurance?.carBodyInsurance?.ownerNationalCode) ??
|
||||
nonEmptyText(party?.insurance?.carBodyInsurance?.insurerNationalCode)
|
||||
);
|
||||
}
|
||||
|
||||
export function fanavaranPartyInquirySources(
|
||||
product: FanavaranClaimProduct,
|
||||
party?: BlamePartyForCarBodyPolicy | null,
|
||||
): {
|
||||
mapped: Record<string, any>;
|
||||
raw: Record<string, any>;
|
||||
} {
|
||||
const inquiry = party?.vehicle?.inquiry ?? {};
|
||||
if (product !== "car-body") {
|
||||
const mapped = asObjectRecord(inquiry.mapped) ?? {};
|
||||
const rawValue = inquiry.raw as
|
||||
| Record<string, unknown>
|
||||
| { data?: Record<string, unknown> }
|
||||
| undefined;
|
||||
const raw =
|
||||
asObjectRecord(
|
||||
rawValue &&
|
||||
typeof rawValue === "object" &&
|
||||
"data" in rawValue &&
|
||||
rawValue.data != null &&
|
||||
typeof rawValue.data === "object" &&
|
||||
!Array.isArray(rawValue.data)
|
||||
? rawValue.data
|
||||
: rawValue,
|
||||
) ?? {};
|
||||
return { mapped, raw };
|
||||
}
|
||||
|
||||
const carBody = inquiry.carBody ?? {};
|
||||
const mapped = asObjectRecord(carBody.mapped) ?? {};
|
||||
const raw = asObjectRecord(carBody.raw) ?? {};
|
||||
const policy = asObjectRecord(raw.policy) ?? {};
|
||||
const vehicle = asObjectRecord(raw.vehicle) ?? {};
|
||||
const insurance = party?.insurance?.carBodyInsurance ?? {};
|
||||
|
||||
const policyNumber =
|
||||
mapped.policyNumber ??
|
||||
insurance.policyNumber ??
|
||||
policy.CINumber ??
|
||||
policy.PolicyNo;
|
||||
const chassisNumber =
|
||||
mapped.chassisNumber ?? insurance.chassisNumber ?? vehicle.ChassisNo;
|
||||
const motorNumber =
|
||||
mapped.motorNumber ?? insurance.motorNumber ?? vehicle.MotorNo;
|
||||
const vin = mapped.vin ?? insurance.vin ?? vehicle.VIN ?? vehicle.ChassisNo;
|
||||
const beginDate =
|
||||
mapped.StartDate ?? mapped.startDate ?? insurance.startDate ?? policy.BeginDate;
|
||||
const endDate =
|
||||
mapped.EndDate ?? mapped.endDate ?? insurance.endDate ?? policy.EndDate;
|
||||
const builtYear = mapped.builtYear ?? vehicle.BuiltYear;
|
||||
const plaque = asObjectRecord(vehicle.plaque) ?? {};
|
||||
const plk1 =
|
||||
mapped.platePartOne ?? plaque.leftTwoDigits ?? vehicle.PlaqueLeftNo;
|
||||
const plk2 =
|
||||
mapped.plateLetterTitle ?? plaque.serialLetter;
|
||||
const plk3 =
|
||||
mapped.platePartThree ?? plaque.threeDigits ?? vehicle.PlaqueRightNo;
|
||||
const plksrl =
|
||||
mapped.plateSerialNumber ??
|
||||
plaque.rightTwoDigits ??
|
||||
vehicle.PlaqueSerial;
|
||||
|
||||
return {
|
||||
mapped: {
|
||||
...mapped,
|
||||
...insurance,
|
||||
policyId:
|
||||
mapped.policyId ??
|
||||
insurance.policyId ??
|
||||
raw.policyId ??
|
||||
policy.PolicyId,
|
||||
PrntCmpDocNo: policyNumber,
|
||||
PlcyUnqCod: policy.PolicyUnqCod ?? mapped.policyNumber,
|
||||
ShsNum: chassisNumber,
|
||||
MtrNum: motorNumber,
|
||||
VIN: vin,
|
||||
HBgnDte: beginDate,
|
||||
HEndDte: endDate,
|
||||
PrdDte: builtYear,
|
||||
plk1,
|
||||
Plk1: plk1,
|
||||
plk2,
|
||||
Plk2: plk2,
|
||||
plk3,
|
||||
Plk3: plk3,
|
||||
plksrl,
|
||||
PlkSrl: plksrl,
|
||||
},
|
||||
raw: {
|
||||
...policy,
|
||||
...vehicle,
|
||||
...raw,
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user