@flowselections/floriday-verkoop-module 1.0.40 → 1.0.41

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.
Files changed (93) hide show
  1. package/dist-lib/components/verkoop/EngineBufferCard.d.ts.map +1 -1
  2. package/dist-lib/components/verkoop/EngineBufferCard.js +2 -2
  3. package/dist-lib/components/verkoop/InvoiceTimingSettings.d.ts +3 -0
  4. package/dist-lib/components/verkoop/InvoiceTimingSettings.d.ts.map +1 -0
  5. package/dist-lib/components/verkoop/InvoiceTimingSettings.js +54 -0
  6. package/dist-lib/components/verkoop/SalesOrdersTable.d.ts.map +1 -1
  7. package/dist-lib/components/verkoop/SalesOrdersTable.js +44 -91
  8. package/dist-lib/components/verkoop/VerkoopOrdersPage.d.ts.map +1 -1
  9. package/dist-lib/components/verkoop/VerkoopOrdersPage.js +9 -8
  10. package/dist-lib/index.d.ts +1 -0
  11. package/dist-lib/index.d.ts.map +1 -1
  12. package/dist-lib/index.js +3 -1
  13. package/dist-lib/integrations/supabase/auth-middleware.d.ts +577 -4
  14. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  15. package/dist-lib/integrations/supabase/client.d.ts +577 -4
  16. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  17. package/dist-lib/integrations/supabase/client.server.d.ts +577 -4
  18. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  19. package/dist-lib/integrations/supabase/types.d.ts +578 -5
  20. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  21. package/dist-lib/integrations/supabase/types.js +12 -1
  22. package/dist-lib/lib/cart-lock.functions.d.ts +577 -4
  23. package/dist-lib/lib/cart-lock.functions.d.ts.map +1 -1
  24. package/dist-lib/lib/cart-planning-settings.functions.d.ts +6347 -44
  25. package/dist-lib/lib/cart-planning-settings.functions.d.ts.map +1 -1
  26. package/dist-lib/lib/cart-replan.functions.d.ts +1731 -12
  27. package/dist-lib/lib/cart-replan.functions.d.ts.map +1 -1
  28. package/dist-lib/lib/create-order.functions.d.ts +8655 -60
  29. package/dist-lib/lib/create-order.functions.d.ts.map +1 -1
  30. package/dist-lib/lib/cron/index.d.ts +1 -0
  31. package/dist-lib/lib/cron/index.d.ts.map +1 -1
  32. package/dist-lib/lib/cron/index.js +1 -0
  33. package/dist-lib/lib/cron/invoice-due.d.ts +4 -0
  34. package/dist-lib/lib/cron/invoice-due.d.ts.map +1 -0
  35. package/dist-lib/lib/cron/invoice-due.js +21 -0
  36. package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts +1731 -12
  37. package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts.map +1 -1
  38. package/dist-lib/lib/floriday-fulfillment-status.server.d.ts +28 -0
  39. package/dist-lib/lib/floriday-fulfillment-status.server.d.ts.map +1 -0
  40. package/dist-lib/lib/floriday-fulfillment-status.server.js +91 -0
  41. package/dist-lib/lib/floriday-logistic-labels.functions.d.ts +577 -4
  42. package/dist-lib/lib/floriday-logistic-labels.functions.d.ts.map +1 -1
  43. package/dist-lib/lib/floriday-mirror.functions.d.ts +577 -4
  44. package/dist-lib/lib/floriday-mirror.functions.d.ts.map +1 -1
  45. package/dist-lib/lib/floriday-mirror.functions.js +27 -4
  46. package/dist-lib/lib/floriday-public.functions.d.ts +4039 -28
  47. package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
  48. package/dist-lib/lib/floriday-writes.functions.d.ts +2885 -20
  49. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
  50. package/dist-lib/lib/invoice-timing.d.ts +38 -0
  51. package/dist-lib/lib/invoice-timing.d.ts.map +1 -0
  52. package/dist-lib/lib/invoice-timing.functions.d.ts +83845 -0
  53. package/dist-lib/lib/invoice-timing.functions.d.ts.map +1 -0
  54. package/dist-lib/lib/invoice-timing.functions.js +88 -0
  55. package/dist-lib/lib/invoice-timing.js +139 -0
  56. package/dist-lib/lib/invoice-timing.server.d.ts +22 -0
  57. package/dist-lib/lib/invoice-timing.server.d.ts.map +1 -0
  58. package/dist-lib/lib/invoice-timing.server.js +154 -0
  59. package/dist-lib/lib/load-carriers.functions.d.ts +577 -4
  60. package/dist-lib/lib/load-carriers.functions.d.ts.map +1 -1
  61. package/dist-lib/lib/logistics-engine.functions.d.ts +2887 -22
  62. package/dist-lib/lib/logistics-engine.functions.d.ts.map +1 -1
  63. package/dist-lib/lib/logistics-stock.functions.d.ts +1154 -8
  64. package/dist-lib/lib/logistics-stock.functions.d.ts.map +1 -1
  65. package/dist-lib/lib/order-addresses.functions.d.ts +577 -4
  66. package/dist-lib/lib/order-addresses.functions.d.ts.map +1 -1
  67. package/dist-lib/lib/order-buffers.functions.d.ts +1731 -12
  68. package/dist-lib/lib/order-buffers.functions.d.ts.map +1 -1
  69. package/dist-lib/lib/order-carrier.functions.d.ts +1154 -8
  70. package/dist-lib/lib/order-carrier.functions.d.ts.map +1 -1
  71. package/dist-lib/lib/order-pickup.functions.d.ts +1154 -8
  72. package/dist-lib/lib/order-pickup.functions.d.ts.map +1 -1
  73. package/dist-lib/lib/order-shipments.functions.d.ts +2308 -16
  74. package/dist-lib/lib/order-shipments.functions.d.ts.map +1 -1
  75. package/dist-lib/lib/order-status.d.ts +33 -0
  76. package/dist-lib/lib/order-status.d.ts.map +1 -0
  77. package/dist-lib/lib/order-status.js +77 -0
  78. package/dist-lib/lib/salesorders-list.functions.d.ts +578 -5
  79. package/dist-lib/lib/salesorders-list.functions.d.ts.map +1 -1
  80. package/dist-lib/lib/salesorders-list.functions.js +1 -1
  81. package/dist-lib/lib/salesorders-list.server.d.ts +2 -1
  82. package/dist-lib/lib/salesorders-list.server.d.ts.map +1 -1
  83. package/dist-lib/lib/salesorders-list.server.js +145 -58
  84. package/dist-lib/lib/salesorders-mapping.d.ts +13 -0
  85. package/dist-lib/lib/salesorders-mapping.d.ts.map +1 -1
  86. package/dist-lib/lib/salesorders-mapping.js +2 -7
  87. package/dist-lib/lib/salesorders.functions.d.ts +2885 -20
  88. package/dist-lib/lib/salesorders.functions.d.ts.map +1 -1
  89. package/dist-lib/lib/tradeitems.functions.d.ts +577 -4
  90. package/dist-lib/lib/tradeitems.functions.d.ts.map +1 -1
  91. package/dist-lib/lib/useSalesOrdersQuery.d.ts +2 -1
  92. package/dist-lib/lib/useSalesOrdersQuery.d.ts.map +1 -1
  93. package/package.json +10 -2
