from django.db import models
from django.utils import timezone
import inspect
from otentifikasi.models import Biodata


# Create your models here.
class PosisiPelayanan(models.Model):  # ini untuk posisi pasien itu ada dimana saja bisanya pas sewaktu dipegang DPJP
    nama = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(max_length=255, null=True, blank=True)

    def __str__(self):
        return f'{self.nama} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'Posisi Pelayanan'
        verbose_name_plural = 'Posisi Pelayanan'


class CaraMasuk(models.Model):  # maksudnya diperuntukan untuk cara pasien itu masuk ada bagaimana saja
    nama = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(max_length=255, null=True, blank=True)

    def __str__(self):
        return f'{self.nama} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'Cara Masuk'
        verbose_name_plural = 'Cara Masuk'


class CaraKeluar(
    models.Model):  # maksudnya diperuntukan untuk cara pasien itu keluar gimana apa disuruh dokter atau kabur
    nama = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(max_length=255, null=True, blank=True)

    def __str__(self):
        return f'{self.nama} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'Cara Keluar'
        verbose_name_plural = 'Cara Keluar'


class TaskId(
    models.Model):  # tiap ada user atau anonymous yang mengakses atau mendaftar untuk dilakukan pemeriksaan maka ini akan tercreate
    kode_booking = models.CharField(max_length=255, null=True, blank=True)
    pasien = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True)
    status = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.kode_booking} {self.pasien} {self.status} {self.created_at}'

    class Meta:
        verbose_name = 'Task ID'
        verbose_name_plural = 'Task ID'


class LogTaskId(models.Model):  # log dari task id
    relasi = models.ForeignKey(TaskId, on_delete=models.SET_NULL, null=True, blank=True)
    status = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.relasi} {self.status} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'Log Task ID'
        verbose_name_plural = 'Log Task ID'


class Loket(models.Model):  # loket yang available dioperate oleh user
    nama = models.CharField(max_length=255, null=True, blank=True)
    petugas = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(max_length=255, null=True, blank=True)

    def __str__(self):
        return f'{self.nama} {self.petugas} {self.created_at}'

    class Meta:
        verbose_name = 'Loket'
        verbose_name_plural = 'Loket'


class LogLoket(models.Model):  # log loket yang pernah dipakai
    relasi = models.ForeignKey(Loket, on_delete=models.SET_NULL, null=True, blank=True)
    status = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.relasi} {self.status} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'Log Loket'
        verbose_name_plural = 'Log Loket'


class Antrian(models.Model):  # antrian yang dipakai user
    nomor_antrian = models.CharField(max_length=255, null=True, blank=True)
    kode_booking = models.CharField(max_length=255, null=True, blank=True)
    status = models.CharField(max_length=255, null=True, blank=True)
    tanggal_mengantri = models.DateField(null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(null=True, blank=True, default=timezone.now)
    loket = models.ForeignKey(Loket, on_delete=models.SET_NULL, null=True, blank=True)

    def __str__(self):
        return f'{self.nomor_antrian} {self.kode_booking} {self.status} {self.tanggal_mengantri} {self.created_at}'

    class Meta:
        verbose_name = 'Antrian'
        verbose_name_plural = 'Antrian'


class LogAntrian(models.Model):  # log antrian yang pernah dipakai
    relasi = models.ForeignKey(Antrian, on_delete=models.SET_NULL, null=True, blank=True)
    status = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.relasi} {self.status} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'Log Antrian'
        verbose_name_plural = 'Log Antrian'


class AntrianBpjs(models.Model):  # antrian yang dipakai user
    nomor_antrian = models.CharField(max_length=255, null=True, blank=True)
    kode_booking = models.CharField(max_length=255, null=True, blank=True)
    status = models.CharField(max_length=255, null=True, blank=True)
    tanggal_mengantri = models.DateField(null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(null=True, blank=True, default=timezone.now)
    loket = models.ForeignKey(Loket, on_delete=models.SET_NULL, null=True, blank=True)

    def __str__(self):
        return f'{self.nomor_antrian} {self.kode_booking} {self.status} {self.tanggal_mengantri} {self.created_at}'

    class Meta:
        verbose_name = 'Antrian Bpjs'
        verbose_name_plural = 'Antrian Bpjs'


class LogAntrianBpjs(models.Model):  # log antrian yang pernah dipakai
    relasi = models.ForeignKey(AntrianBpjs, on_delete=models.SET_NULL, null=True, blank=True)
    status = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.relasi} {self.status} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'Log Antrian Bpjs'
        verbose_name_plural = 'Log Antrian Bpjs'


