Skip to content

Instantly share code, notes, and snippets.

@josiah14
Last active August 29, 2015 14:01
Show Gist options
  • Save josiah14/a1b08b63957cda935c00 to your computer and use it in GitHub Desktop.
Save josiah14/a1b08b63957cda935c00 to your computer and use it in GitHub Desktop.
package com.cerner.pophealth.appservices.caremanagement.candidates.pipeline.data
import com.cerner.pophealth.appservices.caremanagement.candidates.models.pipeline.intermediate.{
PersonnelOrgIds,
OrgAdminPersonnels
}
import com.cerner.pophealth.appinfra.pipeline.utilities.SerializableAvro;
import java.util.{ Collections, UUID, Arrays => JArrays, List => JList, ArrayList => JArrayList }
import java.lang.{ String => JString }
import com.cerner.pophealth.appservices.caremanagement.candidates.pipeline.UnitSpec
import com.cerner.pophealth.appservices.caremanagement.candidates.models.pipeline._
import com.google.common.collect.{ Lists, Maps }
import com.google.common.base.Joiner
class CandidateAlignmentOutcomeExtractorSpec extends UnitSpec {
val caseManagerSupportId = "id"
val caseManagerId = "id"
val empiId = "empi_id"
val orgIdOne = "org_id_1"
val orgIdTwo = "org_id_2"
val orgIdThree = "org_id_3"
val orgAdminIdOne = "org_admin_1"
val orgAdminIdTwo = "org_admin_2"
val orgAdminIdThree = "org_admin_3"
val familyName = "family names"
val givenName = "given names"
val middleName = "middle name"
val fullName = "full name"
val riskScoreModelName = "CXCONLAG0"
val riskScoreTotalScore = 10.0
val orgAdminIds: java.util.Map[String, SerializableAvro[OrgAdminPersonnels]] = Maps.newHashMap()
val personnelOrgIds: java.util.Map[String, SerializableAvro[PersonnelOrgIds]] = Maps.newHashMap()
describe("CandidateAlignmentOutcomeExtractor") {
val candidateAlignmentOutcomeExtractor = new CandidateAlignmentOutcomeExtractor
describe("#getCandidateAlignmentOutcomes") {
describe("When the candidate has an attributed personnel") {
describe("and there is an intersection of orgIds between the aligned case manager and the attributed personnel") {
it("returns a CandidateExtractor POJO with a list of alignmentOrgAdminIds that contains only the orgIds in the intersection set") {
val expected = createCandidateAlignmentOutcomeWithSupport(createMapsWithOrgIdIntersection)
val response = candidateAlignmentOutcomeExtractor.getCandidateAlignmentOutcome(getCandidateAlignmentOutcomeModels, orgAdminIds, personnelOrgIds)
response should equal (expected)
} // describe("and there is an intersection of orgIds between the aligned case manager and the attributed personnel")
}
describe("and there is not an intersection of orgId's between the aligned case manager and the attributed personnel") {
it("returns a CandidateIndex POJO with an empty list of alignmentOrgAdminIds") {
val expected = createCandidateAlignmentOutcomeWithSupport(createMapsWithoutOrgIdIntersection)
val response = candidateAlignmentOutcomeExtractor.getCandidateAlignmentOutcome(getCandidateAlignmentOutcomeModels, orgAdminIds, personnelOrgIds)
response should equal (expected)
}
} // describe("and there is not an intersection of orgId's between the aligned case manager and the attributed personnel")
} // describe("and the candidate has an attributed personnel")
describe("When the candidate does not have an attributed personnel") {
it("returns the expected CandidateExtractor POJO with the full list of alignmentOrgAdminIds") {
val expected = createCandidateAlignmentOutcomeWithoutSupport()
val response = candidateAlignmentOutcomeExtractor.getCandidateAlignmentOutcome(getCandidateAlignmentOutcomeModels, orgAdminIds, personnelOrgIds)
response should equal(expected)
}
} // describe("and the candidate does not have an attributed personnel")
}
def getPersonnelAddressModels: com.cerner.pophealth.program.models.avro.outcome.PersonnelAddress = {
com.cerner.pophealth.program.models.avro.outcome.PersonnelAddress.newBuilder
.setStreetAddress("street address") //
.setRegion("region") //
.setLocality("locality") //
.setPrimary(true) //
.setCountry("country") //
.setPostalCode("12345") //
.setType("type") //
.setFormatted("formatted") //
.build
}
def getPersonnelAliasModels: com.cerner.pophealth.program.models.avro.outcome.PersonnelAlias = {
com.cerner.pophealth.program.models.avro.outcome.PersonnelAlias.newBuilder
.setId("id") //
.setSourceType("source type") //
.setType(com.cerner.pophealth.program.models.avro.outcome.PersonnelAliasType.UNKNOWN) //
.build
}
def getPersonnelPhoneNumber : com.cerner.pophealth.program.models.avro.outcome.PersonnelPhoneNumber = {
com.cerner.pophealth.program.models.avro.outcome.PersonnelPhoneNumber.newBuilder() //
.setPrimary(true) //
.setType("type") //
.setValue("value") //
.build()
}
def getPersonnelModels: com.cerner.pophealth.program.models.avro.outcome.Personnel = {
com.cerner.pophealth.program.models.avro.outcome.Personnel.newBuilder //
.setActive(true) //
.setAddresses(JArrays.asList(getPersonnelAddressModels)) //
.setAliases(JArrays.asList(getPersonnelAliasModels)) //
.setClientId("client id") //
.setId("id") //
.setName("name") //
.setOrgClassIds(JArrays.asList("org class ids")) //
.setOrgIds(JArrays.asList(orgIdTwo, orgIdOne)) //
.setPhoneNumbers(JArrays.asList(getPersonnelPhoneNumber)) //
.build
}
def getOrganizationAddressModels: com.cerner.pophealth.program.models.avro.outcome.OrganizationAddress = {
com.cerner.pophealth.program.models.avro.outcome.OrganizationAddress.newBuilder
.setStreetAddress("street address") //
.setCountry("country") //
.setFormatted("formatted") //
.setLocality("locality") //
.setPostalCode("12345") //
.setPrimary(true) //
.setRegion("region") //
.setType("type") //
.build
}
def getOrganizationAliasModels: com.cerner.pophealth.program.models.avro.outcome.OrganizationAlias = {
com.cerner.pophealth.program.models.avro.outcome.OrganizationAlias.newBuilder
.setId("id") //
.setSourceType("source type") //
.setType(com.cerner.pophealth.program.models.avro.outcome.OrganizationAliasType.UNKNOWN) //
.build
}
def getOrganizationPhoneNumberModels: com.cerner.pophealth.program.models.avro.outcome.OrganizationPhoneNumber = {
com.cerner.pophealth.program.models.avro.outcome.OrganizationPhoneNumber.newBuilder
.setPrimary(true) //
.setType("type") //
.setValue("value") //
.build
}
def getOrganizationModels: com.cerner.pophealth.program.models.avro.outcome.Organization = {
com.cerner.pophealth.program.models.avro.outcome.Organization.newBuilder
.setAddresses(JArrays.asList(getOrganizationAddressModels))
.setAdmins(JArrays.asList(getPersonnelModels))
.setAliases(JArrays.asList(getOrganizationAliasModels))
.setClientId("client id")
.setId("id")
.setMembers(JArrays.asList(getPersonnelModels))
.setName("name")
.setPhoneNumbers(JArrays.asList(getOrganizationPhoneNumberModels))
.build
}
def getCandidateAlignmentOutcomeModels: com.cerner.pophealth.program.models.avro.outcome.CandidateAlignmentOutcome = {
val attributablePersonnelOrgModels: com.cerner.pophealth.program.models.avro.outcome.AttributablePersonnelOrg = com.cerner.pophealth.program.models.avro.outcome.AttributablePersonnelOrg.newBuilder
.setPersonnel(getPersonnelModels)
.setOrganizations(JArrays.asList(getOrganizationModels))
.build
val assignableCaseManagerSupportModels: com.cerner.pophealth.program.models.avro.outcome.AssignableCaseManagerSupport = com.cerner.pophealth.program.models.avro.outcome.AssignableCaseManagerSupport.newBuilder //
.setAlignmentBuildId("alignment_id") //
.setAlignmentBuildVersion("alignment_version") //
.setAttributablePersonnelOrg(JArrays.asList(attributablePersonnelOrgModels)) //
.build
val assignableCaseManagerModels: com.cerner.pophealth.program.models.avro.outcome.AssignableCaseManager = com.cerner.pophealth.program.models.avro.outcome.AssignableCaseManager.newBuilder //
.setAssignableCaseManager(getPersonnelModels) //
.setAssignableCaseManagerSupport(assignableCaseManagerSupportModels) //
.build
val assignableCaseManagersModels = new JArrayList[com.cerner.pophealth.program.models.avro.outcome.AssignableCaseManager]
assignableCaseManagersModels.add(assignableCaseManagerModels)
com.cerner.pophealth.program.models.avro.outcome.CandidateAlignmentOutcome.newBuilder //
.setEmpiId("empi_id") //
.setIsAligned(true) //
.setAssignableCaseManagers(assignableCaseManagersModels) //
.build
}
def createCandidateAlignmentOutcomeWithSupport(createMaps: () => Unit): CandidateAlignmentOutcome = {
createMaps()
val attributablePersonnelOrg: AttributablePersonnelOrg = AttributablePersonnelOrg.newBuilder
.setPersonnel(createPersonnel(caseManagerSupportId, JArrays.asList(orgIdTwo, orgIdOne)))
.setOrganizations(JArrays.asList(createOrganization))
.build
val attributablePersonnelOrgs: JList[AttributablePersonnelOrg] = JArrays.asList(attributablePersonnelOrg)
val assignableCaseManagerSupport: AssignableCaseManagerSupport = AssignableCaseManagerSupport.newBuilder
.setAlignmentBuildId("alignment_id")
.setAlignmentBuildVersion("alignment_version")
.setAttributablePersonnelOrg(attributablePersonnelOrgs)
.build
val adminIds = JArrays.asList(orgAdminIdTwo)
val orgAdminInfo = new JArrayList[com.cerner.pophealth.appservices.caremanagement.candidates.models.pipeline.AdminOrganizationIds]()
val adminOrganizationIds = com.cerner.pophealth.appservices.caremanagement.candidates.models.pipeline.AdminOrganizationIds.newBuilder() //
.setAdminOrganizationIds(adminIds) //
.setName("admin_2") //
.setPersonnelIds(JArrays.asList("id")) //
.build()
orgAdminInfo.add(adminOrganizationIds)
val assignableCaseManager: AssignableCaseManager = AssignableCaseManager.newBuilder
.setAssignableCaseManager(createPersonnel(caseManagerId, JArrays.asList(orgIdTwo, orgIdOne)))
.setAssignableCaseManagerSupport(assignableCaseManagerSupport)
.setAdminOrganizationIds(orgAdminInfo)
.build
val assignableCaseManagers: java.util.List[AssignableCaseManager] = JArrays.asList(assignableCaseManager)
CandidateAlignmentOutcome.newBuilder
.setAssignableCaseManagers(assignableCaseManagers)
.setEmpiId(empiId).setIsAligned(true)
.build
}
def createCandidateAlignmentOutcomeWithoutSupport: CandidateAlignmentOutcome = {
createMapsWithOrgIdIntersection()
val assignableCaseManagerSupport = AssignableCaseManagerSupport.newBuilder
.setAlignmentBuildId("alignment_id")
.setAlignmentBuildVersion("alignment_version")
.setAttributablePersonnelOrg(new JArrayList[AttributablePersonnelOrg])
.build
val adminIds = JArrays.asList(orgAdminIdOne)
val orgAdminInfo = new JArrayList[com.cerner.pophealth.appservices.caremanagement.candidates.models.pipeline.AdminOrganizationIds]()
val adminOrganizationIds = com.cerner.pophealth.appservices.caremanagement.candidates.models.pipeline.AdminOrganizationIds.newBuilder() //
.build()
adminOrganizationIds.setAdminOrganizationIds(adminIds) //
adminOrganizationIds.setName("admin_1") //
orgAdminInfo.add(adminOrganizationIds)
val assignableCaseManager = AssignableCaseManager.newBuilder
.setAssignableCaseManager(createPersonnel(caseManagerId, JArrays.asList(orgIdOne, orgIdTwo, orgIdThree)))
.setAssignableCaseManagerSupport(assignableCaseManagerSupport)
.setAdminOrganizationIds(orgAdminInfo)
.build
CandidateAlignmentOutcome.newBuilder
.setAssignableCaseManagers(JArrays.asList(assignableCaseManager))
.setEmpiId(empiId)
.setIsAligned(true)
.build
}
def createMapsWithoutOrgIdIntersection(): Unit = {
val orgIds: JList[String] = JArrays.asList(orgIdThree)
personnelOrgIds.put(
"id",
new SerializableAvro[PersonnelOrgIds](
PersonnelOrgIds.newBuilder
.setId("id")
.setOrgIds(orgIds)
.build
)
)
val adminIdsOne: JList[String] = JArrays.asList(orgAdminIdOne)
val adminIdsTwo: JList[String] = JArrays.asList(orgAdminIdTwo)
orgAdminIds.put(
orgIdOne,
new SerializableAvro[OrgAdminPersonnels](
OrgAdminPersonnels.newBuilder
.setId(orgIdOne)
.setName("admin1")
.setAdmins(adminIdsOne)
.build
)
)
orgAdminIds.put(
orgIdTwo,
new SerializableAvro[OrgAdminPersonnels](
OrgAdminPersonnels.newBuilder
.setId(orgIdTwo)
.setName("admin_2")
.setAdmins(adminIdsTwo)
.build
)
)
}
def createMapsWithOrgIdIntersection(): Unit = {
val orgIds: JList[String] = JArrays.asList(orgIdTwo, orgIdThree)
personnelOrgIds.put(
"id",
new SerializableAvro[PersonnelOrgIds](
PersonnelOrgIds.newBuilder
.setId("id")
.setOrgIds(orgIds)
.build
)
)
val adminIdsOne: JList[String] = JArrays.asList(orgAdminIdOne)
val adminIdsTwo: JList[String] = JArrays.asList(orgAdminIdTwo)
val adminIdsThree: JList[String] = JArrays.asList(orgAdminIdThree)
orgAdminIds.put(
orgIdOne,
new SerializableAvro[OrgAdminPersonnels](
OrgAdminPersonnels.newBuilder
.setId(orgIdOne)
.setAdmins(adminIdsOne)
.setName("admin_1")
.build
)
)
orgAdminIds.put(
orgIdTwo,
new SerializableAvro[OrgAdminPersonnels](
OrgAdminPersonnels.newBuilder
.setId(orgIdTwo)
.setAdmins(adminIdsTwo)
.setName("admin_2")
.build
)
)
orgAdminIds.put(
orgIdThree,
new SerializableAvro[OrgAdminPersonnels](
OrgAdminPersonnels.newBuilder
.setId(orgIdThree)
.setAdmins(adminIdsThree)
.setName("admin_3")
.build
)
)
}
def createPersonnel(id: String, organizations: JList[String]): Personnel = {
val address: PersonnelAddress = PersonnelAddress.newBuilder
.setCountry("country")
.setPostalCode("12345")
.setFormatted("formatted")
.setLocality("locality")
.setPrimary(true)
.setRegion("region")
.setStreetAddress("street address")
.setType("type")
.build
val personnelAlias: PersonnelAlias = PersonnelAlias.newBuilder
.setId("id")
.setSourceType("source type")
.setType(PersonnelAliasType.UNKNOWN)
.build
val personnelPhoneNumber: PersonnelPhoneNumber = PersonnelPhoneNumber.newBuilder
.setPrimary(true)
.setType("type")
.setValue("value")
.build
Personnel.newBuilder
.setActive(true)
.setAddresses(JArrays.asList(address))
.setAliases(JArrays.asList(personnelAlias))
.setId(id).setName("name")
.setOrgClassIds(JArrays.asList("org class ids"))
.setOrgIds(organizations)
.setPhoneNumbers(JArrays.asList(personnelPhoneNumber))
.setClientId("client id")
.build
}
def createOrganization: Organization = {
val orgAddress: OrganizationAddress = OrganizationAddress.newBuilder
.setStreetAddress("street address")
.setCountry("country")
.setFormatted("formatted")
.setLocality("locality")
.setPostalCode("12345")
.setPrimary(true)
.setRegion("region")
.setType("type")
.build
val orgAlias: OrganizationAlias = OrganizationAlias.newBuilder
.setId("id")
.setSourceType("source type")
.setType(OrganizationAliasType.UNKNOWN)
.build
val orgPhoneNumber: OrganizationPhoneNumber = OrganizationPhoneNumber.newBuilder
.setPrimary(true)
.setType("type")
.setValue("value")
.build
Organization.newBuilder
.setAddresses(JArrays.asList(orgAddress))
.setAdmins(JArrays.asList(createPersonnel("id", JArrays.asList(orgIdTwo, orgIdOne))))
.setAliases(JArrays.asList(orgAlias))
.setClientId("client id")
.setId("id")
.setMembers(JArrays.asList(createPersonnel("id", JArrays.asList(orgIdTwo, orgIdOne))))
.setName("name")
.setPhoneNumbers(JArrays.asList(orgPhoneNumber))
.build
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment