@unite-us/app-create-referral 0.15.101 → 0.15.103
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/__testUtils__/mockData/mockPrograms.js +58 -0
- package/dist/__testUtils__/mockData/mockPrograms.js.map +1 -1
- package/dist/__testUtils__/mockData/utils.js +150 -90
- package/dist/__testUtils__/mockData/utils.js.map +1 -1
- package/dist/components/NavButtons.js +17 -5
- package/dist/components/NavButtons.js.map +1 -1
- package/dist/pages/builder/ReferralBuilder.js +16 -5
- package/dist/pages/builder/ReferralBuilder.js.map +1 -1
- package/dist/pages/builder/__tests__/NonSensitiveGroupedPrograms.test.js +11 -2
- package/dist/pages/builder/__tests__/NonSensitiveGroupedPrograms.test.js.map +1 -1
- package/dist/pages/review/Review.js +11 -4
- package/dist/pages/review/Review.js.map +1 -1
- package/dist/pages/supporting-info/SupportingInfo.js +22 -13
- package/dist/pages/supporting-info/SupportingInfo.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
1
4
|
import { programsMap } from './mockPrograms';
|
|
2
5
|
import { unlistedProgramsMap } from './mockUnlistedPrograms';
|
|
3
6
|
import { providersMap } from './mockProviders';
|
|
@@ -122,120 +125,176 @@ const getSensitiveAndNonSensitivePrograms = _ref5 => {
|
|
|
122
125
|
}).slice(0, programCount - sensitiveProviderCount);
|
|
123
126
|
return [...nonSensitivePrograms, ...sensitivePrograms];
|
|
124
127
|
};
|
|
125
|
-
const
|
|
126
|
-
|
|
128
|
+
const distributePrograms = (type1Programs, type2Programs, programCount) => {
|
|
129
|
+
const maxPerType = Math.floor(programCount / 2);
|
|
130
|
+
const selectedType1 = type1Programs.slice(0, maxPerType);
|
|
131
|
+
const selectedType2 = type2Programs.slice(0, maxPerType);
|
|
132
|
+
const remaining = programCount - selectedType1.length - selectedType2.length;
|
|
133
|
+
if (remaining > 0) {
|
|
134
|
+
const extraType1 = type1Programs.slice(selectedType1.length, selectedType1.length + remaining);
|
|
135
|
+
selectedType1.push(...extraType1);
|
|
136
|
+
const stillRemaining = remaining - extraType1.length;
|
|
137
|
+
if (stillRemaining > 0) {
|
|
138
|
+
selectedType2.push(...type2Programs.slice(selectedType2.length, selectedType2.length + stillRemaining));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return compact([...selectedType1, ...selectedType2]);
|
|
142
|
+
};
|
|
143
|
+
const applyPlatformDistribution = (filteredPrograms, programCount) => {
|
|
144
|
+
const onPlatform = filteredPrograms.filter(program => program.attributes.receiving_referrals);
|
|
145
|
+
const offPlatform = filteredPrograms.filter(program => !program.attributes.receiving_referrals);
|
|
146
|
+
return distributePrograms(onPlatform, offPlatform, programCount);
|
|
147
|
+
};
|
|
148
|
+
const applyCCDistribution = (filteredPrograms, programCount) => {
|
|
149
|
+
const ccPrograms = getCCOrNonCCPrograms({
|
|
127
150
|
filteredPrograms,
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
151
|
+
providerType: 'coordination_center'
|
|
152
|
+
});
|
|
153
|
+
const nonCCPrograms = getCCOrNonCCPrograms({
|
|
154
|
+
filteredPrograms,
|
|
155
|
+
providerType: 'provider'
|
|
156
|
+
});
|
|
157
|
+
return distributePrograms(ccPrograms, nonCCPrograms, programCount);
|
|
133
158
|
};
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
licensedAndUnlicensedReceivingProviders,
|
|
140
|
-
sensitiveAndNonSensitiveReceivingProvider,
|
|
141
|
-
sensitiveProviderCount,
|
|
142
|
-
programCount,
|
|
143
|
-
receivingProviderSensitive,
|
|
144
|
-
receivingReferrals,
|
|
145
|
-
sensitiveReceivingReferrals,
|
|
146
|
-
onAndOffPlatformPrograms,
|
|
147
|
-
ccAndNonCCPrograms,
|
|
148
|
-
programsInSameNetwork,
|
|
149
|
-
singleNetwork,
|
|
150
|
-
programsInSameProvider,
|
|
151
|
-
isFunded,
|
|
152
|
-
requiresAuthorization,
|
|
153
|
-
sameFeeScheduleProgram
|
|
154
|
-
} = _ref7;
|
|
155
|
-
const {
|
|
156
|
-
programsWithSharedNetwork,
|
|
157
|
-
programsWithSingleSharedNetwork
|
|
158
|
-
} = separateProgramsByNetwork({
|
|
159
|
-
singleNetwork
|
|
159
|
+
const applyLicensedDistribution = (filteredPrograms, programCount, licensedProviderIsCC) => {
|
|
160
|
+
const licensedPrograms = getLicensedOrUnlicensedPrograms({
|
|
161
|
+
filteredPrograms,
|
|
162
|
+
isLicensed: true,
|
|
163
|
+
licensedProviderIsCC
|
|
160
164
|
});
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
165
|
+
const unlicensedPrograms = getLicensedOrUnlicensedPrograms({
|
|
166
|
+
filteredPrograms,
|
|
167
|
+
isLicensed: false
|
|
168
|
+
});
|
|
169
|
+
return distributePrograms(licensedPrograms, unlicensedPrograms, programCount);
|
|
170
|
+
};
|
|
171
|
+
const getNetworkMatchedPrograms = (programsInSameNetwork, singleNetwork, programsWithSharedNetwork, programsWithSingleSharedNetwork) => {
|
|
164
172
|
if (programsInSameNetwork && singleNetwork) {
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
networkMatch = programs;
|
|
173
|
+
return programsWithSingleSharedNetwork;
|
|
174
|
+
}
|
|
175
|
+
if (programsInSameNetwork) {
|
|
176
|
+
return programsWithSharedNetwork;
|
|
170
177
|
}
|
|
178
|
+
return programs;
|
|
179
|
+
};
|
|
180
|
+
const getProviderMatchedPrograms = (networkMatch, programsInSameProvider) => {
|
|
171
181
|
const programsGroupedByProviderId = Object.values(groupBy(networkMatch, 'relationships.provider.data.id'));
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
const
|
|
182
|
+
return programsInSameProvider ? programsGroupedByProviderId.filter(programs => programs.length > 1).flat() : programsGroupedByProviderId.flat();
|
|
183
|
+
};
|
|
184
|
+
const filterByReceivingProvider = (providerMatch, config) => {
|
|
185
|
+
const {
|
|
186
|
+
receivingProviderLicensed,
|
|
187
|
+
receivingProviderIsCC,
|
|
188
|
+
receivingProviderSensitive,
|
|
189
|
+
licensedAndUnlicensedReceivingProviders,
|
|
190
|
+
sensitiveAndNonSensitiveReceivingProvider,
|
|
191
|
+
ccAndNonCCPrograms
|
|
192
|
+
} = config;
|
|
193
|
+
return providerMatch.filter(program => {
|
|
176
194
|
const providerId = program.relationships.provider.data.id;
|
|
177
|
-
const provider = providers.find(
|
|
195
|
+
const provider = providers.find(p => p.id === providerId);
|
|
178
196
|
const providerInNetworkMatch = receivingProviderLicensed ? provider.attributes.licensed : !provider.attributes.licensed;
|
|
179
197
|
const providerIsCCMatch = receivingProviderIsCC ? provider.attributes.provider_type === 'coordination_center' : provider.attributes.provider_type === 'provider';
|
|
180
198
|
const providerIsSensitiveMatch = provider.attributes.sensitive === receivingProviderSensitive;
|
|
181
|
-
return (licensedAndUnlicensedReceivingProviders
|
|
199
|
+
return (licensedAndUnlicensedReceivingProviders || providerInNetworkMatch) && (sensitiveAndNonSensitiveReceivingProvider || providerIsSensitiveMatch) && (ccAndNonCCPrograms || providerIsCCMatch);
|
|
182
200
|
});
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
filteredPrograms = filteredPrograms.filter(program => program.attributes.receiving_referrals === receivingReferrals);
|
|
201
|
+
};
|
|
202
|
+
const filterByPlatform = (programs, onAndOffPlatformPrograms, receivingReferrals) => {
|
|
203
|
+
if (onAndOffPlatformPrograms) {
|
|
204
|
+
return programs;
|
|
188
205
|
}
|
|
189
|
-
|
|
190
|
-
|
|
206
|
+
return programs.filter(program => program.attributes.receiving_referrals === receivingReferrals);
|
|
207
|
+
};
|
|
208
|
+
const filterByProviderUniqueness = (programs, programsInSameProvider) => {
|
|
209
|
+
if (programsInSameProvider) {
|
|
210
|
+
return programs;
|
|
191
211
|
}
|
|
192
|
-
|
|
212
|
+
return uniqBy(programs, 'relationships.provider.data.id');
|
|
213
|
+
};
|
|
214
|
+
const filterByFunding = (programs, isFunded) => {
|
|
215
|
+
return programs.filter(program => {
|
|
193
216
|
var _program$relationship;
|
|
194
217
|
const fspId = (_program$relationship = program.relationships.fee_schedule_program) === null || _program$relationship === void 0 || (_program$relationship = _program$relationship.data) === null || _program$relationship === void 0 ? void 0 : _program$relationship.id;
|
|
195
218
|
return isFunded ? !!fspId : !fspId;
|
|
196
219
|
});
|
|
197
|
-
|
|
220
|
+
};
|
|
221
|
+
const filterByAuthorization = (programs, requiresAuthorization) => {
|
|
222
|
+
return programs.filter(program => {
|
|
198
223
|
var _program$relationship2, _fsp$attributes;
|
|
199
224
|
const fspId = (_program$relationship2 = program.relationships.fee_schedule_program) === null || _program$relationship2 === void 0 || (_program$relationship2 = _program$relationship2.data) === null || _program$relationship2 === void 0 ? void 0 : _program$relationship2.id;
|
|
200
225
|
const fsp = feeSchedulePrograms.find(fsp => fsp.id === fspId);
|
|
201
226
|
return requiresAuthorization === !!(fsp !== null && fsp !== void 0 && (_fsp$attributes = fsp.attributes) !== null && _fsp$attributes !== void 0 && _fsp$attributes.authorization_required);
|
|
202
227
|
});
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
228
|
+
};
|
|
229
|
+
const applyBasicFilters = (filteredPrograms, config) => {
|
|
230
|
+
const {
|
|
231
|
+
onAndOffPlatformPrograms,
|
|
232
|
+
receivingReferrals,
|
|
233
|
+
programsInSameProvider,
|
|
234
|
+
isFunded,
|
|
235
|
+
requiresAuthorization
|
|
236
|
+
} = config;
|
|
237
|
+
let result = filteredPrograms;
|
|
238
|
+
result = filterByPlatform(result, onAndOffPlatformPrograms, receivingReferrals);
|
|
239
|
+
result = filterByProviderUniqueness(result, programsInSameProvider);
|
|
240
|
+
result = filterByFunding(result, isFunded);
|
|
241
|
+
result = filterByAuthorization(result, requiresAuthorization);
|
|
242
|
+
return result;
|
|
243
|
+
};
|
|
244
|
+
const getProgramsWithSameFeeSchedule = _ref6 => {
|
|
245
|
+
let {
|
|
246
|
+
filteredPrograms,
|
|
247
|
+
programCount
|
|
248
|
+
} = _ref6;
|
|
249
|
+
const programsGroupedByFeeSchedule = Object.values(groupBy(filteredPrograms, 'relationships.fee_schedule_program.data.id'));
|
|
250
|
+
const groupWithEnoughPrograms = programsGroupedByFeeSchedule.find(group => group.length >= programCount);
|
|
251
|
+
return groupWithEnoughPrograms ? groupWithEnoughPrograms.slice(0, programCount) : [];
|
|
252
|
+
};
|
|
253
|
+
const filterGroupedPrograms = config => {
|
|
254
|
+
const {
|
|
255
|
+
programsInSameNetwork,
|
|
256
|
+
singleNetwork,
|
|
257
|
+
programsInSameProvider,
|
|
258
|
+
onAndOffPlatformPrograms,
|
|
259
|
+
ccAndNonCCPrograms,
|
|
260
|
+
licensedAndUnlicensedReceivingProviders,
|
|
261
|
+
sensitiveAndNonSensitiveReceivingProvider,
|
|
262
|
+
sameFeeScheduleProgram,
|
|
263
|
+
programCount,
|
|
264
|
+
sensitiveProviderCount,
|
|
265
|
+
sensitiveReceivingReferrals,
|
|
266
|
+
licensedProviderIsCC
|
|
267
|
+
} = config;
|
|
268
|
+
const {
|
|
269
|
+
programsWithSharedNetwork,
|
|
270
|
+
programsWithSingleSharedNetwork
|
|
271
|
+
} = separateProgramsByNetwork({
|
|
272
|
+
singleNetwork
|
|
273
|
+
});
|
|
274
|
+
const networkMatch = getNetworkMatchedPrograms(programsInSameNetwork, singleNetwork, programsWithSharedNetwork, programsWithSingleSharedNetwork);
|
|
275
|
+
const providerMatch = getProviderMatchedPrograms(networkMatch, programsInSameProvider);
|
|
276
|
+
const receivingProviderMatch = filterByReceivingProvider(providerMatch, config);
|
|
277
|
+
const hasMixedDistributions = onAndOffPlatformPrograms || ccAndNonCCPrograms || licensedAndUnlicensedReceivingProviders;
|
|
278
|
+
const configWithoutProviderFilter = _objectSpread(_objectSpread({}, config), {}, {
|
|
279
|
+
programsInSameProvider: hasMixedDistributions ? true : config.programsInSameProvider
|
|
280
|
+
});
|
|
281
|
+
let filteredPrograms = applyBasicFilters(receivingProviderMatch, configWithoutProviderFilter);
|
|
282
|
+
if (licensedAndUnlicensedReceivingProviders && !onAndOffPlatformPrograms && !ccAndNonCCPrograms) {
|
|
283
|
+
filteredPrograms = applyLicensedDistribution(filteredPrograms, programCount, licensedProviderIsCC);
|
|
207
284
|
}
|
|
208
|
-
if (ccAndNonCCPrograms) {
|
|
209
|
-
|
|
210
|
-
filteredPrograms,
|
|
211
|
-
providerType: 'coordination_center'
|
|
212
|
-
});
|
|
213
|
-
const nonCCPrograms = getCCOrNonCCPrograms({
|
|
214
|
-
filteredPrograms,
|
|
215
|
-
providerType: 'provider'
|
|
216
|
-
});
|
|
217
|
-
filteredPrograms = compact([...ccPrograms, ...nonCCPrograms]);
|
|
285
|
+
if (ccAndNonCCPrograms && !onAndOffPlatformPrograms) {
|
|
286
|
+
filteredPrograms = applyCCDistribution(filteredPrograms, programCount);
|
|
218
287
|
}
|
|
219
|
-
if (
|
|
220
|
-
|
|
221
|
-
filteredPrograms,
|
|
222
|
-
isLicensed: true,
|
|
223
|
-
licensedProviderIsCC
|
|
224
|
-
});
|
|
225
|
-
const unlicensedPrograms = getLicensedOrUnlicensedPrograms({
|
|
226
|
-
filteredPrograms,
|
|
227
|
-
isLicensed: false
|
|
228
|
-
});
|
|
229
|
-
filteredPrograms = compact([...licensedPrograms, ...unlicensedPrograms]);
|
|
288
|
+
if (onAndOffPlatformPrograms) {
|
|
289
|
+
filteredPrograms = applyPlatformDistribution(filteredPrograms, programCount);
|
|
230
290
|
}
|
|
231
291
|
if (sensitiveAndNonSensitiveReceivingProvider) {
|
|
232
|
-
|
|
292
|
+
filteredPrograms = getSensitiveAndNonSensitivePrograms({
|
|
233
293
|
filteredPrograms,
|
|
234
294
|
sensitiveReceivingReferrals,
|
|
235
295
|
sensitiveProviderCount,
|
|
236
296
|
programCount
|
|
237
297
|
});
|
|
238
|
-
filteredPrograms = sensitiveAndNonSensitivePrograms;
|
|
239
298
|
}
|
|
240
299
|
if (sameFeeScheduleProgram) {
|
|
241
300
|
filteredPrograms = getProgramsWithSameFeeSchedule({
|
|
@@ -247,7 +306,7 @@ const filterGroupedPrograms = _ref7 => {
|
|
|
247
306
|
};
|
|
248
307
|
|
|
249
308
|
// Function to filter and select programs based on criteria
|
|
250
|
-
const filterAndSelectPrograms =
|
|
309
|
+
const filterAndSelectPrograms = _ref7 => {
|
|
251
310
|
let {
|
|
252
311
|
sendingProviderIsCC = false,
|
|
253
312
|
sendingProviderSensitive = false,
|
|
@@ -274,7 +333,7 @@ const filterAndSelectPrograms = _ref8 => {
|
|
|
274
333
|
serviceCount = 1,
|
|
275
334
|
cmCodeRequiredOnAuthorization = false,
|
|
276
335
|
sameFeeScheduleProgram = false
|
|
277
|
-
} =
|
|
336
|
+
} = _ref7;
|
|
278
337
|
// Get the current provider based on criteria
|
|
279
338
|
let filteredPrograms;
|
|
280
339
|
if (isGrouped) {
|
|
@@ -317,12 +376,12 @@ const filterAndSelectPrograms = _ref8 => {
|
|
|
317
376
|
};
|
|
318
377
|
|
|
319
378
|
// Group all unlisted programs by service, filter by program count and filter by results amount
|
|
320
|
-
const filterAndSelectUnlistedPrograms =
|
|
379
|
+
const filterAndSelectUnlistedPrograms = _ref8 => {
|
|
321
380
|
var _groupedUnlistedProgr;
|
|
322
381
|
let {
|
|
323
382
|
programCount = 1,
|
|
324
383
|
results = 1
|
|
325
|
-
} =
|
|
384
|
+
} = _ref8;
|
|
326
385
|
const groupedUnlistedProgramsByService = Object.values(groupBy(unlistedPrograms, 'services[0]'));
|
|
327
386
|
let selectedUnlistedPrograms = (_groupedUnlistedProgr = groupedUnlistedProgramsByService.filter(group => group.length === programCount)) === null || _groupedUnlistedProgr === void 0 || (_groupedUnlistedProgr = _groupedUnlistedProgr.slice(0, results)) === null || _groupedUnlistedProgr === void 0 ? void 0 : _groupedUnlistedProgr.flat();
|
|
328
387
|
return selectedUnlistedPrograms;
|
|
@@ -332,15 +391,16 @@ const filterAndSelectUnlistedPrograms = _ref9 => {
|
|
|
332
391
|
const selectPrograms = (filteredPrograms, serviceCount, programCount, sensitiveService) => {
|
|
333
392
|
const filteredServices = services.filter(s => s.attributes.sensitive === sensitiveService);
|
|
334
393
|
const selectedPrograms = filteredPrograms.slice(0, programCount).map(program => {
|
|
335
|
-
const programServices = filteredServices.filter(s => program.relationships.services.data.map(
|
|
394
|
+
const programServices = filteredServices.filter(s => program.relationships.services.data.map(_ref9 => {
|
|
336
395
|
let {
|
|
337
396
|
id
|
|
338
|
-
} =
|
|
397
|
+
} = _ref9;
|
|
339
398
|
return id;
|
|
340
399
|
}).includes(s.id)).slice(0, serviceCount).map(s => s.id);
|
|
341
400
|
return {
|
|
342
401
|
id: program.id,
|
|
343
|
-
services: programServices
|
|
402
|
+
services: programServices,
|
|
403
|
+
isOffPlatform: !program.attributes.receiving_referrals
|
|
344
404
|
};
|
|
345
405
|
});
|
|
346
406
|
return selectedPrograms;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["programsMap","unlistedProgramsMap","providersMap","servicesMap","feeScheduleProgramsMap","all","groupBy","compact","uniqBy","providers","Array","from","values","programs","unlistedPrograms","services","feeSchedulePrograms","separateProgramsByNetwork","_ref","singleNetwork","programsWithSharedNetwork","programsWithSingleSharedNetwork","forEach","program","providerId","relationships","provider","data","id","find","networkIds","networks","map","network","hasSharedNetwork","some","otherProgram","otherProviderId","otherProvider","otherNetworkIds","networkId","includes","hasSingleSharedNetwork","length","push","filterSingleProgram","_ref2","receivingProviderIsCC","sendingProviderIsCC","programInCurrentProvider","sendingProviderSensitive","receivingProviderLicensed","receivingProviderSensitive","receivingReferrals","isFunded","requiresAuthorization","cmCodeRequiredOnAuthorization","sendingProviderType","sendingProvider","attributes","licensed","provider_type","sensitive","filter","_relationships$fee_sc","_feeSchedulePrograms$","_feeSchedulePrograms$2","receivingProvider","inCurrentProviderMatch","receivingProviderSensitiveMatch","receivingProviderInNetworkMatch","providerIsCCMatch","programReceivingReferralsMatch","receiving_referrals","fspId","fee_schedule_program","isFundedMatch","requiresAuthorizationMatch","fsp","authorization_required","cmCodeRequiredOnAuthorizationMatch","cm_code_required_on_authorization","getCCOrNonCCPrograms","_ref3","filteredPrograms","providerType","getLicensedOrUnlicensedPrograms","_ref4","isLicensed","licensedProviderIsCC","getSensitiveAndNonSensitivePrograms","_ref5","sensitiveProviderCount","programCount","sensitiveReceivingReferrals","sensitivePrograms","slice","nonSensitivePrograms","getProgramsWithSameFeeSchedule","_ref6","programsGroupedByFeeSchedule","Object","groupWithEnoughPrograms","group","filterGroupedPrograms","_ref7","licensedAndUnlicensedReceivingProviders","sensitiveAndNonSensitiveReceivingProvider","onAndOffPlatformPrograms","ccAndNonCCPrograms","programsInSameNetwork","programsInSameProvider","sameFeeScheduleProgram","networkMatch","programsGroupedByProviderId","providerMatch","flat","receivingProviderMatch","providerInNetworkMatch","providerIsSensitiveMatch","_program$relationship","_program$relationship2","_fsp$attributes","onPlatform","offPlatform","ccPrograms","nonCCPrograms","licensedPrograms","unlicensedPrograms","sensitiveAndNonSensitivePrograms","filterAndSelectPrograms","_ref8","isGrouped","sensitiveService","serviceCount","selectPrograms","filterAndSelectUnlistedPrograms","_ref9","_groupedUnlistedProgr","results","groupedUnlistedProgramsByService","selectedUnlistedPrograms","filteredServices","s","selectedPrograms","programServices","_ref0","getSelectedPrograms","options","getSelectedUnlistedPrograms"],"sources":["../../../src/__testUtils__/mockData/utils.js"],"sourcesContent":["import { programsMap } from './mockPrograms';\nimport { unlistedProgramsMap } from './mockUnlistedPrograms';\nimport { providersMap } from './mockProviders';\nimport { servicesMap } from './mockServices'\nimport { feeScheduleProgramsMap } from './mockFeeSchedulePrograms'\nimport { all, groupBy, compact, uniqBy } from 'lodash';\n\nconst providers = Array.from(providersMap.values());\nconst programs = Array.from(programsMap.values());\nconst unlistedPrograms = Array.from(unlistedProgramsMap.values());\nconst services = Array.from(servicesMap.values());\nconst feeSchedulePrograms = Array.from(feeScheduleProgramsMap.values());\n\n// Function to separate programs into those with shared and non-shared networks\nconst separateProgramsByNetwork = ({ singleNetwork }) => {\n const programsWithSharedNetwork = [];\n const programsWithSingleSharedNetwork = [];\n\n programs.forEach((program) => {\n const providerId = program.relationships.provider.data.id;\n const provider = providers.find((provider) => provider.id === providerId);\n\n if (provider) {\n const networkIds = provider.relationships.networks.data.map((network) => network.id);\n\n const hasSharedNetwork = programs.some((otherProgram) => {\n if (otherProgram.id !== program.id) {\n const otherProviderId = otherProgram.relationships.provider.data.id;\n const otherProvider = providers.find((otherProvider) => otherProvider.id === otherProviderId);\n \n if (otherProvider) {\n const otherNetworkIds = otherProvider.relationships.networks.data.map((network) => network.id);\n return networkIds.some((networkId) => otherNetworkIds.includes(networkId));\n }\n }\n return false;\n });\n\n const hasSingleSharedNetwork = hasSharedNetwork && provider.relationships.networks.data.length === 1;\n\n if (singleNetwork && hasSingleSharedNetwork) {\n programsWithSingleSharedNetwork.push(program);\n } else if (hasSharedNetwork) {\n programsWithSharedNetwork.push(program);\n }\n }\n });\n\n return { programsWithSharedNetwork, programsWithSingleSharedNetwork };\n}\n\nconst filterSingleProgram = ({\n receivingProviderIsCC = false,\n sendingProviderIsCC = false,\n programInCurrentProvider = false,\n sendingProviderSensitive,\n receivingProviderLicensed,\n receivingProviderSensitive = false,\n receivingReferrals = true,\n isFunded = false,\n requiresAuthorization = false,\n cmCodeRequiredOnAuthorization = false,\n}) => {\n const sendingProviderType = sendingProviderIsCC ? 'coordination_center' : 'provider';\n const sendingProvider = providers.find((provider) => (\n provider.attributes.licensed && provider.attributes.provider_type === sendingProviderType && provider.attributes.sensitive === sendingProviderSensitive\n ));\n return programs.filter((program) => {\n const { attributes, relationships } = program;\n const receivingProvider = providers.find((provider) => provider.id === relationships.provider.data.id);\n const inCurrentProviderMatch = programInCurrentProvider ?\n relationships.provider.data.id === sendingProvider.id :\n relationships.provider.data.id !== sendingProvider.id;\n const receivingProviderSensitiveMatch = receivingProvider?.attributes.sensitive === receivingProviderSensitive;\n const receivingProviderInNetworkMatch = receivingProvider?.attributes.licensed === receivingProviderLicensed;\n const providerIsCCMatch = receivingProviderIsCC ? receivingProvider?.attributes.provider_type === 'coordination_center' : receivingProvider?.attributes.provider_type === 'provider'\n const programReceivingReferralsMatch = attributes.receiving_referrals === receivingReferrals;\n const fspId = relationships.fee_schedule_program?.data?.id;\n const isFundedMatch = !!fspId === isFunded;\n const requiresAuthorizationMatch = (!!fspId && feeSchedulePrograms.find((fsp) => fsp.id === fspId)?.attributes?.authorization_required) === requiresAuthorization;\n const cmCodeRequiredOnAuthorizationMatch = (!!fspId && feeSchedulePrograms.find((fsp) => fsp.id === fspId)?.attributes?.cm_code_required_on_authorization) === cmCodeRequiredOnAuthorization;\n\n return inCurrentProviderMatch && programReceivingReferralsMatch && receivingProviderInNetworkMatch &&\n receivingProviderSensitiveMatch && providerIsCCMatch && isFundedMatch && requiresAuthorizationMatch && cmCodeRequiredOnAuthorizationMatch;\n })\n}\n\nconst getCCOrNonCCPrograms = ({ filteredPrograms, providerType }) => (\n filteredPrograms.filter((program) => {\n const providerId = program.relationships.provider.data.id;\n const provider = providers.find((provider) => provider.id === providerId);\n return provider.attributes.provider_type === providerType;\n })\n);\n\nconst getLicensedOrUnlicensedPrograms = ({ filteredPrograms, isLicensed, licensedProviderIsCC }) => (\n filteredPrograms.filter((program) => {\n const providerId = program.relationships.provider.data.id;\n const provider = providers.find((provider) => provider.id === providerId);\n return provider.attributes.licensed === isLicensed && (licensedProviderIsCC ? provider.attributes.provider_type === 'coordination_center' : true);\n })\n);\n\nconst getSensitiveAndNonSensitivePrograms = ({ filteredPrograms, sensitiveProviderCount, programCount, sensitiveReceivingReferrals }) => {\n const sensitivePrograms = filteredPrograms.filter((program) => {\n const providerId = program.relationships.provider.data.id;\n const provider = providers.find((provider) => provider.id === providerId);\n return provider.attributes.sensitive && (sensitiveReceivingReferrals ? program.attributes.receiving_referrals === sensitiveReceivingReferrals : true);\n }).slice(0, sensitiveProviderCount);\n\n const nonSensitivePrograms = filteredPrograms.filter((program) => {\n const providerId = program.relationships.provider.data.id;\n const provider = providers.find((provider) => provider.id === providerId);\n return !provider.attributes.sensitive;\n }).slice(0, programCount - sensitiveProviderCount);\n\n return [...nonSensitivePrograms, ...sensitivePrograms];\n}\n\nconst getProgramsWithSameFeeSchedule = ({ filteredPrograms, programCount }) => {\n const programsGroupedByFeeSchedule = Object.values(groupBy(filteredPrograms, 'relationships.fee_schedule_program.data.id'));\n\n const groupWithEnoughPrograms = programsGroupedByFeeSchedule.find(group => group.length >= programCount);\n\n return groupWithEnoughPrograms ? groupWithEnoughPrograms.slice(0, programCount) : [];\n}\n\nconst filterGroupedPrograms = ({\n receivingProviderIsCC,\n licensedProviderIsCC,\n receivingProviderLicensed,\n licensedAndUnlicensedReceivingProviders,\n sensitiveAndNonSensitiveReceivingProvider,\n sensitiveProviderCount,\n programCount,\n receivingProviderSensitive,\n receivingReferrals,\n sensitiveReceivingReferrals,\n onAndOffPlatformPrograms,\n ccAndNonCCPrograms,\n programsInSameNetwork,\n singleNetwork,\n programsInSameProvider,\n isFunded,\n requiresAuthorization,\n sameFeeScheduleProgram,\n}) => {\n const { programsWithSharedNetwork, programsWithSingleSharedNetwork } = separateProgramsByNetwork({ singleNetwork });\n\n // Filter programs based on whether they match the criteria\n let networkMatch = [];\n if (programsInSameNetwork && singleNetwork) {\n networkMatch = programsWithSingleSharedNetwork;\n } else if (programsInSameNetwork) {\n networkMatch = programsWithSharedNetwork\n } else {\n networkMatch = programs;\n }\n\n const programsGroupedByProviderId = Object.values(groupBy(networkMatch, 'relationships.provider.data.id'));\n const providerMatch = programsInSameProvider ?\n programsGroupedByProviderId.filter(programs => programs.length > 1).flat() :\n programsGroupedByProviderId.flat();\n\n // Filter programs based on receiving provider criteria\n const receivingProviderMatch = providerMatch.filter((program) => {\n const providerId = program.relationships.provider.data.id;\n const provider = providers.find((provider) => provider.id === providerId);\n const providerInNetworkMatch = receivingProviderLicensed ? provider.attributes.licensed : !provider.attributes.licensed;\n const providerIsCCMatch = receivingProviderIsCC ? provider.attributes.provider_type === 'coordination_center' : provider.attributes.provider_type === 'provider'\n const providerIsSensitiveMatch = provider.attributes.sensitive === receivingProviderSensitive;\n\n return (licensedAndUnlicensedReceivingProviders ? true : providerInNetworkMatch) &&\n (sensitiveAndNonSensitiveReceivingProvider ? true : providerIsSensitiveMatch) &&\n (ccAndNonCCPrograms ? true : providerIsCCMatch);\n });\n\n let filteredPrograms = receivingProviderMatch;\n\n // Filter programs based on criteria\n if (!onAndOffPlatformPrograms) {\n filteredPrograms = filteredPrograms.filter((program) => program.attributes.receiving_referrals === receivingReferrals)\n }\n\n if (!programsInSameProvider) {\n filteredPrograms = uniqBy(filteredPrograms, 'relationships.provider.data.id');\n }\n\n filteredPrograms = filteredPrograms.filter(program => {\n const fspId = program.relationships.fee_schedule_program?.data?.id;\n return isFunded ? !!fspId : !fspId;\n });\n\n filteredPrograms = filteredPrograms.filter(program => {\n const fspId = program.relationships.fee_schedule_program?.data?.id;\n const fsp = feeSchedulePrograms.find((fsp) => fsp.id === fspId);\n return requiresAuthorization === !!fsp?.attributes?.authorization_required;\n });\n\n if (onAndOffPlatformPrograms) {\n const onPlatform = filteredPrograms.filter((program) => program.attributes.receiving_referrals);\n const offPlatform = filteredPrograms.filter((program) => !program.attributes.receiving_referrals);\n filteredPrograms = compact([...onPlatform, ...offPlatform]);\n }\n\n if (ccAndNonCCPrograms) {\n const ccPrograms = getCCOrNonCCPrograms({ filteredPrograms, providerType: 'coordination_center' });\n const nonCCPrograms = getCCOrNonCCPrograms({ filteredPrograms, providerType: 'provider' });\n filteredPrograms = compact([...ccPrograms, ...nonCCPrograms]);\n }\n\n if (licensedAndUnlicensedReceivingProviders) {\n const licensedPrograms = getLicensedOrUnlicensedPrograms({ filteredPrograms, isLicensed: true, licensedProviderIsCC });\n const unlicensedPrograms = getLicensedOrUnlicensedPrograms({ filteredPrograms, isLicensed: false });\n filteredPrograms = compact([...licensedPrograms, ...unlicensedPrograms]);\n }\n\n if (sensitiveAndNonSensitiveReceivingProvider) {\n const sensitiveAndNonSensitivePrograms = getSensitiveAndNonSensitivePrograms({ filteredPrograms, sensitiveReceivingReferrals, sensitiveProviderCount, programCount });\n filteredPrograms = sensitiveAndNonSensitivePrograms;\n }\n\n if (sameFeeScheduleProgram) {\n filteredPrograms = getProgramsWithSameFeeSchedule({ filteredPrograms, programCount });\n }\n\n return filteredPrograms;\n}\n\n// Function to filter and select programs based on criteria\nconst filterAndSelectPrograms = ({\n sendingProviderIsCC = false,\n sendingProviderSensitive = false,\n receivingProviderIsCC = false,\n licensedProviderIsCC = false,\n programInCurrentProvider = false,\n receivingProviderLicensed = true,\n licensedAndUnlicensedReceivingProviders = false,\n receivingProviderSensitive = false,\n sensitiveAndNonSensitiveReceivingProvider = false,\n receivingReferrals = true,\n sensitiveReceivingReferrals,\n onAndOffPlatformPrograms = false,\n ccAndNonCCPrograms = false,\n programsInSameNetwork = false,\n singleNetwork = false,\n programsInSameProvider = false,\n isGrouped = false,\n isFunded = false,\n requiresAuthorization = false,\n sensitiveProviderCount = 1,\n programCount = isGrouped ? 2 : 1,\n sensitiveService = false,\n serviceCount = 1,\n cmCodeRequiredOnAuthorization = false,\n sameFeeScheduleProgram = false,\n}) => {\n // Get the current provider based on criteria\n let filteredPrograms;\n\n if (isGrouped) {\n filteredPrograms = filterGroupedPrograms({\n receivingProviderIsCC,\n receivingProviderLicensed,\n licensedProviderIsCC,\n licensedAndUnlicensedReceivingProviders,\n sensitiveAndNonSensitiveReceivingProvider,\n sensitiveProviderCount,\n programCount,\n receivingProviderSensitive,\n receivingReferrals,\n sensitiveReceivingReferrals,\n onAndOffPlatformPrograms,\n ccAndNonCCPrograms,\n programsInSameNetwork,\n singleNetwork,\n programsInSameProvider,\n isFunded,\n requiresAuthorization,\n sameFeeScheduleProgram,\n })\n } else {\n filteredPrograms = filterSingleProgram({\n receivingProviderIsCC,\n sendingProviderIsCC,\n sendingProviderSensitive,\n programInCurrentProvider,\n receivingProviderLicensed,\n receivingProviderSensitive,\n receivingReferrals,\n isFunded,\n requiresAuthorization,\n cmCodeRequiredOnAuthorization,\n })\n }\n // Select programs and services\n return selectPrograms(filteredPrograms, serviceCount, programCount, sensitiveService);\n}\n\n// Group all unlisted programs by service, filter by program count and filter by results amount\nconst filterAndSelectUnlistedPrograms = ({\n programCount = 1,\n results = 1,\n}) => {\n const groupedUnlistedProgramsByService = Object.values(groupBy(unlistedPrograms, 'services[0]'));\n\n let selectedUnlistedPrograms = groupedUnlistedProgramsByService\n .filter(group => group.length === programCount)\n ?.slice(0, results)\n ?.flat();\n\n return selectedUnlistedPrograms;\n}\n\n// Function to select programs and services\nconst selectPrograms = (filteredPrograms, serviceCount, programCount, sensitiveService) => {\n const filteredServices = services.filter((s) => s.attributes.sensitive === sensitiveService);\n const selectedPrograms = filteredPrograms.slice(0, programCount).map((program) => {\n const programServices = filteredServices\n .filter((s) => program.relationships.services.data.map(({ id }) => id).includes(s.id))\n .slice(0, serviceCount).map((s) => s.id);\n return {\n id: program.id,\n services: programServices,\n }\n });\n\n return selectedPrograms;\n}\n\nexport const getSelectedPrograms = (options) => {\n return filterAndSelectPrograms(options);\n}\n\nexport const getSelectedUnlistedPrograms = (options) => {\n return filterAndSelectUnlistedPrograms(options);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["programsMap","unlistedProgramsMap","providersMap","servicesMap","feeScheduleProgramsMap","all","groupBy","compact","uniqBy","providers","Array","from","values","programs","unlistedPrograms","services","feeSchedulePrograms","separateProgramsByNetwork","_ref","singleNetwork","programsWithSharedNetwork","programsWithSingleSharedNetwork","forEach","program","providerId","relationships","provider","data","id","find","networkIds","networks","map","network","hasSharedNetwork","some","otherProgram","otherProviderId","otherProvider","otherNetworkIds","networkId","includes","hasSingleSharedNetwork","length","push","filterSingleProgram","_ref2","receivingProviderIsCC","sendingProviderIsCC","programInCurrentProvider","sendingProviderSensitive","receivingProviderLicensed","receivingProviderSensitive","receivingReferrals","isFunded","requiresAuthorization","cmCodeRequiredOnAuthorization","sendingProviderType","sendingProvider","attributes","licensed","provider_type","sensitive","filter","_relationships$fee_sc","_feeSchedulePrograms$","_feeSchedulePrograms$2","receivingProvider","inCurrentProviderMatch","receivingProviderSensitiveMatch","receivingProviderInNetworkMatch","providerIsCCMatch","programReceivingReferralsMatch","receiving_referrals","fspId","fee_schedule_program","isFundedMatch","requiresAuthorizationMatch","fsp","authorization_required","cmCodeRequiredOnAuthorizationMatch","cm_code_required_on_authorization","getCCOrNonCCPrograms","_ref3","filteredPrograms","providerType","getLicensedOrUnlicensedPrograms","_ref4","isLicensed","licensedProviderIsCC","getSensitiveAndNonSensitivePrograms","_ref5","sensitiveProviderCount","programCount","sensitiveReceivingReferrals","sensitivePrograms","slice","nonSensitivePrograms","distributePrograms","type1Programs","type2Programs","maxPerType","Math","floor","selectedType1","selectedType2","remaining","extraType1","stillRemaining","applyPlatformDistribution","onPlatform","offPlatform","applyCCDistribution","ccPrograms","nonCCPrograms","applyLicensedDistribution","licensedPrograms","unlicensedPrograms","getNetworkMatchedPrograms","programsInSameNetwork","getProviderMatchedPrograms","networkMatch","programsInSameProvider","programsGroupedByProviderId","Object","flat","filterByReceivingProvider","providerMatch","config","licensedAndUnlicensedReceivingProviders","sensitiveAndNonSensitiveReceivingProvider","ccAndNonCCPrograms","p","providerInNetworkMatch","providerIsSensitiveMatch","filterByPlatform","onAndOffPlatformPrograms","filterByProviderUniqueness","filterByFunding","_program$relationship","filterByAuthorization","_program$relationship2","_fsp$attributes","applyBasicFilters","result","getProgramsWithSameFeeSchedule","_ref6","programsGroupedByFeeSchedule","groupWithEnoughPrograms","group","filterGroupedPrograms","sameFeeScheduleProgram","receivingProviderMatch","hasMixedDistributions","configWithoutProviderFilter","_objectSpread","filterAndSelectPrograms","_ref7","isGrouped","sensitiveService","serviceCount","selectPrograms","filterAndSelectUnlistedPrograms","_ref8","_groupedUnlistedProgr","results","groupedUnlistedProgramsByService","selectedUnlistedPrograms","filteredServices","s","selectedPrograms","programServices","_ref9","isOffPlatform","getSelectedPrograms","options","getSelectedUnlistedPrograms"],"sources":["../../../src/__testUtils__/mockData/utils.js"],"sourcesContent":["import { programsMap } from './mockPrograms';\nimport { unlistedProgramsMap } from './mockUnlistedPrograms';\nimport { providersMap } from './mockProviders';\nimport { servicesMap } from './mockServices'\nimport { feeScheduleProgramsMap } from './mockFeeSchedulePrograms'\nimport { all, groupBy, compact, uniqBy } from 'lodash';\n\nconst providers = Array.from(providersMap.values());\nconst programs = Array.from(programsMap.values());\nconst unlistedPrograms = Array.from(unlistedProgramsMap.values());\nconst services = Array.from(servicesMap.values());\nconst feeSchedulePrograms = Array.from(feeScheduleProgramsMap.values());\n\n// Function to separate programs into those with shared and non-shared networks\nconst separateProgramsByNetwork = ({ singleNetwork }) => {\n const programsWithSharedNetwork = [];\n const programsWithSingleSharedNetwork = [];\n\n programs.forEach((program) => {\n const providerId = program.relationships.provider.data.id;\n const provider = providers.find((provider) => provider.id === providerId);\n\n if (provider) {\n const networkIds = provider.relationships.networks.data.map((network) => network.id);\n\n const hasSharedNetwork = programs.some((otherProgram) => {\n if (otherProgram.id !== program.id) {\n const otherProviderId = otherProgram.relationships.provider.data.id;\n const otherProvider = providers.find((otherProvider) => otherProvider.id === otherProviderId);\n \n if (otherProvider) {\n const otherNetworkIds = otherProvider.relationships.networks.data.map((network) => network.id);\n return networkIds.some((networkId) => otherNetworkIds.includes(networkId));\n }\n }\n return false;\n });\n\n const hasSingleSharedNetwork = hasSharedNetwork && provider.relationships.networks.data.length === 1;\n\n if (singleNetwork && hasSingleSharedNetwork) {\n programsWithSingleSharedNetwork.push(program);\n } else if (hasSharedNetwork) {\n programsWithSharedNetwork.push(program);\n }\n }\n });\n\n return { programsWithSharedNetwork, programsWithSingleSharedNetwork };\n}\n\nconst filterSingleProgram = ({\n receivingProviderIsCC = false,\n sendingProviderIsCC = false,\n programInCurrentProvider = false,\n sendingProviderSensitive,\n receivingProviderLicensed,\n receivingProviderSensitive = false,\n receivingReferrals = true,\n isFunded = false,\n requiresAuthorization = false,\n cmCodeRequiredOnAuthorization = false,\n}) => {\n const sendingProviderType = sendingProviderIsCC ? 'coordination_center' : 'provider';\n const sendingProvider = providers.find((provider) => (\n provider.attributes.licensed && provider.attributes.provider_type === sendingProviderType && provider.attributes.sensitive === sendingProviderSensitive\n ));\n return programs.filter((program) => {\n const { attributes, relationships } = program;\n const receivingProvider = providers.find((provider) => provider.id === relationships.provider.data.id);\n const inCurrentProviderMatch = programInCurrentProvider ?\n relationships.provider.data.id === sendingProvider.id :\n relationships.provider.data.id !== sendingProvider.id;\n const receivingProviderSensitiveMatch = receivingProvider?.attributes.sensitive === receivingProviderSensitive;\n const receivingProviderInNetworkMatch = receivingProvider?.attributes.licensed === receivingProviderLicensed;\n const providerIsCCMatch = receivingProviderIsCC ? receivingProvider?.attributes.provider_type === 'coordination_center' : receivingProvider?.attributes.provider_type === 'provider'\n const programReceivingReferralsMatch = attributes.receiving_referrals === receivingReferrals;\n const fspId = relationships.fee_schedule_program?.data?.id;\n const isFundedMatch = !!fspId === isFunded;\n const requiresAuthorizationMatch = (!!fspId && feeSchedulePrograms.find((fsp) => fsp.id === fspId)?.attributes?.authorization_required) === requiresAuthorization;\n const cmCodeRequiredOnAuthorizationMatch = (!!fspId && feeSchedulePrograms.find((fsp) => fsp.id === fspId)?.attributes?.cm_code_required_on_authorization) === cmCodeRequiredOnAuthorization;\n\n return inCurrentProviderMatch && programReceivingReferralsMatch && receivingProviderInNetworkMatch &&\n receivingProviderSensitiveMatch && providerIsCCMatch && isFundedMatch && requiresAuthorizationMatch && cmCodeRequiredOnAuthorizationMatch;\n })\n}\n\nconst getCCOrNonCCPrograms = ({ filteredPrograms, providerType }) => (\n filteredPrograms.filter((program) => {\n const providerId = program.relationships.provider.data.id;\n const provider = providers.find((provider) => provider.id === providerId);\n return provider.attributes.provider_type === providerType;\n })\n);\n\nconst getLicensedOrUnlicensedPrograms = ({ filteredPrograms, isLicensed, licensedProviderIsCC }) => (\n filteredPrograms.filter((program) => {\n const providerId = program.relationships.provider.data.id;\n const provider = providers.find((provider) => provider.id === providerId);\n return provider.attributes.licensed === isLicensed && (licensedProviderIsCC ? provider.attributes.provider_type === 'coordination_center' : true);\n })\n);\n\nconst getSensitiveAndNonSensitivePrograms = ({ filteredPrograms, sensitiveProviderCount, programCount, sensitiveReceivingReferrals }) => {\n const sensitivePrograms = filteredPrograms.filter((program) => {\n const providerId = program.relationships.provider.data.id;\n const provider = providers.find((provider) => provider.id === providerId);\n return provider.attributes.sensitive && (sensitiveReceivingReferrals ? program.attributes.receiving_referrals === sensitiveReceivingReferrals : true);\n }).slice(0, sensitiveProviderCount);\n\n const nonSensitivePrograms = filteredPrograms.filter((program) => {\n const providerId = program.relationships.provider.data.id;\n const provider = providers.find((provider) => provider.id === providerId);\n return !provider.attributes.sensitive;\n }).slice(0, programCount - sensitiveProviderCount);\n\n return [...nonSensitivePrograms, ...sensitivePrograms];\n}\n\nconst distributePrograms = (type1Programs, type2Programs, programCount) => {\n const maxPerType = Math.floor(programCount / 2);\n const selectedType1 = type1Programs.slice(0, maxPerType);\n const selectedType2 = type2Programs.slice(0, maxPerType);\n \n const remaining = programCount - selectedType1.length - selectedType2.length;\n \n if (remaining > 0) {\n const extraType1 = type1Programs.slice(selectedType1.length, selectedType1.length + remaining);\n selectedType1.push(...extraType1);\n const stillRemaining = remaining - extraType1.length;\n if (stillRemaining > 0) {\n selectedType2.push(...type2Programs.slice(selectedType2.length, selectedType2.length + stillRemaining));\n }\n }\n \n return compact([...selectedType1, ...selectedType2]);\n};\n\nconst applyPlatformDistribution = (filteredPrograms, programCount) => {\n const onPlatform = filteredPrograms.filter((program) => program.attributes.receiving_referrals);\n const offPlatform = filteredPrograms.filter((program) => !program.attributes.receiving_referrals);\n return distributePrograms(onPlatform, offPlatform, programCount);\n};\n\nconst applyCCDistribution = (filteredPrograms, programCount) => {\n const ccPrograms = getCCOrNonCCPrograms({ filteredPrograms, providerType: 'coordination_center' });\n const nonCCPrograms = getCCOrNonCCPrograms({ filteredPrograms, providerType: 'provider' });\n return distributePrograms(ccPrograms, nonCCPrograms, programCount);\n};\n\nconst applyLicensedDistribution = (filteredPrograms, programCount, licensedProviderIsCC) => {\n const licensedPrograms = getLicensedOrUnlicensedPrograms({ filteredPrograms, isLicensed: true, licensedProviderIsCC });\n const unlicensedPrograms = getLicensedOrUnlicensedPrograms({ filteredPrograms, isLicensed: false });\n return distributePrograms(licensedPrograms, unlicensedPrograms, programCount);\n};\n\nconst getNetworkMatchedPrograms = (programsInSameNetwork, singleNetwork, programsWithSharedNetwork, programsWithSingleSharedNetwork) => {\n if (programsInSameNetwork && singleNetwork) {\n return programsWithSingleSharedNetwork;\n }\n if (programsInSameNetwork) {\n return programsWithSharedNetwork;\n }\n return programs;\n};\n\nconst getProviderMatchedPrograms = (networkMatch, programsInSameProvider) => {\n const programsGroupedByProviderId = Object.values(groupBy(networkMatch, 'relationships.provider.data.id'));\n return programsInSameProvider\n ? programsGroupedByProviderId.filter(programs => programs.length > 1).flat()\n : programsGroupedByProviderId.flat();\n};\n\nconst filterByReceivingProvider = (providerMatch, config) => {\n const {\n receivingProviderLicensed,\n receivingProviderIsCC,\n receivingProviderSensitive,\n licensedAndUnlicensedReceivingProviders,\n sensitiveAndNonSensitiveReceivingProvider,\n ccAndNonCCPrograms\n } = config;\n\n return providerMatch.filter((program) => {\n const providerId = program.relationships.provider.data.id;\n const provider = providers.find((p) => p.id === providerId);\n \n const providerInNetworkMatch = receivingProviderLicensed ? provider.attributes.licensed : !provider.attributes.licensed;\n const providerIsCCMatch = receivingProviderIsCC ? provider.attributes.provider_type === 'coordination_center' : provider.attributes.provider_type === 'provider';\n const providerIsSensitiveMatch = provider.attributes.sensitive === receivingProviderSensitive;\n\n return (licensedAndUnlicensedReceivingProviders || providerInNetworkMatch) &&\n (sensitiveAndNonSensitiveReceivingProvider || providerIsSensitiveMatch) &&\n (ccAndNonCCPrograms || providerIsCCMatch);\n });\n};\n\nconst filterByPlatform = (programs, onAndOffPlatformPrograms, receivingReferrals) => {\n if (onAndOffPlatformPrograms) {\n return programs;\n }\n return programs.filter((program) => program.attributes.receiving_referrals === receivingReferrals);\n};\n\nconst filterByProviderUniqueness = (programs, programsInSameProvider) => {\n if (programsInSameProvider) {\n return programs;\n }\n return uniqBy(programs, 'relationships.provider.data.id');\n};\n\nconst filterByFunding = (programs, isFunded) => {\n return programs.filter(program => {\n const fspId = program.relationships.fee_schedule_program?.data?.id;\n return isFunded ? !!fspId : !fspId;\n });\n};\n\nconst filterByAuthorization = (programs, requiresAuthorization) => {\n return programs.filter(program => {\n const fspId = program.relationships.fee_schedule_program?.data?.id;\n const fsp = feeSchedulePrograms.find((fsp) => fsp.id === fspId);\n return requiresAuthorization === !!fsp?.attributes?.authorization_required;\n });\n};\n\nconst applyBasicFilters = (filteredPrograms, config) => {\n const { onAndOffPlatformPrograms, receivingReferrals, programsInSameProvider, isFunded, requiresAuthorization } = config;\n \n let result = filteredPrograms;\n result = filterByPlatform(result, onAndOffPlatformPrograms, receivingReferrals);\n result = filterByProviderUniqueness(result, programsInSameProvider);\n result = filterByFunding(result, isFunded);\n result = filterByAuthorization(result, requiresAuthorization);\n\n return result;\n};\n\nconst getProgramsWithSameFeeSchedule = ({ filteredPrograms, programCount }) => {\n const programsGroupedByFeeSchedule = Object.values(groupBy(filteredPrograms, 'relationships.fee_schedule_program.data.id'));\n const groupWithEnoughPrograms = programsGroupedByFeeSchedule.find(group => group.length >= programCount);\n return groupWithEnoughPrograms ? groupWithEnoughPrograms.slice(0, programCount) : [];\n}\n\nconst filterGroupedPrograms = (config) => {\n const {\n programsInSameNetwork,\n singleNetwork,\n programsInSameProvider,\n onAndOffPlatformPrograms,\n ccAndNonCCPrograms,\n licensedAndUnlicensedReceivingProviders,\n sensitiveAndNonSensitiveReceivingProvider,\n sameFeeScheduleProgram,\n programCount,\n sensitiveProviderCount,\n sensitiveReceivingReferrals,\n licensedProviderIsCC\n } = config;\n\n const { programsWithSharedNetwork, programsWithSingleSharedNetwork } = separateProgramsByNetwork({ singleNetwork });\n\n const networkMatch = getNetworkMatchedPrograms(programsInSameNetwork, singleNetwork, programsWithSharedNetwork, programsWithSingleSharedNetwork);\n const providerMatch = getProviderMatchedPrograms(networkMatch, programsInSameProvider);\n const receivingProviderMatch = filterByReceivingProvider(providerMatch, config);\n const hasMixedDistributions = onAndOffPlatformPrograms || ccAndNonCCPrograms || licensedAndUnlicensedReceivingProviders;\n const configWithoutProviderFilter = { ...config, programsInSameProvider: hasMixedDistributions ? true : config.programsInSameProvider };\n let filteredPrograms = applyBasicFilters(receivingProviderMatch, configWithoutProviderFilter);\n\n if (licensedAndUnlicensedReceivingProviders && !onAndOffPlatformPrograms && !ccAndNonCCPrograms) {\n filteredPrograms = applyLicensedDistribution(filteredPrograms, programCount, licensedProviderIsCC);\n }\n\n if (ccAndNonCCPrograms && !onAndOffPlatformPrograms) {\n filteredPrograms = applyCCDistribution(filteredPrograms, programCount);\n }\n\n if (onAndOffPlatformPrograms) {\n filteredPrograms = applyPlatformDistribution(filteredPrograms, programCount);\n }\n\n if (sensitiveAndNonSensitiveReceivingProvider) {\n filteredPrograms = getSensitiveAndNonSensitivePrograms({ \n filteredPrograms, \n sensitiveReceivingReferrals, \n sensitiveProviderCount, \n programCount \n });\n }\n\n if (sameFeeScheduleProgram) {\n filteredPrograms = getProgramsWithSameFeeSchedule({ filteredPrograms, programCount });\n }\n\n return filteredPrograms;\n};\n\n// Function to filter and select programs based on criteria\nconst filterAndSelectPrograms = ({\n sendingProviderIsCC = false,\n sendingProviderSensitive = false,\n receivingProviderIsCC = false,\n licensedProviderIsCC = false,\n programInCurrentProvider = false,\n receivingProviderLicensed = true,\n licensedAndUnlicensedReceivingProviders = false,\n receivingProviderSensitive = false,\n sensitiveAndNonSensitiveReceivingProvider = false,\n receivingReferrals = true,\n sensitiveReceivingReferrals,\n onAndOffPlatformPrograms = false,\n ccAndNonCCPrograms = false,\n programsInSameNetwork = false,\n singleNetwork = false,\n programsInSameProvider = false,\n isGrouped = false,\n isFunded = false,\n requiresAuthorization = false,\n sensitiveProviderCount = 1,\n programCount = isGrouped ? 2 : 1,\n sensitiveService = false,\n serviceCount = 1,\n cmCodeRequiredOnAuthorization = false,\n sameFeeScheduleProgram = false,\n}) => {\n // Get the current provider based on criteria\n let filteredPrograms;\n\n if (isGrouped) {\n filteredPrograms = filterGroupedPrograms({\n receivingProviderIsCC,\n receivingProviderLicensed,\n licensedProviderIsCC,\n licensedAndUnlicensedReceivingProviders,\n sensitiveAndNonSensitiveReceivingProvider,\n sensitiveProviderCount,\n programCount,\n receivingProviderSensitive,\n receivingReferrals,\n sensitiveReceivingReferrals,\n onAndOffPlatformPrograms,\n ccAndNonCCPrograms,\n programsInSameNetwork,\n singleNetwork,\n programsInSameProvider,\n isFunded,\n requiresAuthorization,\n sameFeeScheduleProgram,\n });\n } else {\n filteredPrograms = filterSingleProgram({\n receivingProviderIsCC,\n sendingProviderIsCC,\n sendingProviderSensitive,\n programInCurrentProvider,\n receivingProviderLicensed,\n receivingProviderSensitive,\n receivingReferrals,\n isFunded,\n requiresAuthorization,\n cmCodeRequiredOnAuthorization,\n })\n }\n // Select programs and services\n return selectPrograms(filteredPrograms, serviceCount, programCount, sensitiveService);\n}\n\n// Group all unlisted programs by service, filter by program count and filter by results amount\nconst filterAndSelectUnlistedPrograms = ({\n programCount = 1,\n results = 1,\n}) => {\n const groupedUnlistedProgramsByService = Object.values(groupBy(unlistedPrograms, 'services[0]'));\n\n let selectedUnlistedPrograms = groupedUnlistedProgramsByService\n .filter(group => group.length === programCount)\n ?.slice(0, results)\n ?.flat();\n\n return selectedUnlistedPrograms;\n}\n\n// Function to select programs and services\nconst selectPrograms = (filteredPrograms, serviceCount, programCount, sensitiveService) => {\n const filteredServices = services.filter((s) => s.attributes.sensitive === sensitiveService);\n\n const selectedPrograms = filteredPrograms.slice(0, programCount).map((program) => {\n const programServices = filteredServices\n .filter((s) => program.relationships.services.data.map(({ id }) => id).includes(s.id))\n .slice(0, serviceCount).map((s) => s.id);\n return {\n id: program.id,\n services: programServices,\n isOffPlatform: !program.attributes.receiving_referrals\n }\n });\n\n return selectedPrograms;\n}\n\nexport const getSelectedPrograms = (options) => {\n return filterAndSelectPrograms(options);\n}\n\nexport const getSelectedUnlistedPrograms = (options) => {\n return filterAndSelectUnlistedPrograms(options);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { PropTypes } from 'prop-types';
|
|
3
3
|
import { Button, Icon } from '@unite-us/app-components';
|
|
4
|
+
import Spinner from './spinners/Spinner';
|
|
4
5
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
6
|
const NavButtons = _ref => {
|
|
6
7
|
let {
|
|
@@ -13,7 +14,8 @@ const NavButtons = _ref => {
|
|
|
13
14
|
hasOffPlatformReferrals,
|
|
14
15
|
disabled,
|
|
15
16
|
hasDraftReferral = false,
|
|
16
|
-
isForwardReferralPath = false
|
|
17
|
+
isForwardReferralPath = false,
|
|
18
|
+
isSavingDraft = false
|
|
17
19
|
} = _ref;
|
|
18
20
|
return /*#__PURE__*/_jsx("div", {
|
|
19
21
|
className: "flex justify-center responsive-max-width flex-col mx-auto mb-6",
|
|
@@ -34,9 +36,17 @@ const NavButtons = _ref => {
|
|
|
34
36
|
}), !hideForwardButtons ? /*#__PURE__*/_jsxs("div", {
|
|
35
37
|
className: "flex",
|
|
36
38
|
children: [!hideSaveDraftLink && !hasOffPlatformReferrals && !isForwardReferralPath && /*#__PURE__*/_jsxs("button", {
|
|
37
|
-
className: "mr-10 text-current-blue font-bold",
|
|
39
|
+
className: "mr-10 text-current-blue font-bold inline-flex items-center disabled:opacity-50 disabled:cursor-not-allowed",
|
|
38
40
|
onClick: onSaveDraftReferral,
|
|
39
|
-
|
|
41
|
+
disabled: isSavingDraft,
|
|
42
|
+
"aria-busy": isSavingDraft,
|
|
43
|
+
children: [isSavingDraft ? /*#__PURE__*/_jsx(Spinner, {
|
|
44
|
+
className: "mr-2 inline-flex",
|
|
45
|
+
style: {
|
|
46
|
+
width: '16px',
|
|
47
|
+
height: '16px'
|
|
48
|
+
}
|
|
49
|
+
}) : /*#__PURE__*/_jsx(Icon, {
|
|
40
50
|
icon: "Save",
|
|
41
51
|
color: "action-blue",
|
|
42
52
|
className: "mr-2 mb-1"
|
|
@@ -67,13 +77,15 @@ NavButtons.propTypes = {
|
|
|
67
77
|
hideSaveDraftLink: PropTypes.bool,
|
|
68
78
|
hasOffPlatformReferrals: PropTypes.bool,
|
|
69
79
|
hasDraftReferral: PropTypes.bool,
|
|
70
|
-
disabled: PropTypes.bool
|
|
80
|
+
disabled: PropTypes.bool,
|
|
81
|
+
isSavingDraft: PropTypes.bool
|
|
71
82
|
};
|
|
72
83
|
NavButtons.defaultProps = {
|
|
73
84
|
hideForwardButtons: false,
|
|
74
85
|
hideSaveDraftLink: false,
|
|
75
86
|
hasOffPlatformReferrals: false,
|
|
76
|
-
disabled: false
|
|
87
|
+
disabled: false,
|
|
88
|
+
isSavingDraft: false
|
|
77
89
|
};
|
|
78
90
|
export default NavButtons;
|
|
79
91
|
//# sourceMappingURL=NavButtons.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavButtons.js","names":["React","PropTypes","Button","Icon","jsx","_jsx","jsxs","_jsxs","NavButtons","_ref","onBackClick","onForwardClick","onSaveDraftReferral","primaryLabel","hideForwardButtons","hideSaveDraftLink","hasOffPlatformReferrals","disabled","hasDraftReferral","isForwardReferralPath","className","children","id","onClick","label","icon","name","direction","color","position","secondary","primary","propTypes","func","isRequired","string","bool","defaultProps"],"sources":["../../src/components/NavButtons.js"],"sourcesContent":["import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { Button, Icon } from '@unite-us/app-components';\n\nconst NavButtons = ({\n onBackClick,\n onForwardClick,\n onSaveDraftReferral,\n primaryLabel,\n hideForwardButtons,\n hideSaveDraftLink,\n hasOffPlatformReferrals,\n disabled,\n hasDraftReferral = false,\n isForwardReferralPath = false,\n}) => (\n <div className=\"flex justify-center responsive-max-width flex-col mx-auto mb-6\">\n <div className=\"flex justify-between\">\n <Button\n id=\"back\"\n onClick={onBackClick}\n label={hasDraftReferral ? \"Draft Referral\" : \"Back\"}\n icon={\n {\n name: \"ChevronArrow\",\n direction: \"left\",\n color: \"text-blue\",\n position: \"left\"\n }\n }\n className=\"md:h-12 normal-case\"\n secondary={true}\n />\n\n {\n !hideForwardButtons ? (\n <div className=\"flex\">\n {!hideSaveDraftLink && !hasOffPlatformReferrals && !isForwardReferralPath && (\n <button
|
|
1
|
+
{"version":3,"file":"NavButtons.js","names":["React","PropTypes","Button","Icon","Spinner","jsx","_jsx","jsxs","_jsxs","NavButtons","_ref","onBackClick","onForwardClick","onSaveDraftReferral","primaryLabel","hideForwardButtons","hideSaveDraftLink","hasOffPlatformReferrals","disabled","hasDraftReferral","isForwardReferralPath","isSavingDraft","className","children","id","onClick","label","icon","name","direction","color","position","secondary","style","width","height","primary","propTypes","func","isRequired","string","bool","defaultProps"],"sources":["../../src/components/NavButtons.js"],"sourcesContent":["import React from 'react';\nimport { PropTypes } from 'prop-types';\nimport { Button, Icon } from '@unite-us/app-components';\nimport Spinner from './spinners/Spinner';\n\nconst NavButtons = ({\n onBackClick,\n onForwardClick,\n onSaveDraftReferral,\n primaryLabel,\n hideForwardButtons,\n hideSaveDraftLink,\n hasOffPlatformReferrals,\n disabled,\n hasDraftReferral = false,\n isForwardReferralPath = false,\n isSavingDraft = false,\n}) => (\n <div className=\"flex justify-center responsive-max-width flex-col mx-auto mb-6\">\n <div className=\"flex justify-between\">\n <Button\n id=\"back\"\n onClick={onBackClick}\n label={hasDraftReferral ? \"Draft Referral\" : \"Back\"}\n icon={\n {\n name: \"ChevronArrow\",\n direction: \"left\",\n color: \"text-blue\",\n position: \"left\"\n }\n }\n className=\"md:h-12 normal-case\"\n secondary={true}\n />\n\n {\n !hideForwardButtons ? (\n <div className=\"flex\">\n {!hideSaveDraftLink && !hasOffPlatformReferrals && !isForwardReferralPath && (\n <button\n className=\"mr-10 text-current-blue font-bold inline-flex items-center disabled:opacity-50 disabled:cursor-not-allowed\"\n onClick={onSaveDraftReferral}\n disabled={isSavingDraft}\n aria-busy={isSavingDraft}\n >\n {isSavingDraft ? (\n <Spinner className=\"mr-2 inline-flex\" style={{ width: '16px', height: '16px' }} />\n ) : (\n <Icon icon=\"Save\" color=\"action-blue\" className=\"mr-2 mb-1\" />\n )}\n Save Draft Referral(s)\n </button>\n )}\n <Button\n id=\"submit\"\n disabled={disabled}\n onClick={onForwardClick}\n className='md:w-64 md:h-12 w-64 normal-case'\n label={primaryLabel}\n icon={\n {\n name: \"Referral\",\n color: \"white\",\n position: \"left\"\n }\n }\n primary\n />\n </div>\n ) : null\n }\n </div>\n </div>\n);\n\nNavButtons.propTypes = {\n onBackClick: PropTypes.func.isRequired,\n onForwardClick: PropTypes.func.isRequired,\n onSaveDraftReferral:PropTypes.func.isRequired,\n primaryLabel: PropTypes.string.isRequired,\n hideForwardButtons: PropTypes.bool,\n hideSaveDraftLink: PropTypes.bool,\n hasOffPlatformReferrals: PropTypes.bool,\n hasDraftReferral: PropTypes.bool,\n disabled: PropTypes.bool,\n isSavingDraft: PropTypes.bool,\n}\n\nNavButtons.defaultProps = {\n hideForwardButtons: false,\n hideSaveDraftLink: false,\n hasOffPlatformReferrals: false,\n disabled: false,\n isSavingDraft: false,\n}\n\nexport default NavButtons;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -68,6 +68,7 @@ export default function ReferralBuilder() {
|
|
|
68
68
|
const [fieldErrors, setFieldErrors] = useState({});
|
|
69
69
|
const [nextClicked, setNextClicked] = useState(false);
|
|
70
70
|
const [saveDraftClicked, setSaveDraftClicked] = useState(false);
|
|
71
|
+
const [isSavingDraft, setIsSavingDraft] = useState(false);
|
|
71
72
|
const [expandReferralsCard, setExpandReferralsCard] = useState(false);
|
|
72
73
|
const [documents, setDocuments] = useState([]);
|
|
73
74
|
const [caseDocuments, setCaseDocuments] = useState([]);
|
|
@@ -435,7 +436,13 @@ export default function ReferralBuilder() {
|
|
|
435
436
|
const createReferrals = useCreateReferrals();
|
|
436
437
|
const handleSaveDraftReferral = async () => {
|
|
437
438
|
setSaveDraftClicked(true);
|
|
438
|
-
if (
|
|
439
|
+
if (isSavingDraft) return;
|
|
440
|
+
if (!isEmptyErrors(errors)) {
|
|
441
|
+
focusErrors();
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
setIsSavingDraft(true);
|
|
445
|
+
try {
|
|
439
446
|
await createReferrals({
|
|
440
447
|
draft: true
|
|
441
448
|
});
|
|
@@ -444,8 +451,8 @@ export default function ReferralBuilder() {
|
|
|
444
451
|
} = CALLBACKS;
|
|
445
452
|
onSaveDraftReferral && onSaveDraftReferral();
|
|
446
453
|
CALLBACKS.notify.success('Draft referral successfully saved');
|
|
447
|
-
}
|
|
448
|
-
|
|
454
|
+
} finally {
|
|
455
|
+
setIsSavingDraft(false);
|
|
449
456
|
}
|
|
450
457
|
};
|
|
451
458
|
const changeWidthReferralCard = () => {
|
|
@@ -521,7 +528,9 @@ export default function ReferralBuilder() {
|
|
|
521
528
|
hideSaveDraftLink: get(fieldsConfig, 'hideSaveDraftLink'),
|
|
522
529
|
hasOffPlatformReferrals: hasOffPlatformReferrals(referrals),
|
|
523
530
|
hasDraftReferral: hasDraftReferral,
|
|
524
|
-
isForwardReferralPath: isForwardReferralPath
|
|
531
|
+
isForwardReferralPath: isForwardReferralPath,
|
|
532
|
+
disabled: isSavingDraft,
|
|
533
|
+
isSavingDraft: isSavingDraft
|
|
525
534
|
}), !isEmpty(allPrograms) ? /*#__PURE__*/_jsxs("div", {
|
|
526
535
|
className: "relative mx-auto responsive-max-width",
|
|
527
536
|
children: [errorMessage && (nextClicked || saveDraftClicked) ? /*#__PURE__*/_jsxs("div", {
|
|
@@ -611,7 +620,9 @@ export default function ReferralBuilder() {
|
|
|
611
620
|
hideSaveDraftLink: get(fieldsConfig, 'hideSaveDraftLink'),
|
|
612
621
|
hasDraftReferral: hasDraftReferral,
|
|
613
622
|
hasOffPlatformReferrals: hasOffPlatformReferrals(referrals),
|
|
614
|
-
isForwardReferralPath: isForwardReferralPath
|
|
623
|
+
isForwardReferralPath: isForwardReferralPath,
|
|
624
|
+
disabled: isSavingDraft,
|
|
625
|
+
isSavingDraft: isSavingDraft
|
|
615
626
|
})]
|
|
616
627
|
})]
|
|
617
628
|
})
|