@blackcode_sa/metaestetics-api 1.14.53 → 1.14.54

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.
@@ -1714,6 +1714,7 @@ interface ZoneItemData {
1714
1714
  notesVisibleToPatient?: boolean;
1715
1715
  subtotal?: number;
1716
1716
  ionNumber?: string;
1717
+ expiryDate?: string;
1717
1718
  createdAt?: string;
1718
1719
  updatedAt?: string;
1719
1720
  }
@@ -1714,6 +1714,7 @@ interface ZoneItemData {
1714
1714
  notesVisibleToPatient?: boolean;
1715
1715
  subtotal?: number;
1716
1716
  ionNumber?: string;
1717
+ expiryDate?: string;
1717
1718
  createdAt?: string;
1718
1719
  updatedAt?: string;
1719
1720
  }
package/dist/index.d.mts CHANGED
@@ -5651,6 +5651,7 @@ interface ZoneItemData {
5651
5651
  notesVisibleToPatient?: boolean;
5652
5652
  subtotal?: number;
5653
5653
  ionNumber?: string;
5654
+ expiryDate?: string;
5654
5655
  createdAt?: string;
5655
5656
  updatedAt?: string;
5656
5657
  }
package/dist/index.d.ts CHANGED
@@ -5651,6 +5651,7 @@ interface ZoneItemData {
5651
5651
  notesVisibleToPatient?: boolean;
5652
5652
  subtotal?: number;
5653
5653
  ionNumber?: string;
5654
+ expiryDate?: string;
5654
5655
  createdAt?: string;
5655
5656
  updatedAt?: string;
5656
5657
  }
package/dist/index.js CHANGED
@@ -5369,12 +5369,19 @@ async function addExtendedProcedureUtil(db, appointmentId, procedureId) {
5369
5369
  appointment.practitionerId,
5370
5370
  appointment.clinicBranchId
5371
5371
  );
5372
- updatedLinkedFormIds = [...updatedLinkedFormIds, ...formInitResult.allLinkedFormIds];
5373
- updatedLinkedForms = [...updatedLinkedForms, ...formInitResult.initializedFormsInfo];
5374
- updatedPendingUserFormsIds = [
5375
- ...updatedPendingUserFormsIds,
5376
- ...formInitResult.pendingUserFormsIds
5377
- ];
5372
+ const existingFormIds = new Set(updatedLinkedFormIds);
5373
+ const newFormIds = formInitResult.allLinkedFormIds.filter((id) => !existingFormIds.has(id));
5374
+ updatedLinkedFormIds = [...updatedLinkedFormIds, ...newFormIds];
5375
+ const existingFormIdsInLinkedForms = new Set(updatedLinkedForms.map((f) => f.formId));
5376
+ const newLinkedForms = formInitResult.initializedFormsInfo.filter(
5377
+ (form) => !existingFormIdsInLinkedForms.has(form.formId)
5378
+ );
5379
+ updatedLinkedForms = [...updatedLinkedForms, ...newLinkedForms];
5380
+ const existingPendingIds = new Set(updatedPendingUserFormsIds);
5381
+ const newPendingIds = formInitResult.pendingUserFormsIds.filter(
5382
+ (id) => !existingPendingIds.has(id)
5383
+ );
5384
+ updatedPendingUserFormsIds = [...updatedPendingUserFormsIds, ...newPendingIds];
5378
5385
  }
5379
5386
  const extendedProcedures = [...metadata.extendedProcedures || [], extendedProcedureInfo];
5380
5387
  const appointmentRef = (0, import_firestore10.doc)(db, APPOINTMENTS_COLLECTION, appointmentId);
@@ -5417,15 +5424,30 @@ async function removeExtendedProcedureUtil(db, appointmentId, procedureId) {
5417
5424
  `\u{1F5D1}\uFE0F [removeExtendedProcedure] Removed ${productsRemovedFromZones} products from zones for procedure ${procedureId}`
5418
5425
  );
5419
5426
  const removedFormIds = await removeFormsForExtendedProcedure(db, appointmentId, procedureId);
