@digihmis/esm-home-app 1.0.0
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/README.md +5 -0
- package/dist/117.js +1 -0
- package/dist/117.js.map +1 -0
- package/dist/132.js +1 -0
- package/dist/132.js.map +1 -0
- package/dist/137.js +1 -0
- package/dist/137.js.map +1 -0
- package/dist/150.js +1 -0
- package/dist/150.js.map +1 -0
- package/dist/152.js +1 -0
- package/dist/152.js.map +1 -0
- package/dist/209.js +1 -0
- package/dist/209.js.map +1 -0
- package/dist/248.js +1 -0
- package/dist/248.js.map +1 -0
- package/dist/252.js +12 -0
- package/dist/252.js.map +1 -0
- package/dist/317.js +1 -0
- package/dist/317.js.map +1 -0
- package/dist/349.js +1 -0
- package/dist/349.js.map +1 -0
- package/dist/371.js +1 -0
- package/dist/371.js.map +1 -0
- package/dist/378.js +1 -0
- package/dist/378.js.map +1 -0
- package/dist/442.js +1 -0
- package/dist/442.js.map +1 -0
- package/dist/45.js +1 -0
- package/dist/45.js.map +1 -0
- package/dist/466.js +1 -0
- package/dist/466.js.map +1 -0
- package/dist/49.js +1 -0
- package/dist/49.js.map +1 -0
- package/dist/508.js +1 -0
- package/dist/508.js.map +1 -0
- package/dist/567.js +1 -0
- package/dist/567.js.map +1 -0
- package/dist/60.js +1 -0
- package/dist/60.js.map +1 -0
- package/dist/61.js +1 -0
- package/dist/61.js.map +1 -0
- package/dist/689.js +1 -0
- package/dist/689.js.map +1 -0
- package/dist/712.js +1 -0
- package/dist/712.js.map +1 -0
- package/dist/720.js +1 -0
- package/dist/720.js.map +1 -0
- package/dist/742.js +1 -0
- package/dist/742.js.map +1 -0
- package/dist/771.js +1 -0
- package/dist/771.js.map +1 -0
- package/dist/806.js +1 -0
- package/dist/806.js.map +1 -0
- package/dist/912.js +1 -0
- package/dist/912.js.map +1 -0
- package/dist/913.js +1 -0
- package/dist/913.js.map +1 -0
- package/dist/940.js +1 -0
- package/dist/940.js.map +1 -0
- package/dist/987.js +15 -0
- package/dist/987.js.map +1 -0
- package/dist/digihmis-esm-home-app.js +6 -0
- package/dist/digihmis-esm-home-app.js.buildmanifest.json +896 -0
- package/dist/digihmis-esm-home-app.js.map +1 -0
- package/dist/main.js +6 -0
- package/dist/main.js.map +1 -0
- package/dist/routes.json +1 -0
- package/jest.config.js +26 -0
- package/package.json +51 -0
- package/rspack.config.js +1 -0
- package/src/config-schema.ts +358 -0
- package/src/dashboards/administration-dashboard/administration-dashboard.component.tsx +68 -0
- package/src/dashboards/billing-dashboard/billing-dashboard.component.tsx +71 -0
- package/src/dashboards/outpatient-dashboard/outpatient-dashboard.component.tsx +71 -0
- package/src/dashboards/registration-dashboard/registration-dashboard.component.tsx +58 -0
- package/src/dashboards/triage-dashboard/triage-dashboard.component.tsx +72 -0
- package/src/declarations.d.ts +6 -0
- package/src/generic-clock-in-modal/clock-in.scss +41 -0
- package/src/generic-clock-in-modal/generic-clock-in.modal.tsx +295 -0
- package/src/generic-clock-in-modal/generic-clock-in.resource.ts +107 -0
- package/src/generic-clock-in-modal/type/index.ts +45 -0
- package/src/generic-clock-in-modal/util/session-cache.ts +48 -0
- package/src/generic-dashboard/generic-dashboard-view.component.tsx +23 -0
- package/src/generic-dashboard/generic-dashboard-view.scss +5 -0
- package/src/generic-dashboard/generic-dashboard.scss +32 -0
- package/src/home-grid-dashboard/home-grid-dashboard.component.tsx +33 -0
- package/src/home-grid-dashboard/home-grid-dashboard.scss +56 -0
- package/src/index.ts +31 -0
- package/src/module-card/module-card-utils.component.tsx +175 -0
- package/src/module-card/module-card.component.tsx +48 -0
- package/src/module-card/module-card.scss +103 -0
- package/src/provider-banner/page-header.extension.tsx +86 -0
- package/src/provider-banner/page-header.scss +48 -0
- package/src/root.component.tsx +43 -0
- package/src/root.scss +15 -0
- package/src/routes.json +74 -0
- package/src/setup-tests.ts +1 -0
- package/src/side-nav/generic-side-nav.component.tsx +17 -0
- package/src/type/index.ts +5 -0
- package/src/welcome-back-banner/welcome-back-banner.component.tsx +112 -0
- package/src/welcome-back-banner/welcome-back-banner.resource.ts +29 -0
- package/src/welcome-back-banner/welcome-back-banner.scss +123 -0
- package/translations/am.json +33 -0
- package/translations/ar.json +33 -0
- package/translations/en.json +33 -0
- package/translations/es.json +33 -0
- package/translations/fr.json +33 -0
- package/translations/he.json +33 -0
- package/translations/km.json +33 -0
- package/translations/pt.json +33 -0
- package/translations/sw.json +33 -0
- package/translations/vi.json +33 -0
- package/translations/zh.json +33 -0
- package/tsconfig.json +5 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styles from './welcome-back-banner.scss';
|
|
3
|
+
import { Calendar, RuleTest } from '@carbon/react/icons';
|
|
4
|
+
import { Tag } from '@carbon/react';
|
|
5
|
+
import { useTranslation } from 'react-i18next';
|
|
6
|
+
import { useSession } from '@openmrs/esm-framework';
|
|
7
|
+
import capitalize from 'lodash-es/capitalize';
|
|
8
|
+
import { type Attribute, useProviderAttributes } from './welcome-back-banner.resource';
|
|
9
|
+
|
|
10
|
+
const UserBanner: React.FC = () => {
|
|
11
|
+
const { t } = useTranslation();
|
|
12
|
+
const { user, currentProvider } = useSession();
|
|
13
|
+
const userFullName = user?.display;
|
|
14
|
+
const userNameParts = userFullName?.split(' ') || [];
|
|
15
|
+
const currentProviderUuid = currentProvider?.uuid;
|
|
16
|
+
const { providerAttributes } = useProviderAttributes(currentProviderUuid);
|
|
17
|
+
|
|
18
|
+
const getGreeting = (): string => {
|
|
19
|
+
const hour = new Date().getHours();
|
|
20
|
+
if (hour < 12) {
|
|
21
|
+
return t('goodMorning', 'Good Morning');
|
|
22
|
+
}
|
|
23
|
+
if (hour < 17) {
|
|
24
|
+
return t('goodAfternoon', 'Good Afternoon');
|
|
25
|
+
}
|
|
26
|
+
return t('goodEvening', 'Good Evening');
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const getAttributeValue = (attributes: Array<Attribute>, displayName: string): string => {
|
|
30
|
+
const attribute = attributes?.find((attr) => attr.attributeType.display === displayName);
|
|
31
|
+
return attribute?.value || '';
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const getLicenseStatus = (expiryDate: string) => {
|
|
35
|
+
if (!expiryDate || expiryDate === '0000-00-00') {
|
|
36
|
+
return { status: 'unknown', message: t('unlicensed', 'Unlicensed'), tagType: 'magenta' as const };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const today = new Date();
|
|
40
|
+
const expiry = new Date(expiryDate);
|
|
41
|
+
const timeDiff = expiry.getTime() - today.getTime();
|
|
42
|
+
const daysDiff = Math.ceil(timeDiff / (1000 * 3600 * 24));
|
|
43
|
+
|
|
44
|
+
if (daysDiff < 0) {
|
|
45
|
+
return { status: 'expired', message: t('expired', 'Expired'), tagType: 'red' as const };
|
|
46
|
+
} else if (daysDiff <= 30) {
|
|
47
|
+
return { status: 'warning', message: t('expiring', 'Expiring'), tagType: 'blue' as const };
|
|
48
|
+
} else if (daysDiff <= 90) {
|
|
49
|
+
return { status: 'caution', message: t('caution', 'Caution'), tagType: 'teal' as const };
|
|
50
|
+
} else {
|
|
51
|
+
return { status: 'valid', message: t('valid', 'Valid'), tagType: 'green' as const };
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const formatDate = (dateString: string): string => {
|
|
56
|
+
if (!dateString || dateString === '0000-00-00') {
|
|
57
|
+
return '0000-00-00';
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
const date = new Date(dateString);
|
|
61
|
+
if (isNaN(date.getTime())) {
|
|
62
|
+
return '0000-00-00';
|
|
63
|
+
}
|
|
64
|
+
return date.toISOString().split('T')[0];
|
|
65
|
+
} catch {
|
|
66
|
+
return '0000-00-00';
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const hwi = getAttributeValue(providerAttributes?.attributes, 'Practising License Number') || 'NONE';
|
|
71
|
+
const licenseExpiry = getAttributeValue(providerAttributes?.attributes, 'License Expiry Date');
|
|
72
|
+
const formattedExpiry = formatDate(licenseExpiry);
|
|
73
|
+
const licenseStatus = getLicenseStatus(licenseExpiry);
|
|
74
|
+
|
|
75
|
+
const firstName = userNameParts[0] || 'User';
|
|
76
|
+
|
|
77
|
+
return (
|
|
78
|
+
<div className={styles.welcomeBanner}>
|
|
79
|
+
<div className={styles.content}>
|
|
80
|
+
<div className={styles.leftSection}>
|
|
81
|
+
<div className={styles.welcomeContent}>
|
|
82
|
+
<h2 className={styles.greeting}>
|
|
83
|
+
{getGreeting()}, {capitalize(firstName)}!
|
|
84
|
+
</h2>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<div className={styles.rightSection}>
|
|
89
|
+
<div className={styles.medicalInfo}>
|
|
90
|
+
<div className={styles.licenseInfo}>
|
|
91
|
+
<RuleTest className={styles.infoIcon} />
|
|
92
|
+
{t('license', 'License')}: {hwi}
|
|
93
|
+
</div>
|
|
94
|
+
<div className={styles.expiryInfo}>
|
|
95
|
+
<Calendar className={styles.infoIcon} />
|
|
96
|
+
<span className={styles.expiryText}>
|
|
97
|
+
{t('expires', 'Expires')}: {formattedExpiry}
|
|
98
|
+
</span>
|
|
99
|
+
<span className={styles.statusBadge}>
|
|
100
|
+
<Tag size="md" type={licenseStatus.tagType}>
|
|
101
|
+
{licenseStatus.message}
|
|
102
|
+
</Tag>
|
|
103
|
+
</span>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
);
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export default UserBanner;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { FetchResponse, openmrsFetch, restBaseUrl } from '@openmrs/esm-framework';
|
|
2
|
+
import useSWR from 'swr';
|
|
3
|
+
|
|
4
|
+
export interface ProviderAttributesResponse {
|
|
5
|
+
person: Person;
|
|
6
|
+
attributes: Array<Attribute>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface Person {
|
|
10
|
+
display: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface Attribute {
|
|
14
|
+
attributeType: AttributeType;
|
|
15
|
+
value: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface AttributeType {
|
|
19
|
+
display: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const useProviderAttributes = (uuid: string) => {
|
|
23
|
+
const customRepresentation = 'custom:(person:(display),attributes:(attributeType:(display),value))';
|
|
24
|
+
const url = `${restBaseUrl}/provider/${uuid}?v=${customRepresentation}`;
|
|
25
|
+
|
|
26
|
+
const { isLoading, error, data } = useSWR<FetchResponse<ProviderAttributesResponse>>(url, openmrsFetch);
|
|
27
|
+
const providerAttributes = data?.data;
|
|
28
|
+
return { isLoading, error, providerAttributes };
|
|
29
|
+
};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
@use '@carbon/layout';
|
|
2
|
+
@use '@carbon/type';
|
|
3
|
+
@use '@carbon/colors';
|
|
4
|
+
|
|
5
|
+
.welcomeBanner {
|
|
6
|
+
position: relative;
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
padding: layout.$spacing-05 layout.$spacing-05 layout.$spacing-03 layout.$spacing-05;
|
|
9
|
+
background: white;
|
|
10
|
+
margin-top: layout.$spacing-07;
|
|
11
|
+
|
|
12
|
+
:global(.omrs-breakpoint-lt-desktop) & {
|
|
13
|
+
padding: layout.$spacing-04;
|
|
14
|
+
border-radius: layout.$spacing-03;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
:global(.omrs-breakpoint-lt-tablet) & {
|
|
18
|
+
padding: layout.$spacing-04;
|
|
19
|
+
border-radius: layout.$spacing-03;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.content {
|
|
24
|
+
position: relative;
|
|
25
|
+
z-index: 1;
|
|
26
|
+
display: flex;
|
|
27
|
+
align-items: flex-start;
|
|
28
|
+
justify-content: space-between;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.leftSection {
|
|
32
|
+
display: flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
gap: layout.$spacing-04;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.rightSection {
|
|
38
|
+
display: flex;
|
|
39
|
+
flex-direction: column;
|
|
40
|
+
align-items: flex-end;
|
|
41
|
+
gap: layout.$spacing-02;
|
|
42
|
+
}
|
|
43
|
+
.welcomeContent {
|
|
44
|
+
display: flex;
|
|
45
|
+
flex-direction: column;
|
|
46
|
+
gap: layout.$spacing-02;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.greeting {
|
|
50
|
+
@include type.type-style('heading-03');
|
|
51
|
+
color: colors.$gray-80;
|
|
52
|
+
margin: 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.subtitle {
|
|
56
|
+
@include type.type-style('body-01');
|
|
57
|
+
color: colors.$gray-80;
|
|
58
|
+
margin: 0;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.loginInfo,
|
|
62
|
+
.licenseInfo {
|
|
63
|
+
@include type.type-style('caption-01');
|
|
64
|
+
display: flex;
|
|
65
|
+
align-items: center;
|
|
66
|
+
gap: layout.$spacing-02;
|
|
67
|
+
color: colors.$gray-80;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.medicalInfo {
|
|
71
|
+
display: flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
gap: layout.$spacing-04;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.expiryInfo {
|
|
77
|
+
@include type.type-style('caption-01');
|
|
78
|
+
display: flex;
|
|
79
|
+
align-items: center;
|
|
80
|
+
gap: layout.$spacing-02;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.expiryText {
|
|
84
|
+
color: colors.$gray-80;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.infoIcon {
|
|
88
|
+
width: layout.$spacing-04;
|
|
89
|
+
height: layout.$spacing-04;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
:global(.omrs-breakpoint-lt-desktop) {
|
|
93
|
+
.content {
|
|
94
|
+
gap: layout.$spacing-03;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.leftSection {
|
|
98
|
+
gap: layout.$spacing-03;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
:global(.omrs-breakpoint-lt-tablet) {
|
|
103
|
+
.content {
|
|
104
|
+
flex-direction: column;
|
|
105
|
+
gap: layout.$spacing-04;
|
|
106
|
+
align-items: flex-start;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.rightSection {
|
|
110
|
+
align-items: flex-start;
|
|
111
|
+
align-self: stretch;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.medicalInfo {
|
|
115
|
+
flex-direction: column;
|
|
116
|
+
align-items: flex-start;
|
|
117
|
+
gap: layout.$spacing-02;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.expiryInfo {
|
|
121
|
+
flex-wrap: wrap;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"administration": "አስተዳደር",
|
|
3
|
+
"appointments": "ቀጠሮዎች",
|
|
4
|
+
"billing": "የክፍያ አስተዳደር",
|
|
5
|
+
"caution": "ማስጠንቀቂያ",
|
|
6
|
+
"clockIn": "Clock In",
|
|
7
|
+
"dental": "የጥርስ ህክምና",
|
|
8
|
+
"expired": "ጊዜው አልፏል",
|
|
9
|
+
"expires": "ጊዜው ያበቃል",
|
|
10
|
+
"expiring": "ጊዜው እያበቃ ነው",
|
|
11
|
+
"facilityAnalytics": "የተቋም ትንተና",
|
|
12
|
+
"goodAfternoon": "እንደምን አደሩ",
|
|
13
|
+
"goodEvening": "እንደምን አመሹ",
|
|
14
|
+
"goodMorning": "እንደምን አደሩ",
|
|
15
|
+
"inpatient": "ተኝተው የሚታከሙ",
|
|
16
|
+
"inventory": "የእቃ መዝገብ",
|
|
17
|
+
"laboratory": "ላቦራቶሪ",
|
|
18
|
+
"legacyUI": "Legacy UI",
|
|
19
|
+
"license": "ፈቃድ",
|
|
20
|
+
"mch": "የእናትና ህፃን ጤና",
|
|
21
|
+
"outpatient": "ውጭ ታካሚ",
|
|
22
|
+
"pharmacy": "ፋርማሲ",
|
|
23
|
+
"procedures": "ሂደቶች",
|
|
24
|
+
"radiology": "ራዲዮሎጂ",
|
|
25
|
+
"referral": "ሪፈራል",
|
|
26
|
+
"registration": "ምዝገባ",
|
|
27
|
+
"reports": "ሪፖርቶች",
|
|
28
|
+
"specialClinics": "ልዩ ክሊኒኮች",
|
|
29
|
+
"staffManagement": "የሰራተኞች አስተዳደር",
|
|
30
|
+
"triage": "ትሪያጅ",
|
|
31
|
+
"unlicensed": "ፈቃድ የሌለው",
|
|
32
|
+
"valid": "ትክክለኛ"
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"administration": "الإدارة",
|
|
3
|
+
"appointments": "المواعيد",
|
|
4
|
+
"billing": "الفواتير",
|
|
5
|
+
"caution": "تحذير",
|
|
6
|
+
"clockIn": "Clock In",
|
|
7
|
+
"dental": "الأسنان",
|
|
8
|
+
"expired": "منتهي الصلاحية",
|
|
9
|
+
"expires": "تنتهي الصلاحية",
|
|
10
|
+
"expiring": "على وشك الانتهاء",
|
|
11
|
+
"facilityAnalytics": "تحليلات المنشأة",
|
|
12
|
+
"goodAfternoon": "مساء الخير",
|
|
13
|
+
"goodEvening": "مساء الخير",
|
|
14
|
+
"goodMorning": "صباح الخير",
|
|
15
|
+
"inpatient": "مريض داخلي",
|
|
16
|
+
"inventory": "المخزون",
|
|
17
|
+
"laboratory": "المختبر",
|
|
18
|
+
"legacyUI": "Legacy UI",
|
|
19
|
+
"license": "الترخيص",
|
|
20
|
+
"mch": "صحة الأم والطفل",
|
|
21
|
+
"outpatient": "مريض خارجي",
|
|
22
|
+
"pharmacy": "الصيدلية",
|
|
23
|
+
"procedures": "الإجراءات",
|
|
24
|
+
"radiology": "الأشعة",
|
|
25
|
+
"referral": "الإحالة",
|
|
26
|
+
"registration": "التسجيل",
|
|
27
|
+
"reports": "التقارير",
|
|
28
|
+
"specialClinics": "العيادات المتخصصة",
|
|
29
|
+
"staffManagement": "إدارة الموظفين",
|
|
30
|
+
"triage": "الفرز",
|
|
31
|
+
"unlicensed": "غير مرخص",
|
|
32
|
+
"valid": "صالح"
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"administration": "Administration",
|
|
3
|
+
"appointments": "Appointments",
|
|
4
|
+
"billing": "Billing",
|
|
5
|
+
"caution": "Caution",
|
|
6
|
+
"clockIn": "Clock In",
|
|
7
|
+
"dental": "Dental",
|
|
8
|
+
"expired": "Expired",
|
|
9
|
+
"expires": "Expires",
|
|
10
|
+
"expiring": "Expiring",
|
|
11
|
+
"facilityAnalytics": "Facility Analytics",
|
|
12
|
+
"goodAfternoon": "Good Afternoon",
|
|
13
|
+
"goodEvening": "Good Evening",
|
|
14
|
+
"goodMorning": "Good Morning",
|
|
15
|
+
"inpatient": "Inpatient",
|
|
16
|
+
"inventory": "Inventory",
|
|
17
|
+
"laboratory": "Laboratory",
|
|
18
|
+
"legacyUI": "Legacy UI",
|
|
19
|
+
"license": "License",
|
|
20
|
+
"mch": "Maternal Child Health",
|
|
21
|
+
"outpatient": "Outpatient",
|
|
22
|
+
"pharmacy": "Pharmacy",
|
|
23
|
+
"procedures": "Procedures",
|
|
24
|
+
"radiology": "Radiology",
|
|
25
|
+
"referral": "Referral",
|
|
26
|
+
"registration": "Registration",
|
|
27
|
+
"reports": "Reports",
|
|
28
|
+
"specialClinics": "Special Clinics",
|
|
29
|
+
"staffManagement": "Staff Management",
|
|
30
|
+
"triage": "Triage",
|
|
31
|
+
"unlicensed": "Unlicensed",
|
|
32
|
+
"valid": "Valid"
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"administration": "Administración",
|
|
3
|
+
"appointments": "Citas",
|
|
4
|
+
"billing": "Facturación",
|
|
5
|
+
"caution": "Precaución",
|
|
6
|
+
"clockIn": "Clock In",
|
|
7
|
+
"dental": "Dental",
|
|
8
|
+
"expired": "Expirado",
|
|
9
|
+
"expires": "Expira",
|
|
10
|
+
"expiring": "Por Expirar",
|
|
11
|
+
"facilityAnalytics": "Análisis de Instalaciones",
|
|
12
|
+
"goodAfternoon": "Buenas Tardes",
|
|
13
|
+
"goodEvening": "Buenas Noches",
|
|
14
|
+
"goodMorning": "Buenos Días",
|
|
15
|
+
"inpatient": "Paciente Hospitalizado",
|
|
16
|
+
"inventory": "Inventario",
|
|
17
|
+
"laboratory": "Laboratorio",
|
|
18
|
+
"legacyUI": "Legacy UI",
|
|
19
|
+
"license": "Licencia",
|
|
20
|
+
"mch": "Salud Materno Infantil",
|
|
21
|
+
"outpatient": "Paciente Ambulatorio",
|
|
22
|
+
"pharmacy": "Farmacia",
|
|
23
|
+
"procedures": "Procedimientos",
|
|
24
|
+
"radiology": "Radiología",
|
|
25
|
+
"referral": "Referencia",
|
|
26
|
+
"registration": "Registro",
|
|
27
|
+
"reports": "Informes",
|
|
28
|
+
"specialClinics": "Clínicas Especiales",
|
|
29
|
+
"staffManagement": "Gestión de Personal",
|
|
30
|
+
"triage": "Triaje",
|
|
31
|
+
"unlicensed": "Sin Licencia",
|
|
32
|
+
"valid": "Válido"
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"administration": "Administration",
|
|
3
|
+
"appointments": "Rendez-vous",
|
|
4
|
+
"billing": "Facturation",
|
|
5
|
+
"caution": "Attention",
|
|
6
|
+
"clockIn": "Clock In",
|
|
7
|
+
"dental": "Dentaire",
|
|
8
|
+
"expired": "Expiré",
|
|
9
|
+
"expires": "Expire",
|
|
10
|
+
"expiring": "Expire Bientôt",
|
|
11
|
+
"facilityAnalytics": "Analytique des Installations",
|
|
12
|
+
"goodAfternoon": "Bon Après-midi",
|
|
13
|
+
"goodEvening": "Bonsoir",
|
|
14
|
+
"goodMorning": "Bonjour",
|
|
15
|
+
"inpatient": "Patient Hospitalisé",
|
|
16
|
+
"inventory": "Inventaire",
|
|
17
|
+
"laboratory": "Laboratoire",
|
|
18
|
+
"legacyUI": "Legacy UI",
|
|
19
|
+
"license": "Licence",
|
|
20
|
+
"mch": "Santé Maternelle et Infantile",
|
|
21
|
+
"outpatient": "Patient Externe",
|
|
22
|
+
"pharmacy": "Pharmacie",
|
|
23
|
+
"procedures": "Procédures",
|
|
24
|
+
"radiology": "Radiologie",
|
|
25
|
+
"referral": "Référence",
|
|
26
|
+
"registration": "Inscription",
|
|
27
|
+
"reports": "Rapports",
|
|
28
|
+
"specialClinics": "Cliniques Spécialisées",
|
|
29
|
+
"staffManagement": "Gestion du Personnel",
|
|
30
|
+
"triage": "Triage",
|
|
31
|
+
"unlicensed": "Sans Licence",
|
|
32
|
+
"valid": "Valide"
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"administration": "ניהול",
|
|
3
|
+
"appointments": "תורים",
|
|
4
|
+
"billing": "חיוב",
|
|
5
|
+
"caution": "זהירות",
|
|
6
|
+
"clockIn": "Clock In",
|
|
7
|
+
"dental": "רפואת שיניים",
|
|
8
|
+
"expired": "פג תוקף",
|
|
9
|
+
"expires": "פג תוקף ב",
|
|
10
|
+
"expiring": "עומד לפוג",
|
|
11
|
+
"facilityAnalytics": "ניתוח מתקן",
|
|
12
|
+
"goodAfternoon": "אחר צהריים טובים",
|
|
13
|
+
"goodEvening": "ערב טוב",
|
|
14
|
+
"goodMorning": "בוקר טוב",
|
|
15
|
+
"inpatient": "מאושפז",
|
|
16
|
+
"inventory": "מלאי",
|
|
17
|
+
"laboratory": "מעבדה",
|
|
18
|
+
"legacyUI": "Legacy UI",
|
|
19
|
+
"license": "רישיון",
|
|
20
|
+
"mch": "בריאות האם והילד",
|
|
21
|
+
"outpatient": "מרפאת חוץ",
|
|
22
|
+
"pharmacy": "בית מרקחת",
|
|
23
|
+
"procedures": "הליכים",
|
|
24
|
+
"radiology": "רדיולוגיה",
|
|
25
|
+
"referral": "הפניה",
|
|
26
|
+
"registration": "רישום",
|
|
27
|
+
"reports": "דוחות",
|
|
28
|
+
"specialClinics": "מרפאות מיוחדות",
|
|
29
|
+
"staffManagement": "ניהול צוות",
|
|
30
|
+
"triage": "מיון",
|
|
31
|
+
"unlicensed": "ללא רישיון",
|
|
32
|
+
"valid": "תקף"
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"administration": "រដ្ឋបាល",
|
|
3
|
+
"appointments": "ការណាត់ជួប",
|
|
4
|
+
"billing": "ការចេញវិក័យប័ត្រ",
|
|
5
|
+
"caution": "ប្រយ័ត្ន",
|
|
6
|
+
"clockIn": "Clock In",
|
|
7
|
+
"dental": "ធ្មេញ",
|
|
8
|
+
"expired": "ផុតកំណត់",
|
|
9
|
+
"expires": "ផុតកំណត់",
|
|
10
|
+
"expiring": "ជិតផុតកំណត់",
|
|
11
|
+
"facilityAnalytics": "វិភាគមណ្ឌល",
|
|
12
|
+
"goodAfternoon": "ថ្ងៃត្រង់ល្អ",
|
|
13
|
+
"goodEvening": "ល្ងាចល្អ",
|
|
14
|
+
"goodMorning": "អរុណសួស្តី",
|
|
15
|
+
"inpatient": "អ្នកជំងឺស្នាក់នៅ",
|
|
16
|
+
"inventory": "សារពើភណ្ឌ",
|
|
17
|
+
"laboratory": "មន្ទីរពិសោធន៍",
|
|
18
|
+
"legacyUI": "Legacy UI",
|
|
19
|
+
"license": "អាជ្ញាប័ណ្ណ",
|
|
20
|
+
"mch": "សុខភាពម្តាយនិងកូន",
|
|
21
|
+
"outpatient": "អ្នកជំងឺខាងក្រៅ",
|
|
22
|
+
"pharmacy": "ឱសថស្ថាន",
|
|
23
|
+
"procedures": "នីតិវិធី",
|
|
24
|
+
"radiology": "វិទ្យុសកម្ម",
|
|
25
|
+
"referral": "ការបញ្ជូន",
|
|
26
|
+
"registration": "ការចុះឈ្មោះ",
|
|
27
|
+
"reports": "របាយការណ៍",
|
|
28
|
+
"specialClinics": "គ្លីនិកពិសេស",
|
|
29
|
+
"staffManagement": "ការគ្រប់គ្រងបុគ្គលិក",
|
|
30
|
+
"triage": "ការវាយតម្លៃបន្ទាន់",
|
|
31
|
+
"unlicensed": "គ្មានអាជ្ញាប័ណ្ណ",
|
|
32
|
+
"valid": "ត្រឹមត្រូវ"
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"administration": "Administração",
|
|
3
|
+
"appointments": "Consultas",
|
|
4
|
+
"billing": "Faturamento",
|
|
5
|
+
"caution": "Cuidado",
|
|
6
|
+
"clockIn": "Clock In",
|
|
7
|
+
"dental": "Odontologia",
|
|
8
|
+
"expired": "Expirado",
|
|
9
|
+
"expires": "Expira",
|
|
10
|
+
"expiring": "Expirando",
|
|
11
|
+
"facilityAnalytics": "Análise de Instalações",
|
|
12
|
+
"goodAfternoon": "Boa Tarde",
|
|
13
|
+
"goodEvening": "Boa Noite",
|
|
14
|
+
"goodMorning": "Bom Dia",
|
|
15
|
+
"inpatient": "Internado",
|
|
16
|
+
"inventory": "Inventário",
|
|
17
|
+
"laboratory": "Laboratório",
|
|
18
|
+
"legacyUI": "Legacy UI",
|
|
19
|
+
"license": "Licença",
|
|
20
|
+
"mch": "Saúde Materno-Infantil",
|
|
21
|
+
"outpatient": "Ambulatório",
|
|
22
|
+
"pharmacy": "Farmácia",
|
|
23
|
+
"procedures": "Procedimentos",
|
|
24
|
+
"radiology": "Radiologia",
|
|
25
|
+
"referral": "Referência",
|
|
26
|
+
"registration": "Registro",
|
|
27
|
+
"reports": "Relatórios",
|
|
28
|
+
"specialClinics": "Clínicas Especiais",
|
|
29
|
+
"staffManagement": "Gestão de Pessoal",
|
|
30
|
+
"triage": "Triagem",
|
|
31
|
+
"unlicensed": "Sem Licença",
|
|
32
|
+
"valid": "Válido"
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"administration": "Utawala",
|
|
3
|
+
"appointments": "Ratiba za Miadi",
|
|
4
|
+
"billing": "Ukusanyaji wa Malipo",
|
|
5
|
+
"caution": "Onyo",
|
|
6
|
+
"clockIn": "Clock In",
|
|
7
|
+
"dental": "Huduma za Meno",
|
|
8
|
+
"expired": "Imekwisha Muda",
|
|
9
|
+
"expires": "Muda Unaisha",
|
|
10
|
+
"expiring": "Karibu Kuisha",
|
|
11
|
+
"facilityAnalytics": "Uchanganuzi wa Kituo",
|
|
12
|
+
"goodAfternoon": "Habari za Mchana",
|
|
13
|
+
"goodEvening": "Habari za Jioni",
|
|
14
|
+
"goodMorning": "Habari za Asubuhi",
|
|
15
|
+
"inpatient": "Wagonjwa Waliolazwa",
|
|
16
|
+
"inventory": "Ghala la Vifaa",
|
|
17
|
+
"laboratory": "Maabara",
|
|
18
|
+
"legacyUI": "Legacy UI",
|
|
19
|
+
"license": "Leseni",
|
|
20
|
+
"mch": "Afya ya Mama na Mtoto",
|
|
21
|
+
"outpatient": "Wagonjwa wa Nje",
|
|
22
|
+
"pharmacy": "Duka la Dawa",
|
|
23
|
+
"procedures": "Vitendo vya Matibabu",
|
|
24
|
+
"radiology": "Huduma za Eksirei",
|
|
25
|
+
"referral": "Rufaa",
|
|
26
|
+
"registration": "Usajili wa Wagonjwa",
|
|
27
|
+
"reports": "Ripoti",
|
|
28
|
+
"specialClinics": "Kliniki za Kitaalamu",
|
|
29
|
+
"staffManagement": "Usimamizi wa Wafanyakazi",
|
|
30
|
+
"triage": "Upimaji wa Dharura",
|
|
31
|
+
"unlicensed": "Haina Leseni",
|
|
32
|
+
"valid": "Halali"
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"administration": "Quản Trị",
|
|
3
|
+
"appointments": "Lịch Hẹn",
|
|
4
|
+
"billing": "Thanh Toán",
|
|
5
|
+
"caution": "Cảnh Báo",
|
|
6
|
+
"clockIn": "Clock In",
|
|
7
|
+
"dental": "Nha Khoa",
|
|
8
|
+
"expired": "Đã Hết Hạn",
|
|
9
|
+
"expires": "Hết Hạn",
|
|
10
|
+
"expiring": "Sắp Hết Hạn",
|
|
11
|
+
"facilityAnalytics": "Phân Tích Cơ Sở",
|
|
12
|
+
"goodAfternoon": "Chào Buổi Chiều",
|
|
13
|
+
"goodEvening": "Chào Buổi Tối",
|
|
14
|
+
"goodMorning": "Chào Buổi Sáng",
|
|
15
|
+
"inpatient": "Nội Trú",
|
|
16
|
+
"inventory": "Kho",
|
|
17
|
+
"laboratory": "Phòng Xét Nghiệm",
|
|
18
|
+
"legacyUI": "Legacy UI",
|
|
19
|
+
"license": "Giấy Phép",
|
|
20
|
+
"mch": "Sức Khỏe Bà Mẹ và Trẻ Em",
|
|
21
|
+
"outpatient": "Ngoại Trú",
|
|
22
|
+
"pharmacy": "Nhà Thuốc",
|
|
23
|
+
"procedures": "Thủ Tục",
|
|
24
|
+
"radiology": "Chẩn Đoán Hình Ảnh",
|
|
25
|
+
"referral": "Giới Thiệu",
|
|
26
|
+
"registration": "Đăng Ký",
|
|
27
|
+
"reports": "Báo Cáo",
|
|
28
|
+
"specialClinics": "Phòng Khám Chuyên Khoa",
|
|
29
|
+
"staffManagement": "Quản Lý Nhân Viên",
|
|
30
|
+
"triage": "Phân Loại",
|
|
31
|
+
"unlicensed": "Không Có Giấy Phép",
|
|
32
|
+
"valid": "Hợp Lệ"
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"administration": "行政管理",
|
|
3
|
+
"appointments": "预约",
|
|
4
|
+
"billing": "计费",
|
|
5
|
+
"caution": "警告",
|
|
6
|
+
"clockIn": "Clock In",
|
|
7
|
+
"dental": "牙科",
|
|
8
|
+
"expired": "已过期",
|
|
9
|
+
"expires": "到期",
|
|
10
|
+
"expiring": "即将到期",
|
|
11
|
+
"facilityAnalytics": "设施分析",
|
|
12
|
+
"goodAfternoon": "下午好",
|
|
13
|
+
"goodEvening": "晚上好",
|
|
14
|
+
"goodMorning": "早上好",
|
|
15
|
+
"inpatient": "住院患者",
|
|
16
|
+
"inventory": "库存",
|
|
17
|
+
"laboratory": "化验室",
|
|
18
|
+
"legacyUI": "Legacy UI",
|
|
19
|
+
"license": "许可证",
|
|
20
|
+
"mch": "妇幼保健",
|
|
21
|
+
"outpatient": "门诊患者",
|
|
22
|
+
"pharmacy": "药房",
|
|
23
|
+
"procedures": "程序",
|
|
24
|
+
"radiology": "放射科",
|
|
25
|
+
"referral": "转诊",
|
|
26
|
+
"registration": "登记",
|
|
27
|
+
"reports": "报告",
|
|
28
|
+
"specialClinics": "专科诊所",
|
|
29
|
+
"staffManagement": "员工管理",
|
|
30
|
+
"triage": "分诊",
|
|
31
|
+
"unlicensed": "无许可证",
|
|
32
|
+
"valid": "有效"
|
|
33
|
+
}
|