Paranoidní konvejér pro zpracování MRI: doménový model a smyčka s klinikem
Inženýrský okruh MRI Second Opinion přijímá DICOM data, generuje návrh analýzy v režimech voxel-backed nebo metadata-fallback, prochází bezpečnostní politikou a povinnou lékařskou revizí před finalizací. TypeScript orchestrátor řídí stav případu, Python pracovníci provádějí asynchronní zpracování. Oddělení orchestrace a výpočtů zabraňuje OOM a timeoutům, fixuje události prostřednictvím Event Sourcing + Outbox.
Infrastruktura místo Jupyter skriptů
V reálných klinikách DICOM archivy obsahují soubory bez přípon, vlastní privátní tagy a JPEG 2000 Lossless, které způsobují segfault v knihovnách. Ingestion worker deterministicky rozbaluje data, kontroluje DICOM UID podle PS3.5 §9.1 a vytváří ImagingStudyRef. Při nekompletních snímcích přechází do metadata-fallback: extrahuje klinickou otázku z metadat nebo nastaví zástupnou „Požadováno rutinní posouzení druhého názoru“.
Ingestion a delivery workeři se registrují v DI kontejneru, aktivují se flagem. Jedná se o CDS (Clinical Decision Support), ne SaMD: DomainInvariantViolationError blokuje finalize() bez klinické revize podle FDA CDS guidance section 520(o)(1)(E).
Klíčové etapy konvejéru:
- Python-ingestion: vytvoření případu z DICOM metadat.
- TypeScript-orchestrátor: inicializace
MriSecondOpinionCase. - Python-zpracovatel: návrh ve dvou režimech.
- Bezpečnostní politika: přechod do
AwaitingReview. - Lidská revize: finalizace lékařem.
- Doručení: strukturovaná zpráva.
Přísné invarianty v TypeScriptu
GenerateMriSecondOpinionUseCase aplikuje IClinicalSafetyPolicy s flagy low confidence, significant disagreement, insufficient data. Opírá se o ACR Practice Parameters (Res. 11, 2020). Lékař s rolí Neuroradiologist nebo Attending Physician aktualizuje návrh; agregát fixuje humanReview.modifications odděleně od AI návrhu.
Stroj stavů: 9 stavů (INGESTING → QC_REJECTED, SUBMITTED → AWAITING_REVIEW → REVIEWED → FINALIZED → DELIVERY_PENDING → DELIVERED / DELIVERY_FAILED). 4 řídí doménový agregát, 5 okruh příjmu/doručení.
Oddělení orchestrace a výpočtů
TypeScript API vrací HTTP 200 okamžitě, asynchronní Python zpracovatel bere GPU úlohy. Kontrakty (port, DI token, bezpečnostní politika) umožňují vyměnit adaptér za multimodální engine bez přestavby. Úložiště: SQLite lokálně, PostgreSQL v produkci.
Zpráva se mapuje na HL7 FHIR R4 DiagnosticReport přes ImagingStudyRef, export do DICOM SR (SOP Class 1.2.840.10008.5.1.4.1.1.88.33). RadiologyReportSummary kóduje RadLex (RSNA) a SNOMED CT. Fixace úprav řeší dataset shift/model drift pro budoucí doladění.
Metriky a pozorovatelnost
Prometheus metriky: counters/histogramy pro ingestion/processing/delivery, gauge mri_second_opinion_cases_awaiting_review (podle urgency) a mri_second_opinion_review_wait_started_at_unix. Upozornění na timeouty v AwaitingReview pro kritické případy (mrtvice).
Otevřené repo: testy a workbench
Samostatné repo s Dockerfile, docker-compose, SECURITY.md. 176/177 testů zelených (state machine, PostgreSQL, autorizace). Pozicováno jako clinician-in-the-loop workflow, Research Use Only, bez regulačních povolení.
Možnosti releasu:
- Kompletní lifecycle případu s opakováními a auditem.
- Oddělení TypeScript (orchestrace, validace, UI pro recenzenty) a Python (dispatch, fallback).
- Blokování doručení bez revize.
- Metriky a export do standardů.
Co je důležité
- Konvejér garantuje human-in-the-loop na úrovni kódu, blokuje finalize bez revize.
- Metadata-fallback zabraňuje selháním na poškozených DICOM.
- Oddělení výpočtů a orchestrace usnadňuje výměnu AI adaptéru.
- FHIR/DICOM SR + RadLex/SNOMED zajišťují interoperabilitu.
- Metriky zaměřené na čas revize pro klinické rizika.
— Editorial Team
Zatím žádné komentáře.