1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
package xyz.driver.pdsuidomain.entities
import java.nio.file.Path
import java.time.LocalDateTime
import xyz.driver.pdsuicommon.domain.{LongId, StringId, User, UuidId}
import xyz.driver.pdsuicommon.logging._
import xyz.driver.pdsuicommon.utils.Utils
import xyz.driver.pdsuidomain.entities.Trial.{Condition, Status}
final case class StudyDesign(id: LongId[StudyDesign], name: String)
object StudyDesign {
implicit def toPhiString(x: StudyDesign): PhiString = {
import x._
phi"StudyDesign(id=$id, category=${Unsafe(name)})"
}
}
object Trial {
sealed trait Status {
def oneOf(xs: Status*): Boolean = xs.contains(this)
def oneOf(xs: Set[Status]): Boolean = xs.contains(this)
}
object Status {
case object New extends Status
case object ReviewSummary extends Status
case object Summarized extends Status
case object PendingUpdate extends Status
case object Update extends Status
case object ReviewCriteria extends Status
case object Done extends Status
case object Flagged extends Status
case object Archived extends Status
val All = Set[Status](
New,
ReviewSummary,
Summarized,
PendingUpdate,
Update,
ReviewCriteria,
Done,
Flagged,
Archived
)
val AllPrevious = Set[Status](New, ReviewSummary, Summarized, ReviewCriteria)
implicit def toPhiString(x: Status): PhiString = Unsafe(Utils.getClassSimpleName(x.getClass))
}
case class PdfSource(path: Path) extends AnyVal
implicit def toPhiString(x: Trial): PhiString = {
import x._
phi"Trial(id=$id, externalId=$externalId, status=$status, previousStatus=$previousStatus, " +
phi"lastActiveUserId=$lastActiveUserId, assignee=$assignee, previousAssignee=$previousAssignee, " +
phi"isSummaryReviewed=$isSummaryReviewed, isCriteriaReviewed=$isCriteriaReviewed)"
}
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
val All = Set(Breast, Lung, Prostate)
}
}
final case class Trial(id: StringId[Trial],
externalId: UuidId[Trial],
status: Status,
assignee: Option[StringId[User]],
previousStatus: Option[Status],
previousAssignee: Option[StringId[User]],
lastActiveUserId: Option[StringId[User]],
lastUpdate: LocalDateTime,
condition: Condition,
phase: String,
hypothesisId: Option[UuidId[Hypothesis]],
studyDesignId: Option[LongId[StudyDesign]],
originalStudyDesign: Option[String],
isPartner: Boolean,
overview: Option[String],
overviewTemplate: String,
isUpdated: Boolean,
title: String,
originalTitle: String,
isSummaryReviewed: Boolean,
isCriteriaReviewed: Boolean,
eligibilityCriteriaChecksum: String,
briefSummaryChecksum: String,
detailedDescriptionChecksum: String,
armDescriptionChecksum: String) {
import Trial.Status._
if (previousStatus.nonEmpty) {
assert(AllPrevious.contains(previousStatus.get), s"Previous status has invalid value: ${previousStatus.get}")
}
}
|