forked from Yara724/api
fanavaran driver and owner id (GEN..44 defauts) - culprit type id dynamic
This commit is contained in:
@@ -10,6 +10,9 @@ export type FanavaranPartyInquiryRow = {
|
||||
NationalCode?: unknown;
|
||||
Name?: unknown;
|
||||
LastName?: unknown;
|
||||
FatherName?: unknown;
|
||||
GenderId?: unknown;
|
||||
IdentityNo?: unknown;
|
||||
};
|
||||
|
||||
function asPositiveId(value: unknown): number | null {
|
||||
@@ -34,9 +37,25 @@ export function asPartyInquiryRows(value: unknown): FanavaranPartyInquiryRow[] {
|
||||
return [];
|
||||
}
|
||||
|
||||
/** GEN.12 DriverId is only accepted for بیمهگذار (161) or سایر (166). */
|
||||
export const FANAVARAN_DRIVER_ACCEPTED_ROLE_IDS = [
|
||||
FANAVARAN_INSURER_ROLE_ID,
|
||||
FANAVARAN_DRIVER_ROLE_ID,
|
||||
] as const;
|
||||
|
||||
export function isAcceptableFanavaranDriverRole(
|
||||
roleId: unknown,
|
||||
): boolean {
|
||||
const id = asPositiveId(roleId);
|
||||
return (
|
||||
id === FANAVARAN_INSURER_ROLE_ID || id === FANAVARAN_DRIVER_ROLE_ID
|
||||
);
|
||||
}
|
||||
|
||||
function selectFanavaranIdByRoles(
|
||||
rows: unknown,
|
||||
preferredRoles: number[],
|
||||
options?: { allowFallbackToFirst?: boolean },
|
||||
): number | null {
|
||||
const parties = asPartyInquiryRows(rows);
|
||||
if (parties.length === 0) return null;
|
||||
@@ -46,38 +65,38 @@ function selectFanavaranIdByRoles(
|
||||
if (match) return asPositiveId(match.Id);
|
||||
}
|
||||
|
||||
if (options?.allowFallbackToFirst === false) return null;
|
||||
return asPositiveId(parties[0].Id);
|
||||
}
|
||||
|
||||
/**
|
||||
* DriverId for GEN.12 زیاندیده. Prefer insurer (161) or driver (166)
|
||||
* based on driverIsInsurer, then any returned party id.
|
||||
* DriverId for GEN.12 زیاندیده.
|
||||
* Only RoleId 161 (بیمهگذار) or 166 (سایر) are accepted by Fanavaran.
|
||||
* Other roles (e.g. 162 بیمهشده) must go through GEN.44 other-people first
|
||||
* (GEN.44 adds a RoleId-166 entry; it does not replace existing role rows).
|
||||
*/
|
||||
export function selectFanavaranDriverId(
|
||||
rows: unknown,
|
||||
driverIsInsurer: boolean | undefined,
|
||||
): number | null {
|
||||
const preferredRoles = driverIsInsurer
|
||||
? [
|
||||
FANAVARAN_INSURER_ROLE_ID,
|
||||
FANAVARAN_DRIVER_ROLE_ID,
|
||||
FANAVARAN_PLAQUE_OWNER_ROLE_ID,
|
||||
]
|
||||
: [
|
||||
FANAVARAN_DRIVER_ROLE_ID,
|
||||
FANAVARAN_INSURER_ROLE_ID,
|
||||
FANAVARAN_PLAQUE_OWNER_ROLE_ID,
|
||||
];
|
||||
return selectFanavaranIdByRoles(rows, preferredRoles);
|
||||
? [FANAVARAN_INSURER_ROLE_ID, FANAVARAN_DRIVER_ROLE_ID]
|
||||
: [FANAVARAN_DRIVER_ROLE_ID, FANAVARAN_INSURER_ROLE_ID];
|
||||
return selectFanavaranIdByRoles(rows, preferredRoles, {
|
||||
allowFallbackToFirst: false,
|
||||
});
|
||||
}
|
||||
|
||||
/** OwnerId: prefer plaque-owner role (163), then insurer / driver. */
|
||||
/**
|
||||
* OwnerId for GEN.12: same accepted roles as DriverId (161 / 166 only).
|
||||
* Prefer بیمهگذار then سایر. RoleId 162/163/… → null → GEN.44 on submit.
|
||||
*/
|
||||
export function selectFanavaranOwnerId(rows: unknown): number | null {
|
||||
return selectFanavaranIdByRoles(rows, [
|
||||
FANAVARAN_PLAQUE_OWNER_ROLE_ID,
|
||||
FANAVARAN_INSURER_ROLE_ID,
|
||||
FANAVARAN_DRIVER_ROLE_ID,
|
||||
]);
|
||||
return selectFanavaranIdByRoles(
|
||||
rows,
|
||||
[FANAVARAN_INSURER_ROLE_ID, FANAVARAN_DRIVER_ROLE_ID],
|
||||
{ allowFallbackToFirst: false },
|
||||
);
|
||||
}
|
||||
|
||||
export function normalizeNationalCode(value: unknown): string | null {
|
||||
|
||||
Reference in New Issue
Block a user