aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.sbt6
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/db/SlickQueryBuilder.scala25
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala40
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/json/JsonSerializer.scala3
-rw-r--r--src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala3
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/DirectReport.scala27
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala11
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/EligibilityArm.scala22
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/ExtractedData.scala8
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecord.scala30
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala6
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala19
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala23
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala10
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabelEvidenceView.scala10
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/RawPatientLabel.scala31
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/RawTrialLabel.scala32
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala18
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabel.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidence.scala19
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidenceDocument.scala8
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientWithLabels.scala12
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialArm.scala4
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialLabelCriterion.scala14
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialWithLabels.scala35
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/fakes/entities/common.scala7
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/fakes/entities/export.scala9
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/DocumentGen.scala8
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/ExportPatientGen.scala6
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/ExtractedDataGen.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/MedicalRecordGen.scala31
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/fakes/entities/trialcuration.scala2
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityArm.scala56
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityCreateArm.scala31
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiPartialEligibilityArm.scala15
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/evidence/ApiPatientLabelEvidence.scala7
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala6
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala12
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala25
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/eligible/ApiPatientEligibleTrial.scala8
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala15
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabel.scala32
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabelDefiningCriteria.scala8
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterion.scala14
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterionList.scala9
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala18
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala2
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala2
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala39
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/common.scala10
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala2
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala16
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala2
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala16
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala7
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patient.scala6
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala47
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientdefiningcriteria.scala3
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienteligibletrial.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthypothesis.scala34
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientissue.scala2
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientlabel.scala36
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/record.scala38
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala10
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialissue.scala2
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala4
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/EligibilityArmService.scala32
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/EligibilityVerificationService.scala3
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala28
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientHypothesisService.scala16
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala20
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala20
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeEligibilityVerificationService.scala3
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala39
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala5
-rw-r--r--src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala17
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala3
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/DocumentFormatSuite.scala22
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ExportFormatSuite.scala16
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ExtractedDataFormatSuite.scala11
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala104
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/MedicalRecordFormatSuite.scala21
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientCriterionFormatSuite.scala14
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientEligibleTrialFormatSuite.scala9
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientFormatSuite.scala11
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientHypothesisFormatSuite.scala20
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientLabelFormatSuite.scala27
-rw-r--r--src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/TrialFormatSuite.scala2
91 files changed, 778 insertions, 708 deletions
diff --git a/build.sbt b/build.sbt
index 66c0f7b..d68a8f5 100644
--- a/build.sbt
+++ b/build.sbt
@@ -11,15 +11,15 @@ lazy val core = (project in file("."))
"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.8.3",
"com.github.pureconfig" %% "pureconfig" % "0.7.2",
"com.lihaoyi" %% "fastparse" % "0.3.7",
- "com.typesafe.akka" %% "akka-http" % "10.0.9",
+ "com.typesafe.akka" %% "akka-http" % "10.0.10",
"com.typesafe.play" %% "play" % "2.5.15",
"com.typesafe.scala-logging" %% "scala-logging" % "3.5.0",
"io.getquill" %% "quill-jdbc" % "1.2.1",
"io.github.cloudify" %% "spdf" % "1.4.0",
"org.davidbild" %% "tristate-core" % "0.2.0",
"org.davidbild" %% "tristate-play" % "0.2.0" exclude ("com.typesafe.play", "play-json"),
- "xyz.driver" %% "core" % "1.2.1",
- "xyz.driver" %% "domain-model" % "0.17.1",
+ "xyz.driver" %% "core" % "1.2.2",
+ "xyz.driver" %% "domain-model" % "0.17.8",
"ch.qos.logback" % "logback-classic" % "1.1.7",
"com.fasterxml.jackson.datatype" % "jackson-datatype-jsr310" % "2.8.4",
"com.github.spullara.mustache.java" % "scala-extensions-2.11" % "0.9.4",
diff --git a/src/main/scala/xyz/driver/pdsuicommon/db/SlickQueryBuilder.scala b/src/main/scala/xyz/driver/pdsuicommon/db/SlickQueryBuilder.scala
index 0daa84d..dc03a52 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/db/SlickQueryBuilder.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/db/SlickQueryBuilder.scala
@@ -1,6 +1,6 @@
package xyz.driver.pdsuicommon.db
-import java.sql.PreparedStatement
+import java.sql.{JDBCType, PreparedStatement}
import java.time.LocalDateTime
import slick.jdbc.{JdbcProfile, PositionedParameters, SQLActionBuilder, SetParameter}
@@ -38,6 +38,12 @@ object SlickQueryBuilder {
})
}
}
+
+ implicit object SetQueryParameter extends SetParameter[AnyRef] {
+ def apply(v: AnyRef, pp: PositionedParameters) = {
+ pp.setObject(v, JDBCType.BINARY.getVendorTypeNumber)
+ }
+ }
}
final case class SlickTableLink(keyColumnName: String, foreignTableName: String, foreignKeyColumnName: String)
@@ -175,6 +181,16 @@ sealed trait SlickQueryBuilderParameters {
} else sql
}
+ def concatenateParameters(sql: SQLActionBuilder, first: Boolean, tail: Seq[AnyRef]): SQLActionBuilder = {
+ if (tail.nonEmpty) {
+ if (!first) {
+ concatenateParameters(sql concat sql""",${tail.head}""", false, tail.tail)
+ } else {
+ concatenateParameters(sql"""(${tail.head}""", false, tail.tail)
+ }
+ } else sql concat sql")"
+ }
+
filter match {
case x if isEmpty(x) =>
sql""
@@ -196,7 +212,7 @@ sealed trait SlickQueryBuilderParameters {
// So, to handle NotEq for nullable fields we need to use more complex SQL expression.
// http://dev.mysql.com/doc/refman/5.7/en/working-with-null.html
val escapedColumn = escapeDimension(dimension)
- sql"(#${escapedColumn} is null or #${escapedColumn} != ${value.toString})"
+ sql"(#${escapedColumn} is null or #${escapedColumn} != $value)"
case Atom.Binary(dimension, op, value) =>
val operator = op match {
@@ -208,7 +224,7 @@ sealed trait SlickQueryBuilderParameters {
case Lt => sql"<"
case LtEq => sql"<="
}
- sql"#${escapeDimension(dimension)}" concat operator concat sql"""${value.toString}"""
+ sql"#${escapeDimension(dimension)}" concat operator concat sql"""$value"""
case Atom.NAry(dimension, op, values) =>
val sqlOp = op match {
@@ -217,8 +233,7 @@ sealed trait SlickQueryBuilderParameters {
}
val formattedValues = if (values.nonEmpty) {
- val condition = s"(${values.map(v => "'" + v.toString + "'").mkString(",")})"
- sql"#${condition}"
+ concatenateParameters(sql"", true, values)
} else sql"NULL"
sql"#${escapeDimension(dimension)}" concat sqlOp concat formattedValues
diff --git a/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala b/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala
deleted file mode 100644
index 36c3de7..0000000
--- a/src/main/scala/xyz/driver/pdsuicommon/domain/FuzzyValue.scala
+++ /dev/null
@@ -1,40 +0,0 @@
-package xyz.driver.pdsuicommon.domain
-
-import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuicommon.utils.Utils
-
-sealed trait FuzzyValue
-
-object FuzzyValue {
- case object Yes extends FuzzyValue
- case object No extends FuzzyValue
- case object Maybe extends FuzzyValue
-
- private val yes = "Yes"
- private val no = "No"
- private val maybe = "Maybe"
-
- val All: Set[FuzzyValue] =
- Set(Yes, No, Maybe)
-
- def fromBoolean(x: Boolean): FuzzyValue =
- if (x) Yes else No
-
- implicit def toPhiString(x: FuzzyValue): PhiString =
- Unsafe(Utils.getClassSimpleName(x.getClass))
-
- val fromString: PartialFunction[String, FuzzyValue] = {
- case fuzzy =>
- fuzzy.toLowerCase.capitalize match {
- case `yes` => Yes
- case `no` => No
- case `maybe` => Maybe
- }
- }
-
- def valueToString(x: FuzzyValue): String = x match {
- case Yes => `yes`
- case No => `no`
- case Maybe => `maybe`
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuicommon/json/JsonSerializer.scala b/src/main/scala/xyz/driver/pdsuicommon/json/JsonSerializer.scala
index a53f1dd..9383a1c 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/json/JsonSerializer.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/json/JsonSerializer.scala
@@ -3,7 +3,7 @@ package xyz.driver.pdsuicommon.json
import java.text.SimpleDateFormat
import com.fasterxml.jackson.annotation.JsonInclude
-import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper}
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
@@ -15,6 +15,7 @@ object JsonSerializer {
mapper.registerModule(new JavaTimeModule)
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
def serialize(value: Any): String = {
mapper.writeValueAsString(value)
diff --git a/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala b/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala
index 83c4e6f..6d2a068 100644
--- a/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala
+++ b/src/main/scala/xyz/driver/pdsuicommon/utils/CustomSwaggerJsonFormats.scala
@@ -15,6 +15,7 @@ import xyz.driver.pdsuidomain.formats.json.sprayformats.trial._
import xyz.driver.pdsuidomain.formats.json.sprayformats.trialhistory._
import xyz.driver.pdsuidomain.formats.json.sprayformats.trialissue._
import xyz.driver.core.swagger.CustomSwaggerJsonConverter._
+import xyz.driver.entities.patient.CancerType
import xyz.driver.pdsuicommon.concurrent.BridgeUploadQueue
import xyz.driver.pdsuidomain.services.CriterionService.RichCriterion
import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData
@@ -32,7 +33,7 @@ object CustomSwaggerJsonFormats {
)
val customTrialCurationProperties = immutable.Map[Class[_], Property](
classOf[Trial.Status] -> stringProperty(),
- classOf[Trial.Condition] -> stringProperty(),
+ classOf[CancerType] -> stringProperty(),
classOf[TrialHistory.Action] -> stringProperty(),
classOf[TrialHistory.State] -> stringProperty()
) ++ customCommonProperties
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/DirectReport.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/DirectReport.scala
index 42ac55b..f35c3fd 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/DirectReport.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/DirectReport.scala
@@ -2,31 +2,14 @@ package xyz.driver.pdsuidomain.entities
import java.time.LocalDate
+import xyz.driver.entities.assays.AssayType
import xyz.driver.pdsuicommon.logging._
import xyz.driver.pdsuicommon.domain.UuidId
-import xyz.driver.pdsuicommon.utils.Utils
-import xyz.driver.pdsuidomain.entities.DirectReport.ReportType
object DirectReport {
-
- sealed trait ReportType extends Product with Serializable {
- def oneOf(xs: ReportType*): Boolean = xs.contains(this)
-
- def oneOf(xs: Set[ReportType]): Boolean = xs.contains(this)
- }
-
- object ReportType {
- case object IHC extends ReportType
- case object DNA extends ReportType
- case object CFDNA extends ReportType
-
- val All = Set(IHC, DNA, CFDNA)
- implicit def toPhiString(x: ReportType): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass))
- }
-
implicit def toPhiString(x: DirectReport): PhiString = {
import x._
- phi"DirectReport(id=$id, patientId=$patientId, reportType=$reportType, date=${Unsafe(date)}, " +
+ phi"DirectReport(id=$id, patientId=$patientId, reportType=${Unsafe(reportType)}, date=${Unsafe(date)}, " +
phi"documentType=${Unsafe(documentType)}, providerType=${Unsafe(providerType)}, " +
phi"providerName=${Unsafe(providerName)})"
}
@@ -34,8 +17,8 @@ object DirectReport {
final case class DirectReport(id: UuidId[DirectReport],
patientId: UuidId[Patient],
- reportType: ReportType,
+ reportType: AssayType,
date: LocalDate,
- documentType: String,
- providerType: String,
+ documentType: DocumentType,
+ providerType: ProviderType,
providerName: String)
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala
index eccb254..258aa03 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/Document.scala
@@ -308,13 +308,7 @@ object DocumentType {
object Document {
- final case class Meta(predicted: Option[Boolean], startPage: Double, endPage: Double) {
-
- /**
- * Return a regular meta: this meta is considered as not predicted
- */
- def confirmed: Meta = copy(predicted = predicted.map(_ => false))
- }
+ final case class Meta(startPage: Double, endPage: Double)
class DocumentStatusSerializer extends JsonSerializer[Status] {
def serialize(value: Status, gen: JsonGenerator, serializers: SerializerProvider): Unit = {
@@ -419,6 +413,8 @@ object Document {
providerTypeId <- Validators.nonEmpty("providerTypeId")(input.providerTypeId)
+ institutionName <- Validators.nonEmpty("institutionName")(input.institutionName)
+
meta <- Validators.nonEmpty("meta")(input.meta)
startDate <- Validators.nonEmpty("startDate")(input.startDate)
@@ -456,6 +452,7 @@ final case class Document(id: LongId[Document] = LongId(0L),
providerName: Option[String], // not null
providerTypeId: Option[LongId[ProviderType]], // not null
requiredType: Option[Document.RequiredType],
+ institutionName: Option[String],
meta: Option[TextJson[Meta]], // not null
startDate: Option[LocalDate], // not null
endDate: Option[LocalDate],
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/EligibilityArm.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/EligibilityArm.scala
index 2f5924c..50b49ad 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/EligibilityArm.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/EligibilityArm.scala
@@ -2,6 +2,7 @@ package xyz.driver.pdsuidomain.entities
import java.time.LocalDateTime
+import xyz.driver.entities.patient.CancerType
import xyz.driver.pdsuicommon.domain.{LongId, StringId}
import xyz.driver.pdsuicommon.logging._
@@ -18,3 +19,24 @@ object EligibilityArm {
phi"Arm(id=$id, name=${Unsafe(x.name)}, trialId=${Unsafe(x.trialId)})"
}
}
+
+final case class EligibilityArmDisease(eligibilityArmId: LongId[EligibilityArm], disease: CancerType)
+
+object EligibilityArmDisease {
+
+ implicit def toPhiString(x: EligibilityArmDisease): PhiString = {
+ phi"EligibilityArmDisease(eligibilityArmId=${Unsafe(x.eligibilityArmId)}, disease=${Unsafe(x.disease)})"
+ }
+
+}
+
+final case class EligibilityArmWithDiseases(eligibilityArm: EligibilityArm,
+ eligibilityArmDiseases: Seq[EligibilityArmDisease])
+
+object EligibilityArmWithDiseases {
+
+ implicit def toPhiString(x: EligibilityArmWithDiseases): PhiString = {
+ import x._
+ phi"EligibilityArmWithDiseases(eligibilityArm=$eligibilityArm, eligibilityArmDiseases=$eligibilityArmDiseases)"
+ }
+}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/ExtractedData.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/ExtractedData.scala
index fbd468f..352cf55 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/ExtractedData.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/ExtractedData.scala
@@ -1,7 +1,7 @@
package xyz.driver.pdsuidomain.entities
-import xyz.driver.entities.labels.{Label, LabelCategory}
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, TextJson}
+import xyz.driver.entities.labels.{Label, LabelCategory, LabelValue}
+import xyz.driver.pdsuicommon.domain.{LongId, TextJson}
import xyz.driver.pdsuicommon.logging._
import xyz.driver.pdsuidomain.entities.ExtractedData.Meta
@@ -37,7 +37,7 @@ object ExtractedDataLabel {
implicit def toPhiString(x: ExtractedDataLabel): PhiString = {
import x._
- phi"ExtractedDataLabel(id=$id, dataId=$dataId, labelId=$labelId, categoryId=$categoryId, value=$value)"
+ phi"ExtractedDataLabel(id=$id, dataId=$dataId, labelId=$labelId, categoryId=$categoryId, value=${Unsafe(value)})"
}
}
@@ -45,4 +45,4 @@ final case class ExtractedDataLabel(id: LongId[ExtractedDataLabel],
dataId: LongId[ExtractedData],
labelId: Option[LongId[Label]],
categoryId: Option[LongId[LabelCategory]],
- value: Option[FuzzyValue])
+ value: Option[LabelValue])
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecord.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecord.scala
index 9b33af4..ed35db4 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecord.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/MedicalRecord.scala
@@ -22,55 +22,45 @@ object MedicalRecord {
))
trait Meta {
@JsonProperty("type") def metaType: String
- def predicted: Option[Boolean]
-
- /**
- * Return a regular meta: this meta is considered as not predicted
- */
- def confirmed: Meta
}
object Meta {
- final case class Duplicate(predicted: Option[Boolean],
- startPage: Double,
+ final case class Duplicate(startPage: Double,
endPage: Double,
startOriginalPage: Double,
endOriginalPage: Option[Double])
extends Meta {
- override val metaType = "duplicate"
- override def confirmed: Duplicate = copy(predicted = predicted.map(_ => false))
+ override val metaType = "duplicate"
}
object Duplicate {
implicit def toPhiString(x: Duplicate): PhiString = {
import x._
- phi"Duplicate(predicted=${x.predicted}, startPage=${Unsafe(startPage)}, endPage=${Unsafe(endPage)}, " +
+ phi"Duplicate(startPage=${Unsafe(startPage)}, endPage=${Unsafe(endPage)}, " +
phi"startOriginalPage=${Unsafe(startOriginalPage)}, endOriginalPage=${Unsafe(endOriginalPage)}"
}
}
- final case class Reorder(predicted: Option[Boolean], items: Seq[Int]) extends Meta {
- override val metaType = "reorder"
- override def confirmed: Reorder = copy(predicted = predicted.map(_ => false))
+ final case class Reorder(items: Seq[Int]) extends Meta {
+ override val metaType = "reorder"
}
object Reorder {
implicit def toPhiString(x: Reorder): PhiString = {
import x._
- phi"Reorder(predicted=${x.predicted}, items=${Unsafe(items.toString)})"
+ phi"Reorder(items=${Unsafe(items.toString)})"
}
}
- final case class Rotation(predicted: Option[Boolean], items: Map[String, Int]) extends Meta {
- override val metaType = "rotation"
- override def confirmed: Rotation = copy(predicted = predicted.map(_ => false))
+ final case class Rotation(items: Map[String, Int]) extends Meta {
+ override val metaType = "rotation"
}
object Rotation {
implicit def toPhiString(x: Rotation): PhiString = {
import x._
- phi"Rotation(predicted=${x.predicted}, items=${Unsafe(items.toString)})"
+ phi"Rotation(items=${Unsafe(items.toString)})"
}
}
@@ -166,8 +156,6 @@ final case class MedicalRecord(id: LongId[MedicalRecord],
caseId: Option[CaseId],
physician: Option[String],
meta: Option[TextJson[List[Meta]]],
- predictedMeta: Option[TextJson[List[Meta]]],
- predictedDocuments: Option[TextJson[List[Document]]],
lastUpdate: LocalDateTime) {
import MedicalRecord.Status._
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala
index 6be0b88..598b11e 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/Patient.scala
@@ -2,6 +2,8 @@ package xyz.driver.pdsuidomain.entities
import java.time.{LocalDate, LocalDateTime}
+import xyz.driver.entities.common.FullName
+import xyz.driver.entities.patient.CancerType
import xyz.driver.pdsuicommon.domain._
import xyz.driver.pdsuicommon.logging._
import xyz.driver.pdsuicommon.utils.Utils
@@ -52,14 +54,14 @@ object Patient {
final case class Patient(id: UuidId[Patient],
status: Patient.Status,
- name: String,
+ name: FullName[Patient],
dob: LocalDate,
assignee: Option[StringId[User]],
previousStatus: Option[Patient.Status],
previousAssignee: Option[StringId[User]],
lastActiveUserId: Option[StringId[User]],
isUpdateRequired: Boolean,
- condition: String,
+ disease: CancerType,
orderId: PatientOrderId,
lastUpdate: LocalDateTime) {
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala
index 469b21c..79a19ed 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientCriterion.scala
@@ -2,7 +2,8 @@ package xyz.driver.pdsuidomain.entities
import java.time.LocalDateTime
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, StringId}
+import xyz.driver.entities.labels.LabelValue
+import xyz.driver.pdsuicommon.domain.{LongId, StringId}
import xyz.driver.pdsuicommon.logging._
object PatientCriterion {
@@ -18,15 +19,15 @@ object PatientCriterion {
/**
* @see https://driverinc.atlassian.net/wiki/display/MTCH/EV+Business+Process
*/
- def getEligibilityStatus(criterionValue: Option[Boolean], primaryValue: Option[FuzzyValue]): Option[FuzzyValue] = {
+ def getEligibilityStatus(criterionValue: Option[Boolean], primaryValue: Option[LabelValue]): Option[LabelValue] = {
primaryValue match {
case None => None
- case Some(FuzzyValue.Maybe) => Some(FuzzyValue.Maybe)
- case Some(_) if criterionValue.isEmpty => Some(FuzzyValue.Maybe)
+ case Some(LabelValue.Maybe) => Some(LabelValue.Maybe)
+ case Some(_) if criterionValue.isEmpty => Some(LabelValue.Maybe)
case Some(status) =>
Some(
- FuzzyValue.fromBoolean(
- FuzzyValue.fromBoolean(
+ LabelValue.fromBoolean(
+ LabelValue.fromBoolean(
criterionValue.getOrElse(throw new IllegalArgumentException("Criterion should not be empty"))) == status
))
}
@@ -47,12 +48,12 @@ final case class PatientCriterion(id: LongId[PatientCriterion],
criterionText: String,
criterionValue: Option[Boolean],
criterionIsDefining: Boolean,
- eligibilityStatus: Option[FuzzyValue],
- verifiedEligibilityStatus: Option[FuzzyValue],
+ eligibilityStatus: Option[LabelValue],
+ verifiedEligibilityStatus: Option[LabelValue],
isVerified: Boolean,
isVisible: Boolean,
lastUpdate: LocalDateTime) {
- def isIneligibleForEv: Boolean = eligibilityStatus.contains(FuzzyValue.No) && isVerified
+ def isIneligibleForEv: Boolean = eligibilityStatus.contains(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 8ee5b3c..ff272a8 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientEligibleTrial.scala
@@ -1,6 +1,7 @@
package xyz.driver.pdsuidomain.entities
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, StringId, UuidId}
+import xyz.driver.entities.labels.LabelValue
+import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
import xyz.driver.pdsuicommon.logging._
object PatientTrialArm {
@@ -37,22 +38,22 @@ object PatientTrialArmGroup {
/**
* @see https://driverinc.atlassian.net/wiki/display/DMPD/EV+Business+Process
*/
- def getEligibilityStatusForRc(criterionList: TraversableOnce[PatientCriterion]): Option[FuzzyValue] = {
- def isEligible: Boolean = criterionList.forall(_.verifiedEligibilityStatus.contains(FuzzyValue.Yes))
- def isIneligible: Boolean = criterionList.exists(_.verifiedEligibilityStatus.contains(FuzzyValue.No))
+ 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)
- if (isEligible) Some(FuzzyValue.Yes)
- else if (isIneligible) Some(FuzzyValue.No)
+ if (isEligible) Some(LabelValue.Yes)
+ else if (isIneligible) Some(LabelValue.No)
else if (isUnknown) None
- else Some(FuzzyValue.Maybe)
+ else Some(LabelValue.Maybe)
}
}
final case class PatientTrialArmGroup(id: LongId[PatientTrialArmGroup],
eligibleTrialId: UuidId[PatientEligibleTrial],
- eligibilityStatus: Option[FuzzyValue],
- verifiedEligibilityStatus: Option[FuzzyValue],
+ eligibilityStatus: Option[LabelValue],
+ verifiedEligibilityStatus: Option[LabelValue],
isVerified: Boolean)
object PatientTrialArmGroupView {
@@ -69,8 +70,8 @@ final case class PatientTrialArmGroupView(id: LongId[PatientTrialArmGroup],
patientId: UuidId[Patient],
trialId: StringId[Trial],
hypothesisId: UuidId[Hypothesis],
- eligibilityStatus: Option[FuzzyValue],
- verifiedEligibilityStatus: Option[FuzzyValue],
+ eligibilityStatus: Option[LabelValue],
+ verifiedEligibilityStatus: Option[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 d10c7d2..4c0f4ef 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabel.scala
@@ -1,7 +1,7 @@
package xyz.driver.pdsuidomain.entities
-import xyz.driver.entities.labels.Label
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, UuidId}
+import xyz.driver.entities.labels.{Label, LabelValue}
+import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
import xyz.driver.pdsuicommon.logging._
object PatientLabel {
@@ -17,8 +17,8 @@ final case class PatientLabel(id: LongId[PatientLabel],
patientId: UuidId[Patient],
labelId: LongId[Label],
score: Int,
- primaryValue: Option[FuzzyValue],
- verifiedPrimaryValue: Option[FuzzyValue],
+ primaryValue: Option[LabelValue],
+ verifiedPrimaryValue: Option[LabelValue],
isImplicitMatch: Boolean,
isVisible: Boolean)
@@ -32,7 +32,7 @@ object PatientLabelEvidence {
final case class PatientLabelEvidence(id: LongId[PatientLabelEvidence],
patientLabelId: LongId[PatientLabel],
- value: FuzzyValue,
+ value: LabelValue,
evidenceText: String,
reportId: Option[UuidId[DirectReport]],
documentId: Option[LongId[Document]],
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabelEvidenceView.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabelEvidenceView.scala
index 3311d96..6055921 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabelEvidenceView.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/PatientLabelEvidenceView.scala
@@ -2,28 +2,28 @@ package xyz.driver.pdsuidomain.entities
import java.time.LocalDate
-import xyz.driver.entities.labels.Label
+import xyz.driver.entities.labels.{Label, LabelValue}
import xyz.driver.pdsuicommon.domain._
import xyz.driver.pdsuicommon.logging._
object PatientLabelEvidenceView {
implicit def toPhiString(x: PatientLabelEvidenceView): PhiString = {
import x._
- phi"PatientLabelEvidenceView(id=$id, value=$value, documentId=$documentId, " +
+ phi"PatientLabelEvidenceView(id=$id, value=${Unsafe(value)}, documentId=$documentId, " +
phi"evidenceId=$evidenceId, reportId=$reportId, patientId=$patientId, labelId=$labelId, " +
phi"isImplicitMatch=$isImplicitMatch)"
}
}
final case class PatientLabelEvidenceView(id: LongId[PatientLabelEvidence],
- value: FuzzyValue,
+ value: LabelValue,
evidenceText: String,
documentId: Option[LongId[Document]],
evidenceId: Option[LongId[ExtractedData]],
reportId: Option[UuidId[DirectReport]],
- documentType: String,
+ documentType: DocumentType,
date: Option[LocalDate], // Document.startDate is optional
- providerType: String,
+ providerType: ProviderType,
patientId: UuidId[Patient],
labelId: LongId[Label],
isImplicitMatch: Boolean)
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/RawPatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/RawPatientLabel.scala
deleted file mode 100644
index 689eaa4..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/RawPatientLabel.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDate
-
-import xyz.driver.entities.labels.Label
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, UuidId}
-import xyz.driver.pdsuicommon.logging._
-
-final case class RawPatientLabel(patientId: UuidId[Patient],
- labelId: LongId[Label],
- value: FuzzyValue,
- evidenceId: LongId[ExtractedData],
- evidenceText: String,
- disease: String,
- documentId: LongId[Document],
- requestId: RecordRequestId,
- documentType: DocumentType,
- providerType: ProviderType,
- startDate: LocalDate,
- endDate: Option[LocalDate])
-
-object RawPatientLabel {
-
- implicit def toPhiString(x: RawPatientLabel): PhiString = {
- import x._
- phi"RawPatientLabel(patientId=$patientId, labelId=$labelId, value=$value, evidenceId=${Unsafe(evidenceId)}, " +
- phi"evidenceText=${Unsafe(evidenceText)}, documentId=$documentId, requestId=${Unsafe(requestId)}, " +
- phi"documentType=${Unsafe(documentType)}, providerType=${Unsafe(providerType)}, " +
- phi"startDate=$startDate, endDate=$endDate)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/RawTrialLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/RawTrialLabel.scala
deleted file mode 100644
index bdbc4ea..0000000
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/RawTrialLabel.scala
+++ /dev/null
@@ -1,32 +0,0 @@
-package xyz.driver.pdsuidomain.entities
-
-import java.time.LocalDateTime
-
-import xyz.driver.entities.labels.Label
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
-import xyz.driver.pdsuicommon.logging._
-
-final case class RawTrialLabel(nctId: StringId[Trial],
- trialId: UuidId[Trial],
- condition: String,
- lastReviewed: LocalDateTime,
- armName: String,
- armId: LongId[Arm],
- labelId: LongId[Label],
- value: Option[Boolean],
- criterionId: LongId[Criterion],
- criteria: String,
- criterionArmId: LongId[Arm],
- isCompound: Boolean,
- isDefining: Boolean)
-
-object RawTrialLabel {
-
- implicit def toPhiString(x: RawTrialLabel): PhiString = {
- import x._
- phi"RawTrialLabel(nctId=$nctId, trialId=$trialId, condition=${Unsafe(condition)}, lastReviewed=$lastReviewed, " +
- phi"armId=$armId, armName=${Unsafe(armName)}, labelId=$labelId, value=$value, " +
- phi"criterionId=$criterionId, criteria=${Unsafe(criteria)}, criterionArmId=$criterionArmId, " +
- phi"isCompound=$isCompound, isDefining=$isDefining)"
- }
-}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala
index bd86057..ac5feef 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/Trial.scala
@@ -58,24 +58,6 @@ object Trial {
}
final case class Locations(locations: List[String])
-
- sealed trait Condition
-
- object Condition {
-
- case object Breast extends Condition
- case object Lung extends Condition
- case object Prostate extends Condition
-
- def fromString(condition: String): Option[Condition] = condition match {
- case "Breast" => Some(Breast)
- case "Lung" => Some(Lung)
- case "Prostate" => Some(Prostate)
- case _ => None
- }
-
- val All: Set[Condition] = Set(Breast, Lung, Prostate)
- }
}
final case class Trial(id: StringId[Trial],
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabel.scala
index 2edd707..957e607 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabel.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabel.scala
@@ -3,7 +3,6 @@ package xyz.driver.pdsuidomain.entities.export.patient
import xyz.driver.entities.labels.Label
import xyz.driver.pdsuicommon.domain.LongId
import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.RawPatientLabel
final case class ExportPatientLabel(id: LongId[Label], evidences: List[ExportPatientLabelEvidence])
@@ -13,8 +12,4 @@ object ExportPatientLabel extends PhiLogging {
import x._
phi"ExportPatientLabel(id=$id, evidences=$evidences)"
}
-
- def fromRaw(labelId: LongId[Label], rawPatientLabels: List[RawPatientLabel]): ExportPatientLabel = {
- ExportPatientLabel(id = labelId, evidences = rawPatientLabels.map(ExportPatientLabelEvidence.fromRaw))
- }
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidence.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidence.scala
index fb40339..6472a6b 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidence.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidence.scala
@@ -1,11 +1,12 @@
package xyz.driver.pdsuidomain.entities.export.patient
+import xyz.driver.entities.labels.LabelValue
import xyz.driver.pdsuicommon.domain._
import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.{ExtractedData, RawPatientLabel}
+import xyz.driver.pdsuidomain.entities.ExtractedData
final case class ExportPatientLabelEvidence(id: LongId[ExtractedData],
- value: FuzzyValue,
+ value: LabelValue,
evidenceText: String,
document: ExportPatientLabelEvidenceDocument)
@@ -13,20 +14,8 @@ object ExportPatientLabelEvidence {
implicit def toPhiString(x: ExportPatientLabelEvidence): PhiString = {
import x._
- phi"ExportPatientLabelEvidence(id=${Unsafe(id)}, value=$value, " +
+ phi"ExportPatientLabelEvidence(id=${Unsafe(id)}, value=${Unsafe(value)}, " +
phi"evidenceText=${Unsafe(evidenceText)}, document=$document)"
}
- def fromRaw(x: RawPatientLabel) = ExportPatientLabelEvidence(
- id = x.evidenceId,
- value = x.value,
- evidenceText = x.evidenceText,
- document = ExportPatientLabelEvidenceDocument(
- x.documentId,
- x.requestId,
- x.documentType,
- x.providerType,
- x.startDate
- )
- )
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidenceDocument.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidenceDocument.scala
index 7003615..467170b 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidenceDocument.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientLabelEvidenceDocument.scala
@@ -19,12 +19,4 @@ object ExportPatientLabelEvidenceDocument extends PhiLogging {
phi"ExportPatientLabelEvidenceDocument(documentId=$documentId, requestId=$requestId, " +
phi"documentType=${Unsafe(documentType)}, providerType=${Unsafe(providerType)}, date=$date)"
}
-
- def fromRaw(x: RawPatientLabel) = ExportPatientLabelEvidenceDocument(
- documentId = x.documentId,
- requestId = x.requestId,
- documentType = x.documentType,
- providerType = x.providerType,
- date = x.startDate
- )
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientWithLabels.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientWithLabels.scala
index bd6173b..8fb2660 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientWithLabels.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/export/patient/ExportPatientWithLabels.scala
@@ -2,9 +2,7 @@ package xyz.driver.pdsuidomain.entities.export.patient
import xyz.driver.pdsuicommon.domain._
import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.{Patient, RawPatientLabel}
-
-import scala.collection.breakOut
+import xyz.driver.pdsuidomain.entities.Patient
final case class ExportPatientWithLabels(patientId: UuidId[Patient],
labelVersion: Long,
@@ -16,12 +14,4 @@ object ExportPatientWithLabels {
import x._
phi"ExportPatientWithLabels(patientId=$patientId, version=${Unsafe(labelVersion)}, labels=$labels)"
}
-
- def fromRaw(patientId: UuidId[Patient], rawPatientRefs: List[RawPatientLabel]) = ExportPatientWithLabels(
- patientId = patientId,
- labelVersion = 1L, // TODO It is needed to replace this mock label version.
- labels = rawPatientRefs
- .groupBy(_.labelId)
- .map(Function.tupled(ExportPatientLabel.fromRaw))(breakOut)
- )
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialArm.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialArm.scala
index 5a9a406..24fe641 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialArm.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialArm.scala
@@ -2,9 +2,9 @@ package xyz.driver.pdsuidomain.entities.export.trial
import xyz.driver.pdsuicommon.domain._
import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.Arm
+import xyz.driver.pdsuidomain.entities.EligibilityArm
-final case class ExportTrialArm(armId: LongId[Arm], armName: String)
+final case class ExportTrialArm(armId: LongId[EligibilityArm], armName: String)
object ExportTrialArm {
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialLabelCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialLabelCriterion.scala
index 1f06e0d..8376e34 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialLabelCriterion.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialLabelCriterion.scala
@@ -3,12 +3,12 @@ package xyz.driver.pdsuidomain.entities.export.trial
import xyz.driver.entities.labels.Label
import xyz.driver.pdsuicommon.domain._
import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.{Arm, Criterion, RawTrialLabel}
+import xyz.driver.pdsuidomain.entities.{Criterion, EligibilityArm}
final case class ExportTrialLabelCriterion(criterionId: LongId[Criterion],
value: Option[Boolean],
labelId: LongId[Label],
- armIds: Set[LongId[Arm]],
+ armIds: Set[LongId[EligibilityArm]],
criteria: String,
isCompound: Boolean,
isDefining: Boolean)
@@ -20,14 +20,4 @@ object ExportTrialLabelCriterion {
phi"TrialLabelCriterion(criterionId=$criterionId, value=$value, labelId=$labelId, " +
phi"criteria=${Unsafe(criteria)}, isCompound=$isCompound, isDefining=$isDefining)"
}
-
- def fromRaw(x: RawTrialLabel, armIds: Set[LongId[Arm]]) = ExportTrialLabelCriterion(
- criterionId = x.criterionId,
- value = x.value,
- labelId = x.labelId,
- armIds = armIds,
- criteria = x.criteria,
- isCompound = x.isCompound,
- isDefining = x.isDefining
- )
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialWithLabels.scala b/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialWithLabels.scala
index cf55694..3681945 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialWithLabels.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/entities/export/trial/ExportTrialWithLabels.scala
@@ -4,13 +4,10 @@ import java.time.LocalDateTime
import xyz.driver.pdsuicommon.domain._
import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.{RawTrialLabel, Trial}
-
-import scala.collection.breakOut
+import xyz.driver.pdsuidomain.entities.Trial
final case class ExportTrialWithLabels(nctId: StringId[Trial],
trialId: UuidId[Trial],
- condition: String,
lastReviewed: LocalDateTime,
labelVersion: Long,
arms: List[ExportTrialArm],
@@ -20,35 +17,7 @@ object ExportTrialWithLabels {
implicit def toPhiString(x: ExportTrialWithLabels): PhiString = {
import x._
- phi"TrialWithLabels(nctId=$nctId, trialId=$trialId, condition=${Unsafe(condition)}, " +
+ phi"TrialWithLabels(nctId=$nctId, trialId=$trialId}, " +
phi"lastReviewed=$lastReviewed, labelVersion=${Unsafe(labelVersion)}, arms=$arms, criteria=$criteria)"
}
-
- def fromRaw(rawData: List[RawTrialLabel]): ExportTrialWithLabels = {
- val trials: Set[StringId[Trial]] = rawData.map(_.nctId)(breakOut)
-
- assert(trials.size == 1, "There are more than one trial in the rawData")
- val trial = rawData.head
-
- ExportTrialWithLabels(
- nctId = trial.nctId,
- trialId = trial.trialId,
- condition = trial.condition,
- lastReviewed = trial.lastReviewed,
- labelVersion = 1, // TODO It is needed to replace this mock label version.
- arms = rawData
- .groupBy(_.armId)
- .map {
- case (armId, rawTrials) =>
- ExportTrialArm(armId, rawTrials.head.armName)
- }(breakOut),
- criteria = rawData
- .groupBy(x => (x.criterionId, x.labelId))
- .map {
- case (_, rawTrialLabels) =>
- val armIds = rawTrialLabels.map(_.criterionArmId).toSet
- ExportTrialLabelCriterion.fromRaw(rawTrialLabels.head, armIds)
- }(breakOut)
- )
- }
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/common.scala b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/common.scala
index 7318ff6..f77c2e0 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/common.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/common.scala
@@ -3,7 +3,7 @@ package xyz.driver.pdsuidomain.fakes.entities
import java.time.{LocalDate, LocalDateTime, LocalTime}
import xyz.driver.core.generators.{nextDouble, nextOption}
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, StringId, UuidId}
+import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
import xyz.driver.pdsuidomain.entities.{Trial, TrialHistory}
import scala.util.Random
@@ -29,8 +29,6 @@ object common {
1 + Random.nextInt(28) // all months have at least 28 days
)
- def nextCondition = generators.oneOf[Trial.Condition](Trial.Condition.All)
-
def nextTrialAction = generators.oneOf[TrialHistory.Action](TrialHistory.Action.All)
def nextTrialState = generators.oneOf[TrialHistory.State](TrialHistory.State.All)
@@ -52,9 +50,6 @@ object common {
ranges.map(_._1) -> ranges.flatMap(_._2)
}
- def nextFuzzyValue(): FuzzyValue =
- generators.oneOf[FuzzyValue](FuzzyValue.All)
-
def nextStartAndEndPages: (Option[Double], Option[Double]) =
genBoundedRangeOption[Double](nextDouble(), nextDouble())
diff --git a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/export.scala b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/export.scala
index 7f3c410..5febd8f 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/export.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/export.scala
@@ -1,22 +1,22 @@
package xyz.driver.pdsuidomain.fakes.entities
import xyz.driver.entities.labels.Label
-import xyz.driver.pdsuidomain.entities.{Arm, Criterion, Trial}
import xyz.driver.pdsuidomain.entities.export.trial._
+import xyz.driver.pdsuidomain.entities.{Criterion, EligibilityArm, Trial}
object export {
- import xyz.driver.core.generators._
import common._
+ import xyz.driver.core.generators._
def nextExportTrialArm(): ExportTrialArm =
- ExportTrialArm(armId = nextLongId[Arm], armName = nextString(100))
+ ExportTrialArm(armId = nextLongId[EligibilityArm], armName = nextString(100))
def nextExportTrialLabelCriterion(): ExportTrialLabelCriterion =
ExportTrialLabelCriterion(
criterionId = nextLongId[Criterion],
value = nextOption[Boolean](nextBoolean()),
labelId = nextLongId[Label],
- armIds = setOf(nextLongId[Arm]),
+ armIds = setOf(nextLongId[EligibilityArm]),
criteria = nextString(100),
isCompound = nextBoolean(),
isDefining = nextBoolean()
@@ -26,7 +26,6 @@ object export {
ExportTrialWithLabels(
nctId = nextStringId[Trial],
trialId = nextUuidId[Trial],
- condition = nextString(100),
lastReviewed = nextLocalDateTime,
labelVersion = nextInt(100).toLong,
arms = listOf(nextExportTrialArm()),
diff --git a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/DocumentGen.scala b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/DocumentGen.scala
index 1ac75ab..0dadc41 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/DocumentGen.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/DocumentGen.scala
@@ -40,12 +40,7 @@ object DocumentGen {
def nextDocumentMeta(): Document.Meta = {
val (startPage, endPage) = nextStartAndEndPage()
-
- Document.Meta(
- nextOption(nextBoolean()),
- startPage,
- endPage
- )
+ Document.Meta(startPage, endPage)
}
def nextDocumentMetaJson(): TextJson[Document.Meta] = {
@@ -68,6 +63,7 @@ object DocumentGen {
providerName = nextOption(nextString()),
providerTypeId = nextOption(nextLongId[ProviderType]),
requiredType = nextOption(nextDocumentRequiredType()),
+ institutionName = nextOption(nextString()),
meta = nextOption(nextDocumentMetaJson()),
startDate = dates._1,
endDate = dates._2,
diff --git a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/ExportPatientGen.scala b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/ExportPatientGen.scala
index 3fcc4cb..85bab8c 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/ExportPatientGen.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/ExportPatientGen.scala
@@ -1,9 +1,9 @@
package xyz.driver.pdsuidomain.fakes.entities.rep
+import xyz.driver.core.generators
import xyz.driver.core.generators._
-import xyz.driver.entities.labels.Label
+import xyz.driver.entities.labels.{Label, LabelValue}
import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
-import xyz.driver.pdsuidomain.fakes.entities.common._
import xyz.driver.pdsuidomain.entities._
import xyz.driver.pdsuidomain.entities.export.patient._
import xyz.driver.pdsuidomain.fakes.entities.common.{nextLocalDate, nextLongId}
@@ -26,7 +26,7 @@ object ExportPatientGen {
def nextExportPatientLabelEvidence(documentId: LongId[Document]): ExportPatientLabelEvidence = {
ExportPatientLabelEvidence(
id = nextLongId[ExtractedData],
- value = nextFuzzyValue(),
+ value = generators.oneOf[LabelValue](LabelValue.Yes, LabelValue.No, LabelValue.Maybe),
evidenceText = nextString(),
document = nextExportPatientLabelEvidenceDocument(documentId)
)
diff --git a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/ExtractedDataGen.scala b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/ExtractedDataGen.scala
index 8e77445..70ddd10 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/ExtractedDataGen.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/ExtractedDataGen.scala
@@ -1,7 +1,8 @@
package xyz.driver.pdsuidomain.fakes.entities.rep
+import xyz.driver.core.generators
import xyz.driver.core.generators._
-import xyz.driver.entities.labels.{Label, LabelCategory}
+import xyz.driver.entities.labels.{Label, LabelCategory, LabelValue}
import xyz.driver.pdsuicommon.domain.{LongId, TextJson}
import xyz.driver.pdsuidomain.entities._
import xyz.driver.pdsuidomain.entities.ExtractedData.Meta
@@ -85,7 +86,7 @@ object ExtractedDataGen {
dataId = nextLongId[ExtractedData],
labelId = nextOption(nextLongId[Label]),
categoryId = nextOption(nextLongId[LabelCategory]),
- value = nextOption(nextFuzzyValue())
+ value = nextOption(generators.oneOf[LabelValue](LabelValue.Yes, LabelValue.No, LabelValue.Maybe))
)
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/MedicalRecordGen.scala b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/MedicalRecordGen.scala
index 2777116..254968a 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/MedicalRecordGen.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/rep/MedicalRecordGen.scala
@@ -49,15 +49,10 @@ object MedicalRecordGen {
generators.oneOf[MedicalRecordHistory.Action](MedicalRecordHistory.Action.All)
def nextMedicalRecordMetaReorder(): MedicalRecord.Meta.Reorder = {
- val itemsNumber =
- maxItemsInCollectionNumber
- val items = scala.util.Random
- .shuffle(Seq.tabulate(itemsNumber)(identity))
-
- MedicalRecord.Meta.Reorder(
- predicted = nextOption(nextBoolean),
- items = items
- )
+ val itemsNumber = maxItemsInCollectionNumber
+ val items = scala.util.Random.shuffle(Seq.tabulate(itemsNumber)(identity))
+
+ MedicalRecord.Meta.Reorder(items)
}
def nextMedicalRecordMetaDuplicate(): MedicalRecord.Meta.Duplicate = {
@@ -67,7 +62,6 @@ object MedicalRecordGen {
nextInt(pageMaxNumber, startPageGen)
MedicalRecord.Meta.Duplicate(
- predicted = nextOption(nextBoolean),
startPage = startPageGen.toDouble,
endPage = endPageGen.toDouble,
startOriginalPage = startPageGen.toDouble,
@@ -76,17 +70,9 @@ object MedicalRecordGen {
}
def nextMedicalRecordMetaRotation(): MedicalRecord.Meta.Rotation = {
- val items =
- Array
- .tabulate(maxItemsInCollectionNumber)(
- index => nextString() -> index
- )
- .toMap
-
- MedicalRecord.Meta.Rotation(
- predicted = nextOption(nextBoolean()),
- items = items
- )
+ val items = Array.tabulate(maxItemsInCollectionNumber)(index => nextString() -> index).toMap
+
+ MedicalRecord.Meta.Rotation(items = items)
}
def nextMedicalRecordMeta(): MedicalRecord.Meta = {
@@ -94,7 +80,6 @@ object MedicalRecordGen {
}
def nextMedicalRecord(): MedicalRecord = {
- val id = nextLongId[MedicalRecord]
MedicalRecord(
id = nextLongId[MedicalRecord],
status = nextMedicalRecordStatus(),
@@ -108,8 +93,6 @@ object MedicalRecordGen {
caseId = nextOption(CaseId(generators.nextString())),
physician = nextOption(generators.nextString()),
meta = nextOption(nextMedicalRecordMetasJson()),
- predictedMeta = nextOption(nextMedicalRecordMetasJson()),
- predictedDocuments = nextOption(nextDocuments(id)),
lastUpdate = nextLocalDateTime
)
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/trialcuration.scala b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/trialcuration.scala
index 86ea765..ade0115 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/trialcuration.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/fakes/entities/trialcuration.scala
@@ -6,8 +6,8 @@ import xyz.driver.pdsuidomain.entities._
import xyz.driver.pdsuidomain.services.CriterionService.RichCriterion
object trialcuration {
- import xyz.driver.core.generators
import common._
+ import xyz.driver.core.generators
import xyz.driver.pdsuidomain.entities.InterventionType._
def nextTrial(): Trial = Trial(
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala
index 1869ff3..3f1ecfe 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiDocument.scala
@@ -2,7 +2,6 @@ package xyz.driver.pdsuidomain.formats.json.document
import java.time.{LocalDate, ZoneId, ZonedDateTime}
import xyz.driver.pdsuicommon.domain.{LongId, StringId, TextJson}
-import xyz.driver.pdsuicommon.json.JsonSerializer
import xyz.driver.pdsuidomain.entities._
import play.api.data.validation.ValidationError
@@ -20,6 +19,7 @@ final case class ApiDocument(id: Long,
provider: Option[String],
providerTypeId: Option[Long],
requiredType: Option[String],
+ institutionName: Option[String],
status: Option[String],
previousStatus: Option[String],
assignee: Option[String],
@@ -46,6 +46,7 @@ final case class ApiDocument(id: Long,
providerName = this.provider,
providerTypeId = this.providerTypeId.map(LongId(_)),
requiredType = this.requiredType.map(extractRequiredType),
+ institutionName = this.institutionName,
meta = this.meta.map(x => TextJson(JsonSerializer.deserialize[Document.Meta](x))),
startDate = this.startDate,
endDate = this.endDate,
@@ -74,6 +75,7 @@ object ApiDocument {
(JsPath \ "provider").formatNullable[String] and
(JsPath \ "providerTypeId").formatNullable[Long] and
(JsPath \ "requiredType").formatNullable[String] and
+ (JsPath \ "institutionName").formatNullable[String] and
(JsPath \ "status").formatNullable(statusFormat) and
(JsPath \ "previousStatus").formatNullable(statusFormat) and
(JsPath \ "assignee").formatNullable[String] and
@@ -96,6 +98,7 @@ object ApiDocument {
provider = document.providerName,
providerTypeId = document.providerTypeId.map(_.id),
requiredType = document.requiredType.map(Document.RequiredType.requiredTypeToString),
+ institutionName = document.institutionName,
status = Option(Document.Status.statusToString(document.status)),
previousStatus = document.previousStatus.map(Document.Status.statusToString),
assignee = document.assignee.map(_.id),
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala
index eae0c62..032ddf6 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/document/ApiPartialDocument.scala
@@ -23,6 +23,7 @@ final case class ApiPartialDocument(recordId: Option[Long],
endDate: Tristate[LocalDate],
provider: Tristate[String],
providerTypeId: Tristate[Long],
+ institutionName: Tristate[String],
status: Option[String],
assignee: Tristate[String],
meta: Tristate[String]) {
@@ -42,6 +43,7 @@ final case class ApiPartialDocument(recordId: Option[Long],
providerName = provider.cata(Some(_), None, orig.providerName),
providerTypeId = providerTypeId.map(LongId[ProviderType]).cata(Some(_), None, orig.providerTypeId),
requiredType = orig.requiredType,
+ institutionName = institutionName.cata(Some(_), None, orig.institutionName),
meta = meta.cata(x => Some(TextJson(JsonSerializer.deserialize[Meta](x))), None, orig.meta),
startDate = startDate.cata(Some(_), None, orig.startDate),
endDate = endDate.cata(Some(_), None, orig.endDate),
@@ -67,6 +69,7 @@ final case class ApiPartialDocument(recordId: Option[Long],
providerName = provider.toOption,
providerTypeId = providerTypeId.map(LongId[ProviderType]).toOption,
requiredType = None,
+ institutionName = institutionName.toOption,
meta = meta.map(x => TextJson(JsonSerializer.deserialize[Meta](x))).toOption,
previousStatus = None,
assignee = None,
@@ -90,6 +93,7 @@ object ApiPartialDocument {
(JsPath \ "endDate").readTristate[LocalDate] and
(JsPath \ "provider").readTristate[String] and
(JsPath \ "providerTypeId").readTristate[Long] and
+ (JsPath \ "institutionName").readTristate[String] and
(JsPath \ "status").readNullable[String](
Reads
.of[String]
@@ -115,6 +119,7 @@ object ApiPartialDocument {
(JsPath \ "endDate").writeTristate[LocalDate] and
(JsPath \ "provider").writeTristate[String] and
(JsPath \ "providerTypeId").writeTristate[Long] and
+ (JsPath \ "institutionName").writeTristate[String] and
(JsPath \ "status").writeNullable[String] and
(JsPath \ "assignee").writeTristate[String] and
(JsPath \ "meta").writeTristate(Writes[String](Json.parse))
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityArm.scala
index e7eb022..71423e8 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityArm.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityArm.scala
@@ -1,20 +1,36 @@
package xyz.driver.pdsuidomain.formats.json.eligibilityarm
-import xyz.driver.pdsuicommon.domain.{LongId, StringId}
-import xyz.driver.pdsuidomain.entities.EligibilityArm
import play.api.libs.functional.syntax._
import play.api.libs.json._
+import xyz.driver.entities.patient.CancerType
+import xyz.driver.pdsuicommon.domain.{LongId, StringId}
+import xyz.driver.pdsuidomain.entities.{EligibilityArm, EligibilityArmDisease, EligibilityArmWithDiseases}
-final case class ApiEligibilityArm(id: Long, name: String, originalName: String, trialId: String) {
+final case class ApiEligibilityArm(id: Long,
+ name: String,
+ originalName: String,
+ trialId: String,
+ diseases: Seq[String]) {
- def toDomain: EligibilityArm = EligibilityArm(
- id = LongId(this.id),
- name = this.name,
- originalName = this.originalName,
- trialId = StringId(this.trialId),
- deleted = None // if we have an ApiEligibilityArm object, the EligibilityArm itself has not been deleted
- )
+ def toDomain: EligibilityArmWithDiseases = {
+ val eligibilityArm = EligibilityArm(
+ id = LongId(this.id),
+ name = this.name,
+ originalName = this.originalName,
+ trialId = StringId(this.trialId),
+ deleted = None // if we have an ApiEligibilityArm object, the EligibilityArm itself has not been deleted
+ )
+ EligibilityArmWithDiseases(
+ eligibilityArm,
+ this.diseases.map { disease =>
+ val condition = CancerType
+ .fromString(disease)
+ .getOrElse(throw new NoSuchElementException(s"unknown condition $disease"))
+ EligibilityArmDisease(eligibilityArm.id, condition)
+ }
+ )
+ }
}
object ApiEligibilityArm {
@@ -23,13 +39,19 @@ object ApiEligibilityArm {
(JsPath \ "id").format[Long] and
(JsPath \ "name").format[String] and
(JsPath \ "originalName").format[String] and
- (JsPath \ "trialId").format[String]
+ (JsPath \ "trialId").format[String] and
+ (JsPath \ "diseases").format[Seq[String]]
)(ApiEligibilityArm.apply, unlift(ApiEligibilityArm.unapply))
- def fromDomain(arm: EligibilityArm): ApiEligibilityArm = ApiEligibilityArm(
- id = arm.id.id,
- name = arm.name,
- originalName = arm.originalName,
- trialId = arm.trialId.id
- )
+ def fromDomain(eligibilityArmWithDiseases: EligibilityArmWithDiseases): ApiEligibilityArm = {
+ import eligibilityArmWithDiseases.{eligibilityArm, eligibilityArmDiseases}
+
+ ApiEligibilityArm(
+ id = eligibilityArm.id.id,
+ name = eligibilityArm.name,
+ originalName = eligibilityArm.originalName,
+ trialId = eligibilityArm.trialId.id,
+ diseases = eligibilityArmDiseases.map(_.disease.toString)
+ )
+ }
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityCreateArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityCreateArm.scala
index 6f55c10..087fed5 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityCreateArm.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiEligibilityCreateArm.scala
@@ -1,17 +1,30 @@
package xyz.driver.pdsuidomain.formats.json.eligibilityarm
-import xyz.driver.pdsuicommon.domain.{LongId, StringId}
-import xyz.driver.pdsuidomain.entities.EligibilityArm
import play.api.libs.json.{Format, Json}
+import xyz.driver.entities.patient.CancerType
+import xyz.driver.pdsuicommon.domain.{LongId, StringId}
+import xyz.driver.pdsuidomain.entities.{EligibilityArm, EligibilityArmDisease, EligibilityArmWithDiseases}
+
+final case class ApiCreateEligibilityArm(name: String, trialId: String, diseases: Seq[String]) {
-final case class ApiCreateEligibilityArm(name: String, trialId: String) {
+ def toDomain: EligibilityArmWithDiseases = {
+ val eligibilityArm = EligibilityArm(
+ id = LongId(0),
+ name = name,
+ trialId = StringId(trialId),
+ originalName = name
+ )
- def toDomain = EligibilityArm(
- id = LongId(0),
- name = name,
- trialId = StringId(trialId),
- originalName = name
- )
+ EligibilityArmWithDiseases(
+ eligibilityArm,
+ diseases.map { disease =>
+ val condition = CancerType
+ .fromString(disease)
+ .getOrElse(throw new NoSuchElementException(s"unknown condition $disease"))
+ EligibilityArmDisease(eligibilityArm.id, condition)
+ }
+ )
+ }
}
object ApiCreateEligibilityArm {
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiPartialEligibilityArm.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiPartialEligibilityArm.scala
index cc3d460..aca22ef 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiPartialEligibilityArm.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/eligibilityarm/ApiPartialEligibilityArm.scala
@@ -1,11 +1,20 @@
package xyz.driver.pdsuidomain.formats.json.eligibilityarm
-import xyz.driver.pdsuidomain.entities.EligibilityArm
import play.api.libs.json.{Format, Json}
+import xyz.driver.entities.patient.CancerType
+import xyz.driver.pdsuidomain.entities.{EligibilityArmDisease, EligibilityArmWithDiseases}
-final case class ApiPartialEligibilityArm(name: String) {
+final case class ApiPartialEligibilityArm(name: String, diseases: Seq[String]) {
- def applyTo(arm: EligibilityArm): EligibilityArm = arm.copy(name = name)
+ def applyTo(armWithDisease: EligibilityArmWithDiseases): EligibilityArmWithDiseases = {
+ val arm = armWithDisease.eligibilityArm.copy(name = name)
+ val armDiseases = diseases.map { disease =>
+ EligibilityArmDisease(
+ armWithDisease.eligibilityArm.id,
+ CancerType.fromString(disease).getOrElse(throw new NoSuchElementException(s"unknown condition $disease")))
+ }
+ EligibilityArmWithDiseases(arm, armDiseases)
+ }
}
object ApiPartialEligibilityArm {
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/evidence/ApiPatientLabelEvidence.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/evidence/ApiPatientLabelEvidence.scala
index e0f23e3..c7a6de9 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/evidence/ApiPatientLabelEvidence.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/evidence/ApiPatientLabelEvidence.scala
@@ -3,7 +3,6 @@ package xyz.driver.pdsuidomain.formats.json.evidence
import java.time.LocalDate
import play.api.libs.json._
-import xyz.driver.pdsuicommon.domain.FuzzyValue
import xyz.driver.pdsuidomain.entities.PatientLabelEvidenceView
final case class ApiPatientLabelEvidence(id: Long,
@@ -22,13 +21,13 @@ object ApiPatientLabelEvidence {
def fromDomain(x: PatientLabelEvidenceView) = ApiPatientLabelEvidence(
id = x.id.id,
- value = FuzzyValue.valueToString(x.value),
+ value = x.value.toString,
evidenceText = x.evidenceText,
documentId = x.documentId.map(_.id),
evidenceId = x.evidenceId.map(_.id),
reportId = x.reportId.map(_.toString),
- documentType = x.documentType,
+ documentType = x.documentType.name,
date = x.date.get,
- providerType = x.providerType
+ providerType = x.providerType.name
)
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala
index d486749..edb0603 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiCriterionLabel.scala
@@ -1,11 +1,11 @@
package xyz.driver.pdsuidomain.formats.json.label
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
+import xyz.driver.pdsuicommon.domain.LongId
import xyz.driver.pdsuidomain.entities.{Criterion, CriterionLabel}
import play.api.data.validation.ValidationError
import play.api.libs.functional.syntax._
import play.api.libs.json._
-import xyz.driver.entities.labels.{Label, LabelCategory}
+import xyz.driver.entities.labels.{Label, LabelCategory, LabelValue}
/**
* @param value Yes|No
@@ -34,7 +34,7 @@ object ApiCriterionLabel {
labelId = x.labelId.map(_.id),
categoryId = x.categoryId.map(_.id),
value = x.value.map { x =>
- FuzzyValue.valueToString(FuzzyValue.fromBoolean(x))
+ LabelValue.fromBoolean(x).toString
},
isDefining = x.isDefining
)
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala
index f8161af..1497679 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/label/ApiExtractedDataLabel.scala
@@ -1,11 +1,11 @@
package xyz.driver.pdsuidomain.formats.json.label
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
+import xyz.driver.pdsuicommon.domain.LongId
import xyz.driver.pdsuidomain.entities.{ExtractedData, ExtractedDataLabel}
import play.api.data.validation.ValidationError
import play.api.libs.functional.syntax._
import play.api.libs.json._
-import xyz.driver.entities.labels.{Label, LabelCategory}
+import xyz.driver.entities.labels.{Label, LabelCategory, LabelValue}
final case class ApiExtractedDataLabel(id: Option[Long], categoryId: Option[Long], value: Option[String]) {
@@ -14,7 +14,7 @@ final case class ApiExtractedDataLabel(id: Option[Long], categoryId: Option[Long
dataId = dataId,
labelId = id.map(LongId[Label]),
categoryId = categoryId.map(LongId[LabelCategory]),
- value = value.map(FuzzyValue.fromString)
+ value = value.flatMap(LabelValue.fromString)
)
}
@@ -27,8 +27,8 @@ object ApiExtractedDataLabel {
Format(Reads
.of[String]
.filter(ValidationError("unknown value"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
+ case x if LabelValue.fromString(x).isDefined => true
+ case _ => false
}),
Writes.of[String]))
)(ApiExtractedDataLabel.apply, unlift(ApiExtractedDataLabel.unapply))
@@ -36,6 +36,6 @@ object ApiExtractedDataLabel {
def fromDomain(dataLabel: ExtractedDataLabel) = ApiExtractedDataLabel(
id = dataLabel.labelId.map(_.id),
categoryId = dataLabel.categoryId.map(_.id),
- value = dataLabel.value.map(FuzzyValue.valueToString)
+ value = dataLabel.value.map(_.toString)
)
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala
index db430ae..585d4ed 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/ApiPatient.scala
@@ -7,6 +7,8 @@ import xyz.driver.pdsuicommon.domain.{StringId, UuidId}
import xyz.driver.pdsuidomain.entities.{Patient, PatientOrderId}
import play.api.libs.functional.syntax._
import play.api.libs.json.{Format, JsPath}
+import xyz.driver.entities.common.FullName
+import xyz.driver.entities.patient
final case class ApiPatient(id: String,
status: String,
@@ -17,24 +19,35 @@ final case class ApiPatient(id: String,
previousAssignee: Option[String],
lastActiveUser: Option[String],
lastUpdate: ZonedDateTime,
- condition: String,
+ disease: String,
orderId: UUID) {
private def extractStatus(status: String): Patient.Status =
PatientStatus.statusFromString
.applyOrElse(status, (s: String) => throw new NoSuchElementException(s"Unknown status $s"))
+ private def parseName(name: String): FullName[Patient] =
+ name.split(" ") match {
+ case Array() => throw new NoSuchElementException(s"Patient's name cannot be empty")
+ case Array(first) => FullName.fromStrings[Patient](first, "", "")
+ case Array(first, last) => FullName.fromStrings[Patient](first, "", last)
+ case Array(first, middle, last) => FullName.fromStrings[Patient](first, middle, last)
+ case _ => throw new NoSuchElementException(s"Patient's name is ambiguous")
+ }
+
def toDomain = Patient(
id = UuidId(this.id),
status = extractStatus(this.status),
- name = this.name,
+ name = parseName(this.name),
dob = this.dob,
assignee = this.assignee.map(StringId(_)),
previousStatus = this.previousStatus.map(extractStatus),
previousAssignee = this.previousAssignee.map(StringId(_)),
lastActiveUserId = this.lastActiveUser.map(StringId(_)),
isUpdateRequired = false,
- condition = this.condition,
+ disease = patient.CancerType
+ .fromString(this.disease)
+ .getOrElse(throw new IllegalArgumentException(s"Unknown cancer type ${this.disease}")),
orderId = PatientOrderId(this.orderId),
lastUpdate = this.lastUpdate.toLocalDateTime
)
@@ -53,21 +66,21 @@ object ApiPatient {
(JsPath \ "previousAssignee").formatNullable[String] and
(JsPath \ "lastActiveUser").formatNullable[String] and
(JsPath \ "lastUpdate").format[ZonedDateTime] and
- (JsPath \ "condition").format[String] and
+ (JsPath \ "disease").format[String] and
(JsPath \ "orderId").format[UUID]
)(ApiPatient.apply, unlift(ApiPatient.unapply))
def fromDomain(patient: Patient) = ApiPatient(
id = patient.id.toString,
status = PatientStatus.statusToString(patient.status),
- name = patient.name,
+ name = patient.name.toString(),
dob = patient.dob,
assignee = patient.assignee.map(_.id),
previousStatus = patient.previousStatus.map(PatientStatus.statusToString),
previousAssignee = patient.previousAssignee.map(_.id),
lastActiveUser = patient.lastActiveUserId.map(_.id),
lastUpdate = ZonedDateTime.of(patient.lastUpdate, ZoneId.of("Z")),
- condition = patient.condition,
+ disease = patient.disease.toString,
orderId = patient.orderId.id
)
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/eligible/ApiPatientEligibleTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/eligible/ApiPatientEligibleTrial.scala
index 4136715..55c8149 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/eligible/ApiPatientEligibleTrial.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/eligible/ApiPatientEligibleTrial.scala
@@ -5,7 +5,7 @@ import java.util.UUID
import play.api.data.validation.ValidationError
import play.api.libs.functional.syntax._
import play.api.libs.json._
-import xyz.driver.pdsuicommon.domain.FuzzyValue
+import xyz.driver.entities.labels.LabelValue
import xyz.driver.pdsuidomain.services.PatientEligibleTrialService.RichPatientEligibleTrial
final case class ApiPatientEligibleTrial(id: Long,
@@ -30,8 +30,8 @@ object ApiPatientEligibleTrial {
Reads
.of[String]
.filter(ValidationError("unknown eligibility status"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
+ case x if LabelValue.fromString(x).isDefined => true
+ case _ => false
}),
Writes.of[String]
)) and
@@ -45,7 +45,7 @@ object ApiPatientEligibleTrial {
trialTitle = eligibleTrialWithTrial.trial.title,
arms = eligibleTrialWithTrial.arms.map(_.armName),
hypothesisId = eligibleTrialWithTrial.group.hypothesisId.id,
- eligibleTrialWithTrial.group.verifiedEligibilityStatus.map(FuzzyValue.valueToString),
+ eligibleTrialWithTrial.group.verifiedEligibilityStatus.map(_.toString),
eligibleTrialWithTrial.group.isVerified
)
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala
index 91d0a0e..d92872c 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPartialPatientLabel.scala
@@ -6,15 +6,14 @@ import org.davidbild.tristate.contrib.play.ToJsPathOpsFromJsPath
import play.api.data.validation.ValidationError
import play.api.libs.functional.syntax._
import play.api.libs.json._
-import xyz.driver.pdsuicommon.domain.FuzzyValue
+import xyz.driver.entities.labels.LabelValue
final case class ApiPartialPatientLabel(primaryValue: Option[String], verifiedPrimaryValue: Tristate[String]) {
def applyTo(orig: PatientLabel): PatientLabel = {
orig.copy(
- primaryValue = primaryValue.map(FuzzyValue.fromString).orElse(orig.primaryValue),
- verifiedPrimaryValue =
- verifiedPrimaryValue.cata(x => Some(FuzzyValue.fromString(x)), None, orig.verifiedPrimaryValue)
+ primaryValue = primaryValue.flatMap(LabelValue.fromString).orElse(orig.primaryValue),
+ verifiedPrimaryValue = verifiedPrimaryValue.cata(x => LabelValue.fromString(x), None, orig.verifiedPrimaryValue)
)
}
}
@@ -26,8 +25,8 @@ object ApiPartialPatientLabel {
Format(Reads
.of[String]
.filter(ValidationError("unknown primary value"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
+ case x if LabelValue.fromString(x).isDefined => true
+ case _ => false
}),
Writes.of[String])) and
(JsPath \ "verifiedPrimaryValue").formatTristate[String](
@@ -35,8 +34,8 @@ object ApiPartialPatientLabel {
Reads
.of[String]
.filter(ValidationError("unknown verified primary value"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
+ case x if LabelValue.fromString(x).isDefined => true
+ case _ => false
}),
Writes.of[String]
))
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabel.scala
index fc8687b..cc8532d 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabel.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabel.scala
@@ -4,7 +4,7 @@ import xyz.driver.pdsuidomain.entities.PatientLabel
import play.api.data.validation.ValidationError
import play.api.libs.functional.syntax._
import play.api.libs.json._
-import xyz.driver.pdsuicommon.domain.FuzzyValue
+import xyz.driver.entities.labels.LabelValue
final case class ApiPatientLabel(id: Long,
labelId: Long,
@@ -20,25 +20,33 @@ object ApiPatientLabel {
implicit val apiPatientLabelJsonFormat: Format[ApiPatientLabel] = (
(JsPath \ "id").format[Long] and
(JsPath \ "labelId").format[Long] and
- (JsPath \ "primaryValue").formatNullable[String](Format(Reads.of[String].filter(ValidationError("unknown value"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
- }), Writes.of[String])) and
- (JsPath \ "verifiedPrimaryValue").formatNullable[String](Format(Reads.of[String].filter(ValidationError("unknown value"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
- }), Writes.of[String])) and
+ (JsPath \ "primaryValue").formatNullable[String](
+ Format(Reads
+ .of[String]
+ .filter(ValidationError("unknown value"))({
+ case x if LabelValue.fromString(x).isDefined => true
+ case _ => false
+ }),
+ Writes.of[String])) and
+ (JsPath \ "verifiedPrimaryValue").formatNullable[String](
+ Format(Reads
+ .of[String]
+ .filter(ValidationError("unknown value"))({
+ case x if LabelValue.fromString(x).isDefined => true
+ case _ => false
+ }),
+ Writes.of[String])) and
(JsPath \ "score").format[Int] and
(JsPath \ "isImplicitMatch").format[Boolean] and
(JsPath \ "isVisible").format[Boolean] and
(JsPath \ "isVerified").format[Boolean]
- ) (ApiPatientLabel.apply, unlift(ApiPatientLabel.unapply))
+ )(ApiPatientLabel.apply, unlift(ApiPatientLabel.unapply))
def fromDomain(patientLabel: PatientLabel, isVerified: Boolean): ApiPatientLabel = ApiPatientLabel(
id = patientLabel.id.id,
labelId = patientLabel.labelId.id,
- primaryValue = patientLabel.primaryValue.map(FuzzyValue.valueToString),
- verifiedPrimaryValue = patientLabel.verifiedPrimaryValue.map(FuzzyValue.valueToString),
+ primaryValue = patientLabel.primaryValue.map(_.toString),
+ verifiedPrimaryValue = patientLabel.verifiedPrimaryValue.map(_.toString),
score = patientLabel.score,
isImplicitMatch = patientLabel.isImplicitMatch,
isVisible = patientLabel.isVisible,
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabelDefiningCriteria.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabelDefiningCriteria.scala
index ae64c33..16b9cc9 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabelDefiningCriteria.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/label/ApiPatientLabelDefiningCriteria.scala
@@ -3,7 +3,7 @@ package xyz.driver.pdsuidomain.formats.json.patient.label
import play.api.data.validation.ValidationError
import play.api.libs.functional.syntax._
import play.api.libs.json._
-import xyz.driver.pdsuicommon.domain.FuzzyValue
+import xyz.driver.entities.labels.LabelValue
import xyz.driver.pdsuidomain.entities.PatientLabel
final case class ApiPatientLabelDefiningCriteria(labelId: Long, value: Option[String])
@@ -16,14 +16,14 @@ object ApiPatientLabelDefiningCriteria {
Format(Reads
.of[String]
.filter(ValidationError("unknown value"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
+ case x if LabelValue.fromString(x).isDefined => true
+ case _ => false
}),
Writes.of[String]))
)(ApiPatientLabelDefiningCriteria.apply, unlift(ApiPatientLabelDefiningCriteria.unapply))
def fromDomain(x: PatientLabel) = ApiPatientLabelDefiningCriteria(
labelId = x.labelId.id,
- value = x.verifiedPrimaryValue.map(FuzzyValue.valueToString)
+ value = x.verifiedPrimaryValue.map(_.toString)
)
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterion.scala
index 399bc7d..09538b8 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterion.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterion.scala
@@ -6,16 +6,16 @@ import org.davidbild.tristate.contrib.play.ToJsPathOpsFromJsPath
import play.api.data.validation.ValidationError
import play.api.libs.functional.syntax._
import play.api.libs.json.{Format, JsPath, Reads, Writes}
-import xyz.driver.pdsuicommon.domain.FuzzyValue
+import xyz.driver.entities.labels.LabelValue
final case class ApiPartialPatientCriterion(eligibilityStatus: Option[String],
verifiedEligibilityStatus: Tristate[String]) {
def applyTo(orig: PatientCriterion): PatientCriterion = {
orig.copy(
- eligibilityStatus = eligibilityStatus.map(FuzzyValue.fromString).orElse(orig.eligibilityStatus),
+ eligibilityStatus = eligibilityStatus.flatMap(LabelValue.fromString).orElse(orig.eligibilityStatus),
verifiedEligibilityStatus =
- verifiedEligibilityStatus.cata(x => Some(FuzzyValue.fromString(x)), None, orig.verifiedEligibilityStatus)
+ verifiedEligibilityStatus.cata(x => LabelValue.fromString(x), None, orig.verifiedEligibilityStatus)
)
}
}
@@ -28,8 +28,8 @@ object ApiPartialPatientCriterion {
Reads
.of[String]
.filter(ValidationError("unknown eligibility status"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
+ case x if LabelValue.fromString(x).isDefined => true
+ case _ => false
}),
Writes.of[String]
)) and
@@ -38,8 +38,8 @@ object ApiPartialPatientCriterion {
Reads
.of[String]
.filter(ValidationError("unknown verified eligibility status"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
+ case x if LabelValue.fromString(x).isDefined => true
+ case _ => false
}),
Writes.of[String]
))
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterionList.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterionList.scala
index 4b08970..b7616a1 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterionList.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPartialPatientCriterionList.scala
@@ -1,10 +1,11 @@
package xyz.driver.pdsuidomain.formats.json.patient.trial
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
+import xyz.driver.pdsuicommon.domain.LongId
import xyz.driver.pdsuidomain.entities.PatientCriterion
import play.api.data.validation.ValidationError
import play.api.libs.functional.syntax._
import play.api.libs.json.{Format, JsPath, Reads, Writes}
+import xyz.driver.entities.labels.LabelValue
import xyz.driver.pdsuidomain.services.PatientCriterionService.DraftPatientCriterion
final case class ApiPartialPatientCriterionList(id: Long,
@@ -13,7 +14,7 @@ final case class ApiPartialPatientCriterionList(id: Long,
def toDomain: DraftPatientCriterion = DraftPatientCriterion(
id = LongId[PatientCriterion](id),
- eligibilityStatus = eligibilityStatus.map(FuzzyValue.fromString),
+ eligibilityStatus = eligibilityStatus.flatMap(LabelValue.fromString),
isVerified = isVerified
)
}
@@ -26,8 +27,8 @@ object ApiPartialPatientCriterionList {
Reads
.of[String]
.filter(ValidationError("unknown eligibility status"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
+ case x if LabelValue.fromString(x).isDefined => true
+ case _ => false
}),
Writes.of[String]
)) and
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala
index 6eeb40b..b9bf772 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/patient/trial/ApiPatientCriterion.scala
@@ -2,12 +2,12 @@ package xyz.driver.pdsuidomain.formats.json.patient.trial
import java.time.{ZoneId, ZonedDateTime}
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
+import xyz.driver.pdsuicommon.domain.LongId
import xyz.driver.pdsuidomain.entities.{PatientCriterion, PatientCriterionArm}
import play.api.data.validation.ValidationError
import play.api.libs.functional.syntax._
import play.api.libs.json.{Format, JsPath, Reads, Writes}
-import xyz.driver.entities.labels.Label
+import xyz.driver.entities.labels.{Label, LabelValue}
final case class ApiPatientCriterion(id: Long,
labelId: Long,
@@ -39,13 +39,13 @@ object ApiPatientCriterion {
(JsPath \ "criterionIsCompound").format[Boolean] and
(JsPath \ "arms").format[List[String]] and
(JsPath \ "eligibilityStatus").formatNullable[String](Format(Reads.of[String].filter(ValidationError("unknown status"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
+ case x if LabelValue.fromString(x).isDefined => true
+ case _ => false
}), Writes.of[String])) and
(JsPath \ "verifiedEligibilityStatus").formatNullable[String](Format(
Reads.of[String].filter(ValidationError("unknown status"))({
- case x if FuzzyValue.fromString.isDefinedAt(x) => true
- case _ => false
+ case x if LabelValue.fromString(x).isDefined => true
+ case _ => false
}), Writes.of[String])) and
(JsPath \ "isVerified").format[Boolean] and
(JsPath \ "isVisible").format[Boolean] and
@@ -61,13 +61,13 @@ object ApiPatientCriterion {
criterionId = patientCriterion.criterionId.id,
criterionText = patientCriterion.criterionText,
criterionValue = patientCriterion.criterionValue.map { x =>
- FuzzyValue.valueToString(FuzzyValue.fromBoolean(x))
+ LabelValue.fromBoolean(x).toString
},
criterionIsDefining = patientCriterion.criterionIsDefining,
criterionIsCompound = patientCriterion.criterionValue.isEmpty,
arms = arms.map(_.armName),
- eligibilityStatus = patientCriterion.eligibilityStatus.map(FuzzyValue.valueToString),
- verifiedEligibilityStatus = patientCriterion.verifiedEligibilityStatus.map(FuzzyValue.valueToString),
+ eligibilityStatus = patientCriterion.eligibilityStatus.map(_.toString),
+ verifiedEligibilityStatus = patientCriterion.verifiedEligibilityStatus.map(_.toString),
isVerified = patientCriterion.isVerified,
isVisible = patientCriterion.isVisible,
lastUpdate = ZonedDateTime.of(patientCriterion.lastUpdate, ZoneId.of("Z"))
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala
index 2e5943e..1f8c683 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiCreateRecord.scala
@@ -22,8 +22,6 @@ final case class ApiCreateRecord(disease: String, patientId: String, requestId:
caseId = None,
physician = None,
meta = None,
- predictedMeta = None,
- predictedDocuments = None,
lastUpdate = LocalDateTime.now()
)
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala
index e7b58cd..fc0a2e7 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/record/ApiRecord.scala
@@ -101,8 +101,6 @@ final case class ApiRecord(id: Long,
Some(TextJson(JsonSerializer.deserialize[List[MedicalRecord.Meta]](this.meta)))
}
},
- predictedMeta = None,
- predictedDocuments = None,
lastUpdate = this.lastUpdate.toLocalDateTime()
)
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala
new file mode 100644
index 0000000..2a670c4
--- /dev/null
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala
@@ -0,0 +1,39 @@
+package xyz.driver.pdsuidomain.formats.json.sprayformats
+
+import java.time.LocalDateTime
+
+import spray.json.{RootJsonFormat, _}
+import xyz.driver.pdsuicommon.db.Pagination
+import xyz.driver.pdsuidomain.formats.json.sprayformats.common._
+
+final case class ListResponse[+T](items: Seq[T], meta: ListResponse.Meta)
+
+object ListResponse extends DefaultJsonProtocol {
+ private val itemsField = "items"
+ private val metaField = "meta"
+
+ final case class Meta(itemsCount: Int, pageNumber: Int, pageSize: Int, lastUpdate: Option[LocalDateTime])
+
+ object Meta {
+ def apply(itemsCount: Int, pagination: Pagination, lastUpdate: Option[LocalDateTime]): Meta = {
+ Meta(
+ itemsCount,
+ pagination.pageNumber,
+ pagination.pageSize,
+ lastUpdate
+ )
+ }
+ }
+
+ implicit val listResponseMetaFormat: RootJsonFormat[Meta] = jsonFormat4(Meta.apply)
+
+ implicit def listResponseMetaWriter[T: JsonWriter]: RootJsonWriter[ListResponse[T]] =
+ new RootJsonWriter[ListResponse[T]] {
+ override def write(listResponse: ListResponse[T]): JsValue = {
+ JsObject(
+ itemsField -> listResponse.items.map(_.toJson).toJson,
+ metaField -> listResponse.meta.toJson
+ )
+ }
+ }
+}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/common.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/common.scala
index dbd0a43..61e0e7f 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/common.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/common.scala
@@ -3,7 +3,7 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats
import java.time.{LocalDate, LocalDateTime, ZoneId, ZonedDateTime}
import spray.json._
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, StringId, UuidId}
+import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
object common {
@@ -55,14 +55,6 @@ object common {
}
}
- implicit def fuzzyValueFormat: RootJsonFormat[FuzzyValue] = new RootJsonFormat[FuzzyValue] {
- override def write(value: FuzzyValue): JsString = JsString(FuzzyValue.valueToString(value))
- override def read(json: JsValue): FuzzyValue = json match {
- case JsString(value) => FuzzyValue.fromString(value)
- case _ => deserializationError(s"Expected value as FuzzyValue, but got $json")
- }
- }
-
implicit val integerFormat: RootJsonFormat[Integer] = new RootJsonFormat[Integer] {
override def write(obj: Integer): JsNumber = JsNumber(obj.intValue())
override def read(json: JsValue): Integer = json match {
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala
index 7526d9c..a43e92a 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/criterion.scala
@@ -10,7 +10,7 @@ object criterion {
import DefaultJsonProtocol._
import common._
- implicit val criterionLabelWriter = new JsonWriter[CriterionLabel] {
+ implicit val criterionLabelWriter = new RootJsonWriter[CriterionLabel] {
override def write(obj: CriterionLabel) = JsObject(
"labelId" -> obj.labelId.toJson,
"categoryId" -> obj.categoryId.toJson,
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala
index e3f6a9c..69e8b75 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/document.scala
@@ -26,7 +26,7 @@ object document {
"PN" -> RequiredType.PN
)
- implicit val documentMetaFormat: RootJsonFormat[Meta] = jsonFormat3(Meta.apply)
+ implicit val documentMetaFormat: RootJsonFormat[Meta] = jsonFormat2(Meta.apply)
implicit val documentTypeFormat: RootJsonFormat[DocumentType] = new RootJsonFormat[DocumentType] {
override def read(json: JsValue): DocumentType = json match {
@@ -40,7 +40,7 @@ object document {
.fromString(name)
.getOrElse(deserializationError(s"Unknown document type: $name"))
- case _ => deserializationError(s"Expected Json Object as Intervention type, but got $json")
+ case _ => deserializationError(s"Expected Json Object as Document type, but got $json")
}
override def write(obj: DocumentType) =
@@ -73,6 +73,11 @@ object document {
.map(_.convertTo[Option[LongId[ProviderType]]])
.getOrElse(orig.providerTypeId)
+ val institutionName = fields
+ .get("institutionName")
+ .map(_.convertTo[Option[String]])
+ .getOrElse(orig.institutionName)
+
val meta = fields
.get("meta")
.map(_.convertTo[Option[TextJson[Meta]]])
@@ -93,6 +98,7 @@ object document {
typeId = typeId,
providerName = provider,
providerTypeId = providerTypeId,
+ institutionName = institutionName,
meta = meta,
startDate = startDate,
endDate = endDate
@@ -111,6 +117,7 @@ object document {
"provider" -> document.providerName.toJson,
"providerTypeId" -> document.providerTypeId.toJson,
"requiredType" -> document.requiredType.toJson,
+ "institutionName" -> document.institutionName.toJson,
"startDate" -> document.startDate.toJson,
"endDate" -> document.endDate.toJson,
"status" -> document.status.toJson,
@@ -145,6 +152,10 @@ object document {
.get("providerTypeId")
.map(_.convertTo[LongId[ProviderType]])
+ val institutionName = fields
+ .get("institutionName")
+ .map(_.convertTo[String])
+
val meta = fields
.get("meta")
.map(_.convertTo[TextJson[Meta]])
@@ -168,6 +179,7 @@ object document {
providerName = provider,
providerTypeId = providerTypeId,
requiredType = None,
+ institutionName = institutionName,
meta = meta,
previousStatus = None,
assignee = None,
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala
index b836e1c..3c2465f 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/eligibility.scala
@@ -21,7 +21,7 @@ object eligibility {
implicit val clinicalDocumentFormat: RootJsonFormat[ClinicalEvidenceDocument] = jsonFormat7(ClinicalEvidenceDocument)
implicit val evidenceDocumentFormat: RootJsonFormat[EvidenceDocument] =
- GadtJsonFormat.create[EvidenceDocument]("documentType") {
+ GadtJsonFormat.create[EvidenceDocument]("evidenceDocumentType") {
case _: MolecularEvidenceDocument => "Molecular"
case _: ClinicalEvidenceDocument => "Clinical"
} {
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala
index 39d5c59..1c4b6b4 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/export.scala
@@ -2,15 +2,16 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
import xyz.driver.entities.labels.Label
-import xyz.driver.pdsuidomain.entities.{Arm, Criterion}
+import xyz.driver.formats.json.labels._
import xyz.driver.pdsuidomain.entities.export.patient._
import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrialArm, ExportTrialLabelCriterion, ExportTrialWithLabels}
+import xyz.driver.pdsuidomain.entities.{Criterion, EligibilityArm}
object export {
import DefaultJsonProtocol._
import common._
- import record._
import document._
+ import record._
implicit val patientLabelEvidenceDocumentFormat: RootJsonFormat[ExportPatientLabelEvidenceDocument] =
jsonFormat5(ExportPatientLabelEvidenceDocument.apply)
@@ -67,7 +68,7 @@ object export {
longIdFormat[Criterion].read(criterionId),
value,
longIdFormat[Label].read(labelId),
- armIdsVector.map(longIdFormat[Arm].read).toSet,
+ armIdsVector.map(longIdFormat[EligibilityArm].read).toSet,
criterionText,
isCompound,
isDefining
@@ -81,12 +82,5 @@ object export {
}
implicit val trialWithLabelsFormat: RootJsonFormat[ExportTrialWithLabels] =
- jsonFormat(ExportTrialWithLabels.apply,
- "nctId",
- "trialId",
- "disease",
- "lastReviewed",
- "labelVersion",
- "arms",
- "criteria")
+ jsonFormat(ExportTrialWithLabels.apply, "nctId", "trialId", "lastReviewed", "labelVersion", "arms", "criteria")
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala
index d6eadbd..5d5585a 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/extracteddata.scala
@@ -1,10 +1,11 @@
package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
-import xyz.driver.entities.labels.{Label, LabelCategory}
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, TextJson}
+import xyz.driver.entities.labels.{Label, LabelCategory, LabelValue}
+import xyz.driver.pdsuicommon.domain.{LongId, TextJson}
import xyz.driver.pdsuidomain.entities._
import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData
+import xyz.driver.formats.json.labels._
object extracteddata {
import DefaultJsonProtocol._
@@ -44,7 +45,7 @@ object extracteddata {
val value = fields
.get("value")
- .map(_.convertTo[FuzzyValue])
+ .map(_.convertTo[LabelValue])
ExtractedDataLabel(
id = LongId(0),
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patient.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patient.scala
index 724c391..2b0dfe5 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patient.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patient.scala
@@ -3,6 +3,8 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
import xyz.driver.core.json.EnumJsonFormat
import xyz.driver.pdsuidomain.entities._
+import xyz.driver.formats.json.common._
+import xyz.driver.formats.json.patient._
object patient {
import DefaultJsonProtocol._
@@ -26,7 +28,7 @@ object patient {
}
}
- implicit val patientWriter: JsonWriter[Patient] = new JsonWriter[Patient] {
+ implicit val patientWriter: RootJsonWriter[Patient] = new RootJsonWriter[Patient] {
override def write(patient: Patient): JsValue =
JsObject(
"id" -> patient.id.toJson,
@@ -38,7 +40,7 @@ object patient {
"previousAssignee" -> patient.previousAssignee.toJson,
"lastActiveUser" -> patient.lastActiveUserId.toJson,
"lastUpdate" -> patient.lastUpdate.toJson,
- "condition" -> patient.condition.toJson,
+ "disease" -> patient.disease.toJson,
"orderId" -> patient.orderId.toJson
)
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala
index b091746..7e8c220 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientcriterion.scala
@@ -1,10 +1,10 @@
package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
-import xyz.driver.entities.labels.Label
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId}
+import xyz.driver.entities.labels.LabelValue
import xyz.driver.pdsuidomain.entities._
-import xyz.driver.pdsuidomain.services.PatientCriterionService.DraftPatientCriterion
+import xyz.driver.pdsuidomain.services.PatientCriterionService.{DraftPatientCriterion, RichPatientCriterion}
+import xyz.driver.formats.json.labels._
object patientcriterion {
import DefaultJsonProtocol._
@@ -15,13 +15,13 @@ object patientcriterion {
val eligibilityStatus = if (fields.contains("eligibilityStatus")) {
fields
.get("eligibilityStatus")
- .map(_.convertTo[FuzzyValue])
+ .map(_.convertTo[LabelValue])
} else orig.eligibilityStatus
val verifiedEligibilityStatus = if (fields.contains("verifiedEligibilityStatus")) {
fields
.get("verifiedEligibilityStatus")
- .map(_.convertTo[FuzzyValue])
+ .map(_.convertTo[LabelValue])
} else orig.verifiedEligibilityStatus
orig.copy(
@@ -38,30 +38,27 @@ object patientcriterion {
override def read(json: JsValue) = json.convertTo[List[JsValue]].map(_.convertTo[DraftPatientCriterion])
}
- implicit val patientCriterionWriter: JsonWriter[(PatientCriterion, LongId[Label], List[PatientCriterionArm])] =
- new JsonWriter[(PatientCriterion, LongId[Label], List[PatientCriterionArm])] {
- override def write(obj: (PatientCriterion, LongId[Label], List[PatientCriterionArm])): JsValue = {
- val criterion = obj._1
- val labelId = obj._2
- val arms = obj._3
+ implicit val patientCriterionWriter: RootJsonWriter[RichPatientCriterion] =
+ new RootJsonWriter[RichPatientCriterion] {
+ override def write(obj: RichPatientCriterion): JsValue = {
JsObject(
- "id" -> criterion.id.toJson,
- "labelId" -> labelId.toJson,
- "nctId" -> criterion.nctId.toJson,
- "criterionId" -> criterion.criterionId.toJson,
- "criterionText" -> criterion.criterionText.toJson,
- "criterionValue" -> criterion.criterionValue.map {
+ "id" -> obj.patientCriterion.id.toJson,
+ "labelId" -> obj.labelId.toJson,
+ "nctId" -> obj.patientCriterion.nctId.toJson,
+ "criterionId" -> obj.patientCriterion.criterionId.toJson,
+ "criterionText" -> obj.patientCriterion.criterionText.toJson,
+ "criterionValue" -> obj.patientCriterion.criterionValue.map {
case true => "Yes"
case false => "No"
}.toJson,
- "criterionIsDefining" -> criterion.criterionIsDefining.toJson,
- "criterionIsCompound" -> criterion.criterionValue.isEmpty.toJson,
- "arms" -> arms.map(_.armName).toJson,
- "eligibilityStatus" -> criterion.eligibilityStatus.toJson,
- "verifiedEligibilityStatus" -> criterion.verifiedEligibilityStatus.toJson,
- "isVerified" -> criterion.isVerified.toJson,
- "isVisible" -> criterion.isVisible.toJson,
- "lastUpdate" -> criterion.lastUpdate.toJson
+ "criterionIsDefining" -> obj.patientCriterion.criterionIsDefining.toJson,
+ "criterionIsCompound" -> obj.patientCriterion.criterionValue.isEmpty.toJson,
+ "arms" -> obj.armList.map(_.armName).toJson,
+ "eligibilityStatus" -> obj.patientCriterion.eligibilityStatus.toJson,
+ "verifiedEligibilityStatus" -> obj.patientCriterion.verifiedEligibilityStatus.toJson,
+ "isVerified" -> obj.patientCriterion.isVerified.toJson,
+ "isVisible" -> obj.patientCriterion.isVisible.toJson,
+ "lastUpdate" -> obj.patientCriterion.lastUpdate.toJson
)
}
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientdefiningcriteria.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientdefiningcriteria.scala
index b97570a..746c7b4 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientdefiningcriteria.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientdefiningcriteria.scala
@@ -2,12 +2,13 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
import xyz.driver.pdsuidomain.entities.PatientLabel
+import xyz.driver.formats.json.labels._
object patientdefiningcriteria {
import DefaultJsonProtocol._
import common._
- implicit val patientLabelDefiningCriteriaWriter: JsonWriter[PatientLabel] = new JsonWriter[PatientLabel] {
+ implicit val patientLabelDefiningCriteriaWriter: RootJsonWriter[PatientLabel] = new RootJsonWriter[PatientLabel] {
override def write(obj: PatientLabel) =
JsObject(
"id" -> obj.id.toJson,
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienteligibletrial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienteligibletrial.scala
index 894e453..342d3a8 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienteligibletrial.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienteligibletrial.scala
@@ -3,6 +3,7 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
import xyz.driver.pdsuidomain.entities._
import xyz.driver.pdsuidomain.services.PatientEligibleTrialService.RichPatientEligibleTrial
+import xyz.driver.formats.json.labels._
object patienteligibletrial {
import DefaultJsonProtocol._
@@ -21,8 +22,8 @@ object patienteligibletrial {
case _ => deserializationError(s"Expected Json Object as partial PatientTrialArmGroupView, but got $json")
}
- implicit val patientEligibleTrialWriter: JsonWriter[RichPatientEligibleTrial] =
- new JsonWriter[RichPatientEligibleTrial] {
+ implicit val patientEligibleTrialWriter: RootJsonWriter[RichPatientEligibleTrial] =
+ new RootJsonWriter[RichPatientEligibleTrial] {
override def write(obj: RichPatientEligibleTrial) =
JsObject(
"id" -> obj.group.id.toJson,
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthypothesis.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthypothesis.scala
index 4f2783c..b8c0058 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthypothesis.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patienthypothesis.scala
@@ -2,6 +2,7 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
import xyz.driver.pdsuidomain.entities._
+import xyz.driver.pdsuidomain.services.PatientHypothesisService.RichPatientHypothesis
object patienthypothesis {
import DefaultJsonProtocol._
@@ -18,18 +19,29 @@ object patienthypothesis {
case _ => deserializationError(s"Expected Json Object as partial PatientHypothesis, but got $json")
}
- implicit val patientHypothesisWriter: JsonWriter[(PatientHypothesis, Boolean)] =
- new JsonWriter[(PatientHypothesis, Boolean)] {
- override def write(obj: (PatientHypothesis, Boolean)): JsValue = {
- val patientHypothesis = obj._1
- val isRationaleRequired = obj._2
+ implicit val richPatientHypothesisWriter: RootJsonWriter[RichPatientHypothesis] =
+ new RootJsonWriter[RichPatientHypothesis] {
+ override def write(obj: RichPatientHypothesis): JsValue = {
JsObject(
- "id" -> patientHypothesis.id.toJson,
- "patientId" -> patientHypothesis.patientId.toJson,
- "hypothesisId" -> patientHypothesis.hypothesisId.toJson,
- "matchedTrials" -> patientHypothesis.matchedTrials.toJson,
- "rationale" -> patientHypothesis.rationale.toJson,
- "isRationaleRequired" -> isRationaleRequired.toJson
+ "id" -> obj.patientHypothesis.id.toJson,
+ "patientId" -> obj.patientHypothesis.patientId.toJson,
+ "hypothesisId" -> obj.patientHypothesis.hypothesisId.toJson,
+ "matchedTrials" -> obj.patientHypothesis.matchedTrials.toJson,
+ "rationale" -> obj.patientHypothesis.rationale.toJson,
+ "isRationaleRequired" -> obj.isRequired.toJson
+ )
+ }
+ }
+
+ implicit val patientHypothesisWriter: RootJsonWriter[PatientHypothesis] =
+ new RootJsonWriter[PatientHypothesis] {
+ override def write(obj: PatientHypothesis): JsValue = {
+ JsObject(
+ "id" -> obj.id.toJson,
+ "patientId" -> obj.patientId.toJson,
+ "hypothesisId" -> obj.hypothesisId.toJson,
+ "matchedTrials" -> obj.matchedTrials.toJson,
+ "rationale" -> obj.rationale.toJson
)
}
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientissue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientissue.scala
index 7d35bd1..d325a53 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientissue.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientissue.scala
@@ -40,7 +40,7 @@ object patientissue {
}
- implicit val patientIssueWriter = new JsonWriter[PatientIssue] {
+ implicit val patientIssueWriter = new RootJsonWriter[PatientIssue] {
override def write(obj: PatientIssue) = JsObject(
"id" -> obj.id.toJson,
"text" -> obj.text.toJson,
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientlabel.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientlabel.scala
index 3b52833..57dca1e 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientlabel.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/patientlabel.scala
@@ -1,8 +1,12 @@
package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
-import xyz.driver.pdsuicommon.domain.FuzzyValue
+import xyz.driver.entities.labels.LabelValue
import xyz.driver.pdsuidomain.entities._
+import xyz.driver.pdsuidomain.services.PatientLabelService.RichPatientLabel
+import xyz.driver.formats.json.labels._
+import xyz.driver.pdsuidomain.formats.json.sprayformats.record._
+import xyz.driver.pdsuidomain.formats.json.sprayformats.document._
object patientlabel {
import DefaultJsonProtocol._
@@ -12,12 +16,12 @@ object patientlabel {
case JsObject(fields) =>
val primaryValue = fields
.get("primaryValue")
- .map(_.convertTo[Option[FuzzyValue]])
+ .map(_.convertTo[Option[LabelValue]])
.getOrElse(orig.primaryValue)
val verifiedPrimaryValue = fields
.get("verifiedPrimaryValue")
- .map(_.convertTo[Option[FuzzyValue]])
+ .map(_.convertTo[Option[LabelValue]])
.getOrElse(orig.verifiedPrimaryValue)
orig.copy(
@@ -28,25 +32,23 @@ object patientlabel {
case _ => deserializationError(s"Expected Json Object as PatientLabel, but got $json")
}
- implicit val patientLabelWriter: JsonWriter[(PatientLabel, Boolean)] = new JsonWriter[(PatientLabel, Boolean)] {
- override def write(obj: (PatientLabel, Boolean)): JsValue = {
- val patientLabel = obj._1
- val isVerified = obj._2
+ implicit val richPatientLabelWriter: RootJsonWriter[RichPatientLabel] = new RootJsonWriter[RichPatientLabel] {
+ override def write(obj: RichPatientLabel): JsValue = {
JsObject(
- "id" -> patientLabel.id.toJson,
- "labelId" -> patientLabel.labelId.toJson,
- "primaryValue" -> patientLabel.primaryValue.toJson,
- "verifiedPrimaryValue" -> patientLabel.verifiedPrimaryValue.toJson,
- "score" -> patientLabel.score.toJson,
- "isImplicitMatch" -> patientLabel.isImplicitMatch.toJson,
- "isVisible" -> patientLabel.isVisible.toJson,
- "isVerified" -> isVerified.toJson
+ "id" -> obj.patientLabel.id.toJson,
+ "labelId" -> obj.patientLabel.labelId.toJson,
+ "primaryValue" -> obj.patientLabel.primaryValue.toJson,
+ "verifiedPrimaryValue" -> obj.patientLabel.verifiedPrimaryValue.toJson,
+ "score" -> obj.patientLabel.score.toJson,
+ "isImplicitMatch" -> obj.patientLabel.isImplicitMatch.toJson,
+ "isVisible" -> obj.patientLabel.isVisible.toJson,
+ "isVerified" -> obj.isVerified.toJson
)
}
}
- implicit val patientLabelEvidenceWriter: JsonWriter[PatientLabelEvidenceView] =
- new JsonWriter[PatientLabelEvidenceView] {
+ implicit val patientLabelEvidenceWriter: RootJsonWriter[PatientLabelEvidenceView] =
+ new RootJsonWriter[PatientLabelEvidenceView] {
override def write(evidence: PatientLabelEvidenceView): JsValue =
JsObject(
"id" -> evidence.id.toJson,
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/record.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/record.scala
index 8eef44a..65687c1 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/record.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/record.scala
@@ -67,7 +67,6 @@ object record {
override def write(obj: Duplicate) =
JsObject(
"type" -> "duplicate".toJson,
- "predicted" -> obj.predicted.toJson,
"startPage" -> obj.startPage.toJson,
"endPage" -> obj.endPage.toJson,
"startOriginalPage" -> obj.startOriginalPage.toJson,
@@ -76,10 +75,6 @@ object record {
override def read(json: JsValue): Duplicate = json match {
case JsObject(fields) =>
- val predicted = fields
- .get("predicted")
- .map(_.convertTo[Boolean])
-
val startPage = fields
.get("startPage")
.map(_.convertTo[Double])
@@ -101,7 +96,6 @@ object record {
.map(_.convertTo[Double])
Duplicate(
- predicted = predicted,
startPage = startPage,
endPage = endPage,
startOriginalPage = startOriginalPage,
@@ -114,27 +108,16 @@ object record {
implicit val reorderMetaFormat: RootJsonFormat[Reorder] = new RootJsonFormat[Reorder] {
override def write(obj: Reorder) =
- JsObject(
- "type" -> "reorder".toJson,
- "predicted" -> obj.predicted.toJson,
- "items" -> obj.items.toJson
- )
+ JsObject("type" -> "reorder".toJson, "items" -> obj.items.toJson)
override def read(json: JsValue): Reorder = json match {
case JsObject(fields) =>
- val predicted = fields
- .get("predicted")
- .map(_.convertTo[Boolean])
-
val items = fields
.get("items")
.map(_.convertTo[Seq[Int]])
.getOrElse(deserializationError(s"Reorder meta json object does not contain `items` field: $json"))
- Reorder(
- predicted = predicted,
- items = items
- )
+ Reorder(items)
case _ => deserializationError(s"Expected JsObject as Reorder meta of medical record, but got $json")
}
@@ -142,27 +125,16 @@ object record {
implicit val rotateMetaFormat: RootJsonFormat[Rotation] = new RootJsonFormat[Rotation] {
override def write(obj: Rotation) =
- JsObject(
- "type" -> "rotation".toJson,
- "predicted" -> obj.predicted.toJson,
- "items" -> obj.items.toJson
- )
+ JsObject("type" -> "rotation".toJson, "items" -> obj.items.toJson)
override def read(json: JsValue): Rotation = json match {
case JsObject(fields) =>
- val predicted = fields
- .get("predicted")
- .map(_.convertTo[Boolean])
-
val items = fields
.get("items")
.map(_.convertTo[Map[String, Int]])
.getOrElse(deserializationError(s"Rotation meta json object does not contain `items` field: $json"))
- Rotation(
- predicted = predicted,
- items = items
- )
+ Rotation(items = items)
case _ => deserializationError(s"Expected JsObject as Rotation meta of medical record, but got $json")
}
@@ -233,8 +205,6 @@ object record {
caseId = None,
physician = None,
meta = None,
- predictedMeta = None,
- predictedDocuments = None,
lastUpdate = LocalDateTime.now()
)
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala
index a778000..b25ed1d 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trial.scala
@@ -9,8 +9,8 @@ import xyz.driver.pdsuidomain.entities._
object trial {
import DefaultJsonProtocol._
- import common._
import Trial._
+ import common._
implicit val trialStatusFormat = new EnumJsonFormat[Status](
"New" -> Status.New,
@@ -24,13 +24,7 @@ object trial {
"Archived" -> Status.Archived
)
- implicit val conditionFormat = new EnumJsonFormat[Condition](
- "Breast" -> Condition.Breast,
- "Lung" -> Condition.Lung,
- "Prostate" -> Condition.Prostate
- )
-
- implicit val trialWriter: JsonWriter[Trial] = new JsonWriter[Trial] {
+ implicit val trialWriter: RootJsonWriter[Trial] = new RootJsonWriter[Trial] {
override def write(obj: Trial) =
JsObject(
"id" -> obj.id.toJson,
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialissue.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialissue.scala
index 572f44d..d1ca191 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialissue.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/trialissue.scala
@@ -44,7 +44,7 @@ object trialissue {
}
- implicit val trialIssueWriter = new JsonWriter[TrialIssue] {
+ implicit val trialIssueWriter = new RootJsonWriter[TrialIssue] {
override def write(obj: TrialIssue) = JsObject(
"id" -> obj.id.toJson,
"text" -> obj.text.toJson,
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala
index fbf506b..133a2c8 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/formats/json/trial/ApiTrial.scala
@@ -2,11 +2,11 @@ package xyz.driver.pdsuidomain.formats.json.trial
import java.time.{ZoneId, ZonedDateTime}
import java.util.UUID
-import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
-import xyz.driver.pdsuidomain.entities.Trial
import play.api.libs.functional.syntax._
import play.api.libs.json._
+import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
+import xyz.driver.pdsuidomain.entities.Trial
final case class ApiTrial(id: String,
externalId: UUID,
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/EligibilityArmService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/EligibilityArmService.scala
index b34b34e..1e0f65e 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/EligibilityArmService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/EligibilityArmService.scala
@@ -5,7 +5,7 @@ import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.domain.LongId
import xyz.driver.pdsuicommon.error.DomainError
import xyz.driver.pdsuicommon.logging._
-import xyz.driver.pdsuidomain.entities.EligibilityArm
+import xyz.driver.pdsuidomain.entities.{EligibilityArm, EligibilityArmWithDiseases, SlotArm}
import scala.concurrent.Future
@@ -19,10 +19,14 @@ object EligibilityArmService {
def userMessage: String = "EligibilityArm not found"
}
+ trait SlotArmNotFoundError {
+ def userMessage: String = "SlotArm not found"
+ }
+
sealed trait GetByIdReply
object GetByIdReply {
- final case class Entity(x: EligibilityArm) extends GetByIdReply
+ final case class Entity(x: EligibilityArmWithDiseases) extends GetByIdReply
type Error = GetByIdReply with DomainError
@@ -39,7 +43,7 @@ object EligibilityArmService {
object GetListReply {
type Error = GetListReply with DomainError
- final case class EntityList(xs: Seq[EligibilityArm], totalFound: Int) extends GetListReply
+ final case class EntityList(xs: Seq[EligibilityArmWithDiseases], totalFound: Int) extends GetListReply
case object AuthorizationError
extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
@@ -48,7 +52,7 @@ object EligibilityArmService {
sealed trait UpdateReply
object UpdateReply {
- final case class Updated(updated: EligibilityArm) extends UpdateReply
+ final case class Updated(updated: EligibilityArmWithDiseases) extends UpdateReply
type Error = UpdateReply with DomainError
@@ -59,7 +63,7 @@ object EligibilityArmService {
final case class CommonError(userMessage: String) extends UpdateReply with DomainError
- final case class AlreadyExistsError(x: EligibilityArm) extends UpdateReply with DomainError {
+ final case class AlreadyExistsError(x: EligibilityArmWithDiseases) extends UpdateReply with DomainError {
val userMessage = s"The arm with such name of trial already exists."
}
@@ -71,16 +75,18 @@ object EligibilityArmService {
sealed trait CreateReply
object CreateReply {
- final case class Created(x: EligibilityArm) extends CreateReply
+ final case class Created(x: EligibilityArmWithDiseases) extends CreateReply
type Error = CreateReply with DomainError
case object AuthorizationError
extends CreateReply with DefaultAccessDeniedError with DomainError.AuthorizationError
+ case object NotFoundError extends CreateReply with SlotArmNotFoundError with DomainError.NotFoundError
+
final case class CommonError(userMessage: String) extends CreateReply with DomainError
- final case class AlreadyExistsError(x: EligibilityArm) extends CreateReply with DomainError {
+ final case class AlreadyExistsError(x: EligibilityArmWithDiseases) extends CreateReply with DomainError {
val userMessage = s"The arm with this name of trial already exists."
}
@@ -114,13 +120,19 @@ trait EligibilityArmService {
pagination: Option[Pagination] = None)(
implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
- def getById(armId: LongId[EligibilityArm])(
+ def getByEligibilityId(armId: LongId[EligibilityArm])(
implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
- def create(draftEligibilityArm: EligibilityArm)(
+ def getBySlotId(armId: LongId[SlotArm],
+ filter: SearchFilterExpr = SearchFilterExpr.Empty,
+ sorting: Option[Sorting] = None,
+ pagination: Option[Pagination] = None)(
+ implicit requestContext: AuthenticatedRequestContext): Future[GetListReply]
+
+ def create(slotArmId: LongId[SlotArm], draftEligibilityArm: EligibilityArmWithDiseases)(
implicit requestContext: AuthenticatedRequestContext): Future[CreateReply]
- def update(origEligibilityArm: EligibilityArm, draftEligibilityArm: EligibilityArm)(
+ def update(origEligibilityArm: EligibilityArmWithDiseases, draftEligibilityArm: EligibilityArmWithDiseases)(
implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply]
def delete(id: LongId[EligibilityArm])(implicit requestContext: AuthenticatedRequestContext): Future[DeleteReply]
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/EligibilityVerificationService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/EligibilityVerificationService.scala
index 7395400..c09dd9a 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/EligibilityVerificationService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/EligibilityVerificationService.scala
@@ -4,6 +4,7 @@ import xyz.driver.core.Id
import xyz.driver.core.rest.AuthorizedServiceRequestContext
import xyz.driver.entities.patient.{CancerType, Patient}
import xyz.driver.entities.users.AuthUserInfo
+import xyz.driver.pdsuicommon.domain.LongId
import xyz.driver.pdsuidomain.entities.eligibility.{MatchedPatient, MismatchRankedLabels}
import xyz.driver.pdsuidomain.entities.Arm
@@ -14,6 +15,6 @@ trait EligibilityVerificationService {
def getMatchedPatients()(implicit ctx: AuthorizedServiceRequestContext[AuthUserInfo]): ListT[Future, MatchedPatient]
- def getMismatchRankedLabels(patientId: Id[Patient], cancerType: CancerType, excludedArms: Seq[Id[Arm]])(
+ def getMismatchRankedLabels(patientId: Id[Patient], cancerType: CancerType, excludedArms: Seq[LongId[Arm]])(
implicit ctx: AuthorizedServiceRequestContext[AuthUserInfo]): Future[MismatchRankedLabels]
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala
index 6d85f85..4d0e188 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientCriterionService.scala
@@ -2,7 +2,7 @@ package xyz.driver.pdsuidomain.services
import java.time.LocalDateTime
-import xyz.driver.entities.labels.Label
+import xyz.driver.entities.labels.{Label, LabelValue}
import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.domain._
@@ -15,7 +15,7 @@ import scala.concurrent.Future
object PatientCriterionService {
final case class DraftPatientCriterion(id: LongId[PatientCriterion],
- eligibilityStatus: Option[FuzzyValue],
+ eligibilityStatus: Option[LabelValue],
isVerified: Option[Boolean]) {
def applyTo(orig: PatientCriterion) = {
orig.copy(
@@ -37,13 +37,21 @@ object PatientCriterionService {
def userMessage: String = "Access denied"
}
+ final case class RichPatientCriterion(patientCriterion: PatientCriterion,
+ labelId: LongId[Label],
+ armList: List[PatientCriterionArm])
+
+ object RichPatientCriterion {
+ implicit def toPhiString(x: RichPatientCriterion): PhiString = {
+ phi"RichPatientCriterion(patientCriterion=${x.patientCriterion}, labelId=${x.labelId}, arms=${x.armList})"
+ }
+ }
+
sealed trait GetListReply
object GetListReply {
type Error = GetListReply with DomainError
- final case class EntityList(xs: Seq[(PatientCriterion, LongId[Label], List[PatientCriterionArm])],
- totalFound: Int,
- lastUpdate: Option[LocalDateTime])
+ final case class EntityList(xs: Seq[RichPatientCriterion], totalFound: Int, lastUpdate: Option[LocalDateTime])
extends GetListReply
case object AuthorizationError
@@ -60,8 +68,7 @@ object PatientCriterionService {
object GetByIdReply {
type Error = GetByIdReply with DomainError
- final case class Entity(x: PatientCriterion, labelId: LongId[Label], armList: List[PatientCriterionArm])
- extends GetByIdReply
+ final case class Entity(x: RichPatientCriterion) extends GetByIdReply
case object AuthorizationError
extends GetByIdReply with DomainError.AuthorizationError with DefaultAccessDeniedError
@@ -74,8 +81,8 @@ object PatientCriterionService {
final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
implicit def toPhiString(reply: GetByIdReply): PhiString = reply match {
- case x: DomainError => phi"GetByIdReply.Error($x)"
- case Entity(x, labelId, armList) => phi"GetByIdReply.Entity(entity=$x, labelId=$labelId, armList=$armList)"
+ case x: DomainError => phi"GetByIdReply.Error($x)"
+ case Entity(x) => phi"GetByIdReply.Entity($x)"
}
}
@@ -83,8 +90,7 @@ object PatientCriterionService {
object UpdateReply {
type Error = UpdateReply with DomainError
- final case class Updated(x: PatientCriterion, labelId: LongId[Label], armList: List[PatientCriterionArm])
- extends UpdateReply
+ final case class Updated(x: RichPatientCriterion) extends UpdateReply
case object UpdatedList extends UpdateReply
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala
index abb3f8a..d9013c6 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientEligibleTrialService.scala
@@ -1,12 +1,12 @@
package xyz.driver.pdsuidomain.services
-import xyz.driver.entities.labels.Label
import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
import xyz.driver.pdsuicommon.db.{Pagination, SearchFilterExpr, Sorting}
import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
import xyz.driver.pdsuicommon.error.DomainError
import xyz.driver.pdsuicommon.logging._
import xyz.driver.pdsuidomain.entities.{Trial, _}
+import xyz.driver.pdsuidomain.services.PatientCriterionService.RichPatientCriterion
import scala.concurrent.Future
@@ -71,8 +71,7 @@ object PatientEligibleTrialService {
sealed trait GetCriterionListOfGroupReply
object GetCriterionListOfGroupReply {
- final case class EntityList(xs: Seq[(PatientCriterion, LongId[Label], List[PatientCriterionArm])], totalFound: Int)
- extends GetCriterionListOfGroupReply
+ final case class EntityList(xs: Seq[RichPatientCriterion], totalFound: Int) extends GetCriterionListOfGroupReply
type Error = GetCriterionListOfGroupReply with DomainError
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientHypothesisService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientHypothesisService.scala
index f782cab..07734ed 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientHypothesisService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientHypothesisService.scala
@@ -23,9 +23,17 @@ object PatientHypothesisService {
def userMessage: String = "Access denied"
}
+ final case class RichPatientHypothesis(patientHypothesis: PatientHypothesis, isRequired: Boolean)
+
+ object RichPatientHypothesis {
+ implicit def toPhiString(x: RichPatientHypothesis): PhiString = {
+ phi"RichPatientHypothesis(patientHypothesis=${x.patientHypothesis}, isRequired=${x.isRequired})"
+ }
+ }
+
sealed trait GetListReply
object GetListReply {
- final case class EntityList(xs: Seq[(PatientHypothesis, Boolean)], totalFound: Int) extends GetListReply
+ final case class EntityList(xs: Seq[RichPatientHypothesis], totalFound: Int) extends GetListReply
case object AuthorizationError
extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
@@ -38,7 +46,7 @@ object PatientHypothesisService {
sealed trait GetByIdReply
object GetByIdReply {
- final case class Entity(x: PatientHypothesis, isRequired: Boolean) extends GetByIdReply
+ final case class Entity(x: RichPatientHypothesis) extends GetByIdReply
type Error = GetByIdReply with DomainError
@@ -53,8 +61,8 @@ object PatientHypothesisService {
final case class CommonError(userMessage: String) extends GetByIdReply with DomainError
implicit def toPhiString(reply: GetByIdReply): PhiString = reply match {
- case x: DomainError => phi"GetByIdReply.Error($x)"
- case Entity(x, isRequired) => phi"GetByIdReply.Entity($x, $isRequired)"
+ case x: DomainError => phi"GetByIdReply.Error($x)"
+ case Entity(x) => phi"GetByIdReply.Entity($x)"
}
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala
index 2a4d7fc..cede890 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/PatientLabelService.scala
@@ -24,9 +24,17 @@ object PatientLabelService {
def userMessage: String = "Access denied"
}
+ final case class RichPatientLabel(patientLabel: PatientLabel, isVerified: Boolean)
+
+ object RichPatientLabel {
+ implicit def toPhiString(x: RichPatientLabel): PhiString = {
+ phi"RichPatientLabel(patientLabel=${x.patientLabel}, isVerified=${x.isVerified})"
+ }
+ }
+
sealed trait GetListReply
object GetListReply {
- final case class EntityList(xs: Seq[(PatientLabel, Boolean)], totalFound: Int) extends GetListReply
+ final case class EntityList(xs: Seq[RichPatientLabel], totalFound: Int) extends GetListReply
case object AuthorizationError
extends GetListReply with DomainError.AuthorizationError with DefaultAccessDeniedError
@@ -52,7 +60,7 @@ object PatientLabelService {
sealed trait GetByLabelIdReply
object GetByLabelIdReply {
- final case class Entity(x: PatientLabel, isVerified: Boolean) extends GetByLabelIdReply
+ final case class Entity(x: RichPatientLabel) extends GetByLabelIdReply
type Error = GetByLabelIdReply with DomainError
@@ -68,7 +76,7 @@ object PatientLabelService {
implicit def toPhiString(reply: GetByLabelIdReply): PhiString = reply match {
case x: DomainError => phi"GetByIdReply.Error($x)"
- case Entity(x, y) => phi"GetByIdReply.Entity($x, $y)"
+ case Entity(x) => phi"GetByIdReply.Entity($x)"
}
}
@@ -76,7 +84,7 @@ object PatientLabelService {
object UpdateReply {
type Error = UpdateReply with DomainError
- final case class Updated(updated: PatientLabel, isVerified: Boolean) extends UpdateReply
+ final case class Updated(updated: RichPatientLabel) extends UpdateReply
case object NotFoundError extends UpdateReply with DefaultNotFoundError with DomainError.NotFoundError
@@ -89,8 +97,8 @@ object PatientLabelService {
final case class CommonError(userMessage: String) extends UpdateReply with DomainError
implicit def toPhiString(reply: UpdateReply): PhiString = reply match {
- case Updated(x, y) => phi"Updated($x, $y)"
- case x: Error => DomainError.toPhiString(x)
+ case Updated(x) => phi"Updated($x)"
+ case x: Error => DomainError.toPhiString(x)
}
}
}
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala
index 5bd99a8..92233e4 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/TrialService.scala
@@ -5,6 +5,7 @@ import java.time.LocalDateTime
import akka.NotUsed
import akka.stream.scaladsl.Source
import akka.util.ByteString
+import xyz.driver.entities.patient.CancerType
import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.domain.StringId
@@ -68,6 +69,20 @@ object TrialService {
extends GetTrialWithLabelsReply with DomainError.AuthorizationError with DefaultAccessDeniedError
}
+ sealed trait GetTrialsWithLabelsReply
+ object GetTrialsWithLabelsReply {
+ type Error = GetTrialsWithLabelsReply with DomainError
+
+ final case class EntityList(xs: Seq[ExportTrialWithLabels]) extends GetTrialsWithLabelsReply
+
+ case object NotFoundError extends GetTrialsWithLabelsReply with DomainError.NotFoundError {
+ def userMessage: String = "Trials for disease are not found"
+ }
+
+ case object AuthorizationError
+ extends GetTrialsWithLabelsReply with DomainError.AuthorizationError with DefaultAccessDeniedError
+ }
+
sealed trait UpdateReply
object UpdateReply {
type Error = UpdateReply with DomainError
@@ -94,9 +109,12 @@ trait TrialService {
def getById(id: StringId[Trial])(implicit requestContext: AuthenticatedRequestContext): Future[GetByIdReply]
- def getTrialWithLabels(trialId: StringId[Trial], condition: String)(
+ def getTrialWithLabels(trialId: StringId[Trial], cancerType: CancerType)(
implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply]
+ def getTrialsWithLabels(cancerType: CancerType)(
+ implicit requestContext: AuthenticatedRequestContext): Future[GetTrialsWithLabelsReply]
+
def getPdfSource(trialId: StringId[Trial])(
implicit requestContext: AuthenticatedRequestContext): Future[Source[ByteString, NotUsed]]
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeEligibilityVerificationService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeEligibilityVerificationService.scala
index 1e1a3ea..c9b5443 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeEligibilityVerificationService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeEligibilityVerificationService.scala
@@ -5,6 +5,7 @@ import xyz.driver.core.{Id, generators}
import xyz.driver.entities.patient
import xyz.driver.entities.patient.Patient
import xyz.driver.entities.users.AuthUserInfo
+import xyz.driver.pdsuicommon.domain.LongId
import xyz.driver.pdsuidomain.entities.eligibility.MismatchRankedLabels
import xyz.driver.pdsuidomain.entities.{Arm, eligibility}
import xyz.driver.pdsuidomain.services.EligibilityVerificationService
@@ -21,7 +22,7 @@ class FakeEligibilityVerificationService extends EligibilityVerificationService
override def getMismatchRankedLabels(patientId: Id[Patient],
cancerType: patient.CancerType,
- excludedArms: Seq[Id[Arm]])(
+ excludedArms: Seq[LongId[Arm]])(
implicit ctx: AuthorizedServiceRequestContext[AuthUserInfo]): Future[eligibility.MismatchRankedLabels] =
Future.successful(
MismatchRankedLabels(
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala
index 9253f88..0431d95 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/fake/FakeTrialService.scala
@@ -7,11 +7,12 @@ import akka.stream.scaladsl.Source
import akka.util.ByteString
import xyz.driver.core.generators
import xyz.driver.entities.labels.Label
+import xyz.driver.entities.patient.CancerType
import xyz.driver.pdsuicommon.auth.AuthenticatedRequestContext
import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
-import xyz.driver.pdsuidomain.entities.{Arm, Criterion, Trial}
import xyz.driver.pdsuidomain.entities.export.trial.{ExportTrialArm, ExportTrialLabelCriterion, ExportTrialWithLabels}
+import xyz.driver.pdsuidomain.entities.{Criterion, EligibilityArm, Trial}
import xyz.driver.pdsuidomain.services.TrialService
import scala.concurrent.Future
@@ -56,30 +57,36 @@ class FakeTrialService extends TrialService {
implicit requestContext: AuthenticatedRequestContext): Future[GetListReply] =
Future.successful(GetListReply.EntityList(Seq(trial), 1, None))
- override def getTrialWithLabels(trialId: StringId[Trial], condition: String)(
- implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply] = {
- Future.successful(
- GetTrialWithLabelsReply.Entity(ExportTrialWithLabels(
- StringId[Trial]("NCT" + generators.nextInt(999999).toString),
- UuidId[Trial](generators.nextUuid()),
- generators.oneOf("adenocarcinoma", "breast", "prostate"),
- LocalDateTime.now(),
- labelVersion = 1L,
- generators.listOf(new ExportTrialArm(
- LongId[Arm](generators.nextInt(999999).toLong),
+ override def getTrialWithLabels(trialId: StringId[Trial], cancerType: CancerType)(
+ implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply] =
+ Future.successful(GetTrialWithLabelsReply.Entity(nextExportTrialWithLabels()))
+
+ override def getTrialsWithLabels(cancerType: CancerType)(
+ implicit requestContext: AuthenticatedRequestContext): Future[GetTrialsWithLabelsReply] =
+ Future.successful(GetTrialsWithLabelsReply.EntityList(generators.seqOf(nextExportTrialWithLabels())))
+
+ private def nextExportTrialWithLabels() =
+ ExportTrialWithLabels(
+ StringId[Trial]("NCT" + generators.nextInt(999999).toString),
+ UuidId[Trial](generators.nextUuid()),
+ LocalDateTime.now(),
+ labelVersion = 1L,
+ generators.listOf(
+ new ExportTrialArm(
+ LongId[EligibilityArm](generators.nextInt(999999).toLong),
generators.nextName().value
)),
- generators.listOf(new ExportTrialLabelCriterion(
+ generators.listOf(
+ new ExportTrialLabelCriterion(
LongId[Criterion](generators.nextInt(999999).toLong),
generators.nextOption(generators.nextBoolean()),
LongId[Label](generators.nextInt(999999).toLong),
- generators.setOf(LongId[Arm](generators.nextInt(999999).toLong)),
+ generators.setOf(LongId[EligibilityArm](generators.nextInt(999999).toLong)),
generators.nextName().value,
generators.nextBoolean(),
generators.nextBoolean()
))
- )))
- }
+ )
def update(origTrial: Trial, draftTrial: Trial)(
implicit requestContext: AuthenticatedRequestContext): Future[UpdateReply] =
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala
index f6879d0..8869106 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestEligibilityVerificationService.scala
@@ -8,6 +8,7 @@ import xyz.driver.core.rest.{AuthorizedServiceRequestContext, RestService, Servi
import xyz.driver.entities.patient
import xyz.driver.entities.patient.Patient
import xyz.driver.entities.users.AuthUserInfo
+import xyz.driver.pdsuicommon.domain.LongId
import xyz.driver.pdsuidomain.entities.eligibility.{MatchedPatient, MismatchRankedLabels}
import xyz.driver.pdsuidomain.entities.{Arm, eligibility}
import xyz.driver.pdsuidomain.services.EligibilityVerificationService
@@ -33,11 +34,11 @@ class RestEligibilityVerificationService(transport: ServiceTransport, baseUri: U
override def getMismatchRankedLabels(patientId: Id[Patient],
cancerType: patient.CancerType,
- excludedArms: Seq[Id[Arm]])(
+ excludedArms: Seq[LongId[Arm]])(
implicit ctx: AuthorizedServiceRequestContext[AuthUserInfo]): Future[eligibility.MismatchRankedLabels] = {
val query =
- Seq("disease" -> cancerType.toString.toUpperCase, "ineligible_arms" -> excludedArms.map(_.value).mkString(","))
+ Seq("disease" -> cancerType.toString.toUpperCase, "ineligible_arms" -> excludedArms.map(_.id).mkString(","))
val request = get(baseUri, s"/v1/patients/$patientId/labels", query)
optionalResponse[MismatchRankedLabels](transport.sendRequest(ctx)(request))
diff --git a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
index 7e33919..ea719e1 100644
--- a/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
+++ b/src/main/scala/xyz/driver/pdsuidomain/services/rest/RestTrialService.scala
@@ -16,7 +16,9 @@ import xyz.driver.pdsuidomain.entities.export.trial.ExportTrialWithLabels
import xyz.driver.pdsuidomain.formats.json.ListResponse
import xyz.driver.pdsuidomain.formats.json.trial.ApiTrial
import xyz.driver.pdsuidomain.services.TrialService
+import spray.json.DefaultJsonProtocol._
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
+import xyz.driver.entities.patient.CancerType
import xyz.driver.pdsuidomain.formats.json.sprayformats.export._
class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit protected val materializer: Materializer,
@@ -36,9 +38,9 @@ class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit prote
}
}
- def getTrialWithLabels(trialId: StringId[Trial], disease: String)(
+ def getTrialWithLabels(trialId: StringId[Trial], cancerType: CancerType)(
implicit requestContext: AuthenticatedRequestContext): Future[GetTrialWithLabelsReply] = {
- val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/trial/$disease/$trialId"))
+ val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/trial/$cancerType/$trialId"))
for {
response <- transport.sendRequestGetResponse(requestContext)(request)
reply <- apiResponse[ExportTrialWithLabels](response)
@@ -47,6 +49,17 @@ class RestTrialService(transport: ServiceTransport, baseUri: Uri)(implicit prote
}
}
+ def getTrialsWithLabels(cancerType: CancerType)(
+ implicit requestContext: AuthenticatedRequestContext): Future[GetTrialsWithLabelsReply] = {
+ val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/export/trial/$cancerType"))
+ for {
+ response <- transport.sendRequestGetResponse(requestContext)(request)
+ reply <- apiResponse[Seq[ExportTrialWithLabels]](response)
+ } yield {
+ GetTrialsWithLabelsReply.EntityList(reply)
+ }
+ }
+
def getPdfSource(trialId: StringId[Trial])(
implicit requestContext: AuthenticatedRequestContext): Future[Source[ByteString, NotUsed]] = {
val request = HttpRequest(HttpMethods.GET, endpointUri(baseUri, s"/v1/trial/$trialId/source"))
diff --git a/src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala
index f851680..7d8a418 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/DocumentSuite.scala
@@ -78,10 +78,11 @@ class DocumentSuite extends BaseSuite {
providerName = Some("etst"),
providerTypeId = Some(LongId(123)),
requiredType = None,
+ institutionName = Some("institution name"),
startDate = Some(lastUpdate.toLocalDate.minusDays(2)),
endDate = None,
lastUpdate = lastUpdate,
- meta = Some(TextJson(Document.Meta(None, 1.1, 2.2)))
+ meta = Some(TextJson(Document.Meta(1.1, 2.2)))
)
}
}
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/DocumentFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/DocumentFormatSuite.scala
index 481e92f..e6dd4a1 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/DocumentFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/DocumentFormatSuite.scala
@@ -24,6 +24,7 @@ class DocumentFormatSuite extends FlatSpec with Matchers {
typeId = Some(LongId(10)),
providerName = Some("provider 21"),
providerTypeId = Some(LongId(21)),
+ institutionName = Some("institution name"),
requiredType = Some(Document.RequiredType.OPN),
meta = None,
startDate = None,
@@ -33,7 +34,7 @@ class DocumentFormatSuite extends FlatSpec with Matchers {
writtenJson should be(
"""{"id":1,"recordId":101,"physician":"physician","typeId":10,"provider":"provider 21","providerTypeId":21,
- "requiredType":"OPN","startDate":null,"endDate":null,"status":"New","assignee":null,"previousStatus":null,
+ "requiredType":"OPN","institutionName":"institution name","startDate":null,"endDate":null,"status":"New","assignee":null,"previousStatus":null,
"previousAssignee":null,"lastActiveUser":null,"lastUpdate":"2017-08-10T18:00Z","meta":null}""".parseJson)
val createDocumentJson =
@@ -41,34 +42,31 @@ class DocumentFormatSuite extends FlatSpec with Matchers {
val expectedCreatedDocument = orig.copy(
id = LongId(0),
lastUpdate = LocalDateTime.MIN,
- requiredType = None
+ requiredType = None,
+ institutionName = None
)
val parsedCreatedDocument = documentFormat.read(createDocumentJson)
parsedCreatedDocument should be(expectedCreatedDocument)
val updateDocumentJson =
- """{"startDate":"2017-08-10","endDate":"2018-08-10","meta":{"predicted":true,"startPage":1.0,"endPage":2.0}}""".parseJson
+ """{"startDate":"2017-08-10","endDate":"2018-08-10","meta":{"startPage":1.0,"endPage":2.0}}""".parseJson
val expectedUpdatedDocument = orig.copy(
startDate = Some(LocalDate.parse("2017-08-10")),
endDate = Some(LocalDate.parse("2018-08-10")),
- meta = Some(TextJson(Document.Meta(predicted = Some(true), startPage = 1.0, endPage = 2.0)))
+ meta = Some(TextJson(Document.Meta(startPage = 1.0, endPage = 2.0)))
)
val parsedUpdatedDocument = applyUpdateToDocument(updateDocumentJson, orig)
parsedUpdatedDocument should be(expectedUpdatedDocument)
}
"Json format for Document.Meta" should "read and write correct JSON" in {
- val meta = Document.Meta(predicted = None, startPage = 1.0, endPage = 2.0)
+ val meta = Document.Meta(startPage = 1.0, endPage = 2.0)
val writtenJson = documentMetaFormat.write(meta)
writtenJson should be("""{"startPage":1.0,"endPage":2.0}""".parseJson)
- val metaJsonWithoutPredicted = """{"startPage":1.0,"endPage":2.0}""".parseJson
- val parsedMetaWithoutPredicted = documentMetaFormat.read(metaJsonWithoutPredicted)
- parsedMetaWithoutPredicted should be(meta)
-
- val metaJsonWithPredicted = """{"predicted":true,"startPage":1.0,"endPage":2.0}""".parseJson
- val parsedMetaWithPredicted = documentMetaFormat.read(metaJsonWithPredicted)
- parsedMetaWithPredicted should be(meta.copy(predicted = Some(true)))
+ val metaJson = """{"startPage":1.0,"endPage":2.0}""".parseJson
+ val parsedMeta = documentMetaFormat.read(metaJson)
+ parsedMeta should be(meta)
}
}
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ExportFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ExportFormatSuite.scala
index a451905..3eaf93f 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ExportFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ExportFormatSuite.scala
@@ -3,9 +3,10 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats
import java.time.{LocalDate, LocalDateTime}
import java.util.UUID
-import spray.json._
import org.scalatest.{FlatSpec, Matchers}
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, StringId, UuidId}
+import spray.json._
+import xyz.driver.entities.labels.LabelValue
+import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
import xyz.driver.pdsuidomain.entities.{DocumentType, ProviderType, RecordRequestId}
class ExportFormatSuite extends FlatSpec with Matchers {
@@ -27,13 +28,13 @@ class ExportFormatSuite extends FlatSpec with Matchers {
evidences = List(
ExportPatientLabelEvidence(
id = LongId(11),
- value = FuzzyValue.Yes,
+ value = LabelValue.Yes,
evidenceText = "evidence text 11",
document = document
),
ExportPatientLabelEvidence(
id = LongId(12),
- value = FuzzyValue.No,
+ value = LabelValue.No,
evidenceText = "evidence text 12",
document = document
)
@@ -44,13 +45,13 @@ class ExportFormatSuite extends FlatSpec with Matchers {
evidences = List(
ExportPatientLabelEvidence(
id = LongId(12),
- value = FuzzyValue.Yes,
+ value = LabelValue.Yes,
evidenceText = "evidence text 12",
document = document
),
ExportPatientLabelEvidence(
id = LongId(13),
- value = FuzzyValue.Yes,
+ value = LabelValue.Yes,
evidenceText = "evidence text 13",
document = document
)
@@ -106,7 +107,6 @@ class ExportFormatSuite extends FlatSpec with Matchers {
val trialWithLabels = ExportTrialWithLabels(
nctId = StringId("NCT000001"),
trialId = UuidId("40892a07-c638-49d2-9795-1edfefbbcc7c"),
- condition = "Breast",
lastReviewed = LocalDateTime.parse("2017-08-10T18:00:00"),
labelVersion = 1L,
arms = arms,
@@ -115,7 +115,7 @@ class ExportFormatSuite extends FlatSpec with Matchers {
val writtenJson = trialWithLabelsFormat.write(trialWithLabels)
writtenJson should be(
- """{"nctId":"NCT000001","trialId":"40892a07-c638-49d2-9795-1edfefbbcc7c","disease":"Breast","lastReviewed":"2017-08-10T18:00Z",
+ """{"nctId":"NCT000001","trialId":"40892a07-c638-49d2-9795-1edfefbbcc7c","lastReviewed":"2017-08-10T18:00Z",
"labelVersion":1,"arms":[{"armId":1,"armName":"arm 1"},{"armId":2,"armName":"arm 2"}],"criteria":[
{"value":"Yes","labelId":21,"criterionId":10,"criterionText":"criteria 10 text","armIds":[1,2],"isCompound":false,"isDefining":false},
{"value":"Unknown","labelId":21,"criterionId":11,"criterionText":"criteria 11 text","armIds":[2],"isCompound":true,"isDefining":false}]}""".parseJson)
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ExtractedDataFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ExtractedDataFormatSuite.scala
index c3df80a..1feca6a 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ExtractedDataFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ExtractedDataFormatSuite.scala
@@ -2,7 +2,8 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats
import spray.json._
import org.scalatest.{FlatSpec, Matchers}
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, TextJson}
+import xyz.driver.entities.labels.LabelValue
+import xyz.driver.pdsuicommon.domain.{LongId, TextJson}
import xyz.driver.pdsuidomain.entities.ExtractedData.Meta
import xyz.driver.pdsuidomain.entities.{ExtractedData, ExtractedDataLabel}
import xyz.driver.pdsuidomain.services.ExtractedDataService.RichExtractedData
@@ -24,14 +25,14 @@ class ExtractedDataFormatSuite extends FlatSpec with Matchers {
dataId = extractedData.id,
labelId = None,
categoryId = None,
- value = Some(FuzzyValue.Yes)
+ value = Some(LabelValue.Yes)
),
ExtractedDataLabel(
id = LongId(2),
dataId = extractedData.id,
labelId = Some(LongId(12)),
categoryId = Some(LongId(1)),
- value = Some(FuzzyValue.No)
+ value = Some(LabelValue.No)
)
)
val origRichExtractedData = RichExtractedData(
@@ -64,14 +65,14 @@ class ExtractedDataFormatSuite extends FlatSpec with Matchers {
dataId = extractedData.id,
labelId = Some(LongId(20)),
categoryId = Some(LongId(1)),
- value = Some(FuzzyValue.Yes)
+ value = Some(LabelValue.Yes)
),
ExtractedDataLabel(
id = LongId(0),
dataId = extractedData.id,
labelId = Some(LongId(12)),
categoryId = Some(LongId(1)),
- value = Some(FuzzyValue.No)
+ value = Some(LabelValue.No)
)
)
val expectedUpdatedExtractedData = origRichExtractedData.copy(
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala
new file mode 100644
index 0000000..17d4cfb
--- /dev/null
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponseSuite.scala
@@ -0,0 +1,104 @@
+package xyz.driver.pdsuidomain.formats.json.sprayformats
+
+import java.time.LocalDateTime
+import java.util.UUID
+
+import spray.json._
+import org.scalatest.{FlatSpec, Matchers}
+import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
+import xyz.driver.pdsuidomain.entities.MedicalRecord.Status
+import xyz.driver.pdsuidomain.entities._
+import xyz.driver.pdsuidomain.formats.json.sprayformats.record.recordFormat
+
+class ListResponseSuite extends FlatSpec with Matchers {
+
+ private val lastUpdate = LocalDateTime.parse("2017-08-10T18:00:00")
+ private val lastUpdateToLocal = "2017-08-10T18:00Z"
+
+ private def metaJsonObjectAsString(meta: ListResponse.Meta) = {
+ import meta._
+ val lastUpdate = meta.lastUpdate
+ .map(_ => s""","lastUpdate":"$lastUpdateToLocal"""")
+ .getOrElse("")
+
+ s"""{"itemsCount":$itemsCount,"pageNumber":$pageNumber,"pageSize":$pageSize$lastUpdate}"""
+ }
+
+ "Json format for ListResponse.Meta" should "read and write correct JSON" in {
+ val meta1 =
+ ListResponse.Meta(
+ itemsCount = 5,
+ pageNumber = 6,
+ pageSize = 7,
+ lastUpdate = None
+ )
+
+ val writtenJson1 =
+ ListResponse.listResponseMetaFormat.write(meta1)
+
+ writtenJson1 should be(metaJsonObjectAsString(meta1).parseJson)
+
+ val parsedItem1: ListResponse.Meta =
+ ListResponse.listResponseMetaFormat.read(writtenJson1)
+
+ meta1 shouldBe parsedItem1
+
+ val meta2 =
+ ListResponse.Meta(
+ itemsCount = 1,
+ pageNumber = 4,
+ pageSize = 3,
+ lastUpdate = Some(lastUpdate)
+ )
+
+ val writtenJson2 =
+ ListResponse.listResponseMetaFormat.write(meta2)
+
+ writtenJson2 should be(metaJsonObjectAsString(meta2).parseJson)
+
+ val parsedItem2: ListResponse.Meta =
+ ListResponse.listResponseMetaFormat.read(writtenJson2)
+
+ meta2 shouldBe parsedItem2
+ }
+
+ "Json format for ListResponse" should "write correct JSON" in {
+
+ val orig = MedicalRecord(
+ id = LongId(1),
+ status = Status.New,
+ assignee = None,
+ previousStatus = None,
+ previousAssignee = None,
+ lastActiveUserId = None,
+ lastUpdate = LocalDateTime.parse("2017-08-10T18:00:00"),
+ physician = Some("physician"),
+ meta = None,
+ disease = "Breast",
+ requestId = RecordRequestId(UUID.fromString("7b54a75d-4197-4b27-9045-b9b6cb131be9")),
+ caseId = None,
+ patientId = UuidId("748b5884-3528-4cb9-904b-7a8151d6e343")
+ )
+
+ val recordJsonAsString =
+ """{"id":1,"status":"New","assignee":null,"previousStatus":null,"previousAssignee":null,"lastActiveUser":null,
+ "lastUpdate":"2017-08-10T18:00Z","meta":[],"patientId":"748b5884-3528-4cb9-904b-7a8151d6e343","caseId":null,
+ "requestId":"7b54a75d-4197-4b27-9045-b9b6cb131be9","disease":"Breast","physician":"physician"}"""
+
+ val meta =
+ ListResponse.Meta(
+ itemsCount = 5,
+ pageNumber = 6,
+ pageSize = 7,
+ lastUpdate = None
+ )
+
+ val listResponse = ListResponse(Seq(orig), meta)
+
+ val writtenJson = ListResponse.listResponseMetaWriter.write(listResponse)
+ val expectedJson = s"""{"items":[$recordJsonAsString],"meta":${metaJsonObjectAsString(meta)}}"""
+
+ writtenJson should be(expectedJson.parseJson)
+ }
+
+}
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/MedicalRecordFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/MedicalRecordFormatSuite.scala
index feedf2f..d9fb232 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/MedicalRecordFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/MedicalRecordFormatSuite.scala
@@ -23,8 +23,6 @@ class MedicalRecordFormatSuite extends FlatSpec with Matchers {
lastUpdate = LocalDateTime.parse("2017-08-10T18:00:00"),
physician = Some("physician"),
meta = None,
- predictedMeta = None,
- predictedDocuments = None,
disease = "Breast",
requestId = RecordRequestId(UUID.fromString("7b54a75d-4197-4b27-9045-b9b6cb131be9")),
caseId = None,
@@ -52,28 +50,23 @@ class MedicalRecordFormatSuite extends FlatSpec with Matchers {
caseId = None,
physician = None,
meta = None,
- predictedMeta = None,
- predictedDocuments = None,
lastUpdate = LocalDateTime.now()
)
val parsedCreatedRecord = recordFormat.read(createRecordJson).copy(lastUpdate = expectedCreatedRecord.lastUpdate)
parsedCreatedRecord should be(expectedCreatedRecord)
val updateRecordJson =
- """{"meta":[{"type":"duplicate","predicted":true,"startPage":1.0,"endPage":2.0,"startOriginalPage":1.0},
+ """{"meta":[{"type":"duplicate","startPage":1.0,"endPage":2.0,"startOriginalPage":1.0},
{"type":"reorder","items":[1,2]},
{"type":"rotation","items":{"item1":1,"item2":2}}]}""".parseJson
val expectedUpdatedRecord = orig.copy(
meta = Some(
- TextJson(List(
- Meta.Duplicate(predicted = Some(true),
- startPage = 1.0,
- endPage = 2.0,
- startOriginalPage = 1.0,
- endOriginalPage = None),
- Meta.Reorder(predicted = None, items = Seq(1, 2)),
- Meta.Rotation(predicted = None, items = Map("item1" -> 1, "item2" -> 2))
- )))
+ TextJson(
+ List(
+ Meta.Duplicate(startPage = 1.0, endPage = 2.0, startOriginalPage = 1.0, endOriginalPage = None),
+ Meta.Reorder(Seq(1, 2)),
+ Meta.Rotation(Map("item1" -> 1, "item2" -> 2))
+ )))
)
val parsedUpdatedRecord = applyUpdateToMedicalRecord(updateRecordJson, orig)
parsedUpdatedRecord should be(expectedUpdatedRecord)
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientCriterionFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientCriterionFormatSuite.scala
index 43f9b48..b254013 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientCriterionFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientCriterionFormatSuite.scala
@@ -4,9 +4,10 @@ import java.time.LocalDateTime
import spray.json._
import org.scalatest.{FlatSpec, Matchers}
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, StringId}
+import xyz.driver.entities.labels.LabelValue
+import xyz.driver.pdsuicommon.domain.{LongId, StringId}
import xyz.driver.pdsuidomain.entities.{PatientCriterion, PatientCriterionArm}
-import xyz.driver.pdsuidomain.services.PatientCriterionService.DraftPatientCriterion
+import xyz.driver.pdsuidomain.services.PatientCriterionService.{DraftPatientCriterion, RichPatientCriterion}
class PatientCriterionFormatSuite extends FlatSpec with Matchers {
import patientcriterion._
@@ -21,7 +22,7 @@ class PatientCriterionFormatSuite extends FlatSpec with Matchers {
criterionText = "criterion text",
criterionValue = Some(true),
criterionIsDefining = false,
- eligibilityStatus = Some(FuzzyValue.Yes),
+ eligibilityStatus = Some(LabelValue.Yes),
verifiedEligibilityStatus = None,
isVisible = true,
isVerified = true,
@@ -31,7 +32,8 @@ class PatientCriterionFormatSuite extends FlatSpec with Matchers {
PatientCriterionArm(patientCriterionId = LongId(1), armId = LongId(31), armName = "arm 31"),
PatientCriterionArm(patientCriterionId = LongId(1), armId = LongId(32), armName = "arm 32")
)
- val writtenJson = patientCriterionWriter.write((orig, LongId(21), arms))
+ val richPatientCriterion = RichPatientCriterion(orig, LongId(21), arms)
+ val writtenJson = patientCriterionWriter.write(richPatientCriterion)
writtenJson should be(
"""{"id":1,"labelId":21,"nctId":"NCT00001","criterionId":101,"criterionText":"criterion text","criterionValue":"Yes",
@@ -39,14 +41,14 @@ class PatientCriterionFormatSuite extends FlatSpec with Matchers {
"isVisible":true,"isVerified":true,"lastUpdate":"2017-08-10T18:00Z","arms":["arm 31","arm 32"]}""".parseJson)
val updatePatientCriterionJson = """{"verifiedEligibilityStatus":"No"}""".parseJson
- val expectedUpdatedPatientCriterion = orig.copy(verifiedEligibilityStatus = Some(FuzzyValue.No))
+ val expectedUpdatedPatientCriterion = orig.copy(verifiedEligibilityStatus = Some(LabelValue.No))
val parsedUpdatePatientCriterion = applyUpdateToPatientCriterion(updatePatientCriterionJson, orig)
parsedUpdatePatientCriterion should be(expectedUpdatedPatientCriterion)
val updateBulkPatientCriterionJson =
"""[{"id":1,"eligibilityStatus":"No"},{"id":2,"isVerified":false}]""".parseJson
val expectedDraftPatientCriterionList = List(
- DraftPatientCriterion(id = LongId(1), eligibilityStatus = Some(FuzzyValue.No), isVerified = None),
+ DraftPatientCriterion(id = LongId(1), eligibilityStatus = Some(LabelValue.No), isVerified = None),
DraftPatientCriterion(id = LongId(2), eligibilityStatus = None, isVerified = Some(false))
)
val parsedDraftPatientCriterionList = draftPatientCriterionListReader.read(updateBulkPatientCriterionJson)
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientEligibleTrialFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientEligibleTrialFormatSuite.scala
index 1d28b2e..b8f6f8e 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientEligibleTrialFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientEligibleTrialFormatSuite.scala
@@ -2,9 +2,10 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats
import java.time.LocalDateTime
-import spray.json._
import org.scalatest.{FlatSpec, Matchers}
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, StringId, UuidId}
+import spray.json._
+import xyz.driver.entities.labels.LabelValue
+import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
import xyz.driver.pdsuidomain.entities.{PatientCriterionArm, PatientTrialArmGroupView, Trial}
import xyz.driver.pdsuidomain.services.PatientEligibleTrialService.RichPatientEligibleTrial
@@ -37,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(FuzzyValue.Yes),
- verifiedEligibilityStatus = Some(FuzzyValue.Yes),
+ eligibilityStatus = Some(LabelValue.Yes),
+ verifiedEligibilityStatus = Some(LabelValue.Yes),
isVerified = false
)
val arms = List(
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientFormatSuite.scala
index b1b6b2a..128cad1 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientFormatSuite.scala
@@ -4,6 +4,8 @@ import java.time.{LocalDate, LocalDateTime}
import spray.json._
import org.scalatest.{FlatSpec, Matchers}
+import xyz.driver.entities.common.FullName
+import xyz.driver.entities.patient.CancerType
import xyz.driver.pdsuicommon.domain.UuidId
import xyz.driver.pdsuidomain.entities.{Patient, PatientOrderId}
@@ -14,23 +16,24 @@ class PatientFormatSuite extends FlatSpec with Matchers {
val orig = Patient(
id = UuidId("748b5884-3528-4cb9-904b-7a8151d6e343"),
status = Patient.Status.New,
- name = "John Doe",
+ name = FullName.fromStrings("John", "", "Doe"),
dob = LocalDate.parse("1980-06-30"),
assignee = None,
previousStatus = None,
previousAssignee = None,
lastActiveUserId = None,
isUpdateRequired = false,
- condition = "breast",
+ disease = CancerType.Breast,
orderId = PatientOrderId("7b54a75d-4197-4b27-9045-b9b6cb131be9"),
lastUpdate = LocalDateTime.parse("2017-08-10T18:00:00")
)
val writtenJson = patientWriter.write(orig)
writtenJson should be(
- """{"id":"748b5884-3528-4cb9-904b-7a8151d6e343","dob":"1980-06-30","name":"John Doe","status":"New","assignee":null,
+ """{"id":"748b5884-3528-4cb9-904b-7a8151d6e343","dob":"1980-06-30",
+ "name":{"firstName":"John","middleName":"","lastName":"Doe"},"status":"New","assignee":null,
"previousStatus":null,"previousAssignee":null,"lastActiveUser":null,"lastUpdate":"2017-08-10T18:00Z",
- "orderId":"7b54a75d-4197-4b27-9045-b9b6cb131be9","condition":"breast"}""".parseJson)
+ "orderId":"7b54a75d-4197-4b27-9045-b9b6cb131be9","disease":"Breast"}""".parseJson)
}
}
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientHypothesisFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientHypothesisFormatSuite.scala
index 0e628a8..71cbbad 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientHypothesisFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientHypothesisFormatSuite.scala
@@ -4,11 +4,12 @@ import spray.json._
import org.scalatest.{FlatSpec, Matchers}
import xyz.driver.pdsuicommon.domain.UuidId
import xyz.driver.pdsuidomain.entities.PatientHypothesis
+import xyz.driver.pdsuidomain.services.PatientHypothesisService.RichPatientHypothesis
class PatientHypothesisFormatSuite extends FlatSpec with Matchers {
import patienthypothesis._
- "Json format for PatientHypothesis" should "read and write correct JSON" in {
+ "Json format for RichPatientHypothesis" should "read and write correct JSON" in {
val orig = PatientHypothesis(
id = UuidId("815d9715-1089-4775-b120-3afb983b9a97"),
patientId = UuidId("748b5884-3528-4cb9-904b-7a8151d6e343"),
@@ -16,7 +17,7 @@ class PatientHypothesisFormatSuite extends FlatSpec with Matchers {
rationale = None,
matchedTrials = 1
)
- val writtenJson = patientHypothesisWriter.write((orig, true))
+ val writtenJson = richPatientHypothesisWriter.write(RichPatientHypothesis(orig, isRequired = true))
writtenJson should be(
"""{"id":"815d9715-1089-4775-b120-3afb983b9a97","patientId":"748b5884-3528-4cb9-904b-7a8151d6e343",
@@ -28,4 +29,19 @@ class PatientHypothesisFormatSuite extends FlatSpec with Matchers {
parsedUpdatePatientHypothesis should be(expectedUpdatedPatientHypothesis)
}
+ "Json format for patientHypothesis" should "read and write correct JSON" in {
+ val orig = PatientHypothesis(
+ id = UuidId("815d9715-1089-4775-b120-3afb983b9a97"),
+ patientId = UuidId("748b5884-3528-4cb9-904b-7a8151d6e343"),
+ hypothesisId = UuidId("e76e2fc4-a29c-44fb-a81b-8856d06bb1d4"),
+ rationale = None,
+ matchedTrials = 1
+ )
+ val writtenJson = patientHypothesisWriter.write(orig)
+
+ writtenJson should be(
+ """{"id":"815d9715-1089-4775-b120-3afb983b9a97","patientId":"748b5884-3528-4cb9-904b-7a8151d6e343",
+ "hypothesisId":"e76e2fc4-a29c-44fb-a81b-8856d06bb1d4","rationale":null,"matchedTrials":1}""".parseJson)
+ }
+
}
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientLabelFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientLabelFormatSuite.scala
index 67d678c..2122777 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientLabelFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/PatientLabelFormatSuite.scala
@@ -4,31 +4,33 @@ import java.time.LocalDate
import spray.json._
import org.scalatest.{FlatSpec, Matchers}
-import xyz.driver.pdsuicommon.domain.{FuzzyValue, LongId, UuidId}
-import xyz.driver.pdsuidomain.entities.{PatientLabel, PatientLabelEvidenceView}
+import xyz.driver.entities.labels.LabelValue
+import xyz.driver.pdsuicommon.domain.{LongId, UuidId}
+import xyz.driver.pdsuidomain.entities._
+import xyz.driver.pdsuidomain.services.PatientLabelService.RichPatientLabel
class PatientLabelFormatSuite extends FlatSpec with Matchers {
- "Json format for PatientLabel" should "read and write correct JSON" in {
+ "Json format for RichPatientLabel" should "read and write correct JSON" in {
import patientlabel._
val orig = PatientLabel(
id = LongId(1),
patientId = UuidId("748b5884-3528-4cb9-904b-7a8151d6e343"),
labelId = LongId(20),
- primaryValue = Some(FuzzyValue.Yes),
+ primaryValue = Some(LabelValue.Yes),
verifiedPrimaryValue = None,
isVisible = true,
score = 1,
isImplicitMatch = false
)
- val writtenJson = patientLabelWriter.write((orig, true))
+ val writtenJson = richPatientLabelWriter.write(RichPatientLabel(orig, isVerified = true))
writtenJson should be(
"""{"id":1,"labelId":20,"primaryValue":"Yes","verifiedPrimaryValue":null,"isVisible":true,"isVerified":true,
"score":1,"isImplicitMatch":false}""".parseJson)
val updatePatientLabelJson = """{"verifiedPrimaryValue":"No"}""".parseJson
- val expectedUpdatedPatientLabel = orig.copy(verifiedPrimaryValue = Some(FuzzyValue.No))
+ val expectedUpdatedPatientLabel = orig.copy(verifiedPrimaryValue = Some(LabelValue.No))
val parsedUpdatePatientLabel = applyUpdateToPatientLabel(updatePatientLabelJson, orig)
parsedUpdatePatientLabel should be(expectedUpdatedPatientLabel)
}
@@ -37,14 +39,14 @@ class PatientLabelFormatSuite extends FlatSpec with Matchers {
import patientlabel._
val orig = PatientLabelEvidenceView(
id = LongId(1),
- value = FuzzyValue.Maybe,
+ value = LabelValue.Maybe,
evidenceText = "evidence text",
documentId = Some(LongId(21)),
evidenceId = Some(LongId(10)),
reportId = None,
- documentType = "document type",
+ documentType = DocumentType.LaboratoryReport,
date = Some(LocalDate.parse("2017-08-10")),
- providerType = "provider type",
+ providerType = ProviderType.EmergencyMedicine,
patientId = UuidId("748b5884-3528-4cb9-904b-7a8151d6e343"),
labelId = LongId(20),
isImplicitMatch = false
@@ -53,7 +55,8 @@ class PatientLabelFormatSuite extends FlatSpec with Matchers {
writtenJson should be(
"""{"id":1,"value":"Maybe","evidenceText":"evidence text","documentId":21,"evidenceId":10,"reportId":null,
- "documentType":"document type","date":"2017-08-10","providerType":"provider type"}""".parseJson)
+ "documentType":{"id":3,"name":"Laboratory Report"},"date":"2017-08-10",
+ "providerType":{"id":26,"name":"Emergency Medicine"}}""".parseJson)
}
"Json format for PatientLabelDefiningCriteria" should "read and write correct JSON" in {
@@ -62,8 +65,8 @@ class PatientLabelFormatSuite extends FlatSpec with Matchers {
id = LongId(1),
patientId = UuidId("748b5884-3528-4cb9-904b-7a8151d6e343"),
labelId = LongId(20),
- primaryValue = Some(FuzzyValue.Yes),
- verifiedPrimaryValue = Some(FuzzyValue.Yes),
+ primaryValue = Some(LabelValue.Yes),
+ verifiedPrimaryValue = Some(LabelValue.Yes),
isVisible = true,
score = 1,
isImplicitMatch = false
diff --git a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/TrialFormatSuite.scala b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/TrialFormatSuite.scala
index a3da52f..c9dc85f 100644
--- a/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/TrialFormatSuite.scala
+++ b/src/test/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/TrialFormatSuite.scala
@@ -2,8 +2,8 @@ package xyz.driver.pdsuidomain.formats.json.sprayformats
import java.time.LocalDateTime
-import spray.json._
import org.scalatest.{FlatSpec, Matchers}
+import spray.json._
import xyz.driver.pdsuicommon.domain.{LongId, StringId, UuidId}
import xyz.driver.pdsuidomain.entities.Trial