@kenyaemr/esm-pcs-app 5.4.5-pre.1092

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/.turbo/turbo-build.log +6 -0
  2. package/dist/1072.js +1 -0
  3. package/dist/1072.js.map +1 -0
  4. package/dist/1102.js +1 -0
  5. package/dist/1102.js.map +1 -0
  6. package/dist/1105.js +1 -0
  7. package/dist/1105.js.map +1 -0
  8. package/dist/1148.js +1 -0
  9. package/dist/1148.js.map +1 -0
  10. package/dist/1278.js +1 -0
  11. package/dist/1278.js.map +1 -0
  12. package/dist/1442.js +1 -0
  13. package/dist/1442.js.map +1 -0
  14. package/dist/15.js +1 -0
  15. package/dist/15.js.map +1 -0
  16. package/dist/1620.js +1 -0
  17. package/dist/1620.js.map +1 -0
  18. package/dist/1789.js +1 -0
  19. package/dist/1789.js.map +1 -0
  20. package/dist/1818.js +1 -0
  21. package/dist/1818.js.map +1 -0
  22. package/dist/1831.js +1 -0
  23. package/dist/1831.js.map +1 -0
  24. package/dist/1844.js +1 -0
  25. package/dist/1844.js.map +1 -0
  26. package/dist/1854.js +1 -0
  27. package/dist/1854.js.map +1 -0
  28. package/dist/1946.js +1 -0
  29. package/dist/1946.js.map +1 -0
  30. package/dist/2007.js +1 -0
  31. package/dist/2007.js.map +1 -0
  32. package/dist/2115.js +1 -0
  33. package/dist/2115.js.map +1 -0
  34. package/dist/2152.js +1 -0
  35. package/dist/2152.js.map +1 -0
  36. package/dist/2202.js +1 -0
  37. package/dist/2202.js.map +1 -0
  38. package/dist/2394.js +1 -0
  39. package/dist/2394.js.map +1 -0
  40. package/dist/2530.js +1 -0
  41. package/dist/2530.js.map +1 -0
  42. package/dist/2534.js +1 -0
  43. package/dist/2534.js.map +1 -0
  44. package/dist/2537.js +1 -0
  45. package/dist/2537.js.map +1 -0
  46. package/dist/2556.js +1 -0
  47. package/dist/2556.js.map +1 -0
  48. package/dist/2648.js +1 -0
  49. package/dist/2648.js.map +1 -0
  50. package/dist/2795.js +1 -0
  51. package/dist/2795.js.map +1 -0
  52. package/dist/2827.js +1 -0
  53. package/dist/2827.js.map +1 -0
  54. package/dist/2916.js +1 -0
  55. package/dist/2916.js.map +1 -0
  56. package/dist/2924.js +1 -0
  57. package/dist/2924.js.map +1 -0
  58. package/dist/2947.js +1 -0
  59. package/dist/2947.js.map +1 -0
  60. package/dist/3022.js +1 -0
  61. package/dist/3022.js.map +1 -0
  62. package/dist/3285.js +1 -0
  63. package/dist/3285.js.map +1 -0
  64. package/dist/3335.js +1 -0
  65. package/dist/3335.js.map +1 -0
  66. package/dist/3378.js +1 -0
  67. package/dist/3378.js.map +1 -0
  68. package/dist/3381.js +1 -0
  69. package/dist/3381.js.map +1 -0
  70. package/dist/3504.js +1 -0
  71. package/dist/3504.js.map +1 -0
  72. package/dist/3530.js +1 -0
  73. package/dist/3530.js.map +1 -0
  74. package/dist/356.js +1 -0
  75. package/dist/356.js.map +1 -0
  76. package/dist/3569.js +1 -0
  77. package/dist/3569.js.map +1 -0
  78. package/dist/3723.js +1 -0
  79. package/dist/3723.js.map +1 -0
  80. package/dist/3745.js +1 -0
  81. package/dist/3745.js.map +1 -0
  82. package/dist/3813.js +1 -0
  83. package/dist/3813.js.map +1 -0
  84. package/dist/393.js +6 -0
  85. package/dist/393.js.map +1 -0
  86. package/dist/3953.js +1 -0
  87. package/dist/3953.js.map +1 -0
  88. package/dist/3989.js +1 -0
  89. package/dist/3989.js.map +1 -0
  90. package/dist/412.js +1 -0
  91. package/dist/412.js.map +1 -0
  92. package/dist/4178.js +1 -0
  93. package/dist/4178.js.map +1 -0
  94. package/dist/4413.js +1 -0
  95. package/dist/4413.js.map +1 -0
  96. package/dist/4487.js +11 -0
  97. package/dist/4487.js.map +1 -0
  98. package/dist/4537.js +1 -0
  99. package/dist/4537.js.map +1 -0
  100. package/dist/4588.js +1 -0
  101. package/dist/4588.js.map +1 -0
  102. package/dist/4637.js +1 -0
  103. package/dist/4637.js.map +1 -0
  104. package/dist/4650.js +1 -0
  105. package/dist/4650.js.map +1 -0
  106. package/dist/466.js +1 -0
  107. package/dist/466.js.map +1 -0
  108. package/dist/4817.js +1 -0
  109. package/dist/4817.js.map +1 -0
  110. package/dist/4818.js +1 -0
  111. package/dist/4818.js.map +1 -0
  112. package/dist/500.js +1 -0
  113. package/dist/500.js.map +1 -0
  114. package/dist/5086.js +1 -0
  115. package/dist/5086.js.map +1 -0
  116. package/dist/5117.js +1 -0
  117. package/dist/5117.js.map +1 -0
  118. package/dist/5279.js +1 -0
  119. package/dist/5279.js.map +1 -0
  120. package/dist/5366.js +1 -0
  121. package/dist/5366.js.map +1 -0
  122. package/dist/5598.js +1 -0
  123. package/dist/5598.js.map +1 -0
  124. package/dist/5676.js +1 -0
  125. package/dist/5676.js.map +1 -0
  126. package/dist/5731.js +5 -0
  127. package/dist/5731.js.map +1 -0
  128. package/dist/5792.js +1 -0
  129. package/dist/5792.js.map +1 -0
  130. package/dist/5825.js +1 -0
  131. package/dist/5825.js.map +1 -0
  132. package/dist/5932.js +1 -0
  133. package/dist/5932.js.map +1 -0
  134. package/dist/5941.js +1 -0
  135. package/dist/5941.js.map +1 -0
  136. package/dist/5967.js +1 -0
  137. package/dist/5967.js.map +1 -0
  138. package/dist/6104.js +1 -0
  139. package/dist/6104.js.map +1 -0
  140. package/dist/624.js +1 -0
  141. package/dist/624.js.map +1 -0
  142. package/dist/6259.js +1 -0
  143. package/dist/6259.js.map +1 -0
  144. package/dist/6273.js +1 -0
  145. package/dist/6273.js.map +1 -0
  146. package/dist/6337.js +1 -0
  147. package/dist/6337.js.map +1 -0
  148. package/dist/6427.js +1 -0
  149. package/dist/6427.js.map +1 -0
  150. package/dist/6478.js +7 -0
  151. package/dist/6478.js.map +1 -0
  152. package/dist/6508.js +1 -0
  153. package/dist/6508.js.map +1 -0
  154. package/dist/6561.js +1 -0
  155. package/dist/6561.js.map +1 -0
  156. package/dist/6566.js +1 -0
  157. package/dist/6566.js.map +1 -0
  158. package/dist/6567.js +1 -0
  159. package/dist/6567.js.map +1 -0
  160. package/dist/6634.js +1 -0
  161. package/dist/6634.js.map +1 -0
  162. package/dist/7022.js +1 -0
  163. package/dist/7022.js.map +1 -0
  164. package/dist/7085.js +1 -0
  165. package/dist/7085.js.map +1 -0
  166. package/dist/7209.js +1 -0
  167. package/dist/7209.js.map +1 -0
  168. package/dist/7291.js +1 -0
  169. package/dist/7291.js.map +1 -0
  170. package/dist/7360.js +1 -0
  171. package/dist/7360.js.map +1 -0
  172. package/dist/7453.js +1 -0
  173. package/dist/7453.js.map +1 -0
  174. package/dist/7454.js +1 -0
  175. package/dist/7454.js.map +1 -0
  176. package/dist/7478.js +1 -0
  177. package/dist/7478.js.map +1 -0
  178. package/dist/7778.js +1 -0
  179. package/dist/7778.js.map +1 -0
  180. package/dist/7782.js +1 -0
  181. package/dist/7782.js.map +1 -0
  182. package/dist/8028.js +1 -0
  183. package/dist/8028.js.map +1 -0
  184. package/dist/8031.js +1 -0
  185. package/dist/8031.js.map +1 -0
  186. package/dist/8196.js +1 -0
  187. package/dist/8196.js.map +1 -0
  188. package/dist/820.js +1 -0
  189. package/dist/820.js.map +1 -0
  190. package/dist/8240.js +1 -0
  191. package/dist/8240.js.map +1 -0
  192. package/dist/8472.js +1 -0
  193. package/dist/8472.js.map +1 -0
  194. package/dist/8607.js +1 -0
  195. package/dist/8607.js.map +1 -0
  196. package/dist/8793.js +1 -0
  197. package/dist/8793.js.map +1 -0
  198. package/dist/8924.js +1 -0
  199. package/dist/8924.js.map +1 -0
  200. package/dist/8990.js +1 -0
  201. package/dist/8990.js.map +1 -0
  202. package/dist/9060.js +1 -0
  203. package/dist/9060.js.map +1 -0
  204. package/dist/9061.js +1 -0
  205. package/dist/9061.js.map +1 -0
  206. package/dist/9087.js +1 -0
  207. package/dist/9087.js.map +1 -0
  208. package/dist/9165.js +1 -0
  209. package/dist/9165.js.map +1 -0
  210. package/dist/9274.js +1 -0
  211. package/dist/9274.js.map +1 -0
  212. package/dist/9425.js +1 -0
  213. package/dist/9520.js +1 -0
  214. package/dist/9520.js.map +1 -0
  215. package/dist/9547.js +1 -0
  216. package/dist/9547.js.map +1 -0
  217. package/dist/9612.js +1 -0
  218. package/dist/9612.js.map +1 -0
  219. package/dist/9771.js +1 -0
  220. package/dist/9771.js.map +1 -0
  221. package/dist/9774.js +1 -0
  222. package/dist/9774.js.map +1 -0
  223. package/dist/9806.js +1 -0
  224. package/dist/9806.js.map +1 -0
  225. package/dist/9885.js +1 -0
  226. package/dist/9885.js.map +1 -0
  227. package/dist/992.js +1 -0
  228. package/dist/992.js.map +1 -0
  229. package/dist/9941.js +1 -0
  230. package/dist/9941.js.map +1 -0
  231. package/dist/997.js +1 -0
  232. package/dist/997.js.map +1 -0
  233. package/dist/kenyaemr-esm-pcs-app.js +3 -0
  234. package/dist/kenyaemr-esm-pcs-app.js.buildmanifest.json +3173 -0
  235. package/dist/kenyaemr-esm-pcs-app.js.map +1 -0
  236. package/dist/main.js +3 -0
  237. package/dist/main.js.map +1 -0
  238. package/dist/routes.json +1 -0
  239. package/package.json +50 -0
  240. package/rspack.config.js +1 -0
  241. package/src/add-dependant/add-dependant.scss +29 -0
  242. package/src/add-dependant/add-dependant.workspace.test.ts +65 -0
  243. package/src/add-dependant/add-dependant.workspace.tsx +249 -0
  244. package/src/config-schema.ts +67 -0
  245. package/src/declarations.d.ts +2 -0
  246. package/src/empty-svg.component.tsx +565 -0
  247. package/src/index.ts +34 -0
  248. package/src/link-hie-dependant/link-hie-dependant.scss +55 -0
  249. package/src/link-hie-dependant/link-hie-dependant.workspace.tsx +207 -0
  250. package/src/linked/dependant-row.component.test.tsx +134 -0
  251. package/src/linked/dependant-row.component.tsx +122 -0
  252. package/src/linked/dependants-list.component.tsx +60 -0
  253. package/src/linked/linked-participant-body.component.tsx +82 -0
  254. package/src/linked/linked-participant.component.test.tsx +134 -0
  255. package/src/linked/linked-participant.component.tsx +142 -0
  256. package/src/linked/participant-details.component.tsx +89 -0
  257. package/src/linked/use-study-sync-snackbars.ts +41 -0
  258. package/src/modals/delink-participant.modal.tsx +96 -0
  259. package/src/modals/link-dependant.modal.tsx +244 -0
  260. package/src/modals/link-participant.modal.tsx +143 -0
  261. package/src/modals/link-participant.scss +48 -0
  262. package/src/pcs.scss +241 -0
  263. package/src/resources/hie-contacts.ts +61 -0
  264. package/src/resources/identifiers.ts +52 -0
  265. package/src/resources/link-dependant.resource.test.ts +445 -0
  266. package/src/resources/link-dependant.resource.ts +268 -0
  267. package/src/resources/link-participant.resource.test.ts +336 -0
  268. package/src/resources/link-participant.resource.ts +452 -0
  269. package/src/resources/patient-create.resource.ts +296 -0
  270. package/src/resources/patient-search.resource.ts +106 -0
  271. package/src/resources/pcs.resource.test.ts +36 -0
  272. package/src/resources/pcs.resource.ts +182 -0
  273. package/src/resources/use-identifier-type-uuids.ts +38 -0
  274. package/src/routes.json +54 -0
  275. package/src/search/participant-results.component.tsx +96 -0
  276. package/src/search/participant-tile.component.tsx +133 -0
  277. package/src/search/pcs-empty-state.component.tsx +31 -0
  278. package/src/search/pcs-results-skeleton.component.tsx +21 -0
  279. package/src/search/pcs-search.component.test.tsx +169 -0
  280. package/src/search/pcs-search.component.tsx +228 -0
  281. package/src/types/index.ts +140 -0
  282. package/translations/am.json +120 -0
  283. package/translations/en.json +120 -0
  284. package/translations/fr.json +122 -0
  285. package/translations/sw.json +120 -0
  286. package/tsconfig.json +5 -0