class Dirujuk(models.Model):
    nama = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.nama} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'Dirujuk'
        verbose_name_plural = 'Dirujuk'


class Edukasi(models.Model):
    nama = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.nama} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'Edukasi'
        verbose_name_plural = 'Edukasi'


class AnalisaMasalahKeperawatan(models.Model):
    nama = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.nama} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'Analisa Masalah Keperawatan'
        verbose_name_plural = 'Analisa Masalah Keperawatan'


class Pendaftaran(models.Model):
    kode = models.CharField(max_length=255, null=True, blank=True)
    antrian = models.ForeignKey(Antrian, on_delete=models.SET_NULL, null=True, blank=True)

    # kalau lewat rajal atau igd atau apa ini untuk record surat rujukannya
    nomor_surat_rujukan = models.CharField(max_length=255, null=True, blank=True)
    kode_booking = models.CharField(max_length=255, null=True, blank=True)
    nomor_sep = models.CharField(max_length=255, null=True, blank=True)
    tanggal_sep = models.CharField(max_length=255, null=True, blank=True)
    nomor_rujukan_ranap = models.CharField(max_length=255, null=True, blank=True)
    tanggal_rujukan_ranap = models.CharField(max_length=255, null=True, blank=True)
    nomor_sep_ranap = models.CharField(max_length=255, null=True, blank=True)
    tanggal_sep_ranap = models.CharField(max_length=255, null=True, blank=True)
    rujukan_dari = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    catatan_perawat = models.TextField(null=True, blank=True)
    diagnosa_awal = models.CharField(max_length=255, null=True, blank=True)
    status = models.CharField(max_length=255, null=True, blank=True)

    # maksudnya dokter dpjp
    dokter = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True, related_name='dpjp')
    dokter_ranap = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True,
                                     related_name='dpjp_ranap')

    # petugas siapa yang melakukan pendaftaran
    petugas = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True,
                                related_name='petugas_pendaftaran')
    petugas_ranap = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True,
                                      related_name='petugas_ranap')

    # pasiennya siapa
    pasien = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True, related_name='pasien')
    ruang_rawat_pasien = models.CharField(max_length=255, null=True, blank=True)
    nama_penandatangan_pasien = models.CharField(max_length=255, null=True, blank=True)
    hubungan_dengan_pasien = models.CharField(max_length=255, null=True, blank=True)

    # maksudnya cara bayar itu cara bayar pasien dalam layanan ini
    cara_bayar = models.CharField(max_length=255, null=True, blank=True)

    # maksudnya kelas pasien itu pake kelas apa saat masuk VIP atau apa
    kelas = models.CharField(max_length=255, null=True, blank=True)

    # masuknya pasien via layanan apa ada di daftar cara masuk
    cara_masuk = models.ForeignKey(CaraMasuk, on_delete=models.SET_NULL, null=True, blank=True)
    keadaan_masuk = models.CharField(max_length=255, null=True, blank=True)
    waktu_masuk = models.DateTimeField(null=True, blank=True)

    # keluar pasien via layanan apa ada di daftar cara keluar
    cara_keluar = models.CharField(max_length=255, null=True, blank=True)
    keadaan_keluar = models.CharField(max_length=255, null=True, blank=True)
    waktu_keluar = models.DateTimeField(null=True, blank=True)

    pemeriksaan_lanjutan = models.CharField(max_length=255, null=True, blank=True)
    waktu_kontrol = models.DateTimeField(null=True, blank=True)

    # waktu mulai surat keterangan sakit
    waktu_sks_awal = models.DateField(null=True, blank=True)
    waktu_sks_akhir = models.DateField(null=True, blank=True)

    laka_lantas = models.CharField(max_length=255, null=True, blank=True)
    cob = models.CharField(max_length=255, null=True, blank=True)
    katarak = models.CharField(max_length=255, null=True, blank=True)
    is_claimed = models.BooleanField(default=False)
    is_new_pasien = models.BooleanField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    autoanamnesis = models.BooleanField(null=True, blank=True)
    alloanamensis_dengan = models.CharField(max_length=255, null=True, blank=True)
    # asesmen dokter
    # anamnesis
    keluhan_utama = models.CharField(max_length=255, null=True, blank=True)
    riwayat_penyakit_sekarang = models.CharField(max_length=255, null=True, blank=True)
    riwayat_penyakit_terdahulu = models.CharField(max_length=255, null=True, blank=True)
    riwayat_alergi = models.CharField(max_length=255, null=True, blank=True)
    riwayat_kehamilan = models.CharField(max_length=255, null=True, blank=True)
    riwayat_penyakit_keluarga = models.CharField(max_length=255, null=True, blank=True)
    catatan_asesmen_dokter = models.CharField(max_length=255, null=True, blank=True)

    # kebiasaan pasien
    rokok = models.BooleanField(null=True, blank=True)
    alkohol = models.BooleanField(null=True, blank=True)
    obat_tidur = models.BooleanField(null=True, blank=True)
    olahraga = models.BooleanField(null=True, blank=True)

    # tanda vital
    tensi = models.CharField(max_length=255, null=True, blank=True)
    nadi = models.CharField(max_length=255, null=True, blank=True)
    rr = models.CharField(max_length=255, null=True, blank=True)
    suhu = models.CharField(max_length=255, null=True, blank=True)
    tb = models.CharField(max_length=255, null=True, blank=True)
    bb = models.CharField(max_length=255, null=True, blank=True)

    riwayat_psikososial = models.CharField(max_length=255, null=True, blank=True)
    asesmen_nyeri = models.CharField(max_length=255, null=True, blank=True)
    asesmen_nyeri_select = models.CharField(max_length=255, null=True, blank=True)

    asesmen_resiko_jatuh = models.CharField(max_length=255, null=True, blank=True)
    asesmen_resiko_jatuh_select = models.CharField(max_length=255, null=True, blank=True)

    analisa_masalah_keperawatan = models.ManyToManyField(AnalisaMasalahKeperawatan, blank=True)

    # pemeriksaan umum
    keadaan_umum = models.CharField(max_length=255, null=True, blank=True)
    kesadaran = models.CharField(max_length=255, null=True, blank=True)
    kepala = models.CharField(max_length=255, null=True, blank=True)
    kepala_select = models.BooleanField(null=True, blank=True)
    mata = models.CharField(max_length=255, null=True, blank=True)
    mata_select = models.BooleanField(null=True, blank=True)
    leher = models.CharField(max_length=255, null=True, blank=True)
    leher_select = models.BooleanField(null=True, blank=True)
    tht = models.CharField(max_length=255, null=True, blank=True)
    tht_select = models.BooleanField(null=True, blank=True)
    paru = models.CharField(max_length=255, null=True, blank=True)
    paru_select = models.BooleanField(null=True, blank=True)
    jantung = models.CharField(max_length=255, null=True, blank=True)
    jantung_select = models.BooleanField(null=True, blank=True)
    abdomen = models.CharField(max_length=255, null=True, blank=True)
    abdomen_select = models.BooleanField(null=True, blank=True)
    ekstrimitas = models.CharField(max_length=255, null=True, blank=True)
    ekstrimitas_select = models.BooleanField(null=True, blank=True)
    kulit = models.CharField(max_length=255, null=True, blank=True)
    kulit_select = models.BooleanField(null=True, blank=True)
    lainnya = models.CharField(max_length=255, null=True, blank=True)
    lainnya_select = models.BooleanField(null=True, blank=True)

    pemeriksaan_fisik_khusus = models.CharField(max_length=255, null=True, blank=True)
    pemeriksaan_klinis = models.CharField(max_length=255, null=True, blank=True)
    pemeriksaan_klinis_ekstra_oral = models.CharField(max_length=255, null=True, blank=True)
    pemeriksaan_klinis_intra_oral = models.CharField(max_length=255, null=True, blank=True)
    rencana_terapi_pemeriksaan_penunjang_rujukan = models.CharField(max_length=255, null=True, blank=True)
    dirujuk = models.ManyToManyField(Dirujuk, blank=True)
    catatan_dirujuk = models.CharField(max_length=255, null=True, blank=True)
    edukasi_pasien = models.ManyToManyField(Edukasi, blank=True)
    catatan_edukasi_pasien = models.CharField(max_length=255, null=True, blank=True)
    pemberi_tanda_tangan_pasien = models.CharField(max_length=255, null=True, blank=True)
    tanda_tangan_pasien = models.ImageField(upload_to='tanda_tangan_pasien', null=True, blank=True)
    pemberi_tanda_tangan_dpjp = models.CharField(max_length=255, null=True, blank=True)
    tanda_tangan_dpjp = models.ImageField(upload_to='tanda_tangan_dpjp', null=True, blank=True)
    pemberi_tanda_tangan_petugas = models.CharField(max_length=255, null=True, blank=True)
    tanda_tangan_petugas = models.ImageField(upload_to='tanda_tangan_petugas', null=True, blank=True)

    subjektif = models.CharField(max_length=255, null=True, blank=True)
    objektif = models.CharField(max_length=255, null=True, blank=True)
    asesmen = models.CharField(max_length=255, null=True, blank=True)
    plan = models.CharField(max_length=255, null=True, blank=True)
    status_plan = models.CharField(max_length=255, null=True, blank=True)
    instruction = models.CharField(max_length=255, null=True, blank=True)

    subjektif_perawat = models.CharField(max_length=255, null=True, blank=True)
    objektif_perawat = models.CharField(max_length=255, null=True, blank=True)
    asesmen_perawat = models.CharField(max_length=255, null=True, blank=True)
    plan_perawat = models.CharField(max_length=255, null=True, blank=True)
    instruction_perawat = models.CharField(max_length=255, null=True, blank=True)
    
    tindakan = models.CharField(max_length=255, null=True, blank=True)
    tindakan_lab = models.CharField(max_length=255, null=True, blank=True)
    
    vod = models.CharField(max_length=255, null=True, blank=True, default='')
    vos = models.CharField(max_length=255, null=True, blank=True, default='')
    tod = models.CharField(max_length=255, null=True, blank=True, default='')
    tos = models.CharField(max_length=255, null=True, blank=True, default='')
    saods = models.CharField(max_length=255, null=True, blank=True, default='')
    palp = models.CharField(max_length=255, null=True, blank=True, default='')
    konj = models.CharField(max_length=255, null=True, blank=True, default='')
    kornea = models.CharField(max_length=255, null=True, blank=True, default='')
    coa = models.CharField(max_length=255, null=True, blank=True, default='')
    iris = models.CharField(max_length=255, null=True, blank=True, default='')
    pupil = models.CharField(max_length=255, null=True, blank=True, default='')
    lensa = models.CharField(max_length=255, null=True, blank=True, default='')
    pemeriksaan_tambahan = models.CharField(max_length=255, null=True, blank=True, default='')
    usg = models.CharField(max_length=255, null=True, blank=True, default='')
    assesmen = models.CharField(max_length=255, null=True, blank=True, default='')
    
    satusehat_status = models.BooleanField(default=False)
    json_response = models.TextField(null=True, blank=True)

    user_perawat = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True, related_name='perawat_pendaftaran')
    user_lab = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True, related_name='lab_pendaftaran')
    user_farmasi = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True, related_name='farmasi_pendaftaran')

    def __str__(self):
        return f'{self.kode} {self.pasien} {self.cara_masuk} {self.dokter} {self.created_at} {self.pembayaran_set}'

    class Meta:
        verbose_name = 'Pendaftaran'
        verbose_name_plural = 'Pendaftaran'


class Informed(models.Model):
    pendaftaran = models.ForeignKey(Pendaftaran, on_delete=models.CASCADE, null=True, blank=True)
    penerima_informasi = models.CharField(max_length=255, null=True, blank=True)
    bool_diagnosis_wd_dd = models.CharField(max_length=255, null=True, blank=True)
    diagnosis_wd_dd = models.CharField(max_length=255, null=True, blank=True)
    bool_dasar_diagnosis = models.CharField(max_length=255, null=True, blank=True)
    dasar_diagnosis = models.CharField(max_length=255, null=True, blank=True)
    bool_tindakan_kedokteran = models.CharField(max_length=255, null=True, blank=True)
    tindakan_kedokteran = models.CharField(max_length=255, null=True, blank=True)
    bool_indikasi_tindakan = models.CharField(max_length=255, null=True, blank=True)
    indikasi_tindakan = models.CharField(max_length=255, null=True, blank=True)
    bool_tata_cara = models.CharField(max_length=255, null=True, blank=True)
    tata_cara = models.CharField(max_length=255, null=True, blank=True)
    bool_tujuan = models.CharField(max_length=255, null=True, blank=True)
    tujuan = models.CharField(max_length=255, null=True, blank=True)
    bool_resiko = models.CharField(max_length=255, null=True, blank=True)
    resiko = models.CharField(max_length=255, null=True, blank=True)
    bool_komplikasi = models.CharField(max_length=255, null=True, blank=True)
    komplikasi = models.CharField(max_length=255, null=True, blank=True)
    bool_prognosis = models.CharField(max_length=255, null=True, blank=True)
    prognosis = models.CharField(max_length=255, null=True, blank=True)
    bool_alternatif_dan_risiko = models.CharField(max_length=255, null=True, blank=True)
    alternatif_dan_risiko = models.CharField(max_length=255, null=True, blank=True)
    bool_lain_lain = models.CharField(max_length=255, null=True, blank=True)
    lain_lain = models.CharField(max_length=255, null=True, blank=True)
    tanda_tangan_dokter = models.FileField(upload_to='ttd_dokter', null=True, blank=True)
    nama_tanda_tangan_penerima_penjelasan = models.CharField(max_length=255, null=True, blank=True)
    tanda_tangan_penerima_penjelasan = models.FileField(upload_to='ttd_penerima_informasi', null=True, blank=True)

    def __str__(self):
        return f'{self.penerima_informasi}'

    class Meta:
        verbose_name = 'Informed'
        verbose_name_plural = 'Informed'


