HealthTech RadReport · Yakaza

DICOM-Based Radiology Marketplace

DICOM-native two-sided marketplace built on .NET Core Clean Architecture with event-driven service communication.

DICOM
Imaging standard
2-sided
Marketplace model
Audit
Trail per request
CQRS
Read/write split

Problem

Connecting radiologists and patients around DICOM medical imaging workflows required a scalable, auditable two-sided marketplace.

Solution

Designed a .NET Core platform on Clean Architecture with event-driven service communication, supporting DICOM workflows, role-based access and audit trails.

Architecture

$ render architecture.mmd

flowchart TB
  P[Patient App] --> API[API Gateway]
  R[Radiologist Portal] --> API
  API --> Cases[Case Service<br/>.NET Core]
  API --> Match[Matchmaking Service]
  API --> Pay[Payment Service]
  Cases -- domain events --> Bus{{Event Bus}}
  Bus --> Audit[Audit Log]
  Bus --> Notify[Notification Service]
  Cases --> Store[(DICOM Object Store)]
  Cases --> PG[(PostgreSQL)]
  classDef bus fill:#581c87,stroke:#a855f7,color:#fff
  class Bus bus

Technical decisions

$ git log --oneline decisions/

#01

Domain events over RPC chains

Case state transitions emit events; audit, notifications and payments react independently. No service tightly coupled to another's availability.

#02

Clean Architecture boundaries

Use cases own the workflow; DICOM I/O, persistence and HTTP live in adapter projects. Swapping the storage backend never touched domain code.

#03

Per-request audit trail

Every state change persists who/what/when as an append-only event — required for medical compliance and trivial to query.

Technologies

.NET Core Clean Architecture Event-Driven DICOM

Have a similar challenge?

Let's talk