oro-sdk 5.3.6 → 5.5.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/dist/client.d.ts +1 -1
- package/dist/helpers/prescription-refill.d.ts +7 -2
- package/dist/oro-sdk.cjs.development.js +680 -516
- package/dist/oro-sdk.cjs.development.js.map +1 -1
- package/dist/oro-sdk.cjs.production.min.js +1 -1
- package/dist/oro-sdk.cjs.production.min.js.map +1 -1
- package/dist/oro-sdk.esm.js +680 -516
- package/dist/oro-sdk.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/client.ts +7 -2
- package/src/helpers/prescription-refill.ts +74 -15
package/package.json
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
{
|
2
|
-
"version": "5.
|
2
|
+
"version": "5.5.0",
|
3
3
|
"main": "dist/index.js",
|
4
4
|
"typings": "dist/index.d.ts",
|
5
5
|
"files": [
|
@@ -55,7 +55,7 @@
|
|
55
55
|
"form-data": "^4.0.0",
|
56
56
|
"formdata-node": "^4.3.1",
|
57
57
|
"idb-keyval": "^5.0.6",
|
58
|
-
"oro-sdk-apis": "3.
|
58
|
+
"oro-sdk-apis": "3.3.0",
|
59
59
|
"oro-toolbox": "0.0.6",
|
60
60
|
"uuid": "^8.3.2"
|
61
61
|
}
|
package/src/client.ts
CHANGED
@@ -328,9 +328,14 @@ export class OroClient {
|
|
328
328
|
* @param populatedRefillWorkflow
|
329
329
|
* @returns
|
330
330
|
*/
|
331
|
-
public async createRefill(
|
331
|
+
public async createRefill(
|
332
|
+
consult: ConsultRequest,
|
333
|
+
populatedRefillWorkflow: WorkflowData,
|
334
|
+
indexSearch: boolean = true,
|
335
|
+
onProgress?: (progress: number, descriptionKey: string) => void
|
336
|
+
): Promise<Consult> {
|
332
337
|
if (!this.rsa) throw IncompleteAuthentication
|
333
|
-
return createRefill(consult, populatedRefillWorkflow, this)
|
338
|
+
return createRefill(consult, populatedRefillWorkflow, this, indexSearch, onProgress)
|
334
339
|
}
|
335
340
|
|
336
341
|
/**
|
@@ -9,7 +9,7 @@ import {
|
|
9
9
|
Uuid,
|
10
10
|
WorkflowData,
|
11
11
|
} from 'oro-sdk-apis'
|
12
|
-
import { OroClient } from '..'
|
12
|
+
import { buildConsultSearchIndex, OroClient } from '..'
|
13
13
|
import { getOrCreatePatientConsultationUuid } from './consult'
|
14
14
|
|
15
15
|
const MAX_RETRIES = 15
|
@@ -17,7 +17,9 @@ const MAX_RETRIES = 15
|
|
17
17
|
* Placeholder while the workflow interpreter for the refill flows is complete
|
18
18
|
*
|
19
19
|
* Creates a fake workflow in which the workflow data will reside
|
20
|
-
*
|
20
|
+
*
|
21
|
+
* @todo deprecate this function when using workflows and populating them from the app
|
22
|
+
*
|
21
23
|
* @param isTreatmentWorking the value from the `is treatment working` question
|
22
24
|
* @param hasSideEffects the value from the `does the treatment have side effects` question
|
23
25
|
* @param deliveryAddress the provided delivery address
|
@@ -28,19 +30,20 @@ export function getRefillAnswersAsWorkflow(
|
|
28
30
|
isTreatmentWorking: string,
|
29
31
|
hasSideEffects: string,
|
30
32
|
deliveryAddress?: string,
|
31
|
-
pharmacy?: PlaceData
|
33
|
+
pharmacy?: PlaceData,
|
32
34
|
): WorkflowData {
|
33
35
|
let selectedAnswers: SelectedAnswersData = [
|
34
36
|
{
|
35
37
|
['isTreatmentWorking']: isTreatmentWorking,
|
36
|
-
},
|
37
|
-
{
|
38
38
|
['hasSideEffects']: hasSideEffects,
|
39
39
|
},
|
40
40
|
]
|
41
41
|
|
42
|
-
|
43
|
-
if (
|
42
|
+
// appends the delivery address to the first page of the answers if provided
|
43
|
+
if (deliveryAddress) selectedAnswers[0] = { ...selectedAnswers[0], ['deliveryAddress']: deliveryAddress }
|
44
|
+
|
45
|
+
// appends the pharmacy to the first page of the answers if provided
|
46
|
+
if (pharmacy) selectedAnswers[0] = { ...selectedAnswers[0], ['pharmacy']: JSON.stringify(pharmacy) }
|
44
47
|
|
45
48
|
return {
|
46
49
|
id: '32573a20-6f1d-49be-9ad3-b87c58074979',
|
@@ -108,7 +111,6 @@ export function getRefillAnswersAsWorkflow(
|
|
108
111
|
kind: 'online-pharmacy-picker',
|
109
112
|
label: 'Which pharmacy do you want the prescription sent to?',
|
110
113
|
metaCategory: MetadataCategory.Refill,
|
111
|
-
minorLabel: ' (Optional)',
|
112
114
|
summaryLabel: 'Your pharmacy',
|
113
115
|
},
|
114
116
|
youAddress: {
|
@@ -133,20 +135,33 @@ export function getRefillAnswersAsWorkflow(
|
|
133
135
|
export async function createRefill(
|
134
136
|
consultRequest: ConsultRequest,
|
135
137
|
populatedRefillWorkflow: WorkflowData,
|
136
|
-
oroClient: OroClient
|
137
|
-
|
138
|
+
oroClient: OroClient,
|
139
|
+
indexSearch: boolean = true,
|
140
|
+
onProgress?: (
|
141
|
+
progress: number,
|
142
|
+
descriptionKey: string,
|
143
|
+
extraInfo?: { storedImagesNum?: number; totalImagesNum?: number }
|
144
|
+
) => void
|
145
|
+
): Promise<Consult> {
|
138
146
|
let retry = MAX_RETRIES
|
139
147
|
let errorsThrown: Error[] = []
|
140
|
-
|
141
|
-
let newConsult: Consult | undefined
|
148
|
+
let newConsult: Consult | undefined = undefined
|
142
149
|
let lockboxUuid: Uuid | undefined
|
150
|
+
const stepsTotalNum = 6
|
151
|
+
let currentStep: number
|
143
152
|
|
144
153
|
for (; retry > 0; retry--) {
|
145
154
|
try {
|
146
|
-
|
155
|
+
currentStep = 0
|
156
|
+
|
157
|
+
if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'create_consult')
|
158
|
+
// Creating refill consult
|
159
|
+
newConsult = await getOrCreatePatientConsultationUuid(consultRequest, oroClient)
|
147
160
|
|
161
|
+
if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'get_patient_grant')
|
148
162
|
if (!lockboxUuid) lockboxUuid = (await oroClient.getGrants())[0].lockboxUuid
|
149
163
|
|
164
|
+
if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'store_patient_data')
|
150
165
|
await oroClient
|
151
166
|
.getOrInsertJsonData(
|
152
167
|
lockboxUuid!,
|
@@ -160,18 +175,62 @@ export async function createRefill(
|
|
160
175
|
{ withNotification: true }
|
161
176
|
)
|
162
177
|
.catch((err) => {
|
163
|
-
console.error('[SDK: prescription refill] Some errors happened during refill data upload', err)
|
178
|
+
console.error('[SDK: prescription refill request] Some errors happened during refill data upload', err)
|
164
179
|
errorsThrown.push(err)
|
165
180
|
})
|
166
181
|
|
182
|
+
if (indexSearch) {
|
183
|
+
if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'fetching_parent_workflow_data')
|
184
|
+
// raw workflow from parent consultation (contains first and last name of patient)
|
185
|
+
let rawConsultationManifest = await oroClient.getLockboxManifest(lockboxUuid!, { category: MetadataCategory.Raw, consultationId: consultRequest.uuidParent }, false)
|
186
|
+
if (rawConsultationManifest && rawConsultationManifest.length > 0) {
|
187
|
+
let rawConsultation = await oroClient.getJsonData<WorkflowData>(lockboxUuid!, rawConsultationManifest[0].dataUuid)
|
188
|
+
if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'search_indexing')
|
189
|
+
await buildConsultSearchIndex(newConsult, rawConsultation, oroClient).catch((err) => {
|
190
|
+
console.error(
|
191
|
+
'[SDK: prescription refill request] personal information not found or another error occured during search indexing',
|
192
|
+
err
|
193
|
+
)
|
194
|
+
if (retry <= 1) return // this statement is to avoid failing the registration due to the failure in search indexing the consult, this practically implements a soft retry
|
195
|
+
errorsThrown.push(err)
|
196
|
+
})
|
197
|
+
} else {
|
198
|
+
console.error(
|
199
|
+
'[SDK: prescription refill request] parent consultation\'s raw data not found',
|
200
|
+
)
|
201
|
+
errorsThrown.push(Error('RawData Not Found'))
|
202
|
+
}
|
203
|
+
}
|
204
|
+
|
167
205
|
if (errorsThrown.length > 0) throw errorsThrown
|
206
|
+
|
207
|
+
// Deem the consultation as ready
|
168
208
|
await oroClient.consultClient.updateConsultByUUID(newConsult.uuid, {
|
169
209
|
statusMedical: MedicalStatus.New,
|
170
210
|
})
|
211
|
+
|
212
|
+
// if we got through the complete flow, the registration succeeded
|
213
|
+
if (onProgress) onProgress(currentStep++ / stepsTotalNum, 'success')
|
214
|
+
|
215
|
+
await oroClient.cleanIndex()
|
216
|
+
break
|
217
|
+
|
171
218
|
} catch (err) {
|
172
|
-
console.error(`[SDK] Error occured during refill: ${err}, retrying... Retries remaining: ${retry}`)
|
219
|
+
console.error(`[SDK] Error occured during prescription refill request: ${err}, retrying... Retries remaining: ${retry}`)
|
173
220
|
errorsThrown = []
|
174
221
|
continue
|
175
222
|
}
|
176
223
|
}
|
224
|
+
if (retry <= 0) {
|
225
|
+
console.error('[SDK] prescription refill request failed: MAX_RETRIES reached')
|
226
|
+
throw 'RegistrationFailed'
|
227
|
+
}
|
228
|
+
|
229
|
+
if (!newConsult) {
|
230
|
+
console.error('[SDK] prescription refill request failed: MAX_RETRIES reached')
|
231
|
+
throw 'RegistrationFailed'
|
232
|
+
}
|
233
|
+
|
234
|
+
console.log('Successfully Created refill')
|
235
|
+
return newConsult
|
177
236
|
}
|