Files
web-antrean/MAPPING_DATA_TO_ERD.md
T
2026-01-14 15:14:07 +07:00

11 KiB

Mapping Data Structure ke ERD

Dokumen ini menjelaskan mapping antara struktur data pasien di queueStore.js (baris 607-622) ke tabel-tabel dalam ERD.

Struktur Data di Code (queueStore.js)

{
  no: newNo,
  jamPanggil: "HH:MM",
  barcode: "26011395625",
  noAntrian: "KL0001 | Klinik - 26011395625",
  shift: "Shift 1",
  klinik: "KANDUNGAN",
  fastTrack: "TIDAK" | "YA",
  pembayaran: "BPJS" | "UMUM",
  status: "di-loket" | "waiting" | ...,
  processStage: "klinik" | "loket" | ...,
  createdAt: "2026-01-13T16:51:35.502Z",
  referencePatient: "UM1001 | Online - 26011395625" | null,
  loket: "Loket A" (optional),
  loketId: 1 (optional)
}

Mapping ke Tabel ERD

1. data_kunjungan_antrean (Tabel Utama Kunjungan)

Field Code Field ERD Keterangan
barcode Barcode Barcode unik pasien (string)
createdAt Tanggal_daftar Tanggal dan waktu pendaftaran antrian
- Pasien FK ke data_pasien.id (harus dicari/lookup berdasarkan barcode atau dibuat baru)
- Tanggal_periksa Tanggal pemeriksaan (bisa sama dengan Tanggal_daftar atau null)
- Tanggal_check_in Tanggal check-in (null jika belum check-in)
- Check_in Status check-in (boolean/flag)
- Surat_rujukan Surat rujukan (null jika tidak ada)
- Surat_kontrol Surat kontrol (null jika tidak ada)
- SEP SEP BPJS (null jika tidak ada)
- Status_active Status aktif (default: 1 = Active)

Catatan:

  • barcode langsung map ke field Barcode
  • createdAt map ke Tanggal_daftar
  • referencePatient bisa digunakan untuk tracking kunjungan sebelumnya (relasi ke data_kunjungan_antrean lain)

2. data_kunjungan_tempat_layanan (Detail Tempat Layanan)

Field Code Field ERD Keterangan
no Nomor_tiket Nomor urut antrian (integer)
noAntrian - Bisa disimpan sebagai informasi tambahan atau di-generate dari Nomor_tiket
klinik Jenis_layanan (?) FK ke data_jenis_layanan.id (harus lookup berdasarkan nama klinik)
pembayaran Penjamin FK ke daftar_penjamin.id (harus lookup: "BPJS" → id penjamin BPJS, "UMUM" → id penjamin UMUM)
loket Loket FK ke data_loket.id (harus lookup berdasarkan nama loket)
loketId Loket FK ke data_loket.id (jika ada, langsung gunakan)
fastTrack Status_fasttrack FK ke lookup ID: Status_fasttrack (1 = True jika "YA", 0 = False jika "TIDAK")
fastTrack Alasan_fasttrack Alasan fast track (string, bisa null jika "TIDAK")
processStage Status_kunjungan FK ke lookup ID: Status_kunjungan (harus mapping: "loket" → 1, "klinik" → 2, dll)
shift - Shift diambil dari data_jenis_layanan_shift berdasarkan jadwal
- FK_kunjunganantrean_ten FK ke data_kunjungan_antrean.id
- Jenis_kunjungan FK ke daftar_jenis_kunjungan.id (default atau lookup)
- Jenis_pelayanan FK ke daftar_jenis_pelayanan.id (bisa dari data_jenis_layanan.Jenis_pelayanan)
- Dokter FK ke data_pegawai.id (null jika belum ditentukan)
- Jam_awal Jam mulai pelayanan (bisa dari jamPanggil atau null)
- Jam_selesai Jam selesai pelayanan (null jika belum selesai)
- Tanggal_ambil_hasil Tanggal ambil hasil (null jika belum)
- Status_active Status aktif (default: 1 = Active)

Mapping Status:

  • status: "di-loket"Status_kunjungan = 1 (LOKET)
  • status: "waiting"Status_kunjungan = 2 (PENDING) atau sesuai lookup
  • processStage: "klinik"Status_kunjungan = 2 (KLINIK)
  • processStage: "loket"Status_kunjungan = 1 (LOKET)