class Consent(models.Model):
    pendaftaran = models.ForeignKey(Pendaftaran, on_delete=models.CASCADE, null=True, blank=True)
    nama_penanda_tangan = models.CharField(max_length=255, null=True, blank=True)
    tanggal_lahir = models.CharField(max_length=255, null=True, blank=True)
    jenis_kelamin = models.CharField(max_length=255, null=True, blank=True)
    alamat = models.CharField(max_length=255, null=True, blank=True)
    tindakan = models.CharField(max_length=255, null=True, blank=True)
    terhadap = models.CharField(max_length=255, null=True, blank=True)
    tanda_tangan_dokter = models.FileField(upload_to='ttd_dokter', null=True, blank=True)
    nama_tanda_tangan_penerima_penjelasan = models.CharField(max_length=255, null=True, blank=True)
    tanda_tangan_penerima_penjelasan = models.FileField(upload_to='ttd_penerima_informasi', null=True, blank=True)

    def __str__(self):
        return f'{self.nama_penanda_tangan}'

    class Meta:
        verbose_name = 'Consent'
        verbose_name_plural = 'Consent'


class Refusal(models.Model):
    pendaftaran = models.ForeignKey(Pendaftaran, on_delete=models.CASCADE, null=True, blank=True)
    nama_penanda_tangan = models.CharField(max_length=255, null=True, blank=True)
    tanggal_lahir = models.CharField(max_length=255, null=True, blank=True)
    jenis_kelamin = models.CharField(max_length=255, null=True, blank=True)
    alamat = models.CharField(max_length=255, null=True, blank=True)
    tindakan = models.CharField(max_length=255, null=True, blank=True)
    terhadap = models.CharField(max_length=255, null=True, blank=True)
    tanda_tangan_dokter = models.FileField(upload_to='ttd_dokter', null=True, blank=True)
    nama_tanda_tangan_penerima_penjelasan = models.CharField(max_length=255, null=True, blank=True)
    tanda_tangan_penerima_penjelasan = models.FileField(upload_to='ttd_penerima_informasi', null=True, blank=True)

    def __str__(self):
        return f'{self.nama_penanda_tangan}'

    class Meta:
        verbose_name = 'Refusal'
        verbose_name_plural = 'Refusal'


