dhpgemrdhs92092 1.250821.11342 → 1.250910.11839

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 (2) hide show
  1. package/index.js +505 -493
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! [dist-pg-services.js]; ===WEBPACK BUILD: 1.25.0821.1342=== */
1
+ /*! [dist-pg-services.js]; ===WEBPACK BUILD: 1.25.0910.1839=== */
2
2
  (() => {
3
3
  var e = {
4
4
  4466: (e, n, t) => {
@@ -994,7 +994,7 @@
994
994
  }
995
995
 
996
996
  function z(e, n, t, o) {
997
- var a = n && n.prototype instanceof h ? n : h,
997
+ var a = n && n.prototype instanceof m ? n : m,
998
998
  r = Object.create(a.prototype),
999
999
  p = new S(o || []);
1000
1000
  return i(r, "_invoke", {
@@ -1020,9 +1020,9 @@
1020
1020
  u = "suspendedYield",
1021
1021
  l = "executing",
1022
1022
  A = "completed",
1023
- m = {};
1023
+ h = {};
1024
1024
 
1025
- function h() {}
1025
+ function m() {}
1026
1026
 
1027
1027
  function f() {}
1028
1028
 
@@ -1034,7 +1034,7 @@
1034
1034
  var W = Object.getPrototypeOf,
1035
1035
  g = W && W(W(x([])));
1036
1036
  g && g !== a && r.call(g, c) && (_ = g);
1037
- var L = q.prototype = h.prototype = Object.create(_);
1037
+ var L = q.prototype = m.prototype = Object.create(_);
1038
1038
 
1039
1039
  function y(e) {
1040
1040
  ["next", "throw", "return"].forEach((function(n) {
@@ -1091,7 +1091,7 @@
1091
1091
  if (p) {
1092
1092
  var c = E(p, o);
1093
1093
  if (c) {
1094
- if (c === m) continue;
1094
+ if (c === h) continue;
1095
1095
  return c
1096
1096
  }
1097
1097
  }
@@ -1103,7 +1103,7 @@
1103
1103
  a = l;
1104
1104
  var s = d(n, t, o);
1105
1105
  if ("normal" === s.type) {
1106
- if (a = o.done ? A : u, s.arg === m) continue;
1106
+ if (a = o.done ? A : u, s.arg === h) continue;
1107
1107
  return {
1108
1108
  value: s.arg,
1109
1109
  done: o.done
@@ -1117,11 +1117,11 @@
1117
1117
  function E(n, t) {
1118
1118
  var o = t.method,
1119
1119
  a = n.iterator[o];
1120
- if (a === e) return t.delegate = null, "throw" === o && n.iterator.return && (t.method = "return", t.arg = e, E(n, t), "throw" === t.method) || "return" !== o && (t.method = "throw", t.arg = new TypeError("The iterator does not provide a '" + o + "' method")), m;
1120
+ if (a === e) return t.delegate = null, "throw" === o && n.iterator.return && (t.method = "return", t.arg = e, E(n, t), "throw" === t.method) || "return" !== o && (t.method = "throw", t.arg = new TypeError("The iterator does not provide a '" + o + "' method")), h;
1121
1121
  var r = d(a, n.iterator, t.arg);
1122
- if ("throw" === r.type) return t.method = "throw", t.arg = r.arg, t.delegate = null, m;
1122
+ if ("throw" === r.type) return t.method = "throw", t.arg = r.arg, t.delegate = null, h;
1123
1123
  var i = r.arg;
1124
- return i ? i.done ? (t[n.resultName] = i.value, t.next = n.nextLoc, "return" !== t.method && (t.method = "next", t.arg = e), t.delegate = null, m) : i : (t.method = "throw", t.arg = new TypeError("iterator result is not an object"), t.delegate = null, m)
1124
+ return i ? i.done ? (t[n.resultName] = i.value, t.next = n.nextLoc, "return" !== t.method && (t.method = "next", t.arg = e), t.delegate = null, h) : i : (t.method = "throw", t.arg = new TypeError("iterator result is not an object"), t.delegate = null, h)
1125
1125
  }
1126
1126
 
1127
1127
  function N(e) {
@@ -1246,16 +1246,16 @@
1246
1246
  }
1247
1247
  a && ("break" === e || "continue" === e) && a.tryLoc <= n && n <= a.finallyLoc && (a = null);
1248
1248
  var i = a ? a.completion : {};
1249
- return i.type = e, i.arg = n, a ? (this.method = "next", this.next = a.finallyLoc, m) : this.complete(i)
1249
+ return i.type = e, i.arg = n, a ? (this.method = "next", this.next = a.finallyLoc, h) : this.complete(i)
1250
1250
  },
1251
1251
  complete: function(e, n) {
1252
1252
  if ("throw" === e.type) throw e.arg;
1253
- return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && n && (this.next = n), m
1253
+ return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && n && (this.next = n), h
1254
1254
  },
1255
1255
  finish: function(e) {
1256
1256
  for (var n = this.tryEntries.length - 1; n >= 0; --n) {
1257
1257
  var t = this.tryEntries[n];
1258
- if (t.finallyLoc === e) return this.complete(t.completion, t.afterLoc), T(t), m
1258
+ if (t.finallyLoc === e) return this.complete(t.completion, t.afterLoc), T(t), h
1259
1259
  }
1260
1260
  },
1261
1261
  catch: function(e) {
@@ -1277,7 +1277,7 @@
1277
1277
  iterator: x(n),
1278
1278
  resultName: t,
1279
1279
  nextLoc: o
1280
- }, "next" === this.method && (this.arg = e), m
1280
+ }, "next" === this.method && (this.arg = e), h
1281
1281
  }
1282
1282
  }, o
1283
1283
  }
@@ -1406,7 +1406,7 @@
1406
1406
  }
1407
1407
 
1408
1408
  function z(e, n, t, o) {
1409
- var a = n && n.prototype instanceof h ? n : h,
1409
+ var a = n && n.prototype instanceof m ? n : m,
1410
1410
  r = Object.create(a.prototype),
1411
1411
  p = new S(o || []);
1412
1412
  return i(r, "_invoke", {
@@ -1432,9 +1432,9 @@
1432
1432
  u = "suspendedYield",
1433
1433
  l = "executing",
1434
1434
  A = "completed",
1435
- m = {};
1435
+ h = {};
1436
1436
 
1437
- function h() {}
1437
+ function m() {}
1438
1438
 
1439
1439
  function f() {}
1440
1440
 
@@ -1446,7 +1446,7 @@
1446
1446
  var W = Object.getPrototypeOf,
1447
1447
  g = W && W(W(x([])));
1448
1448
  g && g !== t && r.call(g, c) && (_ = g);
1449
- var L = q.prototype = h.prototype = Object.create(_);
1449
+ var L = q.prototype = m.prototype = Object.create(_);
1450
1450
 
1451
1451
  function y(e) {
1452
1452
  ["next", "throw", "return"].forEach((function(n) {
@@ -1503,7 +1503,7 @@
1503
1503
  if (p) {
1504
1504
  var c = E(p, o);
1505
1505
  if (c) {
1506
- if (c === m) continue;
1506
+ if (c === h) continue;
1507
1507
  return c
1508
1508
  }
1509
1509
  }
@@ -1515,7 +1515,7 @@
1515
1515
  a = l;
1516
1516
  var s = d(n, t, o);
1517
1517
  if ("normal" === s.type) {
1518
- if (a = o.done ? A : u, s.arg === m) continue;
1518
+ if (a = o.done ? A : u, s.arg === h) continue;
1519
1519
  return {
1520
1520
  value: s.arg,
1521
1521
  done: o.done
@@ -1529,11 +1529,11 @@
1529
1529
  function E(n, t) {
1530
1530
  var o = t.method,
1531
1531
  a = n.iterator[o];
1532
- if (a === e) return t.delegate = null, "throw" === o && n.iterator.return && (t.method = "return", t.arg = e, E(n, t), "throw" === t.method) || "return" !== o && (t.method = "throw", t.arg = new TypeError("The iterator does not provide a '" + o + "' method")), m;
1532
+ if (a === e) return t.delegate = null, "throw" === o && n.iterator.return && (t.method = "return", t.arg = e, E(n, t), "throw" === t.method) || "return" !== o && (t.method = "throw", t.arg = new TypeError("The iterator does not provide a '" + o + "' method")), h;
1533
1533
  var r = d(a, n.iterator, t.arg);
1534
- if ("throw" === r.type) return t.method = "throw", t.arg = r.arg, t.delegate = null, m;
1534
+ if ("throw" === r.type) return t.method = "throw", t.arg = r.arg, t.delegate = null, h;
1535
1535
  var i = r.arg;
1536
- return i ? i.done ? (t[n.resultName] = i.value, t.next = n.nextLoc, "return" !== t.method && (t.method = "next", t.arg = e), t.delegate = null, m) : i : (t.method = "throw", t.arg = new TypeError("iterator result is not an object"), t.delegate = null, m)
1536
+ return i ? i.done ? (t[n.resultName] = i.value, t.next = n.nextLoc, "return" !== t.method && (t.method = "next", t.arg = e), t.delegate = null, h) : i : (t.method = "throw", t.arg = new TypeError("iterator result is not an object"), t.delegate = null, h)
1537
1537
  }
1538
1538
 
1539
1539
  function N(e) {
@@ -1658,16 +1658,16 @@
1658
1658
  }
1659
1659
  a && ("break" === e || "continue" === e) && a.tryLoc <= n && n <= a.finallyLoc && (a = null);
1660
1660
  var i = a ? a.completion : {};
1661
- return i.type = e, i.arg = n, a ? (this.method = "next", this.next = a.finallyLoc, m) : this.complete(i)
1661
+ return i.type = e, i.arg = n, a ? (this.method = "next", this.next = a.finallyLoc, h) : this.complete(i)
1662
1662
  },
1663
1663
  complete: function(e, n) {
1664
1664
  if ("throw" === e.type) throw e.arg;
1665
- return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && n && (this.next = n), m
1665
+ return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && n && (this.next = n), h
1666
1666
  },
1667
1667
  finish: function(e) {
1668
1668
  for (var n = this.tryEntries.length - 1; n >= 0; --n) {
1669
1669
  var t = this.tryEntries[n];
1670
- if (t.finallyLoc === e) return this.complete(t.completion, t.afterLoc), T(t), m
1670
+ if (t.finallyLoc === e) return this.complete(t.completion, t.afterLoc), T(t), h
1671
1671
  }
1672
1672
  },
1673
1673
  catch: function(e) {
@@ -1689,7 +1689,7 @@
1689
1689
  iterator: x(n),
1690
1690
  resultName: t,
1691
1691
  nextLoc: o
1692
- }, "next" === this.method && (this.arg = e), m
1692
+ }, "next" === this.method && (this.arg = e), h
1693
1693
  }
1694
1694
  }, n
1695
1695
  }
@@ -1915,15 +1915,15 @@
1915
1915
  }
1916
1916
  return "application/json"
1917
1917
  }();
1918
- var m = (A.url + "").toLowerCase();
1918
+ var h = (A.url + "").toLowerCase();
1919
1919
  switch (!0) {
1920
- case m.startsWith("https://api.heroku.com"):
1920
+ case h.startsWith("https://api.heroku.com"):
1921
1921
  A.headers.Accept = "application/vnd.heroku+json; version=3";
1922
1922
  break;
1923
- case m.startsWith("https://api.github.com"):
1923
+ case h.startsWith("https://api.github.com"):
1924
1924
  A.headers.Accept = "application/vnd.github.v3+json";
1925
1925
  break;
1926
- case m.startsWith("https://api.ngrok.com"):
1926
+ case h.startsWith("https://api.ngrok.com"):
1927
1927
  A.headers["Ngrok-Version"] = 2
1928
1928
  }
1929
1929
  A.headers.Authorization = "Authorization" in A.headers ? A.headers.Authorization : p.isStringNonEmpty(o) ? o : p.isStringNonEmpty(s) ? "Basic ".concat(function(e) {
@@ -1944,7 +1944,7 @@
1944
1944
  }
1945
1945
  throw new Error("No valid method for Base64 encoding found in the current environment.")
1946
1946
  }("".concat(u, ":").concat(s))) : p.isStringNonEmpty(d) ? "Bearer ".concat(d) : void 0;
1947
- var h = function() {
1947
+ var m = function() {
1948
1948
  switch (M) {
1949
1949
  case b.BROWSER:
1950
1950
  case b.CHROME_EXTENSION:
@@ -1957,7 +1957,7 @@
1957
1957
  return "body"
1958
1958
  }
1959
1959
  }();
1960
- A[h] = function() {
1960
+ A[m] = function() {
1961
1961
  var e = function() {
1962
1962
  for (var e = ["content-type", "contenttype"], n = 0; n < e.length; n++)
1963
1963
  if (c.getPropertyValueIgnoreCaseForceEmpty(A, "headers.".concat(e[n])).toLowerCase().includes("application/x-www-form-urlencoded")) return !0;
@@ -2275,10 +2275,10 @@
2275
2275
  },
2276
2276
  logError: u,
2277
2277
  logStarted: function() {
2278
- return O("🚀- ".concat(p, "; 🅥:").concat("1.25.0821.1342"))
2278
+ return O("🚀- ".concat(p, "; 🅥:").concat("1.25.0910.1839"))
2279
2279
  },
2280
2280
  logEnded: function() {
2281
- return O("🔜 - ".concat(p, "; 🅥:").concat("1.25.0821.1342", " 🔚"))
2281
+ return O("🔜 - ".concat(p, "; 🅥:").concat("1.25.0910.1839", " 🔚"))
2282
2282
  },
2283
2283
  DirectoryPathLogs: c,
2284
2284
  logInfoObject: function(e) {
@@ -2381,7 +2381,7 @@
2381
2381
  }
2382
2382
 
2383
2383
  function z(e, n, t, o) {
2384
- var r = n && n.prototype instanceof h ? n : h,
2384
+ var r = n && n.prototype instanceof m ? n : m,
2385
2385
  i = Object.create(r.prototype),
2386
2386
  p = new S(o || []);
2387
2387
  return a(i, "_invoke", {
@@ -2407,9 +2407,9 @@
2407
2407
  u = "suspendedYield",
2408
2408
  l = "executing",
2409
2409
  A = "completed",
2410
- m = {};
2410
+ h = {};
2411
2411
 
2412
- function h() {}
2412
+ function m() {}
2413
2413
 
2414
2414
  function f() {}
2415
2415
 
@@ -2421,7 +2421,7 @@
2421
2421
  var W = Object.getPrototypeOf,
2422
2422
  g = W && W(W(x([])));
2423
2423
  g && g !== t && o.call(g, c) && (_ = g);
2424
- var L = q.prototype = h.prototype = Object.create(_);
2424
+ var L = q.prototype = m.prototype = Object.create(_);
2425
2425
 
2426
2426
  function y(e) {
2427
2427
  ["next", "throw", "return"].forEach((function(n) {
@@ -2478,7 +2478,7 @@
2478
2478
  if (p) {
2479
2479
  var c = E(p, o);
2480
2480
  if (c) {
2481
- if (c === m) continue;
2481
+ if (c === h) continue;
2482
2482
  return c
2483
2483
  }
2484
2484
  }
@@ -2490,7 +2490,7 @@
2490
2490
  a = l;
2491
2491
  var s = d(n, t, o);
2492
2492
  if ("normal" === s.type) {
2493
- if (a = o.done ? A : u, s.arg === m) continue;
2493
+ if (a = o.done ? A : u, s.arg === h) continue;
2494
2494
  return {
2495
2495
  value: s.arg,
2496
2496
  done: o.done
@@ -2504,11 +2504,11 @@
2504
2504
  function E(n, t) {
2505
2505
  var o = t.method,
2506
2506
  a = n.iterator[o];
2507
- if (a === e) return t.delegate = null, "throw" === o && n.iterator.return && (t.method = "return", t.arg = e, E(n, t), "throw" === t.method) || "return" !== o && (t.method = "throw", t.arg = new TypeError("The iterator does not provide a '" + o + "' method")), m;
2507
+ if (a === e) return t.delegate = null, "throw" === o && n.iterator.return && (t.method = "return", t.arg = e, E(n, t), "throw" === t.method) || "return" !== o && (t.method = "throw", t.arg = new TypeError("The iterator does not provide a '" + o + "' method")), h;
2508
2508
  var r = d(a, n.iterator, t.arg);
2509
- if ("throw" === r.type) return t.method = "throw", t.arg = r.arg, t.delegate = null, m;
2509
+ if ("throw" === r.type) return t.method = "throw", t.arg = r.arg, t.delegate = null, h;
2510
2510
  var i = r.arg;
2511
- return i ? i.done ? (t[n.resultName] = i.value, t.next = n.nextLoc, "return" !== t.method && (t.method = "next", t.arg = e), t.delegate = null, m) : i : (t.method = "throw", t.arg = new TypeError("iterator result is not an object"), t.delegate = null, m)
2511
+ return i ? i.done ? (t[n.resultName] = i.value, t.next = n.nextLoc, "return" !== t.method && (t.method = "next", t.arg = e), t.delegate = null, h) : i : (t.method = "throw", t.arg = new TypeError("iterator result is not an object"), t.delegate = null, h)
2512
2512
  }
2513
2513
 
2514
2514
  function N(e) {
@@ -2633,16 +2633,16 @@
2633
2633
  }
2634
2634
  r && ("break" === e || "continue" === e) && r.tryLoc <= n && n <= r.finallyLoc && (r = null);
2635
2635
  var i = r ? r.completion : {};
2636
- return i.type = e, i.arg = n, r ? (this.method = "next", this.next = r.finallyLoc, m) : this.complete(i)
2636
+ return i.type = e, i.arg = n, r ? (this.method = "next", this.next = r.finallyLoc, h) : this.complete(i)
2637
2637
  },
2638
2638
  complete: function(e, n) {
2639
2639
  if ("throw" === e.type) throw e.arg;
2640
- return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && n && (this.next = n), m
2640
+ return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && n && (this.next = n), h
2641
2641
  },
2642
2642
  finish: function(e) {
2643
2643
  for (var n = this.tryEntries.length - 1; n >= 0; --n) {
2644
2644
  var t = this.tryEntries[n];
2645
- if (t.finallyLoc === e) return this.complete(t.completion, t.afterLoc), T(t), m
2645
+ if (t.finallyLoc === e) return this.complete(t.completion, t.afterLoc), T(t), h
2646
2646
  }
2647
2647
  },
2648
2648
  catch: function(e) {
@@ -2664,7 +2664,7 @@
2664
2664
  iterator: x(n),
2665
2665
  resultName: t,
2666
2666
  nextLoc: o
2667
- }, "next" === this.method && (this.arg = e), m
2667
+ }, "next" === this.method && (this.arg = e), h
2668
2668
  }
2669
2669
  }, n
2670
2670
  }
@@ -2864,7 +2864,7 @@
2864
2864
  }
2865
2865
 
2866
2866
  function z(e, n, t, o) {
2867
- var a = n && n.prototype instanceof h ? n : h,
2867
+ var a = n && n.prototype instanceof m ? n : m,
2868
2868
  r = Object.create(a.prototype),
2869
2869
  p = new S(o || []);
2870
2870
  return i(r, "_invoke", {
@@ -2890,9 +2890,9 @@
2890
2890
  u = "suspendedYield",
2891
2891
  l = "executing",
2892
2892
  A = "completed",
2893
- m = {};
2893
+ h = {};
2894
2894
 
2895
- function h() {}
2895
+ function m() {}
2896
2896
 
2897
2897
  function f() {}
2898
2898
 
@@ -2904,7 +2904,7 @@
2904
2904
  var W = Object.getPrototypeOf,
2905
2905
  g = W && W(W(x([])));
2906
2906
  g && g !== t && r.call(g, c) && (_ = g);
2907
- var L = q.prototype = h.prototype = Object.create(_);
2907
+ var L = q.prototype = m.prototype = Object.create(_);
2908
2908
 
2909
2909
  function y(e) {
2910
2910
  ["next", "throw", "return"].forEach((function(n) {
@@ -2961,7 +2961,7 @@
2961
2961
  if (p) {
2962
2962
  var c = E(p, o);
2963
2963
  if (c) {
2964
- if (c === m) continue;
2964
+ if (c === h) continue;
2965
2965
  return c
2966
2966
  }
2967
2967
  }
@@ -2973,7 +2973,7 @@
2973
2973
  a = l;
2974
2974
  var s = d(n, t, o);
2975
2975
  if ("normal" === s.type) {
2976
- if (a = o.done ? A : u, s.arg === m) continue;
2976
+ if (a = o.done ? A : u, s.arg === h) continue;
2977
2977
  return {
2978
2978
  value: s.arg,
2979
2979
  done: o.done
@@ -2987,11 +2987,11 @@
2987
2987
  function E(n, t) {
2988
2988
  var o = t.method,
2989
2989
  a = n.iterator[o];
2990
- if (a === e) return t.delegate = null, "throw" === o && n.iterator.return && (t.method = "return", t.arg = e, E(n, t), "throw" === t.method) || "return" !== o && (t.method = "throw", t.arg = new TypeError("The iterator does not provide a '" + o + "' method")), m;
2990
+ if (a === e) return t.delegate = null, "throw" === o && n.iterator.return && (t.method = "return", t.arg = e, E(n, t), "throw" === t.method) || "return" !== o && (t.method = "throw", t.arg = new TypeError("The iterator does not provide a '" + o + "' method")), h;
2991
2991
  var r = d(a, n.iterator, t.arg);
2992
- if ("throw" === r.type) return t.method = "throw", t.arg = r.arg, t.delegate = null, m;
2992
+ if ("throw" === r.type) return t.method = "throw", t.arg = r.arg, t.delegate = null, h;
2993
2993
  var i = r.arg;
2994
- return i ? i.done ? (t[n.resultName] = i.value, t.next = n.nextLoc, "return" !== t.method && (t.method = "next", t.arg = e), t.delegate = null, m) : i : (t.method = "throw", t.arg = new TypeError("iterator result is not an object"), t.delegate = null, m)
2994
+ return i ? i.done ? (t[n.resultName] = i.value, t.next = n.nextLoc, "return" !== t.method && (t.method = "next", t.arg = e), t.delegate = null, h) : i : (t.method = "throw", t.arg = new TypeError("iterator result is not an object"), t.delegate = null, h)
2995
2995
  }
2996
2996
 
2997
2997
  function N(e) {
@@ -3116,16 +3116,16 @@
3116
3116
  }
3117
3117
  a && ("break" === e || "continue" === e) && a.tryLoc <= n && n <= a.finallyLoc && (a = null);
3118
3118
  var i = a ? a.completion : {};
3119
- return i.type = e, i.arg = n, a ? (this.method = "next", this.next = a.finallyLoc, m) : this.complete(i)
3119
+ return i.type = e, i.arg = n, a ? (this.method = "next", this.next = a.finallyLoc, h) : this.complete(i)
3120
3120
  },
3121
3121
  complete: function(e, n) {
3122
3122
  if ("throw" === e.type) throw e.arg;
3123
- return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && n && (this.next = n), m
3123
+ return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && n && (this.next = n), h
3124
3124
  },
3125
3125
  finish: function(e) {
3126
3126
  for (var n = this.tryEntries.length - 1; n >= 0; --n) {
3127
3127
  var t = this.tryEntries[n];
3128
- if (t.finallyLoc === e) return this.complete(t.completion, t.afterLoc), T(t), m
3128
+ if (t.finallyLoc === e) return this.complete(t.completion, t.afterLoc), T(t), h
3129
3129
  }
3130
3130
  },
3131
3131
  catch: function(e) {
@@ -3147,7 +3147,7 @@
3147
3147
  iterator: x(n),
3148
3148
  resultName: t,
3149
3149
  nextLoc: o
3150
- }, "next" === this.method && (this.arg = e), m
3150
+ }, "next" === this.method && (this.arg = e), h
3151
3151
  }
3152
3152
  }, n
3153
3153
  }
@@ -3374,7 +3374,7 @@
3374
3374
  }
3375
3375
 
3376
3376
  function z(e, n, t, o) {
3377
- var a = n && n.prototype instanceof h ? n : h,
3377
+ var a = n && n.prototype instanceof m ? n : m,
3378
3378
  r = Object.create(a.prototype),
3379
3379
  p = new S(o || []);
3380
3380
  return i(r, "_invoke", {
@@ -3400,9 +3400,9 @@
3400
3400
  u = "suspendedYield",
3401
3401
  l = "executing",
3402
3402
  A = "completed",
3403
- m = {};
3403
+ h = {};
3404
3404
 
3405
- function h() {}
3405
+ function m() {}
3406
3406
 
3407
3407
  function f() {}
3408
3408
 
@@ -3414,7 +3414,7 @@
3414
3414
  var W = Object.getPrototypeOf,
3415
3415
  g = W && W(W(x([])));
3416
3416
  g && g !== t && o.call(g, c) && (_ = g);
3417
- var L = q.prototype = h.prototype = Object.create(_);
3417
+ var L = q.prototype = m.prototype = Object.create(_);
3418
3418
 
3419
3419
  function y(e) {
3420
3420
  ["next", "throw", "return"].forEach((function(n) {
@@ -3471,7 +3471,7 @@
3471
3471
  if (p) {
3472
3472
  var c = E(p, o);
3473
3473
  if (c) {
3474
- if (c === m) continue;
3474
+ if (c === h) continue;
3475
3475
  return c
3476
3476
  }
3477
3477
  }
@@ -3483,7 +3483,7 @@
3483
3483
  a = l;
3484
3484
  var s = d(n, t, o);
3485
3485
  if ("normal" === s.type) {
3486
- if (a = o.done ? A : u, s.arg === m) continue;
3486
+ if (a = o.done ? A : u, s.arg === h) continue;
3487
3487
  return {
3488
3488
  value: s.arg,
3489
3489
  done: o.done
@@ -3497,11 +3497,11 @@
3497
3497
  function E(n, t) {
3498
3498
  var o = t.method,
3499
3499
  a = n.iterator[o];
3500
- if (a === e) return t.delegate = null, "throw" === o && n.iterator.return && (t.method = "return", t.arg = e, E(n, t), "throw" === t.method) || "return" !== o && (t.method = "throw", t.arg = new TypeError("The iterator does not provide a '" + o + "' method")), m;
3500
+ if (a === e) return t.delegate = null, "throw" === o && n.iterator.return && (t.method = "return", t.arg = e, E(n, t), "throw" === t.method) || "return" !== o && (t.method = "throw", t.arg = new TypeError("The iterator does not provide a '" + o + "' method")), h;
3501
3501
  var r = d(a, n.iterator, t.arg);
3502
- if ("throw" === r.type) return t.method = "throw", t.arg = r.arg, t.delegate = null, m;
3502
+ if ("throw" === r.type) return t.method = "throw", t.arg = r.arg, t.delegate = null, h;
3503
3503
  var i = r.arg;
3504
- return i ? i.done ? (t[n.resultName] = i.value, t.next = n.nextLoc, "return" !== t.method && (t.method = "next", t.arg = e), t.delegate = null, m) : i : (t.method = "throw", t.arg = new TypeError("iterator result is not an object"), t.delegate = null, m)
3504
+ return i ? i.done ? (t[n.resultName] = i.value, t.next = n.nextLoc, "return" !== t.method && (t.method = "next", t.arg = e), t.delegate = null, h) : i : (t.method = "throw", t.arg = new TypeError("iterator result is not an object"), t.delegate = null, h)
3505
3505
  }
3506
3506
 
3507
3507
  function N(e) {
@@ -3626,16 +3626,16 @@
3626
3626
  }
3627
3627
  r && ("break" === e || "continue" === e) && r.tryLoc <= n && n <= r.finallyLoc && (r = null);
3628
3628
  var i = r ? r.completion : {};
3629
- return i.type = e, i.arg = n, r ? (this.method = "next", this.next = r.finallyLoc, m) : this.complete(i)
3629
+ return i.type = e, i.arg = n, r ? (this.method = "next", this.next = r.finallyLoc, h) : this.complete(i)
3630
3630
  },
3631
3631
  complete: function(e, n) {
3632
3632
  if ("throw" === e.type) throw e.arg;
3633
- return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && n && (this.next = n), m
3633
+ return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && n && (this.next = n), h
3634
3634
  },
3635
3635
  finish: function(e) {
3636
3636
  for (var n = this.tryEntries.length - 1; n >= 0; --n) {
3637
3637
  var t = this.tryEntries[n];
3638
- if (t.finallyLoc === e) return this.complete(t.completion, t.afterLoc), T(t), m
3638
+ if (t.finallyLoc === e) return this.complete(t.completion, t.afterLoc), T(t), h
3639
3639
  }
3640
3640
  },
3641
3641
  catch: function(e) {
@@ -3657,7 +3657,7 @@
3657
3657
  iterator: x(n),
3658
3658
  resultName: t,
3659
3659
  nextLoc: o
3660
- }, "next" === this.method && (this.arg = e), m
3660
+ }, "next" === this.method && (this.arg = e), h
3661
3661
  }
3662
3662
  }, n
3663
3663
  }
@@ -3699,8 +3699,8 @@
3699
3699
  u = t(932),
3700
3700
  l = (t(4916), t(4067)),
3701
3701
  A = t(3854),
3702
- m = t(9e3),
3703
- h = t(3460),
3702
+ h = t(9e3),
3703
+ m = t(3460),
3704
3704
  f = t(763),
3705
3705
  q = u.env.PGDATA_USER || "",
3706
3706
  _ = u.env.PGDATA_HOST || "",
@@ -3745,7 +3745,7 @@
3745
3745
  return e.prev = 0, e.next = 3, y.connect();
3746
3746
  case 3:
3747
3747
  return c = e.sent, A.initializePgClient(c), A.initializePgPool(y), t = "", e.next = 9, p(r().mark((function e() {
3748
- var n, t, o, a, i, p, z, d, O, A, h;
3748
+ var n, t, o, a, i, p, z, d, O, A, m;
3749
3749
  return r().wrap((function(e) {
3750
3750
  for (;;) switch (e.prev = e.next) {
3751
3751
  case 0:
@@ -3770,7 +3770,7 @@
3770
3770
  force: !0
3771
3771
  })
3772
3772
  } catch (e) {
3773
- m.logError(e, "Lỗi xóa file trong checkTable.needDir: ".concat(n))
3773
+ h.logError(e, "Lỗi xóa file trong checkTable.needDir: ".concat(n))
3774
3774
  }
3775
3775
  })) : b.mkdirSync(t, {
3776
3776
  recursive: !0
@@ -3779,11 +3779,11 @@
3779
3779
  needDir: t
3780
3780
  }
3781
3781
  } catch (n) {
3782
- throw m.logError("Lỗi khi tạo thư mục ".concat(e, ": ").concat(n.message)), n
3782
+ throw h.logError("Lỗi khi tạo thư mục ".concat(e, ": ").concat(n.message)), n
3783
3783
  }
3784
3784
  }(), t = n.successDir, o = n.needDir, a = function(e) {
3785
3785
  return M.createHash("sha256").update(e).digest("hex")
3786
- }, i = l.SQL.initSQLs, p = [], m.logInfo("Đang kiểm tra cấu trúc SQL cần cập nhật: [count: ".concat(i.length, "] ....")), z = r().mark((function e(n) {
3786
+ }, i = l.SQL.initSQLs, p = [], h.logInfo("Đang kiểm tra cấu trúc SQL cần cập nhật: [count: ".concat(i.length, "] ....")), z = r().mark((function e(n) {
3787
3787
  var c, M, z, d;
3788
3788
  return r().wrap((function(e) {
3789
3789
  for (;;) switch (e.prev = e.next) {
@@ -3794,7 +3794,7 @@
3794
3794
  return new RegExp("^\\d{2}\\.".concat(M, "\\.sql$")).test(e)
3795
3795
  }))
3796
3796
  } catch (e) {
3797
- return m.logError(e, "Lỗi kiểm tra fileExists[".concat(n, "/").concat(i.length, "]: ").concat(z)), !1
3797
+ return h.logError(e, "Lỗi kiểm tra fileExists[".concat(n, "/").concat(i.length, "]: ").concat(z)), !1
3798
3798
  }
3799
3799
  }()) {
3800
3800
  e.next = 6;
@@ -3835,20 +3835,20 @@
3835
3835
  e.next = 19;
3836
3836
  break
3837
3837
  }
3838
- return m.logInfo("Không thực hiện checkTable do EXCUTE_CREATETABLE = ".concat(E)), e.abrupt("return");
3838
+ return h.logInfo("Không thực hiện checkTable do EXCUTE_CREATETABLE = ".concat(E)), e.abrupt("return");
3839
3839
  case 19:
3840
3840
  if (0 !== p.length) {
3841
3841
  e.next = 22;
3842
3842
  break
3843
3843
  }
3844
- return m.logInfo("Đã cập nhật hết cấu trúc!!!"), e.abrupt("return");
3844
+ return h.logInfo("Đã cập nhật hết cấu trúc!!!"), e.abrupt("return");
3845
3845
  case 22:
3846
3846
  O = p.length, A = r().mark((function e() {
3847
3847
  var n, a, i, M, z, d;
3848
3848
  return r().wrap((function(e) {
3849
3849
  for (;;) switch (e.prev = e.next) {
3850
3850
  case 0:
3851
- return n = p[h], a = n.sqlItem, i = n.hashName, M = n.nameFileInNeedDir, z = s.join(t, "".concat(i, ".sql")), d = function() {
3851
+ return n = p[m], a = n.sqlItem, i = n.hashName, M = n.nameFileInNeedDir, z = s.join(t, "".concat(i, ".sql")), d = function() {
3852
3852
  b.writeFileSync(z, a, {
3853
3853
  encoding: "utf8"
3854
3854
  });
@@ -3859,9 +3859,9 @@
3859
3859
  force: !0
3860
3860
  })
3861
3861
  } catch (n) {
3862
- m.logError(n, "Lỗi xóa file trong checkTable.saveSuccessHash: ".concat(e))
3862
+ h.logError(n, "Lỗi xóa file trong checkTable.saveSuccessHash: ".concat(e))
3863
3863
  }
3864
- }, e.prev = 3, m.logInfo("Cập nhật SQL cấu trúc: [".concat(h + 1, "/").concat(O, "] ....")), e.next = 7, c.query(a);
3864
+ }, e.prev = 3, h.logInfo("Cập nhật SQL cấu trúc: [".concat(m + 1, "/").concat(O, "] ....")), e.next = 7, c.query(a);
3865
3865
  case 7:
3866
3866
  d(), e.next = 30;
3867
3867
  break;
@@ -3870,17 +3870,17 @@
3870
3870
  e.next = 22;
3871
3871
  break
3872
3872
  }
3873
- return m.logWarn("Phát hiện lỗi syntax FUNCTION: ".concat(e.t0.message)), m.logInfo("Thực hiện lại đổi ' EXECUTE FUNCTION '=>' EXECUTE PROCEDURE ' checkTable [".concat(h + 1, "/").concat(O, "]....")), a = a.replace("EXECUTE FUNCTION", "EXECUTE PROCEDURE"), e.next = 19, c.query(a);
3873
+ return h.logWarn("Phát hiện lỗi syntax FUNCTION: ".concat(e.t0.message)), h.logInfo("Thực hiện lại đổi ' EXECUTE FUNCTION '=>' EXECUTE PROCEDURE ' checkTable [".concat(m + 1, "/").concat(O, "]....")), a = a.replace("EXECUTE FUNCTION", "EXECUTE PROCEDURE"), e.next = 19, c.query(a);
3874
3874
  case 19:
3875
3875
  d(), e.next = 24;
3876
3876
  break;
3877
3877
  case 22:
3878
- m.logError(e.t0, "Error checkTable"), m.logInfo(a, "Error SQL");
3878
+ h.logError(e.t0, "Error checkTable"), h.logInfo(a, "Error SQL");
3879
3879
  case 24:
3880
3880
  e.next = 30;
3881
3881
  break;
3882
3882
  case 26:
3883
- e.prev = 26, e.t1 = e.catch(12), m.logError(e.t1, "Child Error checkTable"), m.logInfo(a, "Child Error SQL");
3883
+ e.prev = 26, e.t1 = e.catch(12), h.logError(e.t1, "Child Error checkTable"), h.logInfo(a, "Child Error SQL");
3884
3884
  case 30:
3885
3885
  case "end":
3886
3886
  return e.stop()
@@ -3889,15 +3889,15 @@
3889
3889
  [3, 10],
3890
3890
  [12, 26]
3891
3891
  ])
3892
- })), h = 0;
3892
+ })), m = 0;
3893
3893
  case 25:
3894
- if (!(h < p.length)) {
3894
+ if (!(m < p.length)) {
3895
3895
  e.next = 30;
3896
3896
  break
3897
3897
  }
3898
3898
  return e.delegateYield(A(), "t1", 27);
3899
3899
  case 27:
3900
- h++, e.next = 25;
3900
+ m++, e.next = 25;
3901
3901
  break;
3902
3902
  case 30:
3903
3903
  case "end":
@@ -3921,7 +3921,7 @@
3921
3921
  t = "--syncAllDanhMuc", e.next = 11;
3922
3922
  break;
3923
3923
  case 8:
3924
- e.prev = 8, e.t0 = e.catch(0), m.logError(e.t0, "syncAllDanhMuc");
3924
+ e.prev = 8, e.t0 = e.catch(0), h.logError(e.t0, "syncAllDanhMuc");
3925
3925
  case 11:
3926
3926
  case "end":
3927
3927
  return e.stop()
@@ -3946,7 +3946,7 @@
3946
3946
  t = "--syncBnnoitru", e.next = 11;
3947
3947
  break;
3948
3948
  case 8:
3949
- e.prev = 8, e.t0 = e.catch(0), m.logError(e.t0, "syncBnnoitru");
3949
+ e.prev = 8, e.t0 = e.catch(0), h.logError(e.t0, "syncBnnoitru");
3950
3950
  case 11:
3951
3951
  case "end":
3952
3952
  return e.stop()
@@ -3973,7 +3973,7 @@
3973
3973
  e.next = 12;
3974
3974
  break;
3975
3975
  case 9:
3976
- e.prev = 9, e.t0 = e.catch(0), m.logError(e.t0, "executeExportSQLCreateTable");
3976
+ e.prev = 9, e.t0 = e.catch(0), h.logError(e.t0, "executeExportSQLCreateTable");
3977
3977
  case 12:
3978
3978
  t = "--executeExportSQLCreateTable";
3979
3979
  case 13:
@@ -4000,7 +4000,7 @@
4000
4000
  t = "--psdangkySyncDCHG", e.next = 11;
4001
4001
  break;
4002
4002
  case 8:
4003
- e.prev = 8, e.t0 = e.catch(0), m.logError(e.t0, "psdangkySyncDCHG");
4003
+ e.prev = 8, e.t0 = e.catch(0), h.logError(e.t0, "psdangkySyncDCHG");
4004
4004
  case 11:
4005
4005
  case "end":
4006
4006
  return e.stop()
@@ -4025,7 +4025,7 @@
4025
4025
  t = "--checkHosoEMR", e.next = 11;
4026
4026
  break;
4027
4027
  case 8:
4028
- e.prev = 8, e.t0 = e.catch(0), m.logError(e.t0, "checkHosoEMR");
4028
+ e.prev = 8, e.t0 = e.catch(0), h.logError(e.t0, "checkHosoEMR");
4029
4029
  case 11:
4030
4030
  case "end":
4031
4031
  return e.stop()
@@ -4048,17 +4048,17 @@
4048
4048
  case 0:
4049
4049
  return e.prev = 0, e.next = 3, A.processUnprocessedNotifications(v);
4050
4050
  case 3:
4051
- m.logInfo('Xử lý thành công, chờ RETRY_INTERVAL:" + '.concat(R, ' + " giây trước khi tiếp tục...')), e.next = 9;
4051
+ h.logInfo('Xử lý thành công, chờ RETRY_INTERVAL:" + '.concat(R, ' + " giây trước khi tiếp tục...')), e.next = 9;
4052
4052
  break;
4053
4053
  case 6:
4054
- e.prev = 6, e.t0 = e.catch(0), m.logError(e.t0, "processUnprocessedNotifications");
4054
+ e.prev = 6, e.t0 = e.catch(0), h.logError(e.t0, "processUnprocessedNotifications");
4055
4055
  case 9:
4056
4056
  return e.prev = 9, e.next = 12, p(r().mark((function e() {
4057
4057
  var n, t, o;
4058
4058
  return r().wrap((function(e) {
4059
4059
  for (;;) switch (e.prev = e.next) {
4060
4060
  case 0:
4061
- return m.logInfo("isMainIsLived:::".concat(6e4)), n = "is-lived-".concat(Date.now()), u.send(n), m.logInfo("isMainIsLived.send('".concat(n, "')")), t = new Promise((function(e, n) {
4061
+ return h.logInfo("isMainIsLived:::".concat(6e4)), n = "is-lived-".concat(Date.now()), u.send(n), h.logInfo("isMainIsLived.send('".concat(n, "')")), t = new Promise((function(e, n) {
4062
4062
  return setTimeout((function() {
4063
4063
  return n("Timeout")
4064
4064
  }), 6e4)
@@ -4070,7 +4070,7 @@
4070
4070
  case 10:
4071
4071
  return e.abrupt("return", e.sent);
4072
4072
  case 13:
4073
- return e.prev = 13, e.t0 = e.catch(7), m.logError(e.t0, "isMainIsLived"), e.abrupt("return", !1);
4073
+ return e.prev = 13, e.t0 = e.catch(7), h.logError(e.t0, "isMainIsLived"), e.abrupt("return", !1);
4074
4074
  case 17:
4075
4075
  case "end":
4076
4076
  return e.stop()
@@ -4080,7 +4080,7 @@
4080
4080
  ])
4081
4081
  })))();
4082
4082
  case 12:
4083
- if (t = e.sent, m.logInfo("isMainIsLived:::".concat(t)), !0 !== t) {
4083
+ if (t = e.sent, h.logInfo("isMainIsLived:::".concat(t)), !0 !== t) {
4084
4084
  e.next = 19;
4085
4085
  break
4086
4086
  }
@@ -4116,7 +4116,7 @@
4116
4116
  a(), e(!1)
4117
4117
  }), n);
4118
4118
  o = function(n) {
4119
- m.logInfo("Tiến trình con nhận được thông điệp: ".concat(n)), n === t && (a(), clearTimeout(r), e(!0))
4119
+ h.logInfo("Tiến trình con nhận được thông điệp: ".concat(n)), n === t && (a(), clearTimeout(r), e(!0))
4120
4120
  }, u.on("message", o), u.send(t)
4121
4121
  })));
4122
4122
  case 3:
@@ -4136,26 +4136,26 @@
4136
4136
  case 0:
4137
4137
  return e.prev = 1, b++, e.next = 5, A.processUnprocessedNotifications(v);
4138
4138
  case 5:
4139
- return m.logInfo("Đã xử lý processUnprocessedNotifications: ".concat(b)), e.next = 8, i(6e4);
4139
+ return h.logInfo("Đã xử lý processUnprocessedNotifications: ".concat(b)), e.next = 8, i(6e4);
4140
4140
  case 8:
4141
- if (n = e.sent, m.logInfoObject(o(o({
4141
+ if (n = e.sent, h.logInfoObject(o(o({
4142
4142
  isAlive: n
4143
4143
  }, "typeof isAlive", a(n)), "countRunning", b), "checkMainProcessAlive"), n) {
4144
4144
  e.next = 13;
4145
4145
  break
4146
4146
  }
4147
- return m.logInfo("Main process không phản hồi, dừng worker"), e.abrupt("break", 26);
4147
+ return h.logInfo("Main process không phản hồi, dừng worker"), e.abrupt("break", 26);
4148
4148
  case 13:
4149
4149
  e.next = 18;
4150
4150
  break;
4151
4151
  case 15:
4152
- e.prev = 15, e.t0 = e.catch(1), m.logError(e.t0, "startNotificationProcessing");
4152
+ e.prev = 15, e.t0 = e.catch(1), h.logError(e.t0, "startNotificationProcessing");
4153
4153
  case 18:
4154
- return e.prev = 18, m.logInfo("Đang chờ ".concat(R, " ms")), e.next = 22, new Promise((function(e) {
4154
+ return e.prev = 18, h.logInfo("Đang chờ ".concat(R, " ms")), e.next = 22, new Promise((function(e) {
4155
4155
  return setTimeout(e, R)
4156
4156
  }));
4157
4157
  case 22:
4158
- return m.logInfo("Đã chờ ".concat(R, " ms")), e.finish(18);
4158
+ return h.logInfo("Đã chờ ".concat(R, " ms")), e.finish(18);
4159
4159
  case 24:
4160
4160
  e.next = 0;
4161
4161
  break;
@@ -4176,12 +4176,12 @@
4176
4176
  }
4177
4177
  return e.abrupt("return");
4178
4178
  case 6:
4179
- return t = "--processUnprocessedNotifications", b = void 0 === (s = {}.countRunning) ? 0 : s, m.logInfo("===execute_process_notifications==="), e.next = 11, c();
4179
+ return t = "--processUnprocessedNotifications", b = void 0 === (s = {}.countRunning) ? 0 : s, h.logInfo("===execute_process_notifications==="), e.next = 11, c();
4180
4180
  case 11:
4181
4181
  e.next = 16;
4182
4182
  break;
4183
4183
  case 13:
4184
- e.prev = 13, e.t0 = e.catch(0), m.logError(e.t0, "processUnprocessedNotifications");
4184
+ e.prev = 13, e.t0 = e.catch(0), h.logError(e.t0, "processUnprocessedNotifications");
4185
4185
  case 16:
4186
4186
  case "end":
4187
4187
  return e.stop()
@@ -4191,14 +4191,14 @@
4191
4191
  ])
4192
4192
  })))();
4193
4193
  case 27:
4194
- return e.sent, "" !== t && (m.logInfo("📴 Exit process by: ".concat(t)), u.exit(0)), e.next = 31, p(r().mark((function e() {
4194
+ return e.sent, "" !== t && (h.logInfo("📴 Exit process by: ".concat(t)), u.exit(0)), e.next = 31, p(r().mark((function e() {
4195
4195
  return r().wrap((function(e) {
4196
4196
  for (;;) switch (e.prev = e.next) {
4197
4197
  case 0:
4198
4198
  try {
4199
- h.dotEnvToCodeRun(u.env.CODE_RUN_KEY || "badt")
4199
+ m.dotEnvToCodeRun(u.env.CODE_RUN_KEY || "badt")
4200
4200
  } catch (e) {
4201
- m.logError(e, "saveCodeRun")
4201
+ h.logError(e, "saveCodeRun")
4202
4202
  }
4203
4203
  case 1:
4204
4204
  case "end":
@@ -4242,7 +4242,7 @@
4242
4242
  return t.apply(this, arguments)
4243
4243
  }, e.next = 4, n();
4244
4244
  case 4:
4245
- m.logInfo("pg-services-emr-dhs, version: ".concat(u.env.WEBPACK_BUILD_VERSION)), m.logInfoObject({
4245
+ h.logInfo("pg-services-emr-dhs, version: ".concat(u.env.WEBPACK_BUILD_VERSION)), h.logInfoObject({
4246
4246
  PGDATA_HOST: _,
4247
4247
  PGDATA_DATABASE: W,
4248
4248
  PGDATA_PORT: L
@@ -4282,22 +4282,22 @@
4282
4282
  var e = O.spawn("node", [__filename, "--psdangkySyncDCHG"], {
4283
4283
  stdio: "pipe"
4284
4284
  });
4285
- m.logInfo("Execute psdangkySyncDCHG started"), e.stdout.on("data", (function(e) {
4286
- return m.logInfoObject({
4285
+ h.logInfo("Execute psdangkySyncDCHG started"), e.stdout.on("data", (function(e) {
4286
+ return h.logInfoObject({
4287
4287
  stdout: e.toString().trim()
4288
4288
  }, "psdangkySyncDCHG")
4289
4289
  })), e.stderr.on("data", (function(e) {
4290
- return m.logInfoObject({
4290
+ return h.logInfoObject({
4291
4291
  stderr: e.toString().trim()
4292
4292
  }, "psdangkySyncDCHG")
4293
4293
  })), e.on("close", (function(e) {
4294
- return m.logInfo("psdangkySyncDCHG ".concat(0 === e ? "completed" : "failed", " (").concat(e, ")"))
4294
+ return h.logInfo("psdangkySyncDCHG ".concat(0 === e ? "completed" : "failed", " (").concat(e, ")"))
4295
4295
  })), e.on("error", (function(e) {
4296
- return m.logError("psdangkySyncDCHG spawn error: ".concat(e.message))
4296
+ return h.logError("psdangkySyncDCHG spawn error: ".concat(e.message))
4297
4297
  }));
4298
4298
  var n = 6e5;
4299
4299
  setTimeout((function() {
4300
- e.killed || (m.logInfo("psdangkySyncDCHG timeout after ".concat(n, "(ms), terminating...")), e.kill("SIGTERM"))
4300
+ e.killed || (h.logInfo("psdangkySyncDCHG timeout after ".concat(n, "(ms), terminating...")), e.kill("SIGTERM"))
4301
4301
  }), n)
4302
4302
  }), {
4303
4303
  scheduled: !0,
@@ -4310,24 +4310,24 @@
4310
4310
  t = function() {
4311
4311
  n = !1, e = null
4312
4312
  };
4313
- m.logInfo("Khởi tạo processUnprocessedNotifications");
4313
+ h.logInfo("Khởi tạo processUnprocessedNotifications");
4314
4314
  d.schedule("0 */".concat(3, " * * * *"), (function() {
4315
- m.logInfo("Khởi động processUnprocessedNotifications sau mỗi ".concat(3, " phút...")), o()
4315
+ h.logInfo("Khởi động processUnprocessedNotifications sau mỗi ".concat(3, " phút...")), o()
4316
4316
  })), o()
4317
4317
  }
4318
4318
 
4319
4319
  function o() {
4320
- n && e ? m.logInfo("processUnprocessedNotifications đã đang chạy {".concat(e.pid, "}")) : (n = !0, m.logInfo("Đang khởi động processUnprocessedNotifications..."), (e = O.fork(C.getAppPath(), ["--processUnprocessedNotifications"], {
4320
+ n && e ? h.logInfo("processUnprocessedNotifications đã đang chạy {".concat(e.pid, "}")) : (n = !0, h.logInfo("Đang khởi động processUnprocessedNotifications..."), (e = O.fork(C.getAppPath(), ["--processUnprocessedNotifications"], {
4321
4321
  stdio: "pipe",
4322
4322
  cwd: u.cwd()
4323
4323
  })).on("message", (function(n) {
4324
- m.logInfo("Tiến trình chính nhận được thông điệp: ".concat(n)), n.startsWith("is-lived-") && e && e.send("".concat(n))
4324
+ h.logInfo("Tiến trình chính nhận được thông điệp: ".concat(n)), n.startsWith("is-lived-") && e && e.send("".concat(n))
4325
4325
  })), e.on("close", (function(e) {
4326
- m.logInfo("processUnprocessedNotifications ".concat(0 === e ? "completed" : "failed", " (").concat(e, ")")), t()
4326
+ h.logInfo("processUnprocessedNotifications ".concat(0 === e ? "completed" : "failed", " (").concat(e, ")")), t()
4327
4327
  })), e.on("error", (function(e) {
4328
- m.logError("processUnprocessedNotifications fork error: ".concat(e.message)), t()
4328
+ h.logError("processUnprocessedNotifications fork error: ".concat(e.message)), t()
4329
4329
  })), e.on("disconnect", (function() {
4330
- m.logInfo("processUnprocessedNotifications disconnected"), t()
4330
+ h.logInfo("processUnprocessedNotifications disconnected"), t()
4331
4331
  })))
4332
4332
  }
4333
4333
  }()
@@ -4410,7 +4410,7 @@
4410
4410
  name: "badt_dhs.GetSyncInventory",
4411
4411
  para: ["mahh"],
4412
4412
  returns: "text",
4413
- codesql: '\n\n\n\n\nCREATE OR REPLACE FUNCTION badt_dhs.GetSyncInventory(mahh text DEFAULT NULL)\nRETURNS text\nLANGUAGE plpgsql\nAS $$\nDECLARE\n-- Lastest commit: author:onghaup; date: 2025-08-01 17:26:07\n-- Thực hiện: NGUYỄN QUỐC HOÀ - 2025-05-22\n-- Hàm: badt_dhs.GetSyncInventory(madv TEXT DEFAULT NULL)\n-- Mô tả: Danh mục thuốc\n-- - Nếu mahh IS NULL hoặc rỗng (\'\') => trả toàn bộ dữ liệu\n-- - Nếu mahh có giá trị cụ thể => lọc theo mahh\n--\n-- Sử dụng:\n-- SELECT badt_dhs.GetSyncInventory(); -- Trả toàn bộ thuốc\n-- SELECT badt_dhs.GetSyncInventory(\'\'); -- Trả toàn bộ thuốc\n-- SELECT badt_dhs.GetSyncInventory(\'01\'); -- Chỉ thuốc mã \'01\'\n-- ===============================================================\n result text;\n p_mahh ALIAS FOR mahh;\nBEGIN\n SELECT json_agg(row_data)::text\n INTO result\n FROM (\n \tSELECT\n \t th.mahh AS "InvCode",\n th.khoql AS "InvTypeCode",\n \t th.tenhh AS "InvName",\n th.dvt AS "UOMCode",\n th.dvt AS "DoseUOMCode",\n th.tenhc AS "ActiveIngredient",\n th.hamluong AS "DrugContent",\n NULLIF(th.madd,\'\') AS "MedUsageCode",\n NULLIF(th.nuocsx,\'\') AS "NationCode",\n NULLIF(th.quicachdg,\'\') AS "ModelPacking",\n CASE WHEN COALESCE(th.xoa,0) = 1 THEN TRUE ELSE FALSE END AS "IsBlocked",\n COALESCE(kho.bhyt,0) AS "IsHI" --[ÔNG TRIỆU HẬU - 2025-08-01] Bổ sung thêm theo yêu cầu\n FROM current.dmthuoc th\n LEFT JOIN current.dmkho AS kho ON kho.mahh = th.mahh\n WHERE p_mahh IS NULL OR p_mahh = \'\' OR th.mahh = p_mahh\n ) AS row_data;\n RETURN result;\nEND;\n$$;\n'
4413
+ codesql: "\n\n\n\n\nCREATE OR REPLACE FUNCTION badt_dhs.GetSyncInventory(mahh text DEFAULT NULL)\nRETURNS text\nLANGUAGE plpgsql\nAS $$\nDECLARE\n-- Lastest commit: author:onghaup; date: 2025-08-21 19:14:39\n-- Thực hiện: NGUYỄN QUỐC HOÀ - 2025-05-22\n-- Hàm: badt_dhs.GetSyncInventory(madv TEXT DEFAULT NULL)\n-- Mô tả: Danh mục thuốc\n-- - Nếu mahh IS NULL hoặc rỗng ('') => trả toàn bộ dữ liệu\n-- - Nếu mahh có giá trị cụ thể => lọc theo mahh\n--\n-- Sử dụng:\n-- SELECT badt_dhs.GetSyncInventory(); -- Trả toàn bộ thuốc\n-- SELECT badt_dhs.GetSyncInventory(''); -- Trả toàn bộ thuốc\n-- SELECT badt_dhs.GetSyncInventory('01'); -- Chỉ thuốc mã '01'\n-- ===============================================================\n--[ÔNG TRIỆU HẬU - 2025-08-21]: Xử lý COALESCE để không null khi gửi lên EMR, ![](https://live.staticflickr.com/65535/54735119381_9861374faa_b.jpg)\n result text;\n p_mahh ALIAS FOR mahh;\nBEGIN\n SELECT json_agg(row_data)::text\n INTO result\n FROM (\n \tSELECT\n \t COALESCE(th.mahh,'') AS \"InvCode\",\n COALESCE(th.khoql,'') AS \"InvTypeCode\",\n \t COALESCE(th.tenhh,'') AS \"InvName\",\n COALESCE(th.dvt,'') AS \"UOMCode\",\n COALESCE(th.dvt,'') AS \"DoseUOMCode\",\n COALESCE(th.tenhc,'') AS \"ActiveIngredient\",\n COALESCE(th.hamluong,'') AS \"DrugContent\",\n COALESCE(th.madd,'') AS \"MedUsageCode\",\n COALESCE(th.nuocsx,'') AS \"NationCode\",\n COALESCE(th.quicachdg,'') AS \"ModelPacking\",\n CASE WHEN COALESCE(th.xoa,0) = 1 THEN TRUE ELSE FALSE END AS \"IsBlocked\",\n COALESCE(kho.bhyt,0) AS \"IsHI\" --[ÔNG TRIỆU HẬU - 2025-08-01] Bổ sung thêm theo yêu cầu\n FROM current.dmthuoc th\n LEFT JOIN current.dmkho AS kho ON kho.mahh = th.mahh\n WHERE p_mahh IS NULL OR p_mahh = '' OR th.mahh = p_mahh\n ) AS row_data;\n RETURN result;\nEND;\n$$;\n"
4414
4414
  },
4415
4415
  "badt_dhs.getSyncCountry": {
4416
4416
  name: "badt_dhs.getSyncCountry",
@@ -4428,7 +4428,7 @@
4428
4428
  name: "badt_dhs.insertTreatmentProcess",
4429
4429
  para: ["input_json"],
4430
4430
  returns: "JSONB",
4431
- codesql: "\n\nCREATE OR REPLACE FUNCTION badt_dhs.insertTreatmentProcess(input_json JSONB)\nRETURNS JSONB AS $$\nDECLARE\n-- Lastest commit: author:onghaup; date: 2025-08-14 18:32:34\n-- ===============================================================\n-- Thực hiện: NGUYỄN TRIỀU VƯƠNG - 2025-06-19\n-- Hàm: badt_dhs.insertTreatmentProcess_Thuoc_CLS(input_json JSONB)\n-- Mô tả:\n-- - input_json: nội dung file json: quá trình điều trị có thuốc và cls\n-- Sử dụng:\n-- SELECT badt_dhs.insertTreatmentProcess(input_json JSONB); --Insert vào current.qtdieutri từ DHS\n-- Nếu có thuốc gọi hàm insert thuốc (inserttpprescription)\n-- Nếu có cls gọi hàm inser cls(insertcutpparaclinrequest)\n-- ===============================================================\n-- ![](https://live.staticflickr.com/65535/54713027112_36fd840249_b.jpg)\n--noitru\n-- Phụ: gom chuỗi bằng dấu ;\n-- Biến dùng để bắt lỗi\n-- Xử lý chẩn đoán\n-- [ÔNG TRIỆU HẬU: 2025-08-11] Ưu tiên lấy DiagnosisICDName, nếu không có thì lấy DiagnosisDesc\n-- dt_tenyhct := Diagnosis->>'DiagnosisDesc';\n-- [ÔNG TRIỆU HẬU - 2025-08-14]: Đổi lại lấy theo DiagnosisDesc ![](https://live.staticflickr.com/65535/54720329188_0d06fb44e4_b.jpg)\n-- [ÔNG TRIỆU HẬU: 2025-08-11] Ưu tiên lấy DiagnosisICDName, nếu không có thì lấy DiagnosisDesc\n-- dt_kqcdoan := Diagnosis->>'DiagnosisDesc';\n--Chẩn đoán phụ \n-- [ÔNG TRIỆU HẬU: 2025-08-11] Ưu tiên lấy DiagnosisICDName, nếu không có thì lấy DiagnosisDesc\n-- dt_kqcdoanp_arr := array_append(dt_kqcdoanp_arr, Diagnosis->>'DiagnosisDesc');\n-- Kiểm tra các cột bắt buộc\n-- Lấy tháng/năm kế toán\n-- Lấy thông tin nội trú\n-- Thực hiện insert/update\n--Update bnnoitru\n--Update ttcon (mã thẻ 2)\n-- Gọi hàm thêm thuốc nếu có\n-- Gọi hàm thêm CLS nếu có\n TPCode TEXT; --Mã tờ điều trị: iddienbien\n PatientCode TEXT;--Mã bệnh nhân: mabn\n AdmissionCode TEXT;--Mã tiếp nhận: makb\n MedicalRecordNo TEXT;--Mã bệnh án\n TPDate TIMESTAMP; --Ngày tờ điều trị: ngaygio\n TreatmentDoctorCode TEXT;--Mã số bs chỉ định điều trị: manv\n DepartmentCode TEXT;--Mã khoa chỉ định điều trị:madv\n ParaClinicalResultCommand TEXT;\n VitalSignCommand TEXT; --Chỉ số sinh hiệu\n RiskOfFalling INT; --Té ngã: 1-Thấp, 2-Cao, 3-Trung bình\n TakeCare INT; --Chế độ chăm sóc: 1-Cấp 1, 2-Cấp 2, 3-Cấp 3\n FollowUpCommand TEXT;--Chăm sóc: chamsoc\n MethodOfTreatmentCommand TEXT;\n NutritionCommand TEXT;\n Infor TEXT; --Diễn biến: dienbien\n DiseaseName TEXT;\n IsNotChange BOOLEAN := FALSE;\n FileDocID TEXT;\n FilePath TEXT;\n SignStatus INT := 0;--Trạng thái\n Reason TEXT;--Lý do hủy\n DiagnosisDesc TEXT; --Chẩn đoán hiện đại: kqcdoan || ',' || kqcdoanp\n DiagnosisICDName TEXT; -- [ÔNG TRIỆU HẬU: 2025-08-11]: Đồng bộ dữ liệu ICD >> Theo HIS đề xuất, EMR có bổ sung 1 field DiagnosisICDName >> HIS lấy field này thay cho DiagnosisDesc như hiện tại\n DiagnosisTraditionalDesc TEXT;--Chẩn đoán YHCT: tenyhct\n DiagnosisOtherDesc TEXT;\n Prescriptions JSONB; --Thông tin thuốc\n ParaClinRequests JSONB; --Thông tin CLS\n Diagnosis JSONB; -- Thông tin chẩn đoán\n\n VitalSign JSONB; -- Dấu hiệu sinh tồn\n VSDate TIMESTAMP; --Ngày giờ ghi nhận dấu hiệu sinh tồn\n ExecutorCode TEXT; --Mã nhân viên thực hiện\n ExecutorName TEXT; --Tên nhân viên thực hiện\n\n Height NUMERIC; --: 120.0, Chiều cao của bệnh nhân (cm)\n Weight NUMERIC; --\": 40.0, Cân nặng của bệnh nhân (kg)\n BMI NUMERIC; --\": 27.8, Chỉ số khối cơ thể (BMI)\n BloodPressureSystolic INT; --\": 140.0, Huyết áp tâm thu (mmHg)\n BloodPressureDiastolic INT;--: 100.0, Huyết áp tâm trương (mmHg)\n BodyTemperature NUMERIC; --\": 37.0,Nhiệt độ cơ thể (°C)\n Pulse NUMERIC; --\": 59.0,Nhịp tim (lần/phút)\n BreathBeat NUMERIC; --\": 20.0, Nhịp thở (lần/phút)\n SpO2 NUMERIC; --\": 99.0, Độ bão hòa oxy trong máu (%)\n Para TEXT;\n I_RHType INT; --Loại Rh máu (1: Rh+, 2: Rh-)\n I_BloodType INT; --Nhóm máu (1: A, 2: B, 3: AB, 4: O, 5: Chưa xác định)\n\n nt_maphong TEXT := NULL;\n nt_sogiuong TEXT := NULL;\n nt_huyetap TEXT := NULL;\n\n thangnam TEXT;\n thangkt_S TEXT; -- thangkt, lấy cho đủ số liệu, toa thuốc mới lên module\n namkt_S TEXT; --namkt, lấy cho đủ số liệu, toa thuốc mới lên module\n\n dt_maicd TEXT := NULL;\n dt_kqcdoan TEXT := NULL;\n\n dt_mayhct TEXT := NULL;\n dt_tenyhct TEXT := NULL;\n \n record_exists BOOLEAN := FALSE;\n insert_success BOOLEAN := TRUE;\n \n dt_maicdp_arr TEXT[] := ARRAY[]::TEXT[];\n dt_kqcdoanp_arr TEXT[] := ARRAY[]::TEXT[];\n dt_maicdp TEXT := NULL;\n dt_kqcdoanp TEXT := NULL;\n \n v_err_context TEXT;\n v_err_msg TEXT;\n\nBEGIN\n TPCode := input_json->>'TPCode';\n PatientCode := input_json->>'PatientCode';\n AdmissionCode := input_json->>'AdmissionCode';\n MedicalRecordNo := input_json->>'MedicalRecordNo';\n\n SELECT EXISTS (\n SELECT 1 FROM current.qtdieutri WHERE iddienbien = TPCode\n ) INTO record_exists;\n\n TPDate := (input_json->>'TPDate')::timestamptz;\n TreatmentDoctorCode := input_json->>'TreatmentDoctorCode';\n DepartmentCode := input_json->>'DepartmentCode';\n ParaClinicalResultCommand := input_json->>'ParaClinicalResultCommand';\n VitalSignCommand := input_json->>'VitalSignCommand';\n RiskOfFalling := input_json->>'RiskOfFalling';\n TakeCare := input_json->>'TakeCare';\n FollowUpCommand := input_json->>'FollowUpCommand';\n MethodOfTreatmentCommand := input_json->>'PatientCode';\n NutritionCommand := input_json->>'NutritionCommand';\n Infor := input_json->>'Infor';\n DiseaseName := input_json->>'DiseaseName';\n IsNotChange := (input_json->>'IsNotChange')::BOOLEAN;\n FileDocID := input_json->>'FileDocID';\n FilePath := input_json->>'FilePath';\n SignStatus := (input_json->>'SignStatus')::INT;\n Reason := input_json->>'Reason';\n DiagnosisDesc := input_json->>'DiagnosisDesc';\n DiagnosisICDName := input_json->>'DiagnosisICDName';\n DiagnosisTraditionalDesc := input_json->>'DiagnosisTraditionalDesc';\n DiagnosisOtherDesc := input_json->>'DiagnosisOtherDesc';\n\n Height := (input_json->'VitalSign'->>'Height')::numeric;\n Weight := (input_json->'VitalSign'->>'Weight')::numeric;\n BMI := (input_json->'VitalSign'->>'BMI')::numeric;\n BloodPressureSystolic := (input_json->'VitalSign'->>'BloodPressureSystolic')::numeric;\n BloodPressureDiastolic := (input_json->'VitalSign'->>'BloodPressureDiastolic')::numeric;\n BodyTemperature := (input_json->'VitalSign'->>'BodyTemperature')::numeric;\n Pulse := (input_json->'VitalSign'->>'Pulse')::numeric;\n BreathBeat := (input_json->'VitalSign'->>'BreathBeat')::numeric;\n SpO2 := (input_json->'VitalSign'->>'SpO2')::numeric;\n Para := (input_json->'VitalSign'->>'Para');\n I_RHType := (input_json->'VitalSign'->>'I_RHType')::numeric;\n I_BloodType := (input_json->'VitalSign'->>'I_BloodType')::numeric;\n\n nt_huyetap := BloodPressureSystolic || '/' || BloodPressureDiastolic;\n\n FOR Diagnosis IN SELECT value FROM jsonb_array_elements(COALESCE(input_json->'Diagnosis','[]')) AS value\n LOOP\n IF (Diagnosis->>'DiagnosisType')::INT = 2 THEN\n dt_mayhct := Diagnosis->>'DiagnosisICDCode';\n dt_tenyhct := COALESCE(\n Diagnosis->>'DiagnosisDesc',\n NULLIF(TRIM(Diagnosis->>'DiagnosisICDName'), '') \n );\n \n ELSE\n IF (Diagnosis->>'IsMain')::BOOLEAN THEN\n dt_maicd := Diagnosis->>'DiagnosisICDCode';\n dt_kqcdoan := COALESCE(\n Diagnosis->>'DiagnosisDesc',\n NULLIF(TRIM(Diagnosis->>'DiagnosisICDName'), '') \n );\n \n ELSE\n dt_maicdp_arr := array_append(dt_maicdp_arr, Diagnosis->>'DiagnosisICDCode');\n dt_kqcdoanp_arr := array_append(dt_kqcdoanp_arr, \n COALESCE(\n Diagnosis->>'DiagnosisDesc',\n NULLIF(TRIM(Diagnosis->>'DiagnosisICDName'), '') \n )\n );\t\t\t\t\n END IF;\n END IF;\n END LOOP;\n\t\n dt_maicdp := array_to_string(dt_maicdp_arr, ';'); \n dt_kqcdoanp := array_to_string(dt_kqcdoanp_arr, ';');\n \n IF NOT EXISTS (\n SELECT 1 FROM information_schema.columns\n WHERE table_name = 'qtdieutri' AND column_name = 'api'\n ) THEN\n RETURN jsonb_build_object('status', 'error', 'message', 'Bảng qtdieutri chưa có cột api');\n END IF;\n\n IF NOT EXISTS (\n SELECT 1 FROM information_schema.columns\n WHERE table_name = 'chungtu' AND column_name = 'api'\n ) THEN\n RETURN jsonb_build_object('status', 'error', 'message', 'Bảng chungtu chưa có cột api');\n END IF;\n\n IF NOT EXISTS (\n SELECT 1 FROM information_schema.columns\n WHERE table_name = 'chidinhcls' AND column_name = 'api'\n ) THEN\n RETURN jsonb_build_object('status', 'error', 'message', 'Bảng chidinhcls chưa có cột api');\n END IF;\n\n SELECT giatri INTO thangnam FROM current.system WHERE tents = 'thanglv';\n thangkt_S := SPLIT_PART(thangnam, '/', 1);\n namkt_S := SPLIT_PART(thangnam, '/', 2);\n\n SELECT maphong, sogiuong INTO nt_maphong, nt_sogiuong -- lấy cho đủ số liệu\n FROM current.bnnoitru\n WHERE mabn = PatientCode AND maba = MedicalRecordNo AND makb = AdmissionCode;\n\n\n BEGIN\n IF record_exists THEN\n UPDATE current.qtdieutri\n SET manv = TreatmentDoctorCode,\n ngaygio = TPDate,\n dienbien = Infor,\n maicd = dt_maicd,\n kqcdoan = dt_kqcdoan,\n maicdp = dt_maicdp,\n kqcdoanp = dt_kqcdoanp,\n madv = DepartmentCode,\n mayhct = dt_mayhct,\n tenyhct = dt_tenyhct,\n chamsoc = FollowUpCommand,\n maphong = nt_maphong,\n sogiuong = nt_sogiuong,\n api = 1\n WHERE iddienbien = TPCode AND mabn = PatientCode and maba = MedicalRecordNo AND makb = AdmissionCode;\n ELSE\n INSERT INTO current.qtdieutri(\n mabn, makb, maba, manv, ngaygio,\n dienbien, maicd, kqcdoan, maicdp, kqcdoanp,\n madv, iddienbien, mayhct, tenyhct, chamsoc, api, thangkt, namkt, maphong, sogiuong\n )\n VALUES (\n PatientCode, AdmissionCode, MedicalRecordNo, TreatmentDoctorCode, TPDate,\n Infor, dt_maicd, dt_kqcdoan, dt_maicdp, dt_kqcdoanp,\n DepartmentCode, TPCode, dt_mayhct, dt_tenyhct, FollowUpCommand, 1, thangkt_S, namkt_S, nt_maphong, nt_sogiuong\n );\n END IF;\n\n UPDATE current.bnnoitru\n SET manv = TreatmentDoctorCode,\n iddienbien = TPCode,\n ngaykcb = TPDate,\n dienbien = Infor,\n maicd = dt_maicd,\n kqcdoan = dt_kqcdoan,\n maicdp = dt_maicdp,\n kqcdoanp = dt_kqcdoanp,\n madv = DepartmentCode,\n mayhct = dt_mayhct,\n tenyhct = dt_tenyhct,\n chamsoc = FollowUpCommand,\n huyetap = nt_huyetap,\n nhiptho = BreathBeat,\n nhietdo = BodyTemperature,\n mach = Pulse,\n chieucao = Height/100.0,\n cannang = Weight,\n maphong = nt_maphong,\n sogiuong = nt_sogiuong\n WHERE mabn = PatientCode and maba = MedicalRecordNo AND makb = AdmissionCode;\n\n UPDATE current.ttcon\n SET manv = TreatmentDoctorCode,\n iddienbien = TPCode,\n maicd = dt_maicd,\n kqcdoan = dt_kqcdoan,\n maicdp = dt_maicdp,\n kqcdoanp = dt_kqcdoanp,\n mayhct = dt_mayhct,\n tenyhct = dt_tenyhct\n WHERE mabnme = PatientCode and mabame = MedicalRecordNo AND COALESCE(loaitt,0) = 1;\n\n IF jsonb_array_length(COALESCE(input_json->'Prescriptions', '[]'::jsonb)) > 0 THEN\n PERFORM badt_dhs.inserttpprescription(input_json);\n END IF;\n\n IF jsonb_array_length(COALESCE(input_json->'ParaClinRequests', '[]'::jsonb)) > 0 THEN\n PERFORM badt_dhs.insertcutpparaclinrequest(input_json);\n END IF;\n\n RETURN jsonb_build_object('status', 'success', 'message', '');\n\n EXCEPTION\n WHEN OTHERS THEN\n GET STACKED DIAGNOSTICS\n v_err_context = PG_EXCEPTION_CONTEXT,\n v_err_msg = MESSAGE_TEXT;\n\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', v_err_msg\n );\n END;\n\nEND;\n$$ LANGUAGE plpgsql;\n\n"
4431
+ codesql: "\n\nCREATE OR REPLACE FUNCTION badt_dhs.insertTreatmentProcess(input_json JSONB)\nRETURNS JSONB AS $$\nDECLARE\n-- Lastest commit: author:onghaup; date: 2025-09-10 15:53:22\n-- ===============================================================\n-- Thực hiện: NGUYỄN TRIỀU VƯƠNG - 2025-06-19\n-- Hàm: badt_dhs.insertTreatmentProcess_Thuoc_CLS(input_json JSONB)\n-- Mô tả:\n-- - input_json: nội dung file json: quá trình điều trị có thuốc và cls\n-- Sử dụng:\n-- SELECT badt_dhs.insertTreatmentProcess(input_json JSONB); --Insert vào current.qtdieutri từ DHS\n-- Nếu có thuốc gọi hàm insert thuốc (inserttpprescription)\n-- Nếu có cls gọi hàm inser cls(insertcutpparaclinrequest)\n-- ===============================================================\n-- ![](https://live.staticflickr.com/65535/54713027112_36fd840249_b.jpg)\n--noitru\n-- Phụ: gom chuỗi bằng dấu ;\n-- Biến dùng để bắt lỗi\n-- Biến kiểm tra ICD \n-- Kiểm tra \n--[ÔNG TRIỆU HẬU: 2025-09-10] Kiểm tra tồn tại ICD\n--[ÔNG TRIỆU HẬU: 2025-09-10] Kiểm tra tồn tại macls\n-- Xử lý chẩn đoán\n-- [ÔNG TRIỆU HẬU: 2025-08-11] Ưu tiên lấy DiagnosisICDName, nếu không có thì lấy DiagnosisDesc\n-- dt_tenyhct := Diagnosis->>'DiagnosisDesc';\n-- [ÔNG TRIỆU HẬU - 2025-08-14]: Đổi lại lấy theo DiagnosisDesc ![](https://live.staticflickr.com/65535/54720329188_0d06fb44e4_b.jpg)\n-- [ÔNG TRIỆU HẬU: 2025-08-11] Ưu tiên lấy DiagnosisICDName, nếu không có thì lấy DiagnosisDesc\n-- dt_kqcdoan := Diagnosis->>'DiagnosisDesc';\n--Chẩn đoán phụ \n-- [ÔNG TRIỆU HẬU: 2025-08-11] Ưu tiên lấy DiagnosisICDName, nếu không có thì lấy DiagnosisDesc\n-- dt_kqcdoanp_arr := array_append(dt_kqcdoanp_arr, Diagnosis->>'DiagnosisDesc');\n-- Kiểm tra các cột bắt buộc\n-- Lấy tháng/năm kế toán\n-- Lấy thông tin nội trú\n-- Thực hiện insert/update\n--Update bnnoitru\n--Update ttcon (mã thẻ 2)\n-- Gọi hàm thêm thuốc nếu có\n-- Gọi hàm thêm CLS nếu có\n TPCode TEXT; --Mã tờ điều trị: iddienbien\n PatientCode TEXT;--Mã bệnh nhân: mabn\n AdmissionCode TEXT;--Mã tiếp nhận: makb\n MedicalRecordNo TEXT;--Mã bệnh án\n TPDate TIMESTAMP; --Ngày tờ điều trị: ngaygio\n TreatmentDoctorCode TEXT;--Mã số bs chỉ định điều trị: manv\n DepartmentCode TEXT;--Mã khoa chỉ định điều trị:madv\n ParaClinicalResultCommand TEXT;\n VitalSignCommand TEXT; --Chỉ số sinh hiệu\n RiskOfFalling INT; --Té ngã: 1-Thấp, 2-Cao, 3-Trung bình\n TakeCare INT; --Chế độ chăm sóc: 1-Cấp 1, 2-Cấp 2, 3-Cấp 3\n FollowUpCommand TEXT;--Chăm sóc: chamsoc\n MethodOfTreatmentCommand TEXT;\n NutritionCommand TEXT;\n Infor TEXT; --Diễn biến: dienbien\n DiseaseName TEXT;\n IsNotChange BOOLEAN := FALSE;\n FileDocID TEXT;\n FilePath TEXT;\n SignStatus INT := 0;--Trạng thái\n Reason TEXT;--Lý do hủy\n DiagnosisDesc TEXT; --Chẩn đoán hiện đại: kqcdoan || ',' || kqcdoanp\n DiagnosisICDName TEXT; -- [ÔNG TRIỆU HẬU: 2025-08-11]: Đồng bộ dữ liệu ICD >> Theo HIS đề xuất, EMR có bổ sung 1 field DiagnosisICDName >> HIS lấy field này thay cho DiagnosisDesc như hiện tại\n DiagnosisTraditionalDesc TEXT;--Chẩn đoán YHCT: tenyhct\n DiagnosisOtherDesc TEXT;\n Prescriptions JSONB; --Thông tin thuốc\n ParaClinRequests JSONB; --Thông tin CLS\n Diagnosis JSONB; -- Thông tin chẩn đoán\n\n VitalSign JSONB; -- Dấu hiệu sinh tồn\n VSDate TIMESTAMP; --Ngày giờ ghi nhận dấu hiệu sinh tồn\n ExecutorCode TEXT; --Mã nhân viên thực hiện\n ExecutorName TEXT; --Tên nhân viên thực hiện\n\n Height NUMERIC; --: 120.0, Chiều cao của bệnh nhân (cm)\n Weight NUMERIC; --\": 40.0, Cân nặng của bệnh nhân (kg)\n BMI NUMERIC; --\": 27.8, Chỉ số khối cơ thể (BMI)\n BloodPressureSystolic INT; --\": 140.0, Huyết áp tâm thu (mmHg)\n BloodPressureDiastolic INT;--: 100.0, Huyết áp tâm trương (mmHg)\n BodyTemperature NUMERIC; --\": 37.0,Nhiệt độ cơ thể (°C)\n Pulse NUMERIC; --\": 59.0,Nhịp tim (lần/phút)\n BreathBeat NUMERIC; --\": 20.0, Nhịp thở (lần/phút)\n SpO2 NUMERIC; --\": 99.0, Độ bão hòa oxy trong máu (%)\n Para TEXT;\n I_RHType INT; --Loại Rh máu (1: Rh+, 2: Rh-)\n I_BloodType INT; --Nhóm máu (1: A, 2: B, 3: AB, 4: O, 5: Chưa xác định)\n\n nt_maphong TEXT := NULL;\n nt_sogiuong TEXT := NULL;\n nt_huyetap TEXT := NULL;\n\n thangnam TEXT;\n thangkt_S TEXT; -- thangkt, lấy cho đủ số liệu, toa thuốc mới lên module\n namkt_S TEXT; --namkt, lấy cho đủ số liệu, toa thuốc mới lên module\n\n dt_maicd TEXT := NULL;\n dt_kqcdoan TEXT := NULL;\n\n dt_mayhct TEXT := NULL;\n dt_tenyhct TEXT := NULL;\n \n record_exists BOOLEAN := FALSE;\n insert_success BOOLEAN := TRUE;\n \n dt_maicdp_arr TEXT[] := ARRAY[]::TEXT[];\n dt_kqcdoanp_arr TEXT[] := ARRAY[]::TEXT[];\n dt_maicdp TEXT := NULL;\n dt_kqcdoanp TEXT := NULL;\n \n v_err_context TEXT;\n v_err_msg TEXT;\n\n missing_icds TEXT[];\n\nBEGIN\n TPCode := input_json->>'TPCode';\n PatientCode := input_json->>'PatientCode';\n AdmissionCode := input_json->>'AdmissionCode';\n MedicalRecordNo := input_json->>'MedicalRecordNo';\n TreatmentDoctorCode := input_json->>'TreatmentDoctorCode';\n \n IF NOT EXISTS (\n SELECT 1 FROM current.dmnhanvien\n WHERE manv = TreatmentDoctorCode\n ) THEN\n RETURN jsonb_build_object('status', 'error', 'message', format('TreatmentDoctorCode: %s không tồn tại trong HIS', TreatmentDoctorCode));\n END IF;\n IF input_json ? 'Diagnosis' AND jsonb_array_length(input_json->'Diagnosis') > 0 THEN\n \n /* Gom tất cả ICD code (DiagnosisType=1) rồi kiểm tra một lần */\n WITH dx AS (\n SELECT DISTINCT\n (d->>'DiagnosisICDCode')::text AS icd_code\n FROM jsonb_array_elements(input_json->'Diagnosis') AS d\n WHERE COALESCE((d->>'DiagnosisType')::int, 0) = 1\n AND NULLIF(d->>'DiagnosisICDCode','') IS NOT NULL\n ),\n missing AS (\n SELECT dx.icd_code\n FROM dx\n LEFT JOIN current.dmicd m\n ON m.maicd = dx.icd_code AND COALESCE(m.xoa,0)=0\n WHERE m.maicd IS NULL\n )\n SELECT ARRAY_AGG(icd_code)\n INTO missing_icds\n FROM missing;\n\n IF missing_icds IS NOT NULL THEN\n RETURN jsonb_build_object('status', 'error', 'message', \n format('ICD code (DiagnosisType=1) không tồn tại hoặc ngưng sử dụng trong current.dmicd: %L', missing_icds));\n END IF;\n\n END IF;\n\n IF input_json ? 'ParaClinRequests' AND jsonb_array_length(input_json->'ParaClinRequests') > 0 THEN\n \n WITH dx AS (\n SELECT DISTINCT\n (d->>'MedSerCode')::text AS macls_code\n FROM jsonb_array_elements(input_json->'ParaClinRequests') AS d\n WHERE NULLIF(d->>'MedSerCode','') IS NOT NULL\n ),\n missing AS (\n SELECT dx.macls_code\n FROM dx\n LEFT JOIN current.dmcls m\n ON m.macls = dx.macls_code AND COALESCE(m.sudung,0)=1 AND COALESCE(m.tt37,0)=1\n WHERE m.macls IS NULL\n )\n SELECT ARRAY_AGG(macls_code)\n INTO missing_icds\n FROM missing;\n\n IF missing_icds IS NOT NULL THEN\n RETURN jsonb_build_object('status', 'error', 'message', \n format('MedSerCode code không tồn tại hoặc ngưng sử dụng trong current.dmcls: %L', missing_icds));\n END IF;\n\n END IF;\n\n SELECT EXISTS (\n SELECT 1 FROM current.qtdieutri WHERE iddienbien = TPCode\n ) INTO record_exists;\n\n TPDate := (input_json->>'TPDate')::timestamptz;\n DepartmentCode := input_json->>'DepartmentCode';\n ParaClinicalResultCommand := input_json->>'ParaClinicalResultCommand';\n VitalSignCommand := input_json->>'VitalSignCommand';\n RiskOfFalling := input_json->>'RiskOfFalling';\n TakeCare := input_json->>'TakeCare';\n FollowUpCommand := input_json->>'FollowUpCommand';\n MethodOfTreatmentCommand := input_json->>'PatientCode';\n NutritionCommand := input_json->>'NutritionCommand';\n Infor := input_json->>'Infor';\n DiseaseName := input_json->>'DiseaseName';\n IsNotChange := (input_json->>'IsNotChange')::BOOLEAN;\n FileDocID := input_json->>'FileDocID';\n FilePath := input_json->>'FilePath';\n SignStatus := (input_json->>'SignStatus')::INT;\n Reason := input_json->>'Reason';\n DiagnosisDesc := input_json->>'DiagnosisDesc';\n DiagnosisICDName := input_json->>'DiagnosisICDName';\n DiagnosisTraditionalDesc := input_json->>'DiagnosisTraditionalDesc';\n DiagnosisOtherDesc := input_json->>'DiagnosisOtherDesc';\n\n Height := (input_json->'VitalSign'->>'Height')::numeric;\n Weight := (input_json->'VitalSign'->>'Weight')::numeric;\n BMI := (input_json->'VitalSign'->>'BMI')::numeric;\n BloodPressureSystolic := (input_json->'VitalSign'->>'BloodPressureSystolic')::numeric;\n BloodPressureDiastolic := (input_json->'VitalSign'->>'BloodPressureDiastolic')::numeric;\n BodyTemperature := (input_json->'VitalSign'->>'BodyTemperature')::numeric;\n Pulse := (input_json->'VitalSign'->>'Pulse')::numeric;\n BreathBeat := (input_json->'VitalSign'->>'BreathBeat')::numeric;\n SpO2 := (input_json->'VitalSign'->>'SpO2')::numeric;\n Para := (input_json->'VitalSign'->>'Para');\n I_RHType := (input_json->'VitalSign'->>'I_RHType')::numeric;\n I_BloodType := (input_json->'VitalSign'->>'I_BloodType')::numeric;\n\n nt_huyetap := BloodPressureSystolic || '/' || BloodPressureDiastolic;\n\n FOR Diagnosis IN SELECT value FROM jsonb_array_elements(COALESCE(input_json->'Diagnosis','[]')) AS value\n LOOP\n IF (Diagnosis->>'DiagnosisType')::INT = 2 THEN\n dt_mayhct := Diagnosis->>'DiagnosisICDCode';\n dt_tenyhct := COALESCE(\n Diagnosis->>'DiagnosisDesc',\n NULLIF(TRIM(Diagnosis->>'DiagnosisICDName'), '') \n );\n \n ELSE\n IF (Diagnosis->>'IsMain')::BOOLEAN THEN\n dt_maicd := Diagnosis->>'DiagnosisICDCode';\n dt_kqcdoan := COALESCE(\n Diagnosis->>'DiagnosisDesc',\n NULLIF(TRIM(Diagnosis->>'DiagnosisICDName'), '') \n );\n \n ELSE\n dt_maicdp_arr := array_append(dt_maicdp_arr, Diagnosis->>'DiagnosisICDCode');\n dt_kqcdoanp_arr := array_append(dt_kqcdoanp_arr, \n COALESCE(\n Diagnosis->>'DiagnosisDesc',\n NULLIF(TRIM(Diagnosis->>'DiagnosisICDName'), '') \n )\n );\t\t\t\t\n END IF;\n END IF;\n END LOOP;\n\t\n dt_maicdp := array_to_string(dt_maicdp_arr, ';'); \n dt_kqcdoanp := array_to_string(dt_kqcdoanp_arr, ';');\n \n IF NOT EXISTS (\n SELECT 1 FROM information_schema.columns\n WHERE table_name = 'qtdieutri' AND column_name = 'api'\n ) THEN\n RETURN jsonb_build_object('status', 'error', 'message', 'Bảng qtdieutri chưa có cột api');\n END IF;\n\n IF NOT EXISTS (\n SELECT 1 FROM information_schema.columns\n WHERE table_name = 'chungtu' AND column_name = 'api'\n ) THEN\n RETURN jsonb_build_object('status', 'error', 'message', 'Bảng chungtu chưa có cột api');\n END IF;\n\n IF NOT EXISTS (\n SELECT 1 FROM information_schema.columns\n WHERE table_name = 'chidinhcls' AND column_name = 'api'\n ) THEN\n RETURN jsonb_build_object('status', 'error', 'message', 'Bảng chidinhcls chưa có cột api');\n END IF;\n\n SELECT giatri INTO thangnam FROM current.system WHERE tents = 'thanglv';\n thangkt_S := SPLIT_PART(thangnam, '/', 1);\n namkt_S := SPLIT_PART(thangnam, '/', 2);\n\n SELECT maphong, sogiuong INTO nt_maphong, nt_sogiuong -- lấy cho đủ số liệu\n FROM current.bnnoitru\n WHERE mabn = PatientCode AND maba = MedicalRecordNo AND makb = AdmissionCode;\n\n\n BEGIN\n IF record_exists THEN\n UPDATE current.qtdieutri\n SET manv = TreatmentDoctorCode,\n ngaygio = TPDate,\n dienbien = Infor,\n maicd = dt_maicd,\n kqcdoan = dt_kqcdoan,\n maicdp = dt_maicdp,\n kqcdoanp = dt_kqcdoanp,\n madv = DepartmentCode,\n mayhct = dt_mayhct,\n tenyhct = dt_tenyhct,\n chamsoc = FollowUpCommand,\n maphong = nt_maphong,\n sogiuong = nt_sogiuong,\n api = 1\n WHERE iddienbien = TPCode AND mabn = PatientCode and maba = MedicalRecordNo AND makb = AdmissionCode;\n ELSE\n INSERT INTO current.qtdieutri(\n mabn, makb, maba, manv, ngaygio,\n dienbien, maicd, kqcdoan, maicdp, kqcdoanp,\n madv, iddienbien, mayhct, tenyhct, chamsoc, api, thangkt, namkt, maphong, sogiuong\n )\n VALUES (\n PatientCode, AdmissionCode, MedicalRecordNo, TreatmentDoctorCode, TPDate,\n Infor, dt_maicd, dt_kqcdoan, dt_maicdp, dt_kqcdoanp,\n DepartmentCode, TPCode, dt_mayhct, dt_tenyhct, FollowUpCommand, 1, thangkt_S, namkt_S, nt_maphong, nt_sogiuong\n );\n END IF;\n\n UPDATE current.bnnoitru\n SET manv = TreatmentDoctorCode,\n iddienbien = TPCode,\n ngaykcb = TPDate,\n dienbien = Infor,\n maicd = dt_maicd,\n kqcdoan = dt_kqcdoan,\n maicdp = dt_maicdp,\n kqcdoanp = dt_kqcdoanp,\n madv = DepartmentCode,\n mayhct = dt_mayhct,\n tenyhct = dt_tenyhct,\n chamsoc = FollowUpCommand,\n huyetap = nt_huyetap,\n nhiptho = BreathBeat,\n nhietdo = BodyTemperature,\n mach = Pulse,\n chieucao = Height/100.0,\n cannang = Weight,\n maphong = nt_maphong,\n sogiuong = nt_sogiuong\n WHERE mabn = PatientCode and maba = MedicalRecordNo AND makb = AdmissionCode;\n\n UPDATE current.ttcon\n SET manv = TreatmentDoctorCode,\n iddienbien = TPCode,\n maicd = dt_maicd,\n kqcdoan = dt_kqcdoan,\n maicdp = dt_maicdp,\n kqcdoanp = dt_kqcdoanp,\n mayhct = dt_mayhct,\n tenyhct = dt_tenyhct\n WHERE mabnme = PatientCode and mabame = MedicalRecordNo AND COALESCE(loaitt,0) = 1;\n\n IF jsonb_array_length(COALESCE(input_json->'Prescriptions', '[]'::jsonb)) > 0 THEN\n PERFORM badt_dhs.inserttpprescription(input_json);\n END IF;\n\n IF jsonb_array_length(COALESCE(input_json->'ParaClinRequests', '[]'::jsonb)) > 0 THEN\n PERFORM badt_dhs.insertcutpparaclinrequest(input_json);\n END IF;\n\n RETURN jsonb_build_object('status', 'success', 'message', '');\n\n EXCEPTION\n WHEN OTHERS THEN\n GET STACKED DIAGNOSTICS\n v_err_context = PG_EXCEPTION_CONTEXT,\n v_err_msg = MESSAGE_TEXT;\n\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', v_err_msg\n );\n END;\n\nEND;\n$$ LANGUAGE plpgsql;\n\n"
4432
4432
  },
4433
4433
  "badt_dhs.GetSyncCityProvince": {
4434
4434
  name: "badt_dhs.GetSyncCityProvince",
@@ -4458,13 +4458,13 @@
4458
4458
  name: "badt_dhs.insertTPPrescription",
4459
4459
  para: ["input_json"],
4460
4460
  returns: "JSONB",
4461
- codesql: "\n\n\nCREATE TABLE IF NOT EXISTS badt_dhs.insert_log (\n id SERIAL PRIMARY KEY,\n tpc_code TEXT, -- Mã tờ điều trị (iddienbien)\n patient_code TEXT, -- Mã bệnh nhân\n admission_code TEXT, -- Mã tiếp nhận\n error_message TEXT, -- Nội dung lỗi\n error_detail TEXT, -- Chi tiết lỗi nếu cần\n log_time TIMESTAMP DEFAULT now(), -- Thời gian lỗi\n raw_json JSONB -- Dữ liệu đầu vào\n);\n\nCREATE OR REPLACE FUNCTION badt_dhs.insertTPPrescription(input_json JSONB)\nRETURNS JSONB AS $$\nDECLARE\n-- Lastest commit: author:onghaup; date: 2025-08-16 17:02:50\n-- ===============================================================\n-- Thực hiện: NGUYỄN TRIỀU VƯƠNG - 2025-06-10\n-- Hàm: badt_dhs.insertTPPrescription(input_json JSONB)\n-- Mô tả:\n-- - input_json: nội dung file json được get về từ ...\n-- Sử dụng:\n-- SELECT badt_dhs.insertTPPrescription(input_json JSONB); --Insert,update vào current.chungtu, current.pshdxn, current.pstonkho từ DHS\n-- ===============================================================\n--json mẫu\n-- ===============================================================\n-- Tạo bảng ghi log lỗi\n--================================================================\n--ngay_uong INT := COALESCE((input_json->>'DatOfUse')::NUMERIC, 0);\n--voucherdate TIMESTAMP:= input_json->>'VoucherDate'; --VoucherDate: Ngày phiếu thuốc. => ngayhd\n-- Kiểm tra IDDienBien\n--RETURN FALSE;\n-- lấy pcchandoan\n-- Lấy madt\n-- Lấy ngày giờ diễn biến\n--Lấy tài khoản bs\n-- Lấy tháng/năm kế toán\n-- Kiểm tra trùng chứng từ\n-- Gọi hàm xóa toa\n-- Duyệt qua từng thuốc trong đơn\n-- Lấy ngày uống\n-- Kiểm tra tất cả thuốc trong toa còn đủ xuất thì mới tiến hành xuất thuốc\n-- soluong := COALESCE((pres_item->>'OriDispenseQty')::NUMERIC, 0);\n-- [ÔNG TRIỆU HẬU - 2025-08-13] Chỉnh lại lấy cột số lượng đúng theo qui ước EMR ![](https://live.staticflickr.com/65535/54716976562_f6fef58c7f_b.jpg)\n--Lây khochan\n-- Lặp qua các lô tồn kho còn hạn dùng\n--[ÔNG TRIỆU HẬU - 2025-08-16]: Chỉnh lại lấy giá xuất trong pstonkho để không lỗi tính toán tồn kho (có trong pshdxn mà không có trong pstonkho)\n-- đang bị vướng ở Hồng Dân - Bạc Liêu ![](https://live.staticflickr.com/65535/54724059876_4da9e010a5_b.jpg)\n-- In dữ liệu từng dòng để kiểm tra\n-- IN số lượng còn lại\n--sl_lay NUMERIC := soluong;\n--sl_lay NUMERIC := LEAST(so_con_lai, r_stock.toncuoi);\n-- Ghi chi tiết vào pshdxh (mỗi lô 1 dòng)\n-- Cập nhật tồn kho\n-- Cộng vào tổng\n--[ÔNG TRIỆU HẬU - 2025-08-16]: Chỉnh lại tính thành tiền theo sl_lay\n-- tong_thanhtien := tong_thanhtien + (r_stock.giaxuat * soluong);\n-- tong_thanhtienbhyt := tong_thanhtienbhyt + (r_stock.giabhyt * soluong);\n-- tong_thanhtienvat := tong_thanhtienvat + (r_stock.giavat * soluong);\n-- In dữ liệu từng dòng để kiểm tra\n-- Trừ số còn lại\n-- Nếu vẫn còn thiếu thuốc, ghi log lỗi\n--RETURN FALSE;\n-- Chèn 1 dòng tổng vào CHUNGTU\n--Lấy chẩn đoán chứng từ\n--[ÔNG TRIỆU HẬU - 2025-08-16]: Dời ra ngoài để hứng toàn bộ Exception đồng thời ghi nhận log\n--[ÔNG TRIỆU HẬU - 2025-08-16]: Gom xử lý lại lỗi, và ghi nhận log để theo dõi.\n TPCode TEXT := input_json->>'TPCode'; --mã tờ điều trị: iddienbien\n AdmissionCode TEXT := input_json->>'AdmissionCode'; --makb\n MedicalRecordNo TEXT := input_json->>'MedicalRecordNo'; -- maba\n PatientCode TEXT := input_json->>'PatientCode'; --mabn\n EmployeeCode TEXT := input_json->>'EmployeeCode'; --manv\n TreatmentDoctorCode TEXT:= input_json->>'TreatmentDoctorCode'; --manv: chỉ định diễn biến\n PresCode TEXT := input_json->>'PresCode'; --sohd\n ngay TIMESTAMP:= input_json->>'Ngay';\n voucherdate_text TEXT:= input_json->>'VoucherDate'; --VoucherDate: Ngày phiếu thuốc. => ngayhd\n isdischarge BOOLEAN:= input_json->>'IsDischarge'; --\x3e> TRUE: Toa xuất viện, FALSE: toa bình thường\n\n madt_nt TEXT; -- mã đối tượng, lấy cho đủ số liệu, toa thuốc mới lên module\n madv_nt TEXT; -- mã khoa, lấy cho đủ số liệu, toa thuốc mới lên module\n maicd_nt TEXT; --maicd, lấy cho đủ số liệu, toa thuốc mới lên module\n kqcdoan_nt TEXT;--kqcdoan, lấy cho đủ số liệu, toa thuốc mới lên module\n maicdp_nt TEXT; --maicdp , lấy cho đủ số liệu, toa thuốc mới lên module\n kqcdoanp_nt TEXT;--kqcdoanp , lấy cho đủ số liệu, toa thuốc mới lên module\n \n mayhct_nt TEXT; --mayhct\n tenyhct_nt TEXT;--tenyhct\n pcchandoan TEXT := ';';\n chandoan_ct TEXT;\n cdoan TEXT := '';\n cdoanp TEXT := '';\n\n thangnam TEXT;\n thangkt_S TEXT; -- thangkt, lấy cho đủ số liệu, toa thuốc mới lên module\n namkt_S TEXT; --namkt, lấy cho đủ số liệu, toa thuốc mới lên module\n\n ngayhd DATE;\n ngaylap DATE;\n giolap TIMESTAMP;\n toaxv NUMERIC := 0;\n\n\n pres JSONB;\n pres_item JSONB;\n idx INT;\n soluong NUMERIC;\n ngay_uong INT:= 0;\n sang NUMERIC := 0;\n trua NUMERIC := 0;\n chieu NUMERIC := 0;\n toi NUMERIC := 0;\n lieu_dung TEXT;\n cachuong TEXT;\n inv_code TEXT; --sohd\n khoCode TEXT; --khole\n khochan_ct TEXT; --khochan\n so_con_lai NUMERIC;\n tong_thanhtien NUMERIC := 0;\n tong_thanhtienbhyt NUMERIC := 0;\n tong_thanhtienvat NUMERIC := 0;\n loaitoa_ct NUMERIC := 0;\n noitru_nt NUMERIC := 1; --noitru, lấy cho đủ số liệu, toa thuốc mới lên module\n loaixn_nt TEXT := 'xbb'; --loaixn, lấy cho đủ số liệu, toa thuốc mới lên module\n\n taikhoan_nt TEXT;--taikhoan: lập phiếu\n manv_nt TEXT;--manv: lập phiếu\n mathe_nt TEXT;--manv: lập phiếu\n\n db_ngaygio TIMESTAMP;\n r_stock RECORD;\n stt_nt INT;\n pres_success BOOLEAN := TRUE;\n ct_thanhtoan TEXT := ''; --'': Toa BH, '1': Toa thu phí\n ishi BOOLEAN := TRUE; --\x3e> TRUE: Toa BHYT, FALSE: Toa thu phí\n\n toncuoi_ps NUMERIC:= 0;\n \nBEGIN\n\n IF NOT EXISTS (SELECT 1 FROM current.qtdieutri WHERE iddienbien = TPCode) THEN\n INSERT INTO badt_dhs.insert_log(tpc_code, patient_code, admission_code,\n error_message, error_detail, raw_json)\n VALUES (TPCode, PatientCode, AdmissionCode,\n 'Không tìm thấy IDdienbien', format('TPCode %s không tồn tại trong qtdieutri', TPCode), input_json);\n \t\t pres_success := FALSE;\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format('IDdienbien %s không tồn tại', TPCode)\n );\n END IF;\n\t\t\n SELECT giatri INTO pcchandoan from current.system where tents = 'pcchandoan';\n SELECT madt, madv, maicd, kqcdoan, maicdp, kqcdoanp, mathe, mayhct, tenyhct INTO madt_nt, madv_nt, maicd_nt, kqcdoan_nt, maicdp_nt, kqcdoanp_nt, mathe_nt, mayhct_nt, tenyhct_nt -- lấy cho đủ số liệu\n FROM current.bnnoitru\n WHERE mabn = PatientCode AND maba = MedicalRecordNo AND makb = AdmissionCode;\n\n /*\n SELECT ngaygio INTO db_ngaygio\n FROM current.qtdieutri\n WHERE iddienbien = TPCode;\n */\n ngayhd := CASE WHEN voucherdate_text = '' THEN ngay::DATE ELSE voucherdate_text::DATE END; --Vuong chỉnh 05/08/2025\n toaxv := CASE WHEN isdischarge::BOOLEAN = FALSE THEN 0 ELSE 1 END; --Toa xuất viện\n ngaylap := ngay::DATE;\n giolap := CASE WHEN voucherdate_text = '' THEN ngay::TIMESTAMP ELSE voucherdate_text::TIMESTAMP END; --Vuong chỉnh 06/08/2025\n SELECT taikhoan, manv INTO taikhoan_nt, manv_nt\n FROM current.dmnhanvien\n WHERE manv = EmployeeCode OR manv = TreatmentDoctorCode;\n\n IF madt_nt IS NULL THEN\n \tpres_success := FALSE;\n RAISE EXCEPTION 'Không tìm thấy mã điều trị';\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format('Không tìm thấy bệnh nhân %s', PatientCode)\n );\n END IF;\n\n SELECT giatri INTO thangnam FROM current.system WHERE tents = 'thanglv';\n thangkt_S := SPLIT_PART(thangnam, '/', 1);\n namkt_S := SPLIT_PART(thangnam, '/', 2);\n\n IF EXISTS (SELECT 1 FROM current.chungtu WHERE sohd = PresCode AND mabn = PatientCode AND makh = MedicalRecordNo AND iddienbien = TPCode) THEN\n PERFORM badt_dhs.deletetpprescription(input_json);\n END IF;\n\n pres := input_json->'Prescriptions';\n ngay_uong := (input_json->'Prescriptions'->0->>'DateOfUse')::INT;\n RAISE NOTICE 'Ngày uống 1: %',\n ngay_uong;\n FOR idx IN 0 .. jsonb_array_length(pres) - 1 LOOP\n pres_item := pres->idx;\n inv_code := pres_item->>'InventoryCode';\n khoCode := pres_item->>'StoreHouse';\n soluong := COALESCE((pres_item->>'DispenseQty')::NUMERIC, 0);\n toncuoi_ps := 0;\n SELECT khocpc INTO khochan_ct FROM current.dmkhocp WHERE khocp = khoCode;\n\n SELECT SUM(COALESCE(tk.toncuoi - tk.tamxuat,0)) as ps_toncuoi INTO toncuoi_ps\n FROM current.pstonkho tk\n WHERE tk.mahh = inv_code\n AND tk.khocp = khoCode\n AND tk.thangkt = thangkt_S\n AND tk.namkt = namkt_S\n AND COALESCE(tk.xoa, 0) = 0 ;\n\n IF toncuoi_ps < soluong THEN\n pres_success := FALSE;\n INSERT INTO badt_dhs.insert_log(tpc_code, patient_code, admission_code,\n error_message, error_detail, raw_json)\n VALUES(TPCode, PatientCode, AdmissionCode,\n format('Số lượng thuốc %s: tồn kho %s không đủ xuất', inv_code, toncuoi_ps), '', input_json);\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format('Số lượng thuốc %s: tồn kho %s không đủ xuất', inv_code,toncuoi_ps));\n END IF;\n END LOOP;\n IF pres_success THEN\n FOR idx IN 0 .. jsonb_array_length(pres) - 1 LOOP\n pres_item := pres->idx;\n ishi := COALESCE((pres_item->>'IsHI')::boolean, true); --True: Toa BH, False: Toa thu phí\n inv_code := pres_item->>'InventoryCode';\n khoCode := pres_item->>'StoreHouse';\n soluong := COALESCE((pres_item->>'DispenseQty')::NUMERIC, 0); -- Đổi từ OriDispenseQty --\x3e DispenseQty\n so_con_lai := soluong;\n stt_nt := COALESCE((pres_item->>'OrderNo')::INT, idx + 1);\n\n sang := COALESCE((pres_item->>'MorningQty')::NUMERIC, 0);\n trua := COALESCE((pres_item->>'MiddayQty')::NUMERIC, 0);\n chieu := COALESCE((pres_item->>'AfternoonQty')::NUMERIC, 0);\n toi := COALESCE((pres_item->>'EveningQty')::NUMERIC, 0);\n\n lieu_dung := pres_item->>'Sudung';\n cachuong := pres_item->>'Cachuong';\n \n\t\t \n IF ishi THEN\n ct_thanhtoan := '';\n loaitoa_ct = 1; --BH\n ELSE\n ct_thanhtoan := '1';\n madt_nt := '06';\n loaitoa_ct = 0; --TP\n END IF;\n \n FOR r_stock IN\n SELECT tk.mahh, tk.handung, tk.solo, tk.visa, tk.toncuoi - tk.tamxuat as toncuoi, \n tk.giavat, tk.giaxuat, k.giabhyt, k.bhyt\n FROM current.pstonkho tk\n JOIN current.dmkho k ON tk.mahh = k.mahh\n WHERE tk.mahh = inv_code\n AND tk.khocp = khoCode\n AND tk.thangkt = thangkt_S\n AND tk.namkt = namkt_S\n AND COALESCE(tk.xoa, 0) = 0\n\t\t AND COALESCE(tk.uutien, '') != '2' --2: Cấm xuất\n AND tk.toncuoi > 0\n AND tk.toncuoi - tk.tamxuat > 0\n ORDER BY tk.uutien ASC, tk.handung DESC\n\n LOOP\n RAISE NOTICE 'Lô: %, Hạn dùng: %, SL tồn: %, Giá xuất: %',\n r_stock.solo, r_stock.handung, r_stock.toncuoi, r_stock.giaxuat;\n RAISE NOTICE 'SL: %',\n soluong;\n\n DECLARE\n sl_lay NUMERIC := LEAST(so_con_lai, r_stock.toncuoi);\n\n BEGIN\n RAISE NOTICE '--SỐ Lượng lấy: %',sl_lay;\n IF pres_success AND sl_lay > 0 THEN\n INSERT INTO current.pshdxn(\n sohd, iddienbien, mabn, makh,\n mahh, ngayhd, ngaylap, giolap, madv,\n soluong, sang, trua, chieu, toi, lieu_dung, cachuong,\n giaban, giavat,giabhyt, thanhtien, thanhtienbhyt, bhyt,\n handung, solo, visa, thangkt, namkt,\n stt, loaixn,noitru,khole, toaxv,\n madt, khochan,theodon,tienvat,tenmay,loaitoa,thanhtoan ) --them 06/08/2025\n VALUES (\n PresCode, tpcode, PatientCode, MedicalRecordNo,\n inv_code, ngayhd, ngaylap, giolap, madv_nt,\n sl_lay, sang, trua, chieu, toi, lieu_dung, cachuong,\n r_stock.giaxuat, r_stock.giavat, r_stock.giabhyt, r_stock.giaxuat * sl_lay, r_stock.giabhyt * sl_lay, r_stock.bhyt,\n r_stock.handung, r_stock.solo, r_stock.visa, thangkt_S, namkt_S,\n stt_nt,loaixn_nt,noitru_nt,khoCode, toaxv,\n madt_nt,khochan_ct,sl_lay,r_stock.giavat * sl_lay,'',loaitoa_ct, ct_thanhtoan --thêm 06/08/2025\n );\n\n RAISE NOTICE 'Tồn kho mahh: %, khocp: %, Giá vat: %, HD: %, số lô:%',\n inv_code, khoCode, r_stock.giavat, r_stock.handung, r_stock.solo;\n\n UPDATE current.pstonkho\n SET tamxuat = COALESCE(tamxuat, 0) + COALESCE(sl_lay,0)\n WHERE COALESCE(mahh,'') = COALESCE(inv_code,'')\n AND COALESCE(giavat,0) = COALESCE(r_stock.giavat,0)\n AND COALESCE(khocp,'') = COALESCE(khoCode,'')\n AND COALESCE(handung,'') = COALESCE(r_stock.handung,'')\n AND COALESCE(solo,'') = COALESCE(r_stock.solo,'')\n\t\t\t AND COALESCE(thangkt,'') = COALESCE(thangkt_S,'')\n AND COALESCE(namkt,'') = COALESCE(namkt_S,'');\n\n RAISE NOTICE '--Tính tổng';\n tong_thanhtien := tong_thanhtien + (r_stock.giaxuat * sl_lay);\n tong_thanhtienbhyt := tong_thanhtienbhyt + (r_stock.giabhyt * sl_lay);\n tong_thanhtienvat := tong_thanhtienvat + (r_stock.giavat * sl_lay);\n\n RAISE NOTICE 'Tổng thành tiền: %, Giá xuất: %, SL: %, SL còn lại: %',\n tong_thanhtien, r_stock.giaxuat, soluong, so_con_lai;\n so_con_lai := so_con_lai - sl_lay;\n RAISE NOTICE '--Cập nhật thành công';\n END IF;\n END;\n END LOOP;\n\n IF so_con_lai > 0 THEN\n pres_success := FALSE;\n INSERT INTO badt_dhs.insert_log(tpc_code, patient_code, admission_code,\n error_message, error_detail, raw_json)\n VALUES(TPCode, PatientCode, AdmissionCode,\n format('Không đủ thuốc %s: thiếu %s đơn vị', inv_code, so_con_lai), '', input_json);\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format('Không đủ thuốc %s: thiếu %s đơn vị', inv_code,so_con_lai)\n );\n END IF;\n END LOOP;\n END IF;\n\n\tBEGIN\n \tIF pres_success THEN\n IF ishi THEN\n ct_thanhtoan := '';\n loaitoa_ct = 1; --BH\n ELSE\n ct_thanhtoan := '1';\n madt_nt := '06';\n loaitoa_ct = 0; --TP\n END IF;\n IF tenyhct_nt != '' THEN\n cdoan := tenyhct_nt || ' [' || kqcdoan_nt || ']';\n cdoanp := CASE WHEN kqcdoanp_nt = '' THEN '' ELSE pcchandoan || kqcdoanp_nt END;\n chandoan_ct := cdoan || cdoanp;\n ELSE\n cdoan := kqcdoan_nt;\n cdoanp := CASE WHEN kqcdoanp_nt = '' THEN '' ELSE pcchandoan || kqcdoanp_nt END;\n chandoan_ct := cdoan || cdoanp;\n END IF;\n \n RAISE NOTICE 'Chứng từ ngày uống: %',\n ngay_uong;\n INSERT INTO current.chungtu(\n sohd, iddienbien, mabn, makh, madt, madv,\n manv, ngayuong, ghichu, khole,\n ngayhd, ngaylap, giolap, thanhtien, thangkt, namkt,\n loaixn,noitru, taikhoan, maicd, kqcdoan, maicdp, kqcdoanp, api, thanhtoan, toaxv,\n khochan,tienvat,tenmay,taikham,loaitoa,mathe,thanhtienbhyt,mayhct, tenyhct) --them 06/08/2025\n VALUES (\n PresCode, tpcode, PatientCode, MedicalRecordNo, madt_nt, madv_nt,\n manv_nt, ngay_uong, '', khoCode,\n ngayhd, ngaylap, giolap, tong_thanhtien, thangkt_S, namkt_S,\n loaixn_nt,noitru_nt,taikhoan_nt,maicd_nt,chandoan_ct,maicdp_nt,kqcdoanp_nt,1, ct_thanhtoan, toaxv,\n khochan_ct,tong_thanhtienvat,'',0,loaitoa_ct,mathe_nt,tong_thanhtienbhyt,mayhct_nt,tenyhct_nt --them 06/08/2025\n );\n\n RETURN jsonb_build_object(\n 'status', 'success',\n 'message', format('Thêm thành công chứng từ %s',PresCode)\n );\n END IF;\nEND;\nEXCEPTION\n WHEN OTHERS THEN\n RAISE NOTICE 'EXCEPTION.OTHERS';\n INSERT INTO badt_dhs.insert_log(tpc_code, patient_code, admission_code,\n error_message, error_detail, raw_json)\n VALUES(TPCode, PatientCode, AdmissionCode,\n format('EXCEPTION: %s', SQLERRM), '', input_json);\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', SQLERRM\n );\n END;\n$$ LANGUAGE plpgsql;\n\n\n\n\n\n\n\n"
4461
+ codesql: "\n\n\nCREATE TABLE IF NOT EXISTS badt_dhs.insert_log (\n id SERIAL PRIMARY KEY,\n tpc_code TEXT, -- Mã tờ điều trị (iddienbien)\n patient_code TEXT, -- Mã bệnh nhân\n admission_code TEXT, -- Mã tiếp nhận\n error_message TEXT, -- Nội dung lỗi\n error_detail TEXT, -- Chi tiết lỗi nếu cần\n log_time TIMESTAMP DEFAULT now(), -- Thời gian lỗi\n raw_json JSONB -- Dữ liệu đầu vào\n);\n\nCREATE OR REPLACE FUNCTION badt_dhs.insertTPPrescription(input_json JSONB)\nRETURNS JSONB AS $$\nDECLARE\n-- Lastest commit: author:onghaup; date: 2025-09-09 13:53:37\n-- ===============================================================\n-- Thực hiện: NGUYỄN TRIỀU VƯƠNG - 2025-06-10\n-- Hàm: badt_dhs.insertTPPrescription(input_json JSONB)\n-- Mô tả:\n-- - input_json: nội dung file json được get về từ ...\n-- Sử dụng:\n-- SELECT badt_dhs.insertTPPrescription(input_json JSONB); --Insert,update vào current.chungtu, current.pshdxn, current.pstonkho từ DHS\n-- ===============================================================\n--json mẫu\n-- ===============================================================\n-- Tạo bảng ghi log lỗi\n--================================================================\n--ngay_uong INT := COALESCE((input_json->>'DatOfUse')::NUMERIC, 0);\n--voucherdate TIMESTAMP:= input_json->>'VoucherDate'; --VoucherDate: Ngày phiếu thuốc. => ngayhd\n-- Kiểm tra IDDienBien\n--RETURN FALSE;\n-- lấy pcchandoan\n-- Lấy madt\n-- Lấy ngày giờ diễn biến\n--Lấy tài khoản bs\n-- Lấy tháng/năm kế toán\n-- Kiểm tra trùng chứng từ\n-- Gọi hàm xóa toa\n-- Duyệt qua từng thuốc trong đơn\n-- Lấy ngày uống\n-- Kiểm tra tất cả thuốc trong toa còn đủ xuất thì mới tiến hành xuất thuốc\n-- Cách 4: Sử dụng %L thay cho %s (để xử lý NULL an toàn hơn)\n-- soluong := COALESCE((pres_item->>'OriDispenseQty')::NUMERIC, 0);\n-- [ÔNG TRIỆU HẬU - 2025-08-13] Chỉnh lại lấy cột số lượng đúng theo qui ước EMR ![](https://live.staticflickr.com/65535/54716976562_f6fef58c7f_b.jpg)\n--Lây khochan\n-- Lặp qua các lô tồn kho còn hạn dùng\n--[ÔNG TRIỆU HẬU - 2025-08-16]: Chỉnh lại lấy giá xuất trong pstonkho để không lỗi tính toán tồn kho (có trong pshdxn mà không có trong pstonkho)\n-- đang bị vướng ở Hồng Dân - Bạc Liêu ![](https://live.staticflickr.com/65535/54724059876_4da9e010a5_b.jpg)\n-- In dữ liệu từng dòng để kiểm tra\n-- IN số lượng còn lại\n--sl_lay NUMERIC := soluong;\n--sl_lay NUMERIC := LEAST(so_con_lai, r_stock.toncuoi);\n-- Ghi chi tiết vào pshdxh (mỗi lô 1 dòng)\n-- Cập nhật tồn kho\n--[ÔNG TRIỆU HẬU - 2025-09-09]: Chỉnh lỗi cập nhật giá trị bị sai, đối với kho, khi đưa vào xử lý chung với tủ trực pstonkho_check_toncuoi_dh_chk3\n-- Cộng vào tổng\n--[ÔNG TRIỆU HẬU - 2025-08-16]: Chỉnh lại tính thành tiền theo sl_lay\n-- tong_thanhtien := tong_thanhtien + (r_stock.giaxuat * soluong);\n-- tong_thanhtienbhyt := tong_thanhtienbhyt + (r_stock.giabhyt * soluong);\n-- tong_thanhtienvat := tong_thanhtienvat + (r_stock.giavat * soluong);\n-- In dữ liệu từng dòng để kiểm tra\n-- Trừ số còn lại\n-- Nếu vẫn còn thiếu thuốc, ghi log lỗi\n--RETURN FALSE;\n-- Chèn 1 dòng tổng vào CHUNGTU\n--Lấy chẩn đoán chứng từ\n--[ÔNG TRIỆU HẬU - 2025-08-16]: Dời ra ngoài để hứng toàn bộ Exception đồng thời ghi nhận log\n--[ÔNG TRIỆU HẬU - 2025-08-16]: Gom xử lý lại lỗi, và ghi nhận log để theo dõi.\n TPCode TEXT := input_json->>'TPCode'; --mã tờ điều trị: iddienbien\n AdmissionCode TEXT := input_json->>'AdmissionCode'; --makb\n MedicalRecordNo TEXT := input_json->>'MedicalRecordNo'; -- maba\n PatientCode TEXT := input_json->>'PatientCode'; --mabn\n EmployeeCode TEXT := input_json->>'EmployeeCode'; --manv\n TreatmentDoctorCode TEXT:= input_json->>'TreatmentDoctorCode'; --manv: chỉ định diễn biến\n PresCode TEXT := input_json->>'PresCode'; --sohd\n ngay TIMESTAMP:= input_json->>'Ngay';\n voucherdate_text TEXT:= input_json->>'VoucherDate'; --VoucherDate: Ngày phiếu thuốc. => ngayhd\n isdischarge BOOLEAN:= input_json->>'IsDischarge'; --\x3e> TRUE: Toa xuất viện, FALSE: toa bình thường\n\n madt_nt TEXT; -- mã đối tượng, lấy cho đủ số liệu, toa thuốc mới lên module\n madv_nt TEXT; -- mã khoa, lấy cho đủ số liệu, toa thuốc mới lên module\n maicd_nt TEXT; --maicd, lấy cho đủ số liệu, toa thuốc mới lên module\n kqcdoan_nt TEXT;--kqcdoan, lấy cho đủ số liệu, toa thuốc mới lên module\n maicdp_nt TEXT; --maicdp , lấy cho đủ số liệu, toa thuốc mới lên module\n kqcdoanp_nt TEXT;--kqcdoanp , lấy cho đủ số liệu, toa thuốc mới lên module\n \n mayhct_nt TEXT; --mayhct\n tenyhct_nt TEXT;--tenyhct\n pcchandoan TEXT := ';';\n chandoan_ct TEXT;\n cdoan TEXT := '';\n cdoanp TEXT := '';\n\n thangnam TEXT;\n thangkt_S TEXT; -- thangkt, lấy cho đủ số liệu, toa thuốc mới lên module\n namkt_S TEXT; --namkt, lấy cho đủ số liệu, toa thuốc mới lên module\n\n ngayhd DATE;\n ngaylap DATE;\n giolap TIMESTAMP;\n toaxv NUMERIC := 0;\n\n\n pres JSONB;\n pres_item JSONB;\n idx INT;\n soluong NUMERIC;\n ngay_uong INT:= 0;\n sang NUMERIC := 0;\n trua NUMERIC := 0;\n chieu NUMERIC := 0;\n toi NUMERIC := 0;\n lieu_dung TEXT;\n cachuong TEXT;\n inv_code TEXT; --sohd\n khoCode TEXT; --khole\n khochan_ct TEXT; --khochan\n so_con_lai NUMERIC;\n tong_thanhtien NUMERIC := 0;\n tong_thanhtienbhyt NUMERIC := 0;\n tong_thanhtienvat NUMERIC := 0;\n loaitoa_ct NUMERIC := 0;\n noitru_nt NUMERIC := 1; --noitru, lấy cho đủ số liệu, toa thuốc mới lên module\n loaixn_nt TEXT := 'xbb'; --loaixn, lấy cho đủ số liệu, toa thuốc mới lên module\n\n taikhoan_nt TEXT;--taikhoan: lập phiếu\n manv_nt TEXT;--manv: lập phiếu\n mathe_nt TEXT;--manv: lập phiếu\n\n db_ngaygio TIMESTAMP;\n r_stock RECORD;\n stt_nt INT;\n pres_success BOOLEAN := TRUE;\n ct_thanhtoan TEXT := ''; --'': Toa BH, '1': Toa thu phí\n ishi BOOLEAN := TRUE; --\x3e> TRUE: Toa BHYT, FALSE: Toa thu phí\n\n toncuoi_ps NUMERIC:= 0;\n Matutruc TEXT:= ''; --[ÔNG TRIỆU HẬU - 2025-09-08]: Xử lý toa tủ trực\n dain NUMERIC:= 0;\n \nBEGIN\n\n IF NOT EXISTS (SELECT 1 FROM current.qtdieutri WHERE iddienbien = TPCode) THEN\n INSERT INTO badt_dhs.insert_log(tpc_code, patient_code, admission_code,\n error_message, error_detail, raw_json)\n VALUES (TPCode, PatientCode, AdmissionCode,\n 'Không tìm thấy IDdienbien', format('TPCode %s không tồn tại trong qtdieutri', TPCode), input_json);\n \t\t pres_success := FALSE;\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format('IDdienbien %s không tồn tại', TPCode)\n );\n END IF;\n\t\t\n SELECT giatri INTO pcchandoan from current.system where tents = 'pcchandoan';\n SELECT madt, madv, maicd, kqcdoan, maicdp, kqcdoanp, mathe, mayhct, tenyhct INTO madt_nt, madv_nt, maicd_nt, kqcdoan_nt, maicdp_nt, kqcdoanp_nt, mathe_nt, mayhct_nt, tenyhct_nt -- lấy cho đủ số liệu\n FROM current.bnnoitru\n WHERE mabn = PatientCode AND maba = MedicalRecordNo AND makb = AdmissionCode;\n\n /*\n SELECT ngaygio INTO db_ngaygio\n FROM current.qtdieutri\n WHERE iddienbien = TPCode;\n */\n ngayhd := CASE WHEN voucherdate_text = '' THEN ngay::DATE ELSE voucherdate_text::DATE END; --Vuong chỉnh 05/08/2025\n toaxv := CASE WHEN isdischarge::BOOLEAN = FALSE THEN 0 ELSE 1 END; --Toa xuất viện\n ngaylap := ngay::DATE;\n giolap := CASE WHEN voucherdate_text = '' THEN ngay::TIMESTAMP ELSE voucherdate_text::TIMESTAMP END; --Vuong chỉnh 06/08/2025\n SELECT taikhoan, manv INTO taikhoan_nt, manv_nt\n FROM current.dmnhanvien\n WHERE manv = EmployeeCode OR manv = TreatmentDoctorCode;\n\n IF madt_nt IS NULL THEN\n \tpres_success := FALSE;\n RAISE EXCEPTION 'Không tìm thấy mã điều trị';\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format('Không tìm thấy bệnh nhân %s', PatientCode)\n );\n END IF;\n\n SELECT giatri INTO thangnam FROM current.system WHERE tents = 'thanglv';\n thangkt_S := SPLIT_PART(thangnam, '/', 1);\n namkt_S := SPLIT_PART(thangnam, '/', 2);\n\n IF EXISTS (SELECT 1 FROM current.chungtu WHERE sohd = PresCode AND mabn = PatientCode AND makh = MedicalRecordNo AND iddienbien = TPCode) THEN\n PERFORM badt_dhs.deletetpprescription(input_json);\n END IF;\n\n pres := input_json->'Prescriptions';\n ngay_uong := (input_json->'Prescriptions'->0->>'DateOfUse')::INT;\n RAISE NOTICE 'Ngày uống 1: %',\n ngay_uong;\n FOR idx IN 0 .. jsonb_array_length(pres) - 1 LOOP\n pres_item := pres->idx;\n inv_code := COALESCE(pres_item->>'InventoryCode','');\n khoCode := COALESCE(pres_item->>'StoreHouse','');\n Matutruc := COALESCE(pres_item->>'Matutruc','');\n\n IF khoCode<>'' AND Matutruc<>'' THEN\n pres_success := FALSE;\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format('StoreHouse=%L và Matutruc=%L Không thể đồng thời khác rỗng.', khoCode, Matutruc)\n );\n END IF;\n\n RAISE NOTICE 'khoCode: %, Matutruc:%', khoCode, Matutruc;\n IF khoCode='' AND Matutruc<>'' THEN\n SELECT khocp INTO khoCode FROM current.dmdonvi WHERE COALESCE(madv,'')=Matutruc AND COALESCE(loaidv,0)=3;\n dain=1;\n END IF;\n \n soluong := COALESCE((pres_item->>'DispenseQty')::NUMERIC, 0);\n toncuoi_ps := 0;\n SELECT khocpc INTO khochan_ct FROM current.dmkhocp WHERE khocp = khoCode;\n\n RAISE NOTICE 'khoCode: %, Matutruc:%, khochan_ct: %', khoCode, Matutruc, khochan_ct;\n\n SELECT SUM(COALESCE(tk.toncuoi,0) - COALESCE(tk.tamxuat,0)) as ps_toncuoi INTO toncuoi_ps\n FROM current.pstonkho tk\n WHERE tk.mahh = inv_code\n AND CASE WHEN Matutruc<>'' THEN tk.madv = Matutruc ELSE tk.khocp = khoCode END --[ÔNG TRIỆU HẬU - 2025-09-08]: Xử lý toa tủ trực\n AND tk.thangkt = thangkt_S\n AND tk.namkt = namkt_S\n AND COALESCE(tk.xoa, 0) = 0 ;\n\n IF toncuoi_ps < soluong THEN\n pres_success := FALSE;\n INSERT INTO badt_dhs.insert_log(tpc_code, patient_code, admission_code,\n error_message, error_detail, raw_json)\n VALUES(TPCode, PatientCode, AdmissionCode,\n format('Số lượng thuốc %s: tồn kho %s không đủ xuất', inv_code, toncuoi_ps), '', input_json);\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format('Số lượng thuốc %s: tồn kho %s không đủ xuất', inv_code,toncuoi_ps));\n END IF;\n END LOOP;\n IF pres_success THEN\n FOR idx IN 0 .. jsonb_array_length(pres) - 1 LOOP\n pres_item := pres->idx;\n ishi := COALESCE((pres_item->>'IsHI')::boolean, true); --True: Toa BH, False: Toa thu phí\n inv_code := pres_item->>'InventoryCode';\n khoCode := COALESCE(pres_item->>'StoreHouse','');\n Matutruc := COALESCE(pres_item->>'Matutruc','');\n\n RAISE NOTICE 'khoCode: %, Matutruc:%', khoCode, Matutruc;\n IF khoCode='' AND Matutruc<>'' THEN\n SELECT khocp INTO khoCode FROM current.dmdonvi WHERE COALESCE(madv,'')=Matutruc AND COALESCE(loaidv,0)=3;\n SELECT khocpc INTO khochan_ct FROM current.dmkhocp WHERE khocp = khoCode;\n dain=1;\n END IF;\n\n soluong := COALESCE((pres_item->>'DispenseQty')::NUMERIC, 0); -- Đổi từ OriDispenseQty --\x3e DispenseQty\n so_con_lai := soluong;\n stt_nt := COALESCE((pres_item->>'OrderNo')::INT, idx + 1);\n\n sang := COALESCE((pres_item->>'MorningQty')::NUMERIC, 0);\n trua := COALESCE((pres_item->>'MiddayQty')::NUMERIC, 0);\n chieu := COALESCE((pres_item->>'AfternoonQty')::NUMERIC, 0);\n toi := COALESCE((pres_item->>'EveningQty')::NUMERIC, 0);\n\n lieu_dung := pres_item->>'Sudung';\n cachuong := pres_item->>'Cachuong';\n \n\t\t \n IF ishi THEN\n ct_thanhtoan := '';\n loaitoa_ct = 1; --BH\n ELSE\n ct_thanhtoan := '1';\n madt_nt := '06';\n loaitoa_ct = 0; --TP\n END IF;\n \n FOR r_stock IN\n SELECT tk.mahh, tk.handung, tk.solo, tk.visa, COALESCE(tk.toncuoi,0) - COALESCE(tk.tamxuat,0) as toncuoi, \n tk.giavat, tk.giaxuat, k.giabhyt, k.bhyt, tk.khocp, tk.madv\n FROM current.pstonkho tk\n JOIN current.dmkho k ON tk.mahh = k.mahh\n WHERE tk.mahh = inv_code\n AND CASE WHEN Matutruc<>'' THEN tk.madv = Matutruc ELSE tk.khocp = khoCode END --[ÔNG TRIỆU HẬU - 2025-09-08]: Xử lý toa tủ trực\n AND tk.thangkt = thangkt_S\n AND tk.namkt = namkt_S\n AND COALESCE(tk.xoa, 0) = 0\n\t\t AND COALESCE(tk.uutien, '') != '2' --2: Cấm xuất\n AND COALESCE(tk.toncuoi,0) > 0\n AND COALESCE(tk.toncuoi,0) - COALESCE(tk.tamxuat,0) > 0\n ORDER BY tk.uutien ASC, tk.handung DESC\n\n LOOP\n RAISE NOTICE 'Lô: %, Hạn dùng: %, SL tồn: %, Giá xuất: %, khocp: %, madv: %',\n r_stock.solo, r_stock.handung, r_stock.toncuoi, r_stock.giaxuat, r_stock.khocp, r_stock.madv;\n RAISE NOTICE 'SL: %',\n soluong;\n\n DECLARE\n sl_lay NUMERIC := LEAST(so_con_lai, r_stock.toncuoi);\n\n BEGIN\n RAISE NOTICE '--SỐ Lượng lấy: %',sl_lay;\n IF pres_success AND sl_lay > 0 THEN\n INSERT INTO current.pshdxn(\n sohd, iddienbien, mabn, makh,\n mahh, ngayhd, ngaylap, giolap, madv,\n soluong, sang, trua, chieu, toi, lieu_dung, cachuong,\n giaban, giavat,giabhyt, thanhtien, thanhtienbhyt, bhyt,\n handung, solo, visa, thangkt, namkt,\n stt, loaixn,noitru,khole, toaxv,\n madt, khochan,theodon,tienvat,tenmay,loaitoa,thanhtoan,\n dain,toatutruc,tutruc\n ) --them 06/08/2025\n VALUES (\n PresCode, tpcode, PatientCode, MedicalRecordNo,\n inv_code, ngayhd, ngaylap, giolap, madv_nt,\n sl_lay, sang, trua, chieu, toi, lieu_dung, cachuong,\n r_stock.giaxuat, r_stock.giavat, r_stock.giabhyt, r_stock.giaxuat * sl_lay, r_stock.giabhyt * sl_lay, r_stock.bhyt,\n r_stock.handung, r_stock.solo, r_stock.visa, thangkt_S, namkt_S,\n stt_nt,loaixn_nt,noitru_nt,khoCode, toaxv,\n madt_nt,khochan_ct,sl_lay,r_stock.giavat * sl_lay,'',loaitoa_ct, ct_thanhtoan, --thêm 06/08/2025\n dain, CASE WHEN dain=0 THEN 0 ELSE 1 END, Matutruc --[ÔNG TRIỆU HẬU - 2025-09-08]: Xử lý toa tủ trực\n );\n\n RAISE NOTICE 'Tồn kho mahh: %, khocp: %, Giá vat: %, HD: %, số lô:%, sl_lay: %',\n inv_code, khoCode, r_stock.giavat, r_stock.handung, r_stock.solo, sl_lay;\n\n UPDATE current.pstonkho\n SET \n tamxuat = COALESCE(tamxuat, 0) + (CASE WHEN Matutruc<>'' THEN 0 ELSE COALESCE(sl_lay,0) END) ,\n toncuoi = COALESCE(toncuoi, 0) - (CASE WHEN Matutruc<>'' THEN COALESCE(sl_lay,0) ELSE 0 END),\n xuat = COALESCE(xuat, 0) + (CASE WHEN Matutruc<>'' THEN COALESCE(sl_lay,0) ELSE 0 END)\n WHERE COALESCE(mahh,'') = COALESCE(inv_code,'')\n AND COALESCE(giavat,0) = COALESCE(r_stock.giavat,0)\n AND CASE WHEN Matutruc<>'' THEN madv = Matutruc ELSE COALESCE(khocp,'') = COALESCE(khoCode,'') END \n AND COALESCE(handung,'') = COALESCE(r_stock.handung,'')\n AND COALESCE(solo,'') = COALESCE(r_stock.solo,'')\n\t\t\t AND COALESCE(thangkt,'') = COALESCE(thangkt_S,'')\n AND COALESCE(namkt,'') = COALESCE(namkt_S,'');\n\n RAISE NOTICE '--Tính tổng';\n tong_thanhtien := tong_thanhtien + (r_stock.giaxuat * sl_lay);\n tong_thanhtienbhyt := tong_thanhtienbhyt + (r_stock.giabhyt * sl_lay);\n tong_thanhtienvat := tong_thanhtienvat + (r_stock.giavat * sl_lay);\n\n RAISE NOTICE 'Tổng thành tiền: %, Giá xuất: %, SL: %, SL còn lại: %',\n tong_thanhtien, r_stock.giaxuat, soluong, so_con_lai;\n so_con_lai := so_con_lai - sl_lay;\n RAISE NOTICE '--Cập nhật thành công';\n END IF;\n END;\n END LOOP;\n\n IF so_con_lai > 0 THEN\n pres_success := FALSE;\n INSERT INTO badt_dhs.insert_log(tpc_code, patient_code, admission_code,\n error_message, error_detail, raw_json)\n VALUES(TPCode, PatientCode, AdmissionCode,\n format('Không đủ thuốc %s: thiếu %s đơn vị', inv_code, so_con_lai), '', input_json);\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format('Không đủ thuốc %s: thiếu %s đơn vị', inv_code,so_con_lai)\n );\n END IF;\n END LOOP;\n END IF;\n\n\tBEGIN\n \tIF pres_success THEN\n IF ishi THEN\n ct_thanhtoan := '';\n loaitoa_ct = 1; --BH\n ELSE\n ct_thanhtoan := '1';\n madt_nt := '06';\n loaitoa_ct = 0; --TP\n END IF;\n IF tenyhct_nt != '' THEN\n cdoan := tenyhct_nt || ' [' || kqcdoan_nt || ']';\n cdoanp := CASE WHEN kqcdoanp_nt = '' THEN '' ELSE pcchandoan || kqcdoanp_nt END;\n chandoan_ct := cdoan || cdoanp;\n ELSE\n cdoan := kqcdoan_nt;\n cdoanp := CASE WHEN kqcdoanp_nt = '' THEN '' ELSE pcchandoan || kqcdoanp_nt END;\n chandoan_ct := cdoan || cdoanp;\n END IF;\n \n RAISE NOTICE 'Chứng từ ngày uống: %',\n ngay_uong;\n INSERT INTO current.chungtu(\n sohd, iddienbien, mabn, makh, madt, madv,\n manv, ngayuong, ghichu, khole,\n ngayhd, ngaylap, giolap, thanhtien, thangkt, namkt,\n loaixn,noitru, taikhoan, maicd, kqcdoan, maicdp, kqcdoanp, api, thanhtoan, toaxv,\n khochan,tienvat,tenmay,taikham,loaitoa,mathe,thanhtienbhyt,mayhct, tenyhct,\n dain,toatutruc,tutruc\n ) --them 06/08/2025\n VALUES (\n PresCode, tpcode, PatientCode, MedicalRecordNo, madt_nt, madv_nt,\n manv_nt, ngay_uong, '', khoCode,\n ngayhd, ngaylap, giolap, tong_thanhtien, thangkt_S, namkt_S,\n loaixn_nt,noitru_nt,taikhoan_nt,maicd_nt,chandoan_ct,maicdp_nt,kqcdoanp_nt,1, ct_thanhtoan, toaxv,\n khochan_ct,tong_thanhtienvat,'',0,loaitoa_ct,mathe_nt,tong_thanhtienbhyt,mayhct_nt,tenyhct_nt, --them 06/08/2025\n dain, CASE WHEN dain=0 THEN 0 ELSE 1 END, Matutruc --[ÔNG TRIỆU HẬU - 2025-09-08]: Xử lý toa tủ trực\n );\n\n RETURN jsonb_build_object(\n 'status', 'success',\n 'message', format('Thêm thành công chứng từ %s',PresCode)\n );\n END IF;\nEND;\nEXCEPTION\n WHEN OTHERS THEN\n RAISE NOTICE 'EXCEPTION.OTHERS';\n INSERT INTO badt_dhs.insert_log(tpc_code, patient_code, admission_code,\n error_message, error_detail, raw_json)\n VALUES(TPCode, PatientCode, AdmissionCode,\n format('EXCEPTION: %s', SQLERRM), '', input_json);\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', SQLERRM\n );\n END;\n$$ LANGUAGE plpgsql;\n\n\n\n\n\n\n\n"
4462
4462
  },
4463
4463
  "badt_dhs.GetSyncDepartment": {
4464
4464
  name: "badt_dhs.GetSyncDepartment",
4465
4465
  para: ["madv"],
4466
4466
  returns: "text",
4467
- codesql: "\n\n\nCREATE OR REPLACE FUNCTION badt_dhs.GetSyncDepartment(madv text DEFAULT NULL)\nRETURNS text\nLANGUAGE plpgsql\nAS $$\nDECLARE\n-- Lastest commit: author:onghaup; date: 2025-08-09 17:50:43\n-- Thực hiện: NGUYỄN QUỐC HOÀ - 2025-05-22\n-- Hàm: badt_dhs.GetSyncDepartment(madv TEXT DEFAULT NULL)\n-- Mô tả: Danh mục khoa\n-- - Nếu madv IS NULL hoặc rỗng ('') => trả toàn bộ dữ liệu\n-- - Nếu madv có giá trị cụ thể => lọc theo madv\n--\n-- Sử dụng:\n-- SELECT badt_dhs.GetSyncDepartment(); -- Trả toàn bộ khoa\n-- SELECT badt_dhs.GetSyncDepartment(''); -- Trả toàn bộ khoa\n-- SELECT badt_dhs.GetSyncDepartment('10'); -- Chỉ khoa mã '10'\n-- ===============================================================\n-- Gửi thành công [](https://i.ibb.co/KjC5D19D/Postman-PU6-Cx-Wm0-F8.png)\n result text;\n p_madv ALIAS FOR madv;\nBEGIN\n SELECT json_agg(row_data)::text\n INTO result\n FROM (\n SELECT\n '' AS \"ParentDepartmentCode\",\t\t\t\t\t\t\t--Mã cha\n COALESCE(dv.madv,'') AS \"DepartmentCode\",\t\t\t\t\t\t\t\t--Mã phòng khoa \n COALESCE(dv.tendv,'') AS \"DepartmentName\",\t\t\t\t\t\t\t\t--Tên phòng khoa\n COALESCE(dv.vietngan,'') AS \"DepartmentShortName\",\t\t\t\t\t\t\t--Tên viết tắt \n '' AS \"Description\",\t\t\t\t\t\t\t\t\t--Diễn giải\n '' AS \"Note\",\t\t\t\t\t\t\t\t\t\t--Ghi chú\n CASE WHEN COALESCE(dv.khoaduoc,0) = 3 THEN 'OEXM'\n\t WHEN COALESCE(dv.khoaduoc,0) = 4 THEN 'INUN'\n WHEN COALESCE(dv.khoaduoc,0) = 5 THEN 'PACL' ELSE 'FUDE' END AS \"DepartmentType\", \t--Loại phòng khoa : OEXM -Khám bệnh ngoại trú; INUN - Nội trú; PACL - Cận lâm sàng; FUDE -Phòng chức năng\n '' AS \"MHDepartmentCode\",\t\t\t\t\t\t\t\t\t--Mã phòng khoa của bộ y tế \n COALESCE(dv.ma_khoa_cv2348, '') AS \"MHSpecialCode\",\t\t\t\t\t--Mã chuyên khoa của bộ y tế\n CASE WHEN COALESCE(dv.trangthai,0) = 0 THEN TRUE ELSE FALSE END AS \"Active\" \t\t--Sử dụng \n FROM current.dmdonvi dv\n WHERE dv.loaidv = 1 AND \n (p_madv IS NULL OR p_madv = '' OR dv.madv = p_madv) \n ) AS row_data;\n RETURN result;\nEND;\n$$;\n\n"
4467
+ codesql: "\n\n\nCREATE OR REPLACE FUNCTION badt_dhs.GetSyncDepartment(madv text DEFAULT NULL)\nRETURNS text\nLANGUAGE plpgsql\nAS $$\nDECLARE\n-- Lastest commit: author:onghaup; date: 2025-08-22 09:40:22\n-- Thực hiện: NGUYỄN QUỐC HOÀ - 2025-05-22\n-- Hàm: badt_dhs.GetSyncDepartment(madv TEXT DEFAULT NULL)\n-- Mô tả: Danh mục khoa\n-- - Nếu madv IS NULL hoặc rỗng ('') => trả toàn bộ dữ liệu\n-- - Nếu madv có giá trị cụ thể => lọc theo madv\n--\n-- Sử dụng:\n-- SELECT badt_dhs.GetSyncDepartment(); -- Trả toàn bộ khoa\n-- SELECT badt_dhs.GetSyncDepartment(''); -- Trả toàn bộ khoa\n-- SELECT badt_dhs.GetSyncDepartment('10'); -- Chỉ khoa mã '10'\n-- ===============================================================\n-- Gửi thành công [](https://i.ibb.co/KjC5D19D/Postman-PU6-Cx-Wm0-F8.png)\n--[ÔNG TRIỆU HẬU - 2025-08-22]: Chỉnh lại Active theo trạng thái sử dụng (xoa)\n result text;\n p_madv ALIAS FOR madv;\nBEGIN\n SELECT json_agg(row_data)::text\n INTO result\n FROM (\n SELECT\n '' AS \"ParentDepartmentCode\",\t\t\t\t\t\t\t--Mã cha\n COALESCE(dv.madv,'') AS \"DepartmentCode\",\t\t\t\t\t\t\t\t--Mã phòng khoa \n COALESCE(dv.tendv,'') AS \"DepartmentName\",\t\t\t\t\t\t\t\t--Tên phòng khoa\n COALESCE(dv.vietngan,'') AS \"DepartmentShortName\",\t\t\t\t\t\t\t--Tên viết tắt \n '' AS \"Description\",\t\t\t\t\t\t\t\t\t--Diễn giải\n '' AS \"Note\",\t\t\t\t\t\t\t\t\t\t--Ghi chú\n CASE WHEN COALESCE(dv.khoaduoc,0) = 3 THEN 'OEXM'\n\t WHEN COALESCE(dv.khoaduoc,0) = 4 THEN 'INUN'\n WHEN COALESCE(dv.khoaduoc,0) = 5 THEN 'PACL' ELSE 'FUDE' END AS \"DepartmentType\", \t--Loại phòng khoa : OEXM -Khám bệnh ngoại trú; INUN - Nội trú; PACL - Cận lâm sàng; FUDE -Phòng chức năng\n '' AS \"MHDepartmentCode\",\t\t\t\t\t\t\t\t\t--Mã phòng khoa của bộ y tế \n COALESCE(dv.ma_khoa_cv2348, '') AS \"MHSpecialCode\",\t\t\t\t\t--Mã chuyên khoa của bộ y tế\n CASE WHEN COALESCE(dv.xoa,0) = 0 THEN TRUE ELSE FALSE END AS \"Active\" \t\t--Sử dụng \n FROM current.dmdonvi dv\n WHERE dv.loaidv = 1 AND \n (p_madv IS NULL OR p_madv = '' OR dv.madv = p_madv) \n ) AS row_data;\n RETURN result;\nEND;\n$$;\n\n"
4468
4468
  },
4469
4469
  "badt_dhs.GetSyncEthnic": {
4470
4470
  name: "badt_dhs.GetSyncEthnic",
@@ -4500,7 +4500,7 @@
4500
4500
  name: "badt_dhs.cancelTPPrescription",
4501
4501
  para: ["input_json"],
4502
4502
  returns: "JSONB",
4503
- codesql: "\n\nCREATE OR REPLACE FUNCTION badt_dhs.cancelTPPrescription(input_json JSONB)\nRETURNS JSONB AS $$\nDECLARE\n-- Lastest commit: author:Nguyễn Triều Vương; date: 2025-08-12 09:04:53\n-- ===============================================================\n-- Thực hiện: NGUYỄN TRIỀU VƯƠNG - 2025-08-11\n-- Hàm: badt_dhs.cancelTPPrescription(input_json JSONB)\n-- Mô tả: Hủy 1 thuốc trong toa\n-- input_json: nội dung file json: thông tin bệnh nhân và toa thuốc\n-- Sử dụng:\n-- SELECT badt_dhs.cancelTPPrescription(input_json JSONB);\n-- Nếu thuốc đã tổng hơp --\x3e tạo toa trả với thông tin thuốc trong json --\x3e theo tháng năm kế toán hiện tại\n-- Nếu thuốc thuốc chưa tổng hợp --\x3e xóa thuốc trong pshdxn --\x3e tăng pstonkho.tamnhap --\x3e xóa chungtu hoặc điều chỉnh theo thuốc còn lại trong pshdxn\n-- ===============================================================\n-- 0. Kiểm tra chứng từ tồn tại\n-- 2. Kiểm tra đã in chứng từ hay chưa\n-- Lấy tháng/năm kế toán\n-- 1. Kiểm tra còn đủ số lượng để trả\n-- Lấy chi tiết thuốc trả\n-- Ghi vào pshdxn\n-- Cập nhật tồn kho\n-- Cộng tổng\n-- Ghi chứng từ\n-- Lấy chi tiết thuốc trả\n-- UPDATE\n-- Cập nhật tồn kho\n-- Cộng tổng\n-- Ghi chứng từ\n-- UPDATE\n p_mabn TEXT := input_json->>'PatientCode'; --Mã bệnh nhân\n p_makh TEXT := input_json->>'MedicalRecordNo'; -- Mã bệnh án\n p_makb TEXT := input_json->>'AdmissionCode'; -- Mã khám bệnh\n p_iddienbien TEXT := input_json->>'TPCode'; -- ID diễn biến\n p_sohd TEXT := input_json->>'PresCode'; -- Số hd\n p_mahh TEXT := input_json->>'PresDtlCode'; --Mã hàng hóa\n\n tong_thanhtien NUMERIC := 0;\n tong_thanhtienbhyt NUMERIC := 0;\n tong_thanhtienvat NUMERIC := 0;\n tong NUMERIC := 0;\n so_mahh NUMERIC := 0;\n\n r_hd RECORD;\n r_ct RECORD;\n\n thangnam TEXT;\n thangkt_S TEXT;\n namkt_S TEXT;\n v_code TEXT;\n v_exists BOOLEAN;\n v_dain_exists BOOLEAN;\nBEGIN\n SELECT EXISTS (\n SELECT 1\n FROM current.chungtu ct\n WHERE ct.sohd = p_sohd\n AND ct.mabn = p_mabn\n AND ct.makh = p_makh\n AND COALESCE(xoa, 0) = 0\n ) INTO v_exists;\n\n IF NOT v_exists THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Hóa đơn %s (iddienbien=%s) không tồn tại', p_sohd, p_iddienbien)\n );\n END IF;\n SELECT EXISTS (\n SELECT 1\n FROM current.pshdxn\n WHERE mabn = p_mabn\n AND makh = p_makh\n AND sohd = p_sohd\n AND COALESCE(xoa, 0) = 0\n AND COALESCE(dain, 0) = 1\n ) INTO v_dain_exists;\n\n IF v_dain_exists THEN\n SELECT giatri INTO thangnam FROM current.system WHERE tents = 'thanglv';\n thangkt_S := SPLIT_PART(thangnam, '/', 1);\n namkt_S := SPLIT_PART(thangnam, '/', 2);\n\n v_code := CASE WHEN length(p_sohd) > 14 THEN LEFT(p_sohd, 14) ELSE p_sohd END;\n v_code := v_code || to_char(NOW(), 'HH24MISS');\n\n SELECT SUM(CASE WHEN loaixn = 'xbb' AND COALESCE(dain,0) = 1 THEN soluong ELSE 0 END)\n - SUM(CASE WHEN loaixn = 'nkt' THEN soluong ELSE 0 END)\n INTO tong\n FROM current.pshdxn\n WHERE mabn = p_mabn\n AND makh = p_makh\n AND mahh = p_mahh\n AND COALESCE(xoa, 0) = 0;\n\n IF tong <= 0 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Thuốc/vật tư %s đã trả đủ số lượng, không thể trả thêm', p_mahh)\n );\n END IF;\n\n FOR r_hd IN\n SELECT *\n FROM current.pshdxn hd\n WHERE hd.mahh = p_mahh\n AND hd.sohd = p_sohd\n AND hd.mabn = p_mabn\n AND hd.makh = p_makh\n AND COALESCE(hd.xoa, 0) = 0\n LOOP\n IF COALESCE(r_hd.soluong, 0) > 0 THEN\n INSERT INTO current.pshdxn(\n sohd, sohdx, iddienbien, mabn, makh,\n mahh, ngayhd, ngaylap, giolap, madv,\n soluong, sang, trua, chieu, toi, lieu_dung, cachuong,\n giaban, giavat, giabhyt, thanhtien, thanhtienbhyt, bhyt,\n handung, solo, visa, thangkt, namkt,\n stt, loaixn, noitru, khole, toaxv,\n madt, khochan, theodon, tienvat, tenmay, loaitoa, thanhtoan\n )\n VALUES (\n v_code, r_hd.sohd, r_hd.iddienbien, r_hd.mabn, r_hd.makh,\n r_hd.mahh, r_hd.ngayhd, r_hd.ngaylap, now(), r_hd.madv,\n r_hd.soluong, r_hd.sang, r_hd.trua, r_hd.chieu, r_hd.toi, r_hd.lieu_dung, r_hd.cachuong,\n r_hd.giaban, r_hd.giavat, r_hd.giabhyt, r_hd.thanhtien, r_hd.thanhtienbhyt, r_hd.bhyt,\n r_hd.handung, r_hd.solo, r_hd.visa, thangkt_S, namkt_S,\n r_hd.stt, 'nkt', r_hd.noitru, r_hd.khole, 0,\n r_hd.madt, r_hd.khochan, r_hd.theodon, r_hd.tienvat, r_hd.tenmay, r_hd.loaitoa, r_hd.thanhtoan\n );\n\n UPDATE current.pstonkho\n SET tamnhap = COALESCE(tamnhap, 0) + COALESCE(r_hd.soluong, 0)\n WHERE COALESCE(mahh, '') = COALESCE(r_hd.mahh, '')\n AND COALESCE(giavat, 0) = COALESCE(r_hd.giavat, 0)\n AND COALESCE(khocp, '') = COALESCE(r_hd.khole, '')\n AND COALESCE(handung, '') = COALESCE(r_hd.handung, '')\n AND COALESCE(solo, '') = COALESCE(r_hd.solo, '')\n AND COALESCE(thangkt, '') = COALESCE(thangkt_S, '')\n AND COALESCE(namkt, '') = COALESCE(namkt_S, '');\n\n tong_thanhtien := tong_thanhtien + COALESCE(r_hd.thanhtien, 0);\n tong_thanhtienbhyt := tong_thanhtienbhyt + COALESCE(r_hd.thanhtienbhyt, 0);\n tong_thanhtienvat := tong_thanhtienvat + COALESCE(r_hd.tienvat, 0);\n END IF;\n END LOOP;\n\n FOR r_ct IN\n SELECT *\n FROM current.chungtu ct\n WHERE ct.sohd = p_sohd\n AND ct.mabn = p_mabn\n AND ct.makh = p_makh\n AND COALESCE(ct.xoa, 0) = 0\n LOOP\n INSERT INTO current.chungtu(\n sohd, sohdx, iddienbien, mabn, makh, madt, madv,\n manv, ngayuong, ghichu, khole,\n ngayhd, ngaylap, giolap, thanhtien, thangkt, namkt,\n loaixn, noitru, taikhoan, maicd, kqcdoan, maicdp, kqcdoanp, api, thanhtoan, toaxv,\n khochan, tienvat, tenmay, taikham, loaitoa, mathe, thanhtienbhyt, mayhct, tenyhct\n )\n VALUES (\n v_code, r_ct.sohd, r_ct.iddienbien, r_ct.mabn, r_ct.makh, r_ct.madt, r_ct.madv,\n r_ct.manv, r_ct.ngayuong, r_ct.ghichu, r_ct.khole,\n r_ct.ngayhd, r_ct.ngaylap, now(), tong_thanhtien, thangkt_S, namkt_S,\n 'nkt', r_ct.noitru, r_ct.taikhoan, r_ct.maicd, r_ct.kqcdoan, r_ct.maicdp, r_ct.kqcdoanp, r_ct.api, r_ct.thanhtoan, r_ct.toaxv,\n r_ct.khochan, tong_thanhtienvat, r_ct.tenmay, r_ct.taikham, r_ct.loaitoa, r_ct.mathe, tong_thanhtienbhyt, r_ct.mayhct, r_ct.tenyhct\n );\n END LOOP;\n\n RETURN jsonb_build_object(\n 'status', 'success',\n 'message', format('Thêm thành công chứng từ trả %s', v_code)\n );\n\n ELSE -- Thuốc chưa tổng hợp\n\t\tSELECT COUNT(DISTINCT mahh) INTO so_mahh\n FROM current.pshdxn\n WHERE mabn = p_mabn\n AND makh = p_makh\n AND sohd = p_sohd\n AND COALESCE(xoa,0) = 0\n AND COALESCE(dain,0) = 0;\n\n FOR r_hd IN\n SELECT *\n FROM current.pshdxn hd\n WHERE hd.mahh = p_mahh\n AND hd.sohd = p_sohd\n AND hd.mabn = p_mabn\n AND hd.makh = p_makh\n AND COALESCE(hd.xoa, 0) = 0\n AND COALESCE(hd.dain, 0) = 0\n LOOP\n IF COALESCE(r_hd.soluong, 0) > 0 THEN\n UPDATE CURRENT.pshdxn SET xoa = 1, ngayxoa = NOW()\n WHERE mahh = p_mahh\n AND sohd = p_sohd\n AND mabn = p_mabn\n AND makh = p_makh;\n UPDATE current.pstonkho\n SET tamnhap = COALESCE(tamnhap, 0) + COALESCE(r_hd.soluong, 0)\n WHERE COALESCE(mahh, '') = COALESCE(r_hd.mahh, '')\n AND COALESCE(giavat, 0) = COALESCE(r_hd.giavat, 0)\n AND COALESCE(khocp, '') = COALESCE(r_hd.khole, '')\n AND COALESCE(handung, '') = COALESCE(r_hd.handung, '')\n AND COALESCE(solo, '') = COALESCE(r_hd.solo, '')\n AND COALESCE(thangkt, '') = COALESCE(thangkt_S, '')\n AND COALESCE(namkt, '') = COALESCE(namkt_S, '');\n\n tong_thanhtien := tong_thanhtien + COALESCE(r_hd.thanhtien, 0);\n tong_thanhtienbhyt := tong_thanhtienbhyt + COALESCE(r_hd.thanhtienbhyt, 0);\n tong_thanhtienvat := tong_thanhtienvat + COALESCE(r_hd.tienvat, 0);\n END IF;\n END LOOP;\n\n FOR r_ct IN\n SELECT *\n FROM current.chungtu ct\n WHERE ct.sohd = p_sohd\n AND ct.mabn = p_mabn\n AND ct.makh = p_makh\n AND COALESCE(ct.xoa, 0) = 0\n LOOP\n IF so_mahh = 1 THEN --xóa chưng từ\n UPDATE CURRENT.chungtu SET xoa = 1, ngayxoa = NOW()\n WHERE sohd = p_sohd\n AND mabn = p_mabn\n AND makh = p_makh;\n ELSE -- cập nhật chứng từ theo tiền còn lại lại\n \tUPDATE CURRENT.chungtu SET\n \tthanhtien = tong_thanhtien,\n tienvat = tong_thanhtienvat,\n thanhtienbhyt = tong_thanhtienbhyt\n WHERE sohd = p_sohd\n AND mabn = p_mabn\n AND makh = p_makh;\n\n END IF;\n\n END LOOP;\n\n RETURN jsonb_build_object(\n 'status', 'success',\n 'message', format('Cập nhật thành công chứng từ trả %s', p_sohd)\n );\n END IF;\n\nEXCEPTION\n WHEN OTHERS THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', SQLERRM\n );\nEND;\n$$ LANGUAGE plpgsql;\n\n"
4503
+ codesql: "\n\nCREATE OR REPLACE FUNCTION badt_dhs.cancelTPPrescription(input_json JSONB)\nRETURNS JSONB AS $$\nDECLARE\n-- Lastest commit: author:Nguyễn Triều Vương; date: 2025-09-10 11:20:02\n-- ===============================================================\n-- Thực hiện: NGUYỄN TRIỀU VƯƠNG - 2025-08-11\n-- Hàm: badt_dhs.cancelTPPrescription(input_json JSONB)\n-- Mô tả: Hủy 1 thuốc trong toa\n-- input_json: nội dung file json: thông tin bệnh nhân và toa thuốc\n-- Sử dụng:\n-- SELECT badt_dhs.cancelTPPrescription(input_json JSONB);\n-- Nếu thuốc đã tổng hơp --\x3e tạo toa trả với thông tin thuốc trong json --\x3e theo tháng năm kế toán hiện tại\n-- Nếu thuốc thuốc chưa tổng hợp --\x3e xóa thuốc trong pshdxn --\x3e tăng pstonkho.tamnhap --\x3e xóa chungtu hoặc điều chỉnh theo thuốc còn lại trong pshdxn\n-- ===============================================================\n--Số lượng thuốc ngưng sử dụng\n-- Lấy tháng năm kế toán\n--Kiểm tra số lượng xuất - trả\n--TUTRUC\n-- Lấy chi tiết thuốc trả\n-- Ghi vào pshdxn\n-- Cập nhật tồn kho tủ trưc\n-- Cộng tổng\n-- Ghi chứng từ\n--ENDTUTRUC\n-- 2. Kiểm tra đã in chứng từ hay chưa\n--\n-- 1. Kiểm tra còn đủ số lượng để trả\n-- Lấy chi tiết thuốc trả\n-- Ghi vào pshdxn\n-- Cập nhật tồn kho\n-- Cộng tổng\n-- Ghi chứng từ\n-- Lấy chi tiết thuốc trả\n-- UPDATE\n-- Cập nhật tồn kho\n-- Cộng tổng\n-- Ghi chứng từ\n-- UPDATE\n p_mabn TEXT := input_json->>'PatientCode'; --Mã bệnh nhân\n p_makh TEXT := input_json->>'MedicalRecordNo'; -- Mã bệnh án\n p_makb TEXT := input_json->>'AdmissionCode'; -- Mã khám bệnh\n p_iddienbien TEXT := input_json->>'TPCode'; -- ID diễn biến\n p_sohd TEXT := input_json->>'PresCode'; -- Số hd\n p_mahh TEXT := input_json->>'PresDtlCode'; --Mã hàng hóa\n\n p_sang NUMERIC := input_json->>'CancelMorningQty'; --Số lượng thuốc ngưng sáng\n p_trua NUMERIC := input_json->>'CancelMiddayQty'; --Số lượng thuốc ngưng trưa\n p_chieu NUMERIC := input_json->>'CancelAfternoonQty'; --Số lượng thuốc chiều\n p_toi NUMERIC := input_json->>'CancelEveningQty'; --Số lượng thuốc tối\n\n p_soluong NUMERIC := input_json->>'CancelDispenseQty'; --Tổng số lượng thuốc ngưng\n p_matutruc TEXT := COALESCE(input_json->>'Matutruc',''); --Mã tủ trực\n\n tong_thanhtien NUMERIC := 0;\n tong_thanhtienbhyt NUMERIC := 0;\n tong_thanhtienvat NUMERIC := 0;\n tong NUMERIC := 0;\n so_mahh NUMERIC := 0;\n tong_tien_tra NUMERIC := 0;\n sl_xuat_tutruc NUMERIC := 0;\n\n r_hd RECORD;\n r_ct RECORD;\n\n thangnam TEXT;\n thangkt_S TEXT;\n namkt_S TEXT;\n v_code TEXT;\n \n r_mahh TEXT;\n r_sohd TEXT;\n r_matutuc TEXT;\n \n v_dain_exists BOOLEAN;\n v_matutruc_exists BOOLEAN;\n v_toatutruc_exists BOOLEAN;\n \nBEGIN\n SELECT giatri INTO thangnam FROM current.system WHERE tents = 'thanglv';\n \tthangkt_S := SPLIT_PART(thangnam, '/', 1);\n namkt_S := SPLIT_PART(thangnam, '/', 2);\n\n SELECT COALESCE(sohd,''), COALESCE(mahh,''), COALESCE(tutruc,'') INTO r_sohd, r_mahh, r_matutuc\n FROM current.pshdxn\n WHERE mabn = p_mabn\n AND makh = p_makh\n AND sohd = p_sohd\n AND mahh = p_mahh\n AND COALESCE(xoa, 0) = 0 ;\n\n IF r_mahh = '' THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('PresDtlCode: %s không tồn tại', p_mahh)\n );\n END IF;\n\n IF r_sohd = '' THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Hóa đơn %s (iddienbien=%s) không tồn tại', p_sohd, p_iddienbien)\n );\n END IF;\n\n\n IF r_matutuc != '' THEN -- toa tủ trực\n \tSELECT EXISTS (\n SELECT 1 FROM current.dmdonvi WHERE madv = p_matutruc AND COALESCE(xoa, 0) = 0\n ) INTO v_matutruc_exists;\n\n IF NOT v_matutruc_exists THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Mã tủ trực: %s không tồn tại', p_matutruc)\n );\n END IF;\n\n SELECT EXISTS (\n SELECT 1\n FROM current.pshdxn\n WHERE mabn = p_mabn\n AND makh = p_makh\n AND sohd = p_sohd\n AND mahh = p_mahh\n AND tutruc = p_matutruc\n AND COALESCE(xoa, 0) = 0\n ) INTO v_toatutruc_exists;\n\n IF NOT v_toatutruc_exists THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Toa tủ trực : %s không tồn tại', p_sohd)\n );\n END IF;\n\n v_code := CASE WHEN length(p_sohd) > 14 THEN LEFT(p_sohd, 14) ELSE p_sohd END;\n v_code := v_code || to_char(NOW(), 'HH24MISS');\n\n SELECT Sum(toncuoi) AS toncuoi INTO sl_xuat_tutruc\n FROM\n ( SELECT Sum(soluong) AS toncuoi\n FROM CURRENT.pshdxn\n WHERE mahh = p_mahh\n AND makh = p_makh\n AND COALESCE(tutruc,'') = p_matutruc\n AND sohd = p_sohd\n AND loaixn = 'xbb'\n AND toatutruc IN (1,2)\n AND COALESCE(noitru,0) = 1\n AND COALESCE(xoa,0) = 0\n AND COALESCE(toacon, 0) = 0\n AND COALESCE(kyhieu,'')=''\n UNION\n SELECT Sum(-soluong) AS toncuoi\n FROM CURRENT.pshdxn\n WHERE mahh = p_mahh\n AND makh = p_makh\n AND COALESCE(tutruc,'') = p_matutruc\n AND sohdx = p_sohd\n AND loaixn = 'ttt'\n AND COALESCE(noitru,0) = 1\n AND COALESCE(xoa,0) = 0\n AND COALESCE(toacon, 0) = 0\n AND COALESCE(kyhieu,'')=''\n AND COALESCE(thanhtoan, '') = ''\n ) AS tam;\n \n IF p_soluong > sl_xuat_tutruc THEN\n \tRETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Số lượng trả lớn hơn số lượng xuất: trả %s, xuất %s', p_soluong,sl_xuat_tutruc)\n );\n END IF;\n FOR r_hd IN\n SELECT *, p_soluong as soluong_tra\n FROM current.pshdxn hd\n WHERE hd.mahh = p_mahh\n AND hd.sohd = p_sohd\n AND hd.mabn = p_mabn\n AND hd.makh = p_makh\n AND hd.tutruc = p_matutruc\n AND COALESCE(hd.xoa, 0) = 0\n LOOP\n IF COALESCE(r_hd.soluong, 0) > 0 THEN\n INSERT INTO current.pshdxn(\n sohd, sohdx, iddienbien, mabn, makh,\n mahh, ngayhd, ngaylap, giolap, madv,\n soluong, sang, trua, chieu, toi, lieu_dung, cachuong,\n giaban, giavat, giabhyt, thanhtien, thanhtienbhyt, bhyt,\n handung, solo, visa, thangkt, namkt,\n stt, loaixn, noitru, khole, toaxv,\n madt, khochan, theodon, tienvat, tenmay, loaitoa, thanhtoan, \n tutruc, dain, toatutruc\n )\n VALUES (\n v_code, r_hd.sohd, r_hd.iddienbien, r_hd.mabn, r_hd.makh,\n r_hd.mahh, r_hd.ngayhd, r_hd.ngaylap, now(), r_hd.madv,\n r_hd.soluong_tra, r_hd.sang, r_hd.trua, r_hd.chieu, r_hd.toi, r_hd.lieu_dung, r_hd.cachuong,\n r_hd.giaban, r_hd.giavat, r_hd.giabhyt, r_hd.thanhtien, r_hd.thanhtienbhyt, r_hd.bhyt,\n r_hd.handung, r_hd.solo, r_hd.visa, thangkt_S, namkt_S,\n r_hd.stt, 'ttt', r_hd.noitru, r_hd.khole, 0,\n r_hd.madt, r_hd.khochan, r_hd.theodon, r_hd.tienvat, r_hd.tenmay, r_hd.loaitoa, r_hd.thanhtoan,\n r_hd.tutruc, 1,1\n );\n\n UPDATE current.pstonkho\n SET nhap = COALESCE(nhap, 0) + COALESCE(r_hd.soluong_tra,0),\n toncuoi = COALESCE(toncuoi, 0) + COALESCE(r_hd.soluong_tra,0)\n WHERE COALESCE(mahh, '') = COALESCE(r_hd.mahh, '')\n AND COALESCE(giavat, 0) = COALESCE(r_hd.giavat, 0)\n AND COALESCE(madv, '') = COALESCE(r_hd.tutruc, '')\n AND COALESCE(handung, '') = COALESCE(r_hd.handung, '')\n AND COALESCE(thangkt, '') = COALESCE(thangkt_S, '')\n AND COALESCE(namkt, '') = COALESCE(namkt_S, '');\n\n tong_thanhtien := tong_thanhtien + COALESCE(r_hd.thanhtien, 0);\n tong_thanhtienbhyt := tong_thanhtienbhyt + COALESCE(r_hd.thanhtienbhyt, 0);\n tong_thanhtienvat := tong_thanhtienvat + COALESCE(r_hd.tienvat, 0);\n tong_tien_tra := tong_tien_tra + COALESCE(r_hd.giavat, 0) * COALESCE(r_hd.soluong_tra, 0);\n END IF;\n END LOOP;\n\n FOR r_ct IN\n SELECT *\n FROM current.chungtu ct\n WHERE ct.sohd = p_sohd\n AND ct.mabn = p_mabn\n AND ct.makh = p_makh\n AND ct.tutruc = p_matutruc\n AND COALESCE(ct.xoa, 0) = 0\n LOOP\n INSERT INTO current.chungtu(\n sohd, sohdx, iddienbien, mabn, makh, madt, madv,\n manv, ngayuong, ghichu, khole,\n ngayhd, ngaylap, giolap, thanhtien, thangkt, namkt,\n loaixn, noitru, taikhoan, maicd, kqcdoan, maicdp, kqcdoanp, api, thanhtoan, toaxv,\n khochan, tienvat, tenmay, taikham, loaitoa, mathe, thanhtienbhyt, mayhct, tenyhct,\n tutruc, dain, toatutruc\n )\n VALUES (\n v_code, r_ct.sohd, r_ct.iddienbien, r_ct.mabn, r_ct.makh, r_ct.madt, r_ct.madv,\n r_ct.manv, r_ct.ngayuong, r_ct.ghichu, r_ct.khole,\n r_ct.ngayhd, r_ct.ngaylap, now(), tong_thanhtien, thangkt_S, namkt_S,\n 'ttt', r_ct.noitru, r_ct.taikhoan, r_ct.maicd, r_ct.kqcdoan, r_ct.maicdp, r_ct.kqcdoanp, r_ct.api, r_ct.thanhtoan, r_ct.toaxv,\n r_ct.khochan, tong_thanhtienvat, r_ct.tenmay, r_ct.taikham, r_ct.loaitoa, r_ct.mathe, tong_thanhtienbhyt, r_ct.mayhct, r_ct.tenyhct,\n r_ct.tutruc, 1,1\n );\n END LOOP;\n\n RETURN jsonb_build_object(\n 'status', 'success',\n 'message', format('Thêm thành công chứng từ trả tủ trực %s, chứng từ mới: %s',p_matutruc, v_code)\n );\n ELSE --toa thường\n SELECT EXISTS (\n SELECT 1\n FROM current.pshdxn\n WHERE mabn = p_mabn\n AND makh = p_makh\n AND sohd = p_sohd\n AND mahh = p_mahh\n AND COALESCE(xoa, 0) = 0\n AND COALESCE(dain, 0) = 1\n ) INTO v_dain_exists;\n\n \tIF v_dain_exists THEN\n\n v_code := CASE WHEN length(p_sohd) > 14 THEN LEFT(p_sohd, 14) ELSE p_sohd END;\n v_code := v_code || to_char(NOW(), 'HH24MISS');\n\n SELECT SUM(CASE WHEN loaixn = 'xbb' AND COALESCE(dain,0) = 1 THEN soluong ELSE 0 END)\n - SUM(CASE WHEN loaixn = 'nkt' THEN soluong ELSE 0 END)\n INTO tong\n FROM current.pshdxn\n WHERE mabn = p_mabn\n AND makh = p_makh\n AND mahh = p_mahh\n AND COALESCE(xoa, 0) = 0;\n\n IF tong <= 0 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Thuốc/vật tư %s đã trả đủ số lượng, không thể trả thêm', p_mahh)\n );\n END IF;\n\n FOR r_hd IN\n SELECT *, p_soluong as soluong_tra\n FROM current.pshdxn hd\n WHERE hd.mahh = p_mahh\n AND hd.sohd = p_sohd\n AND hd.mabn = p_mabn\n AND hd.makh = p_makh\n AND COALESCE(hd.xoa, 0) = 0\n LOOP\n IF COALESCE(r_hd.soluong, 0) > 0 THEN\n INSERT INTO current.pshdxn(\n sohd, sohdx, iddienbien, mabn, makh,\n mahh, ngayhd, ngaylap, giolap, madv,\n soluong, sang, trua, chieu, toi, lieu_dung, cachuong,\n giaban, giavat, giabhyt, thanhtien, thanhtienbhyt, bhyt,\n handung, solo, visa, thangkt, namkt,\n stt, loaixn, noitru, khole, toaxv,\n madt, khochan, theodon, tienvat, tenmay, loaitoa, thanhtoan\n )\n VALUES (\n v_code, r_hd.sohd, r_hd.iddienbien, r_hd.mabn, r_hd.makh,\n r_hd.mahh, r_hd.ngayhd, r_hd.ngaylap, now(), r_hd.madv,\n r_hd.soluong_tra, r_hd.sang, r_hd.trua, r_hd.chieu, r_hd.toi, r_hd.lieu_dung, r_hd.cachuong,\n r_hd.giaban, r_hd.giavat, r_hd.giabhyt, r_hd.thanhtien, r_hd.thanhtienbhyt, r_hd.bhyt,\n r_hd.handung, r_hd.solo, r_hd.visa, thangkt_S, namkt_S,\n r_hd.stt, 'nkt', r_hd.noitru, r_hd.khole, 0,\n r_hd.madt, r_hd.khochan, r_hd.theodon, r_hd.tienvat, r_hd.tenmay, r_hd.loaitoa, r_hd.thanhtoan\n );\n\n UPDATE current.pstonkho\n SET tamnhap = COALESCE(tamnhap, 0) + COALESCE(r_hd.soluong_tra, 0)\n WHERE COALESCE(mahh, '') = COALESCE(r_hd.mahh, '')\n AND COALESCE(giavat, 0) = COALESCE(r_hd.giavat, 0)\n AND COALESCE(khocp, '') = COALESCE(r_hd.khole, '')\n AND COALESCE(handung, '') = COALESCE(r_hd.handung, '')\n AND COALESCE(thangkt, '') = COALESCE(thangkt_S, '')\n AND COALESCE(namkt, '') = COALESCE(namkt_S, '');\n\n tong_thanhtien := tong_thanhtien + COALESCE(r_hd.thanhtien, 0);\n tong_thanhtienbhyt := tong_thanhtienbhyt + COALESCE(r_hd.thanhtienbhyt, 0);\n tong_thanhtienvat := tong_thanhtienvat + COALESCE(r_hd.tienvat, 0);\n tong_tien_tra := tong_tien_tra + COALESCE(r_hd.giavat, 0) * COALESCE(r_hd.soluong_tra, 0);\n END IF;\n END LOOP;\n\n FOR r_ct IN\n SELECT *\n FROM current.chungtu ct\n WHERE ct.sohd = p_sohd\n AND ct.mabn = p_mabn\n AND ct.makh = p_makh\n AND COALESCE(ct.xoa, 0) = 0\n LOOP\n INSERT INTO current.chungtu(\n sohd, sohdx, iddienbien, mabn, makh, madt, madv,\n manv, ngayuong, ghichu, khole,\n ngayhd, ngaylap, giolap, thanhtien, thangkt, namkt,\n loaixn, noitru, taikhoan, maicd, kqcdoan, maicdp, kqcdoanp, api, thanhtoan, toaxv,\n khochan, tienvat, tenmay, taikham, loaitoa, mathe, thanhtienbhyt, mayhct, tenyhct\n )\n VALUES (\n v_code, r_ct.sohd, r_ct.iddienbien, r_ct.mabn, r_ct.makh, r_ct.madt, r_ct.madv,\n r_ct.manv, r_ct.ngayuong, r_ct.ghichu, r_ct.khole,\n r_ct.ngayhd, r_ct.ngaylap, now(), tong_thanhtien, thangkt_S, namkt_S,\n 'nkt', r_ct.noitru, r_ct.taikhoan, r_ct.maicd, r_ct.kqcdoan, r_ct.maicdp, r_ct.kqcdoanp, r_ct.api, r_ct.thanhtoan, r_ct.toaxv,\n r_ct.khochan, tong_thanhtienvat, r_ct.tenmay, r_ct.taikham, r_ct.loaitoa, r_ct.mathe, tong_thanhtienbhyt, r_ct.mayhct, r_ct.tenyhct\n );\n END LOOP;\n\n RETURN jsonb_build_object(\n 'status', 'success',\n 'message', format('Thêm thành công chứng từ trả %s', v_code)\n );\n\n ELSE -- Thuốc chưa tổng hợp ---cập nhật [08/09/2025]\n\t\tSELECT COUNT(DISTINCT mahh) INTO so_mahh\n FROM current.pshdxn\n WHERE mabn = p_mabn\n AND makh = p_makh\n AND sohd = p_sohd\n AND COALESCE(xoa,0) = 0\n AND COALESCE(dain,0) = 0;\n\n FOR r_hd IN\n SELECT *, p_soluong as soluong_tra\n FROM current.pshdxn hd\n WHERE hd.mahh = p_mahh\n AND hd.sohd = p_sohd\n AND hd.mabn = p_mabn\n AND hd.makh = p_makh\n AND hd.soluong >= p_soluong --[VUONG] them theo yeu cầu\n AND COALESCE(hd.xoa, 0) = 0\n AND COALESCE(hd.dain, 0) = 0\n LOOP\n RAISE NOTICE 'soluong_tra: %',\n p_soluong;\n IF COALESCE(r_hd.soluong_tra, 0) > 0 THEN --soluong --\x3e soluong_tra\n IF COALESCE(r_hd.soluong_tra, 0) = COALESCE(r_hd.soluong, 0) THEN\n RAISE NOTICE 'soluong=nhau --\x3exóa: %',\n r_hd.soluong;\n UPDATE CURRENT.pshdxn SET xoa = 1, ngayxoa = NOW()\n WHERE mahh = p_mahh\n AND sohd = p_sohd\n AND mabn = p_mabn\n AND makh = p_makh\n AND soluong = r_hd.soluong_tra;\n ELSE --So luong tra < soluong\n RAISE NOTICE 'soluong > hơn --\x3egiảm: %', r_hd.soluong;\n UPDATE CURRENT.pshdxn SET\n \tsang = sang - p_sang,\n trua = trua - p_trua,\n chieu = chieu - p_chieu,\n toi = toi - p_toi,\n soluong = soluong - r_hd.soluong_tra,\n thanhtien = (r_hd.soluong - r_hd.soluong_tra) * r_hd.giavat,\n thanhtienbhyt = (r_hd.soluong - r_hd.soluong_tra) * r_hd.giavat\n WHERE mahh = p_mahh\n AND sohd = p_sohd\n AND mabn = p_mabn\n AND makh = p_makh\n AND soluong > r_hd.soluong_tra;\n END IF;\n\n RAISE NOTICE 'Cập nhật tồn kho, chưa tổng hợp: %', r_hd.soluong_tra;\n UPDATE current.pstonkho\n SET tamxuat = COALESCE(tamxuat, 0) - COALESCE(r_hd.soluong_tra, 0)\n WHERE COALESCE(mahh, '') = COALESCE(r_hd.mahh, '')\n AND COALESCE(giavat, 0) = COALESCE(r_hd.giavat, 0)\n AND COALESCE(khocp, '') = COALESCE(r_hd.khole, '')\n AND COALESCE(handung, '') = COALESCE(r_hd.handung, '')\n AND COALESCE(thangkt, '') = COALESCE(thangkt_S, '')\n AND COALESCE(namkt, '') = COALESCE(namkt_S, '');\n\n tong_thanhtien := tong_thanhtien + COALESCE(r_hd.thanhtien, 0);\n tong_thanhtienbhyt := tong_thanhtienbhyt + COALESCE(r_hd.thanhtienbhyt, 0);\n tong_thanhtienvat := tong_thanhtienvat + COALESCE(r_hd.tienvat, 0);\n tong_tien_tra := tong_tien_tra + COALESCE(r_hd.giavat, 0) * COALESCE(r_hd.soluong_tra, 0);\n\n RAISE NOTICE 'tong_thanhtien: %', tong_thanhtien;\n RAISE NOTICE 'tong_thanhtienbhyt: %', tong_thanhtienbhyt;\n RAISE NOTICE 'tong_thanhtienvat: %', tong_thanhtienvat;\n RAISE NOTICE 'tong_tien_tra: %', tong_tien_tra;\n END IF;\n END LOOP;\n\n FOR r_ct IN\n SELECT *\n FROM current.chungtu ct\n WHERE ct.sohd = p_sohd\n AND ct.mabn = p_mabn\n AND ct.makh = p_makh\n AND COALESCE(ct.xoa, 0) = 0\n LOOP\n IF so_mahh = 1 THEN --xóa chưng từ\n RAISE NOTICE 'Tổng tiền chứng từ %', r_ct.thanhtien;\n IF r_ct.thanhtien = tong_tien_tra THEN\n RAISE NOTICE 'Xoa chứng từ %', r_ct.sohd;\n UPDATE CURRENT.chungtu SET xoa = 1, ngayxoa = NOW()\n WHERE sohd = p_sohd\n AND mabn = p_mabn\n AND makh = p_makh;\n ELSE\n RAISE NOTICE 'Cập nhật chứng từ %', r_ct.sohd;\n \tUPDATE CURRENT.chungtu SET\n thanhtien = thanhtien - tong_tien_tra,\n tienvat = tienvat - tong_tien_tra,\n thanhtienbhyt = thanhtienbhyt - tong_tien_tra\n WHERE sohd = p_sohd\n AND mabn = p_mabn\n AND makh = p_makh;\n END IF;\n ELSE -- cập nhật chứng từ theo tiền còn lại lại\n RAISE NOTICE 'Cập nhật chứng từ, còn lại %', r_ct.sohd;\n \tUPDATE CURRENT.chungtu SET\n \tthanhtien = thanhtien - tong_tien_tra,\n tienvat = tienvat - tong_tien_tra,\n thanhtienbhyt = thanhtienbhyt - tong_tien_tra\n WHERE sohd = p_sohd\n AND mabn = p_mabn\n AND makh = p_makh;\n\n END IF;\n\n END LOOP;\n\n RETURN jsonb_build_object(\n 'status', 'success',\n 'message', format('Cập nhật thành công chứng từ trả %s', p_sohd)\n );\n END IF;\n END IF; \n\nEXCEPTION\n WHEN OTHERS THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', SQLERRM\n );\nEND;\n$$ LANGUAGE plpgsql;\n\n"
4504
4504
  },
4505
4505
  "badt_dhs.getCUTPParaClinRequest": {
4506
4506
  name: "badt_dhs.getCUTPParaClinRequest",
@@ -4528,9 +4528,9 @@
4528
4528
  },
4529
4529
  "badt_dhs.getInventoryMedicalRecordNo": {
4530
4530
  name: "badt_dhs.getInventoryMedicalRecordNo",
4531
- para: ["mahh", "mabn", "maba", "IsTuTruc", "IsNhaThuoc"],
4531
+ para: ["mahh", "mabn", "maba", "IsTuTruc", "IsNhaThuoc", "IsDongYThanhPham", "IsDongYThuocThang"],
4532
4532
  returns: "text",
4533
- codesql: "\n\n\n\nCREATE OR REPLACE FUNCTION badt_dhs.getInventoryMedicalRecordNo(mahh TEXT,mabn TEXT, maba TEXT, IsTuTruc BOOLEAN, IsNhaThuoc BOOLEAN)\nRETURNS text\nLANGUAGE plpgsql\nAS $$\nDECLARE\n-- Lastest commit: author:onghaup; date: 2025-08-05 07:41:03\n-- ===============================================================\n-- Thực hiện: NGUYỄN TRIỀU VƯƠNG - 2025-06-17\n-- Hàm: badt_dhs.getInventoryMedicalRecordNo(mahh TEXT DEFAULT NULL, mabn TEXT, maba TEXT)\n-- Mô tả:\n-- - Nếu mahh IS NULL hoặc rỗng ('') => lấy toàn bộ dữ liệu, theo khocp, thangt, namkt: lấy từ bnnoitru, dmdoituongkhocp và system\n--\n-- Sử dụng:\n-- SELECT badt_dhs.getInventoryMedicalRecordNo('','2023031755','017517'); -- Lấy toàn bộ tồn kho\n-- SELECT badt_dhs.getInventoryMedicalRecordNo('3B08','2023031755','017517'); -- Lấy tồn kho, theo mahh='3B08'\n-- ===============================================================\n-- Lấy madt\n-- Lấy khocp theo đối tượng\n-- Lấy list mã tủ trực thuộc khoa\n-- Lấy tháng/năm kế toán\n--[ÔNG TRIỆU HẬU - 2025-08-04]: Chỉnh COALESCE để tránh kết quả null\n--[ÔNG TRIỆU HẬU 2025-07-14]: Chỉ loại trừ 04, VTYT ![](https://staging-jubilee.flickr.com/65535/54660882369_0996f0311b_c.jpg)\n result text;\n p_mahh ALIAS FOR mahh;\n p_mabn ALIAS FOR mabn;\n p_maba ALIAS FOR maba;\n p_istutruc ALIAS FOR IsTuTruc;\t\t--NQHOA 2025-07-25 : bổ sung nhận biết lấy thuốc từ tủ trực => ưu tiên nếu p_istutruc = true\n p_isnhathuoc ALIAS FOR IsNhaThuoc;\t--NQHOA 2025-07-25 : bổ sung nhận biết lấy thuốc từ nhà thuốc => IsTuTruc = false và IsNhaThuoc = true\n \t\t\t\t\t\t\t\t\n madt_nt TEXT;\n madv_nt TEXT;\n maicd_nt TEXT;\n kqcdoan_nt TEXT;\n maicdp_nt TEXT;\n kqcdoanp_nt TEXT;\n\n thangnam TEXT;\n thangkt_S TEXT; \t-- thangkt, lấy cho đủ số liệu, toa thuốc mới lên module\n namkt_S TEXT; \t--namkt, lấy cho đủ số liệu, toa thuốc mới lên module\n\n khocp_dt TEXT; \t--khocp theo đối tượng\n kho_tutruc TEXT[]; --kho tủ trực\nBEGIN\n SELECT madt, madv, maicd, kqcdoan, maicdp, kqcdoanp INTO madt_nt, madv_nt, maicd_nt, kqcdoan_nt, maicdp_nt, kqcdoanp_nt -- lấy cho đủ số liệu\n FROM current.bnnoitru nt\n WHERE nt.mabn = p_mabn AND nt.maba = p_maba;\n\n SELECT khocp INTO khocp_dt FROM current.dmdoituongkhocp WHERE madt= madt_nt and (noitru = 1 or noitru = 2) ORDER BY noitru LIMIT 1; \n \n SELECT array_agg(madv)::TEXT[] INTO kho_tutruc\t\t\t\t\t\t\t\t--NQHOA 2025-07-25 : đổ kết quả tủ trực thuộc bnnoitru.madv để tìm kiếm tồn kho nếu lấy thuốc từ tủ trực (IsTuTruc = true)\n\t\tFROM current.dmdonvi \n\t\tWHERE loaidv = 3 AND COALESCE(vietngan, '') = madv_nt;\n SELECT giatri INTO thangnam FROM current.system WHERE tents = 'thanglv';\n thangkt_S := SPLIT_PART(thangnam, '/', 1);\n namkt_S := SPLIT_PART(thangnam, '/', 2);\n\n \n\n SELECT json_agg(row_data)::text\n INTO result\n FROM (\n SELECT tk.mahh, --as InvCode, --mahh\n th.tenhh,-- as InvName, --tenhh\n th.tenhc,-- as ActiveIngredient, --Hoạc chất\n th.hamluong,-- as DrugContent, -- Hàm lượng\n th.dvt,-- as UOMCode, --dvt,\n tk.giavat,-- as PriceVAT, --giá vat,\n tk.giaxuat,-- as Price, -- giá xuất,\n tk.giabhyt,-- as PriceHI, --giá bh ,\n tk.handung,-- as expDate, --Hạn dùng\n tk.visa,\n tk.solo,-- as lotNumber, -- Số lô\n tk.toncuoi - COALESCE(tk.tamxuat,0) as toncuoi,-- as Stock, --tồn kho (tồn cuối) --NQHOA 2025-07-25 : điều chỉnh trả về tồn kho đã trừ tạm xuất\n COALESCE(k.bhyt,0) AS bhyt,-- as IsHI, --thanh bh: 0 không thanh, 1: thanh\n tk.khocp,-- as StoreHouseCode, --mã khoa (khocp)\n COALESCE(tk.madv,'') AS madv,-- as CabinetCode, --Mã tủ trực (madv)\n tk.thangkt,-- as sMonth, --Tháng kết toán\n tk.namkt-- as sYear --Năm kế toán\n FROM current.pstonkho tk\n INNER JOIN current.dmthuoc th ON tk.mahh = th.mahh\n INNER JOIN current.dmkho k ON tk.mahh = k.mahh\n INNER JOIN current.dmloaikhoql lk ON th.kho = lk.kho AND lk.kho <> '04' --[ÔNG TRIỆU HẬU 2025-07-14: Thêm các kho khác: '05','06','09' ] ![](https://live.staticflickr.com/65535/54653345774_6b2e64fccd_b.jpg)\n WHERE (p_mahh IS NULL OR p_mahh = '' OR tk.mahh = p_mahh) \n AND tk.thangkt = thangkt_S\n AND tk.namkt = namkt_S\n AND COALESCE(tk.uutien,'') != '2'\n AND (COALESCE(tk.toncuoi,0) - COALESCE(tk.tamxuat,0)) > 0\n AND (\n \t p_istutruc = FALSE AND p_isnhathuoc = FALSE AND COALESCE(tk.khocp, '') = COALESCE(khocp_dt, '')\n OR p_istutruc = TRUE AND (COALESCE(tk.khocp, '') = '') AND (COALESCE(tk.madv, '') = ANY(kho_tutruc))\t\t--NQHOA 2025-07-25 : Bổ sung kiểm tra nếu lấy thuốc từ tủ trực sẽ where theo madv\n OR p_istutruc = FALSE AND p_isnhathuoc = TRUE AND (COALESCE(tk.khocp, '') = '13')\n \t )\t\n \t \n ORDER BY tk.mahh, tk.handung, tk.uutien\n ) AS row_data;\n RETURN result;\nEND;\n$$;\n\n"
4533
+ codesql: "\n\n\n\nCREATE OR REPLACE FUNCTION badt_dhs.getInventoryMedicalRecordNo(mahh TEXT,mabn TEXT, maba TEXT, IsTuTruc BOOLEAN, IsNhaThuoc BOOLEAN, IsDongYThanhPham BOOLEAN, IsDongYThuocThang BOOLEAN)\nRETURNS text\nLANGUAGE plpgsql\nAS $$\nDECLARE\n-- Lastest commit: author:onghaup; date: 2025-09-08 14:34:33\n-- ===============================================================\n-- Thực hiện: NGUYỄN TRIỀU VƯƠNG - 2025-06-17\n-- Hàm: badt_dhs.getInventoryMedicalRecordNo(mahh TEXT DEFAULT NULL, mabn TEXT, maba TEXT)\n-- Mô tả:\n-- - Nếu mahh IS NULL hoặc rỗng ('') => lấy toàn bộ dữ liệu, theo khocp, thangt, namkt: lấy từ bnnoitru, dmdoituongkhocp và system\n--\n-- Sử dụng:\n-- SELECT badt_dhs.getInventoryMedicalRecordNo('','2023031755','017517'); -- Lấy toàn bộ tồn kho\n-- SELECT badt_dhs.getInventoryMedicalRecordNo('3B08','2023031755','017517'); -- Lấy tồn kho, theo mahh='3B08'\n-- ===============================================================\n--Thêm chức năng lấy kho Đông y Thuốc thang, tạo sẵn, chưa xử lý\n-- Lấy madt\n--NTVUONG 2025-08-25 : Kiểm tra thông tin bệnh\n-- Xử lý trường hợp p_isDongYThuocThang = true trả về dữ liệu trống\n-- Lấy khocp theo đối tượng\n-- ÔNG TRIỆU HẬU - 2025-09-08 : Lấy khocp cho Đông y Thành phẩm\n-- Logic gốc cho các trường hợp khác\n-- -- Lấy khocp theo đối tượng\n-- SELECT khocp INTO khocp_dt FROM current.dmdoituongkhocp WHERE madt= madt_nt and (noitru = 1 or noitru = 2) ORDER BY noitru LIMIT 1; \n-- Lấy list mã tủ trực thuộc khoa\n-- Lấy tháng/năm kế toán\n--[ÔNG TRIỆU HẬU - 2025-08-04]: Chỉnh COALESCE để tránh kết quả null\n--[ÔNG TRIỆU HẬU 2025-07-14]: Chỉ loại trừ 04, VTYT ![](https://staging-jubilee.flickr.com/65535/54660882369_0996f0311b_c.jpg)\n result text;\n p_mahh ALIAS FOR mahh;\n p_mabn ALIAS FOR mabn;\n p_maba ALIAS FOR maba;\n p_istutruc ALIAS FOR IsTuTruc;\t\t --NQHOA 2025-07-25 : bổ sung nhận biết lấy thuốc từ tủ trực => ưu tiên nếu p_istutruc = true\n p_isnhathuoc ALIAS FOR IsNhaThuoc;\t --NQHOA 2025-07-25 : bổ sung nhận biết lấy thuốc từ nhà thuốc => IsTuTruc = false và IsNhaThuoc = true\n p_isDongYThanhPham ALIAS FOR IsDongYThanhPham;\t --ÔNG TRIỆU HẬU - 2025-09-08 : Thêm chức năng lấy kho Đông y Thành phẩm\n p_isDongYThuocThang ALIAS FOR IsDongYThuocThang;\t--ÔNG TRIỆU HẬU - 2025-09-08 : \n\n \t\t\t\t\t\t\t\t\n madt_nt TEXT;\n madv_nt TEXT;\n maicd_nt TEXT;\n kqcdoan_nt TEXT;\n maicdp_nt TEXT;\n kqcdoanp_nt TEXT;\n\n thangnam TEXT;\n thangkt_S TEXT; \t-- thangkt, lấy cho đủ số liệu, toa thuốc mới lên module\n namkt_S TEXT; \t--namkt, lấy cho đủ số liệu, toa thuốc mới lên module\n\n khocp_dt TEXT; \t--khocp theo đối tượng\n kho_tutruc TEXT[]; --kho tủ trực\nBEGIN\n SELECT madt, madv, maicd, kqcdoan, maicdp, kqcdoanp INTO madt_nt, madv_nt, maicd_nt, kqcdoan_nt, maicdp_nt, kqcdoanp_nt -- lấy cho đủ số liệu\n FROM current.bnnoitru nt\n WHERE nt.mabn = p_mabn AND nt.maba = p_maba\n\t LIMIT 1 ;\n\n IF NOT FOUND THEN\n RETURN json_build_object(\n 'status', 'error',\n 'message', format('Không tìm thấy bệnh nhân với PatientCode = %s, MedicalRecordNo = %s', p_mabn, p_maba)\n )::text;\n END IF;\n\n IF p_isDongYThuocThang = TRUE THEN\n RETURN '[]'::text;\n END IF;\n \n\n IF p_isDongYThanhPham = TRUE THEN\n SELECT khocp INTO khocp_dt FROM current.dmkhocp WHERE loai = 2 AND dongy = 1 LIMIT 1;\n ELSE\n SELECT khocp INTO khocp_dt FROM current.dmdoituongkhocp WHERE madt= madt_nt and (noitru = 1 or noitru = 2) ORDER BY noitru LIMIT 1;\n END IF;\n \n SELECT array_agg(madv)::TEXT[] INTO kho_tutruc\t\t\t\t\t\t\t\t--NQHOA 2025-07-25 : đổ kết quả tủ trực thuộc bnnoitru.madv để tìm kiếm tồn kho nếu lấy thuốc từ tủ trực (IsTuTruc = true)\n\t\tFROM current.dmdonvi \n\t\tWHERE loaidv = 3 AND COALESCE(vietngan, '') = madv_nt;\n SELECT giatri INTO thangnam FROM current.system WHERE tents = 'thanglv';\n thangkt_S := SPLIT_PART(thangnam, '/', 1);\n namkt_S := SPLIT_PART(thangnam, '/', 2);\n\n \n\n SELECT json_agg(row_data)::text\n INTO result\n FROM (\n SELECT tk.mahh, --as InvCode, --mahh\n th.tenhh,-- as InvName, --tenhh\n th.tenhc,-- as ActiveIngredient, --Hoạc chất\n th.hamluong,-- as DrugContent, -- Hàm lượng\n th.dvt,-- as UOMCode, --dvt,\n tk.giavat,-- as PriceVAT, --giá vat,\n tk.giaxuat,-- as Price, -- giá xuất,\n tk.giabhyt,-- as PriceHI, --giá bh ,\n tk.handung,-- as expDate, --Hạn dùng\n tk.visa,\n tk.solo,-- as lotNumber, -- Số lô\n tk.toncuoi - COALESCE(tk.tamxuat,0) as toncuoi,-- as Stock, --tồn kho (tồn cuối) --NQHOA 2025-07-25 : điều chỉnh trả về tồn kho đã trừ tạm xuất\n COALESCE(k.bhyt,0) AS bhyt,-- as IsHI, --thanh bh: 0 không thanh, 1: thanh\n tk.khocp,-- as StoreHouseCode, --mã khoa (khocp)\n COALESCE(tk.madv,'') AS madv,-- as CabinetCode, --Mã tủ trực (madv)\n tk.thangkt,-- as sMonth, --Tháng kết toán\n tk.namkt-- as sYear --Năm kế toán\n FROM current.pstonkho tk\n INNER JOIN current.dmthuoc th ON tk.mahh = th.mahh\n INNER JOIN current.dmkho k ON tk.mahh = k.mahh\n INNER JOIN current.dmloaikhoql lk ON th.kho = lk.kho AND lk.kho <> '04' --[ÔNG TRIỆU HẬU 2025-07-14: Thêm các kho khác: '05','06','09' ] ![](https://live.staticflickr.com/65535/54653345774_6b2e64fccd_b.jpg)\n WHERE (p_mahh IS NULL OR p_mahh = '' OR tk.mahh = p_mahh) \n AND tk.thangkt = thangkt_S\n AND tk.namkt = namkt_S\n AND COALESCE(tk.uutien,'') != '2'\n AND (COALESCE(tk.toncuoi,0) - COALESCE(tk.tamxuat,0)) > 0\n AND (\n \t p_istutruc = FALSE AND p_isnhathuoc = FALSE AND COALESCE(tk.khocp, '') = COALESCE(khocp_dt, '')\n OR p_istutruc = TRUE AND (COALESCE(tk.khocp, '') = '') AND (COALESCE(tk.madv, '') = ANY(kho_tutruc))\t\t--NQHOA 2025-07-25 : Bổ sung kiểm tra nếu lấy thuốc từ tủ trực sẽ where theo madv\n OR p_istutruc = FALSE AND p_isnhathuoc = TRUE AND (COALESCE(tk.khocp, '') = '13')\n \t )\t\n \t \n ORDER BY tk.mahh, tk.handung, tk.uutien\n ) AS row_data;\n RETURN result;\nEND;\n$$;\n\n\n\n\n"
4534
4534
  },
4535
4535
  "badt_dhs.getSyncMedicalServiceItem": {
4536
4536
  name: "badt_dhs.getSyncMedicalServiceItem",
@@ -4548,13 +4548,25 @@
4548
4548
  name: "badt_dhs.InsertCUTPParaClinRequest",
4549
4549
  para: ["p_json"],
4550
4550
  returns: "JSONB",
4551
- codesql: "\n\n\n\n\n\n\nCREATE OR REPLACE FUNCTION badt_dhs.InsertCUTPParaClinRequest(p_json JSONB)\nRETURNS JSONB AS\n$$\nDECLARE\n-- Lastest commit: author:nqhoa1005; date: 2025-08-07 11:14:58\n-- Thực hiện: NGUYỄN QUỐC HOÀ - 2025-06-11\n-- Hàm: badt_dhs.InsertCUTPParaClinRequest(p_json JSONB)\n-- Mô tả: nhận json DHS insert vào chidinhcls\n-- ===============================================================\n--Các trường đang bỏ trống :\n--taikhoan (chưa có field từ json truyền vào)\n--tenmay (chưa có field từ jsontruyền vào)\n--toacon (chưa có field từ jsontruyền vào)\n--macon (chưa có field từ jsontruyền vào)\n-- ===============================================================\n--Lấy thông tin bệnh nhân\n--Lấy thông tin điều trị\n--Group các CLS cha gôm tổng số lượng\n--Thêm các CLS con, dùng cùng số lượng với CLS cha\n--Kiểm tra CLS đã xoá từ EMR\n--Kiểm tra CLS thay đổi thông tin\n--Cập nhật lại các CLS đã xoá từ EMR\n--Tạo bảng đầy đủ dữ liệu đã group có cả cha và con\n--UPDATE các dòng đã có\n--INSERT các dòng mới\n v_tpcode TEXT := TRIM(p_json->>'TPCode');\n v_admissioncode TEXT := TRIM(p_json->>'AdmissionCode');\n v_medicalrecordno TEXT := TRIM(p_json->>'MedicalRecordNo');\n v_paraclinreqcode TEXT := TRIM(p_json->>'ParaClinReqCode');\n v_patientcode TEXT := TRIM(p_json->>'PatientCode');\n v_employeecode TEXT := TRIM(p_json->>'EmployeeCode');\n\n r_bnnoitru RECORD;\n r_qtdieutri RECORD;\n sys_laygiadan TEXT;\nBEGIN\n SELECT nt.madt, nt.madv, nt.mathe, dt.bhyt, nt.tinhtrangvv, \n \t\tCOALESCE(bn.gioitinh,0)::NUMERIC AS gioitinh\n INTO r_bnnoitru\n FROM current.bnnoitru nt\n LEFT JOIN current.dmdoituong dt ON dt.madt = nt.madt\n LEFT JOIN current.dmbenhnhan bn ON bn.mabn = nt.mabn\n WHERE nt.ravien = 0\n AND TRIM(nt.mabn) = v_patientcode\n AND TRIM(nt.makb) = v_admissioncode\n AND TRIM(nt.maba) = v_medicalrecordno;\n\n IF NOT FOUND THEN\n RETURN jsonb_build_object('status', 'error', 'message', 'Không tìm thấy thông tin bệnh nhân');\n END IF;\n\n SELECT qt.iddienbien, qt.madv, qt.maphong, qt.maicd, qt.kqcdoan, qt.maicdp, qt.kqcdoanp,\n qt.mayhct, qt.tenyhct, qt.thangkt, qt.namkt, qt.sogiuong, qt.ngaygio, qt.manv, nv.taikhoan\n INTO r_qtdieutri\n FROM current.qtdieutri qt\n LEFT JOIN current.dmnhanvien nv ON nv.manv = qt.manv\n WHERE qt.iddienbien = v_tpcode;\n\n IF NOT FOUND THEN\n RETURN jsonb_build_object('status', 'error', 'message', 'Không tìm thấy thông tin điều trị');\n END IF;\n\n SELECT COALESCE(giatri, '0') INTO sys_laygiadan\n FROM current.system WHERE tents = 'laygiadan';\n \n CREATE TEMP TABLE ClsData ON COMMIT DROP AS\n SELECT *\n FROM current.chidinhcls cls\n WHERE cls.idchidinh = v_paraclinreqcode\n AND cls.xoa = 0\n AND cls.mabn = v_patientcode\n AND cls.makb = v_admissioncode\n AND cls.maba = v_medicalrecordno\n AND cls.thangkt = r_qtdieutri.thangkt\n AND cls.namkt = r_qtdieutri.namkt\n AND (\n cls.dathu != 0 \n OR COALESCE(cls.soctvpcl, '') != '' \n OR COALESCE(cls.soctvpbltong, '') != ''\n OR cls.dath != 0 \n OR cls.dalappttt != 0\n );\n \n\n CREATE TEMP TABLE tmp_grouped_requests ON COMMIT DROP AS\n SELECT\n item->>'MedSerCode' AS medser_code,\n SUM(COALESCE((item->>'ParaClinQty')::NUMERIC, 1)) AS para_qty,\n COALESCE((item->>'IsHI')::BOOLEAN::INT, NULL) AS bhyt,\n COALESCE((item->>'Urgent')::INT, NULL) AS tinhtrang,\t--Bổ sung cột tình trạng : 0 : Cấp cứu-Khẩn cấp; 1 : bình thường\n COALESCE((item->>'thuphi')::NUMERIC, 0) AS thuphi,\n COALESCE((item->>'dichvu')::NUMERIC, 0) AS dichvu,\n COALESCE((item->>'miengiam')::NUMERIC, 0) AS miengiam,\n COALESCE((item->>'ptmiengiam')::NUMERIC, 0) AS ptmiengiam_input,\n COALESCE((item->>'thanhtienmiengiam')::NUMERIC, 0) AS thanhtienmg,\n (CASE WHEN ((item->>'FromDate')::TIMESTAMP)::TIME = '00:00:00'::TIME \n THEN ((item->>'FromDate')::DATE + LOCALTIMESTAMP::TIME)\n ELSE (item->>'FromDate')::TIMESTAMP END) AS ngaykcb,\n FALSE AS is_child\n FROM jsonb_array_elements(p_json->'ParaClinRequests') AS item\n GROUP BY item->>'MedSerCode', item->>'thuphi', item->>'dichvu', item->>'miengiam', item->>'ptmiengiam', item->>'thanhtienmiengiam',item->>'FromDate',item->>'IsHI',item->>'Urgent';\n\n INSERT INTO tmp_grouped_requests (\n medser_code, para_qty, bhyt, tinhtrang, thuphi, dichvu, miengiam, ptmiengiam_input, thanhtienmg, ngaykcb, is_child\n )\n SELECT\n clscon.macls,\n grp.para_qty, COALESCE(grp.bhyt,0) AS bhyt, grp.tinhtrang, CASE WHEN COALESCE(grp.bhyt,0) = 1 THEN 0 ELSE 1 END AS thuphi,\n 0, 0, 0, 0, grp.ngaykcb,\n TRUE\n FROM tmp_grouped_requests grp\n JOIN current.dmcls clscon ON clscon.macha = grp.medser_code\n WHERE COALESCE(clscon.sudung,0) = 1 \n \tAND (COALESCE(clscon.gioitinh,0) = r_bnnoitru.gioitinh OR COALESCE(clscon.gioitinh,0) = 2)\n \tAND clscon.macls NOT IN (\n SELECT medser_code FROM tmp_grouped_requests\n );\n IF EXISTS (\n SELECT 1\n FROM ClsData c\n WHERE NOT EXISTS (\n SELECT 1\n FROM tmp_grouped_requests t\n WHERE t.medser_code = c.macls\n )\n ) THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', 'Cận lâm sàng đã thực hiện hoặc đã thu tiền, không thể xoá',\n 'MedSerCode',\n COALESCE((\n SELECT jsonb_agg(c.macls)\n FROM ClsData c\n WHERE NOT EXISTS (\n SELECT 1\n FROM tmp_grouped_requests t\n WHERE TRIM(t.medser_code) = TRIM(c.macls)\n )\n ), '[]'::jsonb)\n );\n END IF;\n \n IF EXISTS (\n SELECT 1\n FROM ClsData c\n JOIN tmp_grouped_requests t ON t.medser_code = c.macls\n WHERE (\n COALESCE(t.para_qty, 0) != COALESCE(c.soluong, 0)\n OR COALESCE(t.bhyt, 0) != COALESCE(c.bhyt, 0)\n OR COALESCE(t.thuphi, 0) != COALESCE(c.thuphi, 0)\n OR COALESCE(t.dichvu, 0) != COALESCE(c.dichvu, 0)\n OR COALESCE(t.miengiam, 0) != COALESCE(c.miengiam, 0)\n OR COALESCE(t.ptmiengiam_input, 0) != COALESCE(c.ptmiengiam, 0) \n )\n AND (\n c.dathu != 0 OR \n COALESCE(c.soctvpcl, '') != '' OR \n c.dath != 0 OR \n c.dalappttt != 0\n )\n ) THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', 'Cận lâm sàng đã thực hiện hoặc đã thu tiền, không thể cập nhật',\n 'MedSerCode', COALESCE((\n SELECT jsonb_agg(c.macls)\n FROM ClsData c\n JOIN tmp_grouped_requests t ON t.medser_code = c.macls\n WHERE (\n COALESCE(t.para_qty, 0) != COALESCE(c.soluong, 0)\n OR COALESCE(t.bhyt, 0) != COALESCE(c.bhyt, 0)\n OR COALESCE(t.thuphi, 0) != COALESCE(c.thuphi, 0)\n OR COALESCE(t.dichvu, 0) != COALESCE(c.dichvu, 0)\n OR COALESCE(t.miengiam, 0) != COALESCE(c.miengiam, 0)\n OR COALESCE(t.ptmiengiam_input, 0) != COALESCE(c.ptmiengiam, 0)\n )\n AND (\n c.dathu != 0 OR \n COALESCE(c.soctvpcl, '') != '' OR \n c.dath != 0 OR \n c.dalappttt != 0\n )\n ),'[]'::jsonb)\n );\n END IF;\n \n UPDATE current.chidinhcls cls\n SET xoa = 1,\n ngayxoa = r_qtdieutri.ngaygio\n WHERE cls.idchidinh = v_paraclinreqcode\n AND cls.mabn = v_patientcode\n AND cls.makb = v_admissioncode\n AND cls.maba = v_medicalrecordno\n AND cls.xoa = 0\n AND cls.thangkt = r_qtdieutri.thangkt\n AND cls.namkt = r_qtdieutri.namkt\n AND NOT EXISTS (\n SELECT 1\n FROM tmp_grouped_requests req\n WHERE TRIM(req.medser_code) = TRIM(cls.macls)\n );\n \n CREATE TEMP TABLE tmp_data_ready ON COMMIT DROP AS\n\tSELECT\n req.medser_code,\n req.para_qty,\n COALESCE(req.bhyt,0) AS bhyt,\n req.tinhtrang AS tinhtrang,\n CASE WHEN COALESCE(req.bhyt,0) = 1 THEN 0 ELSE 1 END AS thuphi,\n req.dichvu,\n req.miengiam,\n req.ptmiengiam_input,\n req.thanhtienmg, \n req.ngaykcb,\n req.is_child,\n CASE WHEN r_bnnoitru.bhyt IN ('1','2') \n \t\tTHEN\n CASE\n WHEN req.thuphi = 1 THEN cat.giadan07\n WHEN req.dichvu = 1 THEN cat.giadv07\n ELSE CASE WHEN sys_laygiadan = '1' THEN cat.giadan07 ELSE cat.giabh07 END\n END\n ELSE cat.giabh07\n END AS dongia,\n cat.giabh07 AS giabh,\n CASE\n WHEN req.dichvu = 1 AND cat.giadv07 > cat.giabh07 THEN cat.giadv07 - cat.giabh07\n WHEN sys_laygiadan = '1' AND cat.giadan07 > cat.giabh07 THEN cat.giadan07 - cat.giabh07\n ELSE 0\n END AS chenhlech,\n CASE\n WHEN req.miengiam = 1 AND req.thanhtienmg > 0 THEN\n ROUND(req.thanhtienmg / NULLIF(\n CASE\n WHEN r_bnnoitru.bhyt IN ('1','2') THEN\n CASE\n WHEN req.thuphi = 1 THEN cat.giadan07\n WHEN req.dichvu = 1 THEN cat.giadv07\n ELSE CASE WHEN sys_laygiadan = '1' THEN cat.giadan07 ELSE cat.giabh07 END\n END\n ELSE cat.giabh07\n END, 0\n ) * 100, 2)\n ELSE 0\n END AS ptmiengiam,\n (\n COALESCE(\n CASE\n WHEN r_bnnoitru.bhyt IN ('1','2') THEN\n CASE\n WHEN req.thuphi = 1 THEN cat.giadan07\n WHEN req.dichvu = 1 THEN cat.giadv07\n ELSE CASE WHEN sys_laygiadan = '1' THEN cat.giadan07 ELSE cat.giabh07 END\n END\n ELSE cat.giabh07\n END, 0\n ) * req.para_qty\n ) AS thanhtien,\n cat.ktcao, cat.ldanh, cat.tyle_tt, cat.giabhdm, cat.nguonkhac, cat.chiphint\nFROM tmp_grouped_requests req\nJOIN (\n SELECT macls, giabh07, giadv07, giadan07, tyle_tt, nguonkhac,\n ktcao, ldanh, giabh07 AS giabhdm, bhyt, COALESCE(chiphint,0) AS chiphint\n FROM current.dmcls\n) cat ON cat.macls = req.medser_code;\n\n UPDATE current.chidinhcls cls\n SET soluong = d.para_qty,\n thuphi = d.thuphi,\n dongia = d.dongia,\n giabh = d.giabh,\n chenhlech = d.chenhlech,\n dichvu = d.dichvu,\n miengiam = d.miengiam,\n ptmiengiam = d.ptmiengiam,\n thanhtien = d.thanhtien,\n thanhtienmg = d.thanhtienmg,\n ngaycd = LOCALTIMESTAMP,\n ngaykcb = d.ngaykcb,\n taikhoan = r_qtdieutri.taikhoan,\n maphong = r_qtdieutri.maphong,\n ktcao = d.ktcao,\n ldanh = d.ldanh,\n tile = d.tyle_tt,\n bhyt = d.bhyt,\n tinhtrang = COALESCE((CASE WHEN d.tinhtrang ISNULL \n THEN (CASE WHEN r_bnnoitru.tinhtrangvv::NUMERIC = 0 THEN 1 ELSE 0 END)\n ELSE d.tinhtrang END),0)\n FROM tmp_data_ready d\n\tWHERE cls.idchidinh = v_paraclinreqcode\n \tAND cls.macls = d.medser_code\n AND cls.mabn = v_patientcode\n AND cls.makb = v_admissioncode\n AND cls.maba = v_medicalrecordno\n AND cls.thangkt = r_qtdieutri.thangkt\n AND cls.namkt = r_qtdieutri.namkt\n \tAND cls.xoa = 0;\n\n INSERT INTO current.chidinhcls (\n mabn, maba, makb, noitru, madt, madv, madv_dichvu, maphong,\n ngaykcb, manv, macls, soluong, thuphi, dongia, giabh, chenhlech,\n dichvu, miengiam, ptmiengiam, thanhtien, dath, dain, dathu, taikhoan,\n tenmay, xoa, thangkt, namkt, maicd, kqcdoan, mathe, thanhtienmg,\n iddienbien, tinhtrang, ngaycd, travedieutri, buong, sogiuong,\n toacon, macon, dongiausd, thanhtienusd, tygia, bhyt, ktcao, ldanh,\n pttraituyen, idchidinh, chiphint, tenclsphu, tile, giabhdm, maicdp,\n kqcdoanp, sophong, stt_led, dinhsuat, sdnguonkhac, ngaykq,\n mayhct, tenyhct, api\n )\n SELECT\n v_patientcode, -- mabn\n v_medicalrecordno, -- maba\n v_admissioncode, -- makb\n 1, -- noitru\n r_bnnoitru.madt, -- madt\n r_bnnoitru.madv, -- madv\n NULL, -- madv_dichvu\n r_qtdieutri.maphong, -- maphong\n d.ngaykcb, \t\t -- ngaykcb\n r_qtdieutri.manv, -- manv\n d.medser_code, -- macls\n d.para_qty, -- soluong\n d.thuphi, -- thuphi\n d.dongia, -- dongia\n d.giabh, -- giabh\n d.chenhlech, -- chenhlech\n d.dichvu, -- dichvu\n d.miengiam, -- miengiam\n d.ptmiengiam, -- ptmiengiam\n d.thanhtien, -- thanhtien\n 0, -- dath\n 0, -- dain\n 0, -- dathu\n r_qtdieutri.taikhoan, -- taikhoan\n 'EMR.DHS', -- tenmay\n 0, -- xoa\n r_qtdieutri.thangkt, -- thangkt\n r_qtdieutri.namkt, -- namkt\n r_qtdieutri.maicd, -- maicd\n r_qtdieutri.kqcdoan, -- kqcdoan\n r_bnnoitru.mathe, -- mathe\n d.thanhtienmg, -- thanhtienmg\n v_tpcode, -- iddienbien\n CASE WHEN d.tinhtrang ISNULL \n THEN (CASE WHEN r_bnnoitru.tinhtrangvv::NUMERIC = 0 THEN 1 ELSE 0 END)\n ELSE d.tinhtrang END, \t\t\t -- tinhtrang\n LOCALTIMESTAMP, \t -- ngaycd\n 0, -- travedieutri\n r_qtdieutri.maphong, -- buong\n r_qtdieutri.sogiuong, -- sogiuong\n 0, -- toacon\n '', -- macon\n 0, -- dongiausd\n 0, -- thanhtienusd\n 0, -- tygia\n d.bhyt, -- bhyt\n d.ktcao, -- ktcao\n d.ldanh, -- ldanh\n d.tyle_tt, -- pttraituyen\n v_paraclinreqcode, -- idchidinh\n d.chiphint, -- chiphint\n NULL, -- tenclsphu\n d.tyle_tt, -- tile\n d.giabhdm, -- giabhdm\n r_qtdieutri.maicdp, -- maicdp\n r_qtdieutri.kqcdoanp, -- kqcdoanp\n NULL, -- sophong\n NULL, -- stt_led\n 0, -- dinhsuat\n d.nguonkhac, -- sdnguonkhac\n NULL, -- ngaykq \n r_qtdieutri.mayhct, -- mayhct\n r_qtdieutri.tenyhct, -- tenyhct\n 1 -- api\n FROM tmp_data_ready d\n WHERE NOT EXISTS (\n SELECT 1 FROM current.chidinhcls cls\n WHERE cls.idchidinh = v_paraclinreqcode\n AND cls.macls = d.medser_code\n AND cls.mabn = v_patientcode\n AND cls.makb = v_admissioncode\n AND cls.maba = v_medicalrecordno\n AND cls.thangkt = r_qtdieutri.thangkt\n AND cls.namkt = r_qtdieutri.namkt\n AND cls.xoa = 0);\n\n RETURN jsonb_build_object('status', 'success', 'message', 'Ok');\n\nEXCEPTION WHEN OTHERS THEN\n RETURN jsonb_build_object('status', 'error', 'message', SQLERRM);\nEND;\n$$ LANGUAGE plpgsql;\n\n\n\n\n\n\n\n\n"
4551
+ codesql: "\n\n\n\n\n\n\nCREATE OR REPLACE FUNCTION badt_dhs.InsertCUTPParaClinRequest(p_json JSONB)\nRETURNS JSONB AS\n$$\nDECLARE\n-- Lastest commit: author:nqhoa1005; date: 2025-09-08 15:45:01\n-- Thực hiện: NGUYỄN QUỐC HOÀ - 2025-06-11\n-- Hàm: badt_dhs.InsertCUTPParaClinRequest(p_json JSONB)\n-- Mô tả: nhận json DHS insert vào chidinhcls\n-- ===============================================================\n--Các trường đang bỏ trống :\n--taikhoan (chưa có field từ json truyền vào)\n--tenmay (chưa có field từ jsontruyền vào)\n--toacon (chưa có field từ jsontruyền vào)\n--macon (chưa có field từ jsontruyền vào)\n-- ===============================================================\n--Lấy thông tin bệnh nhân\n--Lấy thông tin điều trị\n--Group các CLS cha gôm tổng số lượng\n--Thêm các CLS con, dùng cùng số lượng với CLS cha\n--Kiểm tra CLS đã xoá từ EMR\n--Kiểm tra CLS thay đổi thông tin\n--Cập nhật lại các CLS đã xoá từ EMR\n--Tạo bảng đầy đủ dữ liệu đã group có cả cha và con\n--UPDATE các dòng đã có\n--INSERT các dòng mới\n v_tpcode TEXT := TRIM(p_json->>'TPCode');\n v_admissioncode TEXT := TRIM(p_json->>'AdmissionCode');\n v_medicalrecordno TEXT := TRIM(p_json->>'MedicalRecordNo');\n v_paraclinreqcode TEXT := TRIM(p_json->>'ParaClinReqCode');\n v_patientcode TEXT := TRIM(p_json->>'PatientCode');\n v_employeecode TEXT := TRIM(p_json->>'EmployeeCode');\n\n r_bnnoitru RECORD;\n r_qtdieutri RECORD;\n sys_laygiadan TEXT;\n sys_laygiadv TEXT;\nBEGIN\n SELECT nt.madt, nt.madv, nt.mathe, dt.bhyt, nt.tinhtrangvv, \n \t\tCOALESCE(bn.gioitinh,0)::NUMERIC AS gioitinh\n INTO r_bnnoitru\n FROM current.bnnoitru nt\n LEFT JOIN current.dmdoituong dt ON dt.madt = nt.madt\n LEFT JOIN current.dmbenhnhan bn ON bn.mabn = nt.mabn\n WHERE nt.ravien = 0\n AND TRIM(nt.mabn) = v_patientcode\n AND TRIM(nt.makb) = v_admissioncode\n AND TRIM(nt.maba) = v_medicalrecordno;\n\n IF NOT FOUND THEN\n RETURN jsonb_build_object('status', 'error', 'message', 'Không tìm thấy thông tin bệnh nhân');\n END IF;\n\n SELECT qt.iddienbien, qt.madv, qt.maphong, qt.maicd, qt.kqcdoan, qt.maicdp, qt.kqcdoanp,\n qt.mayhct, qt.tenyhct, qt.thangkt, qt.namkt, qt.sogiuong, qt.ngaygio, qt.manv, nv.taikhoan\n INTO r_qtdieutri\n FROM current.qtdieutri qt\n LEFT JOIN current.dmnhanvien nv ON nv.manv = qt.manv\n WHERE qt.iddienbien = v_tpcode;\n\n IF NOT FOUND THEN\n RETURN jsonb_build_object('status', 'error', 'message', 'Không tìm thấy thông tin điều trị');\n END IF;\n\n SELECT COALESCE(giatri, '0') INTO sys_laygiadan\n FROM current.system WHERE tents = 'laygiadan';\n \n SELECT COALESCE(giatri, '0') INTO sys_laygiadv\n FROM current.system WHERE tents = 'laygiadv';\n \n CREATE TEMP TABLE ClsData ON COMMIT DROP AS\n SELECT *\n FROM current.chidinhcls cls\n WHERE cls.idchidinh = v_paraclinreqcode\n AND cls.xoa = 0\n AND cls.mabn = v_patientcode\n AND cls.makb = v_admissioncode\n AND cls.maba = v_medicalrecordno\n AND cls.thangkt = r_qtdieutri.thangkt\n AND cls.namkt = r_qtdieutri.namkt\n AND (\n cls.dathu != 0 \n OR COALESCE(cls.soctvpcl, '') != '' \n OR COALESCE(cls.soctvpbltong, '') != ''\n OR cls.dath != 0 \n OR cls.dalappttt != 0\n );\n \n\n CREATE TEMP TABLE tmp_grouped_requests ON COMMIT DROP AS\n SELECT\n item->>'MedSerCode' AS medser_code,\n SUM(COALESCE((item->>'ParaClinQty')::NUMERIC, 1)) AS para_qty,\n COALESCE((item->>'IsHI')::BOOLEAN::INT, NULL) AS bhyt,\n COALESCE((item->>'Urgent')::INT, NULL) AS tinhtrang,\t--Bổ sung cột tình trạng : 0 : Cấp cứu-Khẩn cấp; 1 : bình thường\n COALESCE((item->>'thuphi')::NUMERIC, 0) AS thuphi,\n COALESCE((item->>'dichvu')::NUMERIC, 0) AS dichvu,\n COALESCE((item->>'miengiam')::NUMERIC, 0) AS miengiam,\n COALESCE((item->>'ptmiengiam')::NUMERIC, 0) AS ptmiengiam_input,\n COALESCE((item->>'thanhtienmiengiam')::NUMERIC, 0) AS thanhtienmg,\n (CASE WHEN ((item->>'FromDate')::TIMESTAMP)::TIME = '00:00:00'::TIME \n THEN ((item->>'FromDate')::DATE + LOCALTIMESTAMP::TIME)\n ELSE (item->>'FromDate')::TIMESTAMP END) AS ngaykcb,\n FALSE AS is_child\n FROM jsonb_array_elements(p_json->'ParaClinRequests') AS item\n GROUP BY item->>'MedSerCode', item->>'thuphi', item->>'dichvu', item->>'miengiam', item->>'ptmiengiam', item->>'thanhtienmiengiam',item->>'FromDate',item->>'IsHI',item->>'Urgent';\n\n INSERT INTO tmp_grouped_requests (\n medser_code, para_qty, bhyt, tinhtrang, thuphi, dichvu, miengiam, ptmiengiam_input, thanhtienmg, ngaykcb, is_child\n )\n SELECT\n clscon.macls,\n grp.para_qty, COALESCE(grp.bhyt,0) AS bhyt, grp.tinhtrang, CASE WHEN COALESCE(grp.bhyt,0) = 1 THEN 0 ELSE 1 END AS thuphi,\n 0, 0, 0, 0, grp.ngaykcb,\n TRUE\n FROM tmp_grouped_requests grp\n JOIN current.dmcls clscon ON clscon.macha = grp.medser_code\n WHERE COALESCE(clscon.sudung,0) = 1 \n \tAND (COALESCE(clscon.gioitinh,0) = r_bnnoitru.gioitinh OR COALESCE(clscon.gioitinh,0) = 2)\n \tAND clscon.macls NOT IN (\n SELECT medser_code FROM tmp_grouped_requests\n );\n IF EXISTS (\n SELECT 1\n FROM ClsData c\n WHERE NOT EXISTS (\n SELECT 1\n FROM tmp_grouped_requests t\n WHERE t.medser_code = c.macls\n )\n ) THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', 'Cận lâm sàng đã thực hiện hoặc đã thu tiền, không thể xoá',\n 'MedSerCode',\n COALESCE((\n SELECT jsonb_agg(c.macls)\n FROM ClsData c\n WHERE NOT EXISTS (\n SELECT 1\n FROM tmp_grouped_requests t\n WHERE TRIM(t.medser_code) = TRIM(c.macls)\n )\n ), '[]'::jsonb)\n );\n END IF;\n \n IF EXISTS (\n SELECT 1\n FROM ClsData c\n JOIN tmp_grouped_requests t ON t.medser_code = c.macls\n WHERE (\n COALESCE(t.para_qty, 0) != COALESCE(c.soluong, 0)\n OR COALESCE(t.bhyt, 0) != COALESCE(c.bhyt, 0)\n OR COALESCE(t.thuphi, 0) != COALESCE(c.thuphi, 0)\n OR COALESCE(t.dichvu, 0) != COALESCE(c.dichvu, 0)\n OR COALESCE(t.miengiam, 0) != COALESCE(c.miengiam, 0)\n OR COALESCE(t.ptmiengiam_input, 0) != COALESCE(c.ptmiengiam, 0) \n )\n AND (\n c.dathu != 0 OR \n COALESCE(c.soctvpcl, '') != '' OR \n c.dath != 0 OR \n c.dalappttt != 0\n )\n ) THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', 'Cận lâm sàng đã thực hiện hoặc đã thu tiền, không thể cập nhật',\n 'MedSerCode', COALESCE((\n SELECT jsonb_agg(c.macls)\n FROM ClsData c\n JOIN tmp_grouped_requests t ON t.medser_code = c.macls\n WHERE (\n COALESCE(t.para_qty, 0) != COALESCE(c.soluong, 0)\n OR COALESCE(t.bhyt, 0) != COALESCE(c.bhyt, 0)\n OR COALESCE(t.thuphi, 0) != COALESCE(c.thuphi, 0)\n OR COALESCE(t.dichvu, 0) != COALESCE(c.dichvu, 0)\n OR COALESCE(t.miengiam, 0) != COALESCE(c.miengiam, 0)\n OR COALESCE(t.ptmiengiam_input, 0) != COALESCE(c.ptmiengiam, 0)\n )\n AND (\n c.dathu != 0 OR \n COALESCE(c.soctvpcl, '') != '' OR \n c.dath != 0 OR \n c.dalappttt != 0\n )\n ),'[]'::jsonb)\n );\n END IF;\n \n UPDATE current.chidinhcls cls\n SET xoa = 1,\n ngayxoa = r_qtdieutri.ngaygio\n WHERE cls.idchidinh = v_paraclinreqcode\n AND cls.mabn = v_patientcode\n AND cls.makb = v_admissioncode\n AND cls.maba = v_medicalrecordno\n AND cls.xoa = 0\n AND cls.thangkt = r_qtdieutri.thangkt\n AND cls.namkt = r_qtdieutri.namkt\n AND NOT EXISTS (\n SELECT 1\n FROM tmp_grouped_requests req\n WHERE TRIM(req.medser_code) = TRIM(cls.macls)\n );\n \n CREATE TEMP TABLE tmp_data_ready ON COMMIT DROP AS\n\tSELECT\n req.medser_code,\n req.para_qty,\n COALESCE(req.bhyt,0) AS bhyt,\n req.tinhtrang AS tinhtrang,\n CASE WHEN COALESCE(req.bhyt,0) = 1 THEN 0 ELSE 1 END AS thuphi,\n req.dichvu,\n req.miengiam,\n req.ptmiengiam_input,\n req.thanhtienmg, \n req.ngaykcb,\n req.is_child,\n CASE WHEN r_bnnoitru.bhyt IN ('1','2') \n \t\tTHEN\n (CASE\n WHEN req.thuphi = 1 THEN cat.giadan07\n WHEN req.dichvu = 1 THEN cat.giadv07\n ELSE CASE WHEN sys_laygiadan::NUMERIC = 1 THEN cat.giadan07 ELSE cat.giabh07 END\n END)\n ELSE \n \t (CASE WHEN sys_laygiadv::NUMERIC = 0 THEN cat.giadan07 ELSE cat.giadv07 END)\n END AS dongia,\n cat.giabh07 AS giabh,\n CASE WHEN r_bnnoitru.bhyt IN ('1','2')\n \tTHEN\n (CASE\n WHEN req.dichvu = 1 AND cat.giadv07 > cat.giabh07 THEN cat.giadv07 - cat.giabh07\n WHEN sys_laygiadan = '1' AND cat.giadan07 > cat.giabh07 THEN cat.giadan07 - cat.giabh07\n ELSE 0\n END) ELSE 0 END AS chenhlech,\n CASE\n WHEN req.miengiam = 1 AND req.thanhtienmg > 0 THEN\n ROUND(req.thanhtienmg / NULLIF(\n CASE\n WHEN r_bnnoitru.bhyt IN ('1','2') THEN\n CASE\n WHEN req.thuphi = 1 THEN cat.giadan07\n WHEN req.dichvu = 1 THEN cat.giadv07\n ELSE CASE WHEN sys_laygiadan = '1' THEN cat.giadan07 ELSE cat.giabh07 END\n END\n ELSE cat.giabh07\n END, 0\n ) * 100, 2)\n ELSE 0\n END AS ptmiengiam,\n (\n COALESCE(\n CASE\n WHEN r_bnnoitru.bhyt IN ('1','2') THEN\n CASE\n WHEN req.thuphi = 1 THEN cat.giadan07\n WHEN req.dichvu = 1 THEN cat.giadv07\n ELSE (CASE WHEN sys_laygiadan::NUMERIC = 1 THEN cat.giadan07 ELSE cat.giabh07 END)\n END\n ELSE (CASE WHEN sys_laygiadv::NUMERIC = 0 THEN cat.giadan07 ELSE cat.giadv07 END)\n END, 0\n ) * req.para_qty\n ) AS thanhtien,\n cat.ktcao, cat.ldanh, cat.tyle_tt, cat.giabhdm, cat.nguonkhac, cat.chiphint\nFROM tmp_grouped_requests req\nJOIN (\n SELECT macls, giabh07, giadv07, giadan07, tyle_tt, nguonkhac,\n ktcao, ldanh, giabh07 AS giabhdm, bhyt, COALESCE(chiphint,0) AS chiphint\n FROM current.dmcls\n) cat ON cat.macls = req.medser_code;\n\n UPDATE current.chidinhcls cls\n SET soluong = d.para_qty,\n thuphi = d.thuphi,\n dongia = d.dongia,\n giabh = d.giabh,\n chenhlech = d.chenhlech,\n dichvu = d.dichvu,\n miengiam = d.miengiam,\n ptmiengiam = d.ptmiengiam,\n thanhtien = d.thanhtien,\n thanhtienmg = d.thanhtienmg,\n ngaycd = LOCALTIMESTAMP,\n ngaykcb = d.ngaykcb,\n taikhoan = r_qtdieutri.taikhoan,\n maphong = r_qtdieutri.maphong,\n ktcao = d.ktcao,\n ldanh = d.ldanh,\n tile = d.tyle_tt,\n bhyt = d.bhyt,\n tinhtrang = COALESCE((CASE WHEN d.tinhtrang ISNULL \n THEN (CASE WHEN r_bnnoitru.tinhtrangvv::NUMERIC = 0 THEN 1 ELSE 0 END)\n ELSE d.tinhtrang END),0)\n FROM tmp_data_ready d\n\tWHERE cls.idchidinh = v_paraclinreqcode\n \tAND cls.macls = d.medser_code\n AND cls.mabn = v_patientcode\n AND cls.makb = v_admissioncode\n AND cls.maba = v_medicalrecordno\n AND cls.thangkt = r_qtdieutri.thangkt\n AND cls.namkt = r_qtdieutri.namkt\n \tAND cls.xoa = 0;\n\n INSERT INTO current.chidinhcls (\n mabn, maba, makb, noitru, madt, madv, madv_dichvu, maphong,\n ngaykcb, manv, macls, soluong, thuphi, dongia, giabh, chenhlech,\n dichvu, miengiam, ptmiengiam, thanhtien, dath, dain, dathu, taikhoan,\n tenmay, xoa, thangkt, namkt, maicd, kqcdoan, mathe, thanhtienmg,\n iddienbien, tinhtrang, ngaycd, travedieutri, buong, sogiuong,\n toacon, macon, dongiausd, thanhtienusd, tygia, bhyt, ktcao, ldanh,\n pttraituyen, idchidinh, chiphint, tenclsphu, tile, giabhdm, maicdp,\n kqcdoanp, sophong, stt_led, dinhsuat, sdnguonkhac, ngaykq,\n mayhct, tenyhct, api\n )\n SELECT\n v_patientcode, -- mabn\n v_medicalrecordno, -- maba\n v_admissioncode, -- makb\n 1, -- noitru\n r_bnnoitru.madt, -- madt\n r_bnnoitru.madv, -- madv\n NULL, -- madv_dichvu\n r_qtdieutri.maphong, -- maphong\n d.ngaykcb, \t\t -- ngaykcb\n r_qtdieutri.manv, -- manv\n d.medser_code, -- macls\n d.para_qty, -- soluong\n d.thuphi, -- thuphi\n d.dongia, -- dongia\n d.giabh, -- giabh\n d.chenhlech, -- chenhlech\n d.dichvu, -- dichvu\n d.miengiam, -- miengiam\n d.ptmiengiam, -- ptmiengiam\n d.thanhtien, -- thanhtien\n 0, -- dath\n 0, -- dain\n 0, -- dathu\n r_qtdieutri.taikhoan, -- taikhoan\n 'EMR.DHS', -- tenmay\n 0, -- xoa\n r_qtdieutri.thangkt, -- thangkt\n r_qtdieutri.namkt, -- namkt\n r_qtdieutri.maicd, -- maicd\n r_qtdieutri.kqcdoan, -- kqcdoan\n r_bnnoitru.mathe, -- mathe\n d.thanhtienmg, -- thanhtienmg\n v_tpcode, -- iddienbien\n CASE WHEN d.tinhtrang ISNULL \n THEN (CASE WHEN r_bnnoitru.tinhtrangvv::NUMERIC = 0 THEN 1 ELSE 0 END)\n ELSE d.tinhtrang END, \t\t\t -- tinhtrang\n LOCALTIMESTAMP, \t -- ngaycd\n 0, -- travedieutri\n r_qtdieutri.maphong, -- buong\n r_qtdieutri.sogiuong, -- sogiuong\n 0, -- toacon\n '', -- macon\n 0, -- dongiausd\n 0, -- thanhtienusd\n 0, -- tygia\n d.bhyt, -- bhyt\n d.ktcao, -- ktcao\n d.ldanh, -- ldanh\n d.tyle_tt, -- pttraituyen\n v_paraclinreqcode, -- idchidinh\n d.chiphint, -- chiphint\n NULL, -- tenclsphu\n d.tyle_tt, -- tile\n d.giabhdm, -- giabhdm\n r_qtdieutri.maicdp, -- maicdp\n r_qtdieutri.kqcdoanp, -- kqcdoanp\n NULL, -- sophong\n NULL, -- stt_led\n 0, -- dinhsuat\n d.nguonkhac, -- sdnguonkhac\n NULL, -- ngaykq \n r_qtdieutri.mayhct, -- mayhct\n r_qtdieutri.tenyhct, -- tenyhct\n 1 -- api\n FROM tmp_data_ready d\n WHERE NOT EXISTS (\n SELECT 1 FROM current.chidinhcls cls\n WHERE cls.idchidinh = v_paraclinreqcode\n AND cls.macls = d.medser_code\n AND cls.mabn = v_patientcode\n AND cls.makb = v_admissioncode\n AND cls.maba = v_medicalrecordno\n AND cls.thangkt = r_qtdieutri.thangkt\n AND cls.namkt = r_qtdieutri.namkt\n AND cls.xoa = 0);\n\n RETURN jsonb_build_object('status', 'success', 'message', 'Ok');\n\nEXCEPTION WHEN OTHERS THEN\n RETURN jsonb_build_object('status', 'error', 'message', SQLERRM);\nEND;\n$$ LANGUAGE plpgsql;\n\n\n\n\n\n\n\n\n\n"
4552
4552
  },
4553
4553
  "badt_dhs.InsertDiagnose": {
4554
4554
  name: "badt_dhs.InsertDiagnose",
4555
4555
  para: ["p_json"],
4556
4556
  returns: "JSONB",
4557
- codesql: "\n\n\nCREATE OR REPLACE FUNCTION badt_dhs.InsertDiagnose(p_json JSONB)\nRETURNS JSONB AS\n$$\nDECLARE\n-- Lastest commit: author:nqhoa1005; date: 2025-08-12 13:18:53\n-- Thực hiện: NGUYỄN QUỐC HOÀ - 2025-05-22\n-- Hàm: badt_dhs.badt_dhs.InsertDiagnose(p_json JSONB)\n-- Mô tả: Nhận dữ liệu Json thêm vào dữ liệu\n-- Bổ sung so với file mẫu:\n-- \"NGAYTH\"\n-- \"MAKB\"\n-- \"MABA\"\n-- \"MA_BSDOC\"\n-- \"MABSDT\"\n-- \"MAKP\"\n-- \"MAPHONG\"\n-- Chưa rõ thông tin :\n-- \"NGAY_CD\" và \"NGAYCD\" => Chưa rõ ngày chỉ định hay ngày chẩn đoán\n-- ===============================================================\n-- Lấy dữ liệu từ JSON\n-- Tham số hệ thống\n-- Bước 1: Kiểm tra tồn tại trong chidinhcls\n-- Bước 2: Kiểm tra nhân viên thực hiện\n-- Bước 3: Kiểm tra nhân viên trả kết quả\n-- Bước 4: Kiểm tra mã máy thực hiện\n-- Bước 5: Lấy tham số thời gian từ bảng system\n-- Kiểm tra khoảng thời gian thực hiện y lệnh\n-- Kiểm tra khoảng thời gian trả kết quả\n-- Kiểm tra tồn tại dòng trong pskhamha\n-- Cập nhật\n v_iddienbien TEXT := p_json->>'TPCode';\n v_idchidinh TEXT := p_json->>'ParaClinReqCode';\n v_mabn TEXT := p_json->>'PatientCode';\n v_makb TEXT := p_json->>'AdmissionCode';\n v_maba TEXT := p_json->>'MedicalRecordNo';\n v_macls TEXT := p_json->>'MedSerCode';\n v_ngaycd TIMESTAMP := (p_json->>'NgayChiDinh')::TIMESTAMP;\n v_ngayth TIMESTAMP := (p_json->>'NgayThucHien')::TIMESTAMP;\n v_ngaykq TIMESTAMP := (p_json->>'NgayKetQua')::TIMESTAMP;\n v_madv\t\t TEXT \t := p_json->>'MaDonViThucHien';\n v_phong\t\t TEXT \t := p_json->>'MaPhongThucHien';\n\n v_manv_thuchien TEXT := p_json->>'MaNhanVienThucHien';\n v_manv_ketqua TEXT := p_json->>'MaNhanVienTraKQ';\n v_mamay TEXT := p_json->>'MaMayThucHien';\n \n v_ketluan TEXT := p_json->>'KetLuan';\n v_mota \tTEXT := p_json->>'MoTa';\n v_ghicchu \tTEXT := p_json->>'GhiChu';\n\n v_chidinhcls RECORD;\n v_exists_nv_thuchien INT;\n v_exists_nv_ketqua INT;\n v_exists_mamay INT;\n v_exists_pskhamha\t INT;\n\n v_sophuttoithieu INT;\n v_sophuttraketqua INT;\n \n cchn_thuchien \tTEXT;\n tk_thuchien \tTEXT;\n tk_traketqua \tTEXT;\n\n v_checktgthuchien NUMERIC; \n v_checktgketqua NUMERIC; \n \n cd_thangkt\t\tTEXT;\n cd_namkt\t\tTEXT;\n v_ngaycd_lui1thang TIMESTAMP := v_ngaycd - INTERVAL '1 month';\n \nBEGIN\n SELECT ngaykcb, thangkt, namkt, dath, dathu, dalappttt\n INTO v_chidinhcls\n FROM current.chidinhcls\n WHERE xoa = 0\n AND macls = v_macls\n AND iddienbien = v_iddienbien\n AND idchidinh = v_idchidinh\n AND ngaykcb = v_ngaycd\n AND (namkt||thangkt) >= to_char(v_ngaycd_lui1thang,'YYYYMM')\n LIMIT 1;\n\n IF NOT FOUND THEN\n RETURN jsonb_build_object(\n 'success', false,\n 'message', format(\n 'Không tìm thấy chỉ định với macls=%s, iddienbien=%s, idchidinh=%s, ngaykcb=%s',\n v_macls, v_iddienbien, v_idchidinh, v_ngaycd\n )\n );\n END IF;\n\n SELECT COUNT(*) INTO v_exists_nv_thuchien\n FROM current.dmnhanvien\n WHERE manv = v_manv_thuchien\n AND COALESCE(macc_hanhnghe_cv2348,'') != ''\n AND COALESCE(trangthai,'0') = '1';\n\n IF v_exists_nv_thuchien = 0 THEN\n RETURN jsonb_build_object(\n 'success', false,\n 'message', format(\n 'Nhân viên %s không có chứng chỉ hành nghề hoặc đã nghỉ việc',\n v_manv_thuchien\n )\n );\n END IF;\n\n SELECT COUNT(*) INTO v_exists_nv_ketqua\n FROM current.dmnhanvien\n WHERE manv = v_manv_ketqua\n AND COALESCE(macc_hanhnghe_cv2348,'') != ''\n AND COALESCE(trangthai,'0') = '1';\n\n IF v_exists_nv_ketqua = 0 THEN\n RETURN jsonb_build_object(\n 'success', false,\n 'message', format(\n 'Nhân viên %s không có chứng chỉ hành nghề hoặc đã nghỉ việc',\n v_manv_ketqua\n )\n );\n END IF;\n\n SELECT COUNT(*) INTO v_exists_mamay\n FROM current.dmmamay\n WHERE mamay = v_mamay;\n\n IF v_exists_mamay = 0 THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format(\n 'Không tìm thấy mã máy thực hiện: %s',\n v_mamay\n )\n );\n END IF;\n\n SELECT CAST(giatri AS INT) INTO v_sophuttoithieu\n FROM current.system\n WHERE tents = 'ha.sophuttoithieu';\n\n SELECT CAST(giatri AS INT) INTO v_sophuttraketqua\n FROM current.system\n WHERE tents = 'ha.sophuttraketqua';\n\n v_checktgthuchien := EXTRACT(EPOCH FROM (v_ngayth - v_ngaycd)) / 60.0;\n IF v_checktgthuchien <= v_sophuttoithieu THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format(\n 'Thời gian thực hiện y lệnh phải tối thiểu %s phút đối với thời gian chỉ định',\n v_sophuttoithieu\n )\n );\n END IF;\n\n v_checktgketqua := EXTRACT(EPOCH FROM (v_ngaykq - v_ngayth)) / 60.0;\n IF v_checktgketqua <= v_sophuttraketqua THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format(\n 'Thời gian trả kết quả phải tối thiểu %s phút kể từ thời gian thực hiện',\n v_sophuttraketqua\n )\n );\n END IF;\n \n SELECT taikhoan, macc_hanhnghe_cv2348\n INTO tk_thuchien, cchn_thuchien\n FROM current.dmnhanvien\n WHERE manv = v_manv_thuchien; \n \n SELECT taikhoan\n INTO tk_traketqua\n FROM current.dmnhanvien\n WHERE manv = v_manv_ketqua; \n\n SELECT COUNT(*) INTO v_exists_pskhamha\n FROM current.pskhamha\n WHERE mabn = v_mabn\n AND makb = v_makb\n AND maba = v_maba\n AND macls = v_macls\n AND ngaykcb = v_ngaycd;\n\n IF v_exists_pskhamha > 0 THEN\n UPDATE current.pskhamha\n SET\n tenmay = 'EMR',\n taikhoan = 'EMR',\n taikhoan_traketqua = tk_thuchien,\n manv = v_manv_ketqua,\n madv = v_madv,\n maphong = v_phong,\n ngaycd = v_ngaykq::TIMESTAMP,\n mamay = v_mamay,\n ketluan_plaintext = v_ketluan,\n mota_text = v_mota,\n ghichu = v_mota\n WHERE\n mabn = v_mabn\n AND makb = v_makb\n AND maba = v_maba\n AND macls = v_macls\n AND ngaykcb = v_ngaycd;\n ELSE\n INSERT INTO current.pskhamha (\n mabn, makb, maba, macls, tenmay,\n taikhoan, manv, madv, maphong, ngaykcb, soluong,\n ngaycd, mamay,ketluan, ketluan_plaintext, mota_text, ghichu,\n dakhoa, mabl, thangkt, namkt, phienban,\n taikhoan_traketqua, hinhthuctraketqua\n )\n VALUES (\n v_mabn, v_makb, v_maba, v_macls, 'EMR',\n tk_thuchien, v_manv_ketqua, v_madv, v_phong, v_ngaycd::TIMESTAMP, 1,\n v_ngaykq::TIMESTAMP, v_mamay,v_ketluan, v_ketluan, v_mota, v_mota, 1, '',\n to_char(v_ngaykq::date,'MM'),to_char(v_ngaykq::date,'YYYY'), 'EMR.API',\n tk_traketqua,0\n );\n END IF;\n\n UPDATE current.chidinhcls\n SET dath = 1,\n giolaymau = v_ngayth::TIMESTAMP,\n ngaykq = v_ngaykq::TIMESTAMP,\n nguoi_thuc_hien = cchn_thuchien\n WHERE mabn = v_mabn\n AND makb = v_makb\n AND COALESCE(maba,'') = COALESCE(v_maba,'')\n AND macls = v_macls\n AND ngaykcb = v_ngaycd::TIMESTAMP\n AND thangkt = v_chidinhcls.thangkt\n AND namkt = v_chidinhcls.namkt\n AND COALESCE(xoa, 0) = 0;\n\n RETURN jsonb_build_object(\n 'status', 'success',\n 'message', 'OK' \n );\n\n EXCEPTION\n WHEN OTHERS THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', 'Lỗi xử lý: ' || SQLERRM\n );\nEND;\n$$ LANGUAGE plpgsql;\n\n"
4557
+ codesql: "\n\n\nCREATE OR REPLACE FUNCTION badt_dhs.InsertDiagnose(p_json JSONB)\nRETURNS JSONB AS\n$$\nDECLARE\n-- Lastest commit: author:nqhoa1005; date: 2025-09-10 14:08:23\n-- Thực hiện: NGUYỄN QUỐC HOÀ - 2025-05-22\n-- Hàm: badt_dhs.badt_dhs.InsertDiagnose(p_json JSONB)\n-- Mô tả: Nhận dữ liệu Json thêm vào dữ liệu\n-- Bổ sung so với file mẫu:\n-- \"NGAYTH\"\n-- \"MAKB\"\n-- \"MABA\"\n-- \"MA_BSDOC\"\n-- \"MABSDT\"\n-- \"MAKP\"\n-- \"MAPHONG\"\n-- Chưa rõ thông tin :\n-- \"NGAY_CD\" và \"NGAYCD\" => Chưa rõ ngày chỉ định hay ngày chẩn đoán\n-- ===============================================================\n-- Lấy dữ liệu từ JSON\n-- Tham số hệ thống\n-- Bước 1: Kiểm tra tồn tại trong chidinhcls\n-- Bước 2: Kiểm tra nhân viên thực hiện\n-- Bước 3: Kiểm tra nhân viên trả kết quả\n-- Bước 4: Kiểm tra mã máy thực hiện\n-- Bước 5: Lấy tham số thời gian từ bảng system\n-- Kiểm tra khoảng thời gian thực hiện y lệnh\n-- Kiểm tra khoảng thời gian trả kết quả\n-- Kiểm tra tồn tại dòng trong pskhamha\n-- Cập nhật\n v_iddienbien TEXT := p_json->>'TPCode';\n v_idchidinh TEXT := p_json->>'ParaClinReqCode';\n v_mabn TEXT := p_json->>'PatientCode';\n v_makb TEXT := p_json->>'AdmissionCode';\n v_maba TEXT := p_json->>'MedicalRecordNo';\n v_macls TEXT := p_json->>'MedSerCode';\n v_ngaycd TIMESTAMP := (p_json->>'NgayChiDinh')::TIMESTAMP;\n v_ngayth TIMESTAMP := (p_json->>'NgayThucHien')::TIMESTAMP;\n v_ngaykq TIMESTAMP := (p_json->>'NgayKetQua')::TIMESTAMP;\n v_madv\t\t TEXT \t := p_json->>'MaDonViThucHien';\n v_phong\t\t TEXT \t := p_json->>'MaPhongThucHien';\n\n v_manv_thuchien TEXT := p_json->>'MaNhanVienThucHien';\n v_manv_ketqua TEXT := p_json->>'MaNhanVienTraKQ';\n v_mamay TEXT := p_json->>'MaMayThucHien';\n \n v_ketluan TEXT := p_json->>'KetLuan';\n v_mota \tTEXT := p_json->>'MoTa';\n v_ghicchu \tTEXT := p_json->>'GhiChu';\n v_filepath TEXT := p_json->>'filePath';\n\n v_chidinhcls RECORD;\n v_exists_nv_thuchien INT;\n v_exists_nv_ketqua INT;\n v_exists_mamay INT;\n v_exists_pskhamha\t INT;\n\n v_sophuttoithieu INT;\n v_sophuttraketqua INT;\n \n cchn_thuchien \tTEXT;\n tk_thuchien \tTEXT;\n tk_traketqua \tTEXT;\n\n v_checktgthuchien NUMERIC; \n v_checktgketqua NUMERIC; \n \n cd_thangkt\t\tTEXT;\n cd_namkt\t\tTEXT;\n v_ngaycd_lui1thang TIMESTAMP := v_ngaycd - INTERVAL '1 month';\n \nBEGIN\n SELECT ngaykcb, thangkt, namkt, dath, dathu, dalappttt\n INTO v_chidinhcls\n FROM current.chidinhcls\n WHERE xoa = 0\n AND macls = v_macls\n AND iddienbien = v_iddienbien\n AND idchidinh = v_idchidinh\n AND ngaykcb = v_ngaycd\n AND (namkt||thangkt) >= to_char(v_ngaycd_lui1thang,'YYYYMM')\n LIMIT 1;\n\n IF NOT FOUND THEN\n RETURN jsonb_build_object(\n 'success', false,\n 'message', format(\n 'Không tìm thấy chỉ định với macls=%s, iddienbien=%s, idchidinh=%s, ngaykcb=%s',\n v_macls, v_iddienbien, v_idchidinh, v_ngaycd\n )\n );\n END IF;\n\n SELECT COUNT(*) INTO v_exists_nv_thuchien\n FROM current.dmnhanvien\n WHERE manv = v_manv_thuchien\n AND COALESCE(macc_hanhnghe_cv2348,'') != ''\n AND COALESCE(trangthai,'0') = '1';\n\n IF v_exists_nv_thuchien = 0 THEN\n RETURN jsonb_build_object(\n 'success', false,\n 'message', format(\n 'Nhân viên %s không có chứng chỉ hành nghề hoặc đã nghỉ việc',\n v_manv_thuchien\n )\n );\n END IF;\n\n SELECT COUNT(*) INTO v_exists_nv_ketqua\n FROM current.dmnhanvien\n WHERE manv = v_manv_ketqua\n AND COALESCE(macc_hanhnghe_cv2348,'') != ''\n AND COALESCE(trangthai,'0') = '1';\n\n IF v_exists_nv_ketqua = 0 THEN\n RETURN jsonb_build_object(\n 'success', false,\n 'message', format(\n 'Nhân viên %s không có chứng chỉ hành nghề hoặc đã nghỉ việc',\n v_manv_ketqua\n )\n );\n END IF;\n\n SELECT COUNT(*) INTO v_exists_mamay\n FROM current.dmmamay\n WHERE mamay = v_mamay;\n\n IF v_exists_mamay = 0 THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format(\n 'Không tìm thấy mã máy thực hiện: %s',\n v_mamay\n )\n );\n END IF;\n\n SELECT CAST(giatri AS INT) INTO v_sophuttoithieu\n FROM current.system\n WHERE tents = 'ha.sophuttoithieu';\n\n SELECT CAST(giatri AS INT) INTO v_sophuttraketqua\n FROM current.system\n WHERE tents = 'ha.sophuttraketqua';\n\n v_checktgthuchien := EXTRACT(EPOCH FROM (v_ngayth - v_ngaycd)) / 60.0;\n IF v_checktgthuchien <= v_sophuttoithieu THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format(\n 'Thời gian thực hiện y lệnh phải tối thiểu %s phút đối với thời gian chỉ định',\n v_sophuttoithieu\n )\n );\n END IF;\n\n v_checktgketqua := EXTRACT(EPOCH FROM (v_ngaykq - v_ngayth)) / 60.0;\n IF v_checktgketqua <= v_sophuttraketqua THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', format(\n 'Thời gian trả kết quả phải tối thiểu %s phút kể từ thời gian thực hiện',\n v_sophuttraketqua\n )\n );\n END IF;\n \n SELECT taikhoan, macc_hanhnghe_cv2348\n INTO tk_thuchien, cchn_thuchien\n FROM current.dmnhanvien\n WHERE manv = v_manv_thuchien; \n \n SELECT taikhoan\n INTO tk_traketqua\n FROM current.dmnhanvien\n WHERE manv = v_manv_ketqua; \n\n SELECT COUNT(*) INTO v_exists_pskhamha\n FROM current.pskhamha\n WHERE mabn = v_mabn\n AND makb = v_makb\n AND maba = v_maba\n AND macls = v_macls\n AND ngaykcb = v_ngaycd;\n\n IF v_exists_pskhamha > 0 THEN\n UPDATE current.pskhamha\n SET\n tenmay = 'EMR',\n taikhoan = 'EMR',\n taikhoan_traketqua = tk_thuchien,\n manv = v_manv_ketqua,\n madv = v_madv,\n maphong = v_phong,\n ngaycd = v_ngaykq::TIMESTAMP,\n mamay = v_mamay,\n ketluan_plaintext = v_ketluan,\n mota_text = v_mota,\n ghichu = v_mota, \n filepath = v_filepath\n WHERE\n mabn = v_mabn\n AND makb = v_makb\n AND maba = v_maba\n AND macls = v_macls\n AND ngaykcb = v_ngaycd;\n ELSE\n INSERT INTO current.pskhamha (\n mabn, makb, maba, macls, tenmay,\n taikhoan, manv, madv, maphong, ngaykcb, soluong,\n ngaycd, mamay,ketluan, ketluan_plaintext, mota_text, ghichu,\n dakhoa, mabl, thangkt, namkt, phienban,\n taikhoan_traketqua, hinhthuctraketqua, api, filepath\n )\n VALUES (\n v_mabn, v_makb, v_maba, v_macls, 'EMR',\n tk_thuchien, v_manv_ketqua, v_madv, v_phong, v_ngaycd::TIMESTAMP, 1,\n v_ngaykq::TIMESTAMP, v_mamay,v_ketluan, v_ketluan, v_mota, v_mota, 1, '',\n to_char(v_ngaykq::date,'MM'),to_char(v_ngaykq::date,'YYYY'), 'EMR.API',\n tk_traketqua,0, 1, v_filepath\n );\n END IF;\n\n UPDATE current.chidinhcls\n SET dath = 1,\n giolaymau = v_ngayth::TIMESTAMP,\n ngaykq = v_ngaykq::TIMESTAMP,\n nguoi_thuc_hien = cchn_thuchien\n WHERE mabn = v_mabn\n AND makb = v_makb\n AND COALESCE(maba,'') = COALESCE(v_maba,'')\n AND macls = v_macls\n AND ngaykcb = v_ngaycd::TIMESTAMP\n AND thangkt = v_chidinhcls.thangkt\n AND namkt = v_chidinhcls.namkt\n AND COALESCE(xoa, 0) = 0;\n\n RETURN jsonb_build_object(\n 'status', 'success',\n 'message', 'OK' \n );\n\n EXCEPTION\n WHEN OTHERS THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', 'Lỗi xử lý: ' || SQLERRM\n );\nEND;\n$$ LANGUAGE plpgsql;\n\n\n"
4558
+ },
4559
+ "badt_dhs.IsCancelCUTPParaClinRequest": {
4560
+ name: "badt_dhs.IsCancelCUTPParaClinRequest",
4561
+ para: ["input_json"],
4562
+ returns: "JSONB",
4563
+ codesql: "\n\n/*\nSELECT badt_dhs.IsCancelCUTPParaClinRequest('{\n \"PresCode\": \"DH3.20250810.093546\",\n \"PatientCode\": \"2025019850\",\n \"AdmissionCode\": \"2506012221\",\n \"MedicalRecordNo\": \"2025007154\",\n \"ParaClinReqCode\": \"2025007154_20250810095736\",\n \"PCReqDltVoucherNo\": \"BE05\"\n}':: JSONB);\n*/\nCREATE OR REPLACE FUNCTION badt_dhs.IsCancelCUTPParaClinRequest(input_json JSONB)\nRETURNS JSONB AS $$\nDECLARE\n-- Lastest commit: author:Nguyễn Triều Vương; date: 2025-08-22 10:46:17\n-- ===============================================================\n-- Thực hiện: NGUYỄN TRIỀU VƯƠNG - 2025-08-22\n-- Hàm: badt_dhs.IsCancelCUTPParaClinRequest(input_json JSONB)\n-- Mô tả: Hủy 1 thuốc trong toa\n-- input_json: nội dung file json: thông tin bệnh nhân và toa thuốc\n-- Sử dụng:\n-- SELECT badt_dhs.IsCancelCUTPParaClinRequest(input_json JSONB);\n-- Kiểm tra cls có đủ điều kiện xóa hay không\n-- ===============================================================\n-- Kiểm tra bn xuất viện\n--Kiểm tra điệu kiện cận lâm sàng\n-- Kiểm tra điều kiện lỗi chi tiết\n--Kiểm trả CLS có kèm toa vật tư không?\n-- Nếu không có lỗi\n p_mabn TEXT := input_json->>'PatientCode'; --Mã bệnh nhân\n p_maba TEXT := input_json->>'MedicalRecordNo'; -- Mã bệnh án\n p_makb TEXT := input_json->>'AdmissionCode'; -- Mã khám bệnh\n p_iddienbien TEXT := input_json->>'TPCode'; -- ID diễn biến\n p_idchidinh TEXT := input_json->>'ParaClinReqCode'; -- ID chỉ định\n p_macls TEXT := input_json->>'PCReqDltVoucherNo'; --Mã CLS\n\n v_exists BOOLEAN;\n v_ravien BOOLEAN;\n v_dain INT;\n v_dath INT;\n v_dathu INT;\n v_dalappttt INT;\n v_tongtien NUMERIC;\nBEGIN\n SELECT EXISTS (\n SELECT 1\n FROM current.bnnoitru\n WHERE mabn = p_mabn\n AND maba = p_maba\n AND makb = p_makb\n AND COALESCE(ravien, 0) > 0\n ) INTO v_ravien;\n\n IF v_ravien THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Bệnh nhân %s đã xuất viện', p_maba)\n );\n END IF;\n\n SELECT EXISTS (\n SELECT 1\n FROM current.chidinhcls\n WHERE mabn = p_mabn\n AND maba = p_maba\n AND makb = p_makb\n AND idchidinh = p_idchidinh\n AND COALESCE(xoa, 0) = 0\n ) INTO v_exists;\n\n IF NOT v_exists THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('ID chỉ định %s không tồn tại', p_idchidinh)\n );\n END IF;\n\n SELECT COALESCE(dain,0), COALESCE(dath,0), COALESCE(dathu,0), COALESCE(dalappttt,0)\n INTO v_dain, v_dath, v_dathu, v_dalappttt\n FROM current.chidinhcls\n WHERE mabn = p_mabn\n AND maba = p_maba\n AND makb = p_makb\n AND idchidinh = p_idchidinh\n AND macls = p_macls\n AND COALESCE(xoa,0) = 0;\n\n IF v_dain != 0 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Cận lâm sàng %s đã in, không thể xóa', p_macls)\n );\n ELSIF v_dathu = 1 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Cận lâm sàng %s đã thu tiền, không thể xóa', p_macls)\n );\n ELSIF v_dath = 1 OR v_dalappttt > 0 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Cận lâm sàng %s đã thực hiện, không thể xóa', p_macls)\n );\n ELSIF v_dath = 2 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Cận lâm sàng %s đã lấy mẫu/lấy số, không thể xóa', p_macls)\n );\n ELSIF v_dath = 3 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Cận lâm sàng %s đang thực hiện, không thể xóa', p_macls)\n );\n ELSIF v_dath >= 4 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Cận lâm sàng %s đã thực hiện, không thể xóa', p_macls)\n );\n END IF;\n\n SELECT COALESCE(sum(tien),0) as tien\n INTO v_tongtien\n FROM (\n SELECT COALESCE(idchidinh,'') as id,\n CASE when loaixn = 'xbb' then thanhtien\n when (loaixn = 'tto' or loaixn = 'ttt') and COALESCE(dain,0)= 1 then - thanhtien\n else 0 end as tien\n FROM current.chungtu\n WHERE idchidinh = p_idchidinh\n AND mabn = p_mabn\n AND makh = p_maba\n AND macls = p_macls\n AND COALESCE(xoa,0) = 0\n ) as tam;\n\n IF v_tongtien > 0 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Cận lâm sàng %s có vật tư hoặc thuốc kèm theo, không thể xóa', p_macls)\n );\n END IF;\n RETURN jsonb_build_object(\n 'status', 'success',\n 'message', format('Cận lâm sàng %s được phép xóa', p_macls)\n );\n\nEXCEPTION\n WHEN OTHERS THEN\n RETURN jsonb_build_object(\n 'status', 'error',\n 'message', SQLERRM\n );\nEND;\n$$ LANGUAGE plpgsql;\n"
4564
+ },
4565
+ "badt_dhs.IsCancelTPPrescription": {
4566
+ name: "badt_dhs.IsCancelTPPrescription",
4567
+ para: ["input_json"],
4568
+ returns: "JSONB",
4569
+ codesql: "\n\n/*\nSELECT badt_dhs.IsCancelTPPrescription('{\n \"PatientCode\": \"2025019850\",\n \"MedicalRecordNo\": \"2025007154\",\n \"AdmissionCode\": \"2506012221\",\n \"PresCode\": \"DH3.X25.0822.075624\",\n \"TPCode\": \"DH3.20250812.081748\",\n \"PresDtlCode\": \"A597\"\n}':: JSONB);\n*/\n\nCREATE OR REPLACE FUNCTION badt_dhs.IsCancelTPPrescription(input_json JSONB)\nRETURNS JSONB AS\n$$\nDECLARE\n-- Lastest commit: author:Nguyễn Triều Vương; date: 2025-08-22 10:44:58\n-- ===============================================================\n-- Thực hiện: NGUYỄN TRIỀU VƯƠNG - 2025-08-22\n-- Hàm: badt_dhs.IsCancelTPPrescription(input_json JSONB)\n-- Mô tả: Kiểm tra chứng từ xem có được phép xóa hay khong\n-- input_json: nội dung file json: thông tin bệnh nhân và toa thuốc\n-- Sử dụng:\n-- SELECT badt_dhs.IsCancelTPPrescription(input_json JSONB);\n-- Kiểm tra bn xuất viện\n-- Lấy thông tin từ bảng chungtu\n-- Kiểm tra điều kiện lỗi chi tiết\n-- Nếu không có lỗi\n TPCode TEXT := input_json->>'TPCode'; -- mã tờ điều trị: iddienbien\n AdmissionCode TEXT := input_json->>'AdmissionCode'; -- makb\n MedicalRecordNo TEXT := input_json->>'MedicalRecordNo'; -- maba\n PatientCode TEXT := input_json->>'PatientCode'; -- mabn\n PresCode TEXT := input_json->>'PresCode'; -- sohd\n\n v_dain INT;\n v_dathu INT;\n v_ttchinhtoa INT;\n v_ravien BOOLEAN;\nBEGIN\n SELECT EXISTS (\n SELECT 1\n FROM current.bnnoitru\n WHERE mabn = PatientCode\n AND maba = MedicalRecordNo\n AND makb = AdmissionCode\n AND COALESCE(ravien, 0) > 0\n ) INTO v_ravien;\n\n IF v_ravien THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Bệnh nhân %s đã xuất viện, không thể xóa toa', MedicalRecordNo)\n );\n END IF;\n\n SELECT\n COALESCE(dain,0),\n COALESCE(dathu,0),\n COALESCE(ttchinhtoa,0)\n INTO v_dain, v_dathu, v_ttchinhtoa\n FROM current.chungtu\n WHERE mabn = PatientCode\n AND makh = MedicalRecordNo\n AND sohd = PresCode\n AND COALESCE(xoa,0) = 0\n LIMIT 1;\n\n IF v_dain != 0 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Số chứng từ %s đã in, không thể xóa', PresCode)\n );\n ELSIF v_dathu = 1 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Số chứng từ %s đã thu tiền, không thể xóa', PresCode)\n );\n ELSIF v_ttchinhtoa = 1 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Số chứng từ %s đang chỉnh, không thể xóa', PresCode)\n );\n ELSIF v_ttchinhtoa = 4 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Số chứng từ %s đang tổng hợp, không thể xóa', PresCode)\n );\n ELSIF v_ttchinhtoa = 5 THEN\n RETURN jsonb_build_object(\n 'status', 'warning',\n 'message', format('Số chứng từ %s đã tổng hợp, không thể xóa', PresCode)\n );\n END IF;\n\n RETURN jsonb_build_object(\n 'status', 'success',\n 'message', format('Số chứng từ %s được phép xóa', PresCode)\n );\n\nEND;\n$$ LANGUAGE plpgsql;\n\n"
4558
4570
  },
4559
4571
  notify_payload_on_insert: {
4560
4572
  name: "notify_payload_on_insert",
@@ -4641,7 +4653,7 @@
4641
4653
  schema: "current",
4642
4654
  table_name: "dmdonvi",
4643
4655
  TG_ARGV0: "madv",
4644
- TG_ARGV1: "tendv,vietngan,khoaduoc,ma_khoa_cv2348,trangthai"
4656
+ TG_ARGV1: "tendv,vietngan,khoaduoc,ma_khoa_cv2348,trangthai,xoa"
4645
4657
  }),
4646
4658
  "current.dmphong": r(r({}, p["badt_dhs.GetSyncRoom"]), {}, {
4647
4659
  schema: "current",
@@ -4946,7 +4958,7 @@
4946
4958
  }
4947
4959
 
4948
4960
  function z(e, n, t, o) {
4949
- var r = n && n.prototype instanceof h ? n : h,
4961
+ var r = n && n.prototype instanceof m ? n : m,
4950
4962
  i = Object.create(r.prototype),
4951
4963
  p = new S(o || []);
4952
4964
  return a(i, "_invoke", {
@@ -4972,9 +4984,9 @@
4972
4984
  u = "suspendedYield",
4973
4985
  l = "executing",
4974
4986
  A = "completed",
4975
- m = {};
4987
+ h = {};
4976
4988
 
4977
- function h() {}
4989
+ function m() {}
4978
4990
 
4979
4991
  function f() {}
4980
4992
 
@@ -4986,7 +4998,7 @@
4986
4998
  var W = Object.getPrototypeOf,
4987
4999
  g = W && W(W(x([])));
4988
5000
  g && g !== t && o.call(g, i) && (_ = g);
4989
- var L = q.prototype = h.prototype = Object.create(_);
5001
+ var L = q.prototype = m.prototype = Object.create(_);
4990
5002
 
4991
5003
  function y(e) {
4992
5004
  ["next", "throw", "return"].forEach((function(n) {
@@ -5043,7 +5055,7 @@
5043
5055
  if (p) {
5044
5056
  var c = E(p, o);
5045
5057
  if (c) {
5046
- if (c === m) continue;
5058
+ if (c === h) continue;
5047
5059
  return c
5048
5060
  }
5049
5061
  }
@@ -5055,7 +5067,7 @@
5055
5067
  a = l;
5056
5068
  var s = d(n, t, o);
5057
5069
  if ("normal" === s.type) {
5058
- if (a = o.done ? A : u, s.arg === m) continue;
5070
+ if (a = o.done ? A : u, s.arg === h) continue;
5059
5071
  return {
5060
5072
  value: s.arg,
5061
5073
  done: o.done
@@ -5069,11 +5081,11 @@
5069
5081
  function E(n, t) {
5070
5082
  var o = t.method,
5071
5083
  a = n.iterator[o];
5072
- if (a === e) return t.delegate = null, "throw" === o && n.iterator.return && (t.method = "return", t.arg = e, E(n, t), "throw" === t.method) || "return" !== o && (t.method = "throw", t.arg = new TypeError("The iterator does not provide a '" + o + "' method")), m;
5084
+ if (a === e) return t.delegate = null, "throw" === o && n.iterator.return && (t.method = "return", t.arg = e, E(n, t), "throw" === t.method) || "return" !== o && (t.method = "throw", t.arg = new TypeError("The iterator does not provide a '" + o + "' method")), h;
5073
5085
  var r = d(a, n.iterator, t.arg);
5074
- if ("throw" === r.type) return t.method = "throw", t.arg = r.arg, t.delegate = null, m;
5086
+ if ("throw" === r.type) return t.method = "throw", t.arg = r.arg, t.delegate = null, h;
5075
5087
  var i = r.arg;
5076
- return i ? i.done ? (t[n.resultName] = i.value, t.next = n.nextLoc, "return" !== t.method && (t.method = "next", t.arg = e), t.delegate = null, m) : i : (t.method = "throw", t.arg = new TypeError("iterator result is not an object"), t.delegate = null, m)
5088
+ return i ? i.done ? (t[n.resultName] = i.value, t.next = n.nextLoc, "return" !== t.method && (t.method = "next", t.arg = e), t.delegate = null, h) : i : (t.method = "throw", t.arg = new TypeError("iterator result is not an object"), t.delegate = null, h)
5077
5089
  }
5078
5090
 
5079
5091
  function N(e) {
@@ -5198,16 +5210,16 @@
5198
5210
  }
5199
5211
  r && ("break" === e || "continue" === e) && r.tryLoc <= n && n <= r.finallyLoc && (r = null);
5200
5212
  var i = r ? r.completion : {};
5201
- return i.type = e, i.arg = n, r ? (this.method = "next", this.next = r.finallyLoc, m) : this.complete(i)
5213
+ return i.type = e, i.arg = n, r ? (this.method = "next", this.next = r.finallyLoc, h) : this.complete(i)
5202
5214
  },
5203
5215
  complete: function(e, n) {
5204
5216
  if ("throw" === e.type) throw e.arg;
5205
- return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && n && (this.next = n), m
5217
+ return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && n && (this.next = n), h
5206
5218
  },
5207
5219
  finish: function(e) {
5208
5220
  for (var n = this.tryEntries.length - 1; n >= 0; --n) {
5209
5221
  var t = this.tryEntries[n];
5210
- if (t.finallyLoc === e) return this.complete(t.completion, t.afterLoc), T(t), m
5222
+ if (t.finallyLoc === e) return this.complete(t.completion, t.afterLoc), T(t), h
5211
5223
  }
5212
5224
  },
5213
5225
  catch: function(e) {
@@ -5229,7 +5241,7 @@
5229
5241
  iterator: x(n),
5230
5242
  resultName: t,
5231
5243
  nextLoc: o
5232
- }, "next" === this.method && (this.arg = e), m
5244
+ }, "next" === this.method && (this.arg = e), h
5233
5245
  }
5234
5246
  }, n
5235
5247
  }
@@ -5266,8 +5278,8 @@
5266
5278
  u = t(6928),
5267
5279
  l = t(1596),
5268
5280
  A = l.Pool,
5269
- m = l.Client,
5270
- h = t(9e3),
5281
+ h = l.Client,
5282
+ m = t(9e3),
5271
5283
  f = t(4800),
5272
5284
  q = t(4067),
5273
5285
  _ = t(5627),
@@ -5275,7 +5287,7 @@
5275
5287
  g = t(6758),
5276
5288
  L = t(6989),
5277
5289
  y = new A,
5278
- R = new m,
5290
+ R = new h,
5279
5291
  v = g.createSequentialQueue(),
5280
5292
  E = function() {
5281
5293
  function e() {
@@ -5330,7 +5342,7 @@
5330
5342
  case 5:
5331
5343
  return e.abrupt("return", e.sent);
5332
5344
  case 8:
5333
- e.prev = 8, e.t0 = e.catch(2), h.logError(e.t0, "insertBenhNhanSynced");
5345
+ e.prev = 8, e.t0 = e.catch(2), m.logError(e.t0, "insertBenhNhanSynced");
5334
5346
  case 11:
5335
5347
  case "end":
5336
5348
  return e.stop()
@@ -5400,7 +5412,7 @@
5400
5412
  }(e), "'")
5401
5413
  })),
5402
5414
  b = "SELECT ".concat(a, "(").concat(s.join(","), ")");
5403
- return h.logInfoObject({
5415
+ return m.logInfoObject({
5404
5416
  para: i,
5405
5417
  payload: n,
5406
5418
  sql: b,
@@ -5431,15 +5443,15 @@
5431
5443
  },
5432
5444
  S = function() {
5433
5445
  var e = d(M().mark((function e(n) {
5434
- var t, o, a, r, i, p, s, z, O, u, l, A, m, q, g, L, y, v, S, x, k, w, D, C, B, X, Y, j, P, I, H, F, U, G, V, J, K, $, Q, Z, ee, ne, te, oe, ae, re, ie;
5446
+ var t, o, a, r, i, p, s, z, O, u, l, A, h, q, g, L, y, v, S, x, k, w, D, C, B, X, Y, I, j, P, H, F, U, G, V, J, K, $, Q, Z, ee, ne, te, oe, ae, re, ie;
5435
5447
  return M().wrap((function(e) {
5436
5448
  for (;;) switch (e.prev = e.next) {
5437
5449
  case 0:
5438
- if (t = JSON.parse(n.payload), o = t.channel, r = (a = {}).data, i = a.pathApi, p = a.pgFunctionName, z = void 0 === (s = a.method) ? "POST" : s, u = void 0 === (O = a.mutiRequests) ? [] : O, l = t.operation, t.bant, A = t.maba, m = t.mabn, q = t.makb, t.namvien, t.makh, y = void 0 === (L = (g = {}).EmployeeCode) ? "" : L, S = void 0 === (v = g.ParaClinReqCode) ? "" : v, w = void 0 !== (k = (x = {}).isCancelHandleNotification) && k, void 0 !== (D = x.iddienbienByAPIEmr) && D, e.prev = 6, "current.dmbenhnhan" !== o) {
5450
+ if (t = JSON.parse(n.payload), o = t.channel, r = (a = {}).data, i = a.pathApi, p = a.pgFunctionName, z = void 0 === (s = a.method) ? "POST" : s, u = void 0 === (O = a.mutiRequests) ? [] : O, l = t.operation, t.bant, A = t.maba, h = t.mabn, q = t.makb, t.namvien, t.makh, y = void 0 === (L = (g = {}).EmployeeCode) ? "" : L, S = void 0 === (v = g.ParaClinReqCode) ? "" : v, w = void 0 !== (k = (x = {}).isCancelHandleNotification) && k, void 0 !== (D = x.iddienbienByAPIEmr) && D, e.prev = 6, "current.dmbenhnhan" !== o) {
5439
5451
  e.next = 13;
5440
5452
  break
5441
5453
  }
5442
- return e.next = 10, R.query(" SELECT badt_dhs.getSyncADM_ByDmbenhnhan('".concat(m, "'); "));
5454
+ return e.next = 10, R.query(" SELECT badt_dhs.getSyncADM_ByDmbenhnhan('".concat(h, "'); "));
5443
5455
  case 10:
5444
5456
  return e.next = 12, E.markProcessed(t.notification_id);
5445
5457
  case 12:
@@ -5464,7 +5476,7 @@
5464
5476
  case 7:
5465
5477
  return a = e.sent, r = (null === (o = a.rows[0]) || void 0 === o ? void 0 : o.exists) || !1, e.abrupt("return", r);
5466
5478
  case 12:
5467
- throw e.prev = 12, e.t0 = e.catch(1), h.logError(e.t0, "Error checking iddienbien by EMR:"), e.t0;
5479
+ throw e.prev = 12, e.t0 = e.catch(1), m.logError(e.t0, "Error checking iddienbien by EMR:"), e.t0;
5468
5480
  case 16:
5469
5481
  case "end":
5470
5482
  return e.stop()
@@ -5482,7 +5494,7 @@
5482
5494
  i = T.pathApi, p = T.pgFunctionName, e.t1 = l, e.next = "UPDATE" === e.t1 ? 23 : 33;
5483
5495
  break;
5484
5496
  case 23:
5485
- if (1 !== Number(W.getPropertyValueIgnoreCaseForceEmpty(t, "changed_fields.ravien.new"))) {
5497
+ if (0 === Number(W.getPropertyValueIgnoreCaseForceEmpty(t, "changed_fields.ravien.new"))) {
5486
5498
  e.next = 28;
5487
5499
  break
5488
5500
  }
@@ -5506,7 +5518,7 @@
5506
5518
  case 41:
5507
5519
  return e.abrupt("return");
5508
5520
  case 42:
5509
- return B(), Y = W.getPropertyValueIgnoreCaseForceEmpty(t, "senddata.pathApi"), y = W.getPropertyValueIgnoreCaseForceEmpty(t, "senddata.EmployeeCode"), S = W.getPropertyValueIgnoreCaseForceEmpty(t, "senddata.ParaClinReqCode"), "string" == typeof Y && "" !== Y && (i = Y), "UPDATE" === l && 1 === (j = Number(W.getPropertyValueIgnoreCaseForceEmpty(t, "changed_fields.xoa.new"))) && (P = W.getPropertyValueIgnoreCaseForceEmpty(t, "senddata.ParaClinReqCode"), I = W.getPropertyValueIgnoreCaseForceEmpty(t, "senddata.ParaClinRequests.0.PCReqDltVoucherNo"), i = "server/his-server/api/Connect/DTPParaClinReqDtl?ParaClinReqCode=".concat(P, "&PCReqDltVoucherNo=").concat(I), z = "DELETE", "string" == typeof Y && "" !== Y && (i = "server/his-server/api/Connect/DTPParaClinRequestOUT?ParaClinReqCode=".concat(P, "&PCReqDltVoucherNo=").concat(I)), h.logInfo("current.chidinhcls.xoaNEW === 1:".concat(JSON.stringify({
5521
+ return B(), Y = W.getPropertyValueIgnoreCaseForceEmpty(t, "senddata.pathApi"), y = W.getPropertyValueIgnoreCaseForceEmpty(t, "senddata.EmployeeCode"), S = W.getPropertyValueIgnoreCaseForceEmpty(t, "senddata.ParaClinReqCode"), "string" == typeof Y && "" !== Y && (i = Y), "UPDATE" === l && 1 === (I = Number(W.getPropertyValueIgnoreCaseForceEmpty(t, "changed_fields.xoa.new"))) && (j = W.getPropertyValueIgnoreCaseForceEmpty(t, "senddata.ParaClinReqCode"), P = W.getPropertyValueIgnoreCaseForceEmpty(t, "senddata.ParaClinRequests.0.PCReqDltVoucherNo"), i = "server/his-server/api/Connect/DTPParaClinReqDtl?ParaClinReqCode=".concat(j, "&PCReqDltVoucherNo=").concat(P), z = "DELETE", "string" == typeof Y && "" !== Y && (i = "server/his-server/api/Connect/DTPParaClinRequestOUT?ParaClinReqCode=".concat(j, "&PCReqDltVoucherNo=").concat(P)), m.logInfo("current.chidinhcls.xoaNEW === 1:".concat(JSON.stringify({
5510
5522
  pathApi: i,
5511
5523
  method: z,
5512
5524
  payloadPathApi: Y
@@ -5530,7 +5542,7 @@
5530
5542
  case 65:
5531
5543
  return e.abrupt("return");
5532
5544
  case 66:
5533
- return B(), "UPDATE" === l && (j = Number(W.getPropertyValueIgnoreCaseForceEmpty(t, "changed_fields.xoa.new")), G = (U = {}).pshxhdXoaRows, V = U.sql, 1 === j && (J = W.getPropertyValueIgnoreCaseForceEmpty(t, "sohd"), i = "server/his-server/api/Connect/DTPPrescription?PresCode=".concat(J), z = "DELETE"), h.logInfo("current.chungtu.xoaNEW === 1:".concat(JSON.stringify({
5545
+ return B(), "UPDATE" === l && (I = Number(W.getPropertyValueIgnoreCaseForceEmpty(t, "changed_fields.xoa.new")), G = (U = {}).pshxhdXoaRows, V = U.sql, 1 === I && (J = W.getPropertyValueIgnoreCaseForceEmpty(t, "sohd"), i = "server/his-server/api/Connect/DTPPrescription?PresCode=".concat(J), z = "DELETE"), m.logInfo("current.chungtu.xoaNEW === 1:".concat(JSON.stringify({
5534
5546
  mutiRequests: u,
5535
5547
  pshxhdXoaRows: G,
5536
5548
  sql: V,
@@ -5544,7 +5556,7 @@
5544
5556
  })), ee = (null == t ? void 0 : t.changed_fields) && ["loaiqh", "hotenqh", "cmndqh", "diachiqh", "dienthoaiqh"].some((function(e) {
5545
5557
  var n;
5546
5558
  return void 0 !== (null === (n = t.changed_fields[e]) || void 0 === n ? void 0 : n.new)
5547
- })), !0 === Z ? (i = T.pathApi, p = "badt_dhs.getSyncADM_Ngoai") : !0 === ee ? (i = T.pathApi, p = "badt_dhs.getSyncADM") : w = !0) : (i = "server/his-server/api/SyncData/SyncDCHG", p = "badt_dhs.getSyncDCHG_Ngoai_Khambenh"), h.logInfoObject({
5559
+ })), !0 === Z ? (i = T.pathApi, p = "badt_dhs.getSyncADM_Ngoai") : !0 === ee ? (i = T.pathApi, p = "badt_dhs.getSyncADM") : w = !0) : (i = "server/his-server/api/SyncData/SyncDCHG", p = "badt_dhs.getSyncDCHG_Ngoai_Khambenh"), m.logInfoObject({
5548
5560
  madv_inphieuNEW: Q,
5549
5561
  ngayinphieuNEW: K,
5550
5562
  ngayinphieuOLD: $,
@@ -5614,7 +5626,7 @@
5614
5626
  }
5615
5627
  return e.next = 13, E.markRetry(t.notification_id);
5616
5628
  case 13:
5617
- h.logError("dataSyncADM null", "dataSyncADM");
5629
+ m.logError("dataSyncADM null", "dataSyncADM");
5618
5630
  case 14:
5619
5631
  return e.next = 16, f.sendData({
5620
5632
  pathApi: T.pathApi,
@@ -5633,14 +5645,14 @@
5633
5645
  case 20:
5634
5646
  C = e.sent;
5635
5647
  case 21:
5636
- h.logInfoObject({
5648
+ m.logInfoObject({
5637
5649
  apiResult: C,
5638
5650
  dataSyncADM: n,
5639
5651
  apiResultSyncADM: o
5640
5652
  }, "Retry: Không tìm thấy người bệnh"), e.next = 27;
5641
5653
  break;
5642
5654
  case 24:
5643
- e.prev = 24, e.t0 = e.catch(0), h.logError(e.t0, "ERROR_ReTry_SyncADM");
5655
+ e.prev = 24, e.t0 = e.catch(0), m.logError(e.t0, "ERROR_ReTry_SyncADM");
5644
5656
  case 27:
5645
5657
  case "end":
5646
5658
  return e.stop()
@@ -5699,7 +5711,7 @@
5699
5711
  e.t5 = e.sent, e.t4.push.call(e.t4, e.t5), e.next = 112;
5700
5712
  break;
5701
5713
  case 108:
5702
- e.prev = 108, e.t6 = e.catch(100), h.logError(e.t6, "mutiRequests"), null !== e.t6 && void 0 !== e.t6 && null !== (ae = e.t6.response) && void 0 !== ae && ae.data ? C.push(e.t6.response.data) : C.push(e.t6.message);
5714
+ e.prev = 108, e.t6 = e.catch(100), m.logError(e.t6, "mutiRequests"), null !== e.t6 && void 0 !== e.t6 && null !== (ae = e.t6.response) && void 0 !== ae && ae.data ? C.push(e.t6.response.data) : C.push(e.t6.message);
5703
5715
  case 112:
5704
5716
  oe++, e.next = 99;
5705
5717
  break;
@@ -5750,7 +5762,7 @@
5750
5762
  case 143:
5751
5763
  return e.next = 145, E.markRetry(t.notification_id);
5752
5764
  case 145:
5753
- (C + "").includes("DOCTYPE html") && (C = "ERROR:HTML"), h.logInfoObject({
5765
+ (C + "").includes("DOCTYPE html") && (C = "ERROR:HTML"), m.logInfoObject({
5754
5766
  apiResult: C,
5755
5767
  data: r,
5756
5768
  pathApi: i,
@@ -5760,7 +5772,7 @@
5760
5772
  }), e.next = 152;
5761
5773
  break;
5762
5774
  case 149:
5763
- e.prev = 149, e.t8 = e.catch(6), h.logError(e.t8, "handleNotification");
5775
+ e.prev = 149, e.t8 = e.catch(6), m.logError(e.t8, "handleNotification");
5764
5776
  case 152:
5765
5777
  return e.prev = 152, !0 !== w && (ie = {
5766
5778
  table_name: o,
@@ -5771,7 +5783,7 @@
5771
5783
  pathApi: i,
5772
5784
  resultApi: C,
5773
5785
  maba: A,
5774
- mabn: m,
5786
+ mabn: h,
5775
5787
  makb: q,
5776
5788
  type: "HISEMR"
5777
5789
  }, E.insertBenhNhanSynced(ie)), e.finish(152);
@@ -5803,15 +5815,15 @@
5803
5815
  }
5804
5816
  return e.abrupt("return");
5805
5817
  case 4:
5806
- return x = !0, h.logInfo("Checking for unprocessed notifications..."), e.next = 9, y.query("\n SELECT payload, table_name, id \n FROM badt_dhs.notifications \n WHERE COALESCE(processed, false) = false \n AND retry_count < $1 \n ORDER BY created_at ASC \n LIMIT 10;\n ", [n]);
5818
+ return x = !0, m.logInfo("Checking for unprocessed notifications..."), e.next = 9, y.query("\n SELECT payload, table_name, id \n FROM badt_dhs.notifications \n WHERE COALESCE(processed, false) = false \n AND retry_count < $1 \n ORDER BY created_at ASC \n LIMIT 10;\n ", [n]);
5807
5819
  case 9:
5808
- if (t = e.sent, h.logInfoObject({
5820
+ if (t = e.sent, m.logInfoObject({
5809
5821
  "rows.length": t.rows.length
5810
5822
  }, "processUnprocessedNotifications"), 0 !== t.rows.length) {
5811
5823
  e.next = 14;
5812
5824
  break
5813
5825
  }
5814
- return h.logInfo("No unprocessed notifications found."), e.abrupt("return");
5826
+ return m.logInfo("No unprocessed notifications found."), e.abrupt("return");
5815
5827
  case 14:
5816
5828
  o = a(t.rows), e.prev = 15, o.s();
5817
5829
  case 17:
@@ -5826,7 +5838,7 @@
5826
5838
  e.next = 30;
5827
5839
  break;
5828
5840
  case 27:
5829
- e.prev = 27, e.t0 = e.catch(19), h.logError(e.t0, "Error - For handleNotification");
5841
+ e.prev = 27, e.t0 = e.catch(19), m.logError(e.t0, "Error - For handleNotification");
5830
5842
  case 30:
5831
5843
  e.next = 17;
5832
5844
  break;
@@ -5841,7 +5853,7 @@
5841
5853
  e.next = 45;
5842
5854
  break;
5843
5855
  case 42:
5844
- e.prev = 42, e.t2 = e.catch(0), h.logError(e.t2);
5856
+ e.prev = 42, e.t2 = e.catch(0), m.logError(e.t2);
5845
5857
  case 45:
5846
5858
  return e.prev = 45, x = !1, e.finish(45);
5847
5859
  case 48:
@@ -5861,7 +5873,7 @@
5861
5873
  w = function() {
5862
5874
  var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "syncAllDanhMuc",
5863
5875
  n = "E:/CLOUDCODE/dh-hos-code/dh-javascript-sources/src/EMR-DHS-PG/.gitignore/sync-omon";
5864
- return !0 !== O.existsSync(n) && (n = u.join(process.cwd(), e), h.logInfo("Đang tạo thư mục ".concat(e, ": ").concat(n)), !0 !== O.existsSync(n) && O.mkdirSync(n, {
5876
+ return !0 !== O.existsSync(n) && (n = u.join(process.cwd(), e), m.logInfo("Đang tạo thư mục ".concat(e, ": ").concat(n)), !0 !== O.existsSync(n) && O.mkdirSync(n, {
5865
5877
  recursive: !0
5866
5878
  })), n
5867
5879
  },
@@ -5872,7 +5884,7 @@
5872
5884
  for (;;) switch (e.prev = e.next) {
5873
5885
  case 0:
5874
5886
  e.prev = 0, n = ["current.dmdonvi", "current.dmnhanvien", "current.dmphong", "current.dmgiuongbenh", "current.dmloaicls", "current.dmcls", "current.dmkhocp", "current.dmkhoql", "current.dmthuoc", "current.dmxa4750-tinh", "current.dmxa4750-huyen", "current.dmxa4750-xa", "current.dmdantoc", "current.dmnghe"], t = {}, o = w("syncAllDanhMuc"), a = M().mark((function e() {
5875
- var a, i, p, c, s, b, z, d, l, A, m, g, L, y, v;
5887
+ var a, i, p, c, s, b, z, d, l, A, h, g, L, y, v;
5876
5888
  return M().wrap((function(e) {
5877
5889
  for (;;) switch (e.prev = e.next) {
5878
5890
  case 0:
@@ -5881,11 +5893,11 @@
5881
5893
  if (!Number.isInteger(n) || n <= 0) throw new Error("Size phải là số nguyên dương");
5882
5894
  for (var t = [], o = 0; o < e.length; o += n) t.push(e.slice(o, o + n));
5883
5895
  return t
5884
- }, a = n[r], h.logInfo("➡️ Sync danh mục: ".concat(a)), c = void 0 === (p = (i = {}).functionName) ? "" : p, b = void 0 === (s = i.pathApi) ? "" : s, "current.dmxa4750-tinh" === a ? (c = "badt_dhs.GetSyncCityProvince", void(b = "server/his-server/api/SyncData/SyncCityProvince")) : "current.dmxa4750-huyen" === a ? (c = "badt_dhs.GetSyncDistrict", void(b = "server/his-server/api/SyncData/SyncDistrict")) : "current.dmxa4750-xa" === a ? (c = "badt_dhs.GetSyncWard", void(b = "server/his-server/api/SyncData/SyncWard")) : (c = q.pgTableListener[a].name, void(b = _[a])), l = u.join(o, "".concat(a, ".success.json")), e.prev = 6, !0 === O.existsSync(l)) {
5896
+ }, a = n[r], m.logInfo("➡️ Sync danh mục: ".concat(a)), c = void 0 === (p = (i = {}).functionName) ? "" : p, b = void 0 === (s = i.pathApi) ? "" : s, "current.dmxa4750-tinh" === a ? (c = "badt_dhs.GetSyncCityProvince", void(b = "server/his-server/api/SyncData/SyncCityProvince")) : "current.dmxa4750-huyen" === a ? (c = "badt_dhs.GetSyncDistrict", void(b = "server/his-server/api/SyncData/SyncDistrict")) : "current.dmxa4750-xa" === a ? (c = "badt_dhs.GetSyncWard", void(b = "server/his-server/api/SyncData/SyncWard")) : (c = q.pgTableListener[a].name, void(b = _[a])), l = u.join(o, "".concat(a, ".success.json")), e.prev = 6, !0 === O.existsSync(l)) {
5885
5897
  e.next = 45;
5886
5898
  break
5887
5899
  }
5888
- return h.logInfo("➡️ GetData: ".concat(a)), e.next = 11, R.query("SELECT ".concat(c, "();")).then((function(e) {
5900
+ return m.logInfo("➡️ GetData: ".concat(a)), e.next = 11, R.query("SELECT ".concat(c, "();")).then((function(e) {
5889
5901
  var n = e.rows[0];
5890
5902
  return JSON.parse(n[Object.keys(n)[0]])
5891
5903
  }));
@@ -5894,7 +5906,7 @@
5894
5906
  return n === t.findIndex((function(n) {
5895
5907
  return JSON.stringify(n) === JSON.stringify(e)
5896
5908
  }))
5897
- })), O.writeFileSync(u.join(o, "".concat(a, ".rawdata.json")), JSON.stringify(d, null, 2)), h.logInfo("➡️ SendData: ".concat(a)), (m = parseInt(process.env.SYNCDATA_ITEM, 10) || 2e3) <= 0 && (m = 2e3), 1 !== (g = A(d, m)).length) {
5909
+ })), O.writeFileSync(u.join(o, "".concat(a, ".rawdata.json")), JSON.stringify(d, null, 2)), m.logInfo("➡️ SendData: ".concat(a)), (h = parseInt(process.env.SYNCDATA_ITEM, 10) || 2e3) <= 0 && (h = 2e3), 1 !== (g = A(d, h)).length) {
5898
5910
  e.next = 24;
5899
5911
  break
5900
5912
  }
@@ -5919,7 +5931,7 @@
5919
5931
  e.next = 37;
5920
5932
  break
5921
5933
  }
5922
- return h.logInfo("➡️ SendData (chunks: ".concat(m, ") [").concat(L + 1, "/").concat(g.length, "]: ").concat(a)), e.next = 30, f.sendData({
5934
+ return m.logInfo("➡️ SendData (chunks: ".concat(h, ") [").concat(L + 1, "/").concat(g.length, "]: ").concat(a)), e.next = 30, f.sendData({
5923
5935
  pathApi: b,
5924
5936
  data: g[L]
5925
5937
  });
@@ -5961,7 +5973,7 @@
5961
5973
  error: W.stringifyForceEmpty(e.t0)
5962
5974
  }, null, 2));
5963
5975
  case 54:
5964
- return e.prev = 54, h.logInfo(t[a]), e.finish(54);
5976
+ return e.prev = 54, m.logInfo(t[a]), e.finish(54);
5965
5977
  case 57:
5966
5978
  case "end":
5967
5979
  return e.stop()
@@ -5980,7 +5992,7 @@
5980
5992
  r++, e.next = 6;
5981
5993
  break;
5982
5994
  case 11:
5983
- h.logInfoObject(t, "syncAllDanhMuc"), e.next = 17;
5995
+ m.logInfoObject(t, "syncAllDanhMuc"), e.next = 17;
5984
5996
  break;
5985
5997
  case 14:
5986
5998
  throw e.prev = 14, e.t1 = e.catch(0), e.t1;
@@ -6007,8 +6019,8 @@
6007
6019
  success: 0,
6008
6020
  fail: 0,
6009
6021
  dsFails: []
6010
- } : p, s = n.err, b = w("syncBnnoitru"), e.prev = 2, h.logInfo("➡️ GetPgData: Bnnoitru"), e.next = 6, d(M().mark((function e() {
6011
- var n, t, a, p, s, z, l, A, m, q, _;
6022
+ } : p, s = n.err, b = w("syncBnnoitru"), e.prev = 2, m.logInfo("➡️ GetPgData: Bnnoitru"), e.next = 6, d(M().mark((function e() {
6023
+ var n, t, a, p, s, z, l, A, h, q, _;
6012
6024
  return M().wrap((function(e) {
6013
6025
  for (;;) switch (e.prev = e.next) {
6014
6026
  case 0:
@@ -6023,7 +6035,7 @@
6023
6035
  case 4:
6024
6036
  return e.abrupt("return", e.sent);
6025
6037
  case 7:
6026
- return e.prev = 7, e.t0 = e.catch(1), h.logError(e.t0, "songaylui"), e.abrupt("return", n);
6038
+ return e.prev = 7, e.t0 = e.catch(1), m.logError(e.t0, "songaylui"), e.abrupt("return", n);
6027
6039
  case 11:
6028
6040
  case "end":
6029
6041
  return e.stop()
@@ -6037,7 +6049,7 @@
6037
6049
  return e.rows
6038
6050
  }));
6039
6051
  case 13:
6040
- if (i = e.sent, h.logInfoObject({
6052
+ if (i = e.sent, m.logInfoObject({
6041
6053
  countRow: i.length,
6042
6054
  songaylui: n,
6043
6055
  sql: t
@@ -6051,7 +6063,7 @@
6051
6063
  e.next = 42;
6052
6064
  break
6053
6065
  }
6054
- if (p = i[a], s = p.mabn, z = p.makb, l = p.maba, A = "".concat(s, "-").concat(z, "-").concat(l), m = u.join(b, "".concat(A, ".success.json")), h.logInfo("➡️ SyncData: Bnnoitru [".concat(a + 1, "/").concat(i.length, "]:").concat(A)), !0 !== O.existsSync(m)) {
6066
+ if (p = i[a], s = p.mabn, z = p.makb, l = p.maba, A = "".concat(s, "-").concat(z, "-").concat(l), h = u.join(b, "".concat(A, ".success.json")), m.logInfo("➡️ SyncData: Bnnoitru [".concat(a + 1, "/").concat(i.length, "]:").concat(A)), !0 !== O.existsSync(h)) {
6055
6067
  e.next = 25;
6056
6068
  break
6057
6069
  }
@@ -6072,7 +6084,7 @@
6072
6084
  case 35:
6073
6085
  e.prev = 35, e.t0 = e.catch(29), q = null !== e.t0 && void 0 !== e.t0 && null !== (_ = e.t0.response) && void 0 !== _ && _.data ? e.t0.response.data : e.t0;
6074
6086
  case 38:
6075
- !0 === f.ResOK(q) ? (c.success++, O.writeFileSync(m, JSON.stringify({
6087
+ !0 === f.ResOK(q) ? (c.success++, O.writeFileSync(h, JSON.stringify({
6076
6088
  apiResult: q,
6077
6089
  pgData: i[a]
6078
6090
  }, null, 2))) : (c.fail++, c.dsFails.push({
@@ -6102,7 +6114,7 @@
6102
6114
  error: W.stringifyForceEmpty(s),
6103
6115
  pathApi: o,
6104
6116
  pgFunctionName: r
6105
- }, null, 2)), h.logInfoObject(c, "🔚 Sync Bnnoitru 🔚"), e.finish(13);
6117
+ }, null, 2)), m.logInfoObject(c, "🔚 Sync Bnnoitru 🔚"), e.finish(13);
6106
6118
  case 17:
6107
6119
  case "end":
6108
6120
  return e.stop()
@@ -6127,7 +6139,7 @@
6127
6139
  success: 0,
6128
6140
  fail: 0,
6129
6141
  dsFails: []
6130
- } : p, s = n.err, b = w("psdangkySyncDCHG"), e.prev = 2, h.logInfo("➡️ GetPgData: psdangkySyncDCHG"), e.next = 6, d(M().mark((function e() {
6142
+ } : p, s = n.err, b = w("psdangkySyncDCHG"), e.prev = 2, m.logInfo("➡️ GetPgData: psdangkySyncDCHG"), e.next = 6, d(M().mark((function e() {
6131
6143
  return M().wrap((function(e) {
6132
6144
  for (;;) switch (e.prev = e.next) {
6133
6145
  case 0:
@@ -6137,7 +6149,7 @@
6137
6149
  case 5:
6138
6150
  return e.abrupt("return", e.sent);
6139
6151
  case 8:
6140
- return e.prev = 8, e.t0 = e.catch(0), h.logError(e.t0, "NGAYDK"), e.abrupt("return", "");
6152
+ return e.prev = 8, e.t0 = e.catch(0), m.logError(e.t0, "NGAYDK"), e.abrupt("return", "");
6141
6153
  case 12:
6142
6154
  case "end":
6143
6155
  return e.stop()
@@ -6156,7 +6168,7 @@
6156
6168
  return e.rows
6157
6169
  }));
6158
6170
  case 10:
6159
- if (i = e.sent, h.logInfoObject({
6171
+ if (i = e.sent, m.logInfoObject({
6160
6172
  countRow: i.length,
6161
6173
  ngaydk: c.NGAYDK,
6162
6174
  sql: n
@@ -6170,7 +6182,7 @@
6170
6182
  e.next = 36;
6171
6183
  break
6172
6184
  }
6173
- return a = i[t], p = a.mabn, s = a.makb, b = "".concat(p, "-").concat(s), h.logInfo("➡️ SyncData: psdangkySyncDCHG [".concat(t + 1, "/").concat(i.length, "]:").concat(b)), e.next = 21, R.query("SELECT ".concat(r, "('").concat(p, "','").concat(s, "');")).then((function(e) {
6185
+ return a = i[t], p = a.mabn, s = a.makb, b = "".concat(p, "-").concat(s), m.logInfo("➡️ SyncData: psdangkySyncDCHG [".concat(t + 1, "/").concat(i.length, "]:").concat(b)), e.next = 21, R.query("SELECT ".concat(r, "('").concat(p, "','").concat(s, "');")).then((function(e) {
6174
6186
  var n = e.rows[0];
6175
6187
  return JSON.parse(n[Object.keys(n)[0]])
6176
6188
  }));
@@ -6212,7 +6224,7 @@
6212
6224
  error: W.stringifyForceEmpty(s),
6213
6225
  pathApi: o,
6214
6226
  pgFunctionName: r
6215
- }, null, 2)), h.logInfoObject(c, "🔚 Sync psdangkySyncDCHG 🔚"), e.finish(16);
6227
+ }, null, 2)), m.logInfoObject(c, "🔚 Sync psdangkySyncDCHG 🔚"), e.finish(16);
6216
6228
  case 20:
6217
6229
  case "end":
6218
6230
  return e.stop()
@@ -6227,7 +6239,7 @@
6227
6239
  }(),
6228
6240
  X = function() {
6229
6241
  var e = d(M().mark((function e() {
6230
- var n, t, a, r, i, p, c, s, b, z, l, A, m, q, _, g, y, v, E, N;
6242
+ var n, t, a, r, i, p, c, s, b, z, l, A, h, q, _, g, y, v, E, N;
6231
6243
  return M().wrap((function(e) {
6232
6244
  for (;;) switch (e.prev = e.next) {
6233
6245
  case 0:
@@ -6235,7 +6247,7 @@
6235
6247
  songaylui: 0,
6236
6248
  dsDonvi: [],
6237
6249
  dsHIS: []
6238
- } : t, r = n.err, i = w("checkHosoEMR"), e.prev = 2, h.logInfo("➡️ GetPgData: checkHosoEMR"), e.next = 6, d(M().mark((function e() {
6250
+ } : t, r = n.err, i = w("checkHosoEMR"), e.prev = 2, m.logInfo("➡️ GetPgData: checkHosoEMR"), e.next = 6, d(M().mark((function e() {
6239
6251
  return M().wrap((function(e) {
6240
6252
  for (;;) switch (e.prev = e.next) {
6241
6253
  case 0:
@@ -6266,7 +6278,7 @@
6266
6278
  case 4:
6267
6279
  return e.abrupt("return", e.sent);
6268
6280
  case 7:
6269
- return e.prev = 7, e.t0 = e.catch(1), h.logError(e.t0, "songaylui"), e.abrupt("return", n);
6281
+ return e.prev = 7, e.t0 = e.catch(1), m.logError(e.t0, "songaylui"), e.abrupt("return", n);
6270
6282
  case 11:
6271
6283
  case "end":
6272
6284
  return e.stop()
@@ -6366,7 +6378,7 @@
6366
6378
  })))();
6367
6379
  case 10:
6368
6380
  return a[t].countHIS = e.sent, e.next = 13, d(M().mark((function e() {
6369
- var n, o, i, p, c, s, b, z, d, O, u, l, A, m;
6381
+ var n, o, i, p, c, s, b, z, d, O, u, l, A, h;
6370
6382
  return M().wrap((function(e) {
6371
6383
  for (;;) switch (e.prev = e.next) {
6372
6384
  case 0:
@@ -6376,7 +6388,7 @@
6376
6388
  e.next = 36;
6377
6389
  break
6378
6390
  }
6379
- return o = a[t].dsEMR[n], i = o.mabn, p = o.makb, c = o.maba, s = o.PatientName, h.logInfo("Xử lý [".concat(t, "-").concat(r, "] [").concat(n + 1, "/").concat(a[t].dsEMR.length, "]: ").concat(c, " - ").concat(s, " ")), b = "", b += " SELECT COALESCE(nt.ravien,0) AS ravien ", b += " FROM current.bnnoitru AS nt ", b += " WHERE COALESCE(xoa,0) = 0 ", b += " AND COALESCE(namvien,0) = 1 ", b += " AND mabn = '".concat(i, "' "), b += " AND makb = '".concat(p, "' "), b += " AND maba = '".concat(c, "' "), e.next = 14, R.query(b).then((function(e) {
6391
+ return o = a[t].dsEMR[n], i = o.mabn, p = o.makb, c = o.maba, s = o.PatientName, m.logInfo("Xử lý [".concat(t, "-").concat(r, "] [").concat(n + 1, "/").concat(a[t].dsEMR.length, "]: ").concat(c, " - ").concat(s, " ")), b = "", b += " SELECT COALESCE(nt.ravien,0) AS ravien ", b += " FROM current.bnnoitru AS nt ", b += " WHERE COALESCE(xoa,0) = 0 ", b += " AND COALESCE(namvien,0) = 1 ", b += " AND mabn = '".concat(i, "' "), b += " AND makb = '".concat(p, "' "), b += " AND maba = '".concat(c, "' "), e.next = 14, R.query(b).then((function(e) {
6380
6392
  var n, t;
6381
6393
  return null !== (n = null === (t = e.rows[0]) || void 0 === t ? void 0 : t.ravien) && void 0 !== n ? n : ""
6382
6394
  }));
@@ -6398,7 +6410,7 @@
6398
6410
  u = e.sent, e.next = 32;
6399
6411
  break;
6400
6412
  case 29:
6401
- e.prev = 29, e.t0 = e.catch(23), u = null !== e.t0 && void 0 !== e.t0 && null !== (m = e.t0.response) && void 0 !== m && m.data ? e.t0.response.data : e.t0;
6413
+ e.prev = 29, e.t0 = e.catch(23), u = null !== e.t0 && void 0 !== e.t0 && null !== (h = e.t0.response) && void 0 !== h && h.data ? e.t0.response.data : e.t0;
6402
6414
  case 32:
6403
6415
  !0 === f.ResOK(u) ? (a[t].dsEMR[n].apiResult = !0, a[t].countRavienEMRSuccess = parseInt(a[t].countRavienEMRSuccess || 0) + 1) : (a[t].dsEMR[n].apiResult = {
6404
6416
  data: O,
@@ -6556,7 +6568,7 @@
6556
6568
  e.next = 62;
6557
6569
  break
6558
6570
  }
6559
- return b = a.dsOnEMR[s], z = b.PatientCode, l = b.AdmissionCode, A = b.MedicalRecordNo, m = "", m += " SELECT COALESCE(nt.ravien,0) AS ravien ", m += " FROM current.bnnoitru AS nt ", m += " WHERE COALESCE(xoa,0) = 0 ", m += " AND COALESCE(namvien,0) = 1 ", m += " AND mabn = '".concat(z, "' "), m += " AND makb = '".concat(l, "' "), m += " AND maba = '".concat(A, "' "), e.next = 41, R.query(m).then((function(e) {
6571
+ return b = a.dsOnEMR[s], z = b.PatientCode, l = b.AdmissionCode, A = b.MedicalRecordNo, h = "", h += " SELECT COALESCE(nt.ravien,0) AS ravien ", h += " FROM current.bnnoitru AS nt ", h += " WHERE COALESCE(xoa,0) = 0 ", h += " AND COALESCE(namvien,0) = 1 ", h += " AND mabn = '".concat(z, "' "), h += " AND makb = '".concat(l, "' "), h += " AND maba = '".concat(A, "' "), e.next = 41, R.query(h).then((function(e) {
6560
6572
  var n, t;
6561
6573
  return null !== (n = null === (t = e.rows[0]) || void 0 === t ? void 0 : t.ravien) && void 0 !== n ? n : ""
6562
6574
  }));
@@ -6583,7 +6595,7 @@
6583
6595
  !0 === f.ResOK(y) ? a.success++ : (a.fail++, a.dsFails.push({
6584
6596
  data: g,
6585
6597
  apiResult: y
6586
- })), h.logInfoObject({
6598
+ })), m.logInfoObject({
6587
6599
  mabn: z,
6588
6600
  makb: l,
6589
6601
  maba: A,
@@ -6606,7 +6618,7 @@
6606
6618
  return e.rows
6607
6619
  }));
6608
6620
  case 10:
6609
- if (pgData = e.sent, h.logInfoObject({
6621
+ if (pgData = e.sent, m.logInfoObject({
6610
6622
  countRow: pgData.length,
6611
6623
  ngaydk: a.NGAYDK,
6612
6624
  sql: n
@@ -6620,7 +6632,7 @@
6620
6632
  e.next = 36;
6621
6633
  break
6622
6634
  }
6623
- return o = pgData[t], r = o.mabn, i = o.makb, p = "".concat(r, "-").concat(i), h.logInfo("➡️ SyncData: psdangkySyncDCHG [".concat(t + 1, "/").concat(pgData.length, "]:").concat(p)), e.next = 21, R.query("SELECT ".concat(pgFunctionName, "('").concat(r, "','").concat(i, "');")).then((function(e) {
6635
+ return o = pgData[t], r = o.mabn, i = o.makb, p = "".concat(r, "-").concat(i), m.logInfo("➡️ SyncData: psdangkySyncDCHG [".concat(t + 1, "/").concat(pgData.length, "]:").concat(p)), e.next = 21, R.query("SELECT ".concat(pgFunctionName, "('").concat(r, "','").concat(i, "');")).then((function(e) {
6624
6636
  var n = e.rows[0];
6625
6637
  return JSON.parse(n[Object.keys(n)[0]])
6626
6638
  }));
@@ -6659,7 +6671,7 @@
6659
6671
  return e.prev = 75, O.writeFileSync(u.join(i, "checkHosoEMR.json"), JSON.stringify({
6660
6672
  status: a,
6661
6673
  error: W.stringifyForceEmpty(r)
6662
- }, null, 2)), h.logInfoObject(a, "🔚 checkHosoEMR 🔚"), e.finish(75);
6674
+ }, null, 2)), m.logInfoObject(a, "🔚 checkHosoEMR 🔚"), e.finish(75);
6663
6675
  case 79:
6664
6676
  case "end":
6665
6677
  return e.stop()
@@ -6683,7 +6695,7 @@
6683
6695
  if ("current.psdangky" === n) return !0;
6684
6696
  if ("current.chidinhcls" === n) return !0
6685
6697
  } catch (e) {
6686
- h.logError(e, "directHandled")
6698
+ m.logError(e, "directHandled")
6687
6699
  }
6688
6700
  return !1
6689
6701
  }() ? S(e) : v.add(e, S)
@@ -7362,16 +7374,16 @@
7362
7374
  A = function(e) {
7363
7375
  return e.replace(/[|\\{()[^$+*?.-]/g, "\\$&")
7364
7376
  },
7365
- m = function(e, n) {
7377
+ h = function(e, n) {
7366
7378
  for (void 0 === n && (n = 2), e = String(e); e.length < n;) e = "0" + e;
7367
7379
  return e
7368
7380
  },
7369
- h = {
7381
+ m = {
7370
7382
  D: function(e) {
7371
7383
  return String(e.getDate())
7372
7384
  },
7373
7385
  DD: function(e) {
7374
- return m(e.getDate())
7386
+ return h(e.getDate())
7375
7387
  },
7376
7388
  Do: function(e, n) {
7377
7389
  return n.DoFn(e.getDate())
@@ -7380,7 +7392,7 @@
7380
7392
  return String(e.getDay())
7381
7393
  },
7382
7394
  dd: function(e) {
7383
- return m(e.getDay())
7395
+ return h(e.getDay())
7384
7396
  },
7385
7397
  ddd: function(e, n) {
7386
7398
  return n.dayNamesShort[e.getDay()]
@@ -7392,7 +7404,7 @@
7392
7404
  return String(e.getMonth() + 1)
7393
7405
  },
7394
7406
  MM: function(e) {
7395
- return m(e.getMonth() + 1)
7407
+ return h(e.getMonth() + 1)
7396
7408
  },
7397
7409
  MMM: function(e, n) {
7398
7410
  return n.monthNamesShort[e.getMonth()]
@@ -7401,43 +7413,43 @@
7401
7413
  return n.monthNames[e.getMonth()]
7402
7414
  },
7403
7415
  YY: function(e) {
7404
- return m(String(e.getFullYear()), 4).substr(2)
7416
+ return h(String(e.getFullYear()), 4).substr(2)
7405
7417
  },
7406
7418
  YYYY: function(e) {
7407
- return m(e.getFullYear(), 4)
7419
+ return h(e.getFullYear(), 4)
7408
7420
  },
7409
7421
  h: function(e) {
7410
7422
  return String(e.getHours() % 12 || 12)
7411
7423
  },
7412
7424
  hh: function(e) {
7413
- return m(e.getHours() % 12 || 12)
7425
+ return h(e.getHours() % 12 || 12)
7414
7426
  },
7415
7427
  H: function(e) {
7416
7428
  return String(e.getHours())
7417
7429
  },
7418
7430
  HH: function(e) {
7419
- return m(e.getHours())
7431
+ return h(e.getHours())
7420
7432
  },
7421
7433
  m: function(e) {
7422
7434
  return String(e.getMinutes())
7423
7435
  },
7424
7436
  mm: function(e) {
7425
- return m(e.getMinutes())
7437
+ return h(e.getMinutes())
7426
7438
  },
7427
7439
  s: function(e) {
7428
7440
  return String(e.getSeconds())
7429
7441
  },
7430
7442
  ss: function(e) {
7431
- return m(e.getSeconds())
7443
+ return h(e.getSeconds())
7432
7444
  },
7433
7445
  S: function(e) {
7434
7446
  return String(Math.round(e.getMilliseconds() / 100))
7435
7447
  },
7436
7448
  SS: function(e) {
7437
- return m(Math.round(e.getMilliseconds() / 10), 2)
7449
+ return h(Math.round(e.getMilliseconds() / 10), 2)
7438
7450
  },
7439
7451
  SSS: function(e) {
7440
- return m(e.getMilliseconds(), 3)
7452
+ return h(e.getMilliseconds(), 3)
7441
7453
  },
7442
7454
  a: function(e, n) {
7443
7455
  return e.getHours() < 12 ? n.amPm[0] : n.amPm[1]
@@ -7447,11 +7459,11 @@
7447
7459
  },
7448
7460
  ZZ: function(e) {
7449
7461
  var n = e.getTimezoneOffset();
7450
- return (n > 0 ? "-" : "+") + m(100 * Math.floor(Math.abs(n) / 60) + Math.abs(n) % 60, 4)
7462
+ return (n > 0 ? "-" : "+") + h(100 * Math.floor(Math.abs(n) / 60) + Math.abs(n) % 60, 4)
7451
7463
  },
7452
7464
  Z: function(e) {
7453
7465
  var n = e.getTimezoneOffset();
7454
- return (n > 0 ? "-" : "+") + m(Math.floor(Math.abs(n) / 60), 2) + ":" + m(Math.abs(n) % 60, 2)
7466
+ return (n > 0 ? "-" : "+") + h(Math.floor(Math.abs(n) / 60), 2) + ":" + h(Math.abs(n) % 60, 2)
7455
7467
  }
7456
7468
  },
7457
7469
  f = function(e) {
@@ -7534,7 +7546,7 @@
7534
7546
  }));
7535
7547
  var r = b(b({}, u), t);
7536
7548
  return (n = n.replace(o, (function(n) {
7537
- return h[n](e, r)
7549
+ return m[n](e, r)
7538
7550
  }))).replace(/@@@/g, (function() {
7539
7551
  return a.shift()
7540
7552
  }))
@@ -7576,12 +7588,12 @@
7576
7588
  var z = e.match(new RegExp(c, "i"));
7577
7589
  if (!z) return null;
7578
7590
  for (var d, O = b(b({}, u), t), l = 1; l < z.length; l++) {
7579
- var m = r[l - 1],
7580
- h = m[0],
7581
- f = m[2],
7591
+ var h = r[l - 1],
7592
+ m = h[0],
7593
+ f = h[2],
7582
7594
  q = f ? f(z[l], O) : +z[l];
7583
7595
  if (null == q) return null;
7584
- a[h] = q
7596
+ a[m] = q
7585
7597
  }
7586
7598
  if (1 === a.isPm && null != a.hour && 12 != +a.hour ? a.hour = +a.hour + 12 : 0 === a.isPm && 12 == +a.hour && (a.hour = 0), null == a.timezoneOffset) {
7587
7599
  d = new Date(a.year, a.month, a.day, a.hour, a.minute, a.second, a.millisecond);
@@ -7764,12 +7776,12 @@
7764
7776
  l = 0,
7765
7777
  A = 0;
7766
7778
  e.size && (u = c.parseFileSize(e.size));
7767
- var m = e.date_format || b;
7768
- n && "daily" == n.type && (e.date_format || (m = "YYYY-MM-DD"), r().format(m) == r().endOf("day").format(m) && r().format(m) != r().add(1, "day").format(m) || (M.verbose && console.log(new Date, "[FileStreamRotator] Changing type to custom as date format changes more often than once a day or not every day"), n.type = "custom")), n && (i = e.frequency ? M.getDate(n, m, e.utc) : ""), e.create_symlink = e.create_symlink || !1, e.extension = e.extension || "";
7769
- var h = e.filename,
7779
+ var h = e.date_format || b;
7780
+ n && "daily" == n.type && (e.date_format || (h = "YYYY-MM-DD"), r().format(h) == r().endOf("day").format(h) && r().format(h) != r().add(1, "day").format(h) || (M.verbose && console.log(new Date, "[FileStreamRotator] Changing type to custom as date format changes more often than once a day or not every day"), n.type = "custom")), n && (i = e.frequency ? M.getDate(n, h, e.utc) : ""), e.create_symlink = e.create_symlink || !1, e.extension = e.extension || "";
7781
+ var m = e.filename,
7770
7782
  f = null,
7771
- q = h + (i ? "." + i : "");
7772
- if (h.match(/%DATE%/) && (q = h.replace(/%DATE%/g, i || M.getDate(null, m, e.utc))), u) {
7783
+ q = m + (i ? "." + i : "");
7784
+ if (m.match(/%DATE%/) && (q = m.replace(/%DATE%/g, i || M.getDate(null, h, e.utc))), u) {
7773
7785
  var _ = null,
7774
7786
  W = q;
7775
7787
  if (O && O.files && O.files instanceof Array && O.files.length > 0) {
@@ -7838,10 +7850,10 @@
7838
7850
  v && "function" == v.end && v.end(), v = o.createWriteStream(e, R), N.emit("new", e), d(v, N)
7839
7851
  }
7840
7852
  })), N.write = function(a, r) {
7841
- var p = n ? this.getDate(n, m, e.utc) : i;
7853
+ var p = n ? this.getDate(n, h, e.utc) : i;
7842
7854
  if (p != i || u && A > u) {
7843
- var c = h + (i && n ? "." + p : "");
7844
- h.match(/%DATE%/) && i && (c = h.replace(/%DATE%/g, p)), u && A > u ? c += "." + ++l + e.extension : (l = 0, c += e.extension), A = 0, M.verbose && console.log(new Date, t(9023).format("[FileStreamRotator] Changing logs from %s to %s", q, c)), i = p, f = q, q = c, !0 === e.end_stream ? v.end() : v.destroy(), z(q), v = o.createWriteStream(c, R), N.emit("new", c), N.emit("rotate", f, c), d(v, N)
7855
+ var c = m + (i && n ? "." + p : "");
7856
+ m.match(/%DATE%/) && i && (c = m.replace(/%DATE%/g, p)), u && A > u ? c += "." + ++l + e.extension : (l = 0, c += e.extension), A = 0, M.verbose && console.log(new Date, t(9023).format("[FileStreamRotator] Changing logs from %s to %s", q, c)), i = p, f = q, q = c, !0 === e.end_stream ? v.end() : v.destroy(), z(q), v = o.createWriteStream(c, R), N.emit("new", c), N.emit("rotate", f, c), d(v, N)
7845
7857
  }
7846
7858
  v.write(a, r), A += Buffer.byteLength(a, r)
7847
7859
  }.bind(this), process.nextTick((function() {
@@ -7922,8 +7934,8 @@
7922
7934
  }
7923
7935
  }));
7924
7936
  var A = N("ERR_INVALID_URL", "Invalid URL", TypeError),
7925
- m = N("ERR_FR_REDIRECTION_FAILURE", "Redirected request failed"),
7926
- h = N("ERR_FR_TOO_MANY_REDIRECTS", "Maximum number of redirects exceeded", m),
7937
+ h = N("ERR_FR_REDIRECTION_FAILURE", "Redirected request failed"),
7938
+ m = N("ERR_FR_TOO_MANY_REDIRECTS", "Maximum number of redirects exceeded", h),
7927
7939
  f = N("ERR_FR_MAX_BODY_LENGTH_EXCEEDED", "Request body larger than maxBodyLength limit"),
7928
7940
  q = N("ERR_STREAM_WRITE_AFTER_END", "write after end"),
7929
7941
  _ = b.prototype.destroy || L;
@@ -7935,7 +7947,7 @@
7935
7947
  try {
7936
7948
  t._processResponse(e)
7937
7949
  } catch (e) {
7938
- t.emit("error", e instanceof m ? e : new m({
7950
+ t.emit("error", e instanceof h ? e : new h({
7939
7951
  cause: e
7940
7952
  }))
7941
7953
  }
@@ -8129,7 +8141,7 @@
8129
8141
  });
8130
8142
  var t, o = e.headers.location;
8131
8143
  if (!o || !1 === this._options.followRedirects || n < 300 || n >= 400) return e.responseUrl = this._currentUrl, e.redirects = this._redirects, this.emit("response", e), void(this._requestBodyBuffers = []);
8132
- if (T(this._currentRequest), e.destroy(), ++this._redirectCount > this._options.maxRedirects) throw new h;
8144
+ if (T(this._currentRequest), e.destroy(), ++this._redirectCount > this._options.maxRedirects) throw new m;
8133
8145
  var a = this._options.beforeRedirect;
8134
8146
  a && (t = Object.assign({
8135
8147
  Host: e.req.getHeader("host")
@@ -8148,7 +8160,7 @@
8148
8160
  var t = e.length - n.length - 1;
8149
8161
  return t > 0 && "." === e[t] && e.endsWith(n)
8150
8162
  }(A.host, u)) && E(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers), x(a)) {
8151
- var m = {
8163
+ var h = {
8152
8164
  headers: e.headers,
8153
8165
  statusCode: n
8154
8166
  },
@@ -8157,7 +8169,7 @@
8157
8169
  method: r,
8158
8170
  headers: t
8159
8171
  };
8160
- a(this._options, m, f), this._sanitizeOptions(this._options)
8172
+ a(this._options, h, f), this._sanitizeOptions(this._options)
8161
8173
  }
8162
8174
  this._performRequest()
8163
8175
  }, e.exports = g({
@@ -8351,11 +8363,11 @@
8351
8363
  u = t(8002),
8352
8364
  l = t(5880),
8353
8365
  A = t(414),
8354
- m = t(3093),
8355
- h = Function,
8366
+ h = t(3093),
8367
+ m = Function,
8356
8368
  f = function(e) {
8357
8369
  try {
8358
- return h('"use strict"; return (' + e + ").constructor;")()
8370
+ return m('"use strict"; return (' + e + ").constructor;")()
8359
8371
  } catch (e) {}
8360
8372
  },
8361
8373
  q = t(5795),
@@ -8411,7 +8423,7 @@
8411
8423
  "%Float32Array%": "undefined" == typeof Float32Array ? o : Float32Array,
8412
8424
  "%Float64Array%": "undefined" == typeof Float64Array ? o : Float64Array,
8413
8425
  "%FinalizationRegistry%": "undefined" == typeof FinalizationRegistry ? o : FinalizationRegistry,
8414
- "%Function%": h,
8426
+ "%Function%": m,
8415
8427
  "%GeneratorFunction%": T,
8416
8428
  "%Int8Array%": "undefined" == typeof Int8Array ? o : Int8Array,
8417
8429
  "%Int16Array%": "undefined" == typeof Int16Array ? o : Int16Array,
@@ -8462,7 +8474,7 @@
8462
8474
  "%Math.min%": u,
8463
8475
  "%Math.pow%": l,
8464
8476
  "%Math.round%": A,
8465
- "%Math.sign%": m,
8477
+ "%Math.sign%": h,
8466
8478
  "%Reflect.getPrototypeOf%": v
8467
8479
  };
8468
8480
  if (y) try {
@@ -8543,9 +8555,9 @@
8543
8555
  B = t(9957),
8544
8556
  X = C.call(N, Array.prototype.concat),
8545
8557
  Y = C.call(E, Array.prototype.splice),
8546
- j = C.call(N, String.prototype.replace),
8547
- P = C.call(N, String.prototype.slice),
8548
- I = C.call(N, RegExp.prototype.exec),
8558
+ I = C.call(N, String.prototype.replace),
8559
+ j = C.call(N, String.prototype.slice),
8560
+ P = C.call(N, RegExp.prototype.exec),
8549
8561
  H = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,
8550
8562
  F = /\\(\\)?/g,
8551
8563
  U = function(e, n) {
@@ -8564,15 +8576,15 @@
8564
8576
  e.exports = function(e, n) {
8565
8577
  if ("string" != typeof e || 0 === e.length) throw new b("intrinsic name must be a non-empty string");
8566
8578
  if (arguments.length > 1 && "boolean" != typeof n) throw new b('"allowMissing" argument must be a boolean');
8567
- if (null === I(/^%?[^%]*%?$/, e)) throw new s("`%` may not be present anywhere but at the beginning and end of the intrinsic name");
8579
+ if (null === P(/^%?[^%]*%?$/, e)) throw new s("`%` may not be present anywhere but at the beginning and end of the intrinsic name");
8568
8580
  var t = function(e) {
8569
- var n = P(e, 0, 1),
8570
- t = P(e, -1);
8581
+ var n = j(e, 0, 1),
8582
+ t = j(e, -1);
8571
8583
  if ("%" === n && "%" !== t) throw new s("invalid intrinsic syntax, expected closing `%`");
8572
8584
  if ("%" === t && "%" !== n) throw new s("invalid intrinsic syntax, expected opening `%`");
8573
8585
  var o = [];
8574
- return j(e, H, (function(e, n, t, a) {
8575
- o[o.length] = t ? j(a, F, "$1") : n || e
8586
+ return I(e, H, (function(e, n, t, a) {
8587
+ o[o.length] = t ? I(a, F, "$1") : n || e
8576
8588
  })), o
8577
8589
  }(e),
8578
8590
  o = t.length > 0 ? t[0] : "",
@@ -8584,8 +8596,8 @@
8584
8596
  c && (o = c[0], Y(t, X([0, 1], c)));
8585
8597
  for (var M = 1, z = !0; M < t.length; M += 1) {
8586
8598
  var d = t[M],
8587
- O = P(d, 0, 1),
8588
- u = P(d, -1);
8599
+ O = j(d, 0, 1),
8600
+ u = j(d, -1);
8589
8601
  if (('"' === O || "'" === O || "`" === O || '"' === u || "'" === u || "`" === u) && O !== u) throw new s("property names with quotes must have matching quotes");
8590
8602
  if ("constructor" !== d && z || (p = !0), B(x, r = "%" + (o += "." + d) + "%")) i = x[r];
8591
8603
  else if (null != i) {
@@ -9270,11 +9282,11 @@
9270
9282
  "GMT" === (t = t && t[0] ? (t = t[0].match(/[A-Z]/g)) ? t.join("") : void 0 : (t = n.match(/[A-Z]{3,5}/g)) ? t[0] : void 0) && (t = void 0), this.at = +e, this.abbr = t, this.offset = e.getTimezoneOffset()
9271
9283
  }
9272
9284
 
9273
- function m(e) {
9285
+ function h(e) {
9274
9286
  this.zone = e, this.offsetScore = 0, this.abbrScore = 0
9275
9287
  }
9276
9288
 
9277
- function h(e, n) {
9289
+ function m(e, n) {
9278
9290
  for (var t, o; o = 6e4 * ((n.at - e.at) / 12e4 | 0);)(t = new A(new Date(e.at + o))).offset === e.offset ? e = t : n = t;
9279
9291
  return e
9280
9292
  }
@@ -9315,7 +9327,7 @@
9315
9327
  r = new A(new Date(a, 0, 1)),
9316
9328
  i = r.offset,
9317
9329
  p = [r];
9318
- for (o = 1; o < 48; o++)(t = new Date(a, o, 1).getTimezoneOffset()) !== i && (e = h(r, n = new A(new Date(a, o, 1))), p.push(e), p.push(new A(new Date(e.at + 6e4))), r = n, i = t);
9330
+ for (o = 1; o < 48; o++)(t = new Date(a, o, 1).getTimezoneOffset()) !== i && (e = m(r, n = new A(new Date(a, o, 1))), p.push(e), p.push(new A(new Date(e.at + 6e4))), r = n, i = t);
9319
9331
  for (o = 0; o < 4; o++) p.push(new A(new Date(a + o, 0, 1))), p.push(new A(new Date(a + o, 6, 1)));
9320
9332
  return p
9321
9333
  }(),
@@ -9323,7 +9335,7 @@
9323
9335
  c = _(i),
9324
9336
  s = [];
9325
9337
  for (o = 0; o < c.length; o++) {
9326
- for (t = new m(y(c[o]), p), a = 0; a < p; a++) t.scoreOffsetAt(i[a]);
9338
+ for (t = new h(y(c[o]), p), a = 0; a < p; a++) t.scoreOffsetAt(i[a]);
9327
9339
  s.push(t)
9328
9340
  }
9329
9341
  return s.sort(f), s.length > 0 ? s[0].zone.name : void 0
@@ -9402,7 +9414,7 @@
9402
9414
  utcOffset: function(e) {
9403
9415
  return this.offsets[this._index(e)]
9404
9416
  }
9405
- }, m.prototype.scoreOffsetAt = function(e) {
9417
+ }, h.prototype.scoreOffsetAt = function(e) {
9406
9418
  this.offsetScore += Math.abs(this.zone.utcOffset(e.at) - e.offset), this.zone.abbr(e.at).replace(/[^A-Z]/g, "") !== e.abbr && this.abbrScore++
9407
9419
  }, N.version = "0.5.45", N.dataVersion = "", N._zones = t, N._links = o, N._names = r, N._countries = a, N.add = L, N.link = R, N.load = function(e) {
9408
9420
  L(e.zones), R(e.links),
@@ -19862,7 +19874,7 @@
19862
19874
  return null == e._pf && (e._pf = l()), e._pf
19863
19875
  }
19864
19876
 
19865
- function m(e) {
19877
+ function h(e) {
19866
19878
  var n = null,
19867
19879
  t = !1,
19868
19880
  a = e._d && !isNaN(e._d.getTime());
@@ -19871,7 +19883,7 @@
19871
19883
  })), a = n.overflow < 0 && !n.empty && !n.invalidEra && !n.invalidMonth && !n.invalidWeekday && !n.weekdayMismatch && !n.nullInput && !n.invalidFormat && !n.userInvalidated && (!n.meridiem || n.meridiem && t), e._strict && (a = a && 0 === n.charsLeftOver && 0 === n.unusedTokens.length && void 0 === n.bigHour)), null != Object.isFrozen && Object.isFrozen(e) ? a : (e._isValid = a, e._isValid)
19872
19884
  }
19873
19885
 
19874
- function h(e) {
19886
+ function m(e) {
19875
19887
  var n = u(NaN);
19876
19888
  return null != e ? O(A(n), e) : A(n).userInvalidated = !0, n
19877
19889
  }
@@ -19977,7 +19989,7 @@
19977
19989
  X = {},
19978
19990
  Y = {};
19979
19991
 
19980
- function j(e, n, t, o) {
19992
+ function I(e, n, t, o) {
19981
19993
  var a = o;
19982
19994
  "string" == typeof o && (a = function() {
19983
19995
  return this[o]()
@@ -19988,13 +20000,13 @@
19988
20000
  })
19989
20001
  }
19990
20002
 
19991
- function P(e) {
20003
+ function j(e) {
19992
20004
  return e.match(/\[[\s\S]/) ? e.replace(/^\[|\]$/g, "") : e.replace(/\\/g, "")
19993
20005
  }
19994
20006
 
19995
- function I(e) {
20007
+ function P(e) {
19996
20008
  var n, t, o = e.match(C);
19997
- for (n = 0, t = o.length; n < t; n++) Y[o[n]] ? o[n] = Y[o[n]] : o[n] = P(o[n]);
20009
+ for (n = 0, t = o.length; n < t; n++) Y[o[n]] ? o[n] = Y[o[n]] : o[n] = j(o[n]);
19998
20010
  return function(n) {
19999
20011
  var a, r = "";
20000
20012
  for (a = 0; a < t; a++) r += N(o[a]) ? o[a].call(n, e) : o[a];
@@ -20003,7 +20015,7 @@
20003
20015
  }
20004
20016
 
20005
20017
  function H(e, n) {
20006
- return e.isValid() ? (n = F(n, e.localeData()), X[n] = X[n] || I(n), X[n](e)) : e.localeData().invalidDate()
20018
+ return e.isValid() ? (n = F(n, e.localeData()), X[n] = X[n] || P(n), X[n](e)) : e.localeData().invalidDate()
20007
20019
  }
20008
20020
 
20009
20021
  function F(e, n) {
@@ -20169,8 +20181,8 @@
20169
20181
  ue = /\d\d\d\d\d\d?/,
20170
20182
  le = /\d{1,3}/,
20171
20183
  Ae = /\d{1,4}/,
20172
- me = /[+-]?\d{1,6}/,
20173
- he = /\d+/,
20184
+ he = /[+-]?\d{1,6}/,
20185
+ me = /\d+/,
20174
20186
  fe = /[+-]?\d+/,
20175
20187
  qe = /Z|[+-]\d\d:?\d\d/gi,
20176
20188
  _e = /Z|[+-]\d\d(?::?\d\d)?/gi,
@@ -20234,9 +20246,9 @@
20234
20246
  var Be = 0,
20235
20247
  Xe = 1,
20236
20248
  Ye = 2,
20237
- je = 3,
20238
- Pe = 4,
20239
- Ie = 5,
20249
+ Ie = 3,
20250
+ je = 4,
20251
+ Pe = 5,
20240
20252
  He = 6,
20241
20253
  Fe = 7,
20242
20254
  Ue = 8;
@@ -20244,12 +20256,12 @@
20244
20256
  function Ge(e) {
20245
20257
  return Ce(e) ? 366 : 365
20246
20258
  }
20247
- j("Y", 0, 0, (function() {
20259
+ I("Y", 0, 0, (function() {
20248
20260
  var e = this.year();
20249
20261
  return e <= 9999 ? D(e, 4) : "+" + e
20250
- })), j(0, ["YY", 2], 0, (function() {
20262
+ })), I(0, ["YY", 2], 0, (function() {
20251
20263
  return this.year() % 100
20252
- })), j(0, ["YYYY", 4], 0, "year"), j(0, ["YYYYY", 5], 0, "year"), j(0, ["YYYYYY", 6, !0], 0, "year"), Re("Y", fe), Re("YY", de, se), Re("YYYY", Ae, Me), Re("YYYYY", me, ze), Re("YYYYYY", me, ze), ke(["YYYYY", "YYYYYY"], Be), ke("YYYY", (function(e, n) {
20264
+ })), I(0, ["YYYY", 4], 0, "year"), I(0, ["YYYYY", 5], 0, "year"), I(0, ["YYYYYY", 6, !0], 0, "year"), Re("Y", fe), Re("YY", de, se), Re("YYYY", Ae, Me), Re("YYYYY", he, ze), Re("YYYYYY", he, ze), ke(["YYYYY", "YYYYYY"], Be), ke("YYYY", (function(e, n) {
20253
20265
  n[Be] = 2 === e.length ? a.parseTwoDigitYear(e) : Se(e)
20254
20266
  })), ke("YY", (function(e, n) {
20255
20267
  n[Be] = a.parseTwoDigitYear(e)
@@ -20346,11 +20358,11 @@
20346
20358
  for (n = 0; n < this.length; ++n)
20347
20359
  if (this[n] === e) return n;
20348
20360
  return -1
20349
- }, j("M", ["MM", 2], "Mo", (function() {
20361
+ }, I("M", ["MM", 2], "Mo", (function() {
20350
20362
  return this.month() + 1
20351
- })), j("MMM", 0, 0, (function(e) {
20363
+ })), I("MMM", 0, 0, (function(e) {
20352
20364
  return this.localeData().monthsShort(this, e)
20353
- })), j("MMMM", 0, 0, (function(e) {
20365
+ })), I("MMMM", 0, 0, (function(e) {
20354
20366
  return this.localeData().months(this, e)
20355
20367
  })), Re("M", de, Le), Re("MM", de, se), Re("MMM", (function(e, n) {
20356
20368
  return n.monthsShortRegex(e)
@@ -20412,14 +20424,14 @@
20412
20424
  }
20413
20425
 
20414
20426
  function An(e) {
20415
- return this._monthsParseExact ? (c(this, "_monthsRegex") || hn.call(this), e ? this._monthsShortStrictRegex : this._monthsShortRegex) : (c(this, "_monthsShortRegex") || (this._monthsShortRegex = cn), this._monthsShortStrictRegex && e ? this._monthsShortStrictRegex : this._monthsShortRegex)
20427
+ return this._monthsParseExact ? (c(this, "_monthsRegex") || mn.call(this), e ? this._monthsShortStrictRegex : this._monthsShortRegex) : (c(this, "_monthsShortRegex") || (this._monthsShortRegex = cn), this._monthsShortStrictRegex && e ? this._monthsShortStrictRegex : this._monthsShortRegex)
20416
20428
  }
20417
20429
 
20418
- function mn(e) {
20419
- return this._monthsParseExact ? (c(this, "_monthsRegex") || hn.call(this), e ? this._monthsStrictRegex : this._monthsRegex) : (c(this, "_monthsRegex") || (this._monthsRegex = sn), this._monthsStrictRegex && e ? this._monthsStrictRegex : this._monthsRegex)
20430
+ function hn(e) {
20431
+ return this._monthsParseExact ? (c(this, "_monthsRegex") || mn.call(this), e ? this._monthsStrictRegex : this._monthsRegex) : (c(this, "_monthsRegex") || (this._monthsRegex = sn), this._monthsStrictRegex && e ? this._monthsStrictRegex : this._monthsRegex)
20420
20432
  }
20421
20433
 
20422
- function hn() {
20434
+ function mn() {
20423
20435
  function e(e, n) {
20424
20436
  return n.length - e.length
20425
20437
  }
@@ -20471,7 +20483,7 @@
20471
20483
  function yn(e) {
20472
20484
  return gn(e, this._week.dow, this._week.doy).week
20473
20485
  }
20474
- j("w", ["ww", 2], "wo", "week"), j("W", ["WW", 2], "Wo", "isoWeek"), Re("w", de, Le), Re("ww", de, se), Re("W", de, Le), Re("WW", de, se), we(["w", "ww", "W", "WW"], (function(e, n, t, o) {
20486
+ I("w", ["ww", 2], "wo", "week"), I("W", ["WW", 2], "Wo", "isoWeek"), Re("w", de, Le), Re("ww", de, se), Re("W", de, Le), Re("WW", de, se), we(["w", "ww", "W", "WW"], (function(e, n, t, o) {
20475
20487
  n[o.substr(0, 1)] = Se(e)
20476
20488
  }));
20477
20489
  var Rn = {
@@ -20508,13 +20520,13 @@
20508
20520
  function kn(e, n) {
20509
20521
  return e.slice(n, 7).concat(e.slice(0, n))
20510
20522
  }
20511
- j("d", 0, "do", "day"), j("dd", 0, 0, (function(e) {
20523
+ I("d", 0, "do", "day"), I("dd", 0, 0, (function(e) {
20512
20524
  return this.localeData().weekdaysMin(this, e)
20513
- })), j("ddd", 0, 0, (function(e) {
20525
+ })), I("ddd", 0, 0, (function(e) {
20514
20526
  return this.localeData().weekdaysShort(this, e)
20515
- })), j("dddd", 0, 0, (function(e) {
20527
+ })), I("dddd", 0, 0, (function(e) {
20516
20528
  return this.localeData().weekdays(this, e)
20517
- })), j("e", 0, 0, "weekday"), j("E", 0, 0, "isoWeekday"), Re("d", de), Re("e", de), Re("E", de), Re("dd", (function(e, n) {
20529
+ })), I("e", 0, 0, "weekday"), I("E", 0, 0, "isoWeekday"), Re("d", de), Re("e", de), Re("E", de), Re("dd", (function(e, n) {
20518
20530
  return n.weekdaysMinRegex(e)
20519
20531
  })), Re("ddd", (function(e, n) {
20520
20532
  return n.weekdaysShortRegex(e)
@@ -20533,16 +20545,16 @@
20533
20545
  Xn = ge,
20534
20546
  Yn = ge;
20535
20547
 
20536
- function jn(e, n) {
20548
+ function In(e, n) {
20537
20549
  var t = i(this._weekdays) ? this._weekdays : this._weekdays[e && !0 !== e && this._weekdays.isFormat.test(n) ? "format" : "standalone"];
20538
20550
  return !0 === e ? kn(t, this._week.dow) : e ? t[e.day()] : t
20539
20551
  }
20540
20552
 
20541
- function Pn(e) {
20553
+ function jn(e) {
20542
20554
  return !0 === e ? kn(this._weekdaysShort, this._week.dow) : e ? this._weekdaysShort[e.day()] : this._weekdaysShort
20543
20555
  }
20544
20556
 
20545
- function In(e) {
20557
+ function Pn(e) {
20546
20558
  return !0 === e ? kn(this._weekdaysMin, this._week.dow) : e ? this._weekdaysMin[e.day()] : this._weekdaysMin
20547
20559
  }
20548
20560
 
@@ -20618,7 +20630,7 @@
20618
20630
  }
20619
20631
 
20620
20632
  function nt(e, n) {
20621
- j(e, 0, 0, (function() {
20633
+ I(e, 0, 0, (function() {
20622
20634
  return this.localeData().meridiem(this.hours(), this.minutes(), n)
20623
20635
  }))
20624
20636
  }
@@ -20630,35 +20642,35 @@
20630
20642
  function ot(e) {
20631
20643
  return "p" === (e + "").toLowerCase().charAt(0)
20632
20644
  }
20633
- j("H", ["HH", 2], 0, "hour"), j("h", ["hh", 2], 0, Zn), j("k", ["kk", 2], 0, et), j("hmm", 0, 0, (function() {
20645
+ I("H", ["HH", 2], 0, "hour"), I("h", ["hh", 2], 0, Zn), I("k", ["kk", 2], 0, et), I("hmm", 0, 0, (function() {
20634
20646
  return "" + Zn.apply(this) + D(this.minutes(), 2)
20635
- })), j("hmmss", 0, 0, (function() {
20647
+ })), I("hmmss", 0, 0, (function() {
20636
20648
  return "" + Zn.apply(this) + D(this.minutes(), 2) + D(this.seconds(), 2)
20637
- })), j("Hmm", 0, 0, (function() {
20649
+ })), I("Hmm", 0, 0, (function() {
20638
20650
  return "" + this.hours() + D(this.minutes(), 2)
20639
- })), j("Hmmss", 0, 0, (function() {
20651
+ })), I("Hmmss", 0, 0, (function() {
20640
20652
  return "" + this.hours() + D(this.minutes(), 2) + D(this.seconds(), 2)
20641
- })), nt("a", !0), nt("A", !1), Re("a", tt), Re("A", tt), Re("H", de, ye), Re("h", de, Le), Re("k", de, Le), Re("HH", de, se), Re("hh", de, se), Re("kk", de, se), Re("hmm", Oe), Re("hmmss", ue), Re("Hmm", Oe), Re("Hmmss", ue), ke(["H", "HH"], je), ke(["k", "kk"], (function(e, n, t) {
20653
+ })), nt("a", !0), nt("A", !1), Re("a", tt), Re("A", tt), Re("H", de, ye), Re("h", de, Le), Re("k", de, Le), Re("HH", de, se), Re("hh", de, se), Re("kk", de, se), Re("hmm", Oe), Re("hmmss", ue), Re("Hmm", Oe), Re("Hmmss", ue), ke(["H", "HH"], Ie), ke(["k", "kk"], (function(e, n, t) {
20642
20654
  var o = Se(e);
20643
- n[je] = 24 === o ? 0 : o
20655
+ n[Ie] = 24 === o ? 0 : o
20644
20656
  })), ke(["a", "A"], (function(e, n, t) {
20645
20657
  t._isPm = t._locale.isPM(e), t._meridiem = e
20646
20658
  })), ke(["h", "hh"], (function(e, n, t) {
20647
- n[je] = Se(e), A(t).bigHour = !0
20659
+ n[Ie] = Se(e), A(t).bigHour = !0
20648
20660
  })), ke("hmm", (function(e, n, t) {
20649
20661
  var o = e.length - 2;
20650
- n[je] = Se(e.substr(0, o)), n[Pe] = Se(e.substr(o)), A(t).bigHour = !0
20662
+ n[Ie] = Se(e.substr(0, o)), n[je] = Se(e.substr(o)), A(t).bigHour = !0
20651
20663
  })), ke("hmmss", (function(e, n, t) {
20652
20664
  var o = e.length - 4,
20653
20665
  a = e.length - 2;
20654
- n[je] = Se(e.substr(0, o)), n[Pe] = Se(e.substr(o, 2)), n[Ie] = Se(e.substr(a)), A(t).bigHour = !0
20666
+ n[Ie] = Se(e.substr(0, o)), n[je] = Se(e.substr(o, 2)), n[Pe] = Se(e.substr(a)), A(t).bigHour = !0
20655
20667
  })), ke("Hmm", (function(e, n, t) {
20656
20668
  var o = e.length - 2;
20657
- n[je] = Se(e.substr(0, o)), n[Pe] = Se(e.substr(o))
20669
+ n[Ie] = Se(e.substr(0, o)), n[je] = Se(e.substr(o))
20658
20670
  })), ke("Hmmss", (function(e, n, t) {
20659
20671
  var o = e.length - 4,
20660
20672
  a = e.length - 2;
20661
- n[je] = Se(e.substr(0, o)), n[Pe] = Se(e.substr(o, 2)), n[Ie] = Se(e.substr(a))
20673
+ n[Ie] = Se(e.substr(0, o)), n[je] = Se(e.substr(o, 2)), n[Pe] = Se(e.substr(a))
20662
20674
  }));
20663
20675
  var at = /[ap]\.?m?\.?/i,
20664
20676
  rt = $e("Hours", !0);
@@ -20723,7 +20735,7 @@
20723
20735
 
20724
20736
  function lt(e, n) {
20725
20737
  var t;
20726
- return e && ((t = b(n) ? ht(e) : At(e, n)) ? pt = t : "undefined" != typeof console && console.warn && console.warn("Locale " + e + " not found. Did you forget to load it?")), pt._abbr
20738
+ return e && ((t = b(n) ? mt(e) : At(e, n)) ? pt = t : "undefined" != typeof console && console.warn && console.warn("Locale " + e + " not found. Did you forget to load it?")), pt._abbr
20727
20739
  }
20728
20740
 
20729
20741
  function At(e, n) {
@@ -20745,7 +20757,7 @@
20745
20757
  return delete st[e], null
20746
20758
  }
20747
20759
 
20748
- function mt(e, n) {
20760
+ function ht(e, n) {
20749
20761
  if (null != n) {
20750
20762
  var t, o, a = ct;
20751
20763
  null != st[e] && null != st[e].parentLocale ? st[e].set(S(st[e]._config, n)) : (null != (o = ut(e)) && (a = o._config), n = S(a, n), null == o && (n.abbr = e), (t = new x(n)).parentLocale = st[e], st[e] = t), lt(e)
@@ -20753,7 +20765,7 @@
20753
20765
  return st[e]
20754
20766
  }
20755
20767
 
20756
- function ht(e) {
20768
+ function mt(e) {
20757
20769
  var n;
20758
20770
  if (e && e._locale && e._locale._abbr && (e = e._locale._abbr), !e) return pt;
20759
20771
  if (!i(e)) {
@@ -20769,7 +20781,7 @@
20769
20781
 
20770
20782
  function qt(e) {
20771
20783
  var n, t = e._a;
20772
- return t && -2 === A(e).overflow && (n = t[Xe] < 0 || t[Xe] > 11 ? Xe : t[Ye] < 1 || t[Ye] > on(t[Be], t[Xe]) ? Ye : t[je] < 0 || t[je] > 24 || 24 === t[je] && (0 !== t[Pe] || 0 !== t[Ie] || 0 !== t[He]) ? je : t[Pe] < 0 || t[Pe] > 59 ? Pe : t[Ie] < 0 || t[Ie] > 59 ? Ie : t[He] < 0 || t[He] > 999 ? He : -1, A(e)._overflowDayOfYear && (n < Be || n > Ye) && (n = Ye), A(e)._overflowWeeks && -1 === n && (n = Fe), A(e)._overflowWeekday && -1 === n && (n = Ue), A(e).overflow = n), e
20784
+ return t && -2 === A(e).overflow && (n = t[Xe] < 0 || t[Xe] > 11 ? Xe : t[Ye] < 1 || t[Ye] > on(t[Be], t[Xe]) ? Ye : t[Ie] < 0 || t[Ie] > 24 || 24 === t[Ie] && (0 !== t[je] || 0 !== t[Pe] || 0 !== t[He]) ? Ie : t[je] < 0 || t[je] > 59 ? je : t[Pe] < 0 || t[Pe] > 59 ? Pe : t[He] < 0 || t[He] > 999 ? He : -1, A(e)._overflowDayOfYear && (n < Be || n > Ye) && (n = Ye), A(e)._overflowWeeks && -1 === n && (n = Fe), A(e)._overflowWeekday && -1 === n && (n = Ue), A(e).overflow = n), e
20773
20785
  }
20774
20786
  var _t = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
20775
20787
  Wt = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
@@ -20838,7 +20850,7 @@
20838
20850
  if (!gt.exec(c[4])) return void(e._isValid = !1);
20839
20851
  i = "Z"
20840
20852
  }
20841
- e._f = a + (r || "") + (i || ""), Pt(e)
20853
+ e._f = a + (r || "") + (i || ""), jt(e)
20842
20854
  } else e._isValid = !1
20843
20855
  }
20844
20856
 
@@ -20893,18 +20905,18 @@
20893
20905
  function Yt(e) {
20894
20906
  var n, t, o, a, r, i = [];
20895
20907
  if (!e._d) {
20896
- for (o = Xt(e), e._w && null == e._a[Ye] && null == e._a[Xe] && jt(e), null != e._dayOfYear && (r = Bt(e._a[Be], o[Be]), (e._dayOfYear > Ge(r) || 0 === e._dayOfYear) && (A(e)._overflowDayOfYear = !0), t = qn(r, 0, e._dayOfYear), e._a[Xe] = t.getUTCMonth(), e._a[Ye] = t.getUTCDate()), n = 0; n < 3 && null == e._a[n]; ++n) e._a[n] = i[n] = o[n];
20908
+ for (o = Xt(e), e._w && null == e._a[Ye] && null == e._a[Xe] && It(e), null != e._dayOfYear && (r = Bt(e._a[Be], o[Be]), (e._dayOfYear > Ge(r) || 0 === e._dayOfYear) && (A(e)._overflowDayOfYear = !0), t = qn(r, 0, e._dayOfYear), e._a[Xe] = t.getUTCMonth(), e._a[Ye] = t.getUTCDate()), n = 0; n < 3 && null == e._a[n]; ++n) e._a[n] = i[n] = o[n];
20897
20909
  for (; n < 7; n++) e._a[n] = i[n] = null == e._a[n] ? 2 === n ? 1 : 0 : e._a[n];
20898
- 24 === e._a[je] && 0 === e._a[Pe] && 0 === e._a[Ie] && 0 === e._a[He] && (e._nextDay = !0, e._a[je] = 0), e._d = (e._useUTC ? qn : fn).apply(null, i), a = e._useUTC ? e._d.getUTCDay() : e._d.getDay(), null != e._tzm && e._d.setUTCMinutes(e._d.getUTCMinutes() - e._tzm), e._nextDay && (e._a[je] = 24), e._w && void 0 !== e._w.d && e._w.d !== a && (A(e).weekdayMismatch = !0)
20910
+ 24 === e._a[Ie] && 0 === e._a[je] && 0 === e._a[Pe] && 0 === e._a[He] && (e._nextDay = !0, e._a[Ie] = 0), e._d = (e._useUTC ? qn : fn).apply(null, i), a = e._useUTC ? e._d.getUTCDay() : e._d.getDay(), null != e._tzm && e._d.setUTCMinutes(e._d.getUTCMinutes() - e._tzm), e._nextDay && (e._a[Ie] = 24), e._w && void 0 !== e._w.d && e._w.d !== a && (A(e).weekdayMismatch = !0)
20899
20911
  }
20900
20912
  }
20901
20913
 
20902
- function jt(e) {
20914
+ function It(e) {
20903
20915
  var n, t, o, a, r, i, p, c, s;
20904
20916
  null != (n = e._w).GG || null != n.W || null != n.E ? (r = 1, i = 4, t = Bt(n.GG, e._a[Be], gn(Kt(), 1, 4).year), o = Bt(n.W, 1), ((a = Bt(n.E, 1)) < 1 || a > 7) && (c = !0)) : (r = e._locale._week.dow, i = e._locale._week.doy, s = gn(Kt(), r, i), t = Bt(n.gg, e._a[Be], s.year), o = Bt(n.w, s.week), null != n.d ? ((a = n.d) < 0 || a > 6) && (c = !0) : null != n.e ? (a = n.e + r, (n.e < 0 || n.e > 6) && (c = !0)) : a = r), o < 1 || o > Ln(t, r, i) ? A(e)._overflowWeeks = !0 : null != c ? A(e)._overflowWeekday = !0 : (p = Wn(t, o, a, r, i), e._a[Be] = p.year, e._dayOfYear = p.dayOfYear)
20905
20917
  }
20906
20918
 
20907
- function Pt(e) {
20919
+ function jt(e) {
20908
20920
  if (e._f !== a.ISO_8601)
20909
20921
  if (e._f !== a.RFC_2822) {
20910
20922
  e._a = [], A(e).empty = !0;
@@ -20912,12 +20924,12 @@
20912
20924
  b = s.length,
20913
20925
  M = 0;
20914
20926
  for (c = (o = F(e._f, e._locale).match(C) || []).length, n = 0; n < c; n++) r = o[n], (t = (s.match(ve(r, e)) || [])[0]) && ((i = s.substr(0, s.indexOf(t))).length > 0 && A(e).unusedInput.push(i), s = s.slice(s.indexOf(t) + t.length), M += t.length), Y[r] ? (t ? A(e).empty = !1 : A(e).unusedTokens.push(r), De(r, t, e)) : e._strict && !t && A(e).unusedTokens.push(r);
20915
- A(e).charsLeftOver = b - M, s.length > 0 && A(e).unusedInput.push(s), e._a[je] <= 12 && !0 === A(e).bigHour && e._a[je] > 0 && (A(e).bigHour = void 0), A(e).parsedDateParts = e._a.slice(0), A(e).meridiem = e._meridiem, e._a[je] = It(e._locale, e._a[je], e._meridiem), null !== (p = A(e).era) && (e._a[Be] = e._locale.erasConvertYear(p, e._a[Be])), Yt(e), qt(e)
20927
+ A(e).charsLeftOver = b - M, s.length > 0 && A(e).unusedInput.push(s), e._a[Ie] <= 12 && !0 === A(e).bigHour && e._a[Ie] > 0 && (A(e).bigHour = void 0), A(e).parsedDateParts = e._a.slice(0), A(e).meridiem = e._meridiem, e._a[Ie] = Pt(e._locale, e._a[Ie], e._meridiem), null !== (p = A(e).era) && (e._a[Be] = e._locale.erasConvertYear(p, e._a[Be])), Yt(e), qt(e)
20916
20928
  } else Dt(e);
20917
20929
  else Nt(e)
20918
20930
  }
20919
20931
 
20920
- function It(e, n, t) {
20932
+ function Pt(e, n, t) {
20921
20933
  var o;
20922
20934
  return null == t ? n : null != e.meridiemHour ? e.meridiemHour(n, t) : null != e.isPM ? ((o = e.isPM(t)) && n < 12 && (n += 12), o || 12 !== n || (n = 0), n) : n
20923
20935
  }
@@ -20926,7 +20938,7 @@
20926
20938
  var n, t, o, a, r, i, p = !1,
20927
20939
  c = e._f.length;
20928
20940
  if (0 === c) return A(e).invalidFormat = !0, void(e._d = new Date(NaN));
20929
- for (a = 0; a < c; a++) r = 0, i = !1, n = _({}, e), null != e._useUTC && (n._useUTC = e._useUTC), n._f = e._f[a], Pt(n), m(n) && (i = !0), r += A(n).charsLeftOver, r += 10 * A(n).unusedTokens.length, A(n).score = r, p ? r < o && (o = r, t = n) : (null == o || r < o || i) && (o = r, t = n, i && (p = !0));
20941
+ for (a = 0; a < c; a++) r = 0, i = !1, n = _({}, e), null != e._useUTC && (n._useUTC = e._useUTC), n._f = e._f[a], jt(n), h(n) && (i = !0), r += A(n).charsLeftOver, r += 10 * A(n).unusedTokens.length, A(n).score = r, p ? r < o && (o = r, t = n) : (null == o || r < o || i) && (o = r, t = n, i && (p = !0));
20930
20942
  O(e, t || n)
20931
20943
  }
20932
20944
 
@@ -20948,9 +20960,9 @@
20948
20960
  function Gt(e) {
20949
20961
  var n = e._i,
20950
20962
  t = e._f;
20951
- return e._locale = e._locale || ht(e._l), null === n || void 0 === t && "" === n ? h({
20963
+ return e._locale = e._locale || mt(e._l), null === n || void 0 === t && "" === n ? m({
20952
20964
  nullInput: !0
20953
- }) : ("string" == typeof n && (e._i = n = e._locale.preparse(n)), g(n) ? new W(qt(n)) : (z(n) ? e._d = n : i(t) ? Ht(e) : t ? Pt(e) : Vt(e), m(e) || (e._d = null), e))
20965
+ }) : ("string" == typeof n && (e._i = n = e._locale.preparse(n)), g(n) ? new W(qt(n)) : (z(n) ? e._d = n : i(t) ? Ht(e) : t ? jt(e) : Vt(e), h(e) || (e._d = null), e))
20954
20966
  }
20955
20967
 
20956
20968
  function Vt(e) {
@@ -20973,11 +20985,11 @@
20973
20985
  })), a.ISO_8601 = function() {}, a.RFC_2822 = function() {};
20974
20986
  var $t = y("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/", (function() {
20975
20987
  var e = Kt.apply(null, arguments);
20976
- return this.isValid() && e.isValid() ? e < this ? this : e : h()
20988
+ return this.isValid() && e.isValid() ? e < this ? this : e : m()
20977
20989
  })),
20978
20990
  Qt = y("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/", (function() {
20979
20991
  var e = Kt.apply(null, arguments);
20980
- return this.isValid() && e.isValid() ? e > this ? this : e : h()
20992
+ return this.isValid() && e.isValid() ? e > this ? this : e : m()
20981
20993
  }));
20982
20994
 
20983
20995
  function Zt(e, n) {
@@ -21030,7 +21042,7 @@
21030
21042
  c = n.minute || 0,
21031
21043
  s = n.second || 0,
21032
21044
  b = n.millisecond || 0;
21033
- this._isValid = ao(n), this._milliseconds = +b + 1e3 * s + 6e4 * c + 1e3 * p * 60 * 60, this._days = +i + 7 * r, this._months = +a + 3 * o + 12 * t, this._data = {}, this._locale = ht(), this._bubble()
21045
+ this._isValid = ao(n), this._milliseconds = +b + 1e3 * s + 6e4 * c + 1e3 * p * 60 * 60, this._days = +i + 7 * r, this._months = +a + 3 * o + 12 * t, this._data = {}, this._locale = mt(), this._bubble()
21034
21046
  }
21035
21047
 
21036
21048
  function co(e) {
@@ -21050,7 +21062,7 @@
21050
21062
  }
21051
21063
 
21052
21064
  function Mo(e, n) {
21053
- j(e, 0, 0, (function() {
21065
+ I(e, 0, 0, (function() {
21054
21066
  var e = this.utcOffset(),
21055
21067
  t = "+";
21056
21068
  return e < 0 && (e = -e, t = "-"), t + D(~~(e / 60), 2) + n + D(~~e % 60, 2)
@@ -21087,11 +21099,11 @@
21087
21099
  return this._isUTC ? r : lo(this)
21088
21100
  }
21089
21101
 
21090
- function mo(e, n) {
21102
+ function ho(e, n) {
21091
21103
  return null != e ? ("string" != typeof e && (e = -e), this.utcOffset(e, n), this) : -this.utcOffset()
21092
21104
  }
21093
21105
 
21094
- function ho(e) {
21106
+ function mo(e) {
21095
21107
  return this.utcOffset(0, e)
21096
21108
  }
21097
21109
 
@@ -21147,9 +21159,9 @@
21147
21159
  } : M(e) || !isNaN(+e) ? (r = {}, n ? r[n] = +e : r.milliseconds = +e) : (i = vo.exec(e)) ? (t = "-" === i[1] ? -1 : 1, r = {
21148
21160
  y: 0,
21149
21161
  d: Se(i[Ye]) * t,
21150
- h: Se(i[je]) * t,
21151
- m: Se(i[Pe]) * t,
21152
- s: Se(i[Ie]) * t,
21162
+ h: Se(i[Ie]) * t,
21163
+ m: Se(i[je]) * t,
21164
+ s: Se(i[Pe]) * t,
21153
21165
  ms: Se(so(1e3 * i[He])) * t
21154
21166
  }) : (i = Eo.exec(e)) ? (t = "-" === i[1] ? -1 : 1, r = {
21155
21167
  y: To(i[2], t),
@@ -21202,7 +21214,7 @@
21202
21214
  }
21203
21215
 
21204
21216
  function Xo(e) {
21205
- return g(e) || z(e) || Bo(e) || M(e) || jo(e) || Yo(e) || null == e
21217
+ return g(e) || z(e) || Bo(e) || M(e) || Io(e) || Yo(e) || null == e
21206
21218
  }
21207
21219
 
21208
21220
  function Yo(e) {
@@ -21214,7 +21226,7 @@
21214
21226
  return o && a
21215
21227
  }
21216
21228
 
21217
- function jo(e) {
21229
+ function Io(e) {
21218
21230
  var n = i(e),
21219
21231
  t = !1;
21220
21232
  return n && (t = 0 === e.filter((function(n) {
@@ -21222,7 +21234,7 @@
21222
21234
  })).length), n && t
21223
21235
  }
21224
21236
 
21225
- function Po(e) {
21237
+ function jo(e) {
21226
21238
  var n, t, o = p(e) && !s(e),
21227
21239
  a = !1,
21228
21240
  r = ["sameDay", "nextDay", "lastDay", "nextWeek", "lastWeek", "sameElse"];
@@ -21230,13 +21242,13 @@
21230
21242
  return o && a
21231
21243
  }
21232
21244
 
21233
- function Io(e, n) {
21245
+ function Po(e, n) {
21234
21246
  var t = e.diff(n, "days", !0);
21235
21247
  return t < -6 ? "sameElse" : t < -1 ? "lastWeek" : t < 0 ? "lastDay" : t < 1 ? "sameDay" : t < 2 ? "nextDay" : t < 7 ? "nextWeek" : "sameElse"
21236
21248
  }
21237
21249
 
21238
21250
  function Ho(e, n) {
21239
- 1 === arguments.length && (arguments[0] ? Xo(arguments[0]) ? (e = arguments[0], n = void 0) : Po(arguments[0]) && (n = arguments[0], e = void 0) : (e = void 0, n = void 0));
21251
+ 1 === arguments.length && (arguments[0] ? Xo(arguments[0]) ? (e = arguments[0], n = void 0) : jo(arguments[0]) && (n = arguments[0], e = void 0) : (e = void 0, n = void 0));
21240
21252
  var t = e || Kt(),
21241
21253
  o = uo(t, this).startOf("day"),
21242
21254
  r = a.calendarFormat(this, o) || "sameElse",
@@ -21367,7 +21379,7 @@
21367
21379
 
21368
21380
  function ca(e) {
21369
21381
  var n;
21370
- return void 0 === e ? this._locale._abbr : (null != (n = ht(e)) && (this._locale = n), this)
21382
+ return void 0 === e ? this._locale._abbr : (null != (n = mt(e)) && (this._locale = n), this)
21371
21383
  }
21372
21384
  a.defaultFormat = "YYYY-MM-DDTHH:mm:ssZ", a.defaultFormatUtc = "YYYY-MM-DDTHH:mm:ss[Z]";
21373
21385
  var sa = y("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.", (function(e) {
@@ -21394,7 +21406,7 @@
21394
21406
  return e < 100 && e >= 0 ? Date.UTC(e + 400, n, t) - Oa : Date.UTC(e, n, t)
21395
21407
  }
21396
21408
 
21397
- function ma(e) {
21409
+ function ha(e) {
21398
21410
  var n, t;
21399
21411
  if (void 0 === (e = oe(e)) || "millisecond" === e || !this.isValid()) return this;
21400
21412
  switch (t = this._isUTC ? Aa : la, e) {
@@ -21429,7 +21441,7 @@
21429
21441
  return this._d.setTime(n), a.updateOffset(this, !0), this
21430
21442
  }
21431
21443
 
21432
- function ha(e) {
21444
+ function ma(e) {
21433
21445
  var n, t;
21434
21446
  if (void 0 === (e = oe(e)) || "millisecond" === e || !this.isValid()) return this;
21435
21447
  switch (t = this._isUTC ? Aa : la, e) {
@@ -21499,7 +21511,7 @@
21499
21511
  }
21500
21512
 
21501
21513
  function ya() {
21502
- return m(this)
21514
+ return h(this)
21503
21515
  }
21504
21516
 
21505
21517
  function Ra() {
@@ -21521,7 +21533,7 @@
21521
21533
  }
21522
21534
 
21523
21535
  function Na(e, n) {
21524
- var t, o, r, i = this._eras || ht("en")._eras;
21536
+ var t, o, r, i = this._eras || mt("en")._eras;
21525
21537
  for (t = 0, o = i.length; t < o; ++t) switch ("string" == typeof i[t].since && (r = a(i[t].since).startOf("day"), i[t].since = r.valueOf()), typeof i[t].until) {
21526
21538
  case "undefined":
21527
21539
  i[t].until = 1 / 0;
@@ -21604,16 +21616,16 @@
21604
21616
  return n.erasAbbrRegex(e)
21605
21617
  }
21606
21618
 
21607
- function ja(e, n) {
21619
+ function Ia(e, n) {
21608
21620
  return n.erasNameRegex(e)
21609
21621
  }
21610
21622
 
21611
- function Pa(e, n) {
21623
+ function ja(e, n) {
21612
21624
  return n.erasNarrowRegex(e)
21613
21625
  }
21614
21626
 
21615
- function Ia(e, n) {
21616
- return n._eraYearOrdinalRegex || he
21627
+ function Pa(e, n) {
21628
+ return n._eraYearOrdinalRegex || me
21617
21629
  }
21618
21630
 
21619
21631
  function Ha() {
@@ -21627,7 +21639,7 @@
21627
21639
  }
21628
21640
 
21629
21641
  function Fa(e, n) {
21630
- j(0, [e, e.length], 0, n)
21642
+ I(0, [e, e.length], 0, n)
21631
21643
  }
21632
21644
 
21633
21645
  function Ua(e) {
@@ -21670,23 +21682,23 @@
21670
21682
  function er(e) {
21671
21683
  return null == e ? Math.ceil((this.month() + 1) / 3) : this.month(3 * (e - 1) + this.month() % 3)
21672
21684
  }
21673
- j("N", 0, 0, "eraAbbr"), j("NN", 0, 0, "eraAbbr"), j("NNN", 0, 0, "eraAbbr"), j("NNNN", 0, 0, "eraName"), j("NNNNN", 0, 0, "eraNarrow"), j("y", ["y", 1], "yo", "eraYear"), j("y", ["yy", 2], 0, "eraYear"), j("y", ["yyy", 3], 0, "eraYear"), j("y", ["yyyy", 4], 0, "eraYear"), Re("N", Ya), Re("NN", Ya), Re("NNN", Ya), Re("NNNN", ja), Re("NNNNN", Pa), ke(["N", "NN", "NNN", "NNNN", "NNNNN"], (function(e, n, t, o) {
21685
+ I("N", 0, 0, "eraAbbr"), I("NN", 0, 0, "eraAbbr"), I("NNN", 0, 0, "eraAbbr"), I("NNNN", 0, 0, "eraName"), I("NNNNN", 0, 0, "eraNarrow"), I("y", ["y", 1], "yo", "eraYear"), I("y", ["yy", 2], 0, "eraYear"), I("y", ["yyy", 3], 0, "eraYear"), I("y", ["yyyy", 4], 0, "eraYear"), Re("N", Ya), Re("NN", Ya), Re("NNN", Ya), Re("NNNN", Ia), Re("NNNNN", ja), ke(["N", "NN", "NNN", "NNNN", "NNNNN"], (function(e, n, t, o) {
21674
21686
  var a = t._locale.erasParse(e, o, t._strict);
21675
21687
  a ? A(t).era = a : A(t).invalidEra = e
21676
- })), Re("y", he), Re("yy", he), Re("yyy", he), Re("yyyy", he), Re("yo", Ia), ke(["y", "yy", "yyy", "yyyy"], Be), ke(["yo"], (function(e, n, t, o) {
21688
+ })), Re("y", me), Re("yy", me), Re("yyy", me), Re("yyyy", me), Re("yo", Pa), ke(["y", "yy", "yyy", "yyyy"], Be), ke(["yo"], (function(e, n, t, o) {
21677
21689
  var a;
21678
21690
  t._locale._eraYearOrdinalRegex && (a = e.match(t._locale._eraYearOrdinalRegex)), t._locale.eraYearOrdinalParse ? n[Be] = t._locale.eraYearOrdinalParse(e, a) : n[Be] = parseInt(e, 10)
21679
- })), j(0, ["gg", 2], 0, (function() {
21691
+ })), I(0, ["gg", 2], 0, (function() {
21680
21692
  return this.weekYear() % 100
21681
- })), j(0, ["GG", 2], 0, (function() {
21693
+ })), I(0, ["GG", 2], 0, (function() {
21682
21694
  return this.isoWeekYear() % 100
21683
- })), Fa("gggg", "weekYear"), Fa("ggggg", "weekYear"), Fa("GGGG", "isoWeekYear"), Fa("GGGGG", "isoWeekYear"), Re("G", fe), Re("g", fe), Re("GG", de, se), Re("gg", de, se), Re("GGGG", Ae, Me), Re("gggg", Ae, Me), Re("GGGGG", me, ze), Re("ggggg", me, ze), we(["gggg", "ggggg", "GGGG", "GGGGG"], (function(e, n, t, o) {
21695
+ })), Fa("gggg", "weekYear"), Fa("ggggg", "weekYear"), Fa("GGGG", "isoWeekYear"), Fa("GGGGG", "isoWeekYear"), Re("G", fe), Re("g", fe), Re("GG", de, se), Re("gg", de, se), Re("GGGG", Ae, Me), Re("gggg", Ae, Me), Re("GGGGG", he, ze), Re("ggggg", he, ze), we(["gggg", "ggggg", "GGGG", "GGGGG"], (function(e, n, t, o) {
21684
21696
  n[o.substr(0, 2)] = Se(e)
21685
21697
  })), we(["gg", "GG"], (function(e, n, t, o) {
21686
21698
  n[o] = a.parseTwoDigitYear(e)
21687
- })), j("Q", 0, "Qo", "quarter"), Re("Q", ce), ke("Q", (function(e, n) {
21699
+ })), I("Q", 0, "Qo", "quarter"), Re("Q", ce), ke("Q", (function(e, n) {
21688
21700
  n[Xe] = 3 * (Se(e) - 1)
21689
- })), j("D", ["DD", 2], "Do", "date"), Re("D", de, Le), Re("DD", de, se), Re("Do", (function(e, n) {
21701
+ })), I("D", ["DD", 2], "Do", "date"), Re("D", de, Le), Re("DD", de, se), Re("Do", (function(e, n) {
21690
21702
  return e ? n._dayOfMonthOrdinalParse || n._ordinalParse : n._dayOfMonthOrdinalParseLenient
21691
21703
  })), ke(["D", "DD"], Ye), ke("Do", (function(e, n) {
21692
21704
  n[Ye] = Se(e.match(de)[0])
@@ -21697,29 +21709,29 @@
21697
21709
  var n = Math.round((this.clone().startOf("day") - this.clone().startOf("year")) / 864e5) + 1;
21698
21710
  return null == e ? n : this.add(e - n, "d")
21699
21711
  }
21700
- j("DDD", ["DDDD", 3], "DDDo", "dayOfYear"), Re("DDD", le), Re("DDDD", be), ke(["DDD", "DDDD"], (function(e, n, t) {
21712
+ I("DDD", ["DDDD", 3], "DDDo", "dayOfYear"), Re("DDD", le), Re("DDDD", be), ke(["DDD", "DDDD"], (function(e, n, t) {
21701
21713
  t._dayOfYear = Se(e)
21702
- })), j("m", ["mm", 2], 0, "minute"), Re("m", de, ye), Re("mm", de, se), ke(["m", "mm"], Pe);
21714
+ })), I("m", ["mm", 2], 0, "minute"), Re("m", de, ye), Re("mm", de, se), ke(["m", "mm"], je);
21703
21715
  var or = $e("Minutes", !1);
21704
- j("s", ["ss", 2], 0, "second"), Re("s", de, ye), Re("ss", de, se), ke(["s", "ss"], Ie);
21716
+ I("s", ["ss", 2], 0, "second"), Re("s", de, ye), Re("ss", de, se), ke(["s", "ss"], Pe);
21705
21717
  var ar, rr, ir = $e("Seconds", !1);
21706
- for (j("S", 0, 0, (function() {
21718
+ for (I("S", 0, 0, (function() {
21707
21719
  return ~~(this.millisecond() / 100)
21708
- })), j(0, ["SS", 2], 0, (function() {
21720
+ })), I(0, ["SS", 2], 0, (function() {
21709
21721
  return ~~(this.millisecond() / 10)
21710
- })), j(0, ["SSS", 3], 0, "millisecond"), j(0, ["SSSS", 4], 0, (function() {
21722
+ })), I(0, ["SSS", 3], 0, "millisecond"), I(0, ["SSSS", 4], 0, (function() {
21711
21723
  return 10 * this.millisecond()
21712
- })), j(0, ["SSSSS", 5], 0, (function() {
21724
+ })), I(0, ["SSSSS", 5], 0, (function() {
21713
21725
  return 100 * this.millisecond()
21714
- })), j(0, ["SSSSSS", 6], 0, (function() {
21726
+ })), I(0, ["SSSSSS", 6], 0, (function() {
21715
21727
  return 1e3 * this.millisecond()
21716
- })), j(0, ["SSSSSSS", 7], 0, (function() {
21728
+ })), I(0, ["SSSSSSS", 7], 0, (function() {
21717
21729
  return 1e4 * this.millisecond()
21718
- })), j(0, ["SSSSSSSS", 8], 0, (function() {
21730
+ })), I(0, ["SSSSSSSS", 8], 0, (function() {
21719
21731
  return 1e5 * this.millisecond()
21720
- })), j(0, ["SSSSSSSSS", 9], 0, (function() {
21732
+ })), I(0, ["SSSSSSSSS", 9], 0, (function() {
21721
21733
  return 1e6 * this.millisecond()
21722
- })), Re("S", le, ce), Re("SS", le, se), Re("SSS", le, be), ar = "SSSS"; ar.length <= 9; ar += "S") Re(ar, he);
21734
+ })), Re("S", le, ce), Re("SS", le, se), Re("SSS", le, be), ar = "SSSS"; ar.length <= 9; ar += "S") Re(ar, me);
21723
21735
 
21724
21736
  function pr(e, n) {
21725
21737
  n[He] = Se(1e3 * ("0." + e))
@@ -21733,7 +21745,7 @@
21733
21745
  function sr() {
21734
21746
  return this._isUTC ? "Coordinated Universal Time" : ""
21735
21747
  }
21736
- rr = $e("Milliseconds", !1), j("z", 0, 0, "zoneAbbr"), j("zz", 0, 0, "zoneName");
21748
+ rr = $e("Milliseconds", !1), I("z", 0, 0, "zoneAbbr"), I("zz", 0, 0, "zoneName");
21737
21749
  var br = W.prototype;
21738
21750
 
21739
21751
  function Mr(e) {
@@ -21747,13 +21759,13 @@
21747
21759
  function dr(e) {
21748
21760
  return e
21749
21761
  }
21750
- br.add = Do, br.calendar = Ho, br.clone = Fo, br.diff = Qo, br.endOf = ha, br.format = oa, br.from = aa, br.fromNow = ra, br.to = ia, br.toNow = pa, br.get = en, br.invalidAt = va, br.isAfter = Uo, br.isBefore = Go, br.isBetween = Vo, br.isSame = Jo, br.isSameOrAfter = Ko, br.isSameOrBefore = $o, br.isValid = ya, br.lang = sa, br.locale = ca, br.localeData = ba, br.max = Qt, br.min = $t, br.parsingFlags = Ra, br.set = nn, br.startOf = ma, br.subtract = Co, br.toArray = Wa, br.toObject = ga, br.toDate = _a, br.toISOString = na, br.inspect = ta, "undefined" != typeof Symbol && null != Symbol.for && (br[Symbol.for("nodejs.util.inspect.custom")] = function() {
21762
+ br.add = Do, br.calendar = Ho, br.clone = Fo, br.diff = Qo, br.endOf = ma, br.format = oa, br.from = aa, br.fromNow = ra, br.to = ia, br.toNow = pa, br.get = en, br.invalidAt = va, br.isAfter = Uo, br.isBefore = Go, br.isBetween = Vo, br.isSame = Jo, br.isSameOrAfter = Ko, br.isSameOrBefore = $o, br.isValid = ya, br.lang = sa, br.locale = ca, br.localeData = ba, br.max = Qt, br.min = $t, br.parsingFlags = Ra, br.set = nn, br.startOf = ha, br.subtract = Co, br.toArray = Wa, br.toObject = ga, br.toDate = _a, br.toISOString = na, br.inspect = ta, "undefined" != typeof Symbol && null != Symbol.for && (br[Symbol.for("nodejs.util.inspect.custom")] = function() {
21751
21763
  return "Moment<" + this.format() + ">"
21752
- }), br.toJSON = La, br.toString = ea, br.unix = qa, br.valueOf = fa, br.creationData = Ea, br.eraName = xa, br.eraNarrow = ka, br.eraAbbr = wa, br.eraYear = Da, br.year = Je, br.isLeapYear = Ke, br.weekYear = Ua, br.isoWeekYear = Ga, br.quarter = br.quarters = er, br.month = un, br.daysInMonth = ln, br.week = br.weeks = Nn, br.isoWeek = br.isoWeeks = Tn, br.weeksInYear = Ka, br.weeksInWeekYear = $a, br.isoWeeksInYear = Va, br.isoWeeksInISOWeekYear = Ja, br.date = nr, br.day = br.days = Un, br.weekday = Gn, br.isoWeekday = Vn, br.dayOfYear = tr, br.hour = br.hours = rt, br.minute = br.minutes = or, br.second = br.seconds = ir, br.millisecond = br.milliseconds = rr, br.utcOffset = Ao, br.utc = ho, br.local = fo, br.parseZone = qo, br.hasAlignedHourOffset = _o, br.isDST = Wo, br.isLocal = Lo, br.isUtcOffset = yo, br.isUtc = Ro, br.isUTC = Ro, br.zoneAbbr = cr, br.zoneName = sr, br.dates = y("dates accessor is deprecated. Use date instead.", nr), br.months = y("months accessor is deprecated. Use month instead", un), br.years = y("years accessor is deprecated. Use year instead", Je), br.zone = y("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/", mo), br.isDSTShifted = y("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information", go);
21764
+ }), br.toJSON = La, br.toString = ea, br.unix = qa, br.valueOf = fa, br.creationData = Ea, br.eraName = xa, br.eraNarrow = ka, br.eraAbbr = wa, br.eraYear = Da, br.year = Je, br.isLeapYear = Ke, br.weekYear = Ua, br.isoWeekYear = Ga, br.quarter = br.quarters = er, br.month = un, br.daysInMonth = ln, br.week = br.weeks = Nn, br.isoWeek = br.isoWeeks = Tn, br.weeksInYear = Ka, br.weeksInWeekYear = $a, br.isoWeeksInYear = Va, br.isoWeeksInISOWeekYear = Ja, br.date = nr, br.day = br.days = Un, br.weekday = Gn, br.isoWeekday = Vn, br.dayOfYear = tr, br.hour = br.hours = rt, br.minute = br.minutes = or, br.second = br.seconds = ir, br.millisecond = br.milliseconds = rr, br.utcOffset = Ao, br.utc = mo, br.local = fo, br.parseZone = qo, br.hasAlignedHourOffset = _o, br.isDST = Wo, br.isLocal = Lo, br.isUtcOffset = yo, br.isUtc = Ro, br.isUTC = Ro, br.zoneAbbr = cr, br.zoneName = sr, br.dates = y("dates accessor is deprecated. Use date instead.", nr), br.months = y("months accessor is deprecated. Use month instead", un), br.years = y("years accessor is deprecated. Use year instead", Je), br.zone = y("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/", ho), br.isDSTShifted = y("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information", go);
21753
21765
  var Or = x.prototype;
21754
21766
 
21755
21767
  function ur(e, n, t, o) {
21756
- var a = ht(),
21768
+ var a = mt(),
21757
21769
  r = u().set(o, n);
21758
21770
  return a[t](r, e)
21759
21771
  }
@@ -21767,7 +21779,7 @@
21767
21779
 
21768
21780
  function Ar(e, n, t, o) {
21769
21781
  "boolean" == typeof e ? (M(n) && (t = n, n = void 0), n = n || "") : (t = n = e, e = !1, M(n) && (t = n, n = void 0), n = n || "");
21770
- var a, r = ht(),
21782
+ var a, r = mt(),
21771
21783
  i = e ? r._week.dow : 0,
21772
21784
  p = [];
21773
21785
  if (null != t) return ur(n, (t + i) % 7, o, "day");
@@ -21775,11 +21787,11 @@
21775
21787
  return p
21776
21788
  }
21777
21789
 
21778
- function mr(e, n) {
21790
+ function hr(e, n) {
21779
21791
  return lr(e, n, "months")
21780
21792
  }
21781
21793
 
21782
- function hr(e, n) {
21794
+ function mr(e, n) {
21783
21795
  return lr(e, n, "monthsShort")
21784
21796
  }
21785
21797
 
@@ -21794,7 +21806,7 @@
21794
21806
  function _r(e, n, t) {
21795
21807
  return Ar(e, n, t, "weekdaysMin")
21796
21808
  }
21797
- Or.calendar = w, Or.longDateFormat = G, Or.invalidDate = J, Or.ordinal = Q, Or.preparse = dr, Or.postformat = dr, Or.relativeTime = ee, Or.pastFuture = ne, Or.set = T, Or.eras = Na, Or.erasParse = Ta, Or.erasConvertYear = Sa, Or.erasAbbrRegex = Ba, Or.erasNameRegex = Ca, Or.erasNarrowRegex = Xa, Or.months = bn, Or.monthsShort = Mn, Or.monthsParse = dn, Or.monthsRegex = mn, Or.monthsShortRegex = An, Or.week = yn, Or.firstDayOfYear = En, Or.firstDayOfWeek = vn, Or.weekdays = jn, Or.weekdaysMin = In, Or.weekdaysShort = Pn, Or.weekdaysParse = Fn, Or.weekdaysRegex = Jn, Or.weekdaysShortRegex = Kn, Or.weekdaysMinRegex = $n, Or.isPM = ot, Or.meridiem = it, lt("en", {
21809
+ Or.calendar = w, Or.longDateFormat = G, Or.invalidDate = J, Or.ordinal = Q, Or.preparse = dr, Or.postformat = dr, Or.relativeTime = ee, Or.pastFuture = ne, Or.set = T, Or.eras = Na, Or.erasParse = Ta, Or.erasConvertYear = Sa, Or.erasAbbrRegex = Ba, Or.erasNameRegex = Ca, Or.erasNarrowRegex = Xa, Or.months = bn, Or.monthsShort = Mn, Or.monthsParse = dn, Or.monthsRegex = hn, Or.monthsShortRegex = An, Or.week = yn, Or.firstDayOfYear = En, Or.firstDayOfWeek = vn, Or.weekdays = In, Or.weekdaysMin = Pn, Or.weekdaysShort = jn, Or.weekdaysParse = Fn, Or.weekdaysRegex = Jn, Or.weekdaysShortRegex = Kn, Or.weekdaysMinRegex = $n, Or.isPM = ot, Or.meridiem = it, lt("en", {
21798
21810
  eras: [{
21799
21811
  since: "0001-01-01",
21800
21812
  until: 1 / 0,
@@ -21815,7 +21827,7 @@
21815
21827
  var n = e % 10;
21816
21828
  return e + (1 === Se(e % 100 / 10) ? "th" : 1 === n ? "st" : 2 === n ? "nd" : 3 === n ? "rd" : "th")
21817
21829
  }
21818
- }), a.lang = y("moment.lang is deprecated. Use moment.locale instead.", lt), a.langData = y("moment.langData is deprecated. Use moment.localeData instead.", ht);
21830
+ }), a.lang = y("moment.lang is deprecated. Use moment.locale instead.", lt), a.langData = y("moment.langData is deprecated. Use moment.localeData instead.", mt);
21819
21831
  var Wr = Math.abs;
21820
21832
 
21821
21833
  function gr() {
@@ -21896,9 +21908,9 @@
21896
21908
  Br = xr("d"),
21897
21909
  Xr = xr("w"),
21898
21910
  Yr = xr("M"),
21899
- jr = xr("Q"),
21900
- Pr = xr("y"),
21901
- Ir = kr;
21911
+ Ir = xr("Q"),
21912
+ jr = xr("y"),
21913
+ Pr = kr;
21902
21914
 
21903
21915
  function Hr() {
21904
21916
  return No(this)
@@ -21981,11 +21993,11 @@
21981
21993
  return M ? (e = Te(c / 60), n = Te(e / 60), c %= 60, e %= 60, t = Te(b / 12), b %= 12, o = c ? c.toFixed(3).replace(/\.?0+$/, "") : "", a = M < 0 ? "-" : "", r = si(this._months) !== si(M) ? "-" : "", i = si(this._days) !== si(M) ? "-" : "", p = si(this._milliseconds) !== si(M) ? "-" : "", a + "P" + (t ? r + t + "Y" : "") + (b ? r + b + "M" : "") + (s ? i + s + "D" : "") + (n || e || c ? "T" : "") + (n ? p + n + "H" : "") + (e ? p + e + "M" : "") + (c ? p + o + "S" : "")) : "P0D"
21982
21994
  }
21983
21995
  var Mi = po.prototype;
21984
- return Mi.isValid = ro, Mi.abs = gr, Mi.add = yr, Mi.subtract = Rr, Mi.as = Sr, Mi.asMilliseconds = kr, Mi.asSeconds = wr, Mi.asMinutes = Dr, Mi.asHours = Cr, Mi.asDays = Br, Mi.asWeeks = Xr, Mi.asMonths = Yr, Mi.asQuarters = jr, Mi.asYears = Pr, Mi.valueOf = Ir, Mi._bubble = Er, Mi.clone = Hr, Mi.get = Fr, Mi.milliseconds = Gr, Mi.seconds = Vr, Mi.minutes = Jr, Mi.hours = Kr, Mi.days = $r, Mi.weeks = ei, Mi.months = Qr, Mi.years = Zr, Mi.humanize = pi, Mi.toISOString = bi, Mi.toString = bi, Mi.toJSON = bi, Mi.locale = ca, Mi.localeData = ba, Mi.toIsoString = y("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)", bi), Mi.lang = sa, j("X", 0, 0, "unix"), j("x", 0, 0, "valueOf"), Re("x", fe), Re("X", We), ke("X", (function(e, n, t) {
21996
+ return Mi.isValid = ro, Mi.abs = gr, Mi.add = yr, Mi.subtract = Rr, Mi.as = Sr, Mi.asMilliseconds = kr, Mi.asSeconds = wr, Mi.asMinutes = Dr, Mi.asHours = Cr, Mi.asDays = Br, Mi.asWeeks = Xr, Mi.asMonths = Yr, Mi.asQuarters = Ir, Mi.asYears = jr, Mi.valueOf = Pr, Mi._bubble = Er, Mi.clone = Hr, Mi.get = Fr, Mi.milliseconds = Gr, Mi.seconds = Vr, Mi.minutes = Jr, Mi.hours = Kr, Mi.days = $r, Mi.weeks = ei, Mi.months = Qr, Mi.years = Zr, Mi.humanize = pi, Mi.toISOString = bi, Mi.toString = bi, Mi.toJSON = bi, Mi.locale = ca, Mi.localeData = ba, Mi.toIsoString = y("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)", bi), Mi.lang = sa, I("X", 0, 0, "unix"), I("x", 0, 0, "valueOf"), Re("x", fe), Re("X", We), ke("X", (function(e, n, t) {
21985
21997
  t._d = new Date(1e3 * parseFloat(e))
21986
21998
  })), ke("x", (function(e, n, t) {
21987
21999
  t._d = new Date(Se(e))
21988
- })), a.version = "2.30.1", r(Kt), a.fn = br, a.min = eo, a.max = no, a.now = to, a.utc = u, a.unix = Mr, a.months = mr, a.isDate = z, a.locale = lt, a.invalid = h, a.duration = No, a.isMoment = g, a.weekdays = fr, a.parseZone = zr, a.localeData = ht, a.isDuration = co, a.monthsShort = hr, a.weekdaysMin = _r, a.defineLocale = At, a.updateLocale = mt, a.locales = ft, a.weekdaysShort = qr, a.normalizeUnits = oe, a.relativeTimeRounding = ri, a.relativeTimeThreshold = ii, a.calendarFormat = Io, a.prototype = br, a.HTML5_FMT = {
22000
+ })), a.version = "2.30.1", r(Kt), a.fn = br, a.min = eo, a.max = no, a.now = to, a.utc = u, a.unix = Mr, a.months = hr, a.isDate = z, a.locale = lt, a.invalid = m, a.duration = No, a.isMoment = g, a.weekdays = fr, a.parseZone = zr, a.localeData = mt, a.isDuration = co, a.monthsShort = mr, a.weekdaysMin = _r, a.defineLocale = At, a.updateLocale = ht, a.locales = ft, a.weekdaysShort = qr, a.normalizeUnits = oe, a.relativeTimeRounding = ri, a.relativeTimeThreshold = ii, a.calendarFormat = Po, a.prototype = br, a.HTML5_FMT = {
21989
22001
  DATETIME_LOCAL: "YYYY-MM-DDTHH:mm",
21990
22002
  DATETIME_LOCAL_SECONDS: "YYYY-MM-DDTHH:mm:ss",
21991
22003
  DATETIME_LOCAL_MS: "YYYY-MM-DDTHH:mm:ss.SSS",
@@ -22086,7 +22098,7 @@
22086
22098
  parse: () => A,
22087
22099
  stringify: () => M,
22088
22100
  v1: () => l,
22089
- v3: () => h,
22101
+ v3: () => m,
22090
22102
  v4: () => f,
22091
22103
  v5: () => q,
22092
22104
  validate: () => s,
@@ -22141,7 +22153,7 @@
22141
22153
  return t[0] = (n = parseInt(e.slice(0, 8), 16)) >>> 24, t[1] = n >>> 16 & 255, t[2] = n >>> 8 & 255, t[3] = 255 & n, t[4] = (n = parseInt(e.slice(9, 13), 16)) >>> 8, t[5] = 255 & n, t[6] = (n = parseInt(e.slice(14, 18), 16)) >>> 8, t[7] = 255 & n, t[8] = (n = parseInt(e.slice(19, 23), 16)) >>> 8, t[9] = 255 & n, t[10] = (n = parseInt(e.slice(24, 36), 16)) / 1099511627776 & 255, t[11] = n / 4294967296 & 255, t[12] = n >>> 24 & 255, t[13] = n >>> 16 & 255, t[14] = n >>> 8 & 255, t[15] = 255 & n, t
22142
22154
  };
22143
22155
 
22144
- function m(e, n, t) {
22156
+ function h(e, n, t) {
22145
22157
  function o(e, o, a, r) {
22146
22158
  if ("string" == typeof e && (e = function(e) {
22147
22159
  e = unescape(encodeURIComponent(e));
@@ -22162,7 +22174,7 @@
22162
22174
  } catch (e) {}
22163
22175
  return o.DNS = "6ba7b810-9dad-11d1-80b4-00c04fd430c8", o.URL = "6ba7b811-9dad-11d1-80b4-00c04fd430c8", o
22164
22176
  }
22165
- const h = m("v3", 48, (function(e) {
22177
+ const m = h("v3", 48, (function(e) {
22166
22178
  return Array.isArray(e) ? e = Buffer.from(e) : "string" == typeof e && (e = Buffer.from(e, "utf8")), a().createHash("md5").update(e).digest()
22167
22179
  }));
22168
22180
  const f = function(e, n, t) {
@@ -22174,7 +22186,7 @@
22174
22186
  }
22175
22187
  return M(o)
22176
22188
  };
22177
- const q = m("v5", 80, (function(e) {
22189
+ const q = h("v5", 80, (function(e) {
22178
22190
  return Array.isArray(e) ? e = Buffer.from(e) : "string" == typeof e && (e = Buffer.from(e, "utf8")), a().createHash("sha1").update(e).digest()
22179
22191
  })),
22180
22192
  _ = "00000000-0000-0000-0000-000000000000";
@@ -23828,12 +23840,12 @@
23828
23840
  return null !== e && (e = r(e)), e
23829
23841
  })).parse() : null
23830
23842
  },
23831
- m = function(e) {
23843
+ h = function(e) {
23832
23844
  return e ? a.create(e, (function(e) {
23833
23845
  return null !== e && (e = i(e)), e
23834
23846
  })).parse() : null
23835
23847
  },
23836
- h = function(e) {
23848
+ m = function(e) {
23837
23849
  return e ? o.parse(e, c(p)) : null
23838
23850
  },
23839
23851
  f = function(e) {
@@ -23860,7 +23872,7 @@
23860
23872
  };
23861
23873
  e.exports = {
23862
23874
  init: function(e) {
23863
- e(20, q), e(21, f), e(23, f), e(26, f), e(700, parseFloat), e(701, parseFloat), e(16, s), e(1082, r), e(1114, r), e(1184, r), e(600, W), e(651, l), e(718, g), e(1e3, b), e(1001, h), e(1005, z), e(1007, z), e(1028, z), e(1016, d), e(1017, O), e(1021, u), e(1022, u), e(1231, u), e(1014, l), e(1015, l), e(1008, l), e(1009, l), e(1040, l), e(1041, l), e(1115, A), e(1182, A), e(1185, A), e(1186, i), e(1187, m), e(17, p), e(114, JSON.parse.bind(JSON)), e(3802, JSON.parse.bind(JSON)), e(199, _), e(3807, _), e(3907, l), e(2951, l), e(791, l), e(1183, l), e(1270, l)
23875
+ e(20, q), e(21, f), e(23, f), e(26, f), e(700, parseFloat), e(701, parseFloat), e(16, s), e(1082, r), e(1114, r), e(1184, r), e(600, W), e(651, l), e(718, g), e(1e3, b), e(1001, m), e(1005, z), e(1007, z), e(1028, z), e(1016, d), e(1017, O), e(1021, u), e(1022, u), e(1231, u), e(1014, l), e(1015, l), e(1008, l), e(1009, l), e(1040, l), e(1041, l), e(1115, A), e(1182, A), e(1185, A), e(1186, i), e(1187, h), e(17, p), e(114, JSON.parse.bind(JSON)), e(3802, JSON.parse.bind(JSON)), e(199, _), e(3807, _), e(3907, l), e(2951, l), e(791, l), e(1183, l), e(1270, l)
23864
23876
  }
23865
23877
  }
23866
23878
  },
@@ -24388,8 +24400,8 @@
24388
24400
  return Buffer.from(e.map(((t, o) => e[o] ^ n[o])))
24389
24401
  }(Buffer.from(d), Buffer.from(u)).toString("base64"),
24390
24402
  A = await o.hmacSha256(z, "Server Key"),
24391
- m = await o.hmacSha256(A, b);
24392
- e.message = "SASLResponse", e.serverSignature = Buffer.from(m).toString("base64"), e.response = s + ",p=" + l
24403
+ h = await o.hmacSha256(A, b);
24404
+ e.message = "SASLResponse", e.serverSignature = Buffer.from(h).toString("base64"), e.response = s + ",p=" + l
24393
24405
  },
24394
24406
  finalizeSession: function(e, n) {
24395
24407
  if ("SASLResponse" !== e.message) throw new Error("SASL: Last message was not SASLResponse");
@@ -25476,61 +25488,61 @@
25476
25488
  O = b(e, "maximumBreadth");
25477
25489
 
25478
25490
  function u(e, t, s, b, l, A) {
25479
- let m = t[e];
25480
- switch ("object" == typeof m && null !== m && "function" == typeof m.toJSON && (m = m.toJSON(e)), m = b.call(t, e, m), typeof m) {
25491
+ let h = t[e];
25492
+ switch ("object" == typeof h && null !== h && "function" == typeof h.toJSON && (h = h.toJSON(e)), h = b.call(t, e, h), typeof h) {
25481
25493
  case "string":
25482
- return r(m);
25494
+ return r(h);
25483
25495
  case "object": {
25484
- if (null === m) return "null";
25485
- if (-1 !== s.indexOf(m)) return o;
25496
+ if (null === h) return "null";
25497
+ if (-1 !== s.indexOf(h)) return o;
25486
25498
  let e = "",
25487
25499
  n = ",";
25488
25500
  const t = A;
25489
- if (Array.isArray(m)) {
25490
- if (0 === m.length) return "[]";
25501
+ if (Array.isArray(h)) {
25502
+ if (0 === h.length) return "[]";
25491
25503
  if (d < s.length + 1) return '"[Array]"';
25492
- s.push(m), "" !== l && (e += `\n${A+=l}`, n = `,\n${A}`);
25493
- const o = Math.min(m.length, O);
25504
+ s.push(h), "" !== l && (e += `\n${A+=l}`, n = `,\n${A}`);
25505
+ const o = Math.min(h.length, O);
25494
25506
  let a = 0;
25495
25507
  for (; a < o - 1; a++) {
25496
- const t = u(String(a), m, s, b, l, A);
25508
+ const t = u(String(a), h, s, b, l, A);
25497
25509
  e += void 0 !== t ? t : "null", e += n
25498
25510
  }
25499
- const r = u(String(a), m, s, b, l, A);
25500
- if (e += void 0 !== r ? r : "null", m.length - 1 > O) {
25501
- e += `${n}"... ${M(m.length-O-1)} not stringified"`
25511
+ const r = u(String(a), h, s, b, l, A);
25512
+ if (e += void 0 !== r ? r : "null", h.length - 1 > O) {
25513
+ e += `${n}"... ${M(h.length-O-1)} not stringified"`
25502
25514
  }
25503
25515
  return "" !== l && (e += `\n${t}`), s.pop(), `[${e}]`
25504
25516
  }
25505
- let a = Object.keys(m);
25506
- const h = a.length;
25507
- if (0 === h) return "{}";
25517
+ let a = Object.keys(h);
25518
+ const m = a.length;
25519
+ if (0 === m) return "{}";
25508
25520
  if (d < s.length + 1) return '"[Object]"';
25509
25521
  let f = "",
25510
25522
  q = "";
25511
25523
  "" !== l && (n = `,\n${A+=l}`, f = " ");
25512
- const _ = Math.min(h, O);
25513
- p && !c(m) && (a = i(a, z)), s.push(m);
25524
+ const _ = Math.min(m, O);
25525
+ p && !c(h) && (a = i(a, z)), s.push(h);
25514
25526
  for (let t = 0; t < _; t++) {
25515
25527
  const o = a[t],
25516
- i = u(o, m, s, b, l, A);
25528
+ i = u(o, h, s, b, l, A);
25517
25529
  void 0 !== i && (e += `${q}${r(o)}:${f}${i}`, q = n)
25518
25530
  }
25519
- if (h > O) {
25520
- e += `${q}"...":${f}"${M(h-O)} not stringified"`, q = n
25531
+ if (m > O) {
25532
+ e += `${q}"...":${f}"${M(m-O)} not stringified"`, q = n
25521
25533
  }
25522
25534
  return "" !== l && q.length > 1 && (e = `\n${A}${e}\n${t}`), s.pop(), `{${e}}`
25523
25535
  }
25524
25536
  case "number":
25525
- return isFinite(m) ? String(m) : n ? n(m) : "null";
25537
+ return isFinite(h) ? String(h) : n ? n(h) : "null";
25526
25538
  case "boolean":
25527
- return !0 === m ? "true" : "false";
25539
+ return !0 === h ? "true" : "false";
25528
25540
  case "undefined":
25529
25541
  return;
25530
25542
  case "bigint":
25531
- if (a) return String(m);
25543
+ if (a) return String(h);
25532
25544
  default:
25533
- return n ? n(m) : void 0
25545
+ return n ? n(h) : void 0
25534
25546
  }
25535
25547
  }
25536
25548
 
@@ -25614,21 +25626,21 @@
25614
25626
  return e += `\n${n}`, b.pop(), `[${e}]`
25615
25627
  }
25616
25628
  let a = Object.keys(t);
25617
- const m = a.length;
25618
- if (0 === m) return "{}";
25629
+ const h = a.length;
25630
+ if (0 === h) return "{}";
25619
25631
  if (d < b.length + 1) return '"[Object]"';
25620
- const h = `,\n${l+=u}`;
25632
+ const m = `,\n${l+=u}`;
25621
25633
  let f = "",
25622
25634
  q = "",
25623
- _ = Math.min(m, O);
25624
- c(t) && (f += s(t, h, O), a = a.slice(t.length), _ -= t.length, q = h), p && (a = i(a, z)), b.push(t);
25635
+ _ = Math.min(h, O);
25636
+ c(t) && (f += s(t, m, O), a = a.slice(t.length), _ -= t.length, q = m), p && (a = i(a, z)), b.push(t);
25625
25637
  for (let e = 0; e < _; e++) {
25626
25638
  const n = a[e],
25627
25639
  o = A(n, t[n], b, u, l);
25628
- void 0 !== o && (f += `${q}${r(n)}: ${o}`, q = h)
25640
+ void 0 !== o && (f += `${q}${r(n)}: ${o}`, q = m)
25629
25641
  }
25630
- if (m > O) {
25631
- f += `${q}"...": "${M(m-O)} not stringified"`, q = h
25642
+ if (h > O) {
25643
+ f += `${q}"...": "${M(h-O)} not stringified"`, q = m
25632
25644
  }
25633
25645
  return "" !== q && (f = `\n${l}${f}\n${n}`), b.pop(), `{${f}}`
25634
25646
  }
@@ -25645,14 +25657,14 @@
25645
25657
  }
25646
25658
  }
25647
25659
 
25648
- function m(e, t, b) {
25660
+ function h(e, t, b) {
25649
25661
  switch (typeof t) {
25650
25662
  case "string":
25651
25663
  return r(t);
25652
25664
  case "object": {
25653
25665
  if (null === t) return "null";
25654
25666
  if ("function" == typeof t.toJSON) {
25655
- if ("object" != typeof(t = t.toJSON(e))) return m(e, t, b);
25667
+ if ("object" != typeof(t = t.toJSON(e))) return h(e, t, b);
25656
25668
  if (null === t) return "null"
25657
25669
  }
25658
25670
  if (-1 !== b.indexOf(t)) return o;
@@ -25665,10 +25677,10 @@
25665
25677
  const e = Math.min(t.length, O);
25666
25678
  let o = 0;
25667
25679
  for (; o < e - 1; o++) {
25668
- const e = m(String(o), t[o], b);
25680
+ const e = h(String(o), t[o], b);
25669
25681
  n += void 0 !== e ? e : "null", n += ","
25670
25682
  }
25671
- const a = m(String(o), t[o], b);
25683
+ const a = h(String(o), t[o], b);
25672
25684
  if (n += void 0 !== a ? a : "null", t.length - 1 > O) {
25673
25685
  n += `,"... ${M(t.length-O-1)} not stringified"`
25674
25686
  }
@@ -25679,11 +25691,11 @@
25679
25691
  if (0 === l) return "{}";
25680
25692
  if (d < b.length + 1) return '"[Object]"';
25681
25693
  let A = "",
25682
- h = Math.min(l, O);
25683
- a && c(t) && (n += s(t, ",", O), u = u.slice(t.length), h -= t.length, A = ","), p && (u = i(u, z)), b.push(t);
25684
- for (let e = 0; e < h; e++) {
25694
+ m = Math.min(l, O);
25695
+ a && c(t) && (n += s(t, ",", O), u = u.slice(t.length), m -= t.length, A = ","), p && (u = i(u, z)), b.push(t);
25696
+ for (let e = 0; e < m; e++) {
25685
25697
  const o = u[e],
25686
- a = m(o, t[o], b);
25698
+ a = h(o, t[o], b);
25687
25699
  void 0 !== a && (n += `${A}${r(o)}:${a}`, A = ",")
25688
25700
  }
25689
25701
  if (l > O) {
@@ -25718,7 +25730,7 @@
25718
25730
  }
25719
25731
  if (0 !== o.length) return A("", e, [], o, "")
25720
25732
  }
25721
- return m("", e, [])
25733
+ return h("", e, [])
25722
25734
  }
25723
25735
  }
25724
25736
  },
@@ -26551,8 +26563,8 @@
26551
26563
  u = t(6969).getHighWaterMark,
26552
26564
  l = t(223).F,
26553
26565
  A = l.ERR_INVALID_ARG_TYPE,
26554
- m = l.ERR_STREAM_PUSH_AFTER_EOF,
26555
- h = l.ERR_METHOD_NOT_IMPLEMENTED,
26566
+ h = l.ERR_STREAM_PUSH_AFTER_EOF,
26567
+ m = l.ERR_METHOD_NOT_IMPLEMENTED,
26556
26568
  f = l.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;
26557
26569
  t(2017)(g, r);
26558
26570
  var q = O.errorOrDestroy,
@@ -26590,7 +26602,7 @@
26590
26602
  if ("string" == typeof n || s.objectMode || Object.getPrototypeOf(n) === i.prototype || (n = function(e) {
26591
26603
  return i.from(e)
26592
26604
  }(n)), o) s.endEmitted ? q(e, new f) : y(e, s, n, !0);
26593
- else if (s.ended) q(e, new m);
26605
+ else if (s.ended) q(e, new h);
26594
26606
  else {
26595
26607
  if (s.destroyed) return !1;
26596
26608
  s.reading = !1, s.decoder && !t ? (n = s.decoder.write(n), s.objectMode || 0 !== n.length ? y(e, s, n, !1) : T(e, s)) : y(e, s, n, !1)
@@ -26704,7 +26716,7 @@
26704
26716
  var o, a = n.needReadable;
26705
26717
  return c("need readable", a), (0 === n.length || n.length - e < n.highWaterMark) && c("length less than watermark", a = !0), n.ended || n.reading ? c("reading or ended", a = !1) : a && (c("do read"), n.reading = !0, n.sync = !0, 0 === n.length && (n.needReadable = !0), this._read(n.highWaterMark), n.sync = !1, n.reading || (e = v(t, n))), null === (o = e > 0 ? C(e, n) : null) ? (n.needReadable = n.length <= n.highWaterMark, e = 0) : (n.length -= e, n.awaitDrain = 0), 0 === n.length && (n.ended || (n.needReadable = !0), t !== e && n.ended && B(this)), null !== o && this.emit("data", o), o
26706
26718
  }, g.prototype._read = function(e) {
26707
- q(this, new h("_read()"))
26719
+ q(this, new m("_read()"))
26708
26720
  }, g.prototype.pipe = function(e, n) {
26709
26721
  var t = this,
26710
26722
  o = this._readableState;
@@ -26882,8 +26894,8 @@
26882
26894
  u = z.ERR_MULTIPLE_CALLBACK,
26883
26895
  l = z.ERR_STREAM_CANNOT_PIPE,
26884
26896
  A = z.ERR_STREAM_DESTROYED,
26885
- m = z.ERR_STREAM_NULL_VALUES,
26886
- h = z.ERR_STREAM_WRITE_AFTER_END,
26897
+ h = z.ERR_STREAM_NULL_VALUES,
26898
+ m = z.ERR_STREAM_WRITE_AFTER_END,
26887
26899
  f = z.ERR_UNKNOWN_ENCODING,
26888
26900
  q = b.errorOrDestroy;
26889
26901
 
@@ -26996,11 +27008,11 @@
26996
27008
  return i && !p.isBuffer(e) && (e = function(e) {
26997
27009
  return p.from(e)
26998
27010
  }(e)), "function" == typeof n && (t = n, n = null), i ? n = "buffer" : n || (n = a.defaultEncoding), "function" != typeof t && (t = _), a.ending ? function(e, n) {
26999
- var t = new h;
27011
+ var t = new m;
27000
27012
  q(e, t), process.nextTick(n, t)
27001
27013
  }(this, t) : (i || function(e, n, t, o) {
27002
27014
  var a;
27003
- return null === t ? a = new m : "string" == typeof t || n.objectMode || (a = new d("chunk", ["string", "Buffer"], t)), !a || (q(e, a), process.nextTick(o, a), !1)
27015
+ return null === t ? a = new h : "string" == typeof t || n.objectMode || (a = new d("chunk", ["string", "Buffer"], t)), !a || (q(e, a), process.nextTick(o, a), !1)
27004
27016
  }(this, a, e, t)) && (a.pendingcb++, r = function(e, n, t, o, a, r) {
27005
27017
  if (!t) {
27006
27018
  var i = function(e, n, t) {
@@ -27852,10 +27864,10 @@
27852
27864
  rewriters: u,
27853
27865
  stripColors: l,
27854
27866
  exceptionHandlers: A,
27855
- rejectionHandlers: m
27867
+ rejectionHandlers: h
27856
27868
  } = {}) {
27857
27869
  if (this.transports.length && this.clear(), this.silent = e, this.format = n || this.format || t(1049)(), this.defaultMeta = o || null, this.levels = a || this.levels || O.npm.levels, this.level = r, this.exceptions && this.exceptions.unhandle(), this.rejections && this.rejections.unhandle(), this.exceptions = new s(this), this.rejections = new b(this), this.profilers = {}, this.exitOnError = i, p && (p = Array.isArray(p) ? p : [p]).forEach((e => this.add(e))), c || M || z || d || u || l) throw new Error(["{ colors, emitErrs, formatters, padLevels, rewriters, stripColors } were removed in winston@3.0.0.", "Use a custom winston.format(function) instead.", "See: https://github.com/winstonjs/winston/tree/master/UPGRADE-3.0.md"].join("\n"));
27858
- A && this.exceptions.handle(A), m && this.rejections.handle(m)
27870
+ A && this.exceptions.handle(A), h && this.rejections.handle(h)
27859
27871
  }
27860
27872
  isLevelEnabled(e) {
27861
27873
  const n = l(this.levels, e);
@@ -28703,8 +28715,8 @@
28703
28715
  u = t(2365).getHighWaterMark,
28704
28716
  l = t(3291).F,
28705
28717
  A = l.ERR_INVALID_ARG_TYPE,
28706
- m = l.ERR_STREAM_PUSH_AFTER_EOF,
28707
- h = l.ERR_METHOD_NOT_IMPLEMENTED,
28718
+ h = l.ERR_STREAM_PUSH_AFTER_EOF,
28719
+ m = l.ERR_METHOD_NOT_IMPLEMENTED,
28708
28720
  f = l.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;
28709
28721
  t(2017)(g, r);
28710
28722
  var q = O.errorOrDestroy,
@@ -28742,7 +28754,7 @@
28742
28754
  if ("string" == typeof n || s.objectMode || Object.getPrototypeOf(n) === i.prototype || (n = function(e) {
28743
28755
  return i.from(e)
28744
28756
  }(n)), o) s.endEmitted ? q(e, new f) : y(e, s, n, !0);
28745
- else if (s.ended) q(e, new m);
28757
+ else if (s.ended) q(e, new h);
28746
28758
  else {
28747
28759
  if (s.destroyed) return !1;
28748
28760
  s.reading = !1, s.decoder && !t ? (n = s.decoder.write(n), s.objectMode || 0 !== n.length ? y(e, s, n, !1) : T(e, s)) : y(e, s, n, !1)
@@ -28856,7 +28868,7 @@
28856
28868
  var o, a = n.needReadable;
28857
28869
  return c("need readable", a), (0 === n.length || n.length - e < n.highWaterMark) && c("length less than watermark", a = !0), n.ended || n.reading ? c("reading or ended", a = !1) : a && (c("do read"), n.reading = !0, n.sync = !0, 0 === n.length && (n.needReadable = !0), this._read(n.highWaterMark), n.sync = !1, n.reading || (e = v(t, n))), null === (o = e > 0 ? C(e, n) : null) ? (n.needReadable = n.length <= n.highWaterMark, e = 0) : (n.length -= e, n.awaitDrain = 0), 0 === n.length && (n.ended || (n.needReadable = !0), t !== e && n.ended && B(this)), null !== o && this.emit("data", o), o
28858
28870
  }, g.prototype._read = function(e) {
28859
- q(this, new h("_read()"))
28871
+ q(this, new m("_read()"))
28860
28872
  }, g.prototype.pipe = function(e, n) {
28861
28873
  var t = this,
28862
28874
  o = this._readableState;
@@ -29098,8 +29110,8 @@
29098
29110
  u = z.ERR_MULTIPLE_CALLBACK,
29099
29111
  l = z.ERR_STREAM_CANNOT_PIPE,
29100
29112
  A = z.ERR_STREAM_DESTROYED,
29101
- m = z.ERR_STREAM_NULL_VALUES,
29102
- h = z.ERR_STREAM_WRITE_AFTER_END,
29113
+ h = z.ERR_STREAM_NULL_VALUES,
29114
+ m = z.ERR_STREAM_WRITE_AFTER_END,
29103
29115
  f = z.ERR_UNKNOWN_ENCODING,
29104
29116
  q = b.errorOrDestroy;
29105
29117
 
@@ -29212,11 +29224,11 @@
29212
29224
  return i && !p.isBuffer(e) && (e = function(e) {
29213
29225
  return p.from(e)
29214
29226
  }(e)), "function" == typeof n && (t = n, n = null), i ? n = "buffer" : n || (n = a.defaultEncoding), "function" != typeof t && (t = _), a.ending ? function(e, n) {
29215
- var t = new h;
29227
+ var t = new m;
29216
29228
  q(e, t), process.nextTick(n, t)
29217
29229
  }(this, t) : (i || function(e, n, t, o) {
29218
29230
  var a;
29219
- return null === t ? a = new m : "string" == typeof t || n.objectMode || (a = new d("chunk", ["string", "Buffer"], t)), !a || (q(e, a), process.nextTick(o, a), !1)
29231
+ return null === t ? a = new h : "string" == typeof t || n.objectMode || (a = new d("chunk", ["string", "Buffer"], t)), !a || (q(e, a), process.nextTick(o, a), !1)
29220
29232
  }(this, a, e, t)) && (a.pendingcb++, r = function(e, n, t, o, a, r) {
29221
29233
  if (!t) {
29222
29234
  var i = function(e, n, t) {
@@ -29950,8 +29962,8 @@
29950
29962
  const u = O(o),
29951
29963
  l = O(a),
29952
29964
  A = O(r),
29953
- m = O(i),
29954
- h = O(p),
29965
+ h = O(i),
29966
+ m = O(p),
29955
29967
  f = O(c),
29956
29968
  q = O(s),
29957
29969
  _ = O(b),
@@ -29986,13 +29998,13 @@
29986
29998
  B = x("function"),
29987
29999
  X = x("number"),
29988
30000
  Y = e => null !== e && "object" == typeof e,
29989
- j = e => {
30001
+ I = e => {
29990
30002
  if ("object" !== N(e)) return !1;
29991
30003
  const n = R(e);
29992
30004
  return !(null !== n && n !== Object.prototype && null !== Object.getPrototypeOf(n) || E in e || v in e)
29993
30005
  },
29994
- P = S("Date"),
29995
- I = S("File"),
30006
+ j = S("Date"),
30007
+ P = S("File"),
29996
30008
  H = S("Blob"),
29997
30009
  F = S("FileList"),
29998
30010
  U = S("URLSearchParams"),
@@ -30067,14 +30079,14 @@
30067
30079
  isNumber: X,
30068
30080
  isBoolean: e => !0 === e || !1 === e,
30069
30081
  isObject: Y,
30070
- isPlainObject: j,
30082
+ isPlainObject: I,
30071
30083
  isReadableStream: G,
30072
30084
  isRequest: V,
30073
30085
  isResponse: J,
30074
30086
  isHeaders: K,
30075
30087
  isUndefined: w,
30076
- isDate: P,
30077
- isFile: I,
30088
+ isDate: j,
30089
+ isFile: P,
30078
30090
  isBlob: H,
30079
30091
  isRegExp: re,
30080
30092
  isFunction: B,
@@ -30088,7 +30100,7 @@
30088
30100
  caseless: n
30089
30101
  } = ee(this) && this || {}, t = {}, o = (o, a) => {
30090
30102
  const r = n && Q(t, a) || a;
30091
- j(t[r]) && j(o) ? t[r] = e(t[r], o) : j(o) ? t[r] = e({}, o) : k(o) ? t[r] = o.slice() : t[r] = o
30103
+ I(t[r]) && I(o) ? t[r] = e(t[r], o) : I(o) ? t[r] = e({}, o) : k(o) ? t[r] = o.slice() : t[r] = o
30092
30104
  };
30093
30105
  for (let e = 0, n = arguments.length; e < n; e++) arguments[e] && $(arguments[e], o);
30094
30106
  return t
@@ -30229,17 +30241,17 @@
30229
30241
  const le = ue.prototype,
30230
30242
  Ae = {};
30231
30243
 
30232
- function me(e) {
30244
+ function he(e) {
30233
30245
  return Oe.isPlainObject(e) || Oe.isArray(e)
30234
30246
  }
30235
30247
 
30236
- function he(e) {
30248
+ function me(e) {
30237
30249
  return Oe.endsWith(e, "[]") ? e.slice(0, -2) : e
30238
30250
  }
30239
30251
 
30240
30252
  function fe(e, n, t) {
30241
30253
  return e ? e.concat(n).map((function(e, n) {
30242
- return e = he(e), !t && n ? "[" + e + "]" : e
30254
+ return e = me(e), !t && n ? "[" + e + "]" : e
30243
30255
  })).join(t ? "." : "") : n
30244
30256
  } ["ERR_BAD_OPTION_VALUE", "ERR_BAD_OPTION", "ECONNABORTED", "ETIMEDOUT", "ERR_NETWORK", "ERR_FR_TOO_MANY_REDIRECTS", "ERR_DEPRECATED", "ERR_BAD_RESPONSE", "ERR_BAD_REQUEST", "ERR_CANCELED", "ERR_NOT_SUPPORT", "ERR_INVALID_URL"].forEach((e => {
30245
30257
  Ae[e] = {
@@ -30286,17 +30298,17 @@
30286
30298
  if (e && !a && "object" == typeof e)
30287
30299
  if (Oe.endsWith(t, "{}")) t = o ? t : t.slice(0, -2), e = JSON.stringify(e);
30288
30300
  else if (Oe.isArray(e) && function(e) {
30289
- return Oe.isArray(e) && !e.some(me)
30290
- }(e) || (Oe.isFileList(e) || Oe.endsWith(t, "[]")) && (p = Oe.toArray(e))) return t = he(t), p.forEach((function(e, o) {
30301
+ return Oe.isArray(e) && !e.some(he)
30302
+ }(e) || (Oe.isFileList(e) || Oe.endsWith(t, "[]")) && (p = Oe.toArray(e))) return t = me(t), p.forEach((function(e, o) {
30291
30303
  !Oe.isUndefined(e) && null !== e && n.append(!0 === i ? fe([t], o, r) : null === i ? t : t + "[]", c(e))
30292
30304
  })), !1;
30293
- return !!me(e) || (n.append(fe(a, t, r), c(e)), !1)
30305
+ return !!he(e) || (n.append(fe(a, t, r), c(e)), !1)
30294
30306
  }
30295
30307
  const b = [],
30296
30308
  M = Object.assign(qe, {
30297
30309
  defaultVisitor: s,
30298
30310
  convertValue: c,
30299
- isVisitable: me
30311
+ isVisitable: he
30300
30312
  });
30301
30313
  if (!Oe.isObject(e)) throw new TypeError("data must be an object");
30302
30314
  return function e(t, o) {
@@ -30429,7 +30441,7 @@
30429
30441
  ...ke
30430
30442
  };
30431
30443
 
30432
- function je(e) {
30444
+ function Ie(e) {
30433
30445
  function n(e, t, o, a) {
30434
30446
  let r = e[a++];
30435
30447
  if ("__proto__" === r) return !0;
@@ -30457,7 +30469,7 @@
30457
30469
  }
30458
30470
  return null
30459
30471
  }
30460
- const Pe = {
30472
+ const je = {
30461
30473
  transitional: Ee,
30462
30474
  adapter: ["xhr", "http", "fetch"],
30463
30475
  transformRequest: [function(e, n) {
@@ -30465,7 +30477,7 @@
30465
30477
  o = t.indexOf("application/json") > -1,
30466
30478
  a = Oe.isObject(e);
30467
30479
  a && Oe.isHTMLForm(e) && (e = new FormData(e));
30468
- if (Oe.isFormData(e)) return o ? JSON.stringify(je(e)) : e;
30480
+ if (Oe.isFormData(e)) return o ? JSON.stringify(Ie(e)) : e;
30469
30481
  if (Oe.isArrayBuffer(e) || Oe.isBuffer(e) || Oe.isStream(e) || Oe.isFile(e) || Oe.isBlob(e) || Oe.isReadableStream(e)) return e;
30470
30482
  if (Oe.isArrayBufferView(e)) return e.buffer;
30471
30483
  if (Oe.isURLSearchParams(e)) return n.setContentType("application/x-www-form-urlencoded;charset=utf-8", !1), e.toString();
@@ -30495,7 +30507,7 @@
30495
30507
  }(e)) : e
30496
30508
  }],
30497
30509
  transformResponse: [function(e) {
30498
- const n = this.transitional || Pe.transitional,
30510
+ const n = this.transitional || je.transitional,
30499
30511
  t = n && n.forcedJSONParsing,
30500
30512
  o = "json" === this.responseType;
30501
30513
  if (Oe.isResponse(e) || Oe.isReadableStream(e)) return e;
@@ -30532,9 +30544,9 @@
30532
30544
  }
30533
30545
  };
30534
30546
  Oe.forEach(["delete", "get", "head", "post", "put", "patch"], (e => {
30535
- Pe.headers[e] = {}
30547
+ je.headers[e] = {}
30536
30548
  }));
30537
- const Ie = Pe,
30549
+ const Pe = je,
30538
30550
  He = Oe.toObjectSet(["age", "authorization", "content-length", "content-type", "etag", "expires", "from", "host", "if-modified-since", "if-unmodified-since", "last-modified", "location", "max-forwards", "proxy-authorization", "referer", "retry-after", "user-agent"]),
30539
30551
  Fe = Symbol("internals");
30540
30552
 
@@ -30705,7 +30717,7 @@
30705
30717
  const Je = AxiosHeaders;
30706
30718
 
30707
30719
  function Ke(e, n) {
30708
- const t = this || Ie,
30720
+ const t = this || Pe,
30709
30721
  o = n || t,
30710
30722
  a = Je.from(o.headers);
30711
30723
  let r = o.data;
@@ -30954,8 +30966,8 @@
30954
30966
  loaded: o
30955
30967
  }), n[1]]
30956
30968
  },
30957
- mn = e => (...n) => Oe.asap((() => e(...n))),
30958
- hn = {
30969
+ hn = e => (...n) => Oe.asap((() => e(...n))),
30970
+ mn = {
30959
30971
  flush: W.default.constants.Z_SYNC_FLUSH,
30960
30972
  finishFlush: W.default.constants.Z_SYNC_FLUSH
30961
30973
  },
@@ -30979,7 +30991,7 @@
30979
30991
  function vn(e, n, t) {
30980
30992
  let o = n;
30981
30993
  if (!o && !1 !== o) {
30982
- const e = m.default.getProxyForUrl(t);
30994
+ const e = h.default.getProxyForUrl(t);
30983
30995
  e && (o = new URL(e))
30984
30996
  }
30985
30997
  if (o) {
@@ -31044,8 +31056,8 @@
31044
31056
  b = !0, n && (z = !0, u())
31045
31057
  })), O.once("abort", t), (e.cancelToken || e.signal) && (e.cancelToken && e.cancelToken.subscribe(l), e.signal && (e.signal.aborted ? l() : e.signal.addEventListener("abort", l)));
31046
31058
  const A = en(e.baseURL, e.url, e.allowAbsoluteUrls),
31047
- m = new URL(A, Ye.hasBrowserEnv ? Ye.origin : void 0),
31048
- _ = m.protocol || Ln[0];
31059
+ h = new URL(A, Ye.hasBrowserEnv ? Ye.origin : void 0),
31060
+ _ = h.protocol || Ln[0];
31049
31061
  if ("data:" === _) {
31050
31062
  let o;
31051
31063
  if ("GET" !== s) return Ze(n, t, {
@@ -31126,9 +31138,9 @@
31126
31138
  objectMode: !1
31127
31139
  })), a = g.default.pipeline([a, new rn({
31128
31140
  maxRate: Oe.toFiniteNumber(E)
31129
- })], Oe.noop), y && a.on("progress", yn(a, An(T, ln(mn(y), !1, 3))))), e.auth && (S = (e.auth.username || "") + ":" + (e.auth.password || "")), !S && m.username && (S = m.username + ":" + m.password), S && L.delete("authorization");
31141
+ })], Oe.noop), y && a.on("progress", yn(a, An(T, ln(hn(y), !1, 3))))), e.auth && (S = (e.auth.username || "") + ":" + (e.auth.password || "")), !S && h.username && (S = h.username + ":" + h.password), S && L.delete("authorization");
31130
31142
  try {
31131
- x = Re(m.pathname + m.search, e.params, e.paramsSerializer).replace(/^\?/, "")
31143
+ x = Re(h.pathname + h.search, e.params, e.paramsSerializer).replace(/^\?/, "")
31132
31144
  } catch (n) {
31133
31145
  const o = new Error(n.message);
31134
31146
  return o.config = e, o.url = e.url, o.exists = !0, t(o)
@@ -31149,9 +31161,9 @@
31149
31161
  beforeRedirects: {}
31150
31162
  };
31151
31163
  let w;
31152
- !Oe.isUndefined(r) && (k.lookup = r), e.socketPath ? k.socketPath = e.socketPath : (k.hostname = m.hostname.startsWith("[") ? m.hostname.slice(1, -1) : m.hostname, k.port = m.port, vn(k, e.proxy, _ + "//" + m.hostname + (m.port ? ":" + m.port : "") + k.path));
31164
+ !Oe.isUndefined(r) && (k.lookup = r), e.socketPath ? k.socketPath = e.socketPath : (k.hostname = h.hostname.startsWith("[") ? h.hostname.slice(1, -1) : h.hostname, k.port = h.port, vn(k, e.proxy, _ + "//" + h.hostname + (h.port ? ":" + h.port : "") + k.path));
31153
31165
  const D = gn.test(k.protocol);
31154
- if (k.agent = D ? e.httpsAgent : e.httpAgent, e.transport ? w = e.transport : 0 === e.maxRedirects ? w = D ? f.default : h.default : (e.maxRedirects && (k.maxRedirects = e.maxRedirects), e.beforeRedirect && (k.beforeRedirects.config = e.beforeRedirect), w = D ? Wn : _n), e.maxBodyLength > -1 ? k.maxBodyLength = e.maxBodyLength : k.maxBodyLength = 1 / 0, e.insecureHTTPParser && (k.insecureHTTPParser = e.insecureHTTPParser), M = w.request(k, (function(o) {
31166
+ if (k.agent = D ? e.httpsAgent : e.httpAgent, e.transport ? w = e.transport : 0 === e.maxRedirects ? w = D ? f.default : m.default : (e.maxRedirects && (k.maxRedirects = e.maxRedirects), e.beforeRedirect && (k.beforeRedirects.config = e.beforeRedirect), w = D ? Wn : _n), e.maxBodyLength > -1 ? k.maxBodyLength = e.maxBodyLength : k.maxBodyLength = 1 / 0, e.insecureHTTPParser && (k.insecureHTTPParser = e.insecureHTTPParser), M = w.request(k, (function(o) {
31155
31167
  if (M.destroyed) return;
31156
31168
  const a = [o],
31157
31169
  r = +o.headers["content-length"];
@@ -31159,7 +31171,7 @@
31159
31171
  const e = new rn({
31160
31172
  maxRate: Oe.toFiniteNumber(N)
31161
31173
  });
31162
- R && e.on("progress", yn(e, An(r, ln(mn(R), !0, 3)))), a.push(e)
31174
+ R && e.on("progress", yn(e, An(r, ln(hn(R), !0, 3)))), a.push(e)
31163
31175
  }
31164
31176
  let i = o;
31165
31177
  const b = o.req || M;
@@ -31168,10 +31180,10 @@
31168
31180
  case "x-gzip":
31169
31181
  case "compress":
31170
31182
  case "x-compress":
31171
- a.push(W.default.createUnzip(hn)), delete o.headers["content-encoding"];
31183
+ a.push(W.default.createUnzip(mn)), delete o.headers["content-encoding"];
31172
31184
  break;
31173
31185
  case "deflate":
31174
- a.push(new On), a.push(W.default.createUnzip(hn)), delete o.headers["content-encoding"];
31186
+ a.push(new On), a.push(W.default.createUnzip(mn)), delete o.headers["content-encoding"];
31175
31187
  break;
31176
31188
  case "br":
31177
31189
  qn && (a.push(W.default.createBrotliDecompress(fn)), delete o.headers["content-encoding"])
@@ -31459,7 +31471,7 @@
31459
31471
  } finally {
31460
31472
  await n.cancel()
31461
31473
  }
31462
- }, jn = (e, n, t, o) => {
31474
+ }, In = (e, n, t, o) => {
31463
31475
  const a = async function*(e, n) {
31464
31476
  for await (const t of Yn(e)) yield* Xn(t, n)
31465
31477
  }(e, n);
@@ -31489,7 +31501,7 @@
31489
31501
  }, {
31490
31502
  highWaterMark: 2
31491
31503
  })
31492
- }, Pn = "function" == typeof fetch && "function" == typeof Request && "function" == typeof Response, In = Pn && "function" == typeof ReadableStream, Hn = Pn && ("function" == typeof TextEncoder ? (Fn = new TextEncoder, e => Fn.encode(e)) : async e => new Uint8Array(await new Response(e).arrayBuffer()));
31504
+ }, jn = "function" == typeof fetch && "function" == typeof Request && "function" == typeof Response, Pn = jn && "function" == typeof ReadableStream, Hn = jn && ("function" == typeof TextEncoder ? (Fn = new TextEncoder, e => Fn.encode(e)) : async e => new Uint8Array(await new Response(e).arrayBuffer()));
31493
31505
  var Fn;
31494
31506
  const Un = (e, ...n) => {
31495
31507
  try {
@@ -31498,7 +31510,7 @@
31498
31510
  return !1
31499
31511
  }
31500
31512
  },
31501
- Gn = In && Un((() => {
31513
+ Gn = Pn && Un((() => {
31502
31514
  let e = !1;
31503
31515
  const n = new Request(Ye.origin, {
31504
31516
  body: new ReadableStream,
@@ -31509,12 +31521,12 @@
31509
31521
  }).headers.has("Content-Type");
31510
31522
  return e && !n
31511
31523
  })),
31512
- Vn = In && Un((() => Oe.isReadableStream(new Response("").body))),
31524
+ Vn = Pn && Un((() => Oe.isReadableStream(new Response("").body))),
31513
31525
  Jn = {
31514
31526
  stream: Vn && (e => e.body)
31515
31527
  };
31516
31528
  var Kn;
31517
- Pn && (Kn = new Response, ["text", "arrayBuffer", "blob", "formData", "stream"].forEach((e => {
31529
+ jn && (Kn = new Response, ["text", "arrayBuffer", "blob", "formData", "stream"].forEach((e => {
31518
31530
  !Jn[e] && (Jn[e] = Oe.isFunction(Kn[e]) ? n => n[e]() : (n, t) => {
31519
31531
  throw new ue(`Response type '${e}' is not supported`, ue.ERR_NOT_SUPPORT, t)
31520
31532
  })
@@ -31533,7 +31545,7 @@
31533
31545
  }
31534
31546
  return Oe.isArrayBufferView(e) || Oe.isArrayBuffer(e) ? e.byteLength : (Oe.isURLSearchParams(e) && (e += ""), Oe.isString(e) ? (await Hn(e)).byteLength : void 0)
31535
31547
  })(n) : t
31536
- }, Qn = Pn && (async e => {
31548
+ }, Qn = jn && (async e => {
31537
31549
  let {
31538
31550
  url: n,
31539
31551
  method: t,
@@ -31562,8 +31574,8 @@
31562
31574
  duplex: "half"
31563
31575
  });
31564
31576
  if (Oe.isFormData(o) && (e = t.headers.get("content-type")) && b.setContentType(e), t.body) {
31565
- const [e, n] = An(l, ln(mn(c)));
31566
- o = jn(t.body, 65536, e, n)
31577
+ const [e, n] = An(l, ln(hn(c)));
31578
+ o = In(t.body, 65536, e, n)
31567
31579
  }
31568
31580
  }
31569
31581
  Oe.isString(M) || (M = M ? "include" : "omit");
@@ -31585,8 +31597,8 @@
31585
31597
  e[n] = r[n]
31586
31598
  }));
31587
31599
  const n = Oe.toFiniteNumber(r.headers.get("content-length")),
31588
- [t, o] = p && An(n, ln(mn(p), !0)) || [];
31589
- r = new Response(jn(r.body, 65536, t, (() => {
31600
+ [t, o] = p && An(n, ln(hn(p), !0)) || [];
31601
+ r = new Response(In(r.body, 65536, t, (() => {
31590
31602
  o && o(), u && u()
31591
31603
  })), e)
31592
31604
  }
@@ -31653,7 +31665,7 @@
31653
31665
 
31654
31666
  function at(e) {
31655
31667
  ot(e), e.headers = Je.from(e.headers), e.data = Ke.call(e, e.transformRequest), -1 !== ["post", "put", "patch"].indexOf(e.method) && e.headers.setContentType("application/x-www-form-urlencoded", !1);
31656
- return tt(e.adapter || Ie.adapter)(e).then((function(n) {
31668
+ return tt(e.adapter || Pe.adapter)(e).then((function(n) {
31657
31669
  return ot(e), n.data = Ke.call(e, e.transformResponse, n), n.headers = Je.from(n.headers), n
31658
31670
  }), (function(n) {
31659
31671
  return $e(n) || (ot(e), n && n.response && (n.response.data = Ke.call(e, e.transformResponse, n.response), n.response.headers = Je.from(n.response.headers))), Promise.reject(n)
@@ -31937,7 +31949,7 @@
31937
31949
  }), o.create = function(t) {
31938
31950
  return e(wn(n, t))
31939
31951
  }, o
31940
- }(Ie);
31952
+ }(Pe);
31941
31953
  dt.Axios = st, dt.CanceledError = Qe, dt.CancelToken = bt, dt.isCancel = $e, dt.VERSION = nn, dt.toFormData = _e, dt.AxiosError = ue, dt.Cancel = dt.CanceledError, dt.all = function(e) {
31942
31954
  return Promise.all(e)
31943
31955
  }, dt.spread = function(e) {
@@ -31946,7 +31958,7 @@
31946
31958
  }
31947
31959
  }, dt.isAxiosError = function(e) {
31948
31960
  return Oe.isObject(e) && !0 === e.isAxiosError
31949
- }, dt.mergeConfig = wn, dt.AxiosHeaders = Je, dt.formToJSON = e => je(Oe.isHTMLForm(e) ? new FormData(e) : e), dt.getAdapter = tt, dt.HttpStatusCode = zt, dt.default = dt, e.exports = dt
31961
+ }, dt.mergeConfig = wn, dt.AxiosHeaders = Je, dt.formToJSON = e => Ie(Oe.isHTMLForm(e) ? new FormData(e) : e), dt.getAdapter = tt, dt.HttpStatusCode = zt, dt.default = dt, e.exports = dt
31950
31962
  },
31951
31963
  56: e => {
31952
31964
  "use strict";
@@ -31997,4 +32009,4 @@
31997
32009
  })
31998
32010
  }, t.nmd = e => (e.paths = [], e.children || (e.children = []), e);
31999
32011
  t(t.s = 1402)
32000
- })();/*! [dist-pg-services.js]; ===WEBPACK BUILD: 1.25.0821.1342=== */
32012
+ })();/*! [dist-pg-services.js]; ===WEBPACK BUILD: 1.25.0910.1839=== */