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 Waiting → Called → Done. 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: L → M, P → F, 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