Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
2c9804e
CNAM-432: Refactoring in drugs and followup test classes, not used m…
Anfor Jan 8, 2020
b53a4d6
CNAM-432: Add comments and refactor unused methods
Anfor Jan 21, 2020
4a85233
Merge pull request #231 from X-DataInitiative/CNAM-432-Documentation-…
Anfor Jan 21, 2020
97c85ae
CNAM-436: Remove fromRow methods
Anfor Jan 23, 2020
ec9e375
Merge pull request #232 from X-DataInitiative/CNAM-436-Refactoring-Fr…
Anfor Jan 28, 2020
2c2080a
CNAM-438: DrugPrescription Event Transformer.
ysebiat Feb 4, 2020
cd41c72
Merge pull request #233 from X-DataInitiative/CNAM-438-Prescription-E…
Feb 4, 2020
7b6c96d
CNAM384: trackloss to transformer
dsun0720 Feb 4, 2020
fc79d52
Merge pull request #235 from X-DataInitiative/CNAM-384-Trackloss-to-t…
dsun0720 Feb 4, 2020
8546621
CNAM-435: Documentation added for extractors
Anfor Feb 6, 2020
bedaa47
Merge pull request #234 from X-DataInitiative/CNAM-435-Create-documen…
Feb 6, 2020
04d0a5c
Added an end Date to IrImb diagnosis.
strayMat Feb 14, 2020
a1b8a10
Merge pull request #238 from X-DataInitiative/DREES-105-ImbDiagnosis
strayMat Feb 18, 2020
196693f
CNAM-439: Created markdown for Events objects
Anfor Feb 13, 2020
e0f7f24
Merge pull request #237 from X-DataInitiative/CNAM-439-Create-markdow…
Anfor Feb 19, 2020
38bb81a
DREES-106: Adding new Ngap event and extractors
Feb 14, 2020
efab0b0
DREES-106: Modifications in the extractor logics in PMSI for NGAP and…
Feb 14, 2020
f734a4a
DREES-106: Dealing with SSR and MCO CE extractors logic
Feb 14, 2020
3c06cc5
DREES-106: Adding practitioner speciality extraction
Feb 17, 2020
9f95326
DREES-106: Adding documentation on the sources. Adding IR_NAT_REF ref…
Feb 17, 2020
38660bf
DREES-106: Adding documentation and tests
Feb 21, 2020
a3b99b2
Merge pull request #239 from X-DataInitiative/DREES-106-NgapActs
vjarry Mar 3, 2020
23510a0
CNAM-441: Create markdown for transformer
Anfor Mar 4, 2020
25904d4
Merge pull request #241 from X-DataInitiative/CNAM-441-Create-markdow…
Anfor Mar 4, 2020
c0e1782
CNAM-442: emergency extractor
dsun0720 Feb 18, 2020
971b0e0
CNAM-442: exact date in medical act
dsun0720 Feb 25, 2020
7c30096
CNAM-442: extract weight from hospitalisation
dsun0720 Feb 26, 2020
1a3b65c
CNAM-442: test unit
dsun0720 Mar 4, 2020
4cf6c78
Merge pull request #242 from X-DataInitiative/CNAM-442-emergency-extr…
dsun0720 Mar 4, 2020
65da617
DREES-108 : Adding new branch DREES-108-Sources
thomashdh Feb 17, 2020
566e7ca
DREES-108 : remove Sources/data/SsrSourceSuite test because not need…
thomashdh Mar 4, 2020
813750c
DREES-108 : change Parquet input file to test-input/SSR_C.parquet
thomashdh Mar 5, 2020
dce8245
DREES-108 : upload new Parquet Test file with valid column name
thomashdh Mar 10, 2020
b197f52
Merge pull request #240 from X-DataInitiative/DREES-108-Sources
thomashdh Mar 10, 2020
0bf2399
CNAM-450: First working version of the new Bulk.
ysebiat Mar 24, 2020
f0490e1
CNAM-450: Add tests.
ysebiat Apr 6, 2020
2aabbe7
Merge pull request #249 from X-DataInitiative/CNAM-450-Update-Bulk-Study
Apr 6, 2020
be394ec
CNAM-452: First working version.
ysebiat Mar 31, 2020
4b17f38
CNAM-452: Add tests.
ysebiat Apr 1, 2020
e09d2ac
CNAM-452: Documentation.
ysebiat Apr 1, 2020
fedb6e0
CNAM-452: Add documentation.
ysebiat Apr 3, 2020
bc01a36
CNAM-452: Address review comments.
ysebiat Apr 8, 2020
e1d1795
CNAM-452: Rebase with develop.
ysebiat Apr 8, 2020
fda89fe
Merge pull request #250 from X-DataInitiative/CNAM-452-Config-Codes-E…
Apr 8, 2020
685862d
CNAM-457: MinimumDuration parameter for Interaction Transformer.
ysebiat Apr 9, 2020
c92ba7a
Merge pull request #251 from X-DataInitiative/CNAM-457-Minimum-Durati…
Apr 14, 2020
96ef591
CNAM-458: Correct bug for Hospitalised fractures.
ysebiat Apr 10, 2020
7d10b9c
CNAM-458: Add missing Columns.
ysebiat Apr 14, 2020
14b55c8
Merge pull request #252 from X-DataInitiative/CNAM-458-Fracture-Sever…
Apr 16, 2020
0e65a81
CNAM-456: optimise imports
dsun0720 Apr 14, 2020
99e20f4
CNAM-456: avoid scala match may not be exhaustive
dsun0720 Apr 17, 2020
11475c8
Merge pull request #253 from X-DataInitiative/CNAM-456-reformat
Apr 17, 2020
6c4ea8d
Hotfix: Correct bug on end date.
ysebiat Apr 17, 2020
714aa3e
Merge pull request #255 from X-DataInitiative/Hotfix-extract-end-bug
Apr 17, 2020
0895435
CNAM-286: Refactoring Patients
Jul 17, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
84 changes: 84 additions & 0 deletions Events.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Events