class Icd10(models.Model):
    kode = models.CharField(max_length=255, null=True, blank=True)
    diagnosa = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.CharField(max_length=255, null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.kode} {self.diagnosa} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'ICD 10'
        verbose_name_plural = 'ICD 10'


class InputIcd10(models.Model):
    kode = models.CharField(max_length=255, null=True, blank=True)
    icd10 = models.ForeignKey(Icd10, on_delete=models.SET_NULL, null=True, blank=True)
    pendaftaran = models.ForeignKey(Pendaftaran, on_delete=models.SET_NULL, null=True, blank=True)
    progress = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)
    petugas = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True)

    def __str__(self):
        return f'{self.kode} {self.progress} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'Input ICD 10'
        verbose_name_plural = 'Input ICD 10'


class Icd9(models.Model):
    kode = models.CharField(max_length=255, null=True, blank=True)
    tindakan = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.CharField(max_length=255, null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.kode} {self.tindakan} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'ICD 9 CM'
        verbose_name_plural = 'ICD 9 CM'


class InputIcd9(models.Model):
    kode = models.CharField(max_length=255, null=True, blank=True)
    icd10 = models.ForeignKey(Icd10, on_delete=models.SET_NULL, null=True, blank=True)
    pendaftaran = models.ForeignKey(Pendaftaran, on_delete=models.SET_NULL, null=True, blank=True)
    progress = models.CharField(max_length=255, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)
    petugas = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True)

    def __str__(self):
        return f'{self.kode} {self.progress} {self.catatan} {self.created_at}'

    class Meta:
        verbose_name = 'Input ICD 9 CM'
        verbose_name_plural = 'Input ICD 9 CM'