@@ -0,0 +1,249 @@
1
+ import {
2
+ Button,
3
+ ButtonSet,
4
+ Column,
5
+ Form,
6
+ InlineNotification,
7
+ RadioButton,
8
+ RadioButtonGroup,
9
+ Row,
10
+ TextInput,
11
+ } from '@carbon/react';
12
+ import { zodResolver } from '@hookform/resolvers/zod';
13
+ import {
14
+ OpenmrsDatePicker,
15
+ ResponsiveWrapper,
16
+ showSnackbar,
17
+ useConfig,
18
+ Workspace2,
19
+ type Workspace2DefinitionProps,
20
+ } from '@openmrs/esm-framework';
21
+ import React, { useEffect, useMemo, useState } from 'react';
22
+ import { Controller, useForm } from 'react-hook-form';
23
+ import { useTranslation } from 'react-i18next';
24
+ import { z } from 'zod';
25
+
26
+ import { type PcsConfig } from '../config-schema';
27
+ import { createDependantWithTemporaryId } from '../resources/link-dependant.resource';
28
+ import styles from './add-dependant.scss';
29
+
30
+ export interface AddDependantWorkspaceProps {
31
+ /** The mother's PCS individual ID — the participant is created against it. */
32
+ motherIndividualId: string;
33
+ onCreated?: () => void;
34
+ }
35
+
36
+ /** The module's create endpoint is for infants, which is why the window is a year wide. */
37
+ const oneYearAgo = () => {
38
+ const date = new Date();
39
+ date.setFullYear(date.getFullYear() - 1);
40
+ return date;
41
+ };
42
+
43
+ export const buildAddDependantSchema = (t: (key: string, fallback: string) => string) =>
44
+ z.object({
45
+ givenName: z.string().trim().min(1, t('givenNameRequired', 'Given name is required')),
46
+ middleName: z.string().trim().optional(),
47
+ familyName: z.string().trim().min(1, t('familyNameRequired', 'Family name is required')),
48
+ dateOfBirth: z
49
+ .date({ required_error: t('dateOfBirthRequired', 'Date of birth is required') })
50
+ .max(new Date(), t('dateOfBirthInFuture', 'Date of birth cannot be in the future'))
51
+ // PCS creates these participants for infants, so anyone older belongs to one of the
52
+ // linking flows rather than this one.
53
+ .min(oneYearAgo(), t('dependantMustBeUnderOne', 'This form is for infants — age cannot exceed one year')),
54
+ sex: z.enum(['M', 'F'], {
55
+ errorMap: () => ({ message: t('sexRequired', 'Sex is required') }),
56
+ }),
57
+ });
58
+
59
+ type AddDependantFormData = z.infer<ReturnType<typeof buildAddDependantSchema>>;
60
+
61
+ const AddDependantWorkspace: React.FC<Workspace2DefinitionProps<AddDependantWorkspaceProps, {}, {}>> = ({
62
+ closeWorkspace,
63
+ workspaceProps,
64
+ }) => {
65
+ const { t } = useTranslation();
66
+
67
+ const { nationalIdUUID, phoneAttributeTypeUUID } = useConfig<PcsConfig>();
68
+ const { motherIndividualId, onCreated } = workspaceProps ?? {};
69
+ const [submitError, setSubmitError] = useState<string | null>(null);
70
+
71
+ const schema = useMemo(() => buildAddDependantSchema(t), [t]);
72
+
73
+ const {
74
+ control,
75
+ handleSubmit,
76
+ formState: { isSubmitting },
77
+ } = useForm<AddDependantFormData>({
78
+ resolver: zodResolver(schema),
79
+ defaultValues: { givenName: '', middleName: '', familyName: '' },
80
+ });
81
+
82
+ const onSubmit = async (data: AddDependantFormData) => {
83
+ if (!motherIndividualId) {
84
+ return;
85
+ }
86
+ setSubmitError(null);
87
+ try {
88
+ const { participant } = await createDependantWithTemporaryId({
89
+ demographics: {
90
+ firstName: data.givenName,
91
+ middleName: data.middleName,
92
+ lastName: data.familyName,
93
+ sex: data.sex,
94
+ dateOfBirth: data.dateOfBirth.toISOString().slice(0, 10),
95
+ },
96
+ motherIndividualId,
97
+ nationalIdUUID,
98
+ phoneAttributeTypeUUID,
99
+ });
100
+
101
+ showSnackbar({
102
+ title: t('dependantAdded', 'Dependant added'),
103
+ subtitle: participant?.individualId
104
+ ? t('dependantAddedSubtitle', 'PCS issued {{individualId}} for this dependant.', {
105
+ individualId: participant.individualId,
106
+ })
107
+ : undefined,
108
+ kind: 'success',
109
+ isLowContrast: true,
110
+ });
111
+
112
+ onCreated?.();
113
+
114
+ closeWorkspace();
115
+ } catch (e: any) {
116
+ setSubmitError(
117
+ e?.responseBody?.error?.message ?? e?.message ?? t('dependantAddFailed', 'The dependant could not be added.'),
118
+ );
119
+ }
120
+ };
121
+
122
+ if (!workspaceProps) {
123
+ return null;
124
+ }
125
+
126
+ return (
127
+ <Workspace2 title={t('addDependant', 'Add dependant')} hasUnsavedChanges={false}>
128
+ <Form onSubmit={handleSubmit(onSubmit)} className={styles.workspaceForm}>
129
+ <Row className={styles.workspaceContent}>
130
+ <Column>
131
+ <Controller
132
+ name="givenName"
133
+ control={control}
134
+ render={({ field, fieldState }) => (
135
+ <TextInput
136
+ id="addDependantGivenName"
137
+ labelText={t('givenName', 'Given name')}
138
+ value={field.value ?? ''}
139
+ onChange={field.onChange}
140
+ invalid={Boolean(fieldState.error)}
141
+ invalidText={fieldState.error?.message}
142
+ />
143
+ )}
144
+ />
145
+ </Column>
146
+
147
+ <Column>
148
+ <Controller
149
+ name="middleName"
150
+ control={control}
151
+ render={({ field, fieldState }) => (
152
+ <TextInput
153
+ id="addDependantMiddleName"
154
+ labelText={t('middleNameOptional', 'Middle name (optional)')}
155
+ value={field.value ?? ''}
156
+ onChange={field.onChange}
157
+ invalid={Boolean(fieldState.error)}
158
+ invalidText={fieldState.error?.message}
159
+ />
160
+ )}
161
+ />
162
+ </Column>
163
+
164
+ <Column>
165
+ <Controller
166
+ name="familyName"
167
+ control={control}
168
+ render={({ field, fieldState }) => (
169
+ <TextInput
170
+ id="addDependantFamilyName"
171
+ labelText={t('familyName', 'Family name')}
172
+ value={field.value ?? ''}
173
+ onChange={field.onChange}
174
+ invalid={Boolean(fieldState.error)}
175
+ invalidText={fieldState.error?.message}
176
+ />
177
+ )}
178
+ />
179
+ </Column>
180
+
181
+ <Column>
182
+ <Controller
183
+ name="dateOfBirth"
184
+ control={control}
185
+ render={({ field, fieldState }) => (
186
+ <ResponsiveWrapper>
187
+ <OpenmrsDatePicker
188
+ {...field}
189
+ id="addDependantDateOfBirth"
190
+ labelText={t('dateOfBirth', 'Date of birth')}
191
+ value={field.value as Date}
192
+ minDate={oneYearAgo()}
193
+ maxDate={new Date()}
194
+ invalid={Boolean(fieldState.error)}
195
+ invalidText={fieldState.error?.message}
196
+ />
197
+ </ResponsiveWrapper>
198
+ )}
199
+ />
200
+ </Column>
201
+
202
+ <Column>
203
+ <Controller
204
+ name="sex"
205
+ control={control}
206
+ render={({ field: { onChange, value }, fieldState }) => (
207
+ <RadioButtonGroup
208
+ legendText={t('sex', 'Sex')}
209
+ orientation="horizontal"
210
+ name="addDependantSex"
211
+ valueSelected={value ?? ''}
212
+ // Load-bearing: without it Carbon's internal state ignores a
213
+ // programmatic change to the selected value.
214
+ key={value ?? 'empty'}
215
+ onChange={(selected) => onChange(selected)}
216
+ invalid={Boolean(fieldState.error)}
217
+ invalidText={fieldState.error?.message}>
218
+ <RadioButton value="F" id="addDependantSexFemale" labelText={t('female', 'Female')} />
219
+ <RadioButton value="M" id="addDependantSexMale" labelText={t('male', 'Male')} />
220
+ </RadioButtonGroup>
221
+ )}
222
+ />
223
+ </Column>
224
+ {submitError && (
225
+ <InlineNotification
226
+ className={styles.notification}
227
+ kind="error"
228
+ lowContrast
229
+ hideCloseButton
230
+ title={t('dependantAddFailedTitle', 'Could not add dependant')}
231
+ subtitle={submitError}
232
+ />
233
+ )}
234
+ </Row>
235
+
236
+ <ButtonSet className={styles.workspaceButtonSet}>
237
+ <Button kind="secondary" onClick={() => closeWorkspace()}>
238
+ {t('cancel', 'Cancel')}
239
+ </Button>
240
+ <Button kind="primary" type="submit" disabled={isSubmitting}>
241
+ {t('save', 'Save')}
242
+ </Button>
243
+ </ButtonSet>
244
+ </Form>
245
+ </Workspace2>
246
+ );
247
+ };
248
+
249
+ export default AddDependantWorkspace;
@@ -0,0 +1,67 @@
1
+ import { Type } from '@openmrs/esm-framework';
2
+
3
+ export const configSchema = {
4
+ pcsIdentifiers: {
5
+ _type: Type.Object,
6
+ _description: 'PBIDS study identifier types.',
7
+ _default: {
8
+ studyParticipantID: 'e65e699e-6b56-4be4-8d8b-14ead2de408d',
9
+ studyTemporaryParticipantID: 'ad7d9813-1bc7-4e7e-b730-20a55f50b8e0',
10
+ },
11
+ },
12
+ pcsAttributeTypes: {
13
+ _type: Type.Object,
14
+ _description: 'PCS study person attribute types. Both are java.lang.Boolean format.',
15
+ _default: {
16
+ pbidsEnrollmentStatus: '4fbf219b-8965-418a-b6d7-53229eeeb18f',
17
+ cardseEnrollmentStatus: 'a49c97f9-a571-47da-88ee-ed2c8558f8f4',
18
+ },
19
+ },
20
+ nationalIdUUID: {
21
+ _type: Type.String,
22
+ _description: 'The patient identifier type UUID for the national ID. Also set in express-workflow.',
23
+ _default: '49af6cdc-7968-4abb-bf46-de10d7f4859f',
24
+ },
25
+ phoneAttributeTypeUUID: {
26
+ _type: Type.String,
27
+ _description: 'The person attribute type UUID for the telephone contact number. Also set in express-workflow.',
28
+ _default: 'b2c38640-2603-4629-aebd-3b54f33f1e3a',
29
+ },
30
+ shaNumberUUID: {
31
+ _type: Type.String,
32
+ _description: 'The patient identifier type UUID for the SHA membership number. Also set in express-workflow.',
33
+ _default: '52c3c0c3-05b8-4b26-930e-2a6a54e14c90',
34
+ },
35
+ passportUUID: {
36
+ _type: Type.String,
37
+ _description: 'The patient identifier type UUID for the passport number. Also set in express-workflow.',
38
+ _default: 'be9beef6-aacc-4e1f-ac4e-5babeaa1e303',
39
+ },
40
+ birthCertificateUUID: {
41
+ _type: Type.String,
42
+ _description: 'The patient identifier type UUID for the birth certificate number. Also set in express-workflow.',
43
+ _default: '68449e5a-8829-44dd-bfef-c9c8cf2cb9b2',
44
+ },
45
+ crIdentificationNumberUUID: {
46
+ _type: Type.String,
47
+ _description: 'The patient identifier type UUID for the client registry (CR) number, the HIE sha-id-number.',
48
+ _default: '24aedd37-b5be-4e08-8311-3721b8d5100d',
49
+ },
50
+ };
51
+
52
+ export interface PcsConfig {
53
+ pcsIdentifiers: {
54
+ studyParticipantID: string;
55
+ studyTemporaryParticipantID: string;
56
+ };
57
+ pcsAttributeTypes: {
58
+ pbidsEnrollmentStatus: string;
59
+ cardseEnrollmentStatus: string;
60
+ };
61
+ nationalIdUUID: string;
62
+ phoneAttributeTypeUUID: string;
63
+ shaNumberUUID: string;
64
+ passportUUID: string;
65
+ birthCertificateUUID: string;
66
+ crIdentificationNumberUUID: string;
67
+ }
@@ -0,0 +1,2 @@
1
+ declare module '*.css';
2
+ declare module '*.scss';