forked from Yara724/api
Fixed mismatched userId on field expert for claim
This commit is contained in:
@@ -2,6 +2,7 @@ import { Types } from "mongoose";
|
||||
import { partyPersonMatchesUser } from "./iran-mobile";
|
||||
import {
|
||||
blameDamagedPartyMatchesUser,
|
||||
resolveClaimOwnerFieldsFromBlame,
|
||||
resolveDamagedPartyPerson,
|
||||
resolveGuiltyPartyUserId,
|
||||
} from "./blame-damaged-party";
|
||||
@@ -46,13 +47,30 @@ describe("blame damaged party helpers", () => {
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it("matches damaged party by phone when userId differs (duplicate accounts)", () => {
|
||||
expect(
|
||||
partyPersonMatchesUser(
|
||||
{ userId: damagedId, phoneNumber: "9123456789" },
|
||||
{ sub: "other-user-id", username: "09123456789" },
|
||||
[],
|
||||
),
|
||||
).toBe(true);
|
||||
it("resolveClaimOwnerFieldsFromBlame uses damaged userId and guilty clientId", () => {
|
||||
const guiltyClientId = new Types.ObjectId();
|
||||
const blame = {
|
||||
type: "THIRD_PARTY",
|
||||
expert: { decision: { guiltyPartyId: guiltyId } },
|
||||
parties: [
|
||||
{
|
||||
role: "FIRST",
|
||||
person: {
|
||||
userId: guiltyId,
|
||||
phoneNumber: "09111111111",
|
||||
clientId: guiltyClientId,
|
||||
},
|
||||
},
|
||||
{
|
||||
role: "SECOND",
|
||||
person: { userId: damagedId, phoneNumber: "09912356917" },
|
||||
},
|
||||
],
|
||||
};
|
||||
expect(resolveClaimOwnerFieldsFromBlame(blame)).toEqual({
|
||||
userId: String(damagedId),
|
||||
userRole: "SECOND",
|
||||
clientId: String(guiltyClientId),
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -119,3 +119,45 @@ export function resolveDamagedPartyUserId(
|
||||
const person = resolveDamagedPartyPerson(blame);
|
||||
return person?.userId != null ? String(person.userId) : null;
|
||||
}
|
||||
|
||||
/** Guilty party row on the blame case (payer's insurer is on `person.clientId`). */
|
||||
export function resolveGuiltyPartyPerson(
|
||||
blame: Parameters<typeof resolveClaimOwnerParty>[0],
|
||||
): { userId?: unknown; phoneNumber?: string; clientId?: unknown } | null {
|
||||
const party = resolveClaimOwnerParty(blame);
|
||||
return party?.person ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Claim `owner` fields for initiator-filled IN_PERSON claims (field expert / registrar).
|
||||
* - `userId` = damaged party (SMS, user sign-off, claim beneficiary)
|
||||
* - `clientId` = guilty party's insurer (damage-expert tenant queue)
|
||||
*/
|
||||
export function resolveClaimOwnerFieldsFromBlame(
|
||||
blame: Parameters<typeof resolveDamagedPartyPerson>[0],
|
||||
): {
|
||||
userId: string;
|
||||
userRole?: string;
|
||||
clientId?: string;
|
||||
} | null {
|
||||
const damagedPerson = resolveDamagedPartyPerson(blame);
|
||||
if (damagedPerson?.userId == null) return null;
|
||||
|
||||
const parties = blame?.parties ?? [];
|
||||
const damagedUserId = String(damagedPerson.userId);
|
||||
const damagedPartyRow = parties.find(
|
||||
(p) =>
|
||||
p.person?.userId != null &&
|
||||
String(p.person.userId) === damagedUserId,
|
||||
);
|
||||
|
||||
const guiltyPerson = resolveGuiltyPartyPerson(blame);
|
||||
const payingClientId =
|
||||
guiltyPerson?.clientId != null ? String(guiltyPerson.clientId) : undefined;
|
||||
|
||||
return {
|
||||
userId: damagedUserId,
|
||||
userRole: damagedPartyRow?.role,
|
||||
...(payingClientId ? { clientId: payingClientId } : {}),
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user