@@ -4,6 +4,8 @@ import { normalizeLoadCarrierCode } from "./load-carriers";
4
4
  import { normalizeTime, resolveDeliveryTimeForDate } from "./carrier-availability";
5
5
  import { expandOrderItemsForPlanner } from "./expand-group-order-items";
6
6
  import { planCarts } from "./cart-planner";
7
+ import { mergeStages, resolveOrderStage } from "./order-status";
8
+ import { expectedPackagesFromSalesOrder, isFullyFulfilled, loadFloridayFulfillmentStates, } from "./floriday-fulfillment-status.server";
7
9
  const FO_CAP = 20000;
8
10
  const LOCAL_CAP = 5000;
9
11
  const PROPOSAL_CAP = 2000;
@@ -182,7 +184,7 @@ export async function buildSalesOrdersList(supabase, params) {
182
184
  }
183
185
  }
184
186
  // 3) Lokale orders binnen hetzelfde venster.
185
- const localOrderSelect = "id, order_number, customer_name, customer_id, order_date, delivery_date, status, total, custom_fields, order_source, created_at, is_reservation, buffer_id, floriday_sales_order_id, order_items(id, product_id, product_name, quantity, unit, unit_price, products(plants_per_crate, crates_per_layer, layers_per_cart, floriday_trade_item_id, custom_fields))";
187
+ const localOrderSelect = "id, order_number, customer_name, customer_id, order_date, delivery_date, status, total, custom_fields, order_source, created_at, is_reservation, plan_locked_at, buffer_id, floriday_sales_order_id, order_items(id, product_id, product_name, quantity, unit, unit_price, products(plants_per_crate, crates_per_layer, layers_per_cart, floriday_trade_item_id, custom_fields))";
186
188
  let localQ = supabase