5420
- const updatedLinkedFormIds = (appointment.linkedFormIds || []).filter(
5421
- (formId) => !removedFormIds.includes(formId)
5422
- );
5423
- const updatedLinkedForms = (appointment.linkedForms || []).filter(
5424
- (form) => !removedFormIds.includes(form.formId)
5425
- );
5426
- const updatedPendingUserFormsIds = (appointment.pendingUserFormsIds || []).filter(
5427
- (formId) => !removedFormIds.includes(formId)
5428
- );
5427
+ const removedFormIdsSet = new Set(removedFormIds);
5428
+ const linkedFormIdsSet = /* @__PURE__ */ new Set();
5429
+ const updatedLinkedFormIds = (appointment.linkedFormIds || []).filter((formId) => {
5430
+ if (removedFormIdsSet.has(formId)) return false;
5431
+ if (linkedFormIdsSet.has(formId)) return false;
5432
+ linkedFormIdsSet.add(formId);
5433
+ return true;
5434
+ });
5435
+ const linkedFormsMap = /* @__PURE__ */ new Map();
5436
+ (appointment.linkedForms || []).forEach((form) => {
5437
+ if (!removedFormIdsSet.has(form.formId)) {
5438
+ if (!linkedFormsMap.has(form.formId)) {
5439
+ linkedFormsMap.set(form.formId, form);
5440
+ }
5441
+ }
5442
+ });
5443
+ const updatedLinkedForms = Array.from(linkedFormsMap.values());
5444
+ const pendingIdsSet = /* @__PURE__ */ new Set();
5445
+ const updatedPendingUserFormsIds = (appointment.pendingUserFormsIds || []).filter((formId) => {
5446
+ if (removedFormIdsSet.has(formId)) return false;
5447
+ if (pendingIdsSet.has(formId)) return false;
5448
+ pendingIdsSet.add(formId);
5449
+ return true;
5450
+ });
5429
5451
  const appointmentRef = (0, import_firestore10.doc)(db, APPOINTMENTS_COLLECTION, appointmentId);
