@blackcode_sa/metaestetics-api 1.15.5 → 1.15.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/index.d.mts +2 -0
- package/dist/admin/index.d.ts +2 -0
- package/dist/backoffice/index.d.mts +2 -0
- package/dist/backoffice/index.d.ts +2 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +42 -17
- package/dist/index.mjs +42 -17
- package/package.json +1 -1
- package/src/services/clinic/utils/clinic.utils.ts +1 -2
- package/src/services/clinic/utils/filter.utils.ts +4 -5
- package/src/services/clinic/utils/search.utils.ts +1 -2
- package/src/services/practitioner/practitioner.service.ts +43 -15
- package/src/services/procedure/procedure.service.ts +4 -5
- package/src/types/procedure/index.ts +2 -0
package/dist/admin/index.d.mts
CHANGED
package/dist/admin/index.d.ts
CHANGED
package/dist/index.d.mts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -13924,25 +13924,52 @@ var PractitionerService = class extends BaseService {
|
|
|
13924
13924
|
constraints.push((0, import_firestore36.where)("fullNameLower", ">=", searchTerm));
|
|
13925
13925
|
constraints.push((0, import_firestore36.where)("fullNameLower", "<=", searchTerm + "\uF8FF"));
|
|
13926
13926
|
constraints.push((0, import_firestore36.orderBy)("fullNameLower"));
|
|
13927
|
-
if (filters.
|
|
13928
|
-
if (
|
|
13929
|
-
|
|
13930
|
-
|
|
13931
|
-
|
|
13932
|
-
|
|
13933
|
-
|
|
13927
|
+
if (filters.location && filters.radiusInKm) {
|
|
13928
|
+
if (filters.lastDoc) {
|
|
13929
|
+
if (typeof filters.lastDoc.data === "function") {
|
|
13930
|
+
constraints.push((0, import_firestore36.startAfter)(filters.lastDoc));
|
|
13931
|
+
} else if (Array.isArray(filters.lastDoc)) {
|
|
13932
|
+
constraints.push((0, import_firestore36.startAfter)(...filters.lastDoc));
|
|
13933
|
+
} else {
|
|
13934
|
+
constraints.push((0, import_firestore36.startAfter)(filters.lastDoc));
|
|
13935
|
+
}
|
|
13936
|
+
}
|
|
13937
|
+
constraints.push((0, import_firestore36.limit)((filters.pagination || 10) * 2));
|
|
13938
|
+
} else {
|
|
13939
|
+
if (filters.lastDoc) {
|
|
13940
|
+
if (typeof filters.lastDoc.data === "function") {
|
|
13941
|
+
constraints.push((0, import_firestore36.startAfter)(filters.lastDoc));
|
|
13942
|
+
} else if (Array.isArray(filters.lastDoc)) {
|
|
13943
|
+
constraints.push((0, import_firestore36.startAfter)(...filters.lastDoc));
|
|
13944
|
+
} else {
|
|
13945
|
+
constraints.push((0, import_firestore36.startAfter)(filters.lastDoc));
|
|
13946
|
+
}
|
|
13934
13947
|
}
|
|
13948
|
+
constraints.push((0, import_firestore36.limit)(filters.pagination || 10));
|
|
13935
13949
|
}
|
|
13936
|
-
constraints.push((0, import_firestore36.limit)(filters.pagination || 10));
|
|
13937
13950
|
const q = (0, import_firestore36.query)(
|
|
13938
13951
|
(0, import_firestore36.collection)(this.db, PRACTITIONERS_COLLECTION),
|
|
13939
13952
|
...constraints
|
|
13940
13953
|
);
|
|
13941
13954
|
const querySnapshot = await (0, import_firestore36.getDocs)(q);
|
|
13942
|
-
|
|
13955
|
+
let practitioners = querySnapshot.docs.map(
|
|
13943
13956
|
(doc51) => ({ ...doc51.data(), id: doc51.id })
|
|
13944
13957
|
);
|
|
13945
13958
|
const lastDoc = querySnapshot.docs.length > 0 ? querySnapshot.docs[querySnapshot.docs.length - 1] : null;
|
|
13959
|
+
if (filters.location && filters.radiusInKm && filters.radiusInKm > 0) {
|
|
13960
|
+
const location = filters.location;
|
|
13961
|
+
const radiusInKm = filters.radiusInKm;
|
|
13962
|
+
practitioners = practitioners.filter((practitioner) => {
|
|
13963
|
+
const clinics = practitioner.clinicsInfo || [];
|
|
13964
|
+
return clinics.some((clinic) => {
|
|
13965
|
+
const distanceInKm = (0, import_geofire_common2.distanceBetween)(
|
|
13966
|
+
[location.latitude, location.longitude],
|
|
13967
|
+
[clinic.location.latitude, clinic.location.longitude]
|
|
13968
|
+
);
|
|
13969
|
+
return distanceInKm <= radiusInKm;
|
|
13970
|
+
});
|
|
13971
|
+
});
|
|
13972
|
+
}
|
|
13946
13973
|
console.log(
|
|
13947
13974
|
`[PRACTITIONER_SERVICE] Strategy 1 success: ${practitioners.length} practitioners`
|
|
13948
13975
|
);
|
|
@@ -14012,11 +14039,10 @@ var PractitionerService = class extends BaseService {
|
|
|
14012
14039
|
practitioners = practitioners.filter((practitioner) => {
|
|
14013
14040
|
const clinics = practitioner.clinicsInfo || [];
|
|
14014
14041
|
return clinics.some((clinic) => {
|
|
14015
|
-
const
|
|
14042
|
+
const distanceInKm = (0, import_geofire_common2.distanceBetween)(
|
|
14016
14043
|
[location.latitude, location.longitude],
|
|
14017
14044
|
[clinic.location.latitude, clinic.location.longitude]
|
|
14018
14045
|
);
|
|
14019
|
-
const distanceInKm = distance / 1e3;
|
|
14020
14046
|
return distanceInKm <= radiusInKm;
|
|
14021
14047
|
});
|
|
14022
14048
|
});
|
|
@@ -14215,11 +14241,10 @@ var PractitionerService = class extends BaseService {
|
|
|
14215
14241
|
filteredPractitioners = filteredPractitioners.filter((practitioner) => {
|
|
14216
14242
|
const clinics = practitioner.clinicsInfo || [];
|
|
14217
14243
|
return clinics.some((clinic) => {
|
|
14218
|
-
const
|
|
14244
|
+
const distanceInKm = (0, import_geofire_common2.distanceBetween)(
|
|
14219
14245
|
[location.latitude, location.longitude],
|
|
14220
14246
|
[clinic.location.latitude, clinic.location.longitude]
|
|
14221
14247
|
);
|
|
14222
|
-
const distanceInKm = distance / 1e3;
|
|
14223
14248
|
return distanceInKm <= radiusInKm;
|
|
14224
14249
|
});
|
|
14225
14250
|
});
|
|
@@ -15965,7 +15990,7 @@ async function getAllClinicsInRange(db, center, rangeInKm, pagination, lastDoc,
|
|
|
15965
15990
|
[center.latitude, center.longitude],
|
|
15966
15991
|
[clinic.location.latitude, clinic.location.longitude]
|
|
15967
15992
|
);
|
|
15968
|
-
const distanceInKm = distance
|
|
15993
|
+
const distanceInKm = distance;
|
|
15969
15994
|
if (distanceInKm <= rangeInKm) {
|
|
15970
15995
|
const filteredClinic = filterClinicEmbeddedArrays(clinic, excludeDraftPractitioners);
|
|
15971
15996
|
matchingClinics.push({
|
|
@@ -16084,7 +16109,7 @@ async function findClinicsInRadius(db, center, radiusInKm, filters) {
|
|
|
16084
16109
|
[center.latitude, center.longitude],
|
|
16085
16110
|
[clinic.location.latitude, clinic.location.longitude]
|
|
16086
16111
|
);
|
|
16087
|
-
const distanceInKm = distance
|
|
16112
|
+
const distanceInKm = distance;
|
|
16088
16113
|
if (distanceInKm <= radiusInKm) {
|
|
16089
16114
|
matchingDocs.push(clinic);
|
|
16090
16115
|
}
|
|
@@ -16406,7 +16431,7 @@ function applyInMemoryFilters(clinics, filters) {
|
|
|
16406
16431
|
const distance = (0, import_geofire_common6.distanceBetween)(
|
|
16407
16432
|
[filters.center.latitude, filters.center.longitude],
|
|
16408
16433
|
[clinic.location.latitude, clinic.location.longitude]
|
|
16409
|
-
)
|
|
16434
|
+
);
|
|
16410
16435
|
console.log(
|
|
16411
16436
|
`[CLINIC_SERVICE] Clinic ${clinic.name}: distance ${distance.toFixed(2)}km (limit: ${filters.radiusInKm}km)`
|
|
16412
16437
|
);
|
|
@@ -24119,7 +24144,7 @@ var ProcedureService = class extends BaseService {
|
|
|
24119
24144
|
const distance = (0, import_geofire_common8.distanceBetween)(
|
|
24120
24145
|
[location.latitude, location.longitude],
|
|
24121
24146
|
[clinicLocation.latitude, clinicLocation.longitude]
|
|
24122
|
-
)
|
|
24147
|
+
);
|
|
24123
24148
|
procedure.distance = distance;
|
|
24124
24149
|
return distance <= radiusInKm;
|
|
24125
24150
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -13945,25 +13945,52 @@ var PractitionerService = class extends BaseService {
|
|
|
13945
13945
|
constraints.push(where13("fullNameLower", ">=", searchTerm));
|
|
13946
13946
|
constraints.push(where13("fullNameLower", "<=", searchTerm + "\uF8FF"));
|
|
13947
13947
|
constraints.push(orderBy4("fullNameLower"));
|
|
13948
|
-
if (filters.
|
|
13949
|
-
if (
|
|
13950
|
-
|
|
13951
|
-
|
|
13952
|
-
|
|
13953
|
-
|
|
13954
|
-
|
|
13948
|
+
if (filters.location && filters.radiusInKm) {
|
|
13949
|
+
if (filters.lastDoc) {
|
|
13950
|
+
if (typeof filters.lastDoc.data === "function") {
|
|
13951
|
+
constraints.push(startAfter6(filters.lastDoc));
|
|
13952
|
+
} else if (Array.isArray(filters.lastDoc)) {
|
|
13953
|
+
constraints.push(startAfter6(...filters.lastDoc));
|
|
13954
|
+
} else {
|
|
13955
|
+
constraints.push(startAfter6(filters.lastDoc));
|
|
13956
|
+
}
|
|
13957
|
+
}
|
|
13958
|
+
constraints.push(limit7((filters.pagination || 10) * 2));
|
|
13959
|
+
} else {
|
|
13960
|
+
if (filters.lastDoc) {
|
|
13961
|
+
if (typeof filters.lastDoc.data === "function") {
|
|
13962
|
+
constraints.push(startAfter6(filters.lastDoc));
|
|
13963
|
+
} else if (Array.isArray(filters.lastDoc)) {
|
|
13964
|
+
constraints.push(startAfter6(...filters.lastDoc));
|
|
13965
|
+
} else {
|
|
13966
|
+
constraints.push(startAfter6(filters.lastDoc));
|
|
13967
|
+
}
|
|
13955
13968
|
}
|
|
13969
|
+
constraints.push(limit7(filters.pagination || 10));
|
|
13956
13970
|
}
|
|
13957
|
-
constraints.push(limit7(filters.pagination || 10));
|
|
13958
13971
|
const q = query13(
|
|
13959
13972
|
collection13(this.db, PRACTITIONERS_COLLECTION),
|
|
13960
13973
|
...constraints
|
|
13961
13974
|
);
|
|
13962
13975
|
const querySnapshot = await getDocs13(q);
|
|
13963
|
-
|
|
13976
|
+
let practitioners = querySnapshot.docs.map(
|
|
13964
13977
|
(doc51) => ({ ...doc51.data(), id: doc51.id })
|
|
13965
13978
|
);
|
|
13966
13979
|
const lastDoc = querySnapshot.docs.length > 0 ? querySnapshot.docs[querySnapshot.docs.length - 1] : null;
|
|
13980
|
+
if (filters.location && filters.radiusInKm && filters.radiusInKm > 0) {
|
|
13981
|
+
const location = filters.location;
|
|
13982
|
+
const radiusInKm = filters.radiusInKm;
|
|
13983
|
+
practitioners = practitioners.filter((practitioner) => {
|
|
13984
|
+
const clinics = practitioner.clinicsInfo || [];
|
|
13985
|
+
return clinics.some((clinic) => {
|
|
13986
|
+
const distanceInKm = distanceBetween(
|
|
13987
|
+
[location.latitude, location.longitude],
|
|
13988
|
+
[clinic.location.latitude, clinic.location.longitude]
|
|
13989
|
+
);
|
|
13990
|
+
return distanceInKm <= radiusInKm;
|
|
13991
|
+
});
|
|
13992
|
+
});
|
|
13993
|
+
}
|
|
13967
13994
|
console.log(
|
|
13968
13995
|
`[PRACTITIONER_SERVICE] Strategy 1 success: ${practitioners.length} practitioners`
|
|
13969
13996
|
);
|
|
@@ -14033,11 +14060,10 @@ var PractitionerService = class extends BaseService {
|
|
|
14033
14060
|
practitioners = practitioners.filter((practitioner) => {
|
|
14034
14061
|
const clinics = practitioner.clinicsInfo || [];
|
|
14035
14062
|
return clinics.some((clinic) => {
|
|
14036
|
-
const
|
|
14063
|
+
const distanceInKm = distanceBetween(
|
|
14037
14064
|
[location.latitude, location.longitude],
|
|
14038
14065
|
[clinic.location.latitude, clinic.location.longitude]
|
|
14039
14066
|
);
|
|
14040
|
-
const distanceInKm = distance / 1e3;
|
|
14041
14067
|
return distanceInKm <= radiusInKm;
|
|
14042
14068
|
});
|
|
14043
14069
|
});
|
|
@@ -14236,11 +14262,10 @@ var PractitionerService = class extends BaseService {
|
|
|
14236
14262
|
filteredPractitioners = filteredPractitioners.filter((practitioner) => {
|
|
14237
14263
|
const clinics = practitioner.clinicsInfo || [];
|
|
14238
14264
|
return clinics.some((clinic) => {
|
|
14239
|
-
const
|
|
14265
|
+
const distanceInKm = distanceBetween(
|
|
14240
14266
|
[location.latitude, location.longitude],
|
|
14241
14267
|
[clinic.location.latitude, clinic.location.longitude]
|
|
14242
14268
|
);
|
|
14243
|
-
const distanceInKm = distance / 1e3;
|
|
14244
14269
|
return distanceInKm <= radiusInKm;
|
|
14245
14270
|
});
|
|
14246
14271
|
});
|
|
@@ -16037,7 +16062,7 @@ async function getAllClinicsInRange(db, center, rangeInKm, pagination, lastDoc,
|
|
|
16037
16062
|
[center.latitude, center.longitude],
|
|
16038
16063
|
[clinic.location.latitude, clinic.location.longitude]
|
|
16039
16064
|
);
|
|
16040
|
-
const distanceInKm = distance
|
|
16065
|
+
const distanceInKm = distance;
|
|
16041
16066
|
if (distanceInKm <= rangeInKm) {
|
|
16042
16067
|
const filteredClinic = filterClinicEmbeddedArrays(clinic, excludeDraftPractitioners);
|
|
16043
16068
|
matchingClinics.push({
|
|
@@ -16161,7 +16186,7 @@ async function findClinicsInRadius(db, center, radiusInKm, filters) {
|
|
|
16161
16186
|
[center.latitude, center.longitude],
|
|
16162
16187
|
[clinic.location.latitude, clinic.location.longitude]
|
|
16163
16188
|
);
|
|
16164
|
-
const distanceInKm = distance
|
|
16189
|
+
const distanceInKm = distance;
|
|
16165
16190
|
if (distanceInKm <= radiusInKm) {
|
|
16166
16191
|
matchingDocs.push(clinic);
|
|
16167
16192
|
}
|
|
@@ -16491,7 +16516,7 @@ function applyInMemoryFilters(clinics, filters) {
|
|
|
16491
16516
|
const distance = distanceBetween4(
|
|
16492
16517
|
[filters.center.latitude, filters.center.longitude],
|
|
16493
16518
|
[clinic.location.latitude, clinic.location.longitude]
|
|
16494
|
-
)
|
|
16519
|
+
);
|
|
16495
16520
|
console.log(
|
|
16496
16521
|
`[CLINIC_SERVICE] Clinic ${clinic.name}: distance ${distance.toFixed(2)}km (limit: ${filters.radiusInKm}km)`
|
|
16497
16522
|
);
|
|
@@ -24354,7 +24379,7 @@ var ProcedureService = class extends BaseService {
|
|
|
24354
24379
|
const distance = distanceBetween6(
|
|
24355
24380
|
[location.latitude, location.longitude],
|
|
24356
24381
|
[clinicLocation.latitude, clinicLocation.longitude]
|
|
24357
|
-
)
|
|
24382
|
+
);
|
|
24358
24383
|
procedure.distance = distance;
|
|
24359
24384
|
return distance <= radiusInKm;
|
|
24360
24385
|
});
|
package/package.json
CHANGED
|
@@ -977,8 +977,7 @@ export async function getAllClinicsInRange(
|
|
|
977
977
|
[clinic.location.latitude, clinic.location.longitude]
|
|
978
978
|
);
|
|
979
979
|
|
|
980
|
-
//
|
|
981
|
-
const distanceInKm = distance / 1000;
|
|
980
|
+
const distanceInKm = distance; // distanceBetween already returns km
|
|
982
981
|
|
|
983
982
|
if (distanceInKm <= rangeInKm) {
|
|
984
983
|
const filteredClinic = filterClinicEmbeddedArrays(clinic, excludeDraftPractitioners);
|
|
@@ -434,11 +434,10 @@ function applyInMemoryFilters(clinics: Clinic[], filters: any): (Clinic & { dist
|
|
|
434
434
|
return false;
|
|
435
435
|
}
|
|
436
436
|
|
|
437
|
-
const distance =
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
) / 1000; // Convert to km
|
|
437
|
+
const distance = distanceBetween(
|
|
438
|
+
[filters.center.latitude, filters.center.longitude],
|
|
439
|
+
[clinic.location.latitude, clinic.location.longitude],
|
|
440
|
+
); // Already returns km
|
|
442
441
|
|
|
443
442
|
console.log(
|
|
444
443
|
`[CLINIC_SERVICE] Clinic ${clinic.name}: distance ${distance.toFixed(2)}km (limit: ${
|
|
@@ -60,8 +60,7 @@ export async function findClinicsInRadius(
|
|
|
60
60
|
[clinic.location.latitude, clinic.location.longitude]
|
|
61
61
|
);
|
|
62
62
|
|
|
63
|
-
//
|
|
64
|
-
const distanceInKm = distance / 1000;
|
|
63
|
+
const distanceInKm = distance; // distanceBetween already returns km
|
|
65
64
|
|
|
66
65
|
if (distanceInKm <= radiusInKm) {
|
|
67
66
|
matchingDocs.push(clinic);
|
|
@@ -1563,23 +1563,37 @@ export class PractitionerService extends BaseService {
|
|
|
1563
1563
|
constraints.push(where("fullNameLower", "<=", searchTerm + "\uf8ff"));
|
|
1564
1564
|
constraints.push(orderBy("fullNameLower"));
|
|
1565
1565
|
|
|
1566
|
-
if (filters.
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1566
|
+
if (filters.location && filters.radiusInKm) {
|
|
1567
|
+
// Fetch more results when geo filtering will reduce count
|
|
1568
|
+
if (filters.lastDoc) {
|
|
1569
|
+
if (typeof filters.lastDoc.data === "function") {
|
|
1570
|
+
constraints.push(startAfter(filters.lastDoc));
|
|
1571
|
+
} else if (Array.isArray(filters.lastDoc)) {
|
|
1572
|
+
constraints.push(startAfter(...filters.lastDoc));
|
|
1573
|
+
} else {
|
|
1574
|
+
constraints.push(startAfter(filters.lastDoc));
|
|
1575
|
+
}
|
|
1573
1576
|
}
|
|
1577
|
+
constraints.push(limit((filters.pagination || 10) * 2));
|
|
1578
|
+
} else {
|
|
1579
|
+
if (filters.lastDoc) {
|
|
1580
|
+
if (typeof filters.lastDoc.data === "function") {
|
|
1581
|
+
constraints.push(startAfter(filters.lastDoc));
|
|
1582
|
+
} else if (Array.isArray(filters.lastDoc)) {
|
|
1583
|
+
constraints.push(startAfter(...filters.lastDoc));
|
|
1584
|
+
} else {
|
|
1585
|
+
constraints.push(startAfter(filters.lastDoc));
|
|
1586
|
+
}
|
|
1587
|
+
}
|
|
1588
|
+
constraints.push(limit(filters.pagination || 10));
|
|
1574
1589
|
}
|
|
1575
|
-
constraints.push(limit(filters.pagination || 10));
|
|
1576
1590
|
|
|
1577
1591
|
const q = query(
|
|
1578
1592
|
collection(this.db, PRACTITIONERS_COLLECTION),
|
|
1579
1593
|
...constraints
|
|
1580
1594
|
);
|
|
1581
1595
|
const querySnapshot = await getDocs(q);
|
|
1582
|
-
|
|
1596
|
+
let practitioners = querySnapshot.docs.map(
|
|
1583
1597
|
(doc) => ({ ...doc.data(), id: doc.id } as Practitioner)
|
|
1584
1598
|
);
|
|
1585
1599
|
const lastDoc =
|
|
@@ -1587,6 +1601,22 @@ export class PractitionerService extends BaseService {
|
|
|
1587
1601
|
? querySnapshot.docs[querySnapshot.docs.length - 1]
|
|
1588
1602
|
: null;
|
|
1589
1603
|
|
|
1604
|
+
// Apply geo filter if location is provided (in-memory, same as Strategy 2)
|
|
1605
|
+
if (filters.location && filters.radiusInKm && filters.radiusInKm > 0) {
|
|
1606
|
+
const location = filters.location;
|
|
1607
|
+
const radiusInKm = filters.radiusInKm;
|
|
1608
|
+
practitioners = practitioners.filter((practitioner) => {
|
|
1609
|
+
const clinics = practitioner.clinicsInfo || [];
|
|
1610
|
+
return clinics.some((clinic) => {
|
|
1611
|
+
const distanceInKm = distanceBetween(
|
|
1612
|
+
[location.latitude, location.longitude],
|
|
1613
|
+
[clinic.location.latitude, clinic.location.longitude]
|
|
1614
|
+
); // Already returns km
|
|
1615
|
+
return distanceInKm <= radiusInKm;
|
|
1616
|
+
});
|
|
1617
|
+
});
|
|
1618
|
+
}
|
|
1619
|
+
|
|
1590
1620
|
console.log(
|
|
1591
1621
|
`[PRACTITIONER_SERVICE] Strategy 1 success: ${practitioners.length} practitioners`
|
|
1592
1622
|
);
|
|
@@ -1672,11 +1702,10 @@ export class PractitionerService extends BaseService {
|
|
|
1672
1702
|
practitioners = practitioners.filter((practitioner) => {
|
|
1673
1703
|
const clinics = practitioner.clinicsInfo || [];
|
|
1674
1704
|
return clinics.some((clinic) => {
|
|
1675
|
-
const
|
|
1705
|
+
const distanceInKm = distanceBetween(
|
|
1676
1706
|
[location.latitude, location.longitude],
|
|
1677
1707
|
[clinic.location.latitude, clinic.location.longitude]
|
|
1678
|
-
);
|
|
1679
|
-
const distanceInKm = distance / 1000;
|
|
1708
|
+
); // Already returns km
|
|
1680
1709
|
return distanceInKm <= radiusInKm;
|
|
1681
1710
|
});
|
|
1682
1711
|
});
|
|
@@ -1936,11 +1965,10 @@ export class PractitionerService extends BaseService {
|
|
|
1936
1965
|
filteredPractitioners = filteredPractitioners.filter((practitioner) => {
|
|
1937
1966
|
const clinics = practitioner.clinicsInfo || [];
|
|
1938
1967
|
return clinics.some((clinic) => {
|
|
1939
|
-
const
|
|
1968
|
+
const distanceInKm = distanceBetween(
|
|
1940
1969
|
[location.latitude, location.longitude],
|
|
1941
1970
|
[clinic.location.latitude, clinic.location.longitude]
|
|
1942
|
-
);
|
|
1943
|
-
const distanceInKm = distance / 1000;
|
|
1971
|
+
); // Already returns km
|
|
1944
1972
|
return distanceInKm <= radiusInKm;
|
|
1945
1973
|
});
|
|
1946
1974
|
});
|
|
@@ -2174,11 +2174,10 @@ export class ProcedureService extends BaseService {
|
|
|
2174
2174
|
return false;
|
|
2175
2175
|
}
|
|
2176
2176
|
|
|
2177
|
-
const distance =
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
) / 1000; // Convert to km
|
|
2177
|
+
const distance = distanceBetween(
|
|
2178
|
+
[location.latitude, location.longitude],
|
|
2179
|
+
[clinicLocation.latitude, clinicLocation.longitude],
|
|
2180
|
+
); // Already returns km
|
|
2182
2181
|
|
|
2183
2182
|
// Attach distance for frontend sorting/display
|
|
2184
2183
|
(procedure as any).distance = distance;
|
|
@@ -171,6 +171,8 @@ export interface ProcedureSummaryInfo {
|
|
|
171
171
|
brandName?: string; // Added: Name of the brand used (if applicable)
|
|
172
172
|
productName?: string; // Added: Name of the product used (if applicable)
|
|
173
173
|
price: number;
|
|
174
|
+
priceMin?: number;
|
|
175
|
+
priceMax?: number;
|
|
174
176
|
pricingMeasure: PricingMeasure;
|
|
175
177
|
currency: Currency;
|
|
176
178
|
duration: number;
|