Merge pull request 'fixed default values' (#300) from s.hajizadeh/yara724api:main into main

Reviewed-on: Yara724/api#300
This commit is contained in:
2026-09-07 17:16:16 +03:30
3 changed files with 46 additions and 7 deletions

View File

@@ -207,6 +207,7 @@ import {
import { import {
asObjectRecord, asObjectRecord,
collectPartyVinCandidates, collectPartyVinCandidates,
fanavaranIdOrConfigDefault,
normalizeVin, normalizeVin,
parseFanavaranId, parseFanavaranId,
pickFanavaranPlaqueLookupFields, pickFanavaranPlaqueLookupFields,
@@ -4254,26 +4255,34 @@ export class ClaimRequestManagementService {
const inquiryPlaque = pickFanavaranPlaqueLookupFields( const inquiryPlaque = pickFanavaranPlaqueLookupFields(
asObjectRecord(inquiryMapped) ?? asObjectRecord(inquiryRaw), asObjectRecord(inquiryMapped) ?? asObjectRecord(inquiryRaw),
); );
const plaqueKindId = this.firstPositiveFanavaranId( const plaqueKindFromApi = this.firstPositiveFanavaranId(
apiPlaque.kindId, apiPlaque.kindId,
inquiryPlaque.kindId, inquiryPlaque.kindId,
cachedDamage.plaqueKindId, cachedDamage.plaqueKindId,
lastDamagePayload?.PlaqueKindId, lastDamagePayload?.PlaqueKindId,
); );
const plaqueSampleId = this.firstPositiveFanavaranId( const plaqueSampleFromApi = this.firstPositiveFanavaranId(
apiPlaque.sampleId, apiPlaque.sampleId,
inquiryPlaque.sampleId, inquiryPlaque.sampleId,
cachedDamage.plaqueSampleId, cachedDamage.plaqueSampleId,
lastDamagePayload?.PlaqueSampleId, lastDamagePayload?.PlaqueSampleId,
); );
if (apiPlaque.kindId == null && plaqueKindId != null) { const plaqueKindId = fanavaranIdOrConfigDefault(
plaqueKindFromApi,
input.defaults.PlaqueKindId,
);
const plaqueSampleId = fanavaranIdOrConfigDefault(
plaqueSampleFromApi,
input.defaults.PlaqueSampleId,
);
if (plaqueKindFromApi == null) {
this.logger.log( this.logger.log(
`[buildFanavaranDamageCasePayload] PlaqueKindId API miss; using DB value ${plaqueKindId}`, `[buildFanavaranDamageCasePayload] PlaqueKindId API miss; using config default ${plaqueKindId}`,
); );
} }
if (apiPlaque.sampleId == null && plaqueSampleId != null) { if (plaqueSampleFromApi == null) {
this.logger.log( this.logger.log(
`[buildFanavaranDamageCasePayload] PlaqueSampleId API miss; using DB value ${plaqueSampleId}`, `[buildFanavaranDamageCasePayload] PlaqueSampleId API miss; using config default ${plaqueSampleId}`,
); );
} }
const builtYear = const builtYear =
@@ -4385,6 +4394,12 @@ export class ClaimRequestManagementService {
null, null,
); );
} }
if (accidentVehicleUsedId == null) {
accidentVehicleUsedId = input.defaults.AccidentVehicleUsedId;
this.logger.log(
`[buildFanavaranDamageCasePayload] AccidentVehicleUsedId API miss; using config default ${accidentVehicleUsedId}`,
);
}
this.logger.log( this.logger.log(
`[buildFanavaranDamageCasePayload] Final DriverId=${driverFanavaranId ?? "NULL"} for nationalCode=${pickPersonNationalCode(person) ?? "MISSING"}, ` + `[buildFanavaranDamageCasePayload] Final DriverId=${driverFanavaranId ?? "NULL"} for nationalCode=${pickPersonNationalCode(person) ?? "MISSING"}, ` +
@@ -5187,7 +5202,8 @@ export class ClaimRequestManagementService {
persistPayload?: boolean; persistPayload?: boolean;
/** /**
* Re-run VIN inquiry / vehicle GET for AccidentVehicleUsedId. * Re-run VIN inquiry / vehicle GET for AccidentVehicleUsedId.
* Submit always sets this so Mongo tenant default 1 cannot be reused. * Submit always re-inquires. If the API still returns nothing, the
* tenant config default is used.
*/ */
forceRefreshUsedId?: boolean; forceRefreshUsedId?: boolean;
}, },
@@ -5402,6 +5418,14 @@ export class ClaimRequestManagementService {
} }
} }
if (parseFanavaranId(payload.AccidentVehicleUsedId) == null) {
payload.AccidentVehicleUsedId =
profile.defaults.AccidentVehicleUsedId;
this.logger.log(
`${logPrefix} AccidentVehicleUsedId API miss; using config default ${payload.AccidentVehicleUsedId}`,
);
}
if (persistPayload) { if (persistPayload) {
await this.claimCaseDbService.findByIdAndUpdate(claimCaseId, { await this.claimCaseDbService.findByIdAndUpdate(claimCaseId, {
$set: { $set: {

View File

@@ -1,5 +1,6 @@
import { import {
collectPartyVinCandidates, collectPartyVinCandidates,
fanavaranIdOrConfigDefault,
filterPoliciesByLine, filterPoliciesByLine,
insuranceLineLabel, insuranceLineLabel,
parseLastCarPolicyInput, parseLastCarPolicyInput,
@@ -172,6 +173,12 @@ describe("fanavaran last car policy", () => {
}); });
}); });
it("uses tenant config default when the API id is missing", () => {
expect(fanavaranIdOrConfigDefault(15, 8)).toBe(15);
expect(fanavaranIdOrConfigDefault(null, 8)).toBe(8);
expect(fanavaranIdOrConfigDefault(0, 10)).toBe(10);
});
it("matches VIN against ChassisNo when VIN is empty", () => { it("matches VIN against ChassisNo when VIN is empty", () => {
expect( expect(
vehicleMatchesCar( vehicleMatchesCar(

View File

@@ -162,6 +162,14 @@ export function parseFanavaranId(value: unknown): number | null {
return Number.isFinite(id) && id > 0 ? id : null; return Number.isFinite(id) && id > 0 ? id : null;
} }
/** Live Fanavaran / cache id wins; tenant `fanavaranClientConfigs.defaults` if the API returned nothing. */
export function fanavaranIdOrConfigDefault(
resolved: unknown,
configDefault: number,
): number {
return parseFanavaranId(resolved) ?? configDefault;
}
export function asObjectRecord(value: unknown): Record<string, unknown> | null { export function asObjectRecord(value: unknown): Record<string, unknown> | null {
if (!value || typeof value !== "object") { if (!value || typeof value !== "object") {
return null; return null;