5430
5452
  await (0, import_firestore10.updateDoc)(appointmentRef, {
5431
5453
  "metadata.extendedProcedures": metadata.extendedProcedures,
package/dist/index.mjs CHANGED
@@ -5255,12 +5255,19 @@ async function addExtendedProcedureUtil(db, appointmentId, procedureId) {
5255
5255
  appointment.practitionerId,
5256
5256
  appointment.clinicBranchId
5257
5257
  );
5258
- updatedLinkedFormIds = [...updatedLinkedFormIds, ...formInitResult.allLinkedFormIds];
5259
- updatedLinkedForms = [...updatedLinkedForms, ...formInitResult.initializedFormsInfo];
5260
- updatedPendingUserFormsIds = [
5261
- ...updatedPendingUserFormsIds,
5262
- ...formInitResult.pendingUserFormsIds
5263
- ];
5258
+ const existingFormIds = new Set(updatedLinkedFormIds);
5259
+ const newFormIds = formInitResult.allLinkedFormIds.filter((id) => !existingFormIds.has(id));
5260
+ updatedLinkedFormIds = [...updatedLinkedFormIds, ...newFormIds];
5261
+ const existingFormIdsInLinkedForms = new Set(updatedLinkedForms.map((f) => f.formId));
5262
+ const newLinkedForms = formInitResult.initializedFormsInfo.filter(
5263
+ (form) => !existingFormIdsInLinkedForms.has(form.formId)
5264
+ );
5265
+ updatedLinkedForms = [...updatedLinkedForms, ...newLinkedForms];
5266
+ const existingPendingIds = new Set(updatedPendingUserFormsIds);
5267
+ const newPendingIds = formInitResult.pendingUserFormsIds.filter(
5268
+ (id) => !existingPendingIds.has(id)
5269
+ );
5270
+ updatedPendingUserFormsIds = [...updatedPendingUserFormsIds, ...newPendingIds];
5264
5271
  }
5265
5272
  const extendedProcedures = [...metadata.extendedProcedures || [], extendedProcedureInfo];
5266
5273
  const appointmentRef = doc7(db, APPOINTMENTS_COLLECTION, appointmentId);
@@ -5303,15 +5310,30 @@ async function removeExtendedProcedureUtil(db, appointmentId, procedureId) {
5303
5310
  `\u{1F5D1}\uFE0F [removeExtendedProcedure] Removed ${productsRemovedFromZones} products from zones for procedure ${procedureId}`
5304
5311
  );
5305
5312
  const removedFormIds = await removeFormsForExtendedProcedure(db, appointmentId, procedureId);
5306
- const updatedLinkedFormIds = (appointment.linkedFormIds || []).filter(
5307
- (formId) => !removedFormIds.includes(formId)
5308
- );
5309
- const updatedLinkedForms = (appointment.linkedForms || []).filter(
5310
- (form) => !removedFormIds.includes(form.formId)
5311
- );
5312
- const updatedPendingUserFormsIds = (appointment.pendingUserFormsIds || []).filter(
5313
- (formId) => !removedFormIds.includes(formId)
5314
- );
5313
+ const removedFormIdsSet = new Set(removedFormIds);
5314
+ const linkedFormIdsSet = /* @__PURE__ */ new Set();
5315
+ const updatedLinkedFormIds = (appointment.linkedFormIds || []).filter((formId) => {
5316
+ if (removedFormIdsSet.has(formId)) return false;
5317
+ if (linkedFormIdsSet.has(formId)) return false;
5318
+ linkedFormIdsSet.add(formId);
5319
+ return true;
5320
+ });
5321
+ const linkedFormsMap = /* @__PURE__ */ new Map();
5322
+ (appointment.linkedForms || []).forEach((form) => {
5323
+ if (!removedFormIdsSet.has(form.formId)) {
5324
+ if (!linkedFormsMap.has(form.formId)) {
5325
+ linkedFormsMap.set(form.formId, form);
5326
+ }
5327
+ }
5328
+ });
5329
+ const updatedLinkedForms = Array.from(linkedFormsMap.values());
5330
+ const pendingIdsSet = /* @__PURE__ */ new Set();
5331
+ const updatedPendingUserFormsIds = (appointment.pendingUserFormsIds || []).filter((formId) => {
5332
+ if (removedFormIdsSet.has(formId)) return false;
5333
+ if (pendingIdsSet.has(formId)) return false;
5334
+ pendingIdsSet.add(formId);
5335
+ return true;
5336
+ });
5315
5337
  const appointmentRef = doc7(db, APPOINTMENTS_COLLECTION, appointmentId);
5316
5338
  await updateDoc5(appointmentRef, {
5317
5339
  "metadata.extendedProcedures": metadata.extendedProcedures,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@blackcode_sa/metaestetics-api",
3
3
  "private": false,
4
- "version": "1.14.53",
4
+ "version": "1.14.54",
5
5
  "description": "Firebase authentication service with anonymous upgrade support",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.mjs",
@@ -174,13 +174,25 @@ export async function addExtendedProcedureUtil(
174
174
  appointment.clinicBranchId,
175
175
  );
176
176
 
177
- // Merge form IDs and info
178
- updatedLinkedFormIds = [...updatedLinkedFormIds, ...formInitResult.allLinkedFormIds];
179
- updatedLinkedForms = [...updatedLinkedForms, ...formInitResult.initializedFormsInfo];
180
- updatedPendingUserFormsIds = [
181
- ...updatedPendingUserFormsIds,
182
- ...formInitResult.pendingUserFormsIds,
183
- ];
177
+ // Merge form IDs and info with deduplication
178
+ // Deduplicate linkedFormIds by formId
179
+ const existingFormIds = new Set(updatedLinkedFormIds);
180
+ const newFormIds = formInitResult.allLinkedFormIds.filter(id => !existingFormIds.has(id));
181
+ updatedLinkedFormIds = [...updatedLinkedFormIds, ...newFormIds];
182
+
183
+ // Deduplicate linkedForms by formId (keep existing entries, add only new ones)
184
+ const existingFormIdsInLinkedForms = new Set(updatedLinkedForms.map(f => f.formId));
185
+ const newLinkedForms = formInitResult.initializedFormsInfo.filter(
186
+ form => !existingFormIdsInLinkedForms.has(form.formId)
187
+ );
188
+ updatedLinkedForms = [...updatedLinkedForms, ...newLinkedForms];
189
+
190
+ // Deduplicate pendingUserFormsIds
191
+ const existingPendingIds = new Set(updatedPendingUserFormsIds);
192
+ const newPendingIds = formInitResult.pendingUserFormsIds.filter(
193
+ id => !existingPendingIds.has(id)
194
+ );
195
+ updatedPendingUserFormsIds = [...updatedPendingUserFormsIds, ...newPendingIds];
184
196
  }
185
197
 
186
198
  // Add extended procedure
@@ -259,16 +271,41 @@ export async function removeExtendedProcedureUtil(
259
271
  // Remove forms associated with this procedure
260
272
  const removedFormIds = await removeFormsForExtendedProcedure(db, appointmentId, procedureId);
261
273
 
262
- // Update appointment form arrays
263
- const updatedLinkedFormIds = (appointment.linkedFormIds || []).filter(
264
- formId => !removedFormIds.includes(formId),
265
- );
266
- const updatedLinkedForms = (appointment.linkedForms || []).filter(
267
- form => !removedFormIds.includes(form.formId),
268
- );
269
- const updatedPendingUserFormsIds = (appointment.pendingUserFormsIds || []).filter(
270
- formId => !removedFormIds.includes(formId),
271
- );
274
+ // Update appointment form arrays - remove forms that were deleted
275
+ // Also deduplicate to clean up any existing duplicates
276
+ const removedFormIdsSet = new Set(removedFormIds);
277
+
278
+ // Deduplicate and filter linkedFormIds
279
+ const linkedFormIdsSet = new Set<string>();
280
+ const updatedLinkedFormIds = (appointment.linkedFormIds || [])
281
+ .filter(formId => {
282
+ if (removedFormIdsSet.has(formId)) return false;
283
+ if (linkedFormIdsSet.has(formId)) return false; // Deduplicate
284
+ linkedFormIdsSet.add(formId);
285
+ return true;
286
+ });
287
+
288
+ // Deduplicate and filter linkedForms by formId
289
+ const linkedFormsMap = new Map<string, LinkedFormInfo>();
290
+ (appointment.linkedForms || []).forEach(form => {
291
+ if (!removedFormIdsSet.has(form.formId)) {
292
+ // Keep the first occurrence if duplicates exist
293
+ if (!linkedFormsMap.has(form.formId)) {
294
+ linkedFormsMap.set(form.formId, form);
295
+ }
296
+ }
297
+ });
298
+ const updatedLinkedForms = Array.from(linkedFormsMap.values());
299
+
300
+ // Deduplicate and filter pendingUserFormsIds
301
+ const pendingIdsSet = new Set<string>();
302
+ const updatedPendingUserFormsIds = (appointment.pendingUserFormsIds || [])
303
+ .filter(formId => {
304
+ if (removedFormIdsSet.has(formId)) return false;
305
+ if (pendingIdsSet.has(formId)) return false; // Deduplicate
306
+ pendingIdsSet.add(formId);
307
+ return true;
308
+ });
272
309
 
273
310
  // Update appointment
274
311
  const appointmentRef = doc(db, APPOINTMENTS_COLLECTION, appointmentId);
@@ -168,7 +168,8 @@ export interface ZoneItemData {
168
168
  notes?: string;
169
169
  notesVisibleToPatient?: boolean; // Whether notes are visible to patient (privacy-first, default false)
170
170
  subtotal?: number;
171
- ionNumber?: string;
171
+ ionNumber?: string; // Batch/Lot number
172
+ expiryDate?: string; // ISO date string (YYYY-MM-DD)
172
173
  createdAt?: string; // ISO timestamp
173
174
  updatedAt?: string; // ISO timestamp
174
175
  }