Aplikasi web berbasis PHP untuk simulasi dan integrasi dengan PACS (Picture Archiving and Communication System) server menggunakan dcm4chee-arc dan integrasi dengan API SatuSehat FHIR untuk manajemen data kesehatan di Indonesia.
PACS Simulator adalah aplikasi yang dirancang untuk memfasilitasi interaksi antara sistem radiologi dengan PACS server dan platform SatuSehat. Aplikasi ini menyediakan antarmuka web untuk mengirim dan menerima data DICOM, serta mengintegrasikan data medis dengan standar FHIR melalui API SatuSehat.
- Mengirim data patient ke PACS server (dcm4chee-arc)
- Menyimpan history pengiriman patient
- Validasi data sebelum pengiriman
- Membuat dan mengirim MWL items ke PACS server
- Integrasi dengan master data (AET, Practitioner, Location, Modality)
- Tracking status pengiriman MWL
- Manajemen AET (Application Entity Title)
- Manajemen Practitioner (Referring & Performing Physicians)
- Manajemen Location
- Manajemen Modality
- Manajemen Station Name
-
GET Resources:
- Patient
- Practitioner
- Organization
- Location
- Encounter
- ServiceRequest
- ImagingStudy
-
POST Resources:
- Observation (dengan auto-fill dari ImagingStudy)
- DiagnosticReport (dengan referensi ke Observation)
- ServiceRequest (dengan auto-fill dari Encounter)
-
Fitur Khusus:
- Auto-fill form berdasarkan referensi resource yang dipilih
- Penyimpanan history submission ke database
- Validasi data sebelum pengiriman
- Error handling yang komprehensif
- Penyimpanan data ImagingStudy dari SatuSehat
- Penyimpanan history Observation dan DiagnosticReport submissions
- Penyimpanan data Encounter
- Tracking ServiceRequest submissions
- PHP: >= 7.4 (disarankan PHP 8.0+)
- Database: MySQL 8.0+ atau MariaDB 10.11+
- Web Server: Apache atau Nginx
- PHP Extensions:
curl(untuk API calls)pdodanpdo_mysql(untuk database)json(untuk JSON handling)mbstring(untuk string handling)
- Clone repository:
git clone https://github.com/your-username/pacs-simulator.git
cd pacs-simulator- Setup database:
# Import schema database
mysql -u root -p < database/schema.sql- Konfigurasi aplikasi:
# Edit file config/config.php
# Sesuaikan dengan environment Anda:
# - Database credentials
# - PACS server URL
# - SatuSehat API credentials- Set permissions (jika diperlukan):
# Pastikan web server memiliki akses read ke direktori aplikasi
chmod -R 755 .- Akses aplikasi:
http://localhost/pacs-simulator/
Edit file config/config.php untuk mengatur konfigurasi aplikasi:
return [
'pacs' => [
'base_url' => 'http://your-pacs-server:8081/dcm4chee-arc/aets/WORKLIST',
'patient_endpoint' => '/rs/patients',
'mwl_endpoint' => '/rs/mwlitems',
'timeout' => 30,
],
'database' => [
'host' => 'localhost',
'port' => 3306,
'dbname' => 'pacs_simulator',
'username' => 'your_username',
'password' => 'your_password',
'charset' => 'utf8mb4',
],
'satusehat' => [
'auth_url' => 'https://api-satusehat.kemkes.go.id/oauth2/v1/',
'base_url' => 'https://api-satusehat.kemkes.go.id/fhir-r4/v1/',
'client_id' => 'your_client_id',
'client_secret' => 'your_client_secret',
'organization_id' => 'your_organization_id',
],
];config/config.php yang berisi credentials ke repository publik. Gunakan .gitignore atau environment variables untuk production.
pacs-simulator/
βββ assets/ # Asset files (icons, images)
βββ config/ # File konfigurasi
β βββ bootstrap.php # Bootstrap file untuk autoloading
β βββ config.php # Konfigurasi aplikasi
βββ database/ # File SQL schema dan migration
β βββ schema.sql # Schema database utama
β βββ ...
βββ src/ # Source code PHP classes
β βββ Database.php # Database connection handler
β βββ PacsClient.php # Client untuk PACS server
β βββ SatuSehatService.php # Service untuk SatuSehat API
β βββ ImagingStudyRepository.php
β βββ EncounterRepository.php
β βββ ...
βββ index.php # Halaman utama
βββ patient.php # Halaman Patient management
βββ mwl.php # Halaman MWL management
βββ master.php # Halaman Master Data management
βββ satusehat.php # Halaman SatuSehat integration
βββ README.md # Dokumentasi ini
- Buka halaman Patient (
patient.php) - Isi form dengan data patient
- Klik Kirim Patient
- Cek status pengiriman di history
- Buka halaman MWL (
mwl.php) - Pilih AET, Practitioner, Location, dan Modality dari dropdown
- Isi informasi study
- Klik Kirim MWL
- Cek status di history
- Buka halaman Master Data (
master.php) - Pilih tab sesuai data yang ingin dikelola (AET, Practitioner, Location, dll)
- Tambah, edit, atau nonaktifkan data
- Pilih tab sesuai resource yang ingin diambil (Patient, Practitioner, Encounter, dll)
- Masukkan ID atau parameter pencarian
- Klik Get untuk mengambil data
- Data akan ditampilkan dalam format JSON
POST Observation:
- Pilih ImagingStudy dari dropdown (opsional)
- Form akan terisi otomatis jika ImagingStudy dipilih
- Isi field yang diperlukan (Code, Subject, Encounter, Value String, dll)
- Status, Identifier, dan Category akan diisi otomatis
- Klik Post Observation
POST DiagnosticReport:
- Pilih Observation IDs dari dropdown (multi-select)
- Form akan terisi otomatis berdasarkan Observation yang dipilih
- Isi field yang diperlukan
- Klik Post DiagnosticReport
POST ServiceRequest:
- Pilih Encounter ID dari dropdown
- Form akan terisi otomatis (Patient ID, Occurrence DateTime, Requester)
- Isi field yang diperlukan
- Klik Post ServiceRequest
-
Backend:
- PHP 7.4+
- PDO untuk database access
- cURL untuk HTTP requests
-
Frontend:
- Bootstrap 5
- jQuery
- Select2 (untuk dropdown yang lebih baik)
- Bootstrap Icons
-
Database:
- MySQL/MariaDB
-
Standar:
- DICOM (untuk PACS)
- FHIR R4 (untuk SatuSehat)
Aplikasi menggunakan beberapa tabel utama:
patient_submissions- History pengiriman patientmwl_submissions- History pengiriman MWLaets- Master data AETpractitioners- Master data Practitionerlocations- Master data Locationmodalities- Master data Modalitystation_names- Master data Station Nameimaging_studies- Data ImagingStudy dari SatuSehatobservations- History Observation submissionsdiagnostic_reports- History DiagnosticReport submissionsencounters- Data Encounter dari SatuSehatservicerequest_submissions- History ServiceRequest submissions
- Credential Management: Simpan credentials di
config/config.phpdan jangan commit ke repository publik - SQL Injection: Menggunakan prepared statements (PDO)
- XSS Protection: Output di-escape sebelum ditampilkan
- SSL Verification: Untuk production, aktifkan SSL verification di
SatuSehatService.php
Solusi: Aktifkan extension curl di php.ini:
extension=curlSolusi:
- Periksa credentials di
config/config.php - Pastikan MySQL/MariaDB service berjalan
- Pastikan database
pacs_simulatorsudah dibuat
Solusi:
- Periksa
client_iddanclient_secretdiconfig/config.php - Pastikan credentials valid dan tidak expired
- Periksa koneksi internet ke API SatuSehat
Solusi:
- Periksa URL PACS server di
config/config.php - Pastikan PACS server dapat diakses dari server aplikasi
- Periksa firewall settings
- Fitur dasar Patient dan MWL management
- Integrasi dengan dcm4chee-arc
- Integrasi dengan SatuSehat FHIR API
- Master Data Management
- Auto-fill form untuk Observation, DiagnosticReport, dan ServiceRequest
- Penyimpanan history submissions ke database
Catatan: Aplikasi ini dikembangkan untuk keperluan simulasi dan testing. Pastikan untuk melakukan testing yang memadai sebelum digunakan di environment production.