class LogPendaftaran(models.Model):
    pendaftaran = models.ForeignKey(Pendaftaran, on_delete=models.SET_NULL, null=True, blank=True)
    catatan = models.TextField(null=True, blank=True)
    status = models.CharField(max_length=255, null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.pendaftaran} {self.catatan} {self.status} {self.created_at}'

    class Meta:
        verbose_name = 'Log Pendaftaran'
        verbose_name_plural = 'Log Pendaftaran'

class PemeriksaanPendaftaranViews(models.Model):
    id = models.AutoField(primary_key=True)
    nomor_rekam_medis = models.CharField(max_length=255)
    nama_pasien = models.CharField(max_length=255)
    alamat = models.TextField()
    tanggal_lahir = models.DateField()
    created_at = models.DateTimeField(max_length=255, null=True, blank=True)
    status = models.CharField(max_length=255)
    status_plan = models.CharField(max_length=255)
    pasien_status = models.CharField(max_length=255)
    pasien_id = models.CharField(max_length=255)
    dokter_id = models.CharField(max_length=255)
    is_new_pasien = models.BooleanField()

    nomor_induk_kependudukan = models.CharField(max_length=255)
    nomor_kartu_bpjs = models.CharField(max_length=255)

    satusehat_id = models.CharField(max_length=255)
    satusehat_name = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'pemeriksaan_pendaftaran_views'

class BiodataSatusehat(models.Model):
    patient_id = models.CharField(max_length=255)
    nik = models.CharField(max_length=255)
    no_rm = models.CharField(max_length=255)
    noka_bpjs = models.CharField(max_length=255)
    satusehat_id = models.CharField(max_length=255)
    satusehat_name = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'biodata_satusehat'

class Odontogram(models.Model):
    id = models.AutoField(primary_key=True)
    pendaftaran = models.ForeignKey(Pendaftaran, on_delete=models.CASCADE, null=True, blank=True)
    no_gigi = models.CharField(max_length=255)
    ext = models.TextField()
    base = models.TextField()
    center = models.CharField(max_length=255)
    left = models.CharField(max_length=255)
    right = models.CharField(max_length=255)
    bottom = models.CharField(max_length=255)
    top = models.CharField(max_length=255)
    status = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'pemeriksaan_odontogram'

class Provinsi(models.Model):
    kode = models.CharField(max_length=255, null=True, blank=True)
    nama = models.CharField(max_length=255, null=True, blank=True)    

    def _str_(self):
        return f"{self.kode} - {self.nama}"
        
    class Meta:
        managed = False
        db_table = 'pemeriksaan_provinsi'

