Lewati ke konten utama

Status & Enum

Daftar lengkap nilai yang diterima setiap kolom berstatus. Di PostgreSQL, sebagian besar ditegakkan CHECK constraint di level database.


BookingRequest

NilaiArtiTerminal di confirmPaid()?
PendingLink terbit, belum dibayar
PaidLunas, janji temu terbit
ExpiredBatas waktu lewat(link lama masih bisa dibayar)
CancelledDigantikan link baru(link lama masih bisa dibayar)
FailedUang masuk, janji temu gagal dibuat

Payment

NilaiArtiBisa dibuka kembali oleh callback lunas?
PendingMenunggu— (belum terminal)
SuccessLunasNo-op (retry biasa)
FailedDitolak Duitku / invoice gagal✅ Ya — Duitku yang menang
ExpiredTebakan lokal: batas waktu lewat✅ Ya — Duitku yang menang
RefundedDikembalikan❌ Tidak — keputusan sadar setelah lunas

payment_method: VA · QRIS · E-Wallet · Credit-Card · BPJS · Cash · null


Billing

Unpaid · Partial · Paid · Refunded · Disputed


Appointment

Scheduled · Confirmed · Completed · Cancelled · Rescheduled

Janji temu yang lahir dari booking berbayar selalu Confirmed. Yang dari SIMRS Sync: Completed bila b_kunjungan.pulang = 1, selain itu Scheduled.


HospitalQueue (queues)

Waiting · Called · In-Service · Done · Skipped

Alur QueueBoardPage hanya memakai WaitingCalledDone. Dua nilai lain tersedia untuk pengisian manual lewat resource Antrian RS.


WhatsappMessage

KolomNilai
directionIN · OUT
message_typeText · Template · Media · Interactive · System · null
statusQueued · Sent · Delivered · Read · Failed
sent_byai · human · system · null

Pesan masuk selalu disimpan sebagai direction=IN, status=Delivered.

sent_by — atribusi pesan keluar

NilaiDiisi olehDipakai untuk
aiWhatsappAutoReplyServicePenanda pemegang "AI"
humanChatRoomService (semua jalur kirim agen) + sent_by_user_idPenanda pemegang bernama, dan menghidupkan "Stop AI When Human Chat"
systemPesan sistem
nullPesan masuk, notifikasi pembayaran, dan baris lamaDiperlakukan sebagai bot saat mengevaluasi behavior
Kolom direction di PostgreSQL ber-padding

direction bertipe CHAR(3), sehingga nilai "IN" dibaca ulang sebagai "IN ". Model memasang accessor/mutator yang mem-trim() nilainya — tanpa itu perbandingan === 'IN' gagal dan pesan masuk dianggap balasan asisten.


Pemegang percakapan (ChatHandlerResolver)

Bukan kolom database — nilai turunan yang ditampilkan di daftar Chat Rooms.

NilaiLabel UIArtinya
noneBelum dibalasBelum ada pesan keluar sama sekali, atau identitasnya tidak bisa dipastikan
botBotAutoresponder Jasnita (user_id = 0), di luar kendali CRM
aiAIBalasan AI Agent kita
humanNama agen, atau "Agen"Diketik manusia — dari Chat Rooms (nama diketahui) atau dari panel Jasnita (nama tidak diketahui)

Pemegang eksplisit (contacts.handled_by)

NilaiEfek
humanAI tidak membalas sama sekali di percakapan ini
ai atau kosongTidak ada takeover; AI boleh membalas bila gerbang lain lolos

Warna label percakapan (chat_labels.color)

gray · red · amber · green · blue · purple · pink


Contact

KolomNilai
chat_statusUnassigned (default saat dibuat) · Assigned · Solved
platformwhatsapp_cloud (default) atau nilai type dari Jasnita

ChatbotSession & ChatbotMessage

ModelKolomNilai
ChatbotSessionstatusActive · Closed · Escalated
ChatbotMessageroleuser · assistant · system

Complaint

KolomNilai
priorityLow · Medium · High · Critical
statusOpen · In-Progress · Resolved · Closed

Keluhan dari tool AI: status=Open, priority default Medium (AI boleh menetapkan Low/Medium/High; nilai lain dipaksa jadi Medium).


Survey

KolomRentang
csat_score1–5 atau null
nps_score0–10 atau null

Tool create_survey menolak kalau ketiganya (csat_score, nps_score, feedback_text) kosong semua.


Patient

KolomNilai
genderM · F · null
loyalty_tierRegular · Silver · Gold · Platinum

Pemetaan dari SIMRS: LM, PF, lainnya → null.


PatientInsurance & InsuranceClaim

ModelKolomNilai
PatientInsurancetypeBPJS · Swasta · Mandiri
InsuranceClaimstatusSubmitted · Processing · Approved · Rejected · Paid

LoyaltyPointsLog

change_type: Earn · Redeem · Expire · Adjust


DoctorSchedule

day_of_week: 0–6


SyncBatch (SIMRS)

NilaiArti
runningSedang berjalan
successSelesai; tombol Rollback muncul
failedGagal atau terputus; run berikutnya melanjutkan dari cursor
rolled_backSudah dibatalkan

trigger_source: manual · schedule


ContactSyncRun

NilaiArti
runningSedang berjalan
successSelesai
failedGagal; pesan error disimpan (maks 2000 karakter)

trigger_source: manual · scheduled


Hasil confirmPaid() (bukan kolom database)

OutcomeArtiTindakan listener
createdJanji temu baru terbitKirim konfirmasi lunas
noopSudah pernah dikonfirmasiTidak mengirim apa pun
failedUang masuk, janji temu gagalKirim pesan tindak lanjut manual + Log::error
noneTidak ada draftKirim konfirmasi reservasi + Log::warning

Kapabilitas Knowledge Data Model AI

KeyKapabilitasEfek
doctorsREADRecord dokter di-dump ke knowledge
polyclinicsREADRecord poliklinik di-dump ke knowledge
packagesREADRecord paket layanan di-dump ke knowledge
appointmentsWRITETool create_appointment + check_payment_status
complaintsWRITETool create_complaint
surveysWRITETool create_survey

Model WRITE tidak pernah di-dump ke knowledge. Model sensitif (User, Patient, Contact, Setting, FollowUpManagement) tidak ada di katalog sama sekali.


Provider LLM

KeyModel default
openaigpt-4o-mini
anthropicclaude-3-5-sonnet-20241022
google_geminigemini-2.5-flash-lite
mistralmistral-small-latest
groqllama-3.3-70b-versatile

Peran (Spatie Role)

super_admin · admin · petugas · dokter · pasien


Gateway provider akun WhatsApp

NilaiEfek
jasnitaMemakai driver ToschatClient (OAuth2). Wajib untuk Chat Rooms & sinkronisasi kontak
lainnyaMemakai gerbang HTTP generik (sendViaGenericGateway) — hanya kirim teks