@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.
@@ -122,7 +122,16 @@ const getSensitiveAndNonSensitivePrograms = _ref5 => {
122
122
  }).slice(0, programCount - sensitiveProviderCount);
123
123
  return [...nonSensitivePrograms, ...sensitivePrograms];
124
124
  };
125
- const filterGroupedPrograms = _ref6 => {
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
- } = _ref6;
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 = _ref7 => {
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
- } = _ref7;
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 = _ref8 => {
320
+ const filterAndSelectUnlistedPrograms = _ref9 => {
303
321
  var _groupedUnlistedProgr;
304
322
  let {
305
323
  programCount = 1,
306
324
  results = 1
307
- } = _ref8;
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(_ref9 => {
335
+ const programServices = filteredServices.filter(s => program.relationships.services.data.map(_ref0 => {
318
336
  let {
319
337
  id
320
- } = _ref9;
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":"AAAA,SAASA,MAAM,QAAQ,wBAAwB;AAC/C,SAASC,MAAM,EAAEC,GAAG,QAAQ,mCAAmC;AAC/D,SAASC,MAAM,QAAQ,4CAA4C;AACnE,OAAOC,eAAe,MAAM,oBAAoB;AAChD,OAAOC,qBAAqB,MAAM,6DAA6D;AAC/F,SAASC,mBAAmB,QAAQ,uCAAuC;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE5EC,IAAI,CAACC,IAAI,CAAC,+BAA+B,EAAE,OAAO;EAChDC,cAAc,EAAEF,IAAI,CAACG,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEHC,QAAQ,CAAC,iCAAiC,EAAE,MAAM;EAChDC,SAAS,CAAC,MAAM;IACdL,IAAI,CAACM,aAAa,CAAC,CAAC;EACtB,CAAC,CAAC;EAEFF,QAAQ,CAAC,qDAAqD,EAAE,MAAM;IACpEG,EAAE,CAAC,wDAAwD,EAAE,YAAY;MACvE,MAAMC,gBAAgB,GAAGX,mBAAmB,CAAC;QAC3CY,qBAAqB,EAAE,KAAK;QAC5BC,wBAAwB,EAAE,KAAK;QAC/BC,yBAAyB,EAAE,IAAI;QAC/BC,0BAA0B,EAAE,KAAK;QACjCC,kBAAkB,EAAE,IAAI;QACxBC,SAAS,EAAE,KAAK;QAChBC,QAAQ,EAAE,IAAI;QACdC,qBAAqB,EAAE,IAAI;QAC3BC,YAAY,EAAE,CAAC;QACfC,YAAY,EAAE,CAAC;QACfC,6BAA6B,EAAE;MACjC,CAAC,CAAC;MAEF,IAAIX,gBAAgB,CAACY,MAAM,EAAE;QAC3B,MAAM3B,GAAG,CAAC,YAAYD,MAAM,cAACO,IAAA,CAACJ,eAAe,IAAE,CAAC,EAAE;UAChD0B,uBAAuB,EAAE;YACvB3B,MAAM;YACN4B,gBAAgB,EAAEd,gBAAgB;YAClCe,eAAe,EAAE3B,qBAAqB,CAAC4B,QAAQ,CAACD,eAAe;YAC/DE,eAAe,EAAE7B,qBAAqB,CAAC4B,QAAQ,CAACC;UAClD;QACF,CAAC,CAAC,CAAC;MACL;MAEAC,MAAM,CAACnC,MAAM,CAACoC,SAAS,CAAC,yBAAyB,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;MACvEF,MAAM,CAACnC,MAAM,CAACoC,SAAS,CAAC,kCAAkC,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;MAChFF,MAAM,CAACnC,MAAM,CAACsC,WAAW,CAAC,aAAa,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;MAEjEF,MAAM,CAACnC,MAAM,CAACwC,SAAS,CACrB,SAAS,EACT;QAAEC,IAAI,EAAE;MAAuF,CAAC,CAClG,CAAC,CAACJ,iBAAiB,CAAC,CAAC;MACrBF,MAAM,CAACnC,MAAM,CAACwC,SAAS,CAAC,YAAY,EAAE;QAAEC,IAAI,EAAE;MAAoB,CAAC,CAAC,CAAC,CAACJ,iBAAiB,CAAC,CAAC;MACzFF,MAAM,CAACnC,MAAM,CAACwC,SAAS,CAAC,SAAS,EAAE;QAAEC,IAAI,EAAE;MAAc,CAAC,CAAC,CAAC,CAACJ,iBAAiB,CAAC,CAAC;MAChFF,MAAM,CAACnC,MAAM,CAACwC,SAAS,CAAC,SAAS,EAAE;QAAEC,IAAI,EAAE;MAAY,CAAC,CAAC,CAAC,CAACJ,iBAAiB,CAAC,CAAC;IAChF,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFxB,QAAQ,CAAC,2EAA2E,EAAE,MAAM;IAC1FG,EAAE,CAAC,iCAAiC,EAAE,YAAY;MAChD,MAAMC,gBAAgB,GAAGX,mBAAmB,CAAC;QAC3CY,qBAAqB,EAAE,KAAK;QAC5BC,wBAAwB,EAAE,KAAK;QAC/BC,yBAAyB,EAAE,IAAI;QAC/BC,0BAA0B,EAAE,KAAK;QACjCC,kBAAkB,EAAE,IAAI;QACxBC,SAAS,EAAE,KAAK;QAChBC,QAAQ,EAAE,IAAI;QACdC,qBAAqB,EAAE,IAAI;QAC3BC,YAAY,EAAE,CAAC;QACfC,YAAY,EAAE,CAAC;QACfC,6BAA6B,EAAE;MACjC,CAAC,CAAC;MAEF,IAAIX,gBAAgB,CAACY,MAAM,EAAE;QAC3B,MAAM3B,GAAG,CAAC,YAAYD,MAAM,cAACO,IAAA,CAACJ,eAAe,IAAE,CAAC,EAAE;UAChD0B,uBAAuB,EAAE;YACvB3B,MAAM;YACN4B,gBAAgB,EAAEd,gBAAgB;YAClCe,eAAe,EAAE3B,qBAAqB,CAAC4B,QAAQ,CAACD,eAAe;YAC/DE,eAAe,EAAE7B,qBAAqB,CAAC4B,QAAQ,CAACC;UAClD;QACF,CAAC,CAAC,CAAC;MACL;MAEAC,MAAM,CAACnC,MAAM,CAACsC,WAAW,CAAC,aAAa,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;IACnE,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","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 programsGroupedByFeeSchedule = groupBy(fundedWithAuthorizationPrograms, 'fee_schedule_program.id');
164
- const sameFeePrograms = Object.values(programsGroupedByFeeSchedule);
165
-
166
- // Create a new referral for each program with a shared fee schedule program
167
- const sameFeeReferrals = sameFeePrograms.map(program => _objectSpread(_objectSpread({}, referral), {}, {
168
- programs: program
169
- }, program.length >= 2 ? {
170
- prevent_ungroup: true
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":";;;AAAA,SAASA,OAAO,EAAEC,KAAK,EAAEC,IAAI,EAAEC,OAAO,EAAEC,OAAO,QAAQ,QAAQ;AAC/D,SACEC,kBAAkB,EAClBC,cAAc,EACdC,oBAAoB,EACpBC,mBAAmB,EACnBC,4CAA4C,EAC5CC,sBAAsB,EACtBC,+BAA+B,EAC/BC,sBAAsB,QACjB,SAAS;AAChB,SAASC,2BAA2B,QAAQ,aAAa;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,kBAAkB,GAAIC,EAAE,IAAMC,QAAQ,IAC1CA,QAAQ,CAACC,eAAe,GAAG,CAACD,QAAQ,CAAC,GAAGD,EAAE,CAACC,QAAQ,CACpD;AAED,MAAME,kBAAkB,GAAIF,QAAQ,IAAK;EACvC,MAAMG,QAAQ,GAAGb,cAAc,CAACU,QAAQ,CAAC;EACzC;EACA,IAAIG,QAAQ,CAACC,MAAM,KAAK,CAAC,IAAIf,kBAAkB,CAACW,QAAQ,CAAC,EAAE;IACzDA,QAAQ,CAACK,OAAO,GAAGnB,IAAI,CAACiB,QAAQ,CAAC;IACjC,OAAO,CAACH,QAAQ,CAAC;EACnB;EACA;EACA;EACA;EACA;EACA,MAAMM,qBAAqB,GAAGN,QAAQ,CAACO,QAAQ,CAACC,MAAM,CAACC,OAAO;IAAA,IAAAC,iBAAA;IAAA,OAAI,EAAAA,iBAAA,GAAAD,OAAO,CAACE,QAAQ,cAAAD,iBAAA,gBAAAA,iBAAA,GAAhBA,iBAAA,CAAkBP,QAAQ,cAAAO,iBAAA,uBAA1BA,iBAAA,CAA4BN,MAAM,MAAK,CAAC;EAAA,EAAC;EAC3G,MAAMQ,uBAAuB,GAAGZ,QAAQ,CAACO,QAAQ,CAACC,MAAM,CAACC,OAAO;IAAA,IAAAI,kBAAA;IAAA,OAAI,EAAAA,kBAAA,GAAAJ,OAAO,CAACE,QAAQ,cAAAE,kBAAA,gBAAAA,kBAAA,GAAhBA,kBAAA,CAAkBV,QAAQ,cAAAU,kBAAA,uBAA1BA,kBAAA,CAA4BT,MAAM,IAAG,CAAC;EAAA,EAAC;EAC3G,MAAMU,iBAAiB,GAAGd,QAAQ,CAACO,QAAQ,CAACC,MAAM,CAACC,OAAO;IAAA,IAAAM,kBAAA;IAAA,OAAI,GAAAA,kBAAA,GAACN,OAAO,CAACE,QAAQ,cAAAI,kBAAA,gBAAAA,kBAAA,GAAhBA,kBAAA,CAAkBZ,QAAQ,cAAAY,kBAAA,eAA1BA,kBAAA,CAA4BX,MAAM;EAAA,EAAC;EAClG;EACA,MAAMY,0BAA0B,GAAG7B,OAAO,CAACmB,qBAAqB,EAAE,yBAAyB,CAAC;EAC5F;EACA,MAAMW,oBAAoB,GAAGC,MAAM,CAACC,MAAM,CAACH,0BAA0B,CAAC,CAACI,GAAG,CAACb,QAAQ;IAAA,IAAAc,oBAAA;IAAA,OAAAC,aAAA,CAAAA,aAAA,KAC9EtB,QAAQ;MACXO,QAAQ;MACRF,OAAO,EAAEnB,IAAI,EAAAmC,oBAAA,GAACd,QAAQ,CAAC,CAAC,CAAC,CAACI,QAAQ,cAAAU,oBAAA,uBAApBA,oBAAA,CAAsBlB,QAAQ;IAAC;EAAA,CAC7C,CAAC;EACH;EACA,MAAMoB,wBAAwB,GAAGX,uBAAuB,CAACQ,GAAG,CAACX,OAAO,IAAAa,aAAA,CAAAA,aAAA,KAC/DtB,QAAQ;IACXO,QAAQ,EAAE,CAACE,OAAO,CAAC;IACnBJ,OAAO,EAAEnB,IAAI,CAACiB,QAAQ;EAAC,EACvB,CAAC;EACH;EACA,MAAMqB,kBAAkB,GAAGV,iBAAiB,CAACM,GAAG,CAACX,OAAO,IAAAa,aAAA,CAAAA,aAAA,KACnDtB,QAAQ;IACXO,QAAQ,EAAE,CAACE,OAAO;EAAC,EACnB,CAAC;EAEH,OAAO,CAAC,GAAGc,wBAAwB,EAAE,GAAGN,oBAAoB,EAAE,GAAGO,kBAAkB,CAAC;AACtF,CAAC;AAED,MAAMC,cAAc,GAAG3B,kBAAkB,CAACI,kBAAkB,CAAC;AAE7D,MAAMwB,oBAAoB,GAAI1B,QAAQ,IAAK;EACzC,IAAIA,QAAQ,CAACC,eAAe,EAAE;IAC5B,OAAO,CAACD,QAAQ,CAAC;EACnB;EACA;EACA,IAAIf,KAAK,CAACe,QAAQ,CAACO,QAAQ,CAACa,GAAG,CAACO,CAAC,IAAInC,mBAAmB,CAACmC,CAAC,CAAC,CAAC,CAAC,IAC3D1C,KAAK,CAACe,QAAQ,CAACO,QAAQ,CAACa,GAAG,CAACO,CAAC,IAAIpC,oBAAoB,CAACoC,CAAC,CAAC,CAAC,CAAC,EAAE;IAC5D,OAAO,CAAC3B,QAAQ,CAAC;EACnB;EACA;EACA,MAAM4B,iBAAiB,GAAG5B,QAAQ,CAACO,QAAQ,CAACC,MAAM,CAACmB,CAAC,IAAInC,mBAAmB,CAACmC,CAAC,CAAC,CAAC;EAC/E,MAAME,WAAW,GAAG7B,QAAQ,CAACO,QAAQ,CAACC,MAAM,CAACmB,CAAC,IAAIpC,oBAAoB,CAACoC,CAAC,CAAC,CAAC;EAE1E,OAAO,CACL,IAAGC,iBAAiB,CAACxB,MAAM,GAAG,CAAAkB,aAAA,CAAAA,aAAA,KAAMtB,QAAQ;IAAEO,QAAQ,EAAEqB;EAAiB,GAAG,GAAG,EAAE,GACjF,IAAGC,WAAW,CAACzB,MAAM,GAAG,CAAAkB,aAAA,CAAAA,aAAA,KAAMtB,QAAQ;IAAEO,QAAQ,EAAEsB;EAAW,GAAG,GAAG,EAAE,EACtE;AACH,CAAC;AAED,MAAMC,sBAAsB,GAAI9B,QAAQ,IAAK;EAAA,IAAA+B,KAAA;EAC3C;EACA,IAAI9C,KAAK,CAACe,QAAQ,CAACO,QAAQ,CAACa,GAAG,CAACO,CAAC;IAAA,IAAAK,WAAA;IAAA,OAAI,EAACL,CAAC,aAADA,CAAC,gBAAAK,WAAA,GAADL,CAAC,CAAEhB,QAAQ,cAAAqB,WAAA,eAAXA,WAAA,CAAaC,SAAS;EAAA,EAAC,CAAC,IAC3DjC,QAAQ,CAACO,QAAQ,CAACH,MAAM,KAAK,CAAC,KAAA2B,KAAA,GAAI7C,IAAI,CAACc,QAAQ,CAACO,QAAQ,CAAC,cAAAwB,KAAA,gBAAAA,KAAA,GAAvBA,KAAA,CAAyBpB,QAAQ,cAAAoB,KAAA,eAAjCA,KAAA,CAAmCE,SAAU,EAAE;IAClF,OAAO,CAACjC,QAAQ,CAAC;EACnB;EACA;EACA,MAAMkC,iBAAiB,GAAGlC,QAAQ,CAACO,QAAQ,CAACC,MAAM,CAACmB,CAAC;IAAA,IAAAQ,YAAA;IAAA,OAAIR,CAAC,aAADA,CAAC,gBAAAQ,YAAA,GAADR,CAAC,CAAEhB,QAAQ,cAAAwB,YAAA,uBAAXA,YAAA,CAAaF,SAAS;EAAA,EAAC,CAACb,GAAG,CAACX,OAAO,IAAAa,aAAA,CAAAA,aAAA,KACtFtB,QAAQ;IAAEO,QAAQ,EAAE,CAACE,OAAO;EAAC,EAChC,CAAC;EACH;EACA,MAAM2B,oBAAoB,GAAGpC,QAAQ,CAACO,QAAQ,CAACC,MAAM,CAACmB,CAAC;IAAA,IAAAU,YAAA;IAAA,OAAI,EAACV,CAAC,aAADA,CAAC,gBAAAU,YAAA,GAADV,CAAC,CAAEhB,QAAQ,cAAA0B,YAAA,eAAXA,YAAA,CAAaJ,SAAS;EAAA,EAAC;EACnF,MAAMK,qBAAqB,GAAG,CAACtD,OAAO,CAACoD,oBAAoB,CAAC,GAAG,CAAAd,aAAA,CAAAA,aAAA,KAAMtB,QAAQ;IAAEO,QAAQ,EAAE6B;EAAoB,GAAG,GAAG,EAAE;EAErH,OAAO,CAAC,GAAGF,iBAAiB,EAAE,GAAGI,qBAAqB,CAAC;AACzD,CAAC;AAED,MAAMC,kBAAkB,GAAGzC,kBAAkB,CAACgC,sBAAsB,CAAC;AAErE,MAAMU,aAAa,GAAIxC,QAAQ,IAAK;EAAA,IAAAyC,MAAA;EAClC;EACA,IAAIxD,KAAK,CAACe,QAAQ,CAACO,QAAQ,CAACa,GAAG,CAACO,CAAC;IAAA,IAAAe,YAAA;IAAA,OAAI,CAAAf,CAAC,aAADA,CAAC,gBAAAe,YAAA,GAADf,CAAC,CAAEhB,QAAQ,cAAA+B,YAAA,uBAAXA,YAAA,CAAaC,aAAa,MAAK,qBAAqB;EAAA,EAAC,CAAC,IACxF3C,QAAQ,CAACO,QAAQ,CAACH,MAAM,KAAK,CAAC,IAAI,EAAAqC,MAAA,GAAAvD,IAAI,CAACc,QAAQ,CAACO,QAAQ,CAAC,cAAAkC,MAAA,gBAAAA,MAAA,GAAvBA,MAAA,CAAyB9B,QAAQ,cAAA8B,MAAA,uBAAjCA,MAAA,CAAmCE,aAAa,MAAK,qBAAsB,EAAE;IAChH,OAAO,CAAC3C,QAAQ,CAAC;EACnB;EACA;EACA,MAAM4C,UAAU,GAAG5C,QAAQ,CAACO,QAAQ,CAACC,MAAM,CAACmB,CAAC;IAAA,IAAAkB,YAAA;IAAA,OAAI,CAAAlB,CAAC,aAADA,CAAC,gBAAAkB,YAAA,GAADlB,CAAC,CAAEhB,QAAQ,cAAAkC,YAAA,uBAAXA,YAAA,CAAaF,aAAa,MAAK,qBAAqB;EAAA,EAAC,CACnGvB,GAAG,CAACX,OAAO,IAAAa,aAAA,CAAAA,aAAA,KACPtB,QAAQ;IAAEO,QAAQ,EAAE,CAACE,OAAO;EAAC,EAChC,CAAC;EACL;EACA,MAAMqC,aAAa,GAAG9C,QAAQ,CAACO,QAAQ,CAACC,MAAM,CAACmB,CAAC;IAAA,IAAAoB,YAAA;IAAA,OAAI,CAAApB,CAAC,aAADA,CAAC,gBAAAoB,YAAA,GAADpB,CAAC,CAAEhB,QAAQ,cAAAoC,YAAA,uBAAXA,YAAA,CAAaJ,aAAa,MAAK,qBAAqB;EAAA,EAAC;EACzG,MAAMK,cAAc,GAAG,CAAChE,OAAO,CAAC8D,aAAa,CAAC,GAAG,CAAAxB,aAAA,CAAAA,aAAA,KAAMtB,QAAQ;IAAEO,QAAQ,EAAEuC;EAAa,GAAG,GAAG,EAAE;EAEhG,OAAO,CAAC,GAAGF,UAAU,EAAE,GAAGI,cAAc,CAAC;AAC3C,CAAC;AAED,MAAMC,SAAS,GAAGnD,kBAAkB,CAAC0C,aAAa,CAAC;AAEnD,MAAMU,mCAAmC,GAAIlD,QAAQ,IAAK;EACxD,MAAMG,QAAQ,GAAGb,cAAc,CAACU,QAAQ,CAAC;EACzC;EACA,IAAIG,QAAQ,CAACC,MAAM,KAAK,CAAC,EAAE;IACzBJ,QAAQ,CAACK,OAAO,GAAGnB,IAAI,CAACiB,QAAQ,CAAC;EACnC;EACA,MAAM;IAAEI;EAAS,CAAC,GAAGP,QAAQ;EAC7B,OAAOO,QAAQ,CAACH,MAAM,GAAG,CAAC,GACxBG,QAAQ,CAACa,GAAG,CAACX,OAAO,IAAAa,aAAA,CAAAA,aAAA,KAAUtB,QAAQ;IAAEO,QAAQ,EAAE,CAACE,OAAO;EAAC,EAAG,CAAC,GAC/D,CAACT,QAAQ,CAAC;AACd,CAAC;AAED,MAAMmD,aAAa,GAAInD,QAAQ,IAAK;EAClC,MAAMG,QAAQ,GAAGb,cAAc,CAACU,QAAQ,CAAC;EACzC;EACA,IAAIG,QAAQ,CAACC,MAAM,KAAK,CAAC,EAAE;IACzBJ,QAAQ,CAACK,OAAO,GAAGnB,IAAI,CAACiB,QAAQ,CAAC;EACnC;EAEA,MAAMiD,+BAA+B,GAAGpD,QAAQ,CAACO,QAAQ,CAACC,MAAM,CAACmB,CAAC;IAAA,IAAA0B,qBAAA;IAAA,QAAAA,qBAAA,GAAI1B,CAAC,CAAC2B,oBAAoB,cAAAD,qBAAA,uBAAtBA,qBAAA,CAAwBE,sBAAsB;EAAA,EAAC;EACrH,MAAMC,kCAAkC,GAAGxD,QAAQ,CAACO,QAAQ,CAACC,MAAM,CAACmB,CAAC;IAAA,IAAA8B,sBAAA;IAAA,OAAI,GAAAA,sBAAA,GAAC9B,CAAC,CAAC2B,oBAAoB,cAAAG,sBAAA,eAAtBA,sBAAA,CAAwBF,sBAAsB;EAAA,EAAC;EAEzH,MAAM;IACJtB,SAAS,EAAEyB,qBAAqB;IAChCC,YAAY,EAAEC;EAChB,CAAC,GAAGnE,4CAA4C,CAAC2D,+BAA+B,CAAC;EAEjF,MAAMS,gBAAgB,GAAGnE,sBAAsB,CAACM,QAAQ,EAAE4D,wBAAwB,CAAC;EACnF,MAAME,yBAAyB,GAAGnE,+BAA+B,CAACK,QAAQ,EAAE0D,qBAAqB,CAAC;EAClG,MAAMK,gBAAgB,GAAGnE,sBAAsB,CAACI,QAAQ,EAAEwD,kCAAkC,CAAC;EAE7F,OAAO,CAAC,GAAGO,gBAAgB,EAAE,GAAGF,gBAAgB,EAAE,GAAGC,yBAAyB,CAAC;AACjF,CAAC;AAED,MAAME,gCAAgC,GAAIC,SAAS,IAAK;EACtD,MAAMC,iBAAiB,GAAG,EAAE;IAAEC,eAAe,GAAG,EAAE;EAElDF,SAAS,CAACG,OAAO,CAACpE,QAAQ,IAAI;IAC5B,IAAIf,KAAK,CAACe,QAAQ,CAACO,QAAQ,EAAEoB,CAAC,IAAIA,CAAC,CAAC0C,EAAE,CAACC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAC1DJ,iBAAiB,CAACK,IAAI,CAACvE,QAAQ,CAAC,CAAC,KAEjCmE,eAAe,CAACI,IAAI,CAACvE,QAAQ,CAAC;EAClC,CAAC,CAAC;EAEF,IAAIkE,iBAAiB,CAAC9D,MAAM,KAAK,CAAC,EAAE;IAClC,OAAO+D,eAAe;EACxB;;EAEA;EACA;EACAD,iBAAiB,CAACE,OAAO,CAACI,gBAAgB,IAAI;IAC5C,MAAMC,eAAe,GAAIR,SAAS,IAAK;MACrC;MACA,MAAMS,aAAa,GAAGT,SAAS,CAACU,IAAI,CAAC3E,QAAQ;QAAA,IAAA4E,qBAAA,EAAAC,mBAAA;QAAA,OAC3C,EAAAD,qBAAA,GAAAJ,gBAAgB,CAACjE,QAAQ,CAAC,CAAC,CAAC,cAAAqE,qBAAA,uBAA5BA,qBAAA,CAA8BE,QAAQ,CAAC,CAAC,CAAC,MAAK9E,QAAQ,CAAC+E,OAAO,CAACV,EAAE,IACjE,EAAAQ,mBAAA,GAAA7E,QAAQ,CAACO,QAAQ,CAAC,CAAC,CAAC,cAAAsE,mBAAA,gBAAAA,mBAAA,GAApBA,mBAAA,CAAsBG,MAAM,cAAAH,mBAAA,uBAA5BA,mBAAA,CAA8BI,WAAW,CAAC,CAAC,MAAKpF,2BAA2B;MAAA,CAC7E,CAAC;MAED,IAAI6E,aAAa,EAAE;QACjB;QACAA,aAAa,CAACnE,QAAQ,CAACgE,IAAI,CAACC,gBAAgB,CAACjE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzD;QACAiE,gBAAgB,CAACjE,QAAQ,CAAC2E,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;MACxC;IACF,CAAC;IAEDT,eAAe,CAACN,eAAe,CAAC;IAChCM,eAAe,CAACP,iBAAiB,CAAC;EACpC,CAAC,CAAC;;EAEF;EACA,MAAMiB,wBAAwB,GAAGjB,iBAAiB,CAAC1D,MAAM,CAACgE,gBAAgB,IAAI;IAAA,IAAAY,sBAAA;IAC5E,IAAI,CAAAZ,gBAAgB,aAAhBA,gBAAgB,gBAAAY,sBAAA,GAAhBZ,gBAAgB,CAAEjE,QAAQ,cAAA6E,sBAAA,uBAA1BA,sBAAA,CAA4BhF,MAAM,IAAG,CAAC,EACxC,OAAOoE,gBAAgB;EAC3B,CAAC,CAAC;EAEF,OAAO,CAAC,GAAGL,eAAe,EAAE,GAAGgB,wBAAwB,CAAC;AAC1D,CAAC;AAED,OAAO,MAAME,qBAAqB,GAAGA,CAACC,YAAY,EAAEC,eAAe,KAAK;EACtE,IAAIC,gBAAgB,GAAGF,YAAY;EACnC;EACA,IAAIC,eAAe,aAAfA,eAAe,eAAfA,eAAe,CAAEtD,SAAS,EAAE;IAC9BuD,gBAAgB,GAAGpG,OAAO,CAACoG,gBAAgB,EAAEtC,mCAAmC,CAAC;EACnF,CAAC,MAAM;IACL,MAAMuC,eAAe,GAAG,EAAE;IAE1BA,eAAe,CAAClB,IAAI,CAACpB,aAAa,EAAE1B,cAAc,EAAEC,oBAAoB,EAAEa,kBAAkB,EAAEU,SAAS,CAAC;IAExGwC,eAAe,CAACrB,OAAO,CAACsB,SAAS,IAAI;MACnCF,gBAAgB,GAAGpG,OAAO,CAACoG,gBAAgB,EAAEE,SAAS,CAAC;IACzD,CAAC,CAAC;IAEFF,gBAAgB,GAAGxB,gCAAgC,CAACwB,gBAAgB,CAAC;EACvE;EAEA,OAAOA,gBAAgB;AACzB,CAAC","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);