An [Event](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/events/Event.scala)
is a figure that allows to homogenize the content of the output datasets.
It consists, at least, of an object to be instantiated and a trait containing the necessary functions.
In order to create an `Event` you first need to understand what it is.
An event is an occurrence defined by having a patient identifier, category, start, group identifier, value, weight and end;
of these only the first three are mandatory.The 7 elements needed to form an `Event` are:
- patientID: is the patient identifier.
- category: define the event's category.
- groupID: contains the ID of a group of related events.
- value: contains string values fot the molecule name, the diagnosis code, etc.
- weight: contains double values for medical acts weighting or other numerical values.
- start: is the start of event's period.
- end: is the end of event's period.
```scala
patientID: String,
category: EventCategory[A],
groupID: String,
value: String,
weight: Double,
start: Timestamp,
end: Option[Timestamp]
```
All events inherit [AnyEvent](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/events/AnyEvent.scala)
and [EventBuilder](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/events/EventBuilder.scala).
`AnyEvent` is a trait with category value, and `EventBuilder` is a trait to built an `Event`.


[ObservationPeriod](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/events/ObservationPeriod.scala)
and [MedicalAct](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/events/MedicalAct.scala)
are good examples to illustrate the construction of an `Event`.
The first one,`ObservationPeriod`, define the values `patientID`, `category`, `start` and if exist `end`.
The other values are present but use default values. Its trait just assigns the value of the category and uses the apply method to build an `Event`.
```scala
val category: EventCategory[ObservationPeriod] = "observation_period"

/** Creates un Event object of type ObservationPeriod using a map function to map a dataset.
*
* @param patientID The value patientID from dataset.
* @param start The value start from dataset.
* @param end The value end from dataset.
* @return Event[ObservationPeriod].
*/
def apply(patientID: String, start: Timestamp, end: Timestamp): Event[ObservationPeriod] =
Event(patientID, category, groupID = "NA", value = "NA", weight = 0D, start, Some(end))
```
And its object doesn't add up to anything, it just inherits the trait.
```scala
object ObservationPeriod extends ObservationPeriod
```
On the other side,`MedicalAct` defines values for all elements except `end` one.
Its trait uses two apply methods to assign values according to need and not assign any value to category one,
it's assigned in each object according to the type.

```scala

override val category: EventCategory[MedicalAct]

def apply(patientID: String, groupID: String, code: String, weight: Double, date: Timestamp): Event[MedicalAct] = {
Event(patientID, category, groupID, code, weight, date, None)
}

def apply(patientID: String, groupID: String, code: String, date: Timestamp): Event[MedicalAct] = {
Event(patientID, category, groupID, code, 0.0, date, None)
}
```
The MedicalAct's object are various in accordance with the type of medical act.
Their objects assign categories and in some cases have object that stores groupID values.

```scala
object BiologyDcirAct extends MedicalAct {
override val category: EventCategory[MedicalAct] = "dcir_biology_act"

object groupID {
val PrivateAmbulatory = "private_ambulatory"
val PublicAmbulatory = "public_ambulatory"
val PrivateHospital = "private_hospital"
val Liberal = "liberal"
val DcirAct = "DCIR_act"
val Unknown = "unknown_source"
}
}
```
72 changes: 72 additions & 0 deletions Extractors.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@


# Extractors

Extractors are a kind of jobs that allows to extract the required columns from the sources and maps them to the `Event` ([Events](Events.md)) it is extracting.
An extractor is composed of several basic components that are grouped to give all the functionalities to the extractors.
From a point of view hierarchical we have:

1) Base elements are traits as [Extractor](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/extractors/Extractor.scala),
[McoSource](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/extractors/mco/McoSource.scala) and
[EventRowExtractor](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/extractors/EventRowExtractor.scala).
Each manages different parts of extraction. They are all necessary for the creation of an element of the next level.
2) Intermediate elements are traits that bring together the basic methods to create a common trait to extract the data from the sources (mco,dcir,ssr,had).In our example,
[McoExtractor](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/extractors/mco/McoExtractor.scala)
is the base for retrieving the necessary data from mco source. These elements inherit the base elements and accept as a parameter a trait of the type EventType
3) The upper elements are objects and they are the entry point of the job itself, they inherit from the middle elements and specialize it in one type of `Event`.

Each basic component has a function:
- [Extractor](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/extractors/Extractor.scala)
is a trait that works by filtering, extracting and building.Its main method `extract ` allows to filter the sources and build a dataset of type `Event`.
```scala
def extract(sources: Sources, codes: Set[String])(implicit ctag: TypeTag[EventType]): Dataset[Event[EventType]] = {
val input: DataFrame = getInput(sources)
import input.sqlContext.implicits._
{
if (codes.isEmpty) {
input.filter(isInExtractorScope _)
}
else {
input.filter(isInExtractorScope _).filter(isInStudy(codes) _)
}
}.flatMap(builder _).distinct()
}
```
- [McoSource](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/extractors/mco/McoSource.scala)
This trait is specific to each source (mco,dcir,ssr,had), containing the values relating to the columns and the methods specific to that source.
- [EventRowExtractor](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/extractors/EventRowExtractor.scala)
This trait contains methods for extracting the fields needed to create an `Event`.

The intermediate elements implement the required methods and adapt them if necessary.
Two good examples of implementation and modification to suit the specificities of `Event` type are `builder` method and `extractGroupId` method.

```scala
def builder(row: Row): Seq[Event[EventType]] = {
lazy val patientId = extractPatientId(row)
lazy val groupId = extractGroupId(row)
lazy val eventDate = extractStart(row)
lazy val endDate = extractEnd(row)
lazy val weight = extractWeight(row)

Seq(eventBuilder[EventType](patientId, groupId, code(row), weight, eventDate, endDate))
}
```
```scala
override def extractGroupId(r: Row): String = {
r.getAs[String](ColNames.EtaNum) + "_" +
r.getAs[String](ColNames.RsaNum) + "_" +
r.getAs[Int](ColNames.Year).toString
}
```

The above elements are responsible for defining the type of `Event` and must implement at least `columnName` and `eventBuilder` values and modify them according to their specificity.
For exemple at [McoHospitalStaysExtractor](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/extractors/hospitalstays/McoHospitalStaysExtractor.scala)
```scala
object McoHospitalStaysExtractor extends McoExtractor[HospitalStay]{

override val columnName: String = ColNames.EndDate
override val eventBuilder: EventBuilder = McoHospitalStay
}
```


41 changes: 41 additions & 0 deletions Transformer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Transformers

A transformer is used to turn one or multiple datasets
into another one. A `Transformer` accept a configuration class as a parameter
a configuration class of type
[TransformerConfig](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/transformers/TransformerConfig.scala).
This configuration file control the behaviour of the `Transformer` through its methods and values.


`transform` is the main and the unique public available method of `Transformer`, this method accepts one or several datasets as input
and after the application of the transformation logic, returns a dataset of type `Event`([Events](Events.md)) with a new `category`.

If we take as an example [ExposureTransformer](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/transformers/exposures/ExposureTransformer.scala),
we pass an instance of the class [ExposuresTransformerConfig](https://github.com/X-DataInitiative/SCALPEL-Extraction/blob/master/src/main/scala/fr/polytechnique/cmap/cnam/etl/transformers/exposures/ExposuresTransformerConfig.scala)
as parameter, it extends a `TransformerConfig`.
```scala
/**
* A tag to improve readability of subclasses and to allow type binding
*/

trait TransformerConfig
```
The config class is used to control the Transformer's behaviour.
```scala
class ExposuresTransformerConfig(
val exposurePeriodAdder: ExposurePeriodAdder) extends TransformerConfig with Serializable
```
This main method take as parameter two datasets of type `Event` and subtypes `FollowUp` and `Drug` respectively
and return a dataset of type `Event` and subtype `Exposure`.

```scala
def transform(followUps: Dataset[Event[FollowUp]])(drugs: Dataset[Event[Drug]]): Dataset[Event[Exposure]] = {
drugs
.transform(config.exposurePeriodAdder.toExposure(followUps))
.transform(regulateWithFollowUps(followUps))
}
```
The objective of the `transform` method is thus to combine, filter, check relations between multiples `Event`s to form a new `Event`.
In the example of the `ExposureTransformer`, it combines multiples `Drug` `Event`s based on the logic of
the `exposurePeriodAdder` of the `ExposuresTransformerConfig` to form an `Exposure` while
making sure that it is contained within the period defined in the `FollowUp` `Event`.
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=0.13.15
sbt.version=0.13.18
5 changes: 4 additions & 1 deletion src/main/resources/config/bulk/default.conf
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
root {

drugs {
level: "cip13"
families: []
}
}


Expand Down
8 changes: 4 additions & 4 deletions src/main/resources/config/bulk/paths/cmap.conf
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
env_name = "cmap"

input = {
dcir = "/shared/Observapur/staging/Flattening/flat_table/DCIR"
mco_ce = "/shared/Observapur/staging/Flattening/flat_table/MCO_CE"
mco = "/shared/Observapur/staging/Flattening/flat_table/MCO"
ir_ben = "/shared/Observapur/staging/Flattening/single_table/IR_BEN_R"
dcir = "/user/ds/CNAM447/flattening/flat_table/DCIR"
mco_ce = "/user/ds/CNAM447bis/flattening/flat_table/MCO_CE"
mco = "/user/ds/CNAM447bis/flattening/flat_table/MCO"
ir_ben = "/user/ds/CNAM447/flattening/single_table/IR_BEN_R"
ir_imb = "/shared/Observapur/staging/Flattening/single_table/IR_IMB_R"
ir_pha = "/shared/Observapur/staging/Flattening/single_table/IR_PHA_R_MOL"
}
Expand Down
5 changes: 3 additions & 2 deletions src/main/resources/config/fall/default.conf
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ root {
to_exposure_strategy = "purchase_count_based"
}
}
interaction {
interactions {
level: 2
minimum_duration: 30 days
}
drugs {
level: "Therapeutic"
Expand All @@ -28,7 +29,7 @@ root {
fall_frame: 0 months // fractures are grouped if they happen in the same site within the period fallFrame, (default value 0 means no group)
}
run_parameters {
outcome: ["Acts", "Diagnoses", "Outcomes"] // pipeline of calculation of outcome, possible values : Acts, Diagnoses, and Outcomes
outcome: ["Acts", "Diagnoses", "HospitalDeaths", "Outcomes"] // pipeline of calculation of outcome, possible values : Acts, Diagnoses, and Outcomes
exposure: ["Patients", "StartGapPatients", "DrugPurchases", "Exposures"] // pipeline of the calculation of exposure, possible values : Patients, StartGapPatients, DrugPurchases, Exposures
}
}
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/config/fall/template.conf
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@
# exposures.end_threshold_gc: 90 days // If periodStrategy="limited", represents the period without purchases for an exposure to be considered "finished".
# exposures.end_threshold_ngc: 30 days // If periodStrategy="limited", represents the period without purchases for an exposure to be considered "finished".
# exposures.end_delay: 30 days // Number of periods that we add to the exposure end to delay it (lag).
# exposures.to_exposure_strategy: purchase_count_based // possible values "purchase_count_based" or "lastest_purchase_based"

# interactions.level: 3 // Integer representing the maximum number of values of Interaction. Please be careful as this not scale well beyond 5 when the data contains a patient with very high number of exposures
# interactions.minimum_duration: 30 days // If Interaction duration is less than this value, it is not considered. Proxy for medication change.

# drugs.level: "Therapeutic" // Options are Therapeutic, Pharmacological, MoleculeCombination
# drugs.families: ["Antihypertenseurs", "Antidepresseurs", "Neuroleptiques", "Hypnotiques"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import me.danielpes.spark.datetime.implicits._
import pureconfig._
import pureconfig.configurable.{localDateConfigConvert, localDateTimeConfigConvert}
import pureconfig.generic.{CoproductHint, EnumCoproductHint, FieldCoproductHint, ProductHint}
import fr.polytechnique.cmap.cnam.etl.extractors.drugs.level.DrugClassificationLevel
import fr.polytechnique.cmap.cnam.etl.extractors.events.drugs.level.DrugClassificationLevel
import fr.polytechnique.cmap.cnam.etl.transformers.exposures.ExposurePeriodAdder

trait ConfigLoader {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,13 @@ object StudyConfig {
dcir: Option[String] = None,
mco: Option[String] = None,
mcoCe: Option[String] = None,
ssr: Option[List[String]] = None,
ssr: Option[String] = None,
ssrCe: Option[String] = None,
had: Option[String] = None,
irBen: Option[String] = None,
irImb: Option[String] = None,
irPha: Option[String] = None,
irNat: Option[String] = None,
dosages: Option[String] = None)

case class OutputPaths(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
package fr.polytechnique.cmap.cnam.etl.datatypes

import java.sql.Timestamp
import fr.polytechnique.cmap.cnam.etl.transformers.interaction._
import fr.polytechnique.cmap.cnam.util.functions._

case class Period(start: Timestamp, end: Timestamp) extends Subtractable[Period] with Addable[Period]{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,12 @@
package fr.polytechnique.cmap.cnam.etl.events

import java.sql.Timestamp
import org.apache.spark.sql.Row


trait Classification extends AnyEvent with EventBuilder {

val category: EventCategory[Classification]

def fromRow(
r: Row,
patientIDCol: String = "patientID",
nameCol: String = "name",
groupIDCol: String = "groupID",
dateCol: String = "eventDate")
: Event[Classification] = {
apply(
r.getAs[String](patientIDCol),
r.getAs[String](groupIDCol),
r.getAs[String](nameCol),
r.getAs[Timestamp](dateCol)
)
}

def apply(
patientID: String,
groupID: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,57 +3,27 @@
package fr.polytechnique.cmap.cnam.etl.events

import java.sql.Timestamp
import org.apache.spark.sql.Row

trait Diagnosis extends AnyEvent with EventBuilder {

val category: EventCategory[Diagnosis]

def fromRow(r: Row, patientIDCol: String, codeCol: String, dateCol: String): Event[Diagnosis] = {
apply(r.getAs[String](patientIDCol), r.getAs[String](codeCol), r.getAs[Timestamp](dateCol))
}

def apply(patientID: String, code: String, date: Timestamp): Event[Diagnosis] = {
Event(patientID, category, groupID = "NA", code, 0.0, date, None)
}

def fromRow(
r: Row,
patientIDCol: String = "patientID",
groupIDCol: String = "groupID",
codeCol: String = "code",
dateCol: String = "eventDate"): Event[Diagnosis] = {
apply(
r.getAs[String](patientIDCol),
r.getAs[String](groupIDCol),
r.getAs[String](codeCol),
r.getAs[Timestamp](dateCol)
)
def apply(patientID: String, code: String, date: Timestamp, endDate: Option[Timestamp]): Event[Diagnosis] = {
Event(patientID, category, groupID = "NA", code, 0.0, date, endDate)
}

def apply(patientID: String, groupID: String, code: String, date: Timestamp): Event[Diagnosis] = {
Event(patientID, category, groupID, code, 0.0, date, None)
}

def fromRow(
r: Row,
patientIDCol: String,
groupIDCol: String,
codeCol: String,
weightCol: String,
dateCol: String): Event[Diagnosis] = {
apply(
r.getAs[String](patientIDCol),
r.getAs[String](groupIDCol),
r.getAs[String](codeCol),
r.getAs[Double](weightCol),
r.getAs[Timestamp](dateCol)
)
}

def apply(patientID: String, groupID: String, code: String, weight: Double, date: Timestamp): Event[Diagnosis] = {
Event(patientID, category, groupID, code, weight, date, None)
}

}

object McoMainDiagnosis extends Diagnosis {
Expand Down Expand Up @@ -92,6 +62,6 @@ object SsrTakingOverPurpose extends Diagnosis {
val category: EventCategory[Diagnosis] = "ssr_taking_over_purpose"
}

object ImbDiagnosis extends Diagnosis {
override val category: EventCategory[Diagnosis] = "imb_diagnosis"
object ImbCcamDiagnosis extends Diagnosis {
override val category: EventCategory[Diagnosis] = "imb_ccam_diagnosis"
}
Loading