Mapping FastTrack:

  • fastTrack: "YA"Status_fasttrack = 1 (True)
  • fastTrack: "TIDAK"Status_fasttrack = 0 (False)

3. data_kunjungan_tempat_panggilan (Riwayat Panggilan)

Field Code Field ERD Keterangan
jamPanggil Jam_panggilan Jam panggilan pasien (format: "HH:MM")
status Status_panggilan FK ke lookup ID: Status_panggilan (harus mapping berdasarkan context)
processStage Status_kunjungan FK ke lookup ID: Status_kunjungan
- Nama_tempat_panggilan Nama tempat panggilan (bisa dari loket atau klinik)
- FK_kunjungantempallayana FK ke data_kunjungan_tempat_layanan.id
- Status_active Status aktif (default: 1 = Active)

Mapping Status Panggilan:

  • Panggilan di Anjungan → Status_panggilan = 1 (ANJUNGAN)
  • Panggilan di Pendaftaran → Status_panggilan = 2 (PENDAFTARAN)
  • Panggilan di Pelayanan → Status_panggilan = 3 (PELAYANAN)
  • Panggilan ambil hasil → Status_panggilan = 4 (AMBIL HASIL)

4. data_kunjungan_tempat_layanan_detail (Detail Status Kunjungan)

Field Code Field ERD Keterangan
createdAt Tanggal_detail Tanggal detail status (bisa dari createdAt)
status Status_kunjungan FK ke lookup ID: Status_kunjungan
- FK_kunjungantempallayana FK ke data_kunjungan_tempat_layanan.id
- Status_active Status aktif (default: 1 = Active)

Catatan: Tabel ini untuk tracking perubahan status kunjungan dari waktu ke waktu.


5. data_pasien (Data Pasien - Jika Belum Ada)

Field Code Field ERD Keterangan
barcode Nomor_rekamedik Bisa digunakan sebagai nomor rekam medis sementara
- Nama Nama pasien (harus diinput atau dari sistem lain)
- Nomor_identitas NIK/KTP (harus diinput atau dari sistem lain)
- Nomor_bpjs Nomor BPJS (jika pembayaran = "BPJS")
- Status_antrean Status antrian pasien
- Status_active Status aktif (default: 1 = Active)

Catatan: Jika pasien belum ada di database, harus dibuat record baru di data_pasien terlebih dahulu.


6. Lookup Tables yang Digunakan

ID: Status_fasttrack

  • 0: False
  • 1: True

ID: Status_kunjungan

  • 1: LOKET
  • 2: KLINIK
  • 3: FARMASI
  • 4: PENUNJANG
  • 5: RAWAT INAP

Atau (versi status):

  • 1: ACTIVE
  • 2: PENDING
  • 3: TERLAMBAT
  • 4: KONSUL
  • 5: BATAL
  • 6: GAGAL
  • 7: AMBIL HASIL
  • 8: SELESAI PELAYANAN

ID: Status_panggilan

  • 1: ANJUNGAN
  • 2: PENDAFTARAN
  • 3: PELAYANAN
  • 4: AMBIL HASIL

ID: Status_active

  • 0: Disabled
  • 1: Active

Alur Penyimpanan Data

Step 1: Cek/Create Pasien

  1. Cari data_pasien berdasarkan barcode atau Nomor_rekamedik
  2. Jika tidak ada, buat record baru di data_pasien

Step 2: Create Kunjungan Antrean

  1. Insert ke data_kunjungan_antrean:
    • Barcode = barcode
    • Pasien = data_pasien.id (dari step 1)
    • Tanggal_daftar = createdAt
    • Status_active = 1

Step 3: Create Tempat Layanan

  1. Lookup data_jenis_layanan.id berdasarkan klinik (nama klinik)
  2. Lookup daftar_penjamin.id berdasarkan pembayaran ("BPJS" atau "UMUM")
  3. Lookup data_loket.id berdasarkan loket atau loketId
  4. Insert ke data_kunjungan_tempat_layanan:
    • Nomor_tiket = no
    • FK_kunjunganantrean_ten = data_kunjungan_antrean.id (dari step 2)
    • Jenis_layanan = data_jenis_layanan.id
    • Penjamin = daftar_penjamin.id
    • Loket = data_loket.id
    • Status_fasttrack = 1 jika fastTrack = "YA", else 0
    • Status_kunjungan = mapping dari processStage atau status
    • Status_active = 1

