11 KiB
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:
barcodelangsung map ke fieldBarcodecreatedAtmap keTanggal_daftarreferencePatientbisa digunakan untuk tracking kunjungan sebelumnya (relasi kedata_kunjungan_antreanlain)
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 lookupprocessStage: "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
- Cari
data_pasienberdasarkanbarcodeatauNomor_rekamedik - Jika tidak ada, buat record baru di
data_pasien
Step 2: Create Kunjungan Antrean
- Insert ke
data_kunjungan_antrean:Barcode=barcodePasien=data_pasien.id(dari step 1)Tanggal_daftar=createdAtStatus_active= 1
Step 3: Create Tempat Layanan
- Lookup
data_jenis_layanan.idberdasarkanklinik(nama klinik) - Lookup
daftar_penjamin.idberdasarkanpembayaran("BPJS" atau "UMUM") - Lookup
data_loket.idberdasarkanloketatauloketId - Insert ke
data_kunjungan_tempat_layanan:Nomor_tiket=noFK_kunjunganantrean_ten=data_kunjungan_antrean.id(dari step 2)Jenis_layanan=data_jenis_layanan.idPenjamin=daftar_penjamin.idLoket=data_loket.idStatus_fasttrack= 1 jikafastTrack= "YA", else 0Status_kunjungan= mapping dariprocessStageataustatusStatus_active= 1
Step 4: Create Panggilan (Jika Ada)
- Insert ke
data_kunjungan_tempat_panggilan:FK_kunjungantempallayana=data_kunjungan_tempat_layanan.id(dari step 3)Jam_panggilan=jamPanggilNama_tempat_panggilan=loketatauklinikStatus_panggilan= mapping berdasarkan contextStatus_kunjungan= mapping dariprocessStageStatus_active= 1
Step 5: Create Detail Status (Optional)
- Insert ke
data_kunjungan_tempat_layanan_detail:FK_kunjungantempallayana=data_kunjungan_tempat_layanan.idTanggal_detail=createdAtStatus_kunjungan= mapping daristatusatauprocessStageStatus_active= 1
Field yang Tidak Langsung Map
Field yang Perlu Lookup/Transform:
klinik→ Perlu lookup kedata_jenis_layanan.idberdasarkan namapembayaran→ Perlu lookup kedaftar_penjamin.idberdasarkan value ("BPJS" atau "UMUM")loket→ Perlu lookup kedata_loket.idberdasarkan nama loketshift→ Perlu lookup kedata_jenis_layanan_shift.idberdasarkan shift dan jadwalstatus→ Perlu mapping ke lookupID: Status_kunjunganprocessStage→ Perlu mapping ke lookupID: Status_kunjunganfastTrack→ Perlu mapping ke lookupID: Status_fasttrack(0 atau 1)
Field yang Hanya untuk Display/Reference:
noAntrian→ Format display, bisa di-generate ulang dariNomor_tiketdanBarcodereferencePatient→ Reference ke kunjungan sebelumnya (relasi kedata_kunjungan_antreanlain)
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
- Foreign Key Lookups: Banyak field yang memerlukan lookup ke tabel lain sebelum insert
- Status Mapping: Field
statusdanprocessStageperlu mapping ke lookup tableID: Status_kunjungan - Default Values: Field yang tidak ada di code perlu diisi dengan default value atau null
- Relasi:
referencePatientbisa digunakan untuk membuat relasi kedata_kunjungan_antreansebelumnya - Shift: Field
shiftperlu diambil daridata_jenis_layanan_shiftberdasarkan jadwal dan jenis layanan