@ampath/esm-patient-registration-app 6.0.1-pre.7 → 6.0.1-pre.70
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/.turbo/turbo-build.log +23 -24
- package/dist/132.js +1 -0
- package/dist/197.js +1 -0
- package/dist/236.js +1 -0
- package/dist/{735.js.map → 236.js.map} +1 -1
- package/dist/300.js +1 -0
- package/dist/335.js +1 -0
- package/dist/372.js +1 -0
- package/dist/372.js.map +1 -0
- package/dist/41.js +2 -0
- package/dist/41.js.map +1 -0
- package/dist/449.js +1 -0
- package/dist/449.js.map +1 -0
- package/dist/464.js +1 -0
- package/dist/464.js.map +1 -0
- package/dist/495.js +1 -0
- package/dist/495.js.map +1 -0
- package/dist/55.js +1 -0
- package/dist/56.js +1 -0
- package/dist/56.js.map +1 -0
- package/dist/621.js +1 -1
- package/dist/621.js.map +1 -1
- package/dist/629.js +2 -0
- package/dist/629.js.LICENSE.txt +24 -0
- package/dist/629.js.map +1 -0
- package/dist/652.js +1 -0
- package/dist/661.js +1 -0
- package/dist/757.js +1 -1
- package/dist/757.js.map +1 -0
- package/dist/828.js +1 -0
- package/dist/828.js.map +1 -0
- package/dist/830.js +1 -0
- package/dist/830.js.map +1 -0
- package/dist/831.js +2 -0
- package/dist/831.js.map +1 -0
- package/dist/876.js +2 -0
- package/dist/876.js.map +1 -0
- package/dist/879.js +1 -1
- package/dist/913.js +2 -0
- package/dist/{591.js.LICENSE.txt → 913.js.LICENSE.txt} +23 -3
- package/dist/913.js.map +1 -0
- package/dist/927.js +1 -0
- package/dist/927.js.map +1 -0
- package/dist/99.js +1 -0
- package/dist/ampath-esm-patient-registration-app.js +1 -1
- package/dist/ampath-esm-patient-registration-app.js.buildmanifest.json +236 -191
- package/dist/ampath-esm-patient-registration-app.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.LICENSE.txt +0 -32
- package/dist/main.js.map +1 -1
- package/dist/routes.json +1 -1
- package/package.json +6 -9
- package/src/config-schema.ts +19 -10
- package/src/index.ts +11 -4
- package/src/offline.resources.ts +13 -18
- package/src/offline.ts +6 -4
- package/src/patient-photo.extension.tsx +9 -0
- package/src/patient-registration/field/address/custom-address-field.component.tsx +1 -0
- package/src/patient-registration/field/custom-field.component.tsx +6 -0
- package/src/patient-registration/field/dob/dob.component.tsx +17 -14
- package/src/patient-registration/field/field.resource.ts +3 -3
- package/src/patient-registration/field/person-attributes/coded-person-attribute-field.component.tsx +4 -0
- package/src/patient-registration/field/person-attributes/custom-person-attribute-field.component.tsx +56 -0
- package/src/patient-registration/field/person-attributes/person-attribute-field.component.tsx +22 -7
- package/src/patient-registration/field/person-attributes/person-attributes.resource.ts +2 -2
- package/src/patient-registration/field/phone/phone-field.component.tsx +1 -0
- package/src/patient-registration/form-manager.ts +13 -6
- package/src/patient-registration/patient-registration-hooks.ts +91 -9
- package/src/patient-registration/patient-registration.component.tsx +55 -13
- package/src/patient-registration/{patient-registration.resource.test.tsx → patient-registration.resource.testt.tsx} +3 -3
- package/src/patient-registration/patient-registration.resource.ts +15 -75
- package/src/patient-registration/patient-registration.scss +0 -8
- package/src/patient-registration/patient-registration.types.ts +7 -1
- package/src/patient-registration/section/patient-relationships/relationships-section.component.tsx +5 -1
- package/src/patient-registration/section/patient-relationships/relationships.resource.tsx +2 -2
- package/src/patient-verification/assets/counties.json +236 -0
- package/src/patient-verification/assets/verification-assets.ts +11 -0
- package/src/patient-verification/patient-verification-hook.tsx +176 -0
- package/src/patient-verification/patient-verification-utils.ts +179 -0
- package/src/patient-verification/patient-verification.component.tsx +124 -0
- package/src/patient-verification/patient-verification.scss +25 -0
- package/src/patient-verification/verification-modal/confirm-prompt.component.tsx +72 -0
- package/src/patient-verification/verification-modal/empty-prompt.component.tsx +35 -0
- package/src/patient-verification/verification-types.ts +50 -0
- package/src/routes.json +12 -3
- package/translations/am.json +26 -12
- package/translations/ar.json +26 -12
- package/translations/en.json +19 -5
- package/translations/es.json +10 -0
- package/translations/fr.json +6 -0
- package/translations/he.json +18 -0
- package/translations/km.json +18 -0
- package/translations/zh.json +30 -22
- package/translations/zh_CN.json +30 -22
- package/dist/130.js +0 -2
- package/dist/130.js.map +0 -1
- package/dist/152.js +0 -1
- package/dist/152.js.map +0 -1
- package/dist/249.js +0 -2
- package/dist/249.js.LICENSE.txt +0 -46
- package/dist/249.js.map +0 -1
- package/dist/255.js +0 -2
- package/dist/255.js.map +0 -1
- package/dist/271.js +0 -1
- package/dist/303.js +0 -1
- package/dist/303.js.map +0 -1
- package/dist/319.js +0 -1
- package/dist/365.js +0 -1
- package/dist/365.js.map +0 -1
- package/dist/460.js +0 -1
- package/dist/525.js +0 -1
- package/dist/525.js.map +0 -1
- package/dist/537.js +0 -1
- package/dist/537.js.map +0 -1
- package/dist/574.js +0 -1
- package/dist/591.js +0 -2
- package/dist/591.js.map +0 -1
- package/dist/644.js +0 -1
- package/dist/729.js +0 -1
- package/dist/729.js.map +0 -1
- package/dist/735.js +0 -1
- package/dist/784.js +0 -2
- package/dist/784.js.map +0 -1
- package/dist/788.js +0 -1
- package/dist/807.js +0 -1
- package/dist/833.js +0 -1
- package/dist/879.js.map +0 -1
- package/src/patient-registration/field/address/tests/address-hierarchy.test.tsx +0 -214
- package/src/patient-registration/field/address/tests/address-search-component.test.tsx +0 -135
- package/src/patient-registration/field/dob/dob.test.tsx +0 -75
- package/src/patient-registration/field/field.test.tsx +0 -294
- package/src/patient-registration/field/id/id-field.test.tsx +0 -107
- package/src/patient-registration/field/person-attributes/coded-attributes.component.tsx +0 -60
- package/src/patient-registration/field/person-attributes/coded-person-attribute-field.test.tsx +0 -127
- package/src/patient-registration/field/person-attributes/person-attribute-field.test.tsx +0 -187
- package/src/patient-registration/field/person-attributes/text-person-attribute-field.test.tsx +0 -88
- package/src/patient-registration/form-manager.test.ts +0 -67
- package/src/patient-registration/input/basic-input/select/select-input.test.tsx +0 -49
- package/src/patient-registration/input/custom-input/autosuggest/autosuggest.test.tsx +0 -132
- package/src/patient-registration/input/custom-input/identifier/identifier-input.test.tsx +0 -107
- package/src/patient-registration/patient-registration.test.tsx +0 -471
- package/src/patient-registration/section/death-info/death-info-section.test.tsx +0 -64
- package/src/patient-registration/section/demographics/demographics-section.test.tsx +0 -83
- package/src/patient-registration/section/patient-relationships/relationships-section.test.tsx +0 -100
- package/src/patient-verification/client-registry-constants.ts +0 -13
- package/src/patient-verification/client-registry.component.tsx +0 -66
- package/src/patient-verification/client-registry.scss +0 -1
- package/src/patient-verification/utils.tsx +0 -56
- package/src/patient-verification/verification-modal.scss +0 -20
- package/src/patient-verification/verification.component.tsx +0 -48
- package/src/root.test.tsx +0 -32
- package/src/widgets/cancel-patient-edit.test.tsx +0 -27
- package/src/widgets/display-photo.component.tsx +0 -30
- package/src/widgets/display-photo.test.tsx +0 -37
- package/src/widgets/edit-patient-details-button.test.tsx +0 -41
- /package/dist/{784.js.LICENSE.txt → 41.js.LICENSE.txt} +0 -0
- /package/dist/{130.js.LICENSE.txt → 831.js.LICENSE.txt} +0 -0
- /package/dist/{255.js.LICENSE.txt → 876.js.LICENSE.txt} +0 -0
- /package/src/patient-registration/input/custom-input/identifier/{utils.test.ts → utils.testt.ts} +0 -0
- /package/src/widgets/{delete-identifier-confirmation-modal.test.tsx → delete-identifier-confirmation-modal.testt.tsx} +0 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import { Tile, ComboBox, Layer, Button, Search, InlineLoading, InlineNotification } from '@carbon/react';
|
|
4
|
+
import styles from './patient-verification.scss';
|
|
5
|
+
import { countries, verificationIdentifierTypes } from './assets/verification-assets';
|
|
6
|
+
import { searchClientRegistry, useGlobalProperties } from './patient-verification-hook';
|
|
7
|
+
import { showSnackbar, showToast } from '@openmrs/esm-framework';
|
|
8
|
+
import { handleClientRegistryResponse } from './patient-verification-utils';
|
|
9
|
+
import { type FormikProps } from 'formik';
|
|
10
|
+
import { type FormValues } from '../patient-registration/patient-registration.types';
|
|
11
|
+
|
|
12
|
+
interface PatientVerificationProps {
|
|
13
|
+
props: FormikProps<FormValues>;
|
|
14
|
+
setInitialFormValues: React.Dispatch<FormValues>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const PatientVerification: React.FC<PatientVerificationProps> = ({ props }) => {
|
|
18
|
+
const { t } = useTranslation();
|
|
19
|
+
const { data, isLoading, error } = useGlobalProperties();
|
|
20
|
+
const [verificationCriteria, setVerificationCriteria] = useState({
|
|
21
|
+
searchTerm: '',
|
|
22
|
+
identifierType: '',
|
|
23
|
+
countryCode: 'KE',
|
|
24
|
+
});
|
|
25
|
+
const [isLoadingSearch, setIsLoadingSearch] = useState(false);
|
|
26
|
+
|
|
27
|
+
const handleSearch = async () => {
|
|
28
|
+
setIsLoadingSearch(true);
|
|
29
|
+
try {
|
|
30
|
+
const clientRegistryResponse = await searchClientRegistry(
|
|
31
|
+
verificationCriteria.identifierType,
|
|
32
|
+
verificationCriteria.searchTerm,
|
|
33
|
+
props.values.token,
|
|
34
|
+
verificationCriteria.countryCode,
|
|
35
|
+
);
|
|
36
|
+
setIsLoadingSearch(false);
|
|
37
|
+
|
|
38
|
+
handleClientRegistryResponse(clientRegistryResponse, props, verificationCriteria.searchTerm);
|
|
39
|
+
} catch (error) {
|
|
40
|
+
showSnackbar({
|
|
41
|
+
title: 'Client registry error',
|
|
42
|
+
subtitle: `Please reload the registration page and re-try again, if the issue persist contact system administrator`,
|
|
43
|
+
timeoutInMs: 10000,
|
|
44
|
+
kind: 'error',
|
|
45
|
+
isLowContrast: true,
|
|
46
|
+
});
|
|
47
|
+
setIsLoadingSearch(false);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return (
|
|
52
|
+
<div id={'patientVerification'}>
|
|
53
|
+
<h3 className={styles.productiveHeading02} style={{ color: '#161616' }}>
|
|
54
|
+
{t('clientVerificationWithClientRegistry', 'Client verification with client registry')}
|
|
55
|
+
</h3>
|
|
56
|
+
<div style={{ margin: '1rem 0 1rem' }}>
|
|
57
|
+
<Layer>
|
|
58
|
+
{isLoading && <InlineLoading status="active" iconDescription="Loading" description="Loading data..." />}
|
|
59
|
+
</Layer>
|
|
60
|
+
{error && (
|
|
61
|
+
<InlineNotification
|
|
62
|
+
className={styles.errorWrapper}
|
|
63
|
+
aria-label="closes notification"
|
|
64
|
+
kind="error"
|
|
65
|
+
lowContrast
|
|
66
|
+
statusIconDescription="notification"
|
|
67
|
+
subtitle={t(
|
|
68
|
+
'clientRegistryErrorSubtitle',
|
|
69
|
+
'Please proceed with registration contact system admin and try again later',
|
|
70
|
+
)}
|
|
71
|
+
title={t('clientRegistryError', 'Error occurred while reaching the client registry')}
|
|
72
|
+
/>
|
|
73
|
+
)}
|
|
74
|
+
<Tile className={styles.verificationWrapper}>
|
|
75
|
+
<Layer>
|
|
76
|
+
<ComboBox
|
|
77
|
+
ariaLabel={t('selectCountry', 'Select country')}
|
|
78
|
+
id="selectCountry"
|
|
79
|
+
items={countries}
|
|
80
|
+
itemToString={(item) => item?.name ?? ''}
|
|
81
|
+
label="Select country"
|
|
82
|
+
titleText={t('selectCountry', 'Select country')}
|
|
83
|
+
initialSelectedItem={countries[0]}
|
|
84
|
+
onChange={({ selectedItem }) =>
|
|
85
|
+
setVerificationCriteria({ ...verificationCriteria, countryCode: selectedItem?.initials })
|
|
86
|
+
}
|
|
87
|
+
/>
|
|
88
|
+
</Layer>
|
|
89
|
+
<Layer>
|
|
90
|
+
<ComboBox
|
|
91
|
+
ariaLabel={t('selectIdentifierType', 'Select identifier type')}
|
|
92
|
+
id="selectIdentifierType"
|
|
93
|
+
items={verificationIdentifierTypes}
|
|
94
|
+
itemToString={(item) => item?.name ?? ''}
|
|
95
|
+
label="Select identifier type"
|
|
96
|
+
titleText={t('selectIdentifierType', 'Select identifier type')}
|
|
97
|
+
onChange={({ selectedItem }) =>
|
|
98
|
+
setVerificationCriteria({ ...verificationCriteria, identifierType: selectedItem?.value })
|
|
99
|
+
}
|
|
100
|
+
/>
|
|
101
|
+
</Layer>
|
|
102
|
+
<Layer>
|
|
103
|
+
<Search
|
|
104
|
+
id="clientRegistrySearch"
|
|
105
|
+
autoFocus
|
|
106
|
+
placeHolderText={t('searchClientRegistry', 'Search client registry')}
|
|
107
|
+
disabled={!verificationCriteria.identifierType}
|
|
108
|
+
onChange={(event) => setVerificationCriteria({ ...verificationCriteria, searchTerm: event.target.value })}
|
|
109
|
+
/>
|
|
110
|
+
</Layer>
|
|
111
|
+
{!isLoadingSearch ? (
|
|
112
|
+
<Button disabled={!verificationCriteria.identifierType && !isLoading} size="md" onClick={handleSearch}>
|
|
113
|
+
{t('validate', 'Validate')}
|
|
114
|
+
</Button>
|
|
115
|
+
) : (
|
|
116
|
+
<InlineLoading status="active" iconDescription="Loading" description="Searching client registry" />
|
|
117
|
+
)}
|
|
118
|
+
</Tile>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
export default PatientVerification;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
@use '@carbon/colors';
|
|
2
|
+
@import '../patient-registration/patient-registration.scss';
|
|
3
|
+
|
|
4
|
+
/* Desktop */
|
|
5
|
+
:global(.omrs-breakpoint-gt-tablet) {
|
|
6
|
+
.verificationWrapper {
|
|
7
|
+
display: grid;
|
|
8
|
+
grid-template-columns: 1fr 1fr 1fr 1fr;
|
|
9
|
+
column-gap: 0.325rem;
|
|
10
|
+
align-items: flex-end;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Tablet */
|
|
15
|
+
:global(.omrs-breakpoint-lt-desktop) {
|
|
16
|
+
.verificationWrapper {
|
|
17
|
+
row-gap: 0.5rem;
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.errorWrapper {
|
|
24
|
+
margin: 0 0 1rem 0;
|
|
25
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import { Button } from '@carbon/react';
|
|
4
|
+
import { age, ExtensionSlot, formatDate } from '@openmrs/esm-framework';
|
|
5
|
+
import capitalize from 'lodash-es/capitalize';
|
|
6
|
+
import { useFacilityName } from '../patient-verification-hook';
|
|
7
|
+
|
|
8
|
+
const PatientInfo: React.FC<{ label: string; value: string }> = ({ label, value }) => {
|
|
9
|
+
return (
|
|
10
|
+
<div style={{ display: 'grid', gridTemplateColumns: '0.25fr 0.75fr', margin: '0.25rem' }}>
|
|
11
|
+
<span style={{ minWidth: '5rem', fontWeight: 'bold' }}>{label}</span>
|
|
12
|
+
<span>{value}</span>
|
|
13
|
+
</div>
|
|
14
|
+
);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
interface ConfirmPromptProps {
|
|
18
|
+
onConfirm: void;
|
|
19
|
+
close: void;
|
|
20
|
+
patient: any;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const ConfirmPrompt: React.FC<ConfirmPromptProps> = ({ close, onConfirm, patient }) => {
|
|
24
|
+
const { t } = useTranslation();
|
|
25
|
+
return (
|
|
26
|
+
<>
|
|
27
|
+
<div className="cds--modal-header">
|
|
28
|
+
<h3 className="cds--modal-header__heading">
|
|
29
|
+
{t('clientRegistryEmpty', `Patient ${patient?.firstName} ${patient?.lastName} found`)}
|
|
30
|
+
</h3>
|
|
31
|
+
</div>
|
|
32
|
+
<div className="cds--modal-content">
|
|
33
|
+
<p>
|
|
34
|
+
{t(
|
|
35
|
+
'patientDetailsFound',
|
|
36
|
+
'Patient information found in the registry, do you want to use the information to continue with registration?',
|
|
37
|
+
)}
|
|
38
|
+
</p>
|
|
39
|
+
<div style={{ display: 'flex', margin: '1rem' }}>
|
|
40
|
+
<ExtensionSlot
|
|
41
|
+
style={{ display: 'flex', alignItems: 'center' }}
|
|
42
|
+
name="patient-photo-slot"
|
|
43
|
+
state={{ patientName: `${patient?.firstName} ${patient?.lastName}` }}
|
|
44
|
+
/>
|
|
45
|
+
<div style={{ width: '100%', marginLeft: '0.625rem' }}>
|
|
46
|
+
<PatientInfo
|
|
47
|
+
label={t('patientName', 'Patient name')}
|
|
48
|
+
value={`${patient?.firstName} ${patient?.lastName}`}
|
|
49
|
+
/>
|
|
50
|
+
<PatientInfo
|
|
51
|
+
label={t('nationalId', 'National ID')}
|
|
52
|
+
value={patient?.identifications[0]?.identificationNumber}
|
|
53
|
+
/>
|
|
54
|
+
<PatientInfo label={t('age', 'Age')} value={age(patient?.dateOfBirth)} />
|
|
55
|
+
<PatientInfo label={t('dateOfBirth', 'Date of birth')} value={formatDate(new Date(patient?.dateOfBirth))} />
|
|
56
|
+
<PatientInfo label={t('gender', 'Gender')} value={capitalize(patient?.gender)} />
|
|
57
|
+
<PatientInfo label={t('nupi', 'NUPI')} value={patient?.clientNumber} />
|
|
58
|
+
<PatientInfo label={t('shaNumber', 'SHA Number')} value={'--'} />
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
<div className="cds--modal-footer">
|
|
63
|
+
<Button kind="secondary" onClick={close}>
|
|
64
|
+
{t('cancel', 'Cancel')}
|
|
65
|
+
</Button>
|
|
66
|
+
<Button onClick={onConfirm}>{t('useValues', 'Use values')}</Button>
|
|
67
|
+
</div>
|
|
68
|
+
</>
|
|
69
|
+
);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export default ConfirmPrompt;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import { Button } from '@carbon/react';
|
|
4
|
+
|
|
5
|
+
interface EmptyPromptProps {
|
|
6
|
+
onConfirm: void;
|
|
7
|
+
close: void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const EmptyPrompt: React.FC<EmptyPromptProps> = ({ close, onConfirm }) => {
|
|
11
|
+
const { t } = useTranslation();
|
|
12
|
+
return (
|
|
13
|
+
<>
|
|
14
|
+
<div className="cds--modal-header">
|
|
15
|
+
<h3 className="cds--modal-header__heading">{t('clientRegistryEmpty', 'Create & Post Patient')}</h3>
|
|
16
|
+
</div>
|
|
17
|
+
<div className="cds--modal-content">
|
|
18
|
+
<p>
|
|
19
|
+
{t(
|
|
20
|
+
'patientNotFound',
|
|
21
|
+
'The patient records could not be found in Client registry, do you want to continue to create and post patient to registry',
|
|
22
|
+
)}
|
|
23
|
+
</p>
|
|
24
|
+
</div>
|
|
25
|
+
<div className="cds--modal-footer">
|
|
26
|
+
<Button kind="secondary" onClick={close}>
|
|
27
|
+
{t('cancel', 'Cancel')}
|
|
28
|
+
</Button>
|
|
29
|
+
<Button onClick={onConfirm}>{t('continue', 'Continue to registration')}</Button>
|
|
30
|
+
</div>
|
|
31
|
+
</>
|
|
32
|
+
);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export default EmptyPrompt;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export interface ClientIdentification {
|
|
2
|
+
identificationType: string;
|
|
3
|
+
identificationNumber: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
interface ClientContact {
|
|
7
|
+
primaryPhone: string;
|
|
8
|
+
secondaryPhone?: string;
|
|
9
|
+
emailAddress?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface ClientRegistryPatient {
|
|
13
|
+
clientExists: boolean;
|
|
14
|
+
client?: RegistryPatient;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface RegistryPatient {
|
|
18
|
+
clientNumber?: string;
|
|
19
|
+
firstName: string;
|
|
20
|
+
middleName: string;
|
|
21
|
+
lastName: string;
|
|
22
|
+
dateOfBirth: string;
|
|
23
|
+
maritalStatus?: string;
|
|
24
|
+
gender: string;
|
|
25
|
+
occupation?: string;
|
|
26
|
+
religion?: string;
|
|
27
|
+
educationLevel?: string;
|
|
28
|
+
country: string;
|
|
29
|
+
countyOfBirth?: string;
|
|
30
|
+
isAlive: boolean;
|
|
31
|
+
originFacilityKmflCode?: string;
|
|
32
|
+
isOnART?: string;
|
|
33
|
+
nascopCCCNumber?: string;
|
|
34
|
+
residence: {
|
|
35
|
+
county: string;
|
|
36
|
+
subCounty: string;
|
|
37
|
+
ward: string;
|
|
38
|
+
village: string;
|
|
39
|
+
landmark: string;
|
|
40
|
+
address: string;
|
|
41
|
+
};
|
|
42
|
+
identifications: Array<ClientIdentification>;
|
|
43
|
+
contact: ClientContact;
|
|
44
|
+
nextOfKins: Array<{
|
|
45
|
+
name: string;
|
|
46
|
+
relationship: string;
|
|
47
|
+
residence: string;
|
|
48
|
+
contact: ClientContact;
|
|
49
|
+
}>;
|
|
50
|
+
}
|
package/src/routes.json
CHANGED
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"offline": true
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
|
-
"component": "
|
|
35
|
+
"component": "patientPhotoExtension",
|
|
36
36
|
"name": "patient-photo-widget",
|
|
37
37
|
"slot": "patient-photo-slot",
|
|
38
38
|
"online": true,
|
|
@@ -59,8 +59,17 @@
|
|
|
59
59
|
"offline": true
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
|
-
"
|
|
63
|
-
"
|
|
62
|
+
"component": "emptyClientRegistryModal",
|
|
63
|
+
"name": "empty-client-registry-modal",
|
|
64
|
+
"online": true,
|
|
65
|
+
"offline": true
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"component": "confirmClientRegistryModal",
|
|
69
|
+
"name": "confirm-client-registry-modal",
|
|
70
|
+
"online": true,
|
|
71
|
+
"offline": true
|
|
64
72
|
}
|
|
65
73
|
]
|
|
66
74
|
}
|
|
75
|
+
|
package/translations/am.json
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"addRelationshipButtonText": "Add Relationship",
|
|
3
3
|
"addressHeader": "Address",
|
|
4
|
+
"age": "Age",
|
|
4
5
|
"allFieldsRequiredText": "All fields are required unless marked optional",
|
|
5
6
|
"autoGeneratedPlaceholderText": "Auto-generated",
|
|
6
|
-
"birthdayNotInTheFuture": "",
|
|
7
|
-
"birthdayRequired": "",
|
|
7
|
+
"birthdayNotInTheFuture": "Birthday cannot be in the future",
|
|
8
|
+
"birthdayRequired": "Birthday is required",
|
|
8
9
|
"birthFieldLabelText": "Birth",
|
|
9
10
|
"cancel": "Cancel",
|
|
10
11
|
"causeOfDeathInputLabel": "Cause of Death",
|
|
12
|
+
"clientRegistryEmpty": "Create & Post Patient",
|
|
13
|
+
"clientVerificationWithClientRegistry": "Client verification with client registry",
|
|
11
14
|
"closeOverlay": "Close overlay",
|
|
12
15
|
"codedPersonAttributeAnswerSetEmpty": "The coded person attribute field '{{codedPersonAttributeFieldId}}' has been defined with an answer concept set UUID '{{answerConceptSetUuid}}' that does not have any concept answers.",
|
|
13
16
|
"codedPersonAttributeAnswerSetInvalid": "The coded person attribute field '{{codedPersonAttributeFieldId}}' has been defined with an invalid answer concept set UUID '{{answerConceptSetUuid}}'.",
|
|
@@ -15,10 +18,12 @@
|
|
|
15
18
|
"configure": "Configure",
|
|
16
19
|
"configureIdentifiers": "Configure identifiers",
|
|
17
20
|
"contactSection": "Contact Details",
|
|
21
|
+
"continue": "Continue to registration",
|
|
18
22
|
"createNew": "Create New",
|
|
23
|
+
"dateOfBirth": "Date of birth",
|
|
19
24
|
"dateOfBirthLabelText": "Date of Birth",
|
|
20
25
|
"deathDateInputLabel": "Date of Death",
|
|
21
|
-
"deathdayNotInTheFuture": "",
|
|
26
|
+
"deathdayNotInTheFuture": "Death day cannot be in the future",
|
|
22
27
|
"deathSection": "Death Info",
|
|
23
28
|
"deleteIdentifierTooltip": "Delete",
|
|
24
29
|
"deleteRelationshipTooltipText": "Delete",
|
|
@@ -36,34 +41,41 @@
|
|
|
36
41
|
"estimatedAgeInMonthsLabelText": "Estimated age in months",
|
|
37
42
|
"estimatedAgeInYearsLabelText": "Estimated age in years",
|
|
38
43
|
"familyNameLabelText": "Family Name",
|
|
39
|
-
"familyNameRequired": "",
|
|
44
|
+
"familyNameRequired": "Family name is required",
|
|
40
45
|
"female": "Female",
|
|
41
46
|
"fullNameLabelText": "Full Name",
|
|
47
|
+
"gender": "Gender",
|
|
42
48
|
"genderLabelText": "Sex",
|
|
43
|
-
"genderRequired": "",
|
|
44
|
-
"genderUnspecified": "",
|
|
49
|
+
"genderRequired": "Gender is required",
|
|
50
|
+
"genderUnspecified": "Gender is not specified",
|
|
45
51
|
"givenNameLabelText": "First Name",
|
|
46
|
-
"givenNameRequired": "",
|
|
52
|
+
"givenNameRequired": "Given name is required",
|
|
47
53
|
"identifierValueRequired": "Identifier value is required",
|
|
48
54
|
"idFieldLabelText": "Identifiers",
|
|
49
55
|
"IDInstructions": "Select the identifiers you'd like to add for this patient:",
|
|
50
56
|
"incompleteForm": "Incomplete form",
|
|
51
|
-
"invalidEmail": "",
|
|
57
|
+
"invalidEmail": "A valid email has to be given",
|
|
52
58
|
"invalidInput": "Invalid Input",
|
|
53
59
|
"isDeadInputLabel": "Is Dead",
|
|
54
60
|
"jumpTo": "Jump to",
|
|
55
61
|
"male": "Male",
|
|
56
62
|
"middleNameLabelText": "Middle Name",
|
|
57
|
-
"negativeMonths": "",
|
|
58
|
-
"negativeYears": "",
|
|
63
|
+
"negativeMonths": "Negative months",
|
|
64
|
+
"negativeYears": "Negative years",
|
|
59
65
|
"no": "No",
|
|
60
|
-
"numberInNameDubious": "",
|
|
66
|
+
"numberInNameDubious": "Number in name is dubious",
|
|
61
67
|
"obsFieldUnknownDatatype": "Concept for obs field '{{fieldDefinitionId}}' has unknown datatype '{{datatypeName}}'",
|
|
62
68
|
"optional": "optional",
|
|
69
|
+
"originFacilityCode": "Origin facility code",
|
|
70
|
+
"originFacilityName": "Origin facility name",
|
|
63
71
|
"other": "Other",
|
|
64
72
|
"patient": "Patient",
|
|
73
|
+
"patientDetailsFound": "Patient information found in the registry, do you want to use the information to continue with registration?",
|
|
74
|
+
"patientName": "Patient name",
|
|
65
75
|
"patientNameKnown": "Patient's Name is Known?",
|
|
76
|
+
"patientNotFound": "The patient records could not be found in Client registry, do you want to continue to create and post patient to registry",
|
|
66
77
|
"patientRegistrationBreadcrumb": "Patient Registration",
|
|
78
|
+
"postToRegistry": "Post to registry",
|
|
67
79
|
"registerPatient": "Register Patient",
|
|
68
80
|
"registerPatientSuccessSnackbarSubtitle": "The patient can now be found by searching for them using their name or ID number",
|
|
69
81
|
"registerPatientSuccessSnackbarTitle": "New Patient Created",
|
|
@@ -81,6 +93,8 @@
|
|
|
81
93
|
"searchAddress": "Search address",
|
|
82
94
|
"searchIdentifierPlaceholder": "Search identifier",
|
|
83
95
|
"selectAnOption": "Select an option",
|
|
96
|
+
"selectCountry": "Select country",
|
|
97
|
+
"selectIdentifierType": "Select identifier type",
|
|
84
98
|
"sexFieldLabelText": "Sex",
|
|
85
99
|
"source": "Source",
|
|
86
100
|
"stroke": "Stroke",
|
|
@@ -92,6 +106,6 @@
|
|
|
92
106
|
"updatePatientErrorSnackbarTitle": "Patient Details Update Failed",
|
|
93
107
|
"updatePatientSuccessSnackbarSubtitle": "The patient's information has been successfully updated",
|
|
94
108
|
"updatePatientSuccessSnackbarTitle": "Patient Details Updated",
|
|
95
|
-
"yearsEstimateRequired": "",
|
|
109
|
+
"yearsEstimateRequired": "Years estimate required",
|
|
96
110
|
"yes": "Yes"
|
|
97
111
|
}
|
package/translations/ar.json
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"addRelationshipButtonText": "أضف علاقة",
|
|
3
3
|
"addressHeader": "العنوان",
|
|
4
|
+
"age": "Age",
|
|
4
5
|
"allFieldsRequiredText": "جميع الحقول مطلوبة ما لم يتم التأشير عليها بأنها اختيارية",
|
|
5
6
|
"autoGeneratedPlaceholderText": "تم إنشاؤه تلقائيًا",
|
|
6
|
-
"birthdayNotInTheFuture": "",
|
|
7
|
-
"birthdayRequired": "",
|
|
7
|
+
"birthdayNotInTheFuture": "Birthday cannot be in the future",
|
|
8
|
+
"birthdayRequired": "Birthday is required",
|
|
8
9
|
"birthFieldLabelText": "الميلاد",
|
|
9
10
|
"cancel": "إلغاء",
|
|
10
11
|
"causeOfDeathInputLabel": "سبب الوفاة",
|
|
12
|
+
"clientRegistryEmpty": "Create & Post Patient",
|
|
13
|
+
"clientVerificationWithClientRegistry": "Client verification with client registry",
|
|
11
14
|
"closeOverlay": "Close overlay",
|
|
12
15
|
"codedPersonAttributeAnswerSetEmpty": "The coded person attribute field '{{codedPersonAttributeFieldId}}' has been defined with an answer concept set UUID '{{answerConceptSetUuid}}' that does not have any concept answers.",
|
|
13
16
|
"codedPersonAttributeAnswerSetInvalid": "The coded person attribute field '{{codedPersonAttributeFieldId}}' has been defined with an invalid answer concept set UUID '{{answerConceptSetUuid}}'.",
|
|
@@ -15,10 +18,12 @@
|
|
|
15
18
|
"configure": "تكوين",
|
|
16
19
|
"configureIdentifiers": "Configure identifiers",
|
|
17
20
|
"contactSection": "تفاصيل الاتصال",
|
|
21
|
+
"continue": "Continue to registration",
|
|
18
22
|
"createNew": "أنشئ جديد",
|
|
23
|
+
"dateOfBirth": "Date of birth",
|
|
19
24
|
"dateOfBirthLabelText": "تاريخ الميلاد",
|
|
20
25
|
"deathDateInputLabel": "تاريخ الوفاة",
|
|
21
|
-
"deathdayNotInTheFuture": "",
|
|
26
|
+
"deathdayNotInTheFuture": "Death day cannot be in the future",
|
|
22
27
|
"deathSection": "معلومات الوفاة",
|
|
23
28
|
"deleteIdentifierTooltip": "حذف",
|
|
24
29
|
"deleteRelationshipTooltipText": "حذف",
|
|
@@ -36,34 +41,41 @@
|
|
|
36
41
|
"estimatedAgeInMonthsLabelText": "العمر المقدر بالشهور",
|
|
37
42
|
"estimatedAgeInYearsLabelText": "العمر المقدر بالسنوات",
|
|
38
43
|
"familyNameLabelText": "اسم العائلة",
|
|
39
|
-
"familyNameRequired": "",
|
|
44
|
+
"familyNameRequired": "Family name is required",
|
|
40
45
|
"female": "أنثى",
|
|
41
46
|
"fullNameLabelText": "الاسم الكامل",
|
|
47
|
+
"gender": "Gender",
|
|
42
48
|
"genderLabelText": "الجنس",
|
|
43
|
-
"genderRequired": "",
|
|
44
|
-
"genderUnspecified": "",
|
|
49
|
+
"genderRequired": "Gender is required",
|
|
50
|
+
"genderUnspecified": "Gender is not specified",
|
|
45
51
|
"givenNameLabelText": "الاسم الأول",
|
|
46
|
-
"givenNameRequired": "",
|
|
52
|
+
"givenNameRequired": "Given name is required",
|
|
47
53
|
"identifierValueRequired": "قيمة المعرف مطلوبة",
|
|
48
54
|
"idFieldLabelText": "المعرفات",
|
|
49
55
|
"IDInstructions": "Select the identifiers you'd like to add for this patient:",
|
|
50
56
|
"incompleteForm": "نموذج غير مكتمل",
|
|
51
|
-
"invalidEmail": "",
|
|
57
|
+
"invalidEmail": "A valid email has to be given",
|
|
52
58
|
"invalidInput": "إدخال غير صالح",
|
|
53
59
|
"isDeadInputLabel": "هل المريض متوفى؟",
|
|
54
60
|
"jumpTo": "اذهب إلى",
|
|
55
61
|
"male": "ذكر",
|
|
56
62
|
"middleNameLabelText": "الاسم الأوسط",
|
|
57
|
-
"negativeMonths": "",
|
|
58
|
-
"negativeYears": "",
|
|
63
|
+
"negativeMonths": "Negative months",
|
|
64
|
+
"negativeYears": "Negative years",
|
|
59
65
|
"no": "لا",
|
|
60
|
-
"numberInNameDubious": "",
|
|
66
|
+
"numberInNameDubious": "Number in name is dubious",
|
|
61
67
|
"obsFieldUnknownDatatype": "Concept for obs field '{{fieldDefinitionId}}' has unknown datatype '{{datatypeName}}'",
|
|
62
68
|
"optional": "اختياري",
|
|
69
|
+
"originFacilityCode": "Origin facility code",
|
|
70
|
+
"originFacilityName": "Origin facility name",
|
|
63
71
|
"other": "آخر",
|
|
64
72
|
"patient": "المريض",
|
|
73
|
+
"patientDetailsFound": "Patient information found in the registry, do you want to use the information to continue with registration?",
|
|
74
|
+
"patientName": "Patient name",
|
|
65
75
|
"patientNameKnown": "هل اسم المريض معروف؟",
|
|
76
|
+
"patientNotFound": "The patient records could not be found in Client registry, do you want to continue to create and post patient to registry",
|
|
66
77
|
"patientRegistrationBreadcrumb": "Patient Registration",
|
|
78
|
+
"postToRegistry": "Post to registry",
|
|
67
79
|
"registerPatient": "تسجيل المريض",
|
|
68
80
|
"registerPatientSuccessSnackbarSubtitle": "The patient can now be found by searching for them using their name or ID number",
|
|
69
81
|
"registerPatientSuccessSnackbarTitle": "New Patient Created",
|
|
@@ -81,6 +93,8 @@
|
|
|
81
93
|
"searchAddress": "ابحث عن العنوان",
|
|
82
94
|
"searchIdentifierPlaceholder": "Search identifier",
|
|
83
95
|
"selectAnOption": "اختر خيارًا",
|
|
96
|
+
"selectCountry": "Select country",
|
|
97
|
+
"selectIdentifierType": "Select identifier type",
|
|
84
98
|
"sexFieldLabelText": "الجنس",
|
|
85
99
|
"source": "Source",
|
|
86
100
|
"stroke": "جلطة",
|
|
@@ -92,6 +106,6 @@
|
|
|
92
106
|
"updatePatientErrorSnackbarTitle": "Patient Details Update Failed",
|
|
93
107
|
"updatePatientSuccessSnackbarSubtitle": "The patient's information has been successfully updated",
|
|
94
108
|
"updatePatientSuccessSnackbarTitle": "Patient Details Updated",
|
|
95
|
-
"yearsEstimateRequired": "",
|
|
109
|
+
"yearsEstimateRequired": "Years estimate required",
|
|
96
110
|
"yes": "نعم"
|
|
97
111
|
}
|
package/translations/en.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"addRelationshipButtonText": "Add Relationship",
|
|
3
3
|
"addressHeader": "Address",
|
|
4
|
+
"age": "Age",
|
|
4
5
|
"allFieldsRequiredText": "All fields are required unless marked optional",
|
|
5
6
|
"autoGeneratedPlaceholderText": "Auto-generated",
|
|
6
7
|
"birthdayNotInTheFuture": "Birthday cannot be in the future",
|
|
@@ -8,7 +9,10 @@
|
|
|
8
9
|
"birthFieldLabelText": "Birth",
|
|
9
10
|
"cancel": "Cancel",
|
|
10
11
|
"causeOfDeathInputLabel": "Cause of Death",
|
|
11
|
-
"
|
|
12
|
+
"clientRegistryEmpty": "Create & Post Patient",
|
|
13
|
+
"clientRegistryError": "Error occurred while reaching the client registry",
|
|
14
|
+
"clientRegistryErrorSubtitle": "Please proceed with registration contact system admin and try again later",
|
|
15
|
+
"clientVerificationWithClientRegistry": "Client verification with client registry",
|
|
12
16
|
"closeOverlay": "Close overlay",
|
|
13
17
|
"codedPersonAttributeAnswerSetEmpty": "The coded person attribute field '{{codedPersonAttributeFieldId}}' has been defined with an answer concept set UUID '{{answerConceptSetUuid}}' that does not have any concept answers.",
|
|
14
18
|
"codedPersonAttributeAnswerSetInvalid": "The coded person attribute field '{{codedPersonAttributeFieldId}}' has been defined with an invalid answer concept set UUID '{{answerConceptSetUuid}}'.",
|
|
@@ -16,8 +20,9 @@
|
|
|
16
20
|
"configure": "Configure",
|
|
17
21
|
"configureIdentifiers": "Configure identifiers",
|
|
18
22
|
"contactSection": "Contact Details",
|
|
19
|
-
"
|
|
23
|
+
"continue": "Continue",
|
|
20
24
|
"createNew": "Create New",
|
|
25
|
+
"dateOfBirth": "Date of birth",
|
|
21
26
|
"dateOfBirthLabelText": "Date of Birth",
|
|
22
27
|
"deathDateInputLabel": "Date of Death",
|
|
23
28
|
"deathdayNotInTheFuture": "Death day cannot be in the future",
|
|
@@ -57,17 +62,22 @@
|
|
|
57
62
|
"jumpTo": "Jump to",
|
|
58
63
|
"male": "Male",
|
|
59
64
|
"middleNameLabelText": "Middle Name",
|
|
65
|
+
"nationalId": "National ID",
|
|
60
66
|
"negativeMonths": "Negative months",
|
|
61
67
|
"negativeYears": "Negative years",
|
|
62
68
|
"no": "No",
|
|
63
69
|
"numberInNameDubious": "Number in name is dubious",
|
|
70
|
+
"nupi": "NUPI",
|
|
64
71
|
"obsFieldUnknownDatatype": "Concept for obs field '{{fieldDefinitionId}}' has unknown datatype '{{datatypeName}}'",
|
|
65
72
|
"optional": "optional",
|
|
66
73
|
"other": "Other",
|
|
67
74
|
"patient": "Patient",
|
|
75
|
+
"patientDetailsFound": "Patient information found in the registry, do you want to use the information to continue with registration?",
|
|
76
|
+
"patientName": "Patient name",
|
|
68
77
|
"patientNameKnown": "Patient's Name is Known?",
|
|
78
|
+
"patientNotFound": "The patient records could not be found in Client registry, do you want to continue to create and post patient to registry",
|
|
69
79
|
"patientRegistrationBreadcrumb": "Patient Registration",
|
|
70
|
-
"
|
|
80
|
+
"postToRegistry": "Post to registry",
|
|
71
81
|
"registerPatient": "Register Patient",
|
|
72
82
|
"registerPatientSuccessSnackbarSubtitle": "The patient can now be found by searching for them using their name or ID number",
|
|
73
83
|
"registerPatientSuccessSnackbarTitle": "New Patient Created",
|
|
@@ -83,10 +93,13 @@
|
|
|
83
93
|
"resetIdentifierTooltip": "Reset",
|
|
84
94
|
"restoreRelationshipActionButton": "Undo",
|
|
85
95
|
"searchAddress": "Search address",
|
|
96
|
+
"searchClientRegistry": "Search client registry",
|
|
86
97
|
"searchIdentifierPlaceholder": "Search identifier",
|
|
87
|
-
"searchRegistry": "Search Registry",
|
|
88
98
|
"selectAnOption": "Select an option",
|
|
99
|
+
"selectCountry": "Select country",
|
|
100
|
+
"selectIdentifierType": "Select identifier type",
|
|
89
101
|
"sexFieldLabelText": "Sex",
|
|
102
|
+
"shaNumber": "SHA Number",
|
|
90
103
|
"source": "Source",
|
|
91
104
|
"stroke": "Stroke",
|
|
92
105
|
"submitting": "Submitting",
|
|
@@ -97,7 +110,8 @@
|
|
|
97
110
|
"updatePatientErrorSnackbarTitle": "Patient Details Update Failed",
|
|
98
111
|
"updatePatientSuccessSnackbarSubtitle": "The patient's information has been successfully updated",
|
|
99
112
|
"updatePatientSuccessSnackbarTitle": "Patient Details Updated",
|
|
100
|
-
"useValues": "Use
|
|
113
|
+
"useValues": "Use values",
|
|
114
|
+
"validate": "Validate",
|
|
101
115
|
"yearsEstimateRequired": "Years estimate required",
|
|
102
116
|
"yes": "Yes"
|
|
103
117
|
}
|