feat: add CPONE patient registration endpoint
This commit is contained in:
131
README.md
131
README.md
@@ -17,6 +17,14 @@ GET /api/cpone/perusahaan/{id}/group-tarif?group_tarif_id=
|
||||
Authorization: Bearer <your-secure-token>
|
||||
X-RS-Code: <kode-rs>
|
||||
|
||||
GET /api/cpone/doctors?search=&DokterID_in=&page=1&per_page=15
|
||||
GET /api/doctors?search=&DokterID_in=&page=1&per_page=15
|
||||
Authorization: Bearer <your-secure-token>
|
||||
X-RS-Code: <kode-rs>
|
||||
|
||||
Endpoint ini menampilkan daftar dokter aktif dari HIS. Parameter `search` hanya
|
||||
mencari berdasarkan nama dokter atau kode dokter (`DokterID`).
|
||||
|
||||
GET /api/cpone/tarif-kerjasama?search=&perusahaan_id=&tarif_id=&page=1&per_page=15
|
||||
Authorization: Bearer <your-secure-token>
|
||||
|
||||
@@ -64,7 +72,6 @@ Contoh payload pembuatan pasien HIS:
|
||||
|
||||
```json
|
||||
{
|
||||
"rs": "PRIMAYA",
|
||||
"nama": "BUDI SANTOS",
|
||||
"jenis_kelamin": "L",
|
||||
"tgl_lahir": "1990-01-15",
|
||||
@@ -91,6 +98,40 @@ Contoh payload pembuatan pasien HIS:
|
||||
Endpoint mengembalikan `created`, `already_exists`, atau `possible_duplicate`
|
||||
sesuai hasil pemeriksaan identitas dan kemiripan data pasien di HIS.
|
||||
|
||||
Registrasi pasien umum/MCU menggunakan endpoint berikut. Jika `medrec_id` belum
|
||||
diisi dan pasien tidak ditemukan, caller dapat membuat pasien melalui endpoint
|
||||
medrec lalu mengulangi request registrasi. `departemen_id` dapat dikosongkan;
|
||||
middleware akan memakai `CPONE_DEPARTEMEN_ID` dari `.env`.
|
||||
|
||||
```http
|
||||
POST /api/cpone/patients/registration
|
||||
Authorization: Bearer <your-secure-token>
|
||||
X-RS-Code: <kode-rs>
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"medrec_id": "00001234",
|
||||
"nik": "317xxxxxxxxxxxx",
|
||||
"tgl_lahir": "1988-03-03",
|
||||
"tanggal": "2026-09-07",
|
||||
"dokter_id": "D260900003",
|
||||
"jenis_pasien_id": "1",
|
||||
"jenis_reg_id": 2,
|
||||
"periode_tarif_id": "10",
|
||||
"perusahaan_id": "",
|
||||
"asuransi_id": "",
|
||||
"group_tarif_id": "0",
|
||||
"nomer_polis": "",
|
||||
"kelas_id": "Default",
|
||||
"channel": "CPONE"
|
||||
}
|
||||
```
|
||||
|
||||
Endpoint ini idempoten untuk pasien, tanggal, departemen, dan dokter yang sama;
|
||||
registrasi aktif yang sudah ada dikembalikan dengan status `already_registered_visit`.
|
||||
|
||||
Contoh payload registrasi laboratorium:
|
||||
|
||||
```json
|
||||
@@ -154,89 +195,45 @@ bersifat idempoten dan tidak membuat transaksi ganda.
|
||||
|
||||
## Config
|
||||
|
||||
Copy `.env.example` menjadi `.env`, lalu isi koneksi MySQL:
|
||||
Setiap instalasi CPONE hanya terhubung ke satu database HIS. Copy `.env.example`
|
||||
menjadi `.env`, lalu isi kode instance dan koneksi MySQL HIS:
|
||||
|
||||
```text
|
||||
APP_HOST=0.0.0.0
|
||||
APP_PORT=8080
|
||||
CPONE_RS_CODE=AWALBROS_DEV
|
||||
CPONE_DEPARTEMEN_ID=08_01
|
||||
CPONE_DB_HOST=127.0.0.1
|
||||
CPONE_DB_PORT=3306
|
||||
CPONE_DB_DATABASE=cpone_middleware
|
||||
CPONE_DB_USERNAME=root
|
||||
CPONE_DB_DATABASE=nama_database_his
|
||||
CPONE_DB_USERNAME=cpone
|
||||
CPONE_DB_PASSWORD=
|
||||
CPONE_BEARER_TOKEN=replace-with-a-secure-token
|
||||
CPONE_DATABASE_SETTINGS_TOKEN=replace-with-a-different-admin-token
|
||||
CPONE_DATABASE_CREDENTIAL_KEY=replace-with-a-long-random-encryption-key
|
||||
```
|
||||
|
||||
## Multi-database per kode RS
|
||||
`CPONE_DB_*` adalah koneksi database HIS, bukan database management CPONE.
|
||||
Password hanya dibaca dari `.env`; aplikasi tidak menyimpan kredensial database
|
||||
ke database lain.
|
||||
|
||||
Tambahkan atau perbarui koneksi RS melalui API berikut. Koneksi akan dites
|
||||
sebelum disimpan; bila `Ping` gagal, setting tidak disimpan.
|
||||
`CPONE_DEPARTEMEN_ID` adalah `DepartemenID` HIS yang digunakan untuk registrasi
|
||||
laboratorium. Nilai ini diambil dari konfigurasi, sehingga tidak perlu dikirim
|
||||
di payload endpoint registrasi.
|
||||
|
||||
```http
|
||||
POST /api/cpone/database-settings
|
||||
Authorization: Bearer <your-database-settings-token>
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"kode_rs": "PRIMAYA_BEKASI_BARAT",
|
||||
"nama": "Primaya Hospital Bekasi Barat",
|
||||
"host": "10.10.10.20",
|
||||
"port": "3306",
|
||||
"database": "his_bekasi_barat",
|
||||
"username": "cpone",
|
||||
"password": "secret"
|
||||
}
|
||||
```
|
||||
|
||||
Endpoint pengelolaan yang tersedia:
|
||||
|
||||
```text
|
||||
POST /api/cpone/database-settings
|
||||
GET /api/cpone/database-settings
|
||||
GET /api/cpone/database-settings/{kodeRs}
|
||||
```
|
||||
|
||||
Daftar ringkas rumah sakit aktif dapat diambil tanpa memilih database HIS:
|
||||
|
||||
```http
|
||||
GET /api/cpone/hospitals
|
||||
Authorization: Bearer <your-secure-token>
|
||||
```
|
||||
|
||||
Response hanya memuat `kode_rs`, `nama`, dan `status`; rumah sakit nonaktif tidak
|
||||
ditampilkan.
|
||||
|
||||
Saat startup, service otomatis membuat database `CPONE_DB_DATABASE` beserta
|
||||
tabel `hospitals` dan `hospital_databases`. Tidak ada database RS default; semua
|
||||
koneksi HIS harus ditambahkan lewat API. Akun `CPONE_DB_USERNAME` harus memiliki
|
||||
izin `CREATE DATABASE` pada bootstrap pertama; alternatifnya jalankan migration
|
||||
di direktori `database/migrations` secara manual.
|
||||
|
||||
Response list/detail tidak pernah menampilkan password, hanya field
|
||||
`has_password`. Password koneksi RS disimpan terenkripsi AES-GCM menggunakan
|
||||
`CPONE_DATABASE_CREDENTIAL_KEY`. Jangan mengubah key tersebut setelah data mulai
|
||||
disimpan karena password lama tidak akan bisa didekripsi. Jika key belum diisi,
|
||||
service memakai `CPONE_DATABASE_SETTINGS_TOKEN`, lalu `CPONE_BEARER_TOKEN`
|
||||
sebagai fallback; token fallback itu juga tidak boleh diubah tanpa rotasi
|
||||
credential.
|
||||
|
||||
Endpoint pengelolaan memakai `CPONE_DATABASE_SETTINGS_TOKEN`. Jika variabel ini
|
||||
belum diisi, service memakai `CPONE_BEARER_TOKEN` untuk kompatibilitas; gunakan
|
||||
token admin yang berbeda di production.
|
||||
|
||||
Pilih database pada semua endpoint bisnis dengan header:
|
||||
Semua endpoint bisnis tetap membutuhkan header:
|
||||
|
||||
```http
|
||||
X-RS-Code: PRIMAYA_BEKASI_BARAT
|
||||
```
|
||||
|
||||
Sebagai alternatif dapat memakai query `?kode_rs=PRIMAYA_BEKASI_BARAT`.
|
||||
Header memiliki prioritas lebih tinggi daripada query. Response juga memuat
|
||||
header `X-RS-Code` agar koneksi yang terpilih mudah diaudit. Salah satu dari
|
||||
header atau query tersebut wajib dikirim; jika tidak ada, API mengembalikan
|
||||
status `422` dan tidak mengakses database HIS.
|
||||
Sebagai alternatif dapat memakai query `?kode_rs=AWALBROS_DEV`. Header memiliki
|
||||
prioritas lebih tinggi daripada query. Kode tersebut hanya divalidasi terhadap
|
||||
`CPONE_RS_CODE`; kode tidak digunakan untuk memilih database.
|
||||
|
||||
Request tanpa kode mengembalikan `422`, sedangkan kode untuk instance rumah sakit
|
||||
lain mengembalikan `403`. Response sukses tetap mengembalikan header `X-RS-Code`.
|
||||
|
||||
Payload `POST /api/cpone/patients/medrec` tidak lagi membutuhkan field `rs`.
|
||||
Nilai `KodeRS` untuk kebutuhan internal HIS diisi dari `CPONE_RS_CODE`.
|
||||
|
||||
## Run
|
||||
|
||||
|
||||
Reference in New Issue
Block a user