class Kabupaten(models.Model):
    parent_id = models.CharField(max_length=255, null=True, blank=True)
    kode = models.CharField(max_length=255, null=True, blank=True)
    nama = models.CharField(max_length=255, null=True, blank=True)    

    def _str_(self):
        return f"{self.kode} - {self.nama}"
        
    class Meta:
        managed = False
        db_table = 'pemeriksaan_kabupaten'

class Kecamatan(models.Model):
    parent_id = models.CharField(max_length=255, null=True, blank=True)
    kode = models.CharField(max_length=255, null=True, blank=True)
    nama = models.CharField(max_length=255, null=True, blank=True)    

    def _str_(self):
        return f"{self.kode} - {self.nama}"
        
    class Meta:
        managed = False
        db_table = 'pemeriksaan_kecamatan'

class Desa(models.Model):
    parent_id = models.CharField(max_length=255, null=True, blank=True)
    kode = models.CharField(max_length=255, null=True, blank=True)
    nama = models.CharField(max_length=255, null=True, blank=True)    

    def _str_(self):
        return f"{self.kode} - {self.nama}"
        
    class Meta:
        managed = False
        db_table = 'pemeriksaan_desa'

class Checkeropname(models.Model):
    id = models.AutoField(primary_key=True)
    created_by = models.CharField(max_length=255)
    deskripsi = models.TextField()
    created_at = models.DateTimeField(max_length=255, null=True, blank=True, default=timezone.now)
    end_date = models.DateTimeField(max_length=255, null=True, blank=True)

    class Meta:
        managed = False
        db_table = 'pemeriksaan_checkeropname'

class Opname(models.Model):
    id = models.AutoField(primary_key=True)
    nama = models.CharField(max_length=255)
    checker_id = models.IntegerField()
    stok_sistem = models.IntegerField()
    real_stok = models.FloatField()
    status = models.FloatField()
    note = models.TextField()
    kesesuaian = models.IntegerField(null=True, blank=True, default=None)
    end_date = models.DateTimeField(max_length=255, null=True, blank=True, default=timezone.now)

    class Meta:
        managed = False
        db_table = 'pemeriksaan_opname'

class PendaftaranViews(models.Model):
    id = models.AutoField(primary_key=True)
    kode_booking = models.CharField(max_length=255)
    bb = models.CharField(max_length=255)
    ruang_rawat_pasien = models.CharField(max_length=255)
    nomor_rekam_medis = models.CharField(max_length=255)
    nama_pasien = models.CharField(max_length=255)
    nama_dokter = models.CharField(max_length=255)
    nama_admin = models.CharField(max_length=255)
    nama_perawat = models.CharField(max_length=255)
    nama_farmasi = models.CharField(max_length=255)
    nama_lab = models.CharField(max_length=255)
    alamat = models.TextField()
    tanggal_lahir = models.DateField()
    created_at = models.DateTimeField(max_length=255, null=True, blank=True)
    waktu_kontrol = models.DateTimeField(null=True, blank=True)
    kontak = models.CharField(max_length=255)
    status = models.CharField(max_length=255)
    status_plan = models.CharField(max_length=255)
    poli_nama = models.CharField(max_length=255)
    is_dibayar = models.CharField(max_length=255)
    cara_bayar = models.CharField(max_length=255)
    dokter_id = models.CharField(max_length=255)
    petugas_id = models.CharField(max_length=255)
    user_perawat_id = models.CharField(max_length=255)
    user_farmasi_id = models.CharField(max_length=255)
    user_lab_id = models.CharField(max_length=255)
    pasien_id = models.CharField(max_length=255)
    tindakan = models.CharField(max_length=255)
    tb = models.CharField(max_length=255)
    tensi = models.CharField(max_length=255)
    jenis_kelamin = models.CharField(max_length=255)
    is_new_pasien = models.CharField(max_length=255)
    tindakan_lab = models.CharField(max_length=255)
    is_dp = models.CharField(max_length=255)
    admin_jasmed = models.CharField(max_length=255)
    dokter_jasmed = models.CharField(max_length=255)
    perawat_jasmed = models.CharField(max_length=255)
    farmasi_jasmed = models.CharField(max_length=255)
    lab_jasmed = models.CharField(max_length=255)
    harga_layanan = models.CharField(max_length=255)
    harga_layanan_real = models.CharField(max_length=255)
    pekerjaan = models.CharField(max_length=255)
    

    class Meta:
        managed = False  # This is not managed by Django migrations
        db_table = 'pendaftaran_views'