Step 4: Create Panggilan (Jika Ada)

  1. Insert ke data_kunjungan_tempat_panggilan:
    • FK_kunjungantempallayana = data_kunjungan_tempat_layanan.id (dari step 3)
    • Jam_panggilan = jamPanggil
    • Nama_tempat_panggilan = loket atau klinik
    • Status_panggilan = mapping berdasarkan context
    • Status_kunjungan = mapping dari processStage
    • Status_active = 1

Step 5: Create Detail Status (Optional)

  1. Insert ke data_kunjungan_tempat_layanan_detail:
    • FK_kunjungantempallayana = data_kunjungan_tempat_layanan.id
    • Tanggal_detail = createdAt
    • Status_kunjungan = mapping dari status atau processStage
    • Status_active = 1

Field yang Tidak Langsung Map

Field yang Perlu Lookup/Transform:

  1. klinik → Perlu lookup ke data_jenis_layanan.id berdasarkan nama
  2. pembayaran → Perlu lookup ke daftar_penjamin.id berdasarkan value ("BPJS" atau "UMUM")
  3. loket → Perlu lookup ke data_loket.id berdasarkan nama loket
  4. shift → Perlu lookup ke data_jenis_layanan_shift.id berdasarkan shift dan jadwal
  5. status → Perlu mapping ke lookup ID: Status_kunjungan
  6. processStage → Perlu mapping ke lookup ID: Status_kunjungan
  7. fastTrack → Perlu mapping ke lookup ID: Status_fasttrack (0 atau 1)

Field yang Hanya untuk Display/Reference:

  1. noAntrian → Format display, bisa di-generate ulang dari Nomor_tiket dan Barcode
  2. referencePatient → Reference ke kunjungan sebelumnya (relasi ke data_kunjungan_antrean lain)

Contoh Mapping Lengkap

Input Data:

{
  no: 1,
  jamPanggil: "12:49",
  barcode: "26011395625",
  noAntrian: "UM1001 | Online - 26011395625",
  shift: "Shift 1",
  klinik: "KANDUNGAN",
  fastTrack: "YA",
  pembayaran: "BPJS",
  status: "di-loket",
  processStage: "loket",
  createdAt: "2026-01-13T16:51:35.502Z",
  loket: "Loket A",
  loketId: 1
}

Output ke Database:

data_kunjungan_antrean:

INSERT INTO data_kunjungan_antrean (
  Barcode, 
  Pasien, 
  Tanggal_daftar, 
  Status_active
) VALUES (
  '26011395625',
  [data_pasien.id], -- dari lookup
  '2026-01-13T16:51:35.502Z',
  1
);

data_kunjungan_tempat_layanan:

INSERT INTO data_kunjungan_tempat_layanan (
  Nomor_tiket,
  FK_kunjunganantrean_ten,
  Penjamin, -- lookup dari "BPJS"
  Jenis_layanan, -- lookup dari "KANDUNGAN"
  Loket, -- lookup dari "Loket A" atau langsung 1
  Status_fasttrack, -- 1 (karena "YA")
  Status_kunjungan, -- 1 (karena "loket" → LOKET)
  Status_active
) VALUES (
  1,
  [data_kunjungan_antrean.id],
  [daftar_penjamin.id WHERE Penjamin = 'BPJS'],
  [data_jenis_layanan.id WHERE Nama_jenis_layanan = 'KANDUNGAN'],
  1,
  1,
  1,
  1
);

data_kunjungan_tempat_panggilan:

INSERT INTO data_kunjungan_tempat_panggilan (
  FK_kunjungantempallayana,
  Jam_panggilan,
  Nama_tempat_panggilan,
  Status_panggilan, -- 2 (PENDAFTARAN) atau sesuai context
  Status_kunjungan, -- 1 (LOKET)
  Status_active
) VALUES (
  [data_kunjungan_tempat_layanan.id],
  '12:49',
  'Loket A',
  2, -- PENDAFTARAN
  1, -- LOKET
  1
);

Catatan Penting

  1. Foreign Key Lookups: Banyak field yang memerlukan lookup ke tabel lain sebelum insert
  2. Status Mapping: Field status dan processStage perlu mapping ke lookup table ID: Status_kunjungan
  3. Default Values: Field yang tidak ada di code perlu diisi dengan default value atau null
  4. Relasi: referencePatient bisa digunakan untuk membuat relasi ke data_kunjungan_antrean sebelumnya
  5. Shift: Field shift perlu diambil dari data_jenis_layanan_shift berdasarkan jadwal dan jenis layanan