187
189
  .from("orders")
188
190
  .select(localOrderSelect)
@@ -203,6 +205,39 @@ export async function buildSalesOrdersList(supabase, params) {
203
205
  if (localRes.error)
204
206
  throw new Error(`Lokale orders lezen faalde: ${localRes.error.message}`);
205
207
  const localOrderRows = (localRes.data ?? []);
208
+ // 3b) Vervoerders + verzendmomenten (best-effort, alleen voor deze orders).
209
+ const carrierNameById = new Map();
210
+ const shipmentStateByOrder = new Map();
211
+ try {
212
+ const { data: carrierRows } = await supabase.from("carriers").select("id, name").limit(2000);
213
+ for (const c of (carrierRows ?? []))
214
+ carrierNameById.set(String(c.id), String(c.name ?? ""));
215
+ }
216
+ catch {
217
+ /* vervoerdernamen zijn optioneel */
218
+ }
219
+ const localIds = localOrderRows.map((r) => String(r.id));
220
+ if (localIds.length) {
221
+ try {
222
+ const { data: shipRows } = await supabase
223
+ .from("order_shipments")
224
+ .select("order_id, status, shipped_at")
225
+ .in("order_id", localIds.slice(0, 1000));
226
+ for (const s of (shipRows ?? [])) {
227
+ const key = String(s.order_id);
228
+ const prev = shipmentStateByOrder.get(key) ?? { shipped: false, picked: false };
229
+ const st = String(s.status ?? "").toLowerCase();
230
+ if (s.shipped_at || st === "verzonden" || st === "shipped")
231
+ prev.shipped = true;
232
+ if (st === "gepickt" || st === "picked" || st === "gecontroleerd")
233
+ prev.picked = true;
234
+ shipmentStateByOrder.set(key, prev);
235
+ }
236
+ }
237
+ catch (e) {
238
+ warnings.push(`Verzendmomenten niet geladen: ${e.message}`);
239
+ }
240
+ }
206
241
  // 4) Mailbox-voorstellen (best-effort).
207
242
  let proposalRows = [];
208
243
  try {
@@ -375,6 +410,16 @@ export async function buildSalesOrdersList(supabase, params) {
375
410
  else
376
411
  bufferByLocalId.set(String(r.id), bid);
377
412
  }
413
+ // 8b) Afhandeling die in Floriday zelf is gedaan (afleverbrieven).
414
+ let fulfillmentStates = new Map();
415
+ if (foRows.length > 0) {
416
+ try {
417
+ fulfillmentStates = await loadFloridayFulfillmentStates(supabase, foRows.map((r) => String(r.floriday_id)));
418
+ }
419
+ catch (e) {
420
+ warnings.push(`Floriday-afhandelingen niet geladen: ${e.message}`);
421
+ }
422
+ }
378
423
  // 9) Floriday-orders → DTO (zonder zware raw-payload richting browser).
379
424
  const floridayOrders = foRows.map((r) => {
380
425
  const enriched = {
@@ -389,6 +434,22 @@ export async function buildSalesOrdersList(supabase, params) {
389
434
  const bid = bufferByFoId.get(dto.id) ?? null;
390
435
  if (bid)
391
436
  dto.bufferId = bid;
437
+ const ff = fulfillmentStates.get(String(r.floriday_id));
438
+ dto.stage = resolveOrderStage({
439
+ status: r.data?.status,
440
+ controlledAt: r.controlled_at ?? null,
441
+ floridayFulfillment: ff
442
+ ? {
443
+ fulfilled: ff.fulfilled,
444
+ fullyFulfilled: isFullyFulfilled(ff, expectedPackagesFromSalesOrder(r.data)),
445
+ received: ff.received,
446
+ }
447
+ : null,
448
+ });
449
+ dto.incomplete = [
450
+ ...(dto.customer.name && dto.customer.name !== "Onbekende klant" ? [] : ["geen klant gekoppeld"]),
451
+ ...(dto.deliveryAt ? [] : ["geen leverdatum"]),
452
+ ];
392
453
  return dto;
393
454
  });
394
455
  // 10) Lokale orders → DTO.
@@ -502,6 +563,17 @@ export async function buildSalesOrdersList(supabase, params) {
502
563
  logoUrl: null,
503
564
  },
504
565
  status: statusFlags(r.status),
566
+ stage: resolveOrderStage({
567
+ status: r.status,
568
+ shipped: shipmentStateByOrder.get(String(r.id))?.shipped,
569
+ controlledAt: shipmentStateByOrder.get(String(r.id))?.picked ? "picked" : null,
570
+ isReservation: !!r.is_reservation,
571
+ }),
572
+ carrierName: cf.carrier ? (carrierNameById.get(String(cf.carrier)) ?? null) : null,
573
+ incomplete: [
574
+ ...(r.customer_id || r.customer_name ? [] : ["geen klant gekoppeld"]),
575
+ ...(r.delivery_date ? [] : ["geen leverdatum"]),
576
+ ],
505
577
  raw: { order: { status: r.status ?? null }, customer: null, tradeItem: null },
506
578
  bufferId: bufferByLocalId.get(String(r.id)) ?? null,
507
579
  });
@@ -538,6 +610,11 @@ export async function buildSalesOrdersList(supabase, params) {
538
610
  logoUrl: null,
539
611
  },
540
612
  status: statusFlags(p.status),
613
+ stage: "incoming",
614
+ incomplete: [
615
+ ...(matchedCustomer ? [] : ["geen klant gekoppeld"]),
616
+ ...(p.delivery_date ? [] : ["geen leverdatum"]),
617
+ ],
541
618
  raw: { order: { status: p.status ?? null }, customer: null, tradeItem: null },
542
619
  });
