8.9 KiB
pacs_downloadiso Module — Integration Analysis
Overview
The pacs_downloadiso module (under /data/newsas-git/hisv2/his2_dev_raw/module/pacs_downloadiso/) is the HIS frontend that drives the mkiso scripts. It runs inside the HIS web app and its JavaScript opens new browser windows pointing at scripts on the PACS host.
Two-Server Architecture
┌────────── HIS Server ──────────┐ ┌────── PACS Server ──────┐
│ │ │ │
│ pacs_downloadiso/ │ HTTP │ mkiso.php │
│ index.php (UI) │ ──────→ │ mkiso_multiple.php │
│ pacs_downloadiso.php (API) │ │ send_rimage_multiple.* │
│ │ │ │
│ hiscnf/config.php │ │ ABPACS:11112 │
│ $_PACS_host (PACS server IP)│ │ CDRECORD:10104 │
│ $_PACS │ │ │
│ $_CDPUBLISHER │ │ /usr/local/dcm4che/ │
│ │ │ /usr/bin/genisoimage │
│ DB: rsabt201107 (192.168.2.7) │ │ /var/www/html/microdicom│
│ trxdepartemen │ │ │
│ pacs_result_series │ │ pacsdb_his:3306 │
│ regpas / medrec │ │ (192.168.2.7) │
└────────────────────────────────┘ └─────────────────────────┘
- HIS DB (
rsabt201107) — transaction data, patient registration, PACS result tracking - PACS DB (
pacsdb_his) —mkiso_multiple.phpqueries it directly for patient name lookup viaAccessionNumber - Config key:
$_PACS_hostinhiscnf/config.phptells the HIS frontend where the PACS web server is
Endpoints Called by HIS Frontend
| HIS JS Function | HTTP Call | PACS Script | Parameters |
|---|---|---|---|
dowloadiso() |
window.open |
/mkiso.php |
?accession_number=X |
printiso() |
window.open |
/send_rimage_multiple.php |
?accession_number=X |
fn_downloadisomultiple() |
window.open |
/mkiso_multiple.php |
?accession_number=X,Y,Z (JS array .toString()) |
fn_printisomultiple() |
window.open |
/send_rimage_multiple.php |
?accession_number=X,Y,Z (JS array .toString()) |
Single vs Multi accession decision
The HIS UI determines which to call based on how many AccessionNumbers a TrxDepartemenID has:
- 1 AccessionNumber → shows "Download ISO" button → calls
dowloadiso()→/mkiso.php?accession_number=X - >1 AccessionNumber → shows "Download" link → opens multi dialog → calls
fn_downloadisomultiple()→/mkiso_multiple.php?accession_number=X,Y,Z
The decision is made in ambildatapreview() (line ~163 in pacs_downloadiso.php):
if($JumAccessionNo>1){
$Action = "<a href='#' onclick=\"fn_bukadivdownloadmultiple('$row[TrxDepartemenID]')\">...";
} else {
$Action = "<a href='#' onclick=\"fn_bukadivdownload('$pr[AccessionNumber]')\">...";
}
mkiso2.php — NOT Called by HIS
The mkiso2.php script is absent from all HIS integration points. It was found in the local /data/notes/my-task/mkiso/ directory but:
- Not referenced in
pacs_downloadiso/index.php(JS) - Not referenced in
pacs_downloadiso/pacs_downloadiso.php(PHP) - Not mentioned in any config
mkiso2.php is a DICOM relay that fetches from ABPACS@localhost:11112 and forwards to 172.16.0.120:104 using dcmsend. It appears to be a standalone utility, possibly run manually or by cron.
Action: Mark mkiso2.php as lower priority in the migration todo.
send_rimage_multiple.php — Out of Scope
Not present in local mkiso project. This is a CD Publisher print script on the PACS server. It's conditionally shown only when $_CDPUBLISHER=='Y'. Not part of the Java→dcmtk migration.
AJAX API Flow (HIS Backend → PACS Host Resolution)
1. Single download path (dowloadiso())
User clicks "Download ISO"
→ AJAX: pacs_downloadiso.php?exe=cek_data_accessionno&AccessionNumber=X
→ PHP: checks pacs_result_series table for Published='Y'
→ Response: { OK: "OK", PACS_HOST: "192.168.x.x" }
→ JS: window.open("http://{PACS_HOST}/mkiso.php?accession_number=X")
The PACS_HOST comes from hiscnf/config.php ($_PACS_host). The HIS module never constructs a URL with hardcoded PACS IP — it always resolves via AJAX or config.
2. Multi download path (fn_downloadisomultiple())
User clicks "Download ISO" (multi dialog)
→ JS: get_config_pacs() — synchronous AJAX to pacs_downloadiso.php?exe=ambil_config_pacs
→ Response: { PACS_HOST: "192.168.x.x" }
→ JS: collects checked AccessionNumbers from flexigrid
→ JS: window.open("http://{PACS_HOST}/mkiso_multiple.php?accession_number=X,Y,Z")
3. Print ISO paths (printiso() / fn_printisomultiple())
Same pattern but calling /send_rimage_multiple.php instead.
Config Dependencies
The pacs_downloadiso.php backend uses these config variables (from hiscnf/config.php):
| Config Variable | Purpose | Used In |
|---|---|---|
$_PACS |
Must be '1' to enable the module |
cek_setting_pacs(), cek_data_accessionno(), ambil_config_pacs() |
$_PACS_host |
PACS server IP/hostname (where mkiso scripts live) | cek_data_accessionno(), ambil_config_pacs() |
$_CDPUBLISHER |
If 'Y', show "Print ISO" button |
index.php (inline PHP) |
$_RAD_Workorder |
If 1, filter by WorkOrder only |
ambildatapreview() |
$_trxdepartemen_verif |
If 'Y', exclude verification field from query |
ambildatapreview() |
Also includes hiscnf/pacsdownloadiso.config.php — only used for $_CDPUBLISHER.
Database Tables Involved
HIS DB (rsabt201107)
| Table | Role |
|---|---|
trxdepartemen |
Transaction header — RegID, TrxID, Tanggal, DepartemenID, WorkOrder |
trxlayanan |
Links TrxLayananID → TrxDepartemenID |
regpas |
Patient registration — Nama, MEDRECID |
medrec |
Medical records — Nama (patient name) |
departemen |
Department — Nama, ModulExternal, NamaModulExternal |
dokter |
Doctor — Nama |
masterlayanan |
Service catalog — Nama, ModalityCode |
pacs_result_series |
PACS result tracking — AccessionNumber, Published, TrxDepartemenID |
pacs_order_mwl |
PACS worklist — AccessionNumber, TrxDepartemenID |
PACS DB (pacsdb_his on 192.168.2.7)
| Table | Use by mkiso_multiple.php |
|---|---|
pacs_result_series |
Lookup MEDRECID, RegID from AccessionNumber |
medrec |
Lookup Nama (patient name) from MEDRECID |
Key Observations for dcmtk Migration
1. PACS_HOST is a config variable — must update on the PACS server only
The HIS module points to whatever $_PACS_host is. No code changes needed in the HIS module for the mkiso migration. All changes are on the PACS server where mkiso.php, mkiso_multiple.php, and mkiso2.php live.
2. Concurrent requests are possible
Multiple HIS users might click "Download ISO" at once. The current Java-based approach binds to port 10104 (hardcoded). With dcmtk storescp, you need a unique port per request to avoid conflicts.
3. mkiso2.php is standalone — can be batched
Not called by HIS. Can be migrated independently or de-prioritized.
4. send_rimage_multiple.php out of scope
Not part of the mkiso scripts. Leave as-is.
5. No changes to HIS module needed
The AJAX calls pass AccessionNumber as a query parameter to scripts on the PACS host. The mkiso scripts' external interface (GET parameter accession_number) does not change. Only the internal DICOM fetching mechanism changes.
6. Multi-accession parameter format
mkiso_multiple.php receives ?accession_number=X,Y,Z (comma-separated). The mkiso_multiple.php script already handles this format via explode(",", ...). No change needed.
Verification Checklist (Post-Migration)
- HIS preview still shows PACS studies with correct Status and Download buttons
- Single accession download:
window.opento/mkiso.php?accession_number=Xworks - Multi accession download:
window.opento/mkiso_multiple.php?accession_number=X,Y,Zworks - Print ISO (CD Publisher) still works via
/send_rimage_multiple.php - Config check:
cek_setting_pacs()returns OK - AJAX:
cek_data_accessionno()returns correct PACS_HOST and OK status - AJAX:
ambil_config_pacs()returns correct PACS_HOST - No PHP errors in pacs_downloadiso.php after migration