@unite-us/app-create-referral 0.15.102 → 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.
@@ -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 getProgramsWithSameFeeSchedule = _ref6 => {
126
- let {
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
- programCount
129
- } = _ref6;
130
- const programsGroupedByFeeSchedule = Object.values(groupBy(filteredPrograms, 'relationships.fee_schedule_program.data.id'));
131
- const groupWithEnoughPrograms = programsGroupedByFeeSchedule.find(group => group.length >= programCount);
132
- return groupWithEnoughPrograms ? groupWithEnoughPrograms.slice(0, programCount) : [];
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 filterGroupedPrograms = _ref7 => {
135
- let {
136
- receivingProviderIsCC,
137
- licensedProviderIsCC,
138
- receivingProviderLicensed,
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
- // Filter programs based on whether they match the criteria
163
- let networkMatch = [];
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
- networkMatch = programsWithSingleSharedNetwork;
166
- } else if (programsInSameNetwork) {
167
- networkMatch = programsWithSharedNetwork;
168
- } else {
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
- const providerMatch = programsInSameProvider ? programsGroupedByProviderId.filter(programs => programs.length > 1).flat() : programsGroupedByProviderId.flat();
173
-
174
- // Filter programs based on receiving provider criteria
175
- const receivingProviderMatch = providerMatch.filter(program => {
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(provider => provider.id === providerId);
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 ? true : providerInNetworkMatch) && (sensitiveAndNonSensitiveReceivingProvider ? true : providerIsSensitiveMatch) && (ccAndNonCCPrograms ? true : providerIsCCMatch);
199
+ return (licensedAndUnlicensedReceivingProviders || providerInNetworkMatch) && (sensitiveAndNonSensitiveReceivingProvider || providerIsSensitiveMatch) && (ccAndNonCCPrograms || providerIsCCMatch);
182
200
  });
183
- let filteredPrograms = receivingProviderMatch;
184
-
185
- // Filter programs based on criteria
186
- if (!onAndOffPlatformPrograms) {
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
- if (!programsInSameProvider) {
190
- filteredPrograms = uniqBy(filteredPrograms, 'relationships.provider.data.id');
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
- filteredPrograms = filteredPrograms.filter(program => {
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
- filteredPrograms = filteredPrograms.filter(program => {
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
- if (onAndOffPlatformPrograms) {
204
- const onPlatform = filteredPrograms.filter(program => program.attributes.receiving_referrals);
205
- const offPlatform = filteredPrograms.filter(program => !program.attributes.receiving_referrals);
206
- filteredPrograms = compact([...onPlatform, ...offPlatform]);
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
- const ccPrograms = getCCOrNonCCPrograms({
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 (licensedAndUnlicensedReceivingProviders) {
220
- const licensedPrograms = getLicensedOrUnlicensedPrograms({
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
- const sensitiveAndNonSensitivePrograms = getSensitiveAndNonSensitivePrograms({
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 = _ref8 => {
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
- } = _ref8;
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 = _ref9 => {
379
+ const filterAndSelectUnlistedPrograms = _ref8 => {
321
380
  var _groupedUnlistedProgr;
322
381
  let {
323
382
  programCount = 1,
324
383
  results = 1
325
- } = _ref9;
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(_ref0 => {
394
+ const programServices = filteredServices.filter(s => program.relationships.services.data.map(_ref9 => {
336
395
  let {
337
396
  id
338
- } = _ref0;
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":[]}
@@ -505,6 +505,7 @@ describe('ReferralBuilder', () => {
505
505
  programCount: 2,
506
506
  serviceCount: 1
507
507
  });
508
+ expect(filteredPrograms.length).toEqual(2);
508
509
  if (filteredPrograms.length) {
509
510
  await act(async () => render(/*#__PURE__*/_jsx(ReferralBuilder, {}), {
510
511
  appContextProviderProps: {
@@ -518,8 +519,11 @@ describe('ReferralBuilder', () => {
518
519
  }));
519
520
  }
520
521
  expect(screen.getByText(/Prepare Your Referrals/i)).toBeInTheDocument();
521
- expect(screen.getByText(/Referral 1: Benefits Eligibility Screening, Grouped/i)).toBeInTheDocument();
522
- expect(screen.queryByText(/Referral 2/i)).not.toBeInTheDocument();
522
+ expect(screen.getByText(/Referral 1: Benefits Eligibility Screening/i)).toBeInTheDocument();
523
+ await act(async () => fireEvent.click(screen.getAllByRole('heading', {
524
+ name: "Referral 2:"
525
+ })[0]));
526
+ expect(screen.getByText(/Referral 2: Benefits Eligibility Screening/i)).toBeInTheDocument();
523
527
  });
524
528
  });
525
529
  describe('one off-platform program, one on-platform program', () => {
@@ -538,6 +542,7 @@ describe('ReferralBuilder', () => {
538
542
  programCount: 2,
539
543
  serviceCount: 1
540
544
  });
545
+ expect(filteredPrograms.length).toEqual(2);
541
546
  if (filteredPrograms.length) {
542
547
  await act(async () => render(/*#__PURE__*/_jsx(ReferralBuilder, {}), {
543
548
  appContextProviderProps: {
@@ -577,6 +582,9 @@ describe('ReferralBuilder', () => {
577
582
  programCount: 2,
578
583
  serviceCount: 1
579
584
  });
585
+
586
+ // Verify we have enough programs for this test scenario
587
+ expect(filteredPrograms.length).toEqual(2);
580
588
  if (filteredPrograms.length) {
581
589
  await act(async () => render(/*#__PURE__*/_jsx(ReferralBuilder, {}), {
582
590
  appContextProviderProps: {
@@ -615,6 +623,7 @@ describe('ReferralBuilder', () => {
615
623
  programCount: 2,
616
624
  serviceCount: 1
617
625
  });
626
+ expect(filteredPrograms.length).toEqual(2);
618
627
  if (filteredPrograms.length) {
619
628
  await act(async () => render(/*#__PURE__*/_jsx(ReferralBuilder, {}), {
620
629
  appContextProviderProps: {