543
620
  }
@@ -551,79 +628,86 @@ export async function buildSalesOrdersList(supabase, params) {
551
628
  for (const o of all)
552
629
  if (o.bufferId)
553
630
  o.bufferSize = sizeByBuffer.get(o.bufferId) ?? 1;
554
- // 13) Filteren (zoek + status), tellen, pagineren.
631
+ // 12b) Buffers samenvouwen tot één rij per buffer, vóór tellen en pagineren.
632
+ const groups = [];
633
+ const groupIndex = new Map();
634
+ for (const o of all) {
635
+ const key = o.bufferId && (o.bufferSize ?? 1) > 1 ? `buf:${o.bufferId}` : `one:${o.id}`;
636
+ const idx = groupIndex.get(key);
637
+ if (idx === undefined) {
638
+ groupIndex.set(key, groups.length);
639
+ groups.push([o]);
640
+ }
641
+ else {
642
+ groups[idx].push(o);
643
+ }
644
+ }
645
+ const mergeGroup = (members) => {
646
+ const head = members[0];
647
+ if (members.length === 1)
648
+ return head;
649
+ const revenue = members.reduce((s, m) => s + (m.revenue ?? 0), 0);
650
+ const fustCount = members.reduce((s, m) => s + (m.fustCount ?? 0), 0);
651
+ const karCount = members.reduce((s, m) => s + (m.karCount ?? 0), 0);
652
+ const totalPieces = members.reduce((s, m) => s + (m.totalPieces ?? 0), 0);
653
+ const incomplete = Array.from(new Set(members.flatMap((m) => m.incomplete ?? [])));
654
+ return {
655
+ ...head,
656
+ revenue,
657
+ fustCount,
658
+ karCount,
659
+ totalPieces,
660
+ bufferSize: members.length,
661
+ bufferOrderNumbers: members.map((m) => m.orderNumber).filter(Boolean),
662
+ bufferOrderIds: members.map((m) => m.id),
663
+ reservationCount: members.filter((m) => m.isReservation).length,
664
+ stage: mergeStages(members.map((m) => m.stage ?? "incoming")),
665
+ crateTypeName: mergeTypeNames(members.map((m) => m.crateTypeName ?? "")),
666
+ cartTypeName: mergeTypeNames(members.map((m) => m.cartTypeName ?? "")),
667
+ carrierName: head.carrierName ?? members.find((m) => m.carrierName)?.carrierName ?? null,
668
+ incomplete,
669
+ };
670
+ };
671
+ // 13) Filteren (zoek + status), tellen, pagineren — op samengevouwen rijen.
555
672
  const search = (params.search ?? "").trim().toLowerCase();
556
- const matchesSearch = (o) => !search ||
557
- `${o.productName} ${o.sku} ${o.orderNumber} ${o.customer.name}`.toLowerCase().includes(search);
558
- const matchesStatusFilter = (o) => {
673
+ const matchesSearch = (members) => !search ||
674
+ members.some((o) => `${o.productName} ${o.sku} ${o.orderNumber} ${o.customer.name}`.toLowerCase().includes(search));
675
+ const stageOf = (members) => mergeStages(members.map((m) => m.stage ?? "incoming"));
676
+ const matchesStatusFilter = (members) => {
677
+ const stage = stageOf(members);
559
678
  switch (params.status) {
560
679
  case "cancelled":
561
- return o.status.isCancelled;
680
+ return stage === "cancelled";
562
681
  case "shipped":
563
- return o.status.isShipped;
564
- case "invoiced":
565
- return o.status.isInvoiced;
566
- case "open":
567
- return !o.status.isCancelled && !o.status.isShipped;
568
- default:
569
- return true;
570
- }
571
- };
572
- const matchesTab = (o) => {
573
- switch (params.tab) {
682
+ return stage === "shipped";
574
683
  case "open":
575
- return !o.status.isCancelled && !o.status.isShipped;
576
- case "shipped":
577
- return o.status.isShipped && !o.status.isCancelled;
578
- case "invoiced":
579
- return o.status.isInvoiced;
580
- case "cancelled":
581
- return o.status.isCancelled;
684
+ return stage !== "cancelled" && stage !== "shipped";
582
685
  default:
583
686
  return true;
584
687
  }
585
688
  };
586
- const withoutTab = all.filter((o) => matchesSearch(o) && matchesStatusFilter(o));
587
- const filtered = withoutTab.filter(matchesTab);
588
- const collapse = (rows) => {
589
- const seen = new Set();
590
- const out = [];
591
- for (const o of rows) {
592
- const key = o.bufferId && (o.bufferSize ?? 1) > 1 ? `buf:${o.bufferId}` : `one:${o.id}`;
593
- if (seen.has(key))
594
- continue;
595
- seen.add(key);
596
- out.push(o);
597
- }
598
- return out;
599
- };
600
- const collapsedAll = collapse(withoutTab);
689
+ const matchesTab = (members) => params.tab === "all" || stageOf(members) === params.tab;
690
+ const withoutTab = groups.filter((g) => matchesSearch(g) && matchesStatusFilter(g));
691
+ const filteredGroups = withoutTab.filter(matchesTab);
601
692
  const statusCounts = {
602
- all: collapsedAll.length,
603
- open: 0,
693
+ all: withoutTab.length,
694
+ incoming: 0,
695
+ topick: 0,
696
+ picked: 0,
604
697
  shipped: 0,
605
- invoiced: 0,
606
698
  cancelled: 0,
607
699
  };
608
- for (const o of collapsedAll) {
609
- if (o.status.isCancelled)
610
- statusCounts.cancelled++;
611
- else if (o.status.isShipped)
612
- statusCounts.shipped++;
613
- else
614
- statusCounts.open++;
615
- if (o.status.isInvoiced)
616
- statusCounts.invoiced++;
617
- }
618
- const totals = computeTotals(collapse(filtered));
619
- const totalCount = filtered.length;
620
- const rows = params.all
621
- ? filtered.slice(0, EXPORT_CAP)
622
- : filtered.slice((page - 1) * pageSize, page * pageSize);
700
+ for (const g of withoutTab)
701
+ statusCounts[stageOf(g)]++;
702
+ const totalCount = filteredGroups.length;
703
+ const pageGroups = params.all
704
+ ? filteredGroups.slice(0, EXPORT_CAP)
705
+ : filteredGroups.slice((page - 1) * pageSize, page * pageSize);
623
706
  // 14) Karindeling alleen voor de zichtbare rijen (begrensd werk).
624
707
  if (!params.all) {
625
708
  const localById = new Map(localOrderRows.map((r) => [String(r.id), r]));
626
- await Promise.all(rows
709
+ await Promise.all(pageGroups
710
+ .flat()
627
711
  .filter((o) => o.id.startsWith("local:"))
628
712
  .map(async (o) => {
629
713
  const r = localById.get(o.id.slice("local:".length));
@@ -655,6 +739,9 @@ export async function buildSalesOrdersList(supabase, params) {
655
739
  }
656
740
  }));
657
741
  }
742
+ const rows = pageGroups.map(mergeGroup);
743
+ // Totalen over de volledige gefilterde set (alle orders in elke buffer).
744
+ const totals = computeTotals(filteredGroups.map(mergeGroup));
658
745
  return {
659
746
  rows,
660
747
  totalCount,
@@ -1,3 +1,4 @@
1
+ import { type OrderStage } from "./order-status";
1
2
  export interface SalesOrderDTO {
2
3
  id: string;
3
4
  orderNumber: string;
@@ -26,6 +27,18 @@ export interface SalesOrderDTO {
26
27
  bufferId?: string | null;
27
28
  bufferSize?: number;
28
29
  bufferKey?: string | null;
30
+ /** Ordernummers van alle orders in dezelfde buffer (samengevouwen rij). */
31
+ bufferOrderNumbers?: string[];
32
+ /** Interne ids van alle orders in dezelfde buffer. */
33
+ bufferOrderIds?: string[];
34
+ /** Aantal reserveringen binnen de buffer. */
35
+ reservationCount?: number;
36
+ /** Vertaalde weergavestatus (zie order-status.ts). */
37
+ stage?: OrderStage;
38
+ /** Vervoerder van de order (indien bekend). */
39
+ carrierName?: string | null;
40
+ /** Concrete ontbrekende gegevens, bv. "geen klant gekoppeld". */
41
+ incomplete?: string[];
29
42
  customer: {
30
43
  name: string;
31
44
  postalCode: string;
@@ -1 +1 @@
1
- {"version":3,"file":"salesorders-mapping.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders-mapping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"salesorders-mapping.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders-mapping.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  // Client-safe mapping: jsonb cache row -> SalesOrderDTO used by the UI.
2
2
  import { cratePackageName, loadCarrierName } from "./load-carrier-labels";
3
+ import { orderStageLabel } from "./order-status";
3
4
  function toNum(v, d = 0) {
4
5
  if (typeof v === "number")
5
6
  return v;
@@ -238,13 +239,7 @@ export function ordersToCsv(orders) {
238
239
  o.customer.postalCode,
239
240
  o.customer.city,
240
241
  o.deliveryAt,
241
- o.status.isCancelled
242
- ? "Geannuleerd"
243
- : o.status.isShipped
244
- ? "Verzonden"
245
- : o.status.isInvoiced
246
- ? "Gefactureerd"
247
- : "Open",
242
+ orderStageLabel(o.stage ?? "incoming"),
248
243
  ]);
249
244
  const escape = (v) => `"${String(v).replace(/"/g, '""')}"`;
250
245
  const csv = [header, ...rows].map((r) => r.map(escape).join(";")).join("\n");