@openmrs/esm-billing-app 1.0.2-pre.850 → 1.0.2-pre.859
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/3717.js +1 -1
- package/dist/3717.js.map +1 -1
- package/dist/4300.js +1 -1
- package/dist/4344.js +1 -1
- package/dist/4344.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/openmrs-esm-billing-app.js +1 -1
- package/dist/openmrs-esm-billing-app.js.buildmanifest.json +11 -11
- package/dist/routes.json +1 -1
- package/package.json +1 -1
- package/src/billable-services/billable-service.resource.ts +7 -7
- package/src/billable-services/create-edit/add-billable-service.component.tsx +26 -16
- package/src/billable-services/create-edit/add-billable-service.scss +1 -3
- package/src/billable-services/payment-modes/delete-payment-mode.modal.tsx +3 -1
- package/src/types/index.ts +2 -6
- package/translations/en.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
var _openmrs_esm_billing_app;(()=>{"use strict";var e,r,t,n,o,a,i,l,s,u,f,p,d,c,h,m,v,g,b,y,w,_={45120:(e,r,t)=>{var n={"./start":()=>Promise.all([t.e(2177),t.e(6295),t.e(1146),t.e(2524),t.e(6072),t.e(3006),t.e(4344)]).then((()=>()=>t(34344)))},o=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),t.R=void 0,r),a=(e,r)=>{if(t.S){var n="default",o=t.S[n];if(o&&o!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)}};t.d(r,{get:()=>o,init:()=>a})}},P={};function S(e){var r=P[e];if(void 0!==r)return r.exports;var t=P[e]={id:e,loaded:!1,exports:{}};return _[e].call(t.exports,t,t.exports,S),t.loaded=!0,t.exports}S.m=_,S.c=P,S.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return S.d(r,{a:r}),r},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,S.t=function(t,n){if(1&n&&(t=this(t)),8&n)return t;if("object"==typeof t&&t){if(4&n&&t.__esModule)return t;if(16&n&&"function"==typeof t.then)return t}var o=Object.create(null);S.r(o);var a={};e=e||[null,r({}),r([]),r(r)];for(var i=2&n&&t;"object"==typeof i&&!~e.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach((e=>a[e]=()=>t[e]));return a.default=()=>t,S.d(o,a),o},S.d=(e,r)=>{for(var t in r)S.o(r,t)&&!S.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},S.f={},S.e=e=>Promise.all(Object.keys(S.f).reduce(((r,t)=>(S.f[t](e,r),r)),[])),S.u=e=>e+".js",S.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),S.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t={},n="@openmrs/esm-billing-app:",S.l=(e,r,o,a)=>{if(t[e])t[e].push(r);else{var i,l;if(void 0!==o)for(var s=document.getElementsByTagName("script"),u=0;u<s.length;u++){var f=s[u];if(f.getAttribute("src")==e||f.getAttribute("data-webpack")==n+o){i=f;break}}i||(l=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,S.nc&&i.setAttribute("nonce",S.nc),i.setAttribute("data-webpack",n+o),i.src=e),t[e]=[r];var p=(r,n)=>{i.onerror=i.onload=null,clearTimeout(d);var o=t[e];if(delete t[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach((e=>e(n))),r)return r(n)},d=setTimeout(p.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=p.bind(null,i.onerror),i.onload=p.bind(null,i.onload),l&&document.head.appendChild(i)}},S.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},S.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{S.S={};var e={},r={};S.I=(t,n)=>{n||(n=[]);var o=r[t];if(o||(o=r[t]={}),!(n.indexOf(o)>=0)){if(n.push(o),e[t])return e[t];S.o(S.S,t)||(S.S[t]={});var a=S.S[t],i="@openmrs/esm-billing-app",l=(e,r,t,n)=>{var o=a[e]=a[e]||{},l=o[r];(!l||!l.loaded&&(!n!=!l.eager?n:i>l.from))&&(o[r]={get:t,from:i,eager:!!n})},s=[];return"default"===t&&(l("@openmrs/esm-framework","8.0.1-pre.3425",(()=>Promise.all([S.e(2177),S.e(3717),S.e(6295),S.e(1856),S.e(6072),S.e(1997),S.e(3006)]).then((()=>()=>S(41856))))),l("@openmrs/esm-patient-common-lib","11.3.1-pre.
|
|
1
|
+
var _openmrs_esm_billing_app;(()=>{"use strict";var e,r,t,n,o,a,i,l,s,u,f,p,d,c,h,m,v,g,b,y,w,_={45120:(e,r,t)=>{var n={"./start":()=>Promise.all([t.e(2177),t.e(6295),t.e(1146),t.e(2524),t.e(6072),t.e(3006),t.e(4344)]).then((()=>()=>t(34344)))},o=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),t.R=void 0,r),a=(e,r)=>{if(t.S){var n="default",o=t.S[n];if(o&&o!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)}};t.d(r,{get:()=>o,init:()=>a})}},P={};function S(e){var r=P[e];if(void 0!==r)return r.exports;var t=P[e]={id:e,loaded:!1,exports:{}};return _[e].call(t.exports,t,t.exports,S),t.loaded=!0,t.exports}S.m=_,S.c=P,S.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return S.d(r,{a:r}),r},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,S.t=function(t,n){if(1&n&&(t=this(t)),8&n)return t;if("object"==typeof t&&t){if(4&n&&t.__esModule)return t;if(16&n&&"function"==typeof t.then)return t}var o=Object.create(null);S.r(o);var a={};e=e||[null,r({}),r([]),r(r)];for(var i=2&n&&t;"object"==typeof i&&!~e.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach((e=>a[e]=()=>t[e]));return a.default=()=>t,S.d(o,a),o},S.d=(e,r)=>{for(var t in r)S.o(r,t)&&!S.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},S.f={},S.e=e=>Promise.all(Object.keys(S.f).reduce(((r,t)=>(S.f[t](e,r),r)),[])),S.u=e=>e+".js",S.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),S.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t={},n="@openmrs/esm-billing-app:",S.l=(e,r,o,a)=>{if(t[e])t[e].push(r);else{var i,l;if(void 0!==o)for(var s=document.getElementsByTagName("script"),u=0;u<s.length;u++){var f=s[u];if(f.getAttribute("src")==e||f.getAttribute("data-webpack")==n+o){i=f;break}}i||(l=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,S.nc&&i.setAttribute("nonce",S.nc),i.setAttribute("data-webpack",n+o),i.src=e),t[e]=[r];var p=(r,n)=>{i.onerror=i.onload=null,clearTimeout(d);var o=t[e];if(delete t[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach((e=>e(n))),r)return r(n)},d=setTimeout(p.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=p.bind(null,i.onerror),i.onload=p.bind(null,i.onload),l&&document.head.appendChild(i)}},S.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},S.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{S.S={};var e={},r={};S.I=(t,n)=>{n||(n=[]);var o=r[t];if(o||(o=r[t]={}),!(n.indexOf(o)>=0)){if(n.push(o),e[t])return e[t];S.o(S.S,t)||(S.S[t]={});var a=S.S[t],i="@openmrs/esm-billing-app",l=(e,r,t,n)=>{var o=a[e]=a[e]||{},l=o[r];(!l||!l.loaded&&(!n!=!l.eager?n:i>l.from))&&(o[r]={get:t,from:i,eager:!!n})},s=[];return"default"===t&&(l("@openmrs/esm-framework","8.0.1-pre.3425",(()=>Promise.all([S.e(2177),S.e(3717),S.e(6295),S.e(1856),S.e(6072),S.e(1997),S.e(3006)]).then((()=>()=>S(41856))))),l("@openmrs/esm-patient-common-lib","11.3.1-pre.9061",(()=>Promise.all([S.e(2177),S.e(3717),S.e(6295),S.e(4724),S.e(1146),S.e(6072),S.e(1997),S.e(3006)]).then((()=>()=>S(94724))))),l("react-dom","18.3.1",(()=>Promise.all([S.e(961),S.e(6072)]).then((()=>()=>S(40961))))),l("react-i18next","14.0.1",(()=>Promise.all([S.e(7255),S.e(6072)]).then((()=>()=>S(77255))))),l("react","18.3.1",(()=>S.e(6540).then((()=>()=>S(96540))))),l("rxjs","6.6.7",(()=>S.e(3184).then((()=>()=>S(63184))))),l("swr/immutable","2.3.3",(()=>Promise.all([S.e(2177),S.e(6072),S.e(4225)]).then((()=>()=>S(54225))))),l("swr/infinite","2.3.3",(()=>Promise.all([S.e(2177),S.e(6072),S.e(3041)]).then((()=>()=>S(23041)))))),e[t]=s.length?Promise.all(s).then((()=>e[t]=1)):1}}})(),(()=>{var e;S.g.importScripts&&(e=S.g.location+"");var r=S.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=t[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),S.p=e})(),o=e=>{var r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=t[1]?r(t[1]):[];return t[2]&&(n.length++,n.push.apply(n,r(t[2]))),t[3]&&(n.push([]),n.push.apply(n,r(t[3]))),n},a=(e,r)=>{e=o(e),r=o(r);for(var t=0;;){if(t>=e.length)return t<r.length&&"u"!=(typeof r[t])[0];var n=e[t],a=(typeof n)[0];if(t>=r.length)return"u"==a;var i=r[t],l=(typeof i)[0];if(a!=l)return"o"==a&&"n"==l||"s"==l||"u"==a;if("o"!=a&&"u"!=a&&n!=i)return n<i;t++}},i=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var n=1,o=1;o<e.length;o++)n--,t+="u"==(typeof(l=e[o]))[0]?"-":(n>0?".":"")+(n=2,l);return t}var a=[];for(o=1;o<e.length;o++){var l=e[o];a.push(0===l?"not("+s()+")":1===l?"("+s()+" || "+s()+")":2===l?a.pop()+" "+a.pop():i(l))}return s();function s(){return a.pop().replace(/^\((.+)\)$/,"$1")}},l=(e,r)=>{if(0 in e){r=o(r);var t=e[0],n=t<0;n&&(t=-t-1);for(var a=0,i=1,s=!0;;i++,a++){var u,f,p=i<e.length?(typeof e[i])[0]:"";if(a>=r.length||"o"==(f=(typeof(u=r[a]))[0]))return!s||("u"==p?i>t&&!n:""==p!=n);if("u"==f){if(!s||"u"!=p)return!1}else if(s)if(p==f)if(i<=t){if(u!=e[i])return!1}else{if(n?u>e[i]:u<e[i])return!1;u!=e[i]&&(s=!1)}else if("s"!=p&&"n"!=p){if(n||i<=t)return!1;s=!1,i--}else{if(i<=t||f<p!=n)return!1;s=!1}else"s"!=p&&"n"!=p&&(s=!1,i--)}}var d=[],c=d.pop.bind(d);for(a=1;a<e.length;a++){var h=e[a];d.push(1==h?c()|c():2==h?c()&c():h?l(h,r):!c())}return!!c()},s=(e,r)=>e&&S.o(e,r),u=e=>(e.loaded=1,e.get()),f=e=>Object.keys(e).reduce(((r,t)=>(e[t].eager&&(r[t]=e[t]),r)),{}),p=(e,r,t)=>{var n=t?f(e[r]):e[r];return Object.keys(n).reduce(((e,r)=>!e||!n[e].loaded&&a(e,r)?r:e),0)},d=(e,r,t,n)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+i(n)+")",c=e=>{throw new Error(e)},h=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},m=(e,r,t)=>t?t():((e,r)=>c("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),v=(e=>function(r,t,n,o,a){var i=S.I(r);return i&&i.then&&!n?i.then(e.bind(e,r,S.S[r],t,!1,o,a)):e(r,S.S[r],t,n,o,a)})(((e,r,t,n,o,a)=>{if(!s(r,t))return m(e,t,a);var i=p(r,t,n);return l(o,i)||h(d(r,t,i,o)),u(r[t][i])})),g={},b={16072:()=>v("default","react",!1,[1,18],(()=>S.e(6540).then((()=>()=>S(96540))))),44209:()=>v("default","swr/immutable",!1,[1,2],(()=>S.e(6606).then((()=>()=>S(54225))))),53083:()=>v("default","rxjs",!1,[1,6],(()=>S.e(3184).then((()=>()=>S(63184))))),56339:()=>v("default","swr/infinite",!1,[1,2],(()=>S.e(5422).then((()=>()=>S(23041))))),15847:()=>v("default","@openmrs/esm-framework",!1,[1,8],(()=>Promise.all([S.e(3717),S.e(1856),S.e(1997)]).then((()=>()=>S(41856))))),53941:()=>v("default","react-i18next",!1,[1,11],(()=>S.e(7255).then((()=>()=>S(77255))))),92646:()=>v("default","react-dom",!1,[1,18],(()=>S.e(961).then((()=>()=>S(40961))))),35332:()=>v("default","@openmrs/esm-patient-common-lib",!1,[1,11],(()=>Promise.all([S.e(3717),S.e(4724),S.e(1997)]).then((()=>()=>S(94724)))))},y={1997:[44209,53083,56339],3006:[15847,53941,92646],4344:[35332],6072:[16072]},w={},S.f.consumes=(e,r)=>{S.o(y,e)&&y[e].forEach((e=>{if(S.o(g,e))return r.push(g[e]);if(!w[e]){var t=r=>{g[e]=0,S.m[e]=t=>{delete S.c[e],t.exports=r()}};w[e]=!0;var n=r=>{delete g[e],S.m[e]=t=>{throw delete S.c[e],r}};try{var o=b[e]();o.then?r.push(g[e]=o.then(t).catch(n)):t(o)}catch(e){n(e)}}}))},(()=>{var e={6803:0};S.f.j=(r,t)=>{var n=S.o(e,r)?e[r]:void 0;if(0!==n)if(n)t.push(n[2]);else if(/^(1997|3006|6072)$/.test(r))e[r]=0;else{var o=new Promise(((t,o)=>n=e[r]=[t,o]));t.push(n[2]=o);var a=S.p+S.u(r),i=new Error;S.l(a,(t=>{if(S.o(e,r)&&(0!==(n=e[r])&&(e[r]=void 0),n)){var o=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,n[1](i)}}),"chunk-"+r,r)}};var r=(r,t)=>{var n,o,[a,i,l]=t,s=0;if(a.some((r=>0!==e[r]))){for(n in i)S.o(i,n)&&(S.m[n]=i[n]);l&&l(S)}for(r&&r(t);s<a.length;s++)o=a[s],S.o(e,o)&&e[o]&&e[o][0](),e[o]=0},t=globalThis.webpackChunk_openmrs_esm_billing_app=globalThis.webpackChunk_openmrs_esm_billing_app||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),S.nc=void 0;var j=S(45120);_openmrs_esm_billing_app=j})();
|
|
@@ -471,7 +471,7 @@
|
|
|
471
471
|
"auxiliaryFiles": [
|
|
472
472
|
"3717.js.map"
|
|
473
473
|
],
|
|
474
|
-
"hash": "
|
|
474
|
+
"hash": "35183d57856f43f4",
|
|
475
475
|
"childrenByOrder": {}
|
|
476
476
|
},
|
|
477
477
|
{
|
|
@@ -547,9 +547,9 @@
|
|
|
547
547
|
"initial": false,
|
|
548
548
|
"entry": false,
|
|
549
549
|
"recorded": false,
|
|
550
|
-
"size":
|
|
550
|
+
"size": 8981,
|
|
551
551
|
"sizes": {
|
|
552
|
-
"javascript":
|
|
552
|
+
"javascript": 8981
|
|
553
553
|
},
|
|
554
554
|
"names": [],
|
|
555
555
|
"idHints": [],
|
|
@@ -561,7 +561,7 @@
|
|
|
561
561
|
"4300.js"
|
|
562
562
|
],
|
|
563
563
|
"auxiliaryFiles": [],
|
|
564
|
-
"hash": "
|
|
564
|
+
"hash": "6ed17a3eb14fffde",
|
|
565
565
|
"childrenByOrder": {}
|
|
566
566
|
},
|
|
567
567
|
{
|
|
@@ -591,9 +591,9 @@
|
|
|
591
591
|
"initial": false,
|
|
592
592
|
"entry": false,
|
|
593
593
|
"recorded": false,
|
|
594
|
-
"size":
|
|
594
|
+
"size": 1178415,
|
|
595
595
|
"sizes": {
|
|
596
|
-
"javascript":
|
|
596
|
+
"javascript": 1178373,
|
|
597
597
|
"consume-shared": 42
|
|
598
598
|
},
|
|
599
599
|
"names": [],
|
|
@@ -607,7 +607,7 @@
|
|
|
607
607
|
"auxiliaryFiles": [
|
|
608
608
|
"4344.js.map"
|
|
609
609
|
],
|
|
610
|
-
"hash": "
|
|
610
|
+
"hash": "3b9349997ce5942f",
|
|
611
611
|
"childrenByOrder": {}
|
|
612
612
|
},
|
|
613
613
|
{
|
|
@@ -1025,7 +1025,7 @@
|
|
|
1025
1025
|
"auxiliaryFiles": [
|
|
1026
1026
|
"openmrs-esm-billing-app.js.map"
|
|
1027
1027
|
],
|
|
1028
|
-
"hash": "
|
|
1028
|
+
"hash": "dd62187b3788930d",
|
|
1029
1029
|
"childrenByOrder": {}
|
|
1030
1030
|
},
|
|
1031
1031
|
{
|
|
@@ -1236,10 +1236,10 @@
|
|
|
1236
1236
|
"initial": true,
|
|
1237
1237
|
"entry": true,
|
|
1238
1238
|
"recorded": false,
|
|
1239
|
-
"size":
|
|
1239
|
+
"size": 5461869,
|
|
1240
1240
|
"sizes": {
|
|
1241
1241
|
"consume-shared": 210,
|
|
1242
|
-
"javascript":
|
|
1242
|
+
"javascript": 5439213,
|
|
1243
1243
|
"share-init": 336,
|
|
1244
1244
|
"runtime": 22110
|
|
1245
1245
|
},
|
|
@@ -1256,7 +1256,7 @@
|
|
|
1256
1256
|
"auxiliaryFiles": [
|
|
1257
1257
|
"main.js.map"
|
|
1258
1258
|
],
|
|
1259
|
-
"hash": "
|
|
1259
|
+
"hash": "e97dffa3ba5ee3b1",
|
|
1260
1260
|
"childrenByOrder": {}
|
|
1261
1261
|
},
|
|
1262
1262
|
{
|
package/dist/routes.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"webservices.rest":">=2.24.0","fhir2":">=1.2"},"pages":[{"component":"billableServicesHome","route":"billable-services"}],"extensions":[{"component":"billingDashboardLink","name":"billing-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"billing","title":"billing","slot":"billing-dashboard-slot"},"featureFlag":"billing"},{"component":"root","name":"billing-dashboard-root","slot":"billing-dashboard-slot"},{"name":"billing-patient-summary","component":"billingPatientSummary","slot":"patient-chart-billing-dashboard-slot","order":10,"meta":{"columnSpan":4}},{"name":"billing-summary-dashboard-link","component":"billingSummaryDashboardLink","slot":"patient-chart-dashboard-slot","order":11,"meta":{"columns":1,"columnSpan":1,"slot":"patient-chart-billing-dashboard-slot","path":"Billing history"},"featureFlag":"billing"},{"name":"billable-services-app-menu-item","component":"billableServicesAppMenuItem","slot":"app-menu-item-slot","meta":{"name":"Billable Services"}},{"name":"billing-checkin-form","slot":"extra-visit-attribute-slot","component":"billingCheckInForm","featureFlag":"billing"},{"slot":"system-admin-page-card-link-slot","component":"billableServicesCardLink","name":"billable-services-admin-card-link"},{"name":"patient-banner-billing-tags","component":"visitAttributeTags","slot":"patient-banner-tags-slot","order":2},{"name":"billing-home-tiles-ext","slot":"billing-home-tiles-slot","component":"serviceMetrics"}],"modals":[{"name":"add-cash-point-modal","component":"addCashPointModal"},{"name":"add-payment-mode-modal","component":"addPaymentModeModal"},{"name":"delete-payment-mode-modal","component":"deletePaymentModeModal"},{"name":"edit-bill-item-modal","component":"editBillLineItemModal"},{"name":"edit-bill-line-item-modal","component":"editBillLineItemModal"},{"name":"edit-billable-service-modal","component":"editBillableServiceModal"},{"name":"require-billing-modal","component":"requirePaymentModal"}],"workspaces":[{"name":"billing-form-workspace","title":"billingForm","component":"billingFormWorkspace","type":"form"}],"featureFlags":[{"flagName":"billing","label":"Billing module","description":"This feature introduces navigation links on the patient chart and home page to allow accessing the billing module features"}],"version":"1.0.2-pre.
|
|
1
|
+
{"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"webservices.rest":">=2.24.0","fhir2":">=1.2"},"pages":[{"component":"billableServicesHome","route":"billable-services"}],"extensions":[{"component":"billingDashboardLink","name":"billing-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"billing","title":"billing","slot":"billing-dashboard-slot"},"featureFlag":"billing"},{"component":"root","name":"billing-dashboard-root","slot":"billing-dashboard-slot"},{"name":"billing-patient-summary","component":"billingPatientSummary","slot":"patient-chart-billing-dashboard-slot","order":10,"meta":{"columnSpan":4}},{"name":"billing-summary-dashboard-link","component":"billingSummaryDashboardLink","slot":"patient-chart-dashboard-slot","order":11,"meta":{"columns":1,"columnSpan":1,"slot":"patient-chart-billing-dashboard-slot","path":"Billing history"},"featureFlag":"billing"},{"name":"billable-services-app-menu-item","component":"billableServicesAppMenuItem","slot":"app-menu-item-slot","meta":{"name":"Billable Services"}},{"name":"billing-checkin-form","slot":"extra-visit-attribute-slot","component":"billingCheckInForm","featureFlag":"billing"},{"slot":"system-admin-page-card-link-slot","component":"billableServicesCardLink","name":"billable-services-admin-card-link"},{"name":"patient-banner-billing-tags","component":"visitAttributeTags","slot":"patient-banner-tags-slot","order":2},{"name":"billing-home-tiles-ext","slot":"billing-home-tiles-slot","component":"serviceMetrics"}],"modals":[{"name":"add-cash-point-modal","component":"addCashPointModal"},{"name":"add-payment-mode-modal","component":"addPaymentModeModal"},{"name":"delete-payment-mode-modal","component":"deletePaymentModeModal"},{"name":"edit-bill-item-modal","component":"editBillLineItemModal"},{"name":"edit-bill-line-item-modal","component":"editBillLineItemModal"},{"name":"edit-billable-service-modal","component":"editBillableServiceModal"},{"name":"require-billing-modal","component":"requirePaymentModal"}],"workspaces":[{"name":"billing-form-workspace","title":"billingForm","component":"billingFormWorkspace","type":"form"}],"featureFlags":[{"flagName":"billing","label":"Billing module","description":"This feature introduces navigation links on the patient chart and home page to allow accessing the billing module features"}],"version":"1.0.2-pre.859"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import useSWR from 'swr';
|
|
2
2
|
import { type OpenmrsResource, openmrsFetch, restBaseUrl, useOpenmrsFetchAll, useConfig } from '@openmrs/esm-framework';
|
|
3
3
|
import { apiBasePath } from '../constants';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
import type {
|
|
5
|
+
BillableService,
|
|
6
|
+
ConceptSearchResult,
|
|
7
|
+
CreateBillableServicePayload,
|
|
8
|
+
UpdateBillableServicePayload,
|
|
9
9
|
} from '../types';
|
|
10
10
|
import type { BillingConfig } from '../config-schema';
|
|
11
11
|
|
|
@@ -14,7 +14,7 @@ type ResponseObject = {
|
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
export const useBillableServices = () => {
|
|
17
|
-
const url = `${apiBasePath}billableService?v=custom:(uuid,name,shortName,serviceStatus,concept:(uuid,display,name:(name)),serviceType:(display),servicePrices:(uuid,name,price,paymentMode:(uuid,name)))`;
|
|
17
|
+
const url = `${apiBasePath}billableService?v=custom:(uuid,name,shortName,serviceStatus,concept:(uuid,display,name:(name)),serviceType:(display,uuid),servicePrices:(uuid,name,price,paymentMode:(uuid,name)))`;
|
|
18
18
|
const { data, isLoading, isValidating, error, mutate } = useOpenmrsFetchAll<BillableService>(url);
|
|
19
19
|
|
|
20
20
|
return {
|
|
@@ -77,7 +77,7 @@ export const createBillableService = (payload: CreateBillableServicePayload) =>
|
|
|
77
77
|
export function useConceptsSearch(conceptToLookup: string) {
|
|
78
78
|
const conditionsSearchUrl = `${restBaseUrl}/conceptsearch?q=${conceptToLookup}`;
|
|
79
79
|
|
|
80
|
-
const { data, error, isLoading } = useSWR<{ data: { results: Array<
|
|
80
|
+
const { data, error, isLoading } = useSWR<{ data: { results: Array<ConceptSearchResult> } }, Error>(
|
|
81
81
|
conceptToLookup ? conditionsSearchUrl : null,
|
|
82
82
|
openmrsFetch,
|
|
83
83
|
);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import {
|
|
3
3
|
Button,
|
|
4
4
|
ComboBox,
|
|
@@ -13,13 +13,14 @@ import {
|
|
|
13
13
|
TextInput,
|
|
14
14
|
Tile,
|
|
15
15
|
} from '@carbon/react';
|
|
16
|
-
import {
|
|
16
|
+
import { type TFunction } from 'i18next';
|
|
17
17
|
import { Controller, useFieldArray, useForm, useWatch } from 'react-hook-form';
|
|
18
18
|
import { useTranslation } from 'react-i18next';
|
|
19
|
-
import {
|
|
19
|
+
import { Add, TrashCan } from '@carbon/react/icons';
|
|
20
20
|
import { z } from 'zod';
|
|
21
21
|
import { zodResolver } from '@hookform/resolvers/zod';
|
|
22
22
|
import { getCoreTranslation, navigate, ResponsiveWrapper, showSnackbar, useDebounce } from '@openmrs/esm-framework';
|
|
23
|
+
import type { BillableService, ConceptSearchResult, ServicePrice } from '../../types';
|
|
23
24
|
import {
|
|
24
25
|
createBillableService,
|
|
25
26
|
updateBillableService,
|
|
@@ -27,7 +28,6 @@ import {
|
|
|
27
28
|
usePaymentModes,
|
|
28
29
|
useServiceTypes,
|
|
29
30
|
} from '../billable-service.resource';
|
|
30
|
-
import { type BillableService, type ServiceConcept, type ServicePrice } from '../../types';
|
|
31
31
|
import styles from './add-billable-service.scss';
|
|
32
32
|
|
|
33
33
|
interface ServiceType {
|
|
@@ -44,7 +44,7 @@ interface BillableServiceFormData {
|
|
|
44
44
|
name: string;
|
|
45
45
|
shortName?: string;
|
|
46
46
|
serviceType: ServiceType | null;
|
|
47
|
-
concept?:
|
|
47
|
+
concept?: { uuid: string; display: string } | null;
|
|
48
48
|
payment: PaymentModeForm[];
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -130,7 +130,6 @@ const AddBillableService: React.FC<AddBillableServiceProps> = ({
|
|
|
130
130
|
isModal = false,
|
|
131
131
|
}) => {
|
|
132
132
|
const { t } = useTranslation();
|
|
133
|
-
|
|
134
133
|
const { paymentModes, isLoadingPaymentModes } = usePaymentModes();
|
|
135
134
|
const { serviceTypes, isLoadingServiceTypes } = useServiceTypes();
|
|
136
135
|
|
|
@@ -148,10 +147,12 @@ const AddBillableService: React.FC<AddBillableServiceProps> = ({
|
|
|
148
147
|
name: serviceToEdit?.name || '',
|
|
149
148
|
shortName: serviceToEdit?.shortName || '',
|
|
150
149
|
serviceType: serviceToEdit?.serviceType || null,
|
|
151
|
-
concept: serviceToEdit?.concept
|
|
150
|
+
concept: serviceToEdit?.concept
|
|
151
|
+
? { uuid: serviceToEdit.concept.uuid, display: serviceToEdit.concept.display }
|
|
152
|
+
: null,
|
|
152
153
|
payment: serviceToEdit?.servicePrices?.map((servicePrice: ServicePrice) => ({
|
|
153
154
|
paymentMode: servicePrice.paymentMode?.uuid || '',
|
|
154
|
-
price: servicePrice.price ||
|
|
155
|
+
price: servicePrice.price || '',
|
|
155
156
|
})) || [DEFAULT_PAYMENT_OPTION],
|
|
156
157
|
},
|
|
157
158
|
resolver: zodResolver(billableServiceSchema),
|
|
@@ -179,10 +180,12 @@ const AddBillableService: React.FC<AddBillableServiceProps> = ({
|
|
|
179
180
|
name: serviceToEdit.name || '',
|
|
180
181
|
shortName: serviceToEdit.shortName || '',
|
|
181
182
|
serviceType: serviceToEdit.serviceType || null,
|
|
182
|
-
concept: serviceToEdit.concept
|
|
183
|
+
concept: serviceToEdit.concept
|
|
184
|
+
? { uuid: serviceToEdit.concept.uuid, display: serviceToEdit.concept.display }
|
|
185
|
+
: null,
|
|
183
186
|
payment: serviceToEdit.servicePrices.map((payment: ServicePrice) => ({
|
|
184
187
|
paymentMode: payment.paymentMode?.uuid || '',
|
|
185
|
-
price: payment.price ||
|
|
188
|
+
price: payment.price || '',
|
|
186
189
|
})),
|
|
187
190
|
});
|
|
188
191
|
}
|
|
@@ -220,6 +223,10 @@ const AddBillableService: React.FC<AddBillableServiceProps> = ({
|
|
|
220
223
|
kind: 'success',
|
|
221
224
|
});
|
|
222
225
|
|
|
226
|
+
if (serviceToEdit) {
|
|
227
|
+
onClose();
|
|
228
|
+
}
|
|
229
|
+
|
|
223
230
|
if (onServiceUpdated) {
|
|
224
231
|
onServiceUpdated();
|
|
225
232
|
}
|
|
@@ -335,9 +342,12 @@ const AddBillableService: React.FC<AddBillableServiceProps> = ({
|
|
|
335
342
|
<li
|
|
336
343
|
role="menuitem"
|
|
337
344
|
className={styles.service}
|
|
338
|
-
key={searchResult.uuid}
|
|
345
|
+
key={searchResult.concept.uuid}
|
|
339
346
|
onClick={() => {
|
|
340
|
-
setValue('concept',
|
|
347
|
+
setValue('concept', {
|
|
348
|
+
uuid: searchResult.concept.uuid,
|
|
349
|
+
display: searchResult.display,
|
|
350
|
+
});
|
|
341
351
|
setSearchTerm('');
|
|
342
352
|
}}>
|
|
343
353
|
{searchResult.display}
|
|
@@ -349,7 +359,7 @@ const AddBillableService: React.FC<AddBillableServiceProps> = ({
|
|
|
349
359
|
return (
|
|
350
360
|
<Layer>
|
|
351
361
|
<Tile className={styles.emptyResults}>
|
|
352
|
-
<span>{t('noResultsFor', 'No results for {searchTerm}', { searchTerm: debouncedSearchTerm })}</span>
|
|
362
|
+
<span>{t('noResultsFor', 'No results for {{searchTerm}}', { searchTerm: debouncedSearchTerm })}</span>
|
|
353
363
|
</Tile>
|
|
354
364
|
</Layer>
|
|
355
365
|
);
|
|
@@ -412,14 +422,14 @@ const AddBillableService: React.FC<AddBillableServiceProps> = ({
|
|
|
412
422
|
invalid={!!errors?.payment?.[index]?.price}
|
|
413
423
|
invalidText={errors?.payment?.[index]?.price?.message}
|
|
414
424
|
label={t('sellingPrice', 'Selling price')}
|
|
415
|
-
placeholder={t('enterSellingPrice', 'Enter selling price')}
|
|
416
425
|
min={0}
|
|
417
|
-
step={0.01}
|
|
418
|
-
value={field.value ?? ''}
|
|
419
426
|
onChange={(_, { value }) => {
|
|
420
427
|
const numValue = value === '' || value === undefined ? undefined : Number(value);
|
|
421
428
|
field.onChange(numValue);
|
|
422
429
|
}}
|
|
430
|
+
placeholder={t('enterSellingPrice', 'Enter selling price')}
|
|
431
|
+
step={0.01}
|
|
432
|
+
value={field.value ?? ''}
|
|
423
433
|
/>
|
|
424
434
|
</Layer>
|
|
425
435
|
)}
|
|
@@ -53,7 +53,9 @@ const DeletePaymentModeModal: React.FC<DeletePaymentModeModalProps> = ({
|
|
|
53
53
|
<p>{t('confirmDeleteMessage', 'Are you sure you want to delete this payment mode? Proceed cautiously.')}</p>
|
|
54
54
|
{paymentModeName && (
|
|
55
55
|
<p>
|
|
56
|
-
<strong>
|
|
56
|
+
<strong>
|
|
57
|
+
{t('paymentModeNameToDelete', 'Payment Mode Name: {{paymentModeName}}', { paymentModeName })}
|
|
58
|
+
</strong>
|
|
57
59
|
</p>
|
|
58
60
|
)}
|
|
59
61
|
</ModalBody>
|
package/src/types/index.ts
CHANGED
|
@@ -165,16 +165,12 @@ export interface FacilityDetail {
|
|
|
165
165
|
display: string;
|
|
166
166
|
}
|
|
167
167
|
|
|
168
|
-
export type
|
|
168
|
+
export type ConceptSearchResult = {
|
|
169
169
|
uuid: string;
|
|
170
170
|
concept: {
|
|
171
171
|
uuid: string;
|
|
172
172
|
display: string;
|
|
173
173
|
};
|
|
174
|
-
conceptName: {
|
|
175
|
-
uuid: string;
|
|
176
|
-
display: string;
|
|
177
|
-
};
|
|
178
174
|
display: string;
|
|
179
175
|
};
|
|
180
176
|
|
|
@@ -210,7 +206,7 @@ export interface BillableService {
|
|
|
210
206
|
uuid: string;
|
|
211
207
|
display: string;
|
|
212
208
|
};
|
|
213
|
-
concept?:
|
|
209
|
+
concept?: ConceptSearchResult;
|
|
214
210
|
servicePrices: Array<ServicePrice>;
|
|
215
211
|
}
|
|
216
212
|
|
package/translations/en.json
CHANGED
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
"noMatchingBillsToDisplay": "No matching bills to display",
|
|
133
133
|
"noMatchingItemsToDisplay": "No matching items to display",
|
|
134
134
|
"noMatchingServicesToDisplay": "No matching services to display",
|
|
135
|
-
"noResultsFor": "No results for {searchTerm}",
|
|
135
|
+
"noResultsFor": "No results for {{searchTerm}}",
|
|
136
136
|
"number": "Number",
|
|
137
137
|
"ok": "OK",
|
|
138
138
|
"patientBill": "Patient bill",
|
|
@@ -148,10 +148,10 @@
|
|
|
148
148
|
"paymentMode": "Payment mode",
|
|
149
149
|
"paymentModeDeleted": "Payment mode was successfully deleted.",
|
|
150
150
|
"paymentModeHistory": "Payment mode history",
|
|
151
|
-
"paymentModeName": "Payment mode name: {{paymentModeName}}",
|
|
152
151
|
"paymentModeNameLabel": "Payment mode name",
|
|
153
152
|
"paymentModeNamePlaceholder": "For example, Cash, Credit Card",
|
|
154
153
|
"paymentModeNameRequired": "Payment mode name is required",
|
|
154
|
+
"paymentModeNameToDelete": "Payment mode name: {{paymentModeName}}",
|
|
155
155
|
"paymentModeRequired": "Payment mode is required",
|
|
156
156
|
"paymentModeSaved": "Payment mode was successfully saved.",
|
|
157
157
|
"paymentModesConfig": "Payment modes configuration",
|