@unite-us/app-create-referral 0.15.70 → 0.15.72
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/mockFeeSchedulePrograms.js +216 -0
- package/dist/__testUtils__/mockData/mockFeeSchedulePrograms.js.map +1 -1
- package/dist/__testUtils__/mockData/mockPrograms.js +112 -0
- package/dist/__testUtils__/mockData/mockPrograms.js.map +1 -1
- package/dist/__testUtils__/mockData/mockProviders.js +82 -0
- package/dist/__testUtils__/mockData/mockProviders.js.map +1 -1
- package/dist/__testUtils__/mockData/utils.js +29 -11
- package/dist/__testUtils__/mockData/utils.js.map +1 -1
- package/dist/pages/builder/__tests__/AuthorizationRequiredPrograms.test.js +83 -1
- package/dist/pages/builder/__tests__/AuthorizationRequiredPrograms.test.js.map +1 -1
- package/dist/pages/builder/buildGroupedReferrals.js +9 -17
- package/dist/pages/builder/buildGroupedReferrals.js.map +1 -1
- package/dist/pages/builder/utils.js +27 -1
- package/dist/pages/builder/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -122,7 +122,16 @@ const getSensitiveAndNonSensitivePrograms = _ref5 => {
|
|
|
122
122
|
}).slice(0, programCount - sensitiveProviderCount);
|
|
123
123
|
return [...nonSensitivePrograms, ...sensitivePrograms];
|
|
124
124
|
};
|
|
125
|
-
const
|
|
125
|
+
const getProgramsWithSameFeeSchedule = _ref6 => {
|
|
126
|
+
let {
|
|
127
|
+
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) : [];
|
|
133
|
+
};
|
|
134
|
+
const filterGroupedPrograms = _ref7 => {
|
|
126
135
|
let {
|
|
127
136
|
receivingProviderIsCC,
|
|
128
137
|
licensedProviderIsCC,
|
|
@@ -140,8 +149,9 @@ const filterGroupedPrograms = _ref6 => {
|
|
|
140
149
|
singleNetwork,
|
|
141
150
|
programsInSameProvider,
|
|
142
151
|
isFunded,
|
|
143
|
-
requiresAuthorization
|
|
144
|
-
|
|
152
|
+
requiresAuthorization,
|
|
153
|
+
sameFeeScheduleProgram
|
|
154
|
+
} = _ref7;
|
|
145
155
|
const {
|
|
146
156
|
programsWithSharedNetwork,
|
|
147
157
|
programsWithSingleSharedNetwork
|
|
@@ -227,11 +237,17 @@ const filterGroupedPrograms = _ref6 => {
|
|
|
227
237
|
});
|
|
228
238
|
filteredPrograms = sensitiveAndNonSensitivePrograms;
|
|
229
239
|
}
|
|
240
|
+
if (sameFeeScheduleProgram) {
|
|
241
|
+
filteredPrograms = getProgramsWithSameFeeSchedule({
|
|
242
|
+
filteredPrograms,
|
|
243
|
+
programCount
|
|
244
|
+
});
|
|
245
|
+
}
|
|
230
246
|
return filteredPrograms;
|
|
231
247
|
};
|
|
232
248
|
|
|
233
249
|
// Function to filter and select programs based on criteria
|
|
234
|
-
const filterAndSelectPrograms =
|
|
250
|
+
const filterAndSelectPrograms = _ref8 => {
|
|
235
251
|
let {
|
|
236
252
|
sendingProviderIsCC = false,
|
|
237
253
|
sendingProviderSensitive = false,
|
|
@@ -256,8 +272,9 @@ const filterAndSelectPrograms = _ref7 => {
|
|
|
256
272
|
programCount = isGrouped ? 2 : 1,
|
|
257
273
|
sensitiveService = false,
|
|
258
274
|
serviceCount = 1,
|
|
259
|
-
cmCodeRequiredOnAuthorization = false
|
|
260
|
-
|
|
275
|
+
cmCodeRequiredOnAuthorization = false,
|
|
276
|
+
sameFeeScheduleProgram = false
|
|
277
|
+
} = _ref8;
|
|
261
278
|
// Get the current provider based on criteria
|
|
262
279
|
let filteredPrograms;
|
|
263
280
|
if (isGrouped) {
|
|
@@ -278,7 +295,8 @@ const filterAndSelectPrograms = _ref7 => {
|
|
|
278
295
|
singleNetwork,
|
|
279
296
|
programsInSameProvider,
|
|
280
297
|
isFunded,
|
|
281
|
-
requiresAuthorization
|
|
298
|
+
requiresAuthorization,
|
|
299
|
+
sameFeeScheduleProgram
|
|
282
300
|
});
|
|
283
301
|
} else {
|
|
284
302
|
filteredPrograms = filterSingleProgram({
|
|
@@ -299,12 +317,12 @@ const filterAndSelectPrograms = _ref7 => {
|
|
|
299
317
|
};
|
|
300
318
|
|
|
301
319
|
// Group all unlisted programs by service, filter by program count and filter by results amount
|
|
302
|
-
const filterAndSelectUnlistedPrograms =
|
|
320
|
+
const filterAndSelectUnlistedPrograms = _ref9 => {
|
|
303
321
|
var _groupedUnlistedProgr;
|
|
304
322
|
let {
|
|
305
323
|
programCount = 1,
|
|
306
324
|
results = 1
|
|
307
|
-
} =
|
|
325
|
+
} = _ref9;
|
|
308
326
|
const groupedUnlistedProgramsByService = Object.values(groupBy(unlistedPrograms, 'services[0]'));
|
|
309
327
|
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();
|
|
310
328
|
return selectedUnlistedPrograms;
|
|
@@ -314,10 +332,10 @@ const filterAndSelectUnlistedPrograms = _ref8 => {
|
|
|
314
332
|
const selectPrograms = (filteredPrograms, serviceCount, programCount, sensitiveService) => {
|
|
315
333
|
const filteredServices = services.filter(s => s.attributes.sensitive === sensitiveService);
|
|
316
334
|
const selectedPrograms = filteredPrograms.slice(0, programCount).map(program => {
|
|
317
|
-
const programServices = filteredServices.filter(s => program.relationships.services.data.map(
|
|
335
|
+
const programServices = filteredServices.filter(s => program.relationships.services.data.map(_ref0 => {
|
|
318
336
|
let {
|
|
319
337
|
id
|
|
320
|
-
} =
|
|
338
|
+
} = _ref0;
|
|
321
339
|
return id;
|
|
322
340
|
}).includes(s.id)).slice(0, serviceCount).map(s => s.id);
|
|
323
341
|
return {
|
|
@@ -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","filterGroupedPrograms","_ref6","licensedAndUnlicensedReceivingProviders","sensitiveAndNonSensitiveReceivingProvider","onAndOffPlatformPrograms","ccAndNonCCPrograms","programsInSameNetwork","programsInSameProvider","networkMatch","programsGroupedByProviderId","Object","providerMatch","flat","receivingProviderMatch","providerInNetworkMatch","providerIsSensitiveMatch","_program$relationship","_program$relationship2","_fsp$attributes","onPlatform","offPlatform","ccPrograms","nonCCPrograms","licensedPrograms","unlicensedPrograms","sensitiveAndNonSensitivePrograms","filterAndSelectPrograms","_ref7","isGrouped","sensitiveService","serviceCount","selectPrograms","filterAndSelectUnlistedPrograms","_ref8","_groupedUnlistedProgr","results","groupedUnlistedProgramsByService","selectedUnlistedPrograms","group","filteredServices","s","selectedPrograms","programServices","_ref9","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 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}) => {\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 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}) => {\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 })\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","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,4 +1,4 @@
|
|
|
1
|
-
import { screen } from "@testing-library/react";
|
|
1
|
+
import { screen, fireEvent } from "@testing-library/react";
|
|
2
2
|
import { render, act } from "../../../__testUtils__/test-utils";
|
|
3
3
|
import { person } from "../../../__testUtils__/mockData/mockPeople";
|
|
4
4
|
import ReferralBuilder from "../ReferralBuilder";
|
|
@@ -82,5 +82,87 @@ describe('ReferralBuilder - Auth Required', () => {
|
|
|
82
82
|
expect(screen.queryByText('ICD-10 Code')).not.toBeInTheDocument();
|
|
83
83
|
});
|
|
84
84
|
});
|
|
85
|
+
describe('should group referrals with same fee schedule program', () => {
|
|
86
|
+
it('should display the builder with one referral and two programs', async () => {
|
|
87
|
+
const filteredPrograms = getSelectedPrograms({
|
|
88
|
+
receivingProviderIsCC: false,
|
|
89
|
+
programInCurrentProvider: false,
|
|
90
|
+
receivingProviderLicensed: true,
|
|
91
|
+
receivingProviderSensitive: false,
|
|
92
|
+
receivingReferrals: true,
|
|
93
|
+
isGrouped: true,
|
|
94
|
+
isFunded: true,
|
|
95
|
+
requiresAuthorization: true,
|
|
96
|
+
programsInSameNetwork: true,
|
|
97
|
+
programsInSameProvider: true,
|
|
98
|
+
programCount: 2,
|
|
99
|
+
serviceCount: 1,
|
|
100
|
+
cmCodeRequiredOnAuthorization: true,
|
|
101
|
+
sameFeeScheduleProgram: true
|
|
102
|
+
});
|
|
103
|
+
if (filteredPrograms.length) {
|
|
104
|
+
await act(async () => render(/*#__PURE__*/_jsx(ReferralBuilder, {}), {
|
|
105
|
+
appContextProviderProps: {
|
|
106
|
+
person,
|
|
107
|
+
selectedPrograms: filteredPrograms,
|
|
108
|
+
currentProvider: mockAppReferralsProps.appState.currentProvider,
|
|
109
|
+
currentEmployee: mockAppReferralsProps.appState.currentEmployee
|
|
110
|
+
}
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
expect(screen.getByText(/Prepare Your Referrals/i)).toBeInTheDocument();
|
|
114
|
+
expect(screen.getByText(/Referral 1: /i)).toBeInTheDocument();
|
|
115
|
+
expect(screen.queryByText(/Referral 2/i)).not.toBeInTheDocument();
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe('should not group referrals with same fee schedule program and sensitive provider', () => {
|
|
119
|
+
it('should not display the builder with one referral and two programs', async () => {
|
|
120
|
+
const programWithFeeScheduleAndSensitiveProvider = getSelectedPrograms({
|
|
121
|
+
receivingProviderIsCC: false,
|
|
122
|
+
programInCurrentProvider: false,
|
|
123
|
+
receivingProviderLicensed: true,
|
|
124
|
+
receivingProviderSensitive: true,
|
|
125
|
+
receivingReferrals: true,
|
|
126
|
+
isFunded: true,
|
|
127
|
+
requiresAuthorization: true,
|
|
128
|
+
programsInSameNetwork: true,
|
|
129
|
+
programCount: 1,
|
|
130
|
+
serviceCount: 1,
|
|
131
|
+
cmCodeRequiredOnAuthorization: true,
|
|
132
|
+
sameFeeScheduleProgram: true
|
|
133
|
+
});
|
|
134
|
+
const programWithFeeScheduleAndNoSensitiveProvider = getSelectedPrograms({
|
|
135
|
+
receivingProviderIsCC: false,
|
|
136
|
+
programInCurrentProvider: false,
|
|
137
|
+
receivingProviderLicensed: true,
|
|
138
|
+
receivingProviderSensitive: false,
|
|
139
|
+
receivingReferrals: true,
|
|
140
|
+
isFunded: true,
|
|
141
|
+
requiresAuthorization: true,
|
|
142
|
+
programsInSameNetwork: true,
|
|
143
|
+
programCount: 1,
|
|
144
|
+
serviceCount: 1,
|
|
145
|
+
cmCodeRequiredOnAuthorization: true,
|
|
146
|
+
sameFeeScheduleProgram: true
|
|
147
|
+
});
|
|
148
|
+
const filteredPrograms = [...programWithFeeScheduleAndSensitiveProvider, ...programWithFeeScheduleAndNoSensitiveProvider];
|
|
149
|
+
if (filteredPrograms.length) {
|
|
150
|
+
await act(async () => render(/*#__PURE__*/_jsx(ReferralBuilder, {}), {
|
|
151
|
+
appContextProviderProps: {
|
|
152
|
+
person,
|
|
153
|
+
selectedPrograms: filteredPrograms,
|
|
154
|
+
currentProvider: mockAppReferralsProps.appState.currentProvider,
|
|
155
|
+
currentEmployee: mockAppReferralsProps.appState.currentEmployee
|
|
156
|
+
}
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
expect(screen.getByText(/Prepare Your Referrals/i)).toBeInTheDocument();
|
|
160
|
+
expect(screen.getByText(/Referral 1: /i)).toBeInTheDocument();
|
|
161
|
+
fireEvent.click(screen.getAllByRole('heading', {
|
|
162
|
+
name: "Referral 2:"
|
|
163
|
+
})[0]);
|
|
164
|
+
expect(screen.getByText(/Referral 2: /i)).toBeInTheDocument();
|
|
165
|
+
});
|
|
166
|
+
});
|
|
85
167
|
});
|
|
86
168
|
//# sourceMappingURL=AuthorizationRequiredPrograms.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthorizationRequiredPrograms.test.js","names":["screen","render","act","person","ReferralBuilder","mockAppReferralsProps","getSelectedPrograms","jsx","_jsx","jest","mock","useFeatureFlag","fn","describe","afterEach","clearAllMocks","it","filteredPrograms","receivingProviderIsCC","programInCurrentProvider","receivingProviderLicensed","receivingProviderSensitive","receivingReferrals","isGrouped","isFunded","requiresAuthorization","programCount","serviceCount","cmCodeRequiredOnAuthorization","length","appContextProviderProps","selectedPrograms","currentProvider","appState","currentEmployee","expect","getByText","toBeInTheDocument","queryByText","not","getByRole","name"],"sources":["../../../../src/pages/builder/__tests__/AuthorizationRequiredPrograms.test.js"],"sourcesContent":["import { screen } from \"@testing-library/react\";\nimport { render, act } from \"../../../__testUtils__/test-utils\";\nimport { person } from \"../../../__testUtils__/mockData/mockPeople\";\nimport ReferralBuilder from \"../ReferralBuilder\";\nimport mockAppReferralsProps from \"../../../__testUtils__/mockData/components/mockAppReferrals\";\nimport { getSelectedPrograms } from \"../../../__testUtils__/mockData/utils\";\n\njest.mock(\"../../../utils/useFeatureFlag\", () => ({\n useFeatureFlag: jest.fn(),\n}));\n\ndescribe('ReferralBuilder - Auth Required', () => {\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n describe('should build referral(s) for auth-required programs', () => {\n it('should display the builder with the authorization form', async () => {\n const filteredPrograms = getSelectedPrograms({\n receivingProviderIsCC: false,\n programInCurrentProvider: false,\n receivingProviderLicensed: true,\n receivingProviderSensitive: false,\n receivingReferrals: true,\n isGrouped: false,\n isFunded: true,\n requiresAuthorization: true,\n programCount: 1,\n serviceCount: 1,\n cmCodeRequiredOnAuthorization: true,\n });\n\n if (filteredPrograms.length) {\n await act(async () => render(<ReferralBuilder />, {\n appContextProviderProps: {\n person,\n selectedPrograms: filteredPrograms,\n currentProvider: mockAppReferralsProps.appState.currentProvider,\n currentEmployee: mockAppReferralsProps.appState.currentEmployee\n }\n }))\n }\n\n expect(screen.getByText(/Prepare Your Referrals/i)).toBeInTheDocument();\n expect(screen.getByText(/Referral 1: Food Pantry, Funded/i)).toBeInTheDocument();\n expect(screen.queryByText(/Referral 2/i)).not.toBeInTheDocument();\n\n expect(screen.getByRole(\n 'heading',\n { name: /Fruit and Vegetable Prescription \\(Greater Hickory Cooperative Christian Ministry\\)/i })\n ).toBeInTheDocument();\n expect(screen.getByRole('spinbutton', { name: /Amount Requested/i })).toBeInTheDocument();\n expect(screen.getByRole('textbox', { name: /Start Date/i })).toBeInTheDocument();\n expect(screen.getByRole('textbox', { name: /End Date/i })).toBeInTheDocument();\n });\n });\n\n describe('when clinical modification codes are not required on fee schedule program', () => {\n it('does not render the icd10 field', async () => {\n const filteredPrograms = getSelectedPrograms({\n receivingProviderIsCC: false,\n programInCurrentProvider: false,\n receivingProviderLicensed: true,\n receivingProviderSensitive: false,\n receivingReferrals: true,\n isGrouped: false,\n isFunded: true,\n requiresAuthorization: true,\n programCount: 1,\n serviceCount: 1,\n cmCodeRequiredOnAuthorization: false,\n });\n\n if (filteredPrograms.length) {\n await act(async () => render(<ReferralBuilder />, {\n appContextProviderProps: {\n person,\n selectedPrograms: filteredPrograms,\n currentProvider: mockAppReferralsProps.appState.currentProvider,\n currentEmployee: mockAppReferralsProps.appState.currentEmployee\n }\n }))\n }\n\n expect(screen.queryByText('ICD-10 Code')).not.toBeInTheDocument();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"AuthorizationRequiredPrograms.test.js","names":["screen","fireEvent","render","act","person","ReferralBuilder","mockAppReferralsProps","getSelectedPrograms","jsx","_jsx","jest","mock","useFeatureFlag","fn","describe","afterEach","clearAllMocks","it","filteredPrograms","receivingProviderIsCC","programInCurrentProvider","receivingProviderLicensed","receivingProviderSensitive","receivingReferrals","isGrouped","isFunded","requiresAuthorization","programCount","serviceCount","cmCodeRequiredOnAuthorization","length","appContextProviderProps","selectedPrograms","currentProvider","appState","currentEmployee","expect","getByText","toBeInTheDocument","queryByText","not","getByRole","name","programsInSameNetwork","programsInSameProvider","sameFeeScheduleProgram","programWithFeeScheduleAndSensitiveProvider","programWithFeeScheduleAndNoSensitiveProvider","click","getAllByRole"],"sources":["../../../../src/pages/builder/__tests__/AuthorizationRequiredPrograms.test.js"],"sourcesContent":["import { screen, fireEvent } from \"@testing-library/react\";\nimport { render, act } from \"../../../__testUtils__/test-utils\";\nimport { person } from \"../../../__testUtils__/mockData/mockPeople\";\nimport ReferralBuilder from \"../ReferralBuilder\";\nimport mockAppReferralsProps from \"../../../__testUtils__/mockData/components/mockAppReferrals\";\nimport { getSelectedPrograms } from \"../../../__testUtils__/mockData/utils\";\n\njest.mock(\"../../../utils/useFeatureFlag\", () => ({\n useFeatureFlag: jest.fn(),\n}));\n\ndescribe('ReferralBuilder - Auth Required', () => {\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n describe('should build referral(s) for auth-required programs', () => {\n it('should display the builder with the authorization form', async () => {\n const filteredPrograms = getSelectedPrograms({\n receivingProviderIsCC: false,\n programInCurrentProvider: false,\n receivingProviderLicensed: true,\n receivingProviderSensitive: false,\n receivingReferrals: true,\n isGrouped: false,\n isFunded: true,\n requiresAuthorization: true,\n programCount: 1,\n serviceCount: 1,\n cmCodeRequiredOnAuthorization: true,\n });\n\n if (filteredPrograms.length) {\n await act(async () => render(<ReferralBuilder />, {\n appContextProviderProps: {\n person,\n selectedPrograms: filteredPrograms,\n currentProvider: mockAppReferralsProps.appState.currentProvider,\n currentEmployee: mockAppReferralsProps.appState.currentEmployee\n }\n }))\n }\n\n expect(screen.getByText(/Prepare Your Referrals/i)).toBeInTheDocument();\n expect(screen.getByText(/Referral 1: Food Pantry, Funded/i)).toBeInTheDocument();\n expect(screen.queryByText(/Referral 2/i)).not.toBeInTheDocument();\n\n expect(screen.getByRole(\n 'heading',\n { name: /Fruit and Vegetable Prescription \\(Greater Hickory Cooperative Christian Ministry\\)/i })\n ).toBeInTheDocument();\n expect(screen.getByRole('spinbutton', { name: /Amount Requested/i })).toBeInTheDocument();\n expect(screen.getByRole('textbox', { name: /Start Date/i })).toBeInTheDocument();\n expect(screen.getByRole('textbox', { name: /End Date/i })).toBeInTheDocument();\n });\n });\n\n describe('when clinical modification codes are not required on fee schedule program', () => {\n it('does not render the icd10 field', async () => {\n const filteredPrograms = getSelectedPrograms({\n receivingProviderIsCC: false,\n programInCurrentProvider: false,\n receivingProviderLicensed: true,\n receivingProviderSensitive: false,\n receivingReferrals: true,\n isGrouped: false,\n isFunded: true,\n requiresAuthorization: true,\n programCount: 1,\n serviceCount: 1,\n cmCodeRequiredOnAuthorization: false,\n });\n\n if (filteredPrograms.length) {\n await act(async () => render(<ReferralBuilder />, {\n appContextProviderProps: {\n person,\n selectedPrograms: filteredPrograms,\n currentProvider: mockAppReferralsProps.appState.currentProvider,\n currentEmployee: mockAppReferralsProps.appState.currentEmployee\n }\n }))\n }\n\n expect(screen.queryByText('ICD-10 Code')).not.toBeInTheDocument();\n });\n });\n\n describe('should group referrals with same fee schedule program', () => {\n it('should display the builder with one referral and two programs', async () => {\n const filteredPrograms = getSelectedPrograms({\n receivingProviderIsCC: false,\n programInCurrentProvider: false,\n receivingProviderLicensed: true,\n receivingProviderSensitive: false,\n receivingReferrals: true,\n isGrouped: true,\n isFunded: true,\n requiresAuthorization: true,\n programsInSameNetwork: true,\n programsInSameProvider: true,\n programCount: 2,\n serviceCount: 1,\n cmCodeRequiredOnAuthorization: true,\n sameFeeScheduleProgram: true,\n });\n\n if (filteredPrograms.length) {\n await act(async () => render(<ReferralBuilder />, {\n appContextProviderProps: {\n person,\n selectedPrograms: filteredPrograms,\n currentProvider: mockAppReferralsProps.appState.currentProvider,\n currentEmployee: mockAppReferralsProps.appState.currentEmployee\n }\n }))\n }\n\n expect(screen.getByText(/Prepare Your Referrals/i)).toBeInTheDocument();\n expect(screen.getByText(/Referral 1: /i)).toBeInTheDocument();\n expect(screen.queryByText(/Referral 2/i)).not.toBeInTheDocument();\n });\n });\n \n describe('should not group referrals with same fee schedule program and sensitive provider', () => {\n it('should not display the builder with one referral and two programs', async () => {\n const programWithFeeScheduleAndSensitiveProvider = getSelectedPrograms({\n receivingProviderIsCC: false,\n programInCurrentProvider: false,\n receivingProviderLicensed: true,\n receivingProviderSensitive: true,\n receivingReferrals: true,\n isFunded: true,\n requiresAuthorization: true,\n programsInSameNetwork: true,\n programCount: 1,\n serviceCount: 1,\n cmCodeRequiredOnAuthorization: true,\n sameFeeScheduleProgram: true,\n });\n\n const programWithFeeScheduleAndNoSensitiveProvider = getSelectedPrograms({\n receivingProviderIsCC: false,\n programInCurrentProvider: false,\n receivingProviderLicensed: true,\n receivingProviderSensitive: false,\n receivingReferrals: true,\n isFunded: true,\n requiresAuthorization: true,\n programsInSameNetwork: true,\n programCount: 1,\n serviceCount: 1,\n cmCodeRequiredOnAuthorization: true,\n sameFeeScheduleProgram: true,\n });\n\n const filteredPrograms = [\n ...programWithFeeScheduleAndSensitiveProvider,\n ...programWithFeeScheduleAndNoSensitiveProvider,\n ];\n\n if (filteredPrograms.length) {\n await act(async () => render(<ReferralBuilder />, {\n appContextProviderProps: {\n person,\n selectedPrograms: filteredPrograms,\n currentProvider: mockAppReferralsProps.appState.currentProvider,\n currentEmployee: mockAppReferralsProps.appState.currentEmployee\n }\n }))\n }\n\n expect(screen.getByText(/Prepare Your Referrals/i)).toBeInTheDocument();\n expect(screen.getByText(/Referral 1: /i)).toBeInTheDocument();\n\n fireEvent.click(screen.getAllByRole('heading', { name: `Referral 2:` })[0]);\n expect(screen.getByText(/Referral 2: /i)).toBeInTheDocument();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
2
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
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; }
|
|
4
4
|
import { isEmpty, every, head, groupBy, flatMap } from 'lodash';
|
|
5
|
-
import { isUnlistedReferral, filterNetworks, programIsOffPlatform, programIsOnPlatform } from './utils';
|
|
5
|
+
import { isUnlistedReferral, filterNetworks, programIsOffPlatform, programIsOnPlatform, separateSensitiveAndNonSensitiveAuthPrograms, createSameFeeReferrals, createSensitiveProgramReferrals, createNonAuthReferrals } from './utils';
|
|
6
6
|
import { OFF_PLATFORM_REFERRALS_ONLY } from './constants';
|
|
7
7
|
|
|
8
8
|
// Grouping Rules:
|
|
@@ -160,22 +160,14 @@ const groupByFunded = referral => {
|
|
|
160
160
|
var _p$fee_schedule_progr2;
|
|
161
161
|
return !((_p$fee_schedule_progr2 = p.fee_schedule_program) !== null && _p$fee_schedule_progr2 !== void 0 && _p$fee_schedule_progr2.authorization_required);
|
|
162
162
|
});
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
const sameFeeReferrals =
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
} : {}));
|
|
172
|
-
|
|
173
|
-
// Create a new referral for programs without fee authorization required
|
|
174
|
-
const nonAuthReferrals = !isEmpty(fundedWithoutAuthorizationPrograms) ? [_objectSpread(_objectSpread({}, referral), {}, {
|
|
175
|
-
programs: fundedWithoutAuthorizationPrograms,
|
|
176
|
-
ungroup: true
|
|
177
|
-
})] : [];
|
|
178
|
-
return [...nonAuthReferrals, ...sameFeeReferrals];
|
|
163
|
+
const {
|
|
164
|
+
sensitive: sensitiveAuthPrograms,
|
|
165
|
+
nonSensitive: nonSensitiveAuthPrograms
|
|
166
|
+
} = separateSensitiveAndNonSensitiveAuthPrograms(fundedWithAuthorizationPrograms);
|
|
167
|
+
const sameFeeReferrals = createSameFeeReferrals(referral, nonSensitiveAuthPrograms);
|
|
168
|
+
const sensitiveProgramReferrals = createSensitiveProgramReferrals(referral, sensitiveAuthPrograms);
|
|
169
|
+
const nonAuthReferrals = createNonAuthReferrals(referral, fundedWithoutAuthorizationPrograms);
|
|
170
|
+
return [...nonAuthReferrals, ...sameFeeReferrals, ...sensitiveProgramReferrals];
|
|
179
171
|
};
|
|
180
172
|
const groupUnlistedProgramsToReferrals = referrals => {
|
|
181
173
|
const unlistedReferrals = [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildGroupedReferrals.js","names":["isEmpty","every","head","groupBy","flatMap","isUnlistedReferral","filterNetworks","programIsOffPlatform","programIsOnPlatform","OFF_PLATFORM_REFERRALS_ONLY","withPreventUngroup","fn","referral","prevent_ungroup","groupByNetworkImpl","networks","length","network","singleNetworkPrograms","programs","filter","program","_program$provider","provider","multipleNetworkPrograms","_program$provider2","noNetworkPrograms","_program$provider3","programsGroupedByNetworkId","sameNetworkReferrals","Object","values","map","_programs$0$provider","_objectSpread","multipleNetworkReferrals","noNetworkReferrals","groupByNetwork","groupByNetworkStatus","p","inNetworkPrograms","OONPrograms","groupBySensitivityImpl","_head","_p$provider","sensitive","sensitivePrograms","_p$provider2","nonSensitivePrograms","_p$provider3","nonSensitiveReferrals","groupBySensitivity","groupByCCImpl","_head2","_p$provider4","provider_type","ccPrograms","_p$provider5","nonCCPrograms","_p$provider6","nonCCReferrals","groupByCC","preventGroupingForSensitiveProvider","groupByFunded","fundedWithAuthorizationPrograms","_p$fee_schedule_progr","fee_schedule_program","authorization_required","fundedWithoutAuthorizationPrograms","_p$fee_schedule_progr2","programsGroupedByFeeSchedule","sameFeePrograms","sameFeeReferrals","nonAuthReferrals","ungroup","groupUnlistedProgramsToReferrals","referrals","unlistedReferrals","listedReferrals","forEach","id","includes","push","unlistedReferral","processReferral","foundReferral","find","_unlistedReferral$pro","_referral$programs$","services","service","status","toLowerCase","splice","updatedUnlistedReferrals","_unlistedReferral$pro2","buildGroupedReferrals","newReferrals","currentProvider","groupedReferrals","groupOperations","operation"],"sources":["../../../src/pages/builder/buildGroupedReferrals.js"],"sourcesContent":["import { isEmpty, every, head, groupBy, flatMap } from 'lodash';\nimport { isUnlistedReferral, filterNetworks, programIsOffPlatform, programIsOnPlatform } from './utils';\nimport { OFF_PLATFORM_REFERRALS_ONLY } from './constants';\n\n// Grouping Rules:\n// - On- and off-platform programs cannot be grouped\n// - Service must be the same\n// - Programs in coordination centers cannot be grouped\n// - Programs must be in the same network\n// - Programs in sensitive providers cannot be grouped\n// - Programs at the same provider cannot be grouped\n// - Users at sensitive providers cannot group programs\n// - Funded programs that require authroization with the same fee schedule program can be grouped\n// - Unlisted programs can only be grouped with programs in the same service and with off platform referrals\n\nconst withPreventUngroup = (fn) => (referral) => (\n referral.prevent_ungroup ? [referral] : fn(referral)\n);\n\nconst groupByNetworkImpl = (referral) => {\n const networks = filterNetworks(referral);\n // if there is only one possible network, set the referral's network and return the referral\n if (networks.length === 1 || isUnlistedReferral(referral)) {\n referral.network = head(networks);\n return [referral];\n }\n // if there is more than one possible network, divide the programs into multiple referrals:\n // referrals with programs in providers in a single network and\n // referrals with programs in providers in multiple networks\n // referrals with unlisted programs, don't have network\n const singleNetworkPrograms = referral.programs.filter(program => program.provider?.networks?.length === 1);\n const multipleNetworkPrograms = referral.programs.filter(program => program.provider?.networks?.length > 1);\n const noNetworkPrograms = referral.programs.filter(program => !program.provider?.networks?.length);\n // group single network programs by network id\n const programsGroupedByNetworkId = groupBy(singleNetworkPrograms, 'provider.networks[0].id');\n // create a grouped referral for programs with the same single network\n const sameNetworkReferrals = Object.values(programsGroupedByNetworkId).map(programs => ({\n ...referral,\n programs,\n network: head(programs[0].provider?.networks),\n }))\n // create separate referrals for each program with multiple networks\n const multipleNetworkReferrals = multipleNetworkPrograms.map(program => ({\n ...referral,\n programs: [program],\n network: head(networks),\n }))\n // create separate referrals for each program with no network\n const noNetworkReferrals = noNetworkPrograms.map(program => ({\n ...referral,\n programs: [program],\n }))\n\n return [...multipleNetworkReferrals, ...sameNetworkReferrals, ...noNetworkReferrals];\n}\n\nconst groupByNetwork = withPreventUngroup(groupByNetworkImpl);\n\nconst groupByNetworkStatus = (referral) => {\n if (referral.prevent_ungroup) {\n return [referral];\n }\n // if every program is on-platform or every programs is off-platform, return the referral\n if (every(referral.programs.map(p => programIsOnPlatform(p))) ||\n every(referral.programs.map(p => programIsOffPlatform(p)))) {\n return [referral];\n }\n // divide programs into on- and off-platform referrals\n const inNetworkPrograms = referral.programs.filter(p => programIsOnPlatform(p));\n const OONPrograms = referral.programs.filter(p => programIsOffPlatform(p));\n\n return [\n ...inNetworkPrograms.length ? [{ ...referral, programs: inNetworkPrograms }] : [],\n ...OONPrograms.length ? [{ ...referral, programs: OONPrograms }] : []\n ];\n}\n\nconst groupBySensitivityImpl = (referral) => {\n // if every program is non-sensitive or the referral contains only one sensitive program, return referral\n if (every(referral.programs.map(p => !p?.provider?.sensitive)) ||\n (referral.programs.length === 1 && head(referral.programs)?.provider?.sensitive)) {\n return [referral];\n }\n // create a new referral for each sensitive program\n const sensitivePrograms = referral.programs.filter(p => p?.provider?.sensitive).map(program => ({\n ...referral, programs: [program]\n }));\n // create a new referral for non-sensitive programs\n const nonSensitivePrograms = referral.programs.filter(p => !p?.provider?.sensitive);\n const nonSensitiveReferrals = !isEmpty(nonSensitivePrograms) ? [{ ...referral, programs: nonSensitivePrograms }] : [];\n\n return [...sensitivePrograms, ...nonSensitiveReferrals];\n}\n\nconst groupBySensitivity = withPreventUngroup(groupBySensitivityImpl);\n\nconst groupByCCImpl = (referral) => {\n // if no programs are in a coordination center or the referral contains only one program in a cc, return referral\n if (every(referral.programs.map(p => p?.provider?.provider_type !== 'coordination_center')) ||\n (referral.programs.length === 1 && head(referral.programs)?.provider?.provider_type === 'coordination_center')) {\n return [referral];\n }\n // create a new referral for each program in a cc\n const ccPrograms = referral.programs.filter(p => p?.provider?.provider_type === 'coordination_center')\n .map(program => ({\n ...referral, programs: [program]\n }));\n // create a new referral for programs not in a cc\n const nonCCPrograms = referral.programs.filter(p => p?.provider?.provider_type !== 'coordination_center');\n const nonCCReferrals = !isEmpty(nonCCPrograms) ? [{ ...referral, programs: nonCCPrograms }] : [];\n\n return [...ccPrograms, ...nonCCReferrals];\n}\n\nconst groupByCC = withPreventUngroup(groupByCCImpl);\n\nconst preventGroupingForSensitiveProvider = (referral) => {\n const networks = filterNetworks(referral);\n // if there is only one possible network, set the referral's network\n if (networks.length === 1) {\n referral.network = head(networks);\n }\n const { programs } = referral;\n return programs.length > 1 ?\n programs.map(program => ({ ...referral, programs: [program] })) :\n [referral];\n};\n\nconst groupByFunded = (referral) => {\n const networks = filterNetworks(referral);\n // if there is only one possible network, set the referral's network\n if (networks.length === 1) {\n referral.network = head(networks);\n }\n\n const fundedWithAuthorizationPrograms = referral.programs.filter(p => p.fee_schedule_program?.authorization_required);\n const fundedWithoutAuthorizationPrograms = referral.programs.filter(p => !p.fee_schedule_program?.authorization_required);\n\n const programsGroupedByFeeSchedule = groupBy(fundedWithAuthorizationPrograms, 'fee_schedule_program.id');\n const sameFeePrograms = Object.values(programsGroupedByFeeSchedule);\n\n // Create a new referral for each program with a shared fee schedule program\n const sameFeeReferrals = sameFeePrograms.map(program => ({\n ...referral,\n programs: program,\n ...(program.length >= 2 ? { prevent_ungroup: true } : {}) // A referral with two or more programs with the same fee schedule cannot be ungrouped\n }));\n\n // Create a new referral for programs without fee authorization required\n const nonAuthReferrals = !isEmpty(fundedWithoutAuthorizationPrograms) ? [{ ...referral, programs: fundedWithoutAuthorizationPrograms, ungroup: true }] : [];\n\n return [...nonAuthReferrals, ...sameFeeReferrals];\n};\n\nconst groupUnlistedProgramsToReferrals = (referrals) => {\n const unlistedReferrals = [], listedReferrals = [];\n\n referrals.forEach(referral => {\n if (every(referral.programs, p => p.id.includes('unlisted')))\n unlistedReferrals.push(referral);\n else\n listedReferrals.push(referral);\n });\n\n if (unlistedReferrals.length === 0) {\n return listedReferrals;\n }\n\n // Loop over the unlisted referrals, in case of a match, add the unlisted program to the referral \n // and remove it from the unlisted referral\n unlistedReferrals.forEach(unlistedReferral => {\n const processReferral = (referrals) => {\n // Find a referral with the same service and off-platform status\n const foundReferral = referrals.find(referral =>\n unlistedReferral.programs[0]?.services[0] === referral.service.id &&\n referral.programs[0]?.status?.toLowerCase() === OFF_PLATFORM_REFERRALS_ONLY\n );\n \n if (foundReferral) {\n // Add the unlisted program to the referral\n foundReferral.programs.push(unlistedReferral.programs[0]);\n // Remove the unlisted program from the referral, otherwise, it will be added to referrals multiple times\n unlistedReferral.programs.splice(0, 1);\n }\n };\n \n processReferral(listedReferrals);\n processReferral(unlistedReferrals);\n });\n\n // Remove referrals with no programs\n const updatedUnlistedReferrals = unlistedReferrals.filter(unlistedReferral => {\n if (unlistedReferral?.programs?.length > 0)\n return unlistedReferral;\n });\n\n return [...listedReferrals, ...updatedUnlistedReferrals];\n}\n\nexport const buildGroupedReferrals = (newReferrals, currentProvider) => {\n let groupedReferrals = newReferrals;\n // if the current provider is sensitive, prevent grouping\n if (currentProvider?.sensitive) {\n groupedReferrals = flatMap(groupedReferrals, preventGroupingForSensitiveProvider);\n } else {\n const groupOperations = [];\n\n groupOperations.push(groupByFunded, groupByNetwork, groupByNetworkStatus, groupBySensitivity, groupByCC);\n\n groupOperations.forEach(operation => {\n groupedReferrals = flatMap(groupedReferrals, operation);\n });\n\n groupedReferrals = groupUnlistedProgramsToReferrals(groupedReferrals);\n }\n\n return groupedReferrals;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"buildGroupedReferrals.js","names":["isEmpty","every","head","groupBy","flatMap","isUnlistedReferral","filterNetworks","programIsOffPlatform","programIsOnPlatform","separateSensitiveAndNonSensitiveAuthPrograms","createSameFeeReferrals","createSensitiveProgramReferrals","createNonAuthReferrals","OFF_PLATFORM_REFERRALS_ONLY","withPreventUngroup","fn","referral","prevent_ungroup","groupByNetworkImpl","networks","length","network","singleNetworkPrograms","programs","filter","program","_program$provider","provider","multipleNetworkPrograms","_program$provider2","noNetworkPrograms","_program$provider3","programsGroupedByNetworkId","sameNetworkReferrals","Object","values","map","_programs$0$provider","_objectSpread","multipleNetworkReferrals","noNetworkReferrals","groupByNetwork","groupByNetworkStatus","p","inNetworkPrograms","OONPrograms","groupBySensitivityImpl","_head","_p$provider","sensitive","sensitivePrograms","_p$provider2","nonSensitivePrograms","_p$provider3","nonSensitiveReferrals","groupBySensitivity","groupByCCImpl","_head2","_p$provider4","provider_type","ccPrograms","_p$provider5","nonCCPrograms","_p$provider6","nonCCReferrals","groupByCC","preventGroupingForSensitiveProvider","groupByFunded","fundedWithAuthorizationPrograms","_p$fee_schedule_progr","fee_schedule_program","authorization_required","fundedWithoutAuthorizationPrograms","_p$fee_schedule_progr2","sensitiveAuthPrograms","nonSensitive","nonSensitiveAuthPrograms","sameFeeReferrals","sensitiveProgramReferrals","nonAuthReferrals","groupUnlistedProgramsToReferrals","referrals","unlistedReferrals","listedReferrals","forEach","id","includes","push","unlistedReferral","processReferral","foundReferral","find","_unlistedReferral$pro","_referral$programs$","services","service","status","toLowerCase","splice","updatedUnlistedReferrals","_unlistedReferral$pro2","buildGroupedReferrals","newReferrals","currentProvider","groupedReferrals","groupOperations","operation"],"sources":["../../../src/pages/builder/buildGroupedReferrals.js"],"sourcesContent":["import { isEmpty, every, head, groupBy, flatMap } from 'lodash';\nimport {\n isUnlistedReferral,\n filterNetworks,\n programIsOffPlatform,\n programIsOnPlatform,\n separateSensitiveAndNonSensitiveAuthPrograms,\n createSameFeeReferrals,\n createSensitiveProgramReferrals,\n createNonAuthReferrals,\n} from './utils';\nimport { OFF_PLATFORM_REFERRALS_ONLY } from './constants';\n\n// Grouping Rules:\n// - On- and off-platform programs cannot be grouped\n// - Service must be the same\n// - Programs in coordination centers cannot be grouped\n// - Programs must be in the same network\n// - Programs in sensitive providers cannot be grouped\n// - Programs at the same provider cannot be grouped\n// - Users at sensitive providers cannot group programs\n// - Funded programs that require authroization with the same fee schedule program can be grouped\n// - Unlisted programs can only be grouped with programs in the same service and with off platform referrals\n\nconst withPreventUngroup = (fn) => (referral) => (\n referral.prevent_ungroup ? [referral] : fn(referral)\n);\n\nconst groupByNetworkImpl = (referral) => {\n const networks = filterNetworks(referral);\n // if there is only one possible network, set the referral's network and return the referral\n if (networks.length === 1 || isUnlistedReferral(referral)) {\n referral.network = head(networks);\n return [referral];\n }\n // if there is more than one possible network, divide the programs into multiple referrals:\n // referrals with programs in providers in a single network and\n // referrals with programs in providers in multiple networks\n // referrals with unlisted programs, don't have network\n const singleNetworkPrograms = referral.programs.filter(program => program.provider?.networks?.length === 1);\n const multipleNetworkPrograms = referral.programs.filter(program => program.provider?.networks?.length > 1);\n const noNetworkPrograms = referral.programs.filter(program => !program.provider?.networks?.length);\n // group single network programs by network id\n const programsGroupedByNetworkId = groupBy(singleNetworkPrograms, 'provider.networks[0].id');\n // create a grouped referral for programs with the same single network\n const sameNetworkReferrals = Object.values(programsGroupedByNetworkId).map(programs => ({\n ...referral,\n programs,\n network: head(programs[0].provider?.networks),\n }))\n // create separate referrals for each program with multiple networks\n const multipleNetworkReferrals = multipleNetworkPrograms.map(program => ({\n ...referral,\n programs: [program],\n network: head(networks),\n }))\n // create separate referrals for each program with no network\n const noNetworkReferrals = noNetworkPrograms.map(program => ({\n ...referral,\n programs: [program],\n }))\n\n return [...multipleNetworkReferrals, ...sameNetworkReferrals, ...noNetworkReferrals];\n}\n\nconst groupByNetwork = withPreventUngroup(groupByNetworkImpl);\n\nconst groupByNetworkStatus = (referral) => {\n if (referral.prevent_ungroup) {\n return [referral];\n }\n // if every program is on-platform or every programs is off-platform, return the referral\n if (every(referral.programs.map(p => programIsOnPlatform(p))) ||\n every(referral.programs.map(p => programIsOffPlatform(p)))) {\n return [referral];\n }\n // divide programs into on- and off-platform referrals\n const inNetworkPrograms = referral.programs.filter(p => programIsOnPlatform(p));\n const OONPrograms = referral.programs.filter(p => programIsOffPlatform(p));\n\n return [\n ...inNetworkPrograms.length ? [{ ...referral, programs: inNetworkPrograms }] : [],\n ...OONPrograms.length ? [{ ...referral, programs: OONPrograms }] : []\n ];\n}\n\nconst groupBySensitivityImpl = (referral) => {\n // if every program is non-sensitive or the referral contains only one sensitive program, return referral\n if (every(referral.programs.map(p => !p?.provider?.sensitive)) ||\n (referral.programs.length === 1 && head(referral.programs)?.provider?.sensitive)) {\n return [referral];\n }\n // create a new referral for each sensitive program\n const sensitivePrograms = referral.programs.filter(p => p?.provider?.sensitive).map(program => ({\n ...referral, programs: [program]\n }));\n // create a new referral for non-sensitive programs\n const nonSensitivePrograms = referral.programs.filter(p => !p?.provider?.sensitive);\n const nonSensitiveReferrals = !isEmpty(nonSensitivePrograms) ? [{ ...referral, programs: nonSensitivePrograms }] : [];\n\n return [...sensitivePrograms, ...nonSensitiveReferrals];\n}\n\nconst groupBySensitivity = withPreventUngroup(groupBySensitivityImpl);\n\nconst groupByCCImpl = (referral) => {\n // if no programs are in a coordination center or the referral contains only one program in a cc, return referral\n if (every(referral.programs.map(p => p?.provider?.provider_type !== 'coordination_center')) ||\n (referral.programs.length === 1 && head(referral.programs)?.provider?.provider_type === 'coordination_center')) {\n return [referral];\n }\n // create a new referral for each program in a cc\n const ccPrograms = referral.programs.filter(p => p?.provider?.provider_type === 'coordination_center')\n .map(program => ({\n ...referral, programs: [program]\n }));\n // create a new referral for programs not in a cc\n const nonCCPrograms = referral.programs.filter(p => p?.provider?.provider_type !== 'coordination_center');\n const nonCCReferrals = !isEmpty(nonCCPrograms) ? [{ ...referral, programs: nonCCPrograms }] : [];\n\n return [...ccPrograms, ...nonCCReferrals];\n}\n\nconst groupByCC = withPreventUngroup(groupByCCImpl);\n\nconst preventGroupingForSensitiveProvider = (referral) => {\n const networks = filterNetworks(referral);\n // if there is only one possible network, set the referral's network\n if (networks.length === 1) {\n referral.network = head(networks);\n }\n const { programs } = referral;\n return programs.length > 1 ?\n programs.map(program => ({ ...referral, programs: [program] })) :\n [referral];\n};\n\nconst groupByFunded = (referral) => {\n const networks = filterNetworks(referral);\n // if there is only one possible network, set the referral's network\n if (networks.length === 1) {\n referral.network = head(networks);\n }\n\n const fundedWithAuthorizationPrograms = referral.programs.filter(p => p.fee_schedule_program?.authorization_required);\n const fundedWithoutAuthorizationPrograms = referral.programs.filter(p => !p.fee_schedule_program?.authorization_required);\n\n const {\n sensitive: sensitiveAuthPrograms,\n nonSensitive: nonSensitiveAuthPrograms,\n } = separateSensitiveAndNonSensitiveAuthPrograms(fundedWithAuthorizationPrograms);\n\n const sameFeeReferrals = createSameFeeReferrals(referral, nonSensitiveAuthPrograms);\n const sensitiveProgramReferrals = createSensitiveProgramReferrals(referral, sensitiveAuthPrograms);\n const nonAuthReferrals = createNonAuthReferrals(referral, fundedWithoutAuthorizationPrograms);\n\n return [...nonAuthReferrals, ...sameFeeReferrals, ...sensitiveProgramReferrals];\n};\n\nconst groupUnlistedProgramsToReferrals = (referrals) => {\n const unlistedReferrals = [], listedReferrals = [];\n\n referrals.forEach(referral => {\n if (every(referral.programs, p => p.id.includes('unlisted')))\n unlistedReferrals.push(referral);\n else\n listedReferrals.push(referral);\n });\n\n if (unlistedReferrals.length === 0) {\n return listedReferrals;\n }\n\n // Loop over the unlisted referrals, in case of a match, add the unlisted program to the referral \n // and remove it from the unlisted referral\n unlistedReferrals.forEach(unlistedReferral => {\n const processReferral = (referrals) => {\n // Find a referral with the same service and off-platform status\n const foundReferral = referrals.find(referral =>\n unlistedReferral.programs[0]?.services[0] === referral.service.id &&\n referral.programs[0]?.status?.toLowerCase() === OFF_PLATFORM_REFERRALS_ONLY\n );\n \n if (foundReferral) {\n // Add the unlisted program to the referral\n foundReferral.programs.push(unlistedReferral.programs[0]);\n // Remove the unlisted program from the referral, otherwise, it will be added to referrals multiple times\n unlistedReferral.programs.splice(0, 1);\n }\n };\n \n processReferral(listedReferrals);\n processReferral(unlistedReferrals);\n });\n\n // Remove referrals with no programs\n const updatedUnlistedReferrals = unlistedReferrals.filter(unlistedReferral => {\n if (unlistedReferral?.programs?.length > 0)\n return unlistedReferral;\n });\n\n return [...listedReferrals, ...updatedUnlistedReferrals];\n}\n\nexport const buildGroupedReferrals = (newReferrals, currentProvider) => {\n let groupedReferrals = newReferrals;\n // if the current provider is sensitive, prevent grouping\n if (currentProvider?.sensitive) {\n groupedReferrals = flatMap(groupedReferrals, preventGroupingForSensitiveProvider);\n } else {\n const groupOperations = [];\n\n groupOperations.push(groupByFunded, groupByNetwork, groupByNetworkStatus, groupBySensitivity, groupByCC);\n\n groupOperations.forEach(operation => {\n groupedReferrals = flatMap(groupedReferrals, operation);\n });\n\n groupedReferrals = groupUnlistedProgramsToReferrals(groupedReferrals);\n }\n\n return groupedReferrals;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
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
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; }
|
|
4
|
-
import { compact, some, get, head, flatMap, intersectionBy, uniqBy } from 'lodash';
|
|
4
|
+
import { compact, some, get, head, flatMap, intersectionBy, uniqBy, groupBy, isEmpty } from 'lodash';
|
|
5
5
|
import { OFF_PLATFORM_REFERRALS_ONLY } from './constants';
|
|
6
6
|
const mapProgramsPerService = programs => {
|
|
7
7
|
const result = programs.reduce((out, program) => {
|
|
@@ -225,6 +225,32 @@ export const isUnlistedProgram = program => {
|
|
|
225
225
|
var _program$id;
|
|
226
226
|
return program === null || program === void 0 || (_program$id = program.id) === null || _program$id === void 0 ? void 0 : _program$id.startsWith('unlisted');
|
|
227
227
|
};
|
|
228
|
+
export const separateSensitiveAndNonSensitiveAuthPrograms = fundedWithAuthorizationPrograms => ({
|
|
229
|
+
sensitive: fundedWithAuthorizationPrograms.filter(p => {
|
|
230
|
+
var _p$provider;
|
|
231
|
+
return p === null || p === void 0 || (_p$provider = p.provider) === null || _p$provider === void 0 ? void 0 : _p$provider.sensitive;
|
|
232
|
+
}),
|
|
233
|
+
nonSensitive: fundedWithAuthorizationPrograms.filter(p => {
|
|
234
|
+
var _p$provider2;
|
|
235
|
+
return !(p !== null && p !== void 0 && (_p$provider2 = p.provider) !== null && _p$provider2 !== void 0 && _p$provider2.sensitive);
|
|
236
|
+
})
|
|
237
|
+
});
|
|
238
|
+
export const createSameFeeReferrals = (referral, nonSensitiveAuthPrograms) => {
|
|
239
|
+
const programsGroupedByFeeSchedule = groupBy(nonSensitiveAuthPrograms, 'fee_schedule_program.id');
|
|
240
|
+
const sameFeePrograms = Object.values(programsGroupedByFeeSchedule);
|
|
241
|
+
return sameFeePrograms.map(program => _objectSpread(_objectSpread({}, referral), {}, {
|
|
242
|
+
programs: program
|
|
243
|
+
}, program.length >= 2 ? {
|
|
244
|
+
prevent_ungroup: true
|
|
245
|
+
} : {}));
|
|
246
|
+
};
|
|
247
|
+
export const createSensitiveProgramReferrals = (referral, sensitiveAuthPrograms) => sensitiveAuthPrograms.map(program => _objectSpread(_objectSpread({}, referral), {}, {
|
|
248
|
+
programs: [program]
|
|
249
|
+
}));
|
|
250
|
+
export const createNonAuthReferrals = (referral, fundedWithoutAuthorizationPrograms) => !isEmpty(fundedWithoutAuthorizationPrograms) ? [_objectSpread(_objectSpread({}, referral), {}, {
|
|
251
|
+
programs: fundedWithoutAuthorizationPrograms,
|
|
252
|
+
ungroup: true
|
|
253
|
+
})] : [];
|
|
228
254
|
export const filterProgramsUnlisted = referrals => referrals.map(ref => _objectSpread(_objectSpread({}, ref), {}, {
|
|
229
255
|
programs: ref.programs.filter(program => !isUnlistedProgram(program))
|
|
230
256
|
})).filter(ref => ref.programs.length > 0);
|