From dfdb1c689615ab79bafa4e904dc61a15db3bbffe Mon Sep 17 00:00:00 2001 From: Kseniya Tomskikh Date: Fri, 10 Nov 2017 20:48:44 +0700 Subject: Fixed calculation of eligibility status with "Unknown" value (instead of NULL) --- .../xyz/driver/pdsuidomain/entities/Document.scala | 1 - .../pdsuidomain/entities/PatientCriterion.scala | 23 ++++++++++----------- .../entities/PatientEligibleTrial.scala | 24 +++++++++++----------- .../driver/pdsuidomain/entities/PatientLabel.scala | 4 ++-- .../fakes/entities/treatmentmatching.scala | 12 +++++------ .../formats/json/patientcriterion.scala | 4 ++-- .../formats/json/patientdefiningcriteria.scala | 1 - .../pdsuidomain/formats/json/patientlabel.scala | 4 ++-- .../services/PatientCriterionService.scala | 2 +- 9 files changed, 36 insertions(+), 39 deletions(-) (limited to 'src/main/scala/xyz/driver/pdsuidomain') diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala index 471d345..e9085ec 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala @@ -7,7 +7,6 @@ import com.fasterxml.jackson.core.{JsonGenerator, JsonParser} import com.fasterxml.jackson.databind._ import com.fasterxml.jackson.databind.annotation.{JsonDeserialize, JsonSerialize} import xyz.driver.core.auth.User -import xyz.driver.pdsuicommon.compat.Implicits._ import xyz.driver.pdsuicommon.domain._ import xyz.driver.pdsuicommon.logging._ import xyz.driver.pdsuicommon.utils.Utils diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala index 7027eef..5d84a5c 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala @@ -19,17 +19,16 @@ object PatientCriterion { /** * @see https://driverinc.atlassian.net/wiki/display/MTCH/EV+Business+Process */ - def getEligibilityStatus(criterionValue: Option[Boolean], primaryValue: Option[LabelValue]): Option[LabelValue] = { + def getEligibilityStatus(criterionValue: Option[Boolean], primaryValue: LabelValue): LabelValue = { primaryValue match { - case None => None - case Some(LabelValue.Maybe) => Some(LabelValue.Maybe) - case Some(_) if criterionValue.isEmpty => Some(LabelValue.Maybe) - case Some(status) => - Some( + case LabelValue.Unknown => LabelValue.Unknown + case LabelValue.Maybe => LabelValue.Maybe + case _ if criterionValue.isEmpty => LabelValue.Maybe + case status => + LabelValue.fromBoolean( LabelValue.fromBoolean( - LabelValue.fromBoolean( - criterionValue.getOrElse(throw new IllegalArgumentException("Criterion should not be empty"))) == status - )) + criterionValue.getOrElse(throw new IllegalArgumentException("Criterion should not be empty"))) == status + ) } } @@ -48,13 +47,13 @@ final case class PatientCriterion(id: LongId[PatientCriterion], criterionText: String, criterionValue: Option[Boolean], criterionIsDefining: Boolean, - eligibilityStatus: Option[LabelValue], - verifiedEligibilityStatus: Option[LabelValue], + eligibilityStatus: LabelValue, + verifiedEligibilityStatus: LabelValue, isVerified: Boolean, isVisible: Boolean, lastUpdate: LocalDateTime, inclusion: Option[Boolean]) { - def isIneligibleForEv: Boolean = eligibilityStatus.contains(LabelValue.No) && isVerified + def isIneligibleForEv: Boolean = eligibilityStatus == LabelValue.No && isVerified } object PatientCriterionArm { diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala index ff272a8..179056a 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala @@ -38,22 +38,22 @@ object PatientTrialArmGroup { /** * @see https://driverinc.atlassian.net/wiki/display/DMPD/EV+Business+Process */ - def getEligibilityStatusForRc(criterionList: TraversableOnce[PatientCriterion]): Option[LabelValue] = { - def isEligible: Boolean = criterionList.forall(_.verifiedEligibilityStatus.contains(LabelValue.Yes)) - def isIneligible: Boolean = criterionList.exists(_.verifiedEligibilityStatus.contains(LabelValue.No)) - def isUnknown: Boolean = criterionList.forall(_.verifiedEligibilityStatus.isEmpty) + def getEligibilityStatusForRc(criterionList: TraversableOnce[PatientCriterion]): LabelValue = { + def isEligible: Boolean = criterionList.forall(_.verifiedEligibilityStatus == LabelValue.Yes) + def isIneligible: Boolean = criterionList.exists(_.verifiedEligibilityStatus == LabelValue.No) + def isUnknown: Boolean = criterionList.forall(_.verifiedEligibilityStatus == LabelValue.Unknown) - if (isEligible) Some(LabelValue.Yes) - else if (isIneligible) Some(LabelValue.No) - else if (isUnknown) None - else Some(LabelValue.Maybe) + if (isEligible) LabelValue.Yes + else if (isIneligible) LabelValue.No + else if (isUnknown) LabelValue.Unknown + else LabelValue.Maybe } } final case class PatientTrialArmGroup(id: LongId[PatientTrialArmGroup], eligibleTrialId: UuidId[PatientEligibleTrial], - eligibilityStatus: Option[LabelValue], - verifiedEligibilityStatus: Option[LabelValue], + eligibilityStatus: LabelValue, + verifiedEligibilityStatus: LabelValue, isVerified: Boolean) object PatientTrialArmGroupView { @@ -70,8 +70,8 @@ final case class PatientTrialArmGroupView(id: LongId[PatientTrialArmGroup], patientId: UuidId[Patient], trialId: StringId[Trial], hypothesisId: UuidId[Hypothesis], - eligibilityStatus: Option[LabelValue], - verifiedEligibilityStatus: Option[LabelValue], + eligibilityStatus: LabelValue, + verifiedEligibilityStatus: LabelValue, isVerified: Boolean) { def applyTo(trialArmGroup: PatientTrialArmGroup) = { diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala index 4c0f4ef..df86175 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala @@ -17,8 +17,8 @@ final case class PatientLabel(id: LongId[PatientLabel], patientId: UuidId[Patient], labelId: LongId[Label], score: Int, - primaryValue: Option[LabelValue], - verifiedPrimaryValue: Option[LabelValue], + primaryValue: LabelValue, + verifiedPrimaryValue: LabelValue, isImplicitMatch: Boolean, isVisible: Boolean) diff --git a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/treatmentmatching.scala b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/treatmentmatching.scala index 441c1db..f2d6a1b 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/treatmentmatching.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/treatmentmatching.scala @@ -62,8 +62,8 @@ object treatmentmatching { patientId = nextUuidId[Patient], labelId = nextLongId[Label], score = generators.nextInt(100), - primaryValue = generators.nextOption(fakes.entities.labels.nextLabelValue()), - verifiedPrimaryValue = generators.nextOption(fakes.entities.labels.nextLabelValue()), + primaryValue = fakes.entities.labels.nextLabelValue(), + verifiedPrimaryValue = fakes.entities.labels.nextLabelValue(), isImplicitMatch = generators.nextBoolean(), isVisible = generators.nextBoolean() ) @@ -82,8 +82,8 @@ object treatmentmatching { criterionText = generators.nextString(), criterionValue = generators.nextOption(generators.nextBoolean()), criterionIsDefining = generators.nextBoolean(), - eligibilityStatus = generators.nextOption(fakes.entities.labels.nextLabelValue()), - verifiedEligibilityStatus = generators.nextOption(fakes.entities.labels.nextLabelValue()), + eligibilityStatus = fakes.entities.labels.nextLabelValue(), + verifiedEligibilityStatus = fakes.entities.labels.nextLabelValue(), isVerified = generators.nextBoolean(), isVisible = generators.nextBoolean(), lastUpdate = nextLocalDateTime, @@ -139,8 +139,8 @@ object treatmentmatching { patientId = nextUuidId[Patient], trialId = trialId, hypothesisId = nextUuidId[Hypothesis], - eligibilityStatus = generators.nextOption(fakes.entities.labels.nextLabelValue()), - verifiedEligibilityStatus = generators.nextOption(fakes.entities.labels.nextLabelValue()), + eligibilityStatus = fakes.entities.labels.nextLabelValue(), + verifiedEligibilityStatus = fakes.entities.labels.nextLabelValue(), isVerified = generators.nextBoolean() ) diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala index b5696f7..1004c5b 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala @@ -15,12 +15,12 @@ object patientcriterion { case JsObject(fields) => val eligibilityStatus = fields .get("eligibilityStatus") - .map(_.convertTo[Option[LabelValue]]) + .map(_.convertTo[LabelValue]) .getOrElse(orig.eligibilityStatus) val verifiedEligibilityStatus = fields .get("verifiedEligibilityStatus") - .map(_.convertTo[Option[LabelValue]]) + .map(_.convertTo[LabelValue]) .getOrElse(orig.verifiedEligibilityStatus) orig.copy( diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientdefiningcriteria.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientdefiningcriteria.scala index 0b4fbae..a67115c 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientdefiningcriteria.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientdefiningcriteria.scala @@ -5,7 +5,6 @@ import xyz.driver.formats.json.labels._ import xyz.driver.pdsuidomain.entities.PatientLabel object patientdefiningcriteria { - import DefaultJsonProtocol._ import common._ implicit val patientLabelDefiningCriteriaWriter: RootJsonWriter[PatientLabel] = new RootJsonWriter[PatientLabel] { diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientlabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientlabel.scala index d944e42..6499318 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientlabel.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patientlabel.scala @@ -17,12 +17,12 @@ object patientlabel { case JsObject(fields) => val primaryValue = fields .get("primaryValue") - .map(_.convertTo[Option[LabelValue]]) + .map(_.convertTo[LabelValue]) .getOrElse(orig.primaryValue) val verifiedPrimaryValue = fields .get("verifiedPrimaryValue") - .map(_.convertTo[Option[LabelValue]]) + .map(_.convertTo[LabelValue]) .getOrElse(orig.verifiedPrimaryValue) orig.copy( diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala index 21ec73a..68e7b50 100644 --- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala +++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala @@ -20,7 +20,7 @@ object PatientCriterionService { isVerified: Option[Boolean]) { def applyTo(orig: PatientCriterion) = { orig.copy( - eligibilityStatus = eligibilityStatus.orElse(orig.eligibilityStatus), + eligibilityStatus = eligibilityStatus.getOrElse(orig.eligibilityStatus), isVerified = isVerified.getOrElse(orig.isVerified) ) } -- cgit v1.2.3