package com.jasamedika.medifirst2000.entities;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.jasamedika.medifirst2000.base.BaseTransaction;
import com.jasamedika.medifirst2000.helper.Caption;

@Entity
@Table(name = "PasienDaftar_T")
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class PasienDaftar extends BaseTransaction {
	private static final long serialVersionUID = 123252008244779475L;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectRekananFk")
	@Caption(value = "Object Rekanan")
	private Rekanan rekanan;

	@Column(name = "ObjectRekananFk", insertable = false, updatable = false, nullable = true)
	private Integer rekananId;

	@Caption(value = "Total Biaya")
	@Column(name = "totalBiaya", nullable = true)
	private Double totalBiaya;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectStatusKeluarFk")
	@Caption(value = "Object Status Keluar")
	private StatusKeluar statusKeluar;

	@Column(name = "ObjectStatusKeluarFk", insertable = false, updatable = false, nullable = true)
	private Integer statusKeluarId;

	@Column(name = "statusKasusPenyakit", nullable = false)
	@Caption(value = "Status Kasus Penyakit")
	private Boolean statusKasusPenyakit;

	@Column(name = "IsKajianAwal", nullable = false, length = 100)
	@Caption(value = "Kajian Awal")
	private Boolean isKajianAwal;

	@Column(name = "noRegistrasi", nullable = false, length = 200)
	@NotNull(message = "No Registrasi Harus Diisi")
	@Caption(value = "No registrasi ")
	private String noRegistrasi;

	@NotNull(message = "Is On Site Service tidak boleh kosong")
	@Column(name = "isOnSiteService", nullable = false)
	@Caption(value = "Is On Site Service")
	private Byte isOnSiteService;

	@NotNull(message = "Is Registrasi Lengkap tidak boleh kosong")
	@Column(name = "isRegistrasiLengkap", nullable = false)
	@Caption(value = "Is Registrasi Lengkap")
	private Byte isRegistrasiLengkap;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectKasusPenyakitLastFk")
	@Caption(value = "Object Kasus Penyakit Last")
	private KasusPenyakit kasusPenyakit;

	@Column(name = "ObjectKasusPenyakitLastFk", insertable = false, updatable = false)
	private Integer kasusPenyakitId;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectPegawaiFk")
	@Caption(value = "Penanggung Jawab pasien")
	private Pegawai dokterPenanggungJawab;

	@Column(name = "ObjectPegawaiFk", insertable = false, updatable = false, nullable = true)
	private Integer dokterPenanggungJawabId;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectKelompokPasienLastFk")
	@NotNull(message = "Kd Kelompok Pasien Last tidak boleh kosong")
	@Caption(value = "Object Kelompok Pasien Last")
	private KelompokPasien kelompokPasien;

	@Column(name = "ObjectKelompokPasienLastFk", insertable = false, updatable = false, nullable = false)
	private Integer kelompokPasienId;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectRuanganLastFk")
	@Caption(value = "Object Ruangan Last")
	private Ruangan ruangan;

	@Column(name = "ObjectRuanganLastFk", insertable = false, updatable = false)
	private Integer ruanganId;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectRuanganAsalFk")
	@Caption(value = "Object Ruangan Asal")
	private Ruangan ruanganAsal;

	@Column(name = "ObjectRuanganAsalFk", insertable = false, updatable = false)
	private Integer ruanganAsalId;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "RuanganNextSchedule")
	@Caption(value = "RuanganNextSchedule")
	private Ruangan ruanganNextSchedule;

	@Column(name = "RuanganNextSchedule", insertable = false, updatable = false, nullable = true)
	private Integer ruanganNextScheduleId;

	@Column(name = "StatusSchedule", nullable = true, length = 40)
	@Caption(value = "StatusSchedule")
	private String statusSchedule;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "NoCMFk")
	@NotNull(message = "No C M Harus Diisi")
	@Caption(value = "No C M")
	private Pasien pasien;

	@Column(name = "NoCMFk", insertable = false, updatable = false, nullable = false)
	private Integer pasienId;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "NoRegistrasiFk")
	@Caption(value = "No Registrasi")
	private PenanggungJawabPasien penanggungJawabPasien;

	@Column(name = "NoRegistrasiFk", columnDefinition = "CHAR(32)", insertable = false, updatable = false)
	private String penanggungJawabId;

	@Column(name = "statusPasien")
	@Caption(value = "StatusPasien")
	private String statusPasien;

	@NotNull(message = "Tgl Registrasi tidak boleh kosong")
	@Column(name = "TglRegistrasi", nullable = false)
	@Caption(value = "Tanggal Registrasi")
	private Date tglRegistrasi;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectStatusPulangFk")
	@Caption(value = "Object Status Pulang")
	private StatusPulang statusPulang;

	@Column(name = "ObjectStatusPulangFk", insertable = false, updatable = false)
	private Integer statusPulangId;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectKondisiPasienFk")
	@Caption(value = "Object Kondisi Pasien")
	private KondisiPasien kondisiPasien;

	@Column(name = "ObjectKondisiPasienFk", insertable = false, updatable = false)
	private Integer kondisiPasienId;

	@Column(name = "TglPulang", nullable = true)
	@Caption(value = "Tanggal Pulang")
	private Date tglPulang;

	@Column(name = "TglMeninggal", nullable = true)
	@Caption(value = "Tanggal Meninggal")
	private Date tanggalMeninggal;

	@Column(name = "JenisPelayanan", nullable = true, length = 40)
	@Caption(value = "Jenis Pelayanan")
	private String jenisPelayanan;

	@Column(name = "NamaLengkapAmbilPasien", nullable = true, length = 40)
	@Caption(value = "Nama Lengkap Ambil Pasien")
	private String namaLengkapAmbilPasien;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectHubunganKeluargaAmbilPasienFk")
	@Caption(value = "Object Hubungan Keluarga Ambil Pasien")
	private HubunganKeluarga hubunganKeluarga;

	@Column(name = "ObjectHubunganKeluargaAmbilPasienFk", insertable = false, updatable = false)
	private Integer hubunganKeluargaId;

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "pasienDaftar")
	private Set<AntrianPasienDiPeriksa> antrianPasienDiPeriksaSet = new HashSet<AntrianPasienDiPeriksa>();

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "pasienDaftar")
	private Set<BatalRegistrasi> batalRegistrasiSet = new HashSet<BatalRegistrasi>();

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "pasienDaftar")
	private Set<DiputuskanDetail> diputuskanDetailSet = new HashSet<DiputuskanDetail>();

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "pasienDaftar")
	private Set<PemakaianAsuransi> pemakaianAsuransiSet = new HashSet<PemakaianAsuransi>();

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectKelasFk")
	@Caption(value = "Object Kelas")
	private Kelas kelas;

	@Column(name = "ObjectKelasFk", insertable = false, updatable = false)
	private Integer kelasId;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectPenyebabKematianFk")
	@Caption(value = "Penyebab Kematian")
	private PenyebabKematian penyebabKematian;

	@Column(name = "ObjectPenyebabKematianFk", insertable = false, updatable = false)
	private Integer penyebabKematianId;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ObjectDokterPemeriksaFk")
	@Caption(value = "Dokter Pemeriksa")
	private Pegawai dokterPemeriksa;

	@Column(name = "ObjectDokterPemeriksaFk", insertable = false, updatable = false)
	private Integer dokterPemeriksaId;

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "pasienDaftar")
	private Set<MapPasienDpjpToPasienDaftar> mapPasienDpjpToPasienDaftar = new HashSet<MapPasienDpjpToPasienDaftar>();

	@Caption(value = "emergensi")
	@Column(name = "Emergensi", nullable = true)
	private Boolean emergensi;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "NoStrukLastFk")
	@Caption(value = "No Struk Last")
	private StrukPelayanan strukPelayanan;

	@Column(name = "NoStrukLastFk", columnDefinition = "CHAR(32)", insertable = false, updatable = false)
	private String strukPelayananId;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "NoSbmLastFk")
	@Caption(value = "No SBM Last")
	private StrukBuktiPenerimaan strukBuktiPenerimaan;

	@Column(name = "NoSbmLastFk", insertable = false, updatable = false)
	private String strukBuktiPenerimaanId;

	@Caption(value = "Kode Status Diskon Pegawai")
	@Column(name = "diskonpegawai", nullable = true)
	private Integer diskonPegawai;

	public Rekanan getRekanan() {
		return rekanan;
	}

	public void setRekanan(Rekanan rekanan) {
		this.rekanan = rekanan;
	}

	public Integer getRekananId() {
		return rekananId;
	}

	public void setRekananId(Integer rekananId) {
		this.rekananId = rekananId;
	}

	public Double getTotalBiaya() {
		return totalBiaya;
	}

	public void setTotalBiaya(Double totalBiaya) {
		this.totalBiaya = totalBiaya;
	}

	public StatusKeluar getStatusKeluar() {
		return statusKeluar;
	}

	public void setStatusKeluar(StatusKeluar statusKeluar) {
		this.statusKeluar = statusKeluar;
	}

	public Integer getStatusKeluarId() {
		return statusKeluarId;
	}

	public void setStatusKeluarId(Integer statusKeluarId) {
		this.statusKeluarId = statusKeluarId;
	}

	public Boolean getStatusKasusPenyakit() {
		return statusKasusPenyakit;
	}

	public void setStatusKasusPenyakit(Boolean statusKasusPenyakit) {
		this.statusKasusPenyakit = statusKasusPenyakit;
	}

	public Boolean getIsKajianAwal() {
		return isKajianAwal;
	}

	public void setIsKajianAwal(Boolean isKajianAwal) {
		this.isKajianAwal = isKajianAwal;
	}

	public String getNoRegistrasi() {
		return noRegistrasi;
	}

	public void setNoRegistrasi(String noRegistrasi) {
		this.noRegistrasi = noRegistrasi;
	}

	public Byte getIsOnSiteService() {
		return isOnSiteService;
	}

	public void setIsOnSiteService(Byte isOnSiteService) {
		this.isOnSiteService = isOnSiteService;
	}

	public Byte getIsRegistrasiLengkap() {
		return isRegistrasiLengkap;
	}

	public void setIsRegistrasiLengkap(Byte isRegistrasiLengkap) {
		this.isRegistrasiLengkap = isRegistrasiLengkap;
	}

	public KasusPenyakit getKasusPenyakit() {
		return kasusPenyakit;
	}

	public void setKasusPenyakit(KasusPenyakit kasusPenyakit) {
		this.kasusPenyakit = kasusPenyakit;
	}

	public Integer getKasusPenyakitId() {
		return kasusPenyakitId;
	}

	public void setKasusPenyakitId(Integer kasusPenyakitId) {
		this.kasusPenyakitId = kasusPenyakitId;
	}

	public Pegawai getDokterPenanggungJawab() {
		return dokterPenanggungJawab;
	}

	public void setDokterPenanggungJawab(Pegawai dokterPenanggungJawab) {
		this.dokterPenanggungJawab = dokterPenanggungJawab;
	}

	public Integer getDokterPenanggungJawabId() {
		return dokterPenanggungJawabId;
	}

	public void setDokterPenanggungJawabId(Integer dokterPenanggungJawabId) {
		this.dokterPenanggungJawabId = dokterPenanggungJawabId;
	}

	public KelompokPasien getKelompokPasien() {
		return kelompokPasien;
	}

	public void setKelompokPasien(KelompokPasien kelompokPasien) {
		this.kelompokPasien = kelompokPasien;
	}

	public Integer getKelompokPasienId() {
		return kelompokPasienId;
	}

	public void setKelompokPasienId(Integer kelompokPasienId) {
		this.kelompokPasienId = kelompokPasienId;
	}

	public Ruangan getRuangan() {
		return ruangan;
	}

	public void setRuangan(Ruangan ruangan) {
		this.ruangan = ruangan;
	}

	public Integer getRuanganId() {
		return ruanganId;
	}

	public void setRuanganId(Integer ruanganId) {
		this.ruanganId = ruanganId;
	}

	public Ruangan getRuanganNextSchedule() {
		return ruanganNextSchedule;
	}

	public void setRuanganNextSchedule(Ruangan ruanganNextSchedule) {
		this.ruanganNextSchedule = ruanganNextSchedule;
	}

	public Integer getRuanganNextScheduleId() {
		return ruanganNextScheduleId;
	}

	public void setRuanganNextScheduleId(Integer ruanganNextScheduleId) {
		this.ruanganNextScheduleId = ruanganNextScheduleId;
	}

	public String getStatusSchedule() {
		return statusSchedule;
	}

	public void setStatusSchedule(String statusSchedule) {
		this.statusSchedule = statusSchedule;
	}

	public Pasien getPasien() {
		return pasien;
	}

	public void setPasien(Pasien pasien) {
		this.pasien = pasien;
	}

	public Integer getPasienId() {
		return pasienId;
	}

	public void setPasienId(Integer pasienId) {
		this.pasienId = pasienId;
	}

	public PenanggungJawabPasien getPenanggungJawabPasien() {
		return penanggungJawabPasien;
	}

	public void setPenanggungJawabPasien(PenanggungJawabPasien penanggungJawabPasien) {
		this.penanggungJawabPasien = penanggungJawabPasien;
	}

	public String getPenanggungJawabId() {
		return penanggungJawabId;
	}

	public void setPenanggungJawabId(String penanggungJawabId) {
		this.penanggungJawabId = penanggungJawabId;
	}

	public String getStatusPasien() {
		return statusPasien;
	}

	public void setStatusPasien(String statusPasien) {
		this.statusPasien = statusPasien;
	}

	public Date getTglRegistrasi() {
		return tglRegistrasi;
	}

	public void setTglRegistrasi(Date tglRegistrasi) {
		this.tglRegistrasi = tglRegistrasi;
	}

	public StatusPulang getStatusPulang() {
		return statusPulang;
	}

	public void setStatusPulang(StatusPulang statusPulang) {
		this.statusPulang = statusPulang;
	}

	public Integer getStatusPulangId() {
		return statusPulangId;
	}

	public void setStatusPulangId(Integer statusPulangId) {
		this.statusPulangId = statusPulangId;
	}

	public KondisiPasien getKondisiPasien() {
		return kondisiPasien;
	}

	public void setKondisiPasien(KondisiPasien kondisiPasien) {
		this.kondisiPasien = kondisiPasien;
	}

	public Integer getKondisiPasienId() {
		return kondisiPasienId;
	}

	public void setKondisiPasienId(Integer kondisiPasienId) {
		this.kondisiPasienId = kondisiPasienId;
	}

	public Date getTglPulang() {
		return tglPulang;
	}

	public void setTglPulang(Date tglPulang) {
		this.tglPulang = tglPulang;
	}

	public Date getTanggalMeninggal() {
		return tanggalMeninggal;
	}

	public void setTanggalMeninggal(Date tanggalMeninggal) {
		this.tanggalMeninggal = tanggalMeninggal;
	}

	public String getJenisPelayanan() {
		return jenisPelayanan;
	}

	public void setJenisPelayanan(String jenisPelayanan) {
		this.jenisPelayanan = jenisPelayanan;
	}

	public String getNamaLengkapAmbilPasien() {
		return namaLengkapAmbilPasien;
	}

	public void setNamaLengkapAmbilPasien(String namaLengkapAmbilPasien) {
		this.namaLengkapAmbilPasien = namaLengkapAmbilPasien;
	}

	public HubunganKeluarga getHubunganKeluarga() {
		return hubunganKeluarga;
	}

	public void setHubunganKeluarga(HubunganKeluarga hubunganKeluarga) {
		this.hubunganKeluarga = hubunganKeluarga;
	}

	public Integer getHubunganKeluargaId() {
		return hubunganKeluargaId;
	}

	public void setHubunganKeluargaId(Integer hubunganKeluargaId) {
		this.hubunganKeluargaId = hubunganKeluargaId;
	}

	public Set<AntrianPasienDiPeriksa> getAntrianPasienDiPeriksaSet() {
		return antrianPasienDiPeriksaSet;
	}

	public void setAntrianPasienDiPeriksaSet(Set<AntrianPasienDiPeriksa> antrianPasienDiPeriksaSet) {
		this.antrianPasienDiPeriksaSet = antrianPasienDiPeriksaSet;
	}

	public Set<DiputuskanDetail> getDiputuskanDetailSet() {
		return diputuskanDetailSet;
	}

	public void setDiputuskanDetailSet(Set<DiputuskanDetail> diputuskanDetailSet) {
		this.diputuskanDetailSet = diputuskanDetailSet;
	}

	public Kelas getKelas() {
		return kelas;
	}

	public void setKelas(Kelas kelas) {
		this.kelas = kelas;
	}

	public Integer getKelasId() {
		return kelasId;
	}

	public void setKelasId(Integer kelasId) {
		this.kelasId = kelasId;
	}

	public PenyebabKematian getPenyebabKematian() {
		return penyebabKematian;
	}

	public void setPenyebabKematian(PenyebabKematian penyebabKematian) {
		this.penyebabKematian = penyebabKematian;
	}

	public Integer getPenyebabKematianId() {
		return penyebabKematianId;
	}

	public void setPenyebabKematianId(Integer penyebabKematianId) {
		this.penyebabKematianId = penyebabKematianId;
	}

	public Pegawai getDokterPemeriksa() {
		return dokterPemeriksa;
	}

	public void setDokterPemeriksa(Pegawai dokterPemeriksa) {
		this.dokterPemeriksa = dokterPemeriksa;
	}

	public Integer getDokterPemeriksaId() {
		return dokterPemeriksaId;
	}

	public void setDokterPemeriksaId(Integer dokterPemeriksaId) {
		this.dokterPemeriksaId = dokterPemeriksaId;
	}

	public Set<MapPasienDpjpToPasienDaftar> getMapPasienDpjpToPasienDaftar() {
		return mapPasienDpjpToPasienDaftar;
	}

	public void setMapPasienDpjpToPasienDaftar(Set<MapPasienDpjpToPasienDaftar> mapPasienDpjpToPasienDaftar) {
		this.mapPasienDpjpToPasienDaftar = mapPasienDpjpToPasienDaftar;
	}

	public Boolean getEmergensi() {
		return emergensi;
	}

	public void setEmergensi(Boolean emergensi) {
		this.emergensi = emergensi;
	}

	public Ruangan getRuanganAsal() {
		return ruanganAsal;
	}

	public void setRuanganAsal(Ruangan ruanganAsal) {
		this.ruanganAsal = ruanganAsal;
	}

	public Integer getRuanganAsalId() {
		return ruanganAsalId;
	}

	public void setRuanganAsalId(Integer ruanganAsalId) {
		this.ruanganAsalId = ruanganAsalId;
	}

	public Set<BatalRegistrasi> getBatalRegistrasiSet() {
		return batalRegistrasiSet;
	}

	public void setBatalRegistrasiSet(Set<BatalRegistrasi> batalRegistrasiSet) {
		this.batalRegistrasiSet = batalRegistrasiSet;
	}

	public StrukPelayanan getStrukPelayanan() {
		return strukPelayanan;
	}

	public void setStrukPelayanan(StrukPelayanan strukPelayanan) {
		this.strukPelayanan = strukPelayanan;
	}

	public String getStrukPelayananId() {
		return strukPelayananId;
	}

	public void setStrukPelayananId(String strukPelayananId) {
		this.strukPelayananId = strukPelayananId;
	}

	public StrukBuktiPenerimaan getStrukBuktiPenerimaan() {
		return strukBuktiPenerimaan;
	}

	public void setStrukBuktiPenerimaan(StrukBuktiPenerimaan strukBuktiPenerimaan) {
		this.strukBuktiPenerimaan = strukBuktiPenerimaan;
	}

	public String getStrukBuktiPenerimaanId() {
		return strukBuktiPenerimaanId;
	}

	public void setStrukBuktiPenerimaanId(String strukBuktiPenerimaanId) {
		this.strukBuktiPenerimaanId = strukBuktiPenerimaanId;
	}

	public Set<PemakaianAsuransi> getPemakaianAsuransiSet() {
		return pemakaianAsuransiSet;
	}

	public void setPemakaianAsuransiSet(Set<PemakaianAsuransi> pemakaianAsuransiSet) {
		this.pemakaianAsuransiSet = pemakaianAsuransiSet;
	}

	public Integer getDiskonPegawai() {
		return diskonPegawai;
	}

	public void setDiskonPegawai(Integer diskonPegawai) {
		this.diskonPegawai = diskonPegawai;
	}
}
