aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKseniya Tomskikh <ktomskih@datamonsters.co>2017-11-13 18:29:45 +0700
committerGitHub <noreply@github.com>2017-11-13 18:29:45 +0700
commitf9057970bcd4c5692ab519a1ee4f0e153999b1c3 (patch)
treeecc6eef91d2efc770e0ead65156ec098d47e6543
parent005b186725fac14b5361292456dd5025742b7646 (diff)
parent77b54e459d6478ae9685e8cac56ae21f08c263ef (diff)
downloadrest-query-f9057970bcd4c5692ab519a1ee4f0e153999b1c3.tar.gz
rest-query-f9057970bcd4c5692ab519a1ee4f0e153999b1c3.tar.bz2
rest-query-f9057970bcd4c5692ab519a1ee4f0e153999b1c3.zip
Merge pull request #61 from drivergroup/PDSUI-2382
Fixed calculation of eligibility status with "Unknown" value
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala1
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala24
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala24
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala4
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/fakes/entities/treatmentmatching.scala12
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patientcriterion.scala4
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patientdefiningcriteria.scala1
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patientlabel.scala4
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala2
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientCriterionFormatSuite.scala8
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientEligibleTrialFormatSuite.scala4
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientLabelFormatSuite.scala12
12 files changed, 49 insertions, 51 deletions
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..193e8cb 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,14 @@ 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
+ import scalaz.syntax.equal._
+ 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)
)
}
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientCriterionFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientCriterionFormatSuite.scala
index e0f96bb..94d80c9 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientCriterionFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientCriterionFormatSuite.scala
@@ -22,8 +22,8 @@ class PatientCriterionFormatSuite extends FlatSpec with Matchers {
criterionText = "criterion text",
criterionValue = Some(true),
criterionIsDefining = false,
- eligibilityStatus = Some(LabelValue.Yes),
- verifiedEligibilityStatus = None,
+ eligibilityStatus = LabelValue.Yes,
+ verifiedEligibilityStatus = LabelValue.Unknown,
isVisible = true,
isVerified = true,
lastUpdate = LocalDateTime.parse("2017-08-10T18:00:00"),
@@ -39,12 +39,12 @@ class PatientCriterionFormatSuite extends FlatSpec with Matchers {
writtenJson should be(
"""{"isVerified":true,"patientLabelId":1,"lastUpdate":"2017-08-10T18:00Z","trialId":0,
"armList":[{"patientCriterionId":1,"armId":31,"armName":"arm 31"},{"patientCriterionId":1,
- "armId":32,"armName":"arm 32"}],"eligibilityStatus":"Yes","id":1,"nctId":"NCT00001",
+ "armId":32,"armName":"arm 32"}],"eligibilityStatus":"Yes","verifiedEligibilityStatus":"Unknown","id":1,"nctId":"NCT00001",
"criterionId":101,"criterionValue":true,"criterionIsDefining":false,"labelId":21,
"isVisible":true,"criterionText":"criterion text","inclusion":true}""".parseJson)
val updatePatientCriterionJson = """{"verifiedEligibilityStatus":"No"}""".parseJson
- val expectedUpdatedPatientCriterion = orig.copy(verifiedEligibilityStatus = Some(LabelValue.No))
+ val expectedUpdatedPatientCriterion = orig.copy(verifiedEligibilityStatus = LabelValue.No)
val parsedUpdatePatientCriterion = applyUpdateToPatientCriterion(updatePatientCriterionJson, orig)
parsedUpdatePatientCriterion should be(expectedUpdatedPatientCriterion)
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientEligibleTrialFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientEligibleTrialFormatSuite.scala
index b5fbf3f..faef0f6 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientEligibleTrialFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientEligibleTrialFormatSuite.scala
@@ -38,8 +38,8 @@ class PatientEligibleTrialFormatSuite extends FlatSpec with Matchers {
patientId = UuidId("748b5884-3528-4cb9-904b-7a8151d6e343"),
trialId = StringId("NCT000001"),
hypothesisId = UuidId("e76e2fc4-a29c-44fb-a81b-8856d06bb1d4"),
- eligibilityStatus = Some(LabelValue.Yes),
- verifiedEligibilityStatus = Some(LabelValue.Yes),
+ eligibilityStatus = LabelValue.Yes,
+ verifiedEligibilityStatus = LabelValue.Yes,
isVerified = false
)
val arms = List(
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientLabelFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientLabelFormatSuite.scala
index b83aad1..289de53 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientLabelFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/PatientLabelFormatSuite.scala
@@ -17,8 +17,8 @@ class PatientLabelFormatSuite extends FlatSpec with Matchers {
id = LongId(1),
patientId = UuidId("748b5884-3528-4cb9-904b-7a8151d6e343"),
labelId = LongId(20),
- primaryValue = Some(LabelValue.Yes),
- verifiedPrimaryValue = None,
+ primaryValue = LabelValue.Yes,
+ verifiedPrimaryValue = LabelValue.Unknown,
isVisible = true,
score = 1,
isImplicitMatch = false
@@ -26,11 +26,11 @@ class PatientLabelFormatSuite extends FlatSpec with Matchers {
val writtenJson = richPatientLabelFormat.write(RichPatientLabel(orig, isVerified = true))
writtenJson should be(
- """{"id":1,"labelId":20,"primaryValue":"Yes","isVisible":true,"isVerified":true,
+ """{"id":1,"labelId":20,"primaryValue":"Yes","isVisible":true,"isVerified":true,"verifiedPrimaryValue":"Unknown",
"score":1,"isImplicitMatch":false, "patientId":"748b5884-3528-4cb9-904b-7a8151d6e343"}""".parseJson)
val updatePatientLabelJson = """{"verifiedPrimaryValue":"No"}""".parseJson
- val expectedUpdatedPatientLabel = orig.copy(verifiedPrimaryValue = Some(LabelValue.No))
+ val expectedUpdatedPatientLabel = orig.copy(verifiedPrimaryValue = LabelValue.No)
val parsedUpdatePatientLabel = applyUpdateToPatientLabel(updatePatientLabelJson, orig)
parsedUpdatePatientLabel should be(expectedUpdatedPatientLabel)
}
@@ -65,8 +65,8 @@ class PatientLabelFormatSuite extends FlatSpec with Matchers {
id = LongId(1),
patientId = UuidId("748b5884-3528-4cb9-904b-7a8151d6e343"),
labelId = LongId(20),
- primaryValue = Some(LabelValue.Yes),
- verifiedPrimaryValue = Some(LabelValue.Yes),
+ primaryValue = LabelValue.Yes,
+ verifiedPrimaryValue = LabelValue.Yes,
isVisible = true,
score = 1,
isImplicitMatch = false