Add a diabetic retinopathy screening form and REST API for integrating with a fundus camera in a clinicedc project.
A clinician creates an EyeExamRegister instance in the EDC before the exam. The camera software (fundus-camera-watchdog) resolves the subject, uploads eye images, DICOM files and reports, then checks status.
Requires django>=5.2,<6.1 and djangorestframework>=3.16.0
All endpoints use TokenAuthentication.
GET /api/retinopathy/ping/- Health check. Returns
{"status": "ok"}. POST /api/retinopathy/resolve/Confirm a EyeExamRegister exists for a subject. Payload:
{"subject_identifier": "105-10-0001-2"}Returns
200witheye_exam_register_idanduploadedlist, or404if no session exists.POST /api/retinopathy/<subject_identifier>/<file_type>/Upload a file. Multipart form with
file,capture_datetime, and optionalchecksum(SHA-256). Valid file types:left,right-- eye images (JPEG/PNG)left_dicom,right_dicom-- DICOM filesleft_report,right_report,report-- reports (PDF/HTML)
Multiple files per type are accepted. Files are stored with their original filenames under
<storage_dir>/images/<session_pk>/.GET /api/retinopathy/<subject_identifier>/status/- Session status: uploaded types, missing types, and whether the session is complete.
EyeExamRegister- Created by the clinician in the EDC. Links to
RegisteredSubjectand stores contra-indication screening fields, report type (combined / per-eye), and device ID. SessionFile- One record per uploaded file. Tracks file type, original filename, stored path, content type, size, SHA-256 checksum, and capture timestamp.
EDC_RETINOPATHY_STORAGE_DIR- Base path for file storage. Must contain an
images/subdirectory. EDC_RETINOPATHY_MAX_FILE_SIZE_MB- Maximum upload size in MB (default: 10).
EDC_RETINOPATHY_VISIT_DATETIME_FILTER- Datetime filter for Call List. If set, filters the list of subjects to those who attended AFTER the given datetime.