# DICOM Migration REST API A simple REST API that triggers DICOM study migration for a specific Accession Number. ## How to Run ```bash # Start the server on default port 8000 python run.py # Custom port python run.py --port 9000 # Custom token python run.py --token your-secure-token # Development mode with auto-reload python run.py --reload ``` ## How to Use ### Make a Request ```bash # Using curl curl -X POST "http://localhost:8000/migrate/R.20240401.0138" \ -H "Authorization: Bearer token-his2-untuk-hit-api-migrasi-clarity" \ -H "Content-Type: application/json" ``` ### Response Success Example ```json { "success":true, "message":"Berhasil migrasi file DICOM Accession Number: R.20240401.0138", "details": { "accession_number":"R.20240401.0138", "process_start_time":"2025-07-11 15:27:26", "steps_completed":[ "study_found","study_retrieved","study_sent","log_created","his_api_success","cleanup_success" ], "study_uid":"1.2.826.1.3680043.9.5282.150415.544835.202404010138", "patient_id":"00544835", "study_description":"A103 - Thorax PA", "instances_retrieved":4, "files_sent":2, "total_files":2, "c_store_success":true, "series_count":4, "his_api_status_code":200, "his_integration_success":true, "cleanup_success":true, "process_end_time":"2025-07-11 15:27:46" } } ``` ### Response Failed Example Kalau sudah ada di tabel HIS: ```json { "success":true, "message":"Berhasil migrasi file DICOM tetapi gagal update HIS: ERR: Accession No. R.20240401.0142 sudah ada ke table `pacs_order_mwl`!", "details":{ "accession_number":"R.20240401.0142", "process_start_time":"2025-07-11 16:05:10", "steps_completed":[ "study_found","study_retrieved","study_sent","log_created","his_api_failed","cleanup_success" ], "study_uid":"1.2.826.1.3680043.9.5282.150415.204342.202404010142", "patient_id":"00204342", "study_description":"A103 - Thorax PA", "instances_retrieved":4, "files_sent":2, "total_files":2, "c_store_success":true, "series_count":4, "his_api_status_code":406, "his_integration_success":false, "his_error":"ERR: Accession No. R.20240401.0142 sudah ada ke table `pacs_order_mwl`!","cleanup_success":true, "process_end_time":"2025-07-11 16:05:12" } } ``` ## Logs - Main API logs: `logs/api.log` - Process details: `logs/api_process.log` ## Simple Workflow 1. API receives request with accession number 2. Finds study UID using C-FIND 3. Downloads DICOM files using C-GET 4. Uploads files to destination PACS using C-STORE 5. Updates HIS system via API call 6. Cleans up all temporary DICOM files 7. Returns success/failure response ## Troubleshooting Tips - Check PACS connectivity in `config/settings.py` - Verify the accession number exists in source PACS - Ensure permissions for log directories - Check both log files for detailed error messages - Verify HIS API connectivity for end-to-end success ## Quick Test 1. Start the server: ```bash python run.py ``` 2. In another terminal, test the root endpoint: ```bash curl http://localhost:8000/ ``` 3. Test migration with a valid accession number: ```bash curl -X POST "http://localhost:8000/migrate/R.20240401.0138" \ -H "Authorization: Bearer token-his2-untuk-hit-api-migrasi-clarity" ``` ## Deploy Systemd Service 1. Create a service file: ```bash sudo nano /etc/systemd/system/api-pydicom-migrasi.service ``` 2. Add the following content: ```ini [Unit] Description=DICOM Migration API Service After=network.target [Service] User=pacs Group=pacs WorkingDirectory=/home/pacs/pydicom-migrasi-clarity Environment="PATH=/home/pacs/pydicom-migrasi-clarity/venv/bin" Environment="API_TOKEN=$2y$05$o1Sfikmwynq76PmuBkJeROpS2WcD.Sh4lgrjohMicnlhBlGAt8UAq" ExecStart=/home/pacs/pydicom-migrasi-clarity/venv/bin/python /home/pacs/pydicom-migrasi-clarity/api-app/run.py --host 0.0.0.0 --port 8000 Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target ``` 3. Reload systemd and enable the service: ```bash # Reload the systemd configuration sudo systemctl daemon-reload # Enable the service to start on boot sudo systemctl enable api-pydicom-migrasi.service # Start the service sudo systemctl start api-pydicom-migrasi.service # Check the status sudo systemctl status api-pydicom-migrasi.service ``` 4. Monitor logs: ```bash # View all logs sudo journalctl -u api-pydicom-migrasi.service # Follow logs in real-time sudo journalctl -u api-pydicom-migrasi.service -f ```