Last active
August 29, 2015 14:01
-
-
Save josiah14/a1b08b63957cda935c00 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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