class Bidan(models.Model):
    id = models.AutoField(primary_key=True)
    petugas = models.ForeignKey(Biodata, on_delete=models.SET_NULL, null=True, blank=True)
    pendaftaran = models.ForeignKey(Pendaftaran, on_delete=models.CASCADE, null=True, blank=True)
    problem = models.CharField(max_length=255)
    hpht = models.CharField(max_length=255)
    gravida = models.CharField(max_length=255)
    riwayat_obstetri = models.CharField(max_length=255)
    penunjang = models.CharField(max_length=255)
    pemeriksaan = models.CharField(max_length=255)
    tfu = models.CharField(max_length=255)
    pd = models.CharField(max_length=255)
    ketuban = models.CharField(max_length=255)
    usia_kehamilan = models.CharField(max_length=255)
    terapi_saat_ini = models.CharField(max_length=255)
    djj = models.CharField(max_length=255)
    portio = models.CharField(max_length=255)
    presentasi = models.CharField(max_length=255)
    his = models.CharField(max_length=255)
    pembukaan = models.CharField(max_length=255)
    asesmen_bidan = models.CharField(max_length=255)
    rekomendasi = models.CharField(max_length=255)

    def _str_(self):
        return f'{self.id} {self.petugas}'

    class Meta:
        managed = False
        db_table = 'pemeriksaan_bidan'

class PemeriksaanLabUmum(models.Model):
    parent_id = models.IntegerField()
    name = models.CharField(max_length=255)
    is_active = models.CharField(max_length=255)
    satuan = models.CharField(max_length=255)
    normal_value = models.CharField(max_length=255)
    note = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(max_length=255, null=True, blank=True)
    class Meta:
        managed = False  # This is not managed by Django migrations
        db_table = 'pemeriksaan_lab_umum'

class PemeriksaanLabUmumHistory(models.Model):
    lab_id = models.IntegerField()
    pemeriksaan_lab = models.ForeignKey(PemeriksaanLabUmum, on_delete=models.SET_NULL, null=True, blank=True)
    pendaftaran_id = models.IntegerField()
    hasil = models.CharField(max_length=255)
    note = models.CharField(max_length=255)
    created_at = models.DateTimeField(max_length=255, null=True, blank=True)
    updated_at = models.DateTimeField(max_length=255, null=True, blank=True)
    class Meta:
        managed = False  # This is not managed by Django migrations
        db_table = 'pemeriksaan_lab_umum_history'


class PemeriksaanLabTripleE(models.Model):
    parent_id = models.IntegerField()
    name = models.CharField(max_length=255)
    is_active = models.CharField(max_length=255)
    satuan = models.CharField(max_length=255)
    normal_value = models.CharField(max_length=255)
    note = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(max_length=255, null=True, blank=True)
    class Meta:
        managed = False  # This is not managed by Django migrations
        db_table = 'pemeriksaan_lab_triplee'

class PemeriksaanLabTripleEHistory(models.Model):
    lab_id = models.IntegerField()
    pemeriksaan_lab = models.ForeignKey(PemeriksaanLabTripleE, on_delete=models.SET_NULL, null=True, blank=True)
    pendaftaran_id = models.IntegerField()
    hasil = models.CharField(max_length=255)
    note = models.CharField(max_length=255)
    created_at = models.DateTimeField(max_length=255, null=True, blank=True)
    updated_at = models.DateTimeField(max_length=255, null=True, blank=True)
    class Meta:
        managed = False  # This is not managed by Django migrations
        db_table = 'pemeriksaan_lab_triplee_history'

class Pekerjaan(models.Model):
    nama = models.CharField(max_length=255, null=True, blank=True)    

    def _str_(self):
        return f"{self.kode} - {self.nama}"
        
    class Meta:
        managed = False
        db_table = 'pemeriksaan_pekerjaan'