package edu.gatech.i3l.fhir.dstu2.entities;
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.hibernate.annotations.DiscriminatorFormula;
import org.hibernate.envers.Audited;
import edu.gatech.i3l.fhir.jpa.entity.BaseResourceEntity;
@Audited
@Entity
@Table(name="drug_exposure")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula("CASE WHEN drug_type_concept_id = 38000177 THEN 'PrescriptionWritten' "+
"WHEN drug_type_concept_id in (38000176, 38000175) THEN 'PrescriptionDispensed' "+
"WHEN drug_type_concept_id in (38000179, 43542356, 43542357, 43542358) THEN 'DrugAdministration' END")
//@DiscriminatorFormula("CASE WHEN drug_type_concept_id = (SELECT concept.concept_id FROM concept WHERE concept.concept_name LIKE 'Prescription written') THEN 'PrescriptionWritten' "+
// "WHEN drug_type_concept_id = ANY (SELECT concept.concept_id FROM concept WHERE concept.concept_name LIKE '%Prescription dispensed in pharmacy%') THEN 'PrescriptionDispensed' "+
// "WHEN drug_type_concept_id = ANY (SELECT concept.concept_id FROM concept WHERE (concept.concept_id=38000179 OR concept.concept_id=43542356 OR concept.concept_id=43542357 OR concept.concept_id=43542358) AND concept.vocabulary_id='Drug Type') THEN 'DrugAdministration' END")
public abstract class DrugExposure extends BaseResourceEntity {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="drug_exposure_seq_gen")
@SequenceGenerator(name="drug_exposure_seq_gen", sequenceName="drug_exposure_id_seq", allocationSize=1)
@Column(name="drug_exposure_id", updatable= false)
@Access(AccessType.PROPERTY)
private Long id;
@Column(name = "effective_drug_dose")
private Double effectiveDrugDose;
@ManyToOne(cascade={CascadeType.MERGE})
@JoinColumn(name = "dose_unit_concept_id")
private Concept doseUnitConcept;
@Column(name = "drug_source_value")
private String drugSourceValue;
@Column(name = "dose_unit_source_value")
private String doseUnitSourceValue;
// @OneToOne(mappedBy="prescription",
// cascade={CascadeType.ALL}, fetch=FetchType.LAZY)
// private DrugExposureComplement complement;
@Override
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Double getEffectiveDrugDose() {
return effectiveDrugDose;
}
public void setEffectiveDrugDose(Double effectiveDrugDose) {
this.effectiveDrugDose = effectiveDrugDose;
}
public Concept getDoseUnitConcept() {
return doseUnitConcept;
}
public void setDoseUnitConcept(Concept doseUnitConcept) {
this.doseUnitConcept = doseUnitConcept;
}
public String getDrugSourceValue() {
return drugSourceValue;
}
public void setDrugSourceValue(String drugSourceValue) {
this.drugSourceValue = drugSourceValue;
}
public String getDoseUnitSourceValue() {
return doseUnitSourceValue;
}
public void setDoseUnitSourceValue(String doseUnitSourceValue) {
this.doseUnitSourceValue = doseUnitSourceValue;
}
// public DrugExposureComplement getComplement() {
// return complement;
// }
//
// public void setComplement(DrugExposureComplement complement) {
// this.complement